У меня есть хранимая процедура Oracle, которая скомпилирована без ошибок и работает с ожидаемым результатом.Вот как я называю это в локальной БД:
variable v_emp_cur refcursor;
exec my_schema.SP_READ_MEMBER('12345678', '', :v_emp_cur);
print v_emp_cur;
Результат напечатан хорошо.Однако, когда я вызываю этот SP из другой БД, используя dblink, как показано ниже:
variable v_emp_cur refcursor;
exec my_schema.SP_READ_MEMBER@my_dblink('12345678', '', :v_emp_cur);
print v_emp_cur;
Возвращает это сообщение об ошибке:
BEGIN my_schema.sp_read_member@my_dblink('12345678', '', :v_emp_cur); END;
Error at line 2
ORA-00604: error occurred at recursive SQL level 1
ORA-00900: invalid SQL statement
Поскольку моя хранимая процедура была скомпилирована с /o ошибка, и возвращает данные из локального вызова, я ожидаю, что в этом нет ошибки.Но я не уверен на 100%, вот моя хранимая процедура:
CREATE OR REPLACE procedure my_schema.SP_READ_MEMBER(keywordP in varchar2, birthdayP in varchar2, resultP out sys_refcursor)
is
v_prg_name varchar2(20) := 'SP_READ_MEMBER';
sys_sql varchar2(1000);
begin
Insertlog(SYSDATE, v_prg_name, '1.0 Start');
sys_sql := sys_sql || 'select a.no, a.name, a.id_no, to_char(a.birthday, ''yyyy/MM/dd'') as birthday, ''REAL member'' as mtype, email, mobile from rep a where 1=1 ';
if keywordP is not null then
sys_sql := sys_sql || ' and (a.no=''' || keywordP || ''' or a.name=''' || keywordP || ''' or a.id_no=''' || keywordP || ''') ';
end if;
if birthdayP is not null then
sys_sql := sys_sql || ' and a.birthday=to_date(''' || birthdayP || ''', ''yyyy/MM/dd'') ';
end if;
open resultP for sys_sql;
Insertlog(SYSDATE, v_prg_name, '2.0 Finished w/o error');
exception
when others then
declare
error_time VARCHAR2(30) := RTRIM(TO_CHAR(SYSDATE, 'YYYY/MM/DD, HH24:MI:SS'));
error_code NUMBER := SQLCODE;
error_msg VARCHAR2(300) := SQLERRM;
begin
rollback;
DBMS_OUTPUT.PUT_LINE(error_time || ',' || TO_CHAR(error_code) || ',' || error_msg);
Insertlog(SYSDATE, v_prg_name, error_msg || ', 3.0 ERROR, sql:' || sys_sql);
end;
end SP_READ_REP;
/
Как мне решить эту проблему?
Любые предложения приветствуются ~