配列のコレクションをストアド プロシージャに渡しています。以下はストアド プロシージャのコードです。
CREATE OR REPLACE PROCEDURE R5_QA_126.GIVE_ME_AN_ARRAY( p_list in TEST_LIST, p_recordset OUT SYS_REFCURSOR)
AS
BEGIN
DBMS_OUTPUT.ENABLE(100);
DBMS_OUTPUT.PUT_LINE('Hi reached before begin');
OPEN p_recordset FOR
SELECT words, count
FROM documents_token
where words in (select word from table(p_list));
EXCEPTION
WHEN NO_DATA_FOUND THEN
NULL;
WHEN OTHERS THEN
-- Consider logging the error and then re-raise
RAISE;
END GIVE_ME_AN_ARRAY;
/
以下のように宣言された型があります。
CREATE OR REPLACE TYPE TESTREC AS OBJECT
(
word VARCHAR2(500)
)
/
以下のように宣言されたテーブル。
CREATE OR REPLACE TYPE TEST_LIST
AS TABLE OF TESTREC
/
ストアド プロシージャを呼び出そうとすると問題が発生します。ps.execute(); 私のJavaコードから。結果は返されません。
以下は、配列への呼び出し用に設定しているものです。
OracleCallableStatement ps = (OracleCallableStatement) conn
.prepareCall("{call GIVE_ME_AN_ARRAY(?,?)}");
ps.setARRAY(1, array_to_pass);
ps.registerOutParameter(2, OracleTypes.CURSOR);
私がここでやっていることが間違っていることを教えてください。また、ArrayDescriptorとStructDescriptorを適切に設定しています