【问题标题】:Oracle-Apex process for insert into two tables用于插入两个表的 Oracle-Apex 进程
【发布时间】:2020-09-16 07:08:35
【问题描述】:

我有一个对话框页面,其中包含两个表中的项目。

我想用 P23_ID(identity column) 将获得的值填充 v_row_table2.fk_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;

提前致谢

【问题讨论】:

    标签: sql plsql oracle-apex


    【解决方案1】:

    这并不是一个真正的顶点问题,而是一个纯粹的 pl/sql 问题。您的问题是:“我如何通过插入获得列的生成值”。您可以为此使用“RETURNING INTO”子句。它将列的值返回到变量中。这个条款到处都有很多例子。

    您没有提供函数 fn_ins_table_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);
    

    【讨论】:

    • 我添加了有问题的功能。不改变功能可以吗?
    • ...你试过了吗?这是知道它是否有效的最好方法。你是开发者,它是你的代码。依靠您自己的观察来确定您的代码是否可靠且有效。如果该函数是 pck_table.fn_ins_table_name - 无法分辨,因为您没有提到包名称 - 那么是的,它应该可以工作。
    猜你喜欢
    • 2019-11-25
    • 2016-06-11
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 2017-10-23
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多