什么"以下查询失败" &#34 ;;""在MySQL中意味着什么

时间:2017-10-26 15:25:53

标签: mysql sql triggers

在尝试更新触发器时,MySQL告诉我查询&#34 ;;"失败。怎么样&#34 ;;"甚至MySQL观点中的查询都超出了我的范围。

确切的信息是:

  

以下查询失败:";" MySQL说:#1065 - 查询是空的

这里是新的触发器(AFTER INSERT):

BEGIN
DECLARE vIdPlacet VARCHAR(40);
DECLARE vTypeTravaux VARCHAR(32);
DECLARE vEssence VARCHAR(3) DEFAULT '-';
DECLARE vClasseHau VARCHAR(5) DEFAULT '-';
DECLARE vNoMesurag int;

DECLARE new_id_parcelle INT UNSIGNED DEFAULT 0;
DECLARE new_no_microplacette INT UNSIGNED DEFAULT 0;

IF NEW.deleted = 0 THEN
    SELECT id_parcelle, no_microplacette
    INTO new_id_parcelle, new_no_microplacette
    FROM microplacette
    WHERE id_microplacette = NEW.id_microplacette;

    SELECT travaux, no_mesurag, id__placet
    INTO vTypeTravaux, vNoMesurag, vIdPlacet
    FROM secteur
    LEFT JOIN parcelle ON secteur.id_secteur = parcelle.id_secteur
    WHERE id_parcelle = new_id_parcelle; 

    IF vTypeTravaux = 'inventaire' THEN
        SELECT abbreviation INTO vEssence FROM essences WHERE _id = NEW.id_essence;


        IF NEW.hauteur_15 = 1 THEN
            SET vClasseHau = '15CM+';
        END IF;

        IF (SELECT COUNT(*) FROM imported_pres_ess WHERE id__placet = vIdPlacet AND
                                                             caracteris = '-' AND
                                                             classe_hau = vClasseHau AND
                                                             essence = vEssence AND
                                                             no_mesurag = vNoMesurag AND
                                                             no_micro_p = new_no_microplacette) = 0 THEN
            INSERT INTO imported_pres_ess (id__placet, caracteris, classe_hau, essence, no_mesurag, no_micro_p)
                   VALUES (vIdPlacet, '-', vClasseHau, vEssence, vNoMesurag, new_no_microplacette);
        END IF; 


        IF (SELECT COUNT(*) FROM imported_semi_gau WHERE id__placet = vIdPlacet AND
                                                             classe_hau = vClasseHau AND
                                                             essence = vEssence AND
                                                             no_mesurag = vNoMesurag AND
                                                             no_micro_p = new_no_microplacette) = 0 THEN
            INSERT INTO imported_semi_gau (id__placet, classe_hau, essence, no_mesurag, no_micro_p)
                   VALUES (vIdPlacet, vClasseHau, vEssence, vNoMesurag, new_no_microplacette);
        END IF; 


        IF NEW.diametre > 0 THEN
            SET vClasseHau = 'D2_D8';
        ELSE
            SET vClasseHau = '-';
        END IF;

        IF (SELECT COUNT(*) FROM imported_pres_ess WHERE id__placet = vIdPlacet AND
                                                             caracteris = '-' AND
                                                             classe_hau = vClasseHau AND
                                                             essence = vEssence AND
                                                             no_mesurag = vNoMesurag AND
                                                             no_micro_p = new_no_microplacette) = 0 THEN
            INSERT INTO imported_pres_ess (id__placet, caracteris, classe_hau, essence, no_mesurag, no_micro_p)
                   VALUES (vIdPlacet, '-', vClasseHau, vEssence, vNoMesurag, new_no_microplacette);
        END IF; 


        IF (SELECT COUNT(*) FROM imported_semi_gau WHERE id__placet = vIdPlacet AND
                                                             classe_hau = vClasseHau AND
                                                             essence = vEssence AND
                                                             no_mesurag = vNoMesurag AND
                                                             no_micro_p = new_no_microplacette) = 0 THEN
            INSERT INTO imported_semi_gau (id__placet, classe_hau, essence, no_mesurag, no_micro_p)
                   VALUES (vIdPlacet, vClasseHau, vEssence, vNoMesurag, new_no_microplacette);
        END IF; 
    END IF;
END IF;
END

2 个答案:

答案 0 :(得分:0)

我尝试创建你显示的程序,但我没有收到任何错误。

当您尝试通过API执行查询但查询字符串为空时,会发生有关“空语句”的错误。

我可以这样在mysql客户端中复制错误:

mysql> set @s = '';

mysql> prepare stmt from @s;
ERROR 1065 (42000): Query was empty

因此,我建议您不要查看存储过程,但无论您执行此操作的代码是什么,并检查每次尝试执行查询时,都要提交非空字符串。

答案 1 :(得分:0)

事实证明,我正在更新的触发器在此期间被删除了,所以我正在更新一个不再存在的触发器。

刷新页面后我发现了(触发器从触发器列表中消失了)。

我只是重新创建了触发器并且工作正常。