如何在 Oracle SQL 中将变量设置为 select 语句的结果
Posted
技术标签:
【中文标题】如何在 Oracle SQL 中将变量设置为 select 语句的结果【英文标题】:How to set a variable to the result of a select statement in Oracle SQL 【发布时间】:2020-07-21 06:43:40 【问题描述】:我正在尝试将变量的值设置为简单选择语句的结果。
var datevar varchar(10);
exec :datevar := SELECT trunc(sysdate) from dual;
select :datevar ASOF from dual
我收到以下错误消息。我正在使用 Oracle 12c
如何在不使用 PL/SQL 的情况下使其工作?谢谢
【问题讨论】:
【参考方案1】:嗯,是的,它在 SQL 层不起作用,但在 PL/SQL 中可以。在 SQL*Plus 中,您可以使用 exec
(如您所知)。它有点“取代”begin-end
,让您输入的字母比平时少一些。
因此,在您的示例中:因为它是 PL/SQL,所以您需要 INTO
子句:
SQL> var datevar varchar2(10);
SQL> exec select trunc(sysdate) into :datevar from dual; --> note INTO
PL/SQL procedure successfully completed.
SQL> print datevar
DATEVAR
--------------------------------
21.07.2020
SQL>
exec
的实际作用是
SQL> begin --> behind the scene, EXEC encloses
2 select trunc(sysdate) into :datevar from dual; --> your statement into
3 end; --> BEGIN - END
4 /
PL/SQL procedure successfully completed.
SQL> print datevar
DATEVAR
--------------------------------
21.07.2020
SQL>
最后,回答你的问题:
如何在不使用 PL/SQL 的情况下使其工作?
你不能。
【讨论】:
感谢您的反馈。【参考方案2】:问题是您不能将查询结果应用于 sqlplus 中的变量。
SQL> var datevar varchar(10);
SQL> exec :datevar := '20200721' ;
SQL> select :datevar from dual ;
:DATEVAR
--------------------------------
20200721
您还可以将它们应用于 where 条件的过滤器
SQL> variable v1 varchar2(20)
SQL> exec :v1 := '2015/12/22';
PL/SQL procedure successfully completed.
SQL> select 1 as result from dual where to_date(:v1, 'yyyy/mm/dd') < sysdate;
RESULT
----------
1
但是如果你需要动态地给一个变量赋值,你需要PL/SQL。哪个是正确的方法
SQL> set serveroutput on
SQL> declare
my_var varchar2(10);
begin
select trunc(sysdate) into my_var from dual;
dbms_output.put_line ( my_var );
end;
/
21-JUL-20
PL/SQL procedure successfully completed.
SQL>
【讨论】:
你能接受这个答案吗?将不胜感激以上是关于如何在 Oracle SQL 中将变量设置为 select 语句的结果的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Oracle SQL 中将结果限制为 1 行 [重复]
ORACLE SQL:如何在 Pivot 函数中将 NULL 替换为 0