我有这些Oracle表:
CREATE TABLE AGENT(
ID INTEGER NOT NULL,
GROUP_ID NUMBER(38,0),
........
)
/
CREATE INDEX IX_RELATIONSHIP_AG_GROUP ON AGENT (GROUP_ID)
/
ALTER TABLE AGENT ADD CONSTRAINT AGENTID PRIMARY KEY (ID)
/
CREATE TABLE AGENT_CONFIG(
AGENT_CONFIG_ID INTEGER NOT NULL,
AGENT_ID INTEGER,
.......
)
/
CREATE INDEX IX_RELATIONSHIP16 ON AGENT_CONFIG (AGENT_ID)
/
ALTER TABLE AGENT_CONFIG ADD CONSTRAINT KEY17 PRIMARY KEY (AGENT_CONFIG_ID)
/
ALTER TABLE AGENT_CONFIG ADD CONSTRAINT RELATIONSHIP16 FOREIGN KEY (AGENT_ID) REFERENCES AGENT (ID)
/
我想使用第一个表AGENT作为主表来存储数据。在第二个表中,我想存储有关AGENT的配置,并使用AGENT ID作为唯一ID。
但我有这个问题:我成功地将行插入表AGENT。我还需要在表AGENT_CONFIG中添加具有相同ID的空行,然后更新该行。我如何复制这个ID值重复?可能与Oracle表触发器?是否有三种表格之间的特殊关系?
我使用此SQL查询插入AGENT表:
INSERT INTO AGENT ("ID, GROUP_ID, NAME.....) VALUES (AGENT_SEQ.nextval, ?, ......)
这是正确的查询:
INSERT INTO AGENT (ID, GROUP_ID......) VALUES (AGENT_SEQ.nextval, ?.......)
RETURNING id INTO INSERT INTO AGENT_CONFIG (AGENT_SEQ.nextval, Agent_ID) VALUES (id)"
答案 0 :(得分:0)
对于这个使用currval伪列(如@Nicholas Krasnov指定的)你使用nextval for table" AGENT"后使用的序列。 Currval将复制您用于表" AGENT"的值。
例如:
1. INSERT INTO AGENT (ID, GROUP_ID......) VALUES (AGENT_SEQ.nextval, .......)
2. INSERT INTO AGENT_CONFIG (AGENT_CONFIG_ID,AGENT_ID) VALUES (NULL,AGENT_SEQ.CURRVAL) ;
序列伪列的链接 - > https://docs.oracle.com/cd/B28359_01/server.111/b28286/pseudocolumns002.htm
答案 1 :(得分:0)
建立1:1或1:{1,n}关系并不容易:
您可以通过在表上禁用(即不授予)直接插入和删除(以及可能更新)来解决此问题,并提供PL / SQL函数来处理这些。
但是,如果您可以使用1:{0,1}或1:{0,n}关系,那么您只需编写父记录,然后查找其ID以编写子记录(s) )。