我正在编写一个数据库,其中包含各种个人详细信息并将其存储为保障使用权的一种形式。
我正在尝试使用输入数据库的南非身份证号码来填充性别列(身份证号码中的第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
答案 0 :(得分:0)
在UPDATE触发器中,您必须使用OLD.
和NEW.
前缀来区分旧行和新行的内容。
在INSERT触发器中,没有旧行,但您仍然必须使用NEW.
:
CREATE TRIGGER ...
WHEN substr(NEW.ID_Number, 7, 1) BETWEEN '5' AND '9'
BEGIN
...