В процедуре окончательный оператор sql, который печатается в моей консоли, верен, и когда вы запускаете его как статический оператор sql внутри процедуры, он выполняется без каких-либо ошибок. Но внутри динамического sql это не удается.
Я попытался выполнить с использованием пакета DYNAMIC_SQL, но это приводит к той же ошибке. Кроме того, я попытался указать его как переменную привязки для «таблицы (testCodes)». Это тоже не удалось. Теги oracleplsqldynamicquerystored-procedures Предлагаемые теги: oracle Не удалось отправить ваш вопрос.
create or replace TYPE "INPUTCODE" as object (pc varchar2(100) )
create or replace TYPE "INPUTCODEARR" IS TABLE OF inputcode;
create or replace PROCEDURE "TEST_PROC" (
testCodes IN inputcodeArr,
timeHorizon IN NUMBER,
p_recordset OUT SYS_REFCURSOR)
AS var_sqlStmt VARCHAR2(4096);
BEGIN
var_sqlStmt := 'select t.a,t.b, t.c';
var_sqlStmt := var_sqlStmt || 'from test t';
if testCodes is not null then
var_sqlStmt := var_sqlStmt || ', table(testCodes) tc';
var_sqlStmt := var_sqlStmt || 'where tc.pc = t.name';
end if;
dbms_output.put_line('Final SQL Statement::' || var_sqlStmt);
open p_recordset for var_sqlStmt;
END TEST_PROC;
var_sqlStmt := var_sqlStmt || ', table(:x) tc';
иopen p_recordset for var_sqlStmt USING testCodes;
- person krokodilko   schedule 15.08.2015