如何在oracle apex中提交后自动将外键插入表中?

如何在oracle apex中提交后自动将外键插入表中?,oracle,triggers,insert,foreign-keys,oracle-apex,Oracle,Triggers,Insert,Foreign Keys,Oracle Apex,我创建了用户可以输入数据的表单。对于集合,信息将被保存,并在提交表单后插入到相应的表中 现在表中有一列仍然是空的,我不知道如何在APEX中解决它 也就是说,该表具有另一个表的外键 但此表的ID仅在提交表单后生成 例如,我可以用一个触发器来解决这个问题,然后在提交表单后将外键输入表中吗 是否会是这样的后插入触发器: CREATE OR REPLACE TRIGGER INSERT_FK AFTER INSERT ON TBL1 FOR EACH ROW begin INSERT INTO

我创建了用户可以输入数据的表单。对于集合,信息将被保存,并在提交表单后插入到相应的表中

现在表中有一列仍然是空的,我不知道如何在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;
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中的其他列不为NULL,则可能会成功,但是-所有其他列将保持为空


我想您应该在Apex中准备所有数据,即获取tbl1的主键,同时将其用作tbl2的外键值。否则,以后就无法填充该信息,因为这两个表之间没有其他关系。如果有,您就不需要外键列了,是吗?

我不会为此使用触发器,而是在您的应用程序中处理它。 您可以通过使用RETURNING-INTO子句来实现这一点。这允许您在同一事务中重用插入列的值。如果这是在页面进程中的匿名pl/sql块中,则类似于:

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

在apex表单中,您可以选择在插入/更新后将主键返回到页面项中,这样,如果您使用内置表单处理,就可以在其他过程中使用它。

这正是我想要实现的,获取tbl1的主键,该主键仅在表单提交后生成,并将其用作tbl2的外键值。表格中的其他列在提交表格后输入。同时,表1填写了表格中的信息。在第二个表中,使用外键引用表1。这两个表之间没有其他关系。您好,谢谢您的建议!它工作,但现在我想插入以及其他信息的集合。我是否可以在insert into中使用sql语句来实现这一点,方法如下:insert into STUDENTSID、USERID、PROGRAMID、COURSEID VALUES ID_SEQ.NEXTVAL,从APEX_COLLECTIONS中选择c001、c002、c003,其中COLLECTION_NAME='SAVED_DATA'。因为除此之外,我有两个条目。集合中的条目和外键的条目。不清楚您的确切意思。在评论中很难回答后续问题。我建议你提出一个新的问题,尽可能多的信息-这将是可见的整个社区再次。另外,请将其中一个答复标记为答案