用于插入两个表的 Oracle-Apex 过程
Oracle-Apex process for insert into two tables
我有对话框页面,其中包含两个表中的项目。
我想用 P23_ID(标识列)将得到的值填充 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;
提前致谢
这不是真正的顶点问题,而是一个纯粹的 pl/sql 问题。你的问题是:"how do i get the generated value of a column as result of an insert"。您可以为此使用 "RETURNING INTO" 子句。它 returns 将列的值转换为变量。这个条款的例子比比皆是。
您没有提供函数的描述 fn_ins_table_name 但它应该 return 为该行新生成的 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);
我有对话框页面,其中包含两个表中的项目。
我想用 P23_ID(标识列)将得到的值填充 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;
提前致谢
这不是真正的顶点问题,而是一个纯粹的 pl/sql 问题。你的问题是:"how do i get the generated value of a column as result of an insert"。您可以为此使用 "RETURNING INTO" 子句。它 returns 将列的值转换为变量。这个条款的例子比比皆是。
您没有提供函数的描述 fn_ins_table_name 但它应该 return 为该行新生成的 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);