如何在 oracle apex 提交后自动将外键插入 table?
How to automatically insert foreign key into table after submit in oracle apex?
我创建了用户可以输入数据的表单。通过集合,信息将被保存并在提交表单后插入相应的 tables。
现在 table 中的一列仍然是空的,我不确定如何在 APEX 中解决它。
也就是说,table 有一个指向另一个 table 的外键。
但是这个table的ID是提交表单后生成的
我可以解决这个问题,例如,在提交表单后,将外键输入 table 的触发器吗?
会不会是这样的插入后触发器:
CREATE OR REPLACE TRIGGER INSERT_FK
AFTER INSERT
ON TBL1
FOR EACH ROW
begin
INSERT INTO TBL2
VALUES (:NEW.STUID);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
DBMS_OUTPUT.put_line (TO_CHAR (SQLERRM (-20299)));
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (TO_CHAR (SQLERRM (-20298)));
end;
或者是否有其他更好的解决方案?
这行不通;您只需将 :new.stuid
列值插入到 TBL2
中,这“可能”会成功(如果 tbl2
中的其他列不是 NOT NULL
),但是 - 所有其他列都将留空。
我猜你应该在 Apex 中准备所有数据(即获取 tbl1
的主键,同时 - 将其用作tbl2
的外键值)。否则,以后无法填充该信息,因为这两个表之间没有其他关系(如果有,您不需要外键列,对吗?)。
我不会为此使用触发器,但会在您的应用程序中处理它。
您可以使用 RETURNING INTO
子句实现此目的。这允许您在同一 transaction.If 中重用插入列的值,这是在页面进程中的匿名 pl/sql 块中,它会是这样的:
DECLARE
l_id table1.id%TYPE;
BEGIN
INSERT INTO table1(val) VALUES ('Europe')
RETURNING id INTO l_id;
INSERT INTO table2(continent_id, val) VALUES (l_id,'Belgium');
END;
/
在顶点表单中,您可以选择 return 将主键添加到 insert/update 之后的页面项目中,这样如果您使用内置表单处理,就可以在其他进程中使用它.
我创建了用户可以输入数据的表单。通过集合,信息将被保存并在提交表单后插入相应的 tables。
现在 table 中的一列仍然是空的,我不确定如何在 APEX 中解决它。
也就是说,table 有一个指向另一个 table 的外键。
但是这个table的ID是提交表单后生成的
我可以解决这个问题,例如,在提交表单后,将外键输入 table 的触发器吗?
会不会是这样的插入后触发器:
CREATE OR REPLACE TRIGGER INSERT_FK
AFTER INSERT
ON TBL1
FOR EACH ROW
begin
INSERT INTO TBL2
VALUES (:NEW.STUID);
EXCEPTION
WHEN NO_DATA_FOUND
THEN
DBMS_OUTPUT.put_line (TO_CHAR (SQLERRM (-20299)));
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (TO_CHAR (SQLERRM (-20298)));
end;
或者是否有其他更好的解决方案?
这行不通;您只需将 :new.stuid
列值插入到 TBL2
中,这“可能”会成功(如果 tbl2
中的其他列不是 NOT NULL
),但是 - 所有其他列都将留空。
我猜你应该在 Apex 中准备所有数据(即获取 tbl1
的主键,同时 - 将其用作tbl2
的外键值)。否则,以后无法填充该信息,因为这两个表之间没有其他关系(如果有,您不需要外键列,对吗?)。
我不会为此使用触发器,但会在您的应用程序中处理它。
您可以使用 RETURNING INTO
子句实现此目的。这允许您在同一 transaction.If 中重用插入列的值,这是在页面进程中的匿名 pl/sql 块中,它会是这样的:
DECLARE
l_id table1.id%TYPE;
BEGIN
INSERT INTO table1(val) VALUES ('Europe')
RETURNING id INTO l_id;
INSERT INTO table2(continent_id, val) VALUES (l_id,'Belgium');
END;
/
在顶点表单中,您可以选择 return 将主键添加到 insert/update 之后的页面项目中,这样如果您使用内置表单处理,就可以在其他进程中使用它.