創建觸發器很困難。這是我的代碼。我創建了2個表格:在Oracle中創建觸發器時出錯
CREATE TABLE client_table
(
clientid NUMBER(6) PRIMARY KEY,
lastname varchar2(50) NOT NULL,
firstname varchar2(50) NOT NULL,
password varchar2(20) NOT NULL,
email varchar2(100) NOT NULL,
phoneno NUMBER(12) NOT NULL,
zipcode NUMBER(6) NOT NULL ,
street varchar2(60) NOT NULL,
CHECK (email LIKE '%@%.%')
);
CREATE TABLE location_table
(
zipcode NUMBER(6) PRIMARY KEY,
country varchar2(100) NOT NULL,
region varchar2(60) NOT NULL,
town varchar2(60) NOT NULL
);
我添加了一個約束,以便client_table中的zipcode是一個外鍵。
ALTER TABLE client_table
ADD CONSTRAINT clirefzip
FOREIGN KEY(zipcode) REFERENCES location_table(zipcode)
DEFERRABLE INITIALLY DEFERRED;
現在我想添加一個觸發器,這樣,當我刪除location_table的位置,它會刪除client_table所有客戶端,具有相同郵編爲刪除的位置。所以我嘗試這樣的:
CREATE OR REPLACE TRIGGER location_delete
AFTER DELETE ON location_table
REFERENCING OLD AS old_buffer
FOR EACH ROW
DELETE FROM client_table WHERE zipcode = old_buffer.zipcode;
不幸的是它不起作用。
「* does not work *」既不是可接受的錯誤描述也不是有效的Oracle錯誤消息。但是,爲什麼你不把外鍵聲明爲「在刪除級聯」? –
所以我要做的就是在我的約束中寫入如下內容:外鍵(zipcode)在刪除級聯上引用location_table(zipcode)? – Zan
Thx很多人。它工作得很好。它簡單而有效。對不起,我的雜亂的帖子。我是新手。下次發佈問題時,我會嘗試更具體。 – Zan