我有此过程:
create or replace
PROCEDURE P_P2
IS
v_str varchar2(1000);
v_file_name varchar2(1000);
BEGIN
P_P1(v_str, 'EXPORT_CSV',v_file_name);
v_str := 'select * from H----)';
v_file_name := 'H_'||to_char(sysdate,'DD-MM-YYYY')||'.csv';
END;
执行它时出现错误“ ORA-06561:包DBMS_SQL不支持给定语句”:
Error starting at line : 165 in command -
exec P_P1
Error report -
ORA-06561: given statement is not supported by package DBMS_SQL
ORA-06512: at "SYS.DBMS_SQL", line 1120
ORA-06512: at "BIDB.P_P1", line 40
ORA-06512: at "BIDB.P_P2", line 7
ORA-06512: at line 1
06561. 00000 - "given statement is not supported by package DBMS_SQL"
*Cause: Attempting to parse an unsupported statement using procedure
PARSE provided by package DBMS_SQL.
*Action: Only statements which begin with SELECT, DELETE, INSERT, UPDATE,
LOCK, BEGIN, DECLARE or << (PL/SQL label delimiter) are supported.
我不明白为什么。我在做什么错了?
答案 0 :(得分:2)
您尚未显示P_P1
在做什么,但是从您显示的情况来看,您的P_P2
过程可能只是为时过早;您有一个使用P_P1
作为参数的v_str
调用,但此时为空-您在使用它的调用之后 设置它。
这意味着P_P1
中的某个地方您可能最终会执行以下操作:
dbms_sql.parse(c, null, dbms_sql.native);
会引发您看到的错误。您对v_filename
进行的操作可能会导致其他问题。
因此,一开始,请交换这些行,以便将该过程称为last:
create or replace
PROCEDURE P_P2
IS
v_str varchar2(1000);
v_file_name varchar2(1000);
BEGIN
v_str := 'select * from H----)';
v_file_name := 'H_'||to_char(sysdate,'DD-MM-YYYY')||'.csv';
-- call this AFTER populating the variables
P_P1(v_str, 'EXPORT_CSV',v_file_name);
END;
/
当然,您可能还有其他问题-由于破折号和右括号,表名看起来很奇怪;但您可能只是奇怪地隐藏了真实姓名。您似乎也更改了过程名称(尽管不一致,因为您的exec
似乎调用了错误的名称...)。