簡體   English   中英

如何將變量設置為 Oracle SQL 中 select 語句的結果

[英]How to set a variable to the result of a select statement in Oracle SQL

我正在嘗試將變量的值設置為簡單的 select 語句的結果。

var datevar varchar(10);
exec :datevar := SELECT trunc(sysdate) from dual;
select :datevar ASOF from dual

我收到以下錯誤消息。 我正在使用 Oracle 12c

在此處輸入圖像描述

如何在不使用 PL/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM