PL Sql BULK COLLECT Команда SQL не завершена

Я пытаюсь использовать BULK COLLECT INTO, но получаю некорректную команду SQL ORA-00933. Я посмотрел на свой синтаксис, но не уверен, что я делаю неправильно. Я делаю что-то неправильно?

Проблема, похоже, связана с предложением RETURNING. Если я удалю предложение return, он отлично скомпилируется

CREATE OR REPLACE PROCEDURE CIMS.QC_PALLET_HOLD_BY_HOUR_A_REL( QC_HOLD_ID_IN IN INTEGER, HOUR_STR IN VARCHAR2, DAY_CODE IN VARCHAR2, TOP_CODE_IN IN VARCHAR2, QC_RLS_DISPOSITION_ID_IN INTEGER, SUCC_PALS_OUT OUT VARCHAR2)
IS
    l_count binary_integer;
    l_array dbms_utility.lname_array;
    curr_prod_hour varchar2(1);     
    TYPE success_hours is TABLE of pallet_hold.pallet_no%type;
    TYPE t_pallet_ids is TABLE of pallet_hold.pallet_hold_id%type;

BEGIN

    dbms_utility.comma_to_table(
        list => regexp_replace(HOUR_STR, '(^|,)','\1x'),
        tablen => l_count,
        tab => l_array
    );

        BEGIN
            forall i in l_array.FIRST .. l_array.last
            INSERT INTO PALLET_HOLD(PALLET_NO, TOP_CODE, BOTTOM_CODE, QC_HOLD_ID)
            SELECT V.PALLET_NO, V.TOP_CODE, V.BOTTOM_CODE, QC_HOLD_ID_IN
            FROM PALLET_MASTER_INQ_VIEW V
            WHERE PROD_HOUR = substr(l_array(i),2) AND SUBSTR(BOTTOM_CODE,0,5) = DAY_CODE AND TOP_CODE = TOP_CODE_IN
            AND NOT EXISTS (SELECT 1 FROM PALLET_HOLD WHERE QC_HOLD_ID = QC_HOLD_ID_IN AND PALLET_NO = V.PALLET_NO)
            RETURNING PALLET_HOLD_ID bulk collect INTO t_pallet_ids;

        EXCEPTION
            WHEN OTHERS THEN
                NULL;
        END;              

    COMMIT;

    EXCEPTION
        WHEN OTHERS THEN 
         RAISE; --raise_application_error(-20333, 'Error QC_PALLET_HOLD_BY_HOUR');

END;
/

person elesh.j    schedule 21.05.2018    source источник
comment
Исключение, когда другие тогда равны нулю: обожаю!!!. Можете ли вы сделать вывод о сработавшем исключении, просто чтобы проверить, не пошло ли что-то не так?   -  person Renato Afonso    schedule 21.05.2018
comment
Я сожалею. Я могу добавить вывод, но проблема в том, что я не могу даже скомпилировать эту процедуру, поэтому я не могу ее запустить.   -  person elesh.j    schedule 21.05.2018
comment
RETURNING PALLET_HOLD_ID массовый сбор INTO t_pallet_ids ..... это выглядит как нежелательная строка после INSERT INTO ..... SELECT .... .Clause   -  person shrek    schedule 21.05.2018
comment
Я пытаюсь получить значения столбцаpallet_hold_id, которые были сгенерированы триггером последовательности.   -  person elesh.j    schedule 21.05.2018
comment
Возможный дубликат PLSQL Вставить в с подзапросом и предложением возврата (Oracle)   -  person Zynon Putney II    schedule 21.05.2018


Ответы (1)


Похоже, вы не можете использовать оператор return так, как пытаетесь. Ответ на этот вопрос даст вам варианты того, как выполнить вашу задачу.

PLSQL Вставить в с предложением подзапроса и возврата

person Zynon Putney II    schedule 21.05.2018