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