"没有这样的专栏"在WHEN条款中

时间:2016-09-15 15:09:28

标签: sqlite triggers

我正在编写一个数据库,其中包含各种个人详细信息并将其存储为保障使用权的一种形式。

我正在尝试使用输入数据库的南非身份证号码来填充性别列(身份证号码中的第7个数字表示性别,0-4表示女性,5-9表示男性)< / p>

我尝试使用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');

我收到此错误:

  

没有这样的栏目:ID_Number

1 个答案:

答案 0 :(得分:0)

在UPDATE触发器中,您必须使用OLD.NEW.前缀来区分旧行和新行的内容。

在INSERT触发器中,没有旧行,但您仍然必须使用NEW.

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