[英]How to set a variable to the result of a select statement in Oracle SQL
問題是您不能將查詢結果應用於 sqlplus 中的變量。
SQL> var datevar varchar(10);
SQL> exec :datevar := '20200721' ;
SQL> select :datevar from dual ;
:DATEVAR
--------------------------------
20200721
您還可以將它們應用於條件條件的過濾器
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>
好吧,是的,它在 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 的情況下使其工作?
你不能。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.