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

Posted

技术标签:

【中文标题】Oracle 声明变量并在另一个选择查询中使用它【英文标题】:Oracle Declare variable and use it in another select query 【发布时间】:2017-10-08 17:04:29 【问题描述】:

Oracle/toad 新手。

我正在定义一个变量并将其值从选择中插入。设置它的值后,我将它用于另一个选择语句。但这给了我错误,并且这个 SELECT 中应该有 INTO 子句

declare  maxLineNo number := 0;

BEGIN
select Max(b.Line_No) into maxLineNo  FROM  Brokerage b   WHERE b.External_App_Id = 3720     AND b.Account_Id = '16970' ;

SELECT b.External_App_Id   -- this select giving erro
         , maxLineNo + 1
         , b.Currency
         , ''
         , CAST( SUM(b.Brokerage_Amt) as VARCHAR2(17))
         , ''
         , ''
         , 1003  -- 1003 for Report summary
         , ''
    FROM  Brokerage b
   WHERE b.External_App_Id = 3720 
   GROUP BY External_App_Id, B.CURRENCY
   ORDER BY 2; 

DBMS_OUTPUT.PUT_LINE(maxLineNo);  -- this is giving value
end;

【问题讨论】:

在 PL/SQL 块中,SELECT 仅适用于 INTO 子句 那你有什么建议?如果关闭块,var MaxLineNo 将无法在外部使用。 另外,对于空白值,最好写 NULL 而不是 ''。 由于第二个 SELECT 中缺少 INTO 子句,上述内容甚至无法编译,我感觉您看到的内容与此无关。将您的 DBMS_OUTPUT.PUT_LINE 更改为 DBMS_OUTPUT.PUT_LINE('Test #1: ' || maxLineNo);,看看您会得到什么。祝你好运。 【参考方案1】:

也许你正在搜索Implicit Statement Results in Oracle Database 12c Release 1:

declare  
  maxLineNo number := 0;
  rc sys_refcursor;
BEGIN
select Max(b.Line_No) into maxLineNo
 FROM  Brokerage b
WHERE b.External_App_Id = 3720     AND b.Account_Id = '16970' ;

open rc for
SELECT b.External_App_Id   -- this select giving erro
         , ''
         , b.Currency
         , ''
         , CAST( SUM(b.Brokerage_Amt) as VARCHAR2(17))
         , ''
         , ''
         , 1003  -- 1003 for Report summary
         , ''
    FROM  Brokerage b
   WHERE b.External_App_Id = 3720 
   GROUP BY External_App_Id, B.CURRENCY
   ORDER BY 2; 

DBMS_OUTPUT.PUT_LINE(maxLineNo);  -- this is giving value

dbms_sql.return_result(rc);
end;

【讨论】:

以上是关于Oracle 声明变量并在另一个选择查询中使用它的主要内容,如果未能解决你的问题,请参考以下文章

如何声明变量并在同一个 Oracle SQL 脚本中使用它?

在 Python 中为 Oracle 选择查询绑定变量

在 oracle 的游标声明查询中使用变量

在 where 子句中使用 Oracle SQL 变量时遇到问题

使用查询声明 pl sql 变量,然后在后续查询中使用

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