MySQL 创建存储过程报错

╰半橙微兮° 2024-04-18 02:07 132阅读 0赞

mysql> delimiter
mysql> CREATE FUNCTION check_rollbackPatch(THE_REFERNCE_LABEL VARCHAR(75), THE_COLUMN_NAME VARCHAR(75), THE_INSTALL_VERSION VARCHAR(75), THE_VERSION_LEVEL_TABLE_NAME VARCHAR(75))
-> RETURNS INTEGER DETERMINISTIC
-> BEGIN
-> DECLARE INSTALL_VERSION VARCHAR(80) DEFAULT NULL;
-> DECLARE REFERENCE_LABEL VARCHAR(80) DEFAULT NULL;
-> DECLARE THE_QUERY VARCHAR(500) DEFAULT NULL;
-> DECLARE too_many_rows CONDITION FOR 1172;
-> DECLARE CONTINUE HANDLER FOR too_many_rows
-> BEGIN
-> SELECT concat(‘[INFO] Several ‘, THE_REFERNCE_LABEL, ‘ references found.’);
-> RETURN 0;
-> END;
-> DECLARE CONTINUE HANDLER FOR NOT FOUND
-> BEGIN
-> /*SELECT concat(‘[INFO] ‘, THE_REFERNCE_LABEL, ‘ reference not found.’);*/
-> RETURN 1;
-> END;
-> SELECT concat(‘’, THE_COLUMN_NAME, ‘, C_INSTALL_VERSION’) INTO @V_PART1;
-> SELECT concat(THE_COLUMN_NAME, ‘=’’’, THE_REFERNCE_LABEL, ‘’’ and C_INSTALL_VERSION=’’’, THE_INSTALL_VERSION, ‘’’’) INTO @V_PART2;
-> SELECT format_selectQuery(THE_VERSION_LEVEL_TABLE_NAME, @V_PART1, @V_PART2) INTO THE_QUERY;
-> /*SELECT concat(‘[INFO] The query to execute is [‘, THE_QUERY, ‘]‘);*/
-> /*EXECUTE IMMEDIATE THE_QUERY into REFERENCE_LABEL, INSTALL_VERSION;*/
-> /*SELECT concat(‘[INFO] ‘, THE_REFERNCE_LABEL, ‘ reference found’);*/
-> RETURN 0;
-> END

ERROR 1415 (0A000): Not allowed to return a result set from a function
mysql> delimiter ;

报错原因:
在MySQL的function里,不能使用SELECT语句来返回结果集,会报错。

注释掉后,报错消失
mysql> delimiter
mysql> CREATE FUNCTION check_rollbackPatch(THE_REFERNCE_LABEL VARCHAR(75), THE_COLUMN_NAME VARCHAR(75), THE_INSTALL_VERSION VARCHAR(75), THE_VERSION_LEVEL_TABLE_NAME VARCHAR(75))
-> RETURNS INTEGER DETERMINISTIC
-> BEGIN
-> DECLARE INSTALL_VERSION VARCHAR(80) DEFAULT NULL;
-> DECLARE REFERENCE_LABEL VARCHAR(80) DEFAULT NULL;
-> DECLARE THE_QUERY VARCHAR(500) DEFAULT NULL;
-> DECLARE too_many_rows CONDITION FOR 1172;
-> DECLARE CONTINUE HANDLER FOR too_many_rows
-> BEGIN
-> /*SELECT concat(‘[INFO] Several ‘, THE_REFERNCE_LABEL, ‘ references found.’);*/
-> RETURN 0;
-> END;
-> DECLARE CONTINUE HANDLER FOR NOT FOUND
-> BEGIN
-> /*SELECT concat(‘[INFO] ‘, THE_REFERNCE_LABEL, ‘ reference not found.’);*/
-> RETURN 1;
-> END;
-> SELECT concat(‘’, THE_COLUMN_NAME, ‘, C_INSTALL_VERSION’) INTO @V_PART1;
-> SELECT concat(THE_COLUMN_NAME, ‘=’’’, THE_REFERNCE_LABEL, ‘’’ and C_INSTALL_VERSION=’’’, THE_INSTALL_VERSION, ‘’’’) INTO @V_PART2;
-> SELECT format_selectQuery(THE_VERSION_LEVEL_TABLE_NAME, @V_PART1, @V_PART2) INTO THE_QUERY;
-> /*SELECT concat(‘[INFO] The query to execute is [‘, THE_QUERY, ‘]‘);*/
-> /*EXECUTE IMMEDIATE THE_QUERY into REFERENCE_LABEL, INSTALL_VERSION;*/
-> /*SELECT concat(‘[INFO] ‘, THE_REFERNCE_LABEL, ‘ reference found’);*/
-> RETURN 0;
-> END

Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26506993/viewspace-2124732/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26506993/viewspace-2124732/

发表评论

表情:
评论列表 (有 0 条评论,132人围观)

还没有评论,来说两句吧...

相关阅读