当前位置: 首页 > 知识库问答 >
问题:

错误1064:您的SQL语法有错误;查看与您的MariaDB服务器版本相对应的手册,以了解可使用的正确语法

程举
2023-03-14

我有一个名为procedure.sql的Sql文件,其中包含一个过程。Maria DB版本:服务器版本:10.0.29-MariaDB-0ubuntu0.16.04.1Ubuntu 16.04

但我得到的错误如下:

>mysql -u root -p XXX < /home/azure/Downloads/procedure.sql 
>Enter password: 
>ERROR 1064 (42000) at line 2: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '();
>USE XXX;
>CREATE OR REPLACE PROCEDURE XXX.updateDoc_StorageID () 
>BEGIN' at line 1

有人能帮我吗?

procedure.sql代码:

DELIMITER //
DROP PROCEDURE IF EXISTS XXX.updateDoc_StorageID;
USE XXX;
CREATE OR REPLACE PROCEDURE XXX.updateDoc_StorageID () 
BEGIN
    DECLARE myTransacID INT DEFAULT 0; 
    DECLARE myTransProductId INT DEFAULT 0; 
    DECLARE myDocStoreID VARCHAR(500) DEFAULT '0'; 
    DECLARE my_count INT DEFAULT 0;
    DECLARE trans_csr CURSOR FOR SELECT 1,2 FROM MainTable ORDER BY TransactionID;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET my_count=1;
    SET my_count=0;
    OPEN trans_csr;
        trans_loop:LOOP
            FETCH trans_csr INTO myTransacID,myTransProductId;
          IF my_count=1 THEN
                   LEAVE trans_loop;
                END IF;
                If(myTransProductId=8)
                   then
                   if exists(....)
                   then
                           .......
                   end if;
                   elseif (myTransProductId=11) 
                   then
                   if exists(........)
                   then
                           .......
                   END IF;
            END IF;
        END LOOP trans_loop;
    CLOSE trans_csr;
    SET my_count=0;
END;
//
DELIMITER ;

我得到的参考资料来自:https://mariadb.com/kb/en/mariadb/create-procedure/

共有2个答案

韩涵衍
2023-03-14

版本10.0的正确语法。x Stored流程将是:

DELIMITER //
DROP PROCEDURE IF EXISTS XXX.updateDoc_StorageID;
USE XXX;
CREATE OR REPLACE PROCEDURE XXX.updateDoc_StorageID () 
BEGIN
    DECLARE myTransacID INT DEFAULT 0; 
    DECLARE myTransProductId INT DEFAULT 0; 
    DECLARE myDocStoreID VARCHAR(500) DEFAULT '0'; 
    DECLARE my_count INT DEFAULT 0;
    DECLARE trans_csr CURSOR FOR SELECT 1,2 FROM MainTable ORDER BY TransactionID;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET my_count=1;
    SET my_count=0;
    OPEN trans_csr;
        trans_loop:LOOP
            FETCH trans_csr INTO myTransacID,myTransProductId;
          IF my_count=1 THEN
                   LEAVE trans_loop;
                END IF;
                If(myTransProductId=8)
                   then
                   if exists(....)
                   then
                           .......
                   end if;
                   elseif (myTransProductId=11) 
                   then
                   if exists(........)
                   then
                           .......
                   END IF;
            END IF;
        END LOOP trans_loop;
    CLOSE trans_csr;
    SET my_count=0;
END;
//
DELIMITER ;
蓝华皓
2023-03-14

语法错误不是针对CREATE PROCEDURE,而是针对前面的DROP PROCEDURE,您不应该在那里有括号。

DROP PROCEDURE IF EXISTS XXX.updateDoc_StorageID;

第二个错误随之而来,因为该过程没有被删除,所以它仍然存在。

此外,修复分隔符——如果您在开始时设置$$,那么每一个进一步的查询都应该以$$结尾,而不是分号。

 类似资料: