声明变量并从Oracle中的SELECT查询设置其值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了声明变量并从Oracle中的SELECT查询设置其值相关的知识,希望对你有一定的参考价值。

在SQL Server中我们可以使用:

DECLARE @variable INT;
SELECT @variable= mycolumn from myTable;

我怎样才能在Oracle中做同样的事情?我目前正在尝试以下方法:

DECLARE COMPID VARCHAR2(20);
SELECT companyid INTO COMPID from app where appid='90' and rownum=1;

为什么这不起作用?

答案

SELECT INTO

DECLARE
   the_variable NUMBER;

BEGIN
   SELECT my_column INTO the_variable FROM my_table;
END;

确保查询仅返回单行:

默认情况下,SELECT INTO语句只能返回一行。否则,PL / SQL会引发预定义的异常TOO_MANY_ROWS,并且INTO子句中的变量值是未定义的。确保WHERE子句足够具体,只匹配一行

如果没有返回任何行,PL / SQL将引发NO_DATA_FOUND。在实际可行的情况下,您可以通过选择聚合函数的结果(例如COUNT(*)或AVG())来防止此异常。即使没有符合条件的行,这些函数也可以保证返回单个值。

SELECT ... BULK COLLECT INTO语句可以返回多行。您必须设置集合变量来保存结果。您可以声明关联数组或嵌套表,这些表根据需要增长以保存整个结果集。

隐式游标SQL及其属性%NOTFOUND,%FOUND,%ROWCOUNT和%ISOPEN提供有关SELECT INTO语句执行的信息。

另一答案

不完全确定你是什么,但在PL / SQL中你会很简单

DECLARE
  v_variable INTEGER;
BEGIN
  SELECT mycolumn
    INTO v_variable
    FROM myTable;
END;

奥利。

另一答案

另外一点:

当你从tsql转换为plsql时,你必须担心no_data_found异常

DECLARE
   v_var NUMBER;
BEGIN
   SELECT clmn INTO v_var FROM tbl;
Exception when no_data_found then v_var := null; --what ever handle the exception.
END;

tsql如果no data found那么变量将是null但没有exception

另一答案

ORA-01422:精确提取返回超过请求的行数

如果您没有使用where条件指定确切的记录,您将获得上述异常

DECLARE
     ID NUMBER;
BEGIN
     select eid into id from employee where salary=26500;
     DBMS_OUTPUT.PUT_LINE(ID);
END;
另一答案

用于将单行输出存储到select into查询中的变量中:

声明v_username varchare(20); SELECT用户名为v_username FROM users WHERE user_id ='7';

这会将单个记录的值存储到变量v_username中。


用于将多行输出存储到select into查询中的变量中:

你必须使用listagg函数。 listagg将coloumn的结果行连接成一个coloumn,并且为了区分它们,您可以使用特殊符号。使用下面的查询SELECT listagg(用户名||',')在组内(按用户名排序)到v_username FROM users;

以上是关于声明变量并从Oracle中的SELECT查询设置其值的主要内容,如果未能解决你的问题,请参考以下文章

Oracle 声明变量并在另一个选择查询中使用它

查询oracle数据库时,如何定义变量进行查询

sql中的变量定义

声明变量并在查询 oracle 中使用它们

oracle declare语句中,怎么才能定义一个变量来作为查询条件,代码如下:

oracle sql语法 ①中的:1代表啥;②中声明的变量类型是啥;③中的赋值语法是啥