2016-03-24 62 views
0

是否有任何方法,如何使用CHECK(或可能是TRIGGER?)創建表,如果插入的值已經存在於另一個表中,將檢查它?SQL Oracle - 使用CHECK或TRIGGER檢查另一個表中的值

CREATE TABLE Employee(
    Name VARCHAR(10), 
    Adress VARCHAR(20) 
); 

CREATE TABLE Section(
    Section_name VARCHAR(10), 
    Managers_name VARCHAR(10) 
); 

我要檢查,插入Managers_name該值已經在員工,如果它不是,那麼打印錯誤。

我發現了任何方法,它如何完成,但我在Oracle中嘗試的所有方法都沒有奏效。

回答

1

添加PRIMARY KEY約束員工表和FOREIGN KEY約束節表:

CREATE TABLE Employee(
    Name VARCHAR(10) CONSTRAINT Employee_Name_PK PRIMARY KEY, 
    Adress VARCHAR(20) 
); 

CREATE TABLE Section(
    Section_name VARCHAR(10), 
    Managers_name VARCHAR(10) 
       CONSTRAINT section_manager_fk REFERENCES Employee(Name) 
); 
+0

謝謝,但有什麼辦法如何做與CHECK或TRIGGER命令? – Mildas

+0

'CHECK'是一個約束,但只引用同一個表中的列,所以它不會起作用,並且'TRIGGER'可以查看並查看該值是否不在表中並阻止插入,但是不能從' TRIGGER'給用戶,所以它不能「打印」輸出。 – MT0

0

檢查約束,如MT0解釋的,專門用於單個表。 出於一致性的原因,要避免觸發:在選擇記錄時,另一個會話可能正在刪除它。

外鍵是實現它的正確方法:在代碼中捕獲FK約束違反(ORA-02291,我猜),在消息中搜索「section_manager_fk」並最終重寫用戶友好的錯誤消息。

相關問題