PL/SQL:USING子句和动态变量

use*_*610 0 oracle plsql

以下存储过程用于获取参数my_seconds,创建日期变量my_date,即当前日期加上(或减去)数字my_seconds,并打印日期.

CREATE OR REPLACE PROCEDURE test (my_seconds NUMBER)
IS    
my_date DATE;
BEGIN    
   execute immediate 'select sysdate + interval '':1'' second from dual' into my_date USING &my_seconds;
   DBMS_OUTPUT.PUT_LINE('DATE:' || my_date);  
END
Run Code Online (Sandbox Code Playgroud)

但是,当编译过程(使用Oracle SQL开发人员)时,它会提示输入my_seconds的值,并且无法正确创建过程.

该怎么做:

execute immediate 'select sysdate + interval '':1'' second from dual' into my_date USING &my_seconds ;
Run Code Online (Sandbox Code Playgroud)

被重写?

谢谢

Ste*_*neM 5

您可以像这样编写程序,而不立即执行:

CREATE OR REPLACE PROCEDURE test (my_seconds NUMBER)
IS    
my_date DATE;
BEGIN    
   select sysdate + my_seconds * interval '1' second into my_date from dual;
   DBMS_OUTPUT.PUT_LINE('DATE:' || my_date);  
END
Run Code Online (Sandbox Code Playgroud)

  • 更短:`my_date:= sysdate + my_seconds*interval'1'second;` (3认同)