我将数组的集合传递给存储过程。下面是存储过程的代码。
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