if else在sql中触发器

时间:2016-02-03 21:15:05

标签: sql if-statement triggers

我尝试使用if else语句在插入触发器之后创建。我可以在没有else的情况下执行它,但是得到它的错误。 所以,在表格中预订'有一个customer_id列。有一个表客户,我有一个列'类型'。根据此列中的值,我想在booking_status表中添加一行,但我的语法错误。我正在学习sql,请帮助,如果可以的话。

AFTER INSERT ON booking
FOR EACH ROW 
IF (SELECT type FROM customer WHERE ID=customer_id) = 'not trust'
BEGIN
INSERT INTO booking_status (id, status_name, booking_id) VALUES(NEW.booking_number, 'Checking', NEW.booking_number)
END
ELSE
INSERT INTO booking_status (id, status_name, booking_id) VALUES(NEW.booking_number, 'Approved', NEW.booking_number);

1 个答案:

答案 0 :(得分:4)

您的IF语法不正确。在条件为真时执行语句之前需要THEN,在结束时需要END IF;,并且在每个语句结束时需要;。当BEGIN/END子句中只有一个语句时,您不需要THEN

IF (SELECT type FROM customer WHERE ID=customer_id) = 'not trust'
THEN 
    INSERT INTO booking_status (id, status_name, booking_id) VALUES(NEW.booking_number, 'Checking', NEW.booking_number);
ELSE
    INSERT INTO booking_status (id, status_name, booking_id) VALUES(NEW.booking_number, 'Approved', NEW.booking_number);
ENDIF;

但是不需要IF声明,您可以在一个IF中使用INSERT函数:

INSERT INTO booking_status(id, status_name, booking_id)
VALUES (NEW.booking_number, 
        IF((SELECT type FROM customer WHERE ID=customer_id) = 'not trust', 'Checking', 'Approved'),
        NEW.booking_number);