ORA-06561 при выполнении процедуры PL / SQL - PullRequest
0 голосов
/ 03 октября 2018

У меня есть эта процедура:

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.

Iне могу понять почему.Что я делаю не так?

1 Ответ

0 голосов
/ 03 октября 2018

Вы не показали, что делает P_P1, но из того, что вы показали, ваша P_P2 процедура может просто вызывать ее слишком рано;у вас есть вызов P_P1, который использует v_str в качестве параметра, но в этот момент он равен нулю - вы устанавливаете его после вызова, который его использует.

Это означает, что где-тов P_P1 вы, вероятно, в конечном итоге делаете эквивалент:

 dbms_sql.parse(c, null, dbms_sql.native);

, который выдает ошибку, которую вы видите.Вы делаете то же самое с v_filename, что, вероятно, вызовет другие проблемы.

Итак, для начала поменяйте местами строки, чтобы процедура называлась последней:

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, кажется, вызывает неправильный ...).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...