我想在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错误,是否有解决方法在我的函数的源代码中使用十六进制常量?
答案 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