mysql - 尽管我尝试了不同的情况,但我的脚本没有运行

标签 mysql sql

下面你可以看到我的脚本,当尝试运行 CREATE PROCEDURE 时,它总是给出语法错误,请告诉我出了什么问题?

我尝试删除“;”在创建过程的 END IF 前面,我还尝试更改 END IF 的位置

CREATE TABLE IF NOT EXISTS parts (
    part_no VARCHAR(18) PRIMARY KEY,
    description VARCHAR(40),
    cost DECIMAL(10 , 2 ) NOT NULL,
    price DECIMAL(10,2) NOT NULL
);

CREATE PROCEDURE `check_parts`(IN cost DECIMAL(10,2), IN price DECIMAL(10,2))
BEGIN
    IF cost < 0 THEN
        SIGNAL SQLSTATE '45000'
            SET MESSAGE_TEXT = 'check constraint on parts.cost failed';
    END IF;

    IF price < 0 THEN
 SIGNAL SQLSTATE '45001'
 SET MESSAGE_TEXT = 'check constraint on parts.price failed';
    END IF;

    IF price < cost THEN
 SIGNAL SQLSTATE '45002'
            SET MESSAGE_TEXT = 'check constraint on parts.price & parts.cost failed';
    END IF;

END

最佳答案

你只需更改分隔符即可,因为在编写的程序中,它将停在第一个“;”

DELIMITER //
CREATE PROCEDURE `check_parts`(IN cost DECIMAL(10,2), IN price DECIMAL(10,2))
BEGIN
    IF cost < 0 THEN
        SIGNAL SQLSTATE '45000'
          SET MESSAGE_TEXT = 'check constraint on parts.cost failed';
    END IF;

    IF price < 0 THEN
      SIGNAL SQLSTATE '45001'
         SET MESSAGE_TEXT = 'check constraint on parts.price failed';
    END IF;

    IF price < cost THEN
       SIGNAL SQLSTATE '45002'
         SET MESSAGE_TEXT = 'check constraint on parts.price & parts.cost failed';
    END IF;

END //
DELIMITER ;

应该可以。

关于mysql - 尽管我尝试了不同的情况,但我的脚本没有运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53932402/

相关文章:

mysql - 如果一个字段为 NULL,GROUP_CONCAT 返回一行 NULL

java - 参数化内连接

java - 单条数据库记录插入失败是否需要回滚?

mysql - 延迟评估 MySQL View

sql - 格式化带分区的表

python - python 和 oracle sql 中的哈希值不匹配

mysql - 数据库邻接列表模型 - 在一个查询中获取所有相同级别的父级?

php - round robin连接mysql

mysql - 在具有不同布局的两个数据库之间迁移数据

sql - Postgresql 中的 EOMONTH 等价物