2016-01-14 2 views
0

заданной функцииВызова анонимная PL/SQL с параметром OUT в Groovy

DECLARE 
TYPE t_ids IS TABLE OF PGD.ITEM_CHANGE.id%TYPE; 
l_ids t_ids; 
BEGIN 
    UPDATE PGD.ITEM_CHANGE 
    SET IN_PROCESS = 1 
    RETURNING id BULK COLLECT INTO l_ids; 
COMMIT; 
END; 

Как я называю это заводным анонимно (без CREATE PROCEDURE), чтобы ухватить L_IDS?

Я пытаюсь это, поставив выше в строке, PROC, а затем вызов:

List<Object> params = [Sql.ARRAY] 
sql.callWithRows(PROC, params) { 
    result -> 
     println result 
} 

И я получаю исключение:

java.sql.SQLException: Invalid column index at oracle.jdbc.driver.OracleCallableStatement.registerOutParameterInternal(OracleCallableStatement.java:125) 
... 

Может кто-то помочь мне с этим синтаксисом ?

+0

Да, это возможно. [См. Эту тему в OTN (в частности, последние два ответа)] (https://community.oracle.com/thread/226093?start=0&tstart=0). Удачи. –

ответ

0

Прежде всего то, что вы вставили, не является функцией PL/SQL. Это неназванный блок, вы не можете извлечь коллекцию PL/SQL из неназванного блока.

Преобразуйте его в сохраненную функцию с помощью инструкции RETURN в конце или процедуры с параметром OUT.

+0

Спасибо. Есть ли способ сделать это все в строке SQL, переданной JDBC, без прямого вызова CREATE PROCEDURE или CREATE FUNCTION? У меня нет привилегии CREATE PROCEDURE. – Fustov