如何在存储过程中执行动态 SQL,该存储过程使用定义为每月第一天的变量。 考虑这只是一个例子
Declare
V_frst_day date date :=to_date('01-feb-||extract(year from sysdate));
V_sql_string varchar2(1000);
Begin
V_sql_string :=q'[select '||v_frst_day ||' from dual]';
Pkg.other_procedure(
P_sql_qry => v_sql_string);
End;
/
具体方法如下。
我首先设置环境(日期格式和语言,因为我的数据库说克罗地亚语,而不是英语)。
SQL> alter session set nls_date_format = 'dd.mm.yyyy';
Session altered.
SQL> alter session set nls_date_language = 'english';
Session altered.
SQL> set serveroutput on
因为我没有你的包裹,所以我只是
由于
v_sql_string
现在是正确的(它执行了,对吧?),将其传递给过程。
SQL> declare
2 v_frst_day date := to_date ('01-feb-' || extract (year from sysdate), 'dd-mon-yyyy');
3 v_sql_string varchar2 (1000);
4 v_result date;
5 begin
6 v_sql_string := 'select ' || chr (39) || v_frst_day || chr (39) || ' from dual';
7
8 dbms_output.put_line (v_sql_string);
9
10 execute immediate v_sql_string
11 into v_result;
12
13 dbms_output.put_line ('Result = ' || v_result);
14
15 -- pkg.other_procedure (p_sql_qry => v_sql_string);
16 end;
17 /
select '01.02.2024' from dual
Result = 01.02.2024
PL/SQL procedure successfully completed.
SQL>