Oracle 如何在SQL developer中插入行时设置fk

Oracle 如何在SQL developer中插入行时设置fk,oracle,oracle-sqldeveloper,oracle-xe,Oracle,Oracle Sqldeveloper,Oracle Xe,我使用SQL Developer(与Oracle XE一起)设置了3个表,并添加了PK,FK。。现在我想添加一些行 INSERT INTO "ADMIN"."POST" (NAME_POST) VALUES ('asd') ORA-02291: integrity constraint (ADMIN.POST_DEPARTMENT_FK1) violated - parent key not found ORA-06512: at line 1 我不知道在哪里可以找到这个FK来选择一个!使用

我使用SQL Developer(与Oracle XE一起)设置了3个表,并添加了PK,FK。。现在我想添加一些行

INSERT INTO "ADMIN"."POST" (NAME_POST) VALUES ('asd')

ORA-02291: integrity constraint (ADMIN.POST_DEPARTMENT_FK1) violated - parent key not found
ORA-06512: at line 1
我不知道在哪里可以找到这个
FK
来选择一个!使用SQLDeveloper,我只填充没有FK的列,因此我需要帮助来找到如何使用
SQLDeveloper
正确地完成这项工作


新资料:

我不知道为什么,但我在部门和职位之间有一对一的关系

 CREATE TABLE "ADMIN"."POST" 
   (    "ID_POST" NUMBER(*,0) NOT NULL ENABLE, 
    "NAME_POST" VARCHAR2(40 BYTE) NOT NULL ENABLE, 
     CONSTRAINT "POST_PK" PRIMARY KEY ("ID_POST")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "SYSTEM"  ENABLE, 
     CONSTRAINT "POST_DEPARTMENT_FK1" FOREIGN KEY ("ID_POST")
      REFERENCES "ADMIN"."DEPARTMENT" ("ID_DEPARTMENT") ON DELETE CASCADE ENABLE
   ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "SYSTEM" ;

  CREATE OR REPLACE TRIGGER "ADMIN"."POST_ID" 
BEFORE INSERT ON POST 
REFERENCING NEW AS NEW
FOR EACH ROW
BEGIN
  if(:new.ID_POST is null) then
  SELECT S_POST.nextval
  INTO :new.ID_POST
  FROM dual;
  end if;
END;
/
ALTER TRIGGER "ADMIN"."POST_ID" ENABLE;
和post具有FK约束“post_部门_FK1”外键 (“ID_POST”)在上引用“ADMIN”。“DEPARTMENT”(“ID_DEPARTMENT”) 删除级联启用

这是你的问题。您有一个
id\u post
字段,希望它是
post
表的主键,触发器支持它。但您也将同一列作为department表的外键。通过这样做,您创建了一对一的关系。这不起作用-触发器正在从其序列中分配一个新的
post\u id
值,如果
department
表有一个具有相同值的PK,那将是侥幸

假设您的
post
表也有一个
id\u department
列,FK应该是:

CONSTRAINT "POST_DEPARTMENT_FK1"
FOREIGN KEY ("ID_DEPARTMENT")
REFERENCES "ADMIN"."DEPARTMENT" ("ID_DEPARTMENT")
ON DELETE CASCADE ENABLE
听起来您还说SQL Developer没有在数据编辑器中显示FK列,
department\u id
。我能看到这种情况的唯一方法是在通过
alter
命令添加该列之前打开表视图。如果表定义更改,表视图不会自动刷新。关闭表并重新打开,您将看到当前结构,包括FK列


好的,从你的问题编辑中,你没有一列来保存你想要成为FK的部门id。您需要包括该列,并将其设置为FK:

CREATE TABLE "ADMIN"."POST" 
   (    "ID_POST" NUMBER(*,0) NOT NULL ENABLE, 
    "NAME_POST" VARCHAR2(40 BYTE) NOT NULL ENABLE, 
    "ID_DEPARTMENT" NUMBER(*,0) NOT NULL,
     CONSTRAINT "POST_PK" PRIMARY KEY ("ID_POST")
  USING INDEX ...
  TABLESPACE "SYSTEM"  ENABLE, 
     CONSTRAINT "POST_DEPARTMENT_FK1" FOREIGN KEY ("ID_DEPARTMENT")
      REFERENCES "ADMIN"."DEPARTMENT" ("ID_DEPARTMENT")
      ON DELETE CASCADE ENABLE
   ) ...
  )
  TABLESPACE "SYSTEM" ;
但是,将自己的对象放入
系统
表空间不是一个好主意;为
ADMIN
对象创建一个新的


如果您还没有数据,则最容易删除并重新创建表。否则,您可以使用
alter table
命令添加列,删除并重新创建约束。

您必须先插入一条带有父键的记录。这就是外键的工作原理-当引用表中不存在外键的值时,不能将记录插入表中。对不起,这不是重点。我和部门有一些争执,所以我有钥匙。但插入时在哪里可以找到它?如果我在Post表中插入新数据,我看不到关于fk的任何信息。。它是关于“在SQL Developer中插入数据时如何获取fk列”,而不是关于“此错误的含义?”Thx。请看下面的示例,其中包含“returning”子句:Insert into master table,将pk返回到变量中。然后将该变量用作插入子表的一部分。或者,如果主表中已经存在该记录,请先进行查找。这是否意味着我无法使用SQL Developer进行查找(我无法相信,oracles forsment)。我需要使用sql plus之类的工具?就这么简单?附言:我只是想知道如何使用这个工具,即使我写了一个触发器,我仍然不知道如何插入fk,因为programm没有带fk的列可供选择(所以,您的表部门包含所有名称职位?而您的表职位包含每个名称职位的详细信息?这并不是我所期望的。我会猜到部门包含可能使用部门ID标识的部门。并且子表将包含每个部门ID的附加信息。请仔细考虑。确实如此!Thx,现在我知道了。但是SQL开发者不允许我更改它,我会添加它的图像。哦,好吧,我问你的时候你已经修复了它)系统生成的代码,idk它仍然是如何生成的。但是你为我做得很好。Thx alot。@Khronos-如果你在创建表时没有指定表空间,那么它将使用你用户的默认表空间。如果你创建一个新的表空间,我建议,也可以改变用户来更改默认值,这也将应用于索引。我我猜您显示的代码是它显示给您的DDL,而不是您实际键入的,那么?我觉得指定存储有点奇怪。。。