oracle apex进程

lvmkulzt  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(391)

我有一个对话框页面,有两个表中的项目。
我想用p23\u id(标识列)将获得的值填充v\u row\u table2.fk\u 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\u fk\u 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;

提前谢谢

m1m5dgzv

m1m5dgzv1#

这不是一个真正的顶点问题,而是一个纯粹的pl/sql问题。您的问题是:“如何获得作为insert结果的列的生成值”。你可以用“returning into”子句。它将列的值返回到变量中。这一条款的例子比比皆是。
您尚未提供函数fn\u ins\u table\u name的描述,但它应返回该行新生成的id。您的代码将如下所示:

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);

相关问题