Oracle テーブル タイプを作成しました。そして、その配列を作成しました。これは、SQL クエリの IN 句には多すぎる可能性がある値の数がわからないためです。
- コードスニペット - - -
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;
上記のものはすべてコンパイルされており、ほとんどの testCode 値を使用して TEST_PROC プロシージャを実行すると、エラー Invalid identifier for testCodes で失敗します。
手順では、コンソールに出力されている最終的なSQLステートメントは正しく、これをプロシージャ内の静的SQLステートメントとして実行すると、エラーなしで実行されます。しかし、動的SQL内では失敗します。DYNAMIC_SQL パッケージを使用して実行しようとしましたが、同じエラーが発生します。また、「table(testCodes)」のバインド変数として与えてみました。それも失敗しました。
提案してください。