2013-07-23 83 views
0

我正在尋找在一批插入語句中通過外鍵鏈接的多個表中填充數據。運行一批涉及鏈接表的SQL插入語句(Oracle)

我的第一條語句看起來像這樣...

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語句)

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

因爲我使用的第一個INSERT語句自動增量功能,我不知道該ID是在MEDICAL_CONDITION_ID場在我的第二個語句中使用什麼樣的方式。

是的,你知道它。您可以使用序列的currval列訪問上次生成的值。

因此,只需在第二個插入語句中使用PEOPLE_MEDICAL_CONDITIONS_SEQ.currval即可。不需要另一個SELECT語句來檢索值。

您可以在說明書中找到更多詳細信息:http://docs.oracle.com/cd/E11882_01/server.112/e26088/pseudocolumns002.htm#i1009336