0

配列のコレクションをストアド プロシージャに渡しています。以下はストアド プロシージャのコードです。

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を適切に設定しています

4

0 に答える 0