问题描述
我创建了用户可以在其中输入数据的表单。使用集合保存信息,并在提交表单后插入到相应的表中。
现在表中的一列仍然是空的,我不知道如何在 APEX 中解决它。
也就是说,该表具有到另一个表的外键。
但是这个表的ID是提交表单后才生成的。
我可以解决它吗,例如,在提交表单后将外键输入表中的触发器?
会是这样的插入后触发器吗:
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;
或者有其他更好的解决方案吗?
解决方法
我不会为此使用触发器,而是在您的应用程序中处理它。
您可以通过使用 RETURNING INTO
子句来实现这一点。这允许您在同一事务中重用插入列的值。如果这是在页面进程中的匿名 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;
/
在顶点表单中,您可以选择在插入/更新后将主键返回到页面项中,以便您可以在使用内置表单处理的其他进程中使用它。
,这行不通;您只需将 :new.stuid
列值插入到“可能”成功的 TBL2
中(如果 tbl2
中的其他列不是 NOT NULL
),但是 - 所有其他列都将保持空白。
我想你应该在你还在 Apex 时准备所有数据(即获取 tbl1
的主键,同时 - 将它用作外键值tbl2
)。否则,以后无法填充该信息,因为这两个表之间没有其他关系(如果有,您就不需要外键列,对吗?)