2017-08-02 6 views
0

プロシージャを持つprocedure.sqlという名前のSQLファイルがあります。 マリアDBバージョン:Serverバージョン:10.0.29-MariaDB-0ubuntu0.16.04.1のUbuntu 16.04エラー1064:SQL構文にエラーがあります。あなたのMariaDBサーバーのバージョンに対応するマニュアルをチェックして右の構文を使用してください。

しかし、次のように、私はエラーを取得しています:

>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/

+0

何のコードでは、あなたのprocedure.sqlにありますか?ここにガラス球はありません:) – theGtknerd

+0

一度にコード全体を提供することはできません。 – BhaskarAzure

答えて

0

構文エラーがCREATE PROCEDUREのためではないが、それは前のDROP PROCEDUREのためだ、あなたはそこにブラケットを持つべきではありません。

DROP PROCEDURE IF EXISTS XXX.updateDoc_StorageID; 

プロシージャが削除されていないので、2番目のエラーが続きます。まだ存在します。

また、デリミタを修正してください。開始時に$$と設定すると、その後のクエリはすべてセミコロンではなく$$で終わる必要があります。

+0

推奨するとおりに変更した後:エラー:エラー2:行2のエラー1221(HY000):OR REPLACEおよびTRIGGERS/SP/EVENTの不正使用 – BhaskarAzure

+0

Actul質問のコードを変更しました。助けてください.. – BhaskarAzure

+0

プロシージャの 'OR REPLACE'句は10.0を使用している間に10.1で導入されました。それを失う、プロシージャを最初に削除するので、あなたはそれをとにかく必要としません。そして、現在のスニペットではまだ区切り文字が固定されていません。単純に '$$'を '//'に置き換えていますが、同じことをやはり適用します。セミコロン以外を区切り文字として設定すると、それは次のようなことです。 – elenst

0

バージョン10.0.xのののStoredProcedureのための正しい構文は次のようになります。

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 ; 
関連する問題

 関連する問題