SQL错误[42601]:意外的令牌或更新“已找到”。 预期的令牌可能包括:“” .. sqlcode = -104,sqlstate = 42601,驱动程序=4.33.31
thttps://www.ibm.com/docs/en/db2/11.1?
正确的语法是什么? 我在Docker Image中运行DB2 12.1.1.0
MyDB2测试
SET CURRENT SCHEMA = 'DB2INST1';
CREATE TABLE CUSTOMERS
(
ID INT GENERATED ALWAYS AS IDENTITY
(START WITH 1 INCREMENT BY 1),
NAME VARCHAR(100),
DOB DATE,
PRIMARY KEY (ID)
);
Change sqlstate至75022。
insert触发
CREATE TRIGGER TRIGGER_CHECK_CUSTOMER_DOB_LESS22_INSERT
NO CASCADE BEFORE INSERT ON CUSTOMERS
REFERENCING NEW AS N_ROW
FOR EACH ROW
WHEN (YEAR(CURRENT DATE) - YEAR(N_ROW.DOB) < 22)
BEGIN ATOMIC
SIGNAL SQLSTATE '75022'
SET MESSAGE_TEXT = 'Too young';
END;
CREATE TRIGGER TRIGGER_CHECK_CUSTOMER_DOB_LESS22_UPDATE
NO CASCADE BEFORE UPDATE OF DOB ON CUSTOMERS
REFERENCING NEW AS N_ROW
FOR EACH ROW
WHEN (YEAR(CURRENT DATE) - YEAR(N_ROW.DOB) < 22)
BEGIN ATOMIC
SIGNAL SQLSTATE '75022'
SET MESSAGE_TEXT = 'Too young';
END;
INSERT INTO CUSTOMERS ( NAME, DOB) VALUES
( 'Alice', DATE '2000-05-15'),
( 'DOB', DATE '1995-08-20'),
( 'Charlie', DATE '1998-12-10'),
( 'David', DATE '1999-03-25'),
( 'Eve', DATE '2001-07-30');
INSERT INTO CUSTOMERS ( NAME, DOB) VALUES ('Frank', DATE '2005-10-05');
SQL ERROR [75022]: Application raised error or warning with diagnostic text: "Too young".. SQLCODE=-438, SQLSTATE=75022, DRIVER=4.33.31
测试更新触发失败
UPDATE CUSTOMERS SET DOB = DATE '2006-02-15' WHERE ID = 1;
get结果:
SQL ERROR [75022]: Application raised error or warning with diagnostic text: "Too young".. SQLCODE=-438, SQLSTATE=75022, DRIVER=4.33.31