0

我希望在一批插入语句中填充由外键链接的多个表中的数据。

我的第一个陈述看起来像这样......

Insert into SCH2.PEOPLE_MEDICAL_CONDITIONS (ID,PERSON_CODE,CONDITION,START_DATE,END_DATE,IS_ACTIVE,CREATED_BY,CREATED_DATE,UPDATED_DATE,UPDATED_BY,IS_HEALTH_CARE_PLAN,IS_EMERGENCY_RESPONSE_PLAN,IS_ASCIA_PLAN,IS_HIGH_RISK,IS_ANAPHYLAXIS,IMPORTED_NOTES,DOCTOR_DETAIL_ID,DOCTOR_DIAGNOSED,STUDENT_HOSPITALISED_ALLERGY,HOSPITAL_NAME,REVIEW_DATE,USER_1,USER_2,USER_3,USER_4,USER_5,USER_6,USER_7,USER_8,USER_9,USER_10,USER_11,USER_12) values (PEOPLE_MEDICAL_CONDITIONS_SEQ.nextval,10014817,'Diabetes',to_date('01-JAN-00','DD-MON-RR'),null,'Y','MattOC.medtest',SYSDATE,null,null,'N','N','Y','N','N','Type 1',null,'Y','N','NNUH',null,null,null,null,null,null,null,null,null,null,null,null,null);

因为我想自动生成 ID,所以我使用PEOPLE_MEDICAL_CONDITIONS_SEQ.nextval作为我的 ID 字段中的值。

然后我希望立即运行另一个插入语句,该语句具有我的第一个表的外键(和插入语句)

Insert into SCH2.PEOPLE_MEDICINE (ID,PERSON_CODE,MEDICAL_CONDITION_ID,MEDICINE_NAME,DUE,ADMINISTRATION,ADMINISTRATION_DETAILS,DOSAGE,IS_LOW_STOCK,IS_DISPENSED_DAILY,START_DATE,END_DATE,EXPIRY_DATE,CREATED_BY,CREATED_DATE,UPDATED_DATE,UPDATED_BY,IMPORTED_NOTES,MED_TYPE,PARENT_PROVIDED,REVIEW_DATE,USER_1,USER_2,USER_3,USER_4,USER_5,USER_6,USER_7,USER_8,USER_9,USER_10,USER_11,USER_12) values (PEOPLE_MEDICINE_SEQ.nextval,10014817,(SELECT ID FROM PEOPLE_MEDICAL_CONDITIONS WHERE CONDITION = 'Diabetes' AND CREATED_BY = 'MattOC.medtest'),'Insulin','INS','DAILY','3 times daily','80 units','N','Y',to_date('01-JAN-00','DD-MON-RR'),null,null,'MattOC.medtest',SYSDATE,null,null,'Insulin',null,'N',null,null,null,null,null,null,null,null,null,null,null,null,null);

SCH2.PEOPLE_MEDICINE.MEDICAL_CONDITION_ID = SCH2.PEOPLE_MEDICINE.ID

因为我在第一个插入语句中使用了自动增量函数,所以我无法知道在第二个语句的 MEDICAL_CONDITION_ID 字段中要使用什么 ID。我用这个来识别之前创建的记录,感觉不是很干净......

(SELECT ID 
 FROM PEOPLE_MEDICAL_CONDITIONS 
 WHERE CONDITION = 'Diabetes' AND CREATED_BY = 'MattOC.medtest')

因为数据不断地进出这些表,所以我不愿意在 ID 字段的插入语句中设置实际值。

如果我想在由外键链接的多个表中插入数据,那么引用前一个插入语句的最佳方法是什么,主键需要在下面的插入语句中?

非常感谢,

4

1 回答 1

4

因为我在第一个插入语句中使用了自动增量函数,所以我无法知道在第二个语句的 MEDICAL_CONDITION_ID 字段中要使用什么 ID。

是的,你确实知道。currval您可以使用序列的列访问最后生成的值。

所以只需PEOPLE_MEDICAL_CONDITIONS_SEQ.currval在第二个插入语句中使用。不需要另一个 SELECT 语句来检索该值。

您可以在手册中找到更多详细信息:http: //docs.oracle.com/cd/E11882_01/server.112/e26088/pseudocolumns002.htm#i1009336

于 2013-07-23T15:59:33.627 回答