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 脚本中使用它?