2016-09-15 78 views
0

我正在編寫一個數據庫,該數據庫接受各種個人詳細信息並將其存儲爲保證終身制的形式。WHEN子句中的「no such column」

我想使用輸入到數據庫中的南非身份證號碼填充性別列(ID號中的第7位數字表示性別,0-4表示女性,5-9表示男性)

我試圖使用SUBSTR函數來隔離第7個字母,但是這個工作,但是,當我嘗試使用它作爲WHEN語句的一部分,同時編寫執行填充性別列時發生的觸發器一個值被插入ID號列,我得到一個錯誤。

的代碼如下:

CREATE TABLE Community_Register (ID_Number TEXT CHECK (length(ID_Number)=13)) 

CREATE TABLE Occupant (ID_Number TEXT, Birth_Date TEXT, Gender TEXT) 

CREATE TRIGGER insert_details AFTER INSERT ON Community_Register 
WHEN ((substr(ID_Number,7,1)) = '5') 
BEGIN 
INSERT INTO Occupant (ID_Number, Birth_Date, Gender) 
VALUES (NEW.ID_Number, substr(NEW.ID_Number,1,6), 'Male'); 
END; 

我已經使用這個不觸發WHEN語句用於填充birth_date列,它成功合作。這個問題似乎與WHEN聲明有關。

我編碼在命令行中,它可以讓我進入觸發器,但是當我嘗試插入值到Community_Register表是這樣的:

INSERT INTO Community_Register(ID_Number) VALUES ('9512235193083'); 

我得到這個錯誤:

no such column: ID_Number

回答

0

在UPDATE觸發器中,必須使用OLD.NEW.前綴來區分舊行和新行的內容。

INSERT觸發器中,沒有舊行,但你仍然必須使用NEW.

CREATE TRIGGER ... 
WHEN substr(NEW.ID_Number, 7, 1) BETWEEN '5' AND '9' 
BEGIN 
... 
相關問題