MySQL存储函数中的十六进制数字文字

时间:2015-11-26 14:58:04

标签: mysql stored-procedures hex

我想在MySQL函数的代码中使用十六进制文字,该函数使用BIGINT上的位掩码进行操作。

根据MySQL 5.6 manual,我可以使用十六进制文字作为整数值。 这适用于MySQL 5.6中的SQL语句:

mysql> SELECT CAST(0x0055aa55aa55aaff AS UNSIGNED);
+--------------------------------------+
| CAST(0x0055aa55aa55aaff AS UNSIGNED) |
+--------------------------------------+
|                    24112657927088895 |
+--------------------------------------+
1 row in set (0.01 sec)

我现在尝试在同一个MySQL上使用与存储函数相同的语法:

DROP FUNCTION IF EXISTS _test_hex_literal;
DELIMITER $$
CREATE FUNCTION _test_hex_literal()
    RETURN BIGINT UNSIGNED
    DETERMINISTIC
    NO SQL
BEGIN
    RETURN CAST(0x0055aa55aa55aaff AS UNSIGNED);
END;
$$
DELIMITER ;
SELECT _test_hex_literal();
DROP FUNCTION IF EXISTS _test_hex_literal;

但MySQL 5.6拒绝我的代码:

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 'RETURN BIGINT UNSIGNED
    DETERMINISTIC
    NO SQL
BEGIN
    RETURN CAST(0x0055' at line 2

我做错了什么,还是MySQL中的错误?

如果这是一个MySQL错误,是否有解决方法在我的函数的源代码中使用十六进制常量?

2 个答案:

答案 0 :(得分:0)

简单错字:我在函数签名中写了RETURN而不是RETURNS

这是固定代码:

DROP FUNCTION IF EXISTS _test_hex_literal;
DELIMITER $$
CREATE FUNCTION _test_hex_literal()
    RETURNS BIGINT UNSIGNED
    DETERMINISTIC
    NO SQL
BEGIN
    RETURN CAST(0x0055aa55aa55aaff AS UNSIGNED);
END;
$$
DELIMITER ;
SELECT _test_hex_literal();
DROP FUNCTION IF EXISTS _test_hex_literal;

答案 1 :(得分:0)

关于RETURN的错误投诉,而不是十六进制文字:

  

您的SQL语法有错误;检查手册   对应于您的MySQL服务器版本,以便使用正确的语法   靠近'返回 BIGINT UNSIGNED       确定性       没有SQL开始       返回过去(0x0055'

这是the syntax

CREATE
    [DEFINER = { user | CURRENT_USER }]
    FUNCTION sp_name ([func_parameter[,...]])
    RETURNS type
          ^
    [characteristic ...] routine_body