Oracle -Apex процесс для вставки в две таблицы - PullRequest
0 голосов
/ 28 мая 2020

У меня есть диалоговая страница с элементами из двух таблиц.

Я хочу заполнить v_row_table2.fk_id значением, которое получит P23_ID (столбец идентификаторов)

Я использую процесс для вставки:

-- all variables are declared

IF :P23_ID IS NULL THEN
--INSERT

v_row.active                      := :P23_ACTIVE;
v_row.date                        := :P23_DATE;
v_row.start_time                  := :P23_START_TIME;
v_row.current_time                := :P23_CURRENT_TIME;
v_row_table2.logdate              := :P23_LOGDATE;
v_row_table2.filename             := :P23_FILENAME;
v_row_table2.fk_id                -- 


v_id  := pck_table.fn_ins_table_name(table_row => v_row);
v_id2 := pck_table2.fn_ins_table_name(table_row => v_row_table2);

Я пытаюсь добавить:

SELECT identity_name.nextval
INTO v_fk_id
FROM dual;

И добавить v_fk_id в код, но это не сработало.

Функция вставки:

FUNCTION fn_ins_table_name (
        table_row IN table2%rowtype
    ) RETURN table2.table_id%TYPE 
    IS
        v_table2_id table2.table_id%TYPE;
    BEGIN
        INSERT INTO table2 VALUES table_row RETURNING 
        table_id INTO v_table2_id;  -- table_id is identity

        RETURN v_table2_id;
    END fn_ins_table_name;

Заранее спасибо

1 Ответ

1 голос
/ 29 мая 2020

На самом деле это не проблема апекса, а чистый вопрос pl / sql. Ваш вопрос: «как мне получить сгенерированное значение столбца в результате вставки». Для этого вы можете использовать предложение «RETURNING INTO». Он возвращает значение столбца в переменную. В этом предложении множество примеров.

Вы не предоставили описание своей функции fn_ins_table_name, но она должна вернуть вновь созданный идентификатор для этой строки. Тогда ваш код будет выглядеть так:

IF :P23_ID IS NULL THEN
--INSERT

v_row.active                      := :P23_ACTIVE;
v_row.date                        := :P23_DATE;
v_row.start_time                  := :P23_START_TIME;
v_row.current_time                := :P23_CURRENT_TIME;

v_id  := pck_table.fn_ins_table_name(table_row => v_row);

v_row_table2.logdate              := :P23_LOGDATE;
v_row_table2.filename             := :P23_FILENAME;
v_row_table2.fk_id                := v_id; 

v_id2 := pck_table2.fn_ins_table_name(table_row => v_row_table2);
...