MySQL查询浏览器程序错误代码-1

标签 mysql stored-procedures

我在使用 MySQL 时遇到了一个相当奇怪的问题。尝试创建一个过程来更新数据库中的某些字段(代码如下)。

问题出在当前注释的行上。看来,如果在过程中没有执行任何 SELECT 语句,MySQL 查询浏览器将返回错误代码“-1,执行 SQL 查询时出错”。

我在 HeidiSQL 中尝试了同样的操作,错误是“无法返回结果集”。所以我想问题是我是否总是必须在程序中选择某些内容,或者我是否错过了其他一些内容。

删除评论后查询工作正常。

DELIMITER /
DROP PROCEDURE IF EXISTS updateFavourites /
CREATE PROCEDURE updateFavourites(quota INT)
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE artist_id,releases INT;
DECLARE c_artist Cursor FOR
    SELECT Artist.id_number,COUNT(Artist.id_number) FROM Artist
    JOIN CD ON CD.is_fronted_by = Artist.id_number
GROUP BY Artist.id_number;

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000'
    SET done=1;

IF quota > 0 THEN
    OPEN c_artist;
    REPEAT
    FETCH c_artist INTO artist_id,releases;
        IF NOT done THEN
        IF releases >= quota THEN
            UPDATE CD SET CD.rating='favourite' WHERE CD.is_fronted_by = artist_id;
        END IF;
    END IF;
UNTIL done END REPEAT;
CLOSE c_artist;
-- SELECT 'Great success';
ELSE
    SELECT CONCAT('\'quota\' must be greater than 0.',' Got (',quota,')'); 
END IF;

END /
DELIMITER ;

这是创建表和一些数据的 SQL:

DROP TABLE IF EXISTS CD;
DROP TABLE IF EXISTS Artist;

CREATE TABLE Artist (
id_number INT UNSIGNED AUTO_INCREMENT  PRIMARY KEY,
name VARCHAR(50),
);

CREATE TABLE CD (
catalog_no      INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY,
is_fronted_by       INT UNSIGNED,
rating          ENUM ('favourite','top draw','good','so-so','poor','rubbish'),
CONSTRAINT fk_CD_Artist  FOREIGN KEY (is_fronted_by) REFERENCES Artist(id_number) ON UPDATE     CASCADE
);

INSERT INTO Artist VALUES(11,'Artist 1');
INSERT INTO Artist VALUES(10,'Artist 2');
INSERT INTO CD VALUES (7,11, 'top draw');
INSERT INTO CD VALUES (650,11,'good');
INSERT INTO CD VALUES (651,11,'good');
INSERT INTO CD VALUES (11,10,'favourite');

最佳答案

查询浏览器不适用于运行脚本,仅用于单个查询。 我通过将光标移动到每个查询(DELIMITER 除外)并按 Ctrl+Enter 来尝试您的代码。 它毫无问题地创建了该存储过程。 (只需刷新左侧的架构)。

如果您想创建过程,请使用菜单“脚本”->“创建存储过程/函数”。

但最好忘记 QueryBrowser,它根本不受支持(而且实际上没有用)。 如果您有不错的硬件和充足的资源,请尝试Workbench 5.2否则使用 SQLyog

关于MySQL查询浏览器程序错误代码-1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1847656/

相关文章:

python - 无法使用 Python mysqldb 模块使 MySQL 源查询正常工作

mysql - 如何在 Datagrip 中创建触发器?

php - 使用 php 样式提取 P 标签之间的数据

mysql - mysql没有找到记录怎么处理?

java - 存储过程在调用时不起作用,但准备好的语句可以

sql-server - SQL Server 中可以递归调用存储过程吗?

java - 在其他Java类中使用swing控件

php - 即使 mysql 表中有值,SQL 查询也不会返回值

tsql - Out 参数被正确分配,但调用者只看到一个 NULL。线索?

sql - 存储过程间歇性地超时!