MySQL,在存储过程中使用CONCAT的问题

玛古先生

我在MySQL过程中使用CONCAT()时遇到问题。

我正在使用MySQL版本:8.0.22

从命令行,CONCAT适用于以下两种情况。因此,在我看来,我应该可以在过程中使用这些格式之一。

root@localhost [mdy_exp_constraints]> SET @primary_color_name = 'yellow';
Query OK, 0 rows affected (0.00 sec)

root@localhost [mdy_exp_constraints]> SELECT CONCAT('Data too short for ', @primary_color_name, ' column.');
+----------------------------------------------------------------+
| CONCAT('Data too short for ', @primary_color_name, ' column.') |
+----------------------------------------------------------------+
| Data too short for yellow column.                              |
+----------------------------------------------------------------+
1 row in set (0.00 sec)


root@localhost [mdy_exp_constraints]> SET @woof =  CONCAT('Data too short for ', @primary_color_name, ' column.');
Query OK, 0 rows affected (0.00 sec)

root@localhost [mdy_exp_constraints]> SELECT @woof;
+-----------------------------------+
| @woof                             |
+-----------------------------------+
| Data too short for yellow column. |
+-----------------------------------+
1 row in set (0.00 sec)

这是我用来测试程序的数据

  • 这是好数据。因此,没有错误要报告。
CALL mdy_exp_constraints.checkColorsForTooFewChars('red', 'ff');
Query OK, 0 rows affected (0.00 sec)
  • 这是错误的数据,因为数据太长了IN primary_color_value CHAR(2)MySQl服务器处理此错误。
CALL mdy_exp_constraints.checkColorsForTooFewChars('green', 'fff');
ERROR 1406 (22001): Data too long for column 'primary_color_value' at row 1
  • 这是错误的数据,因为该数据对于CHAR(2)而言太短。我正在尝试做的是报告此错误。但是,似乎不喜欢我在过程中使用CONCAT()的方式。
CALL mdy_exp_constraints.checkColorsForTooFewChars('blue', 'a');
ERROR 1644 (45000): Data too short for column.

在下面,我定义了我的程序。

CREATE SCHEMA mdy_exp_constraints
DEFAULT CHARACTER SET utf8mb4
COLLATE utf8mb4_0900_ai_ci;

USE mdy_exp_constraints;


DROP PROCEDURE IF EXISTS mdy_exp_constraints.checkColorsForTooFewChars;
SHOW COUNT(*) WARNINGS;
SHOW WARNINGS;


# -- SHOW all PROCEDUREs for the specified database.
SHOW
    PROCEDURE STATUS
WHERE
    db = 'mdy_exp_constraints'\G


DELIMITER $

CREATE PROCEDURE checkColorsForTooFewChars(
    IN primary_color_name VARCHAR(32),
    IN primary_color_value CHAR(2)
)
BEGIN
    DECLARE required_str_length TINYINT;
    SET required_str_length = 2;

    IF CHAR_LENGTH(primary_color_value) < required_str_length THEN
        SIGNAL SQLSTATE '45000'
            SET MESSAGE_TEXT = CONCAT('Data too short for ', primary_color_name, ' column.');
            -- SET MESSAGE_TEXT = 'Data too short for column.';
    END IF;
END $

DELIMITER ;

这是我收到的错误。

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '('Data too short for ', primary_color_name, ' column.');
            
    END IF' at line 11

如果我注释掉包含CONCAT行()和未注释不包含CONCAT(),这个程序在运行时对测试数据......除了,它不会报告工作线primary_color_name,这是什么我想为此做。

谢谢,

麦克风

用户14717238

发生错误,因为SET MESSAGE_TEXT不接受表达式。

DELIMITER $

CREATE PROCEDURE checkColorsForTooFewChars(
    IN primary_color_name VARCHAR(32),
    IN primary_color_value CHAR(2)
)
BEGIN
    DECLARE required_str_length TINYINT;
    SET required_str_length = 2;

    IF CHAR_LENGTH(primary_color_value) < required_str_length THEN
        SET @errorMsg = CONCAT('Data too short for ', primary_color_name, ' column.');
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = @errorMsg;
    END IF;
END $

DELIMITER ;

小提琴

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在存储过程中使用提取方法

来自分类Dev

在存储过程中使用参数值

来自分类Dev

在存储过程中使用会话变量

来自分类Dev

在存储过程中使用WITH,postgres

来自分类Dev

在存储过程中使用参数值

来自分类Dev

在存储过程中使用提取方法

来自分类Dev

Mysql 8如何在存储过程中使用if并使用cte

来自分类Dev

如何在MySQL * Prepared *存储过程中使用多个参数

来自分类Dev

在存储过程中分页而不在MySQL中使用LIMIT和OFFSET。

来自分类Dev

如何在MySQL * Prepared *存储过程中使用多个参数

来自分类Dev

在我的 MySQL 存储过程中使用事务和更新查询如何确保更新完成

来自分类Dev

MySQL的存储过程中获取记录的问题

来自分类Dev

存储过程中的MYSQL游标出现问题

来自分类Dev

如何在MySQL存储过程中发现问题?

来自分类Dev

存储过程中的CONCAT返回null

来自分类Dev

在存储过程中使用SAVE TRANSACTION SavePointName

来自分类Dev

如何在存储过程中使用插入/删除表?

来自分类Dev

授予适当的权限以在存储的过程中使用对称密钥

来自分类Dev

在存储过程中使用变量作为字符串

来自分类Dev

如何在SQL Server存储过程中使用if / else

来自分类Dev

在SQL Server中的存储过程中使用循环

来自分类Dev

如何在日期时间存储过程中使用BETWEEN

来自分类Dev

在存储过程中使用/受益于输出参数

来自分类Dev

在存储过程中使用列的默认值

来自分类Dev

如何在存储过程中使用变量

来自分类Dev

如何在Exec存储过程中使用Where子句

来自分类Dev

如何在存储过程中使用openquery?

来自分类Dev

在存储过程中的动态SQL中使用临时表

来自分类Dev

授予适当的权限以在存储的过程中使用对称密钥

Related 相关文章

热门标签

归档