2012-05-02 6 views
0

私たちの会社のMySQLサーバーに新しいストアドプロシージャを追加する必要があります。ちょっと違うので、私は既に存在するものを使用し、追加のフィールドを追加し、プロシージャの名前を変更しました。MySQLのストアドプロシージャの奇妙な問題

この行の0にreffering
Error Code: 1064. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 3 

を::SET @update_id:奇妙なことは、今、私は文を実行したい場合、それは返すことです= 0;それを変えるのは、SHOW CREATE PROCEDUREを使ってストアドプロシージャを照会したことです。これはデータベースに保存され、正常に動作しています。私は新しいストアドプロシージャとして使用することはできません(新しいテストデータベースに適用しようとしても、既存のデータベースに新しい名前を付けて使用しても問題ありません)。 私はインターネットで解決策を探しました。残念ながら無駄に。私は新しいテーブルといくつかのデモ値を使って新しいデータベースをセットアップして、元の変更されていないストアドプロシージャを実行しようとしました。まったく同じエラーを返します。私は私が間違って何のアイデアから完全だとあなたたちは私を助けることができると思います

CREATE DEFINER=`root`@`localhost` PROCEDURE `customer_getcard`(IN Iinstance INT, IN Itimebuy DOUBLE, IN Iprice DECIMAL(10,2), IN Itariff INT, IN Icomment VARCHAR(128)) 
BEGIN 
    SET @update_id := 0; 
    UPDATE customer_shop SET state = 1, id = (SELECT @update_id := id), instance=Iinstance, timebuy=Itimebuy, price=Iprice, comment=Icomment WHERE tariff=Itariff AND state = 0 LIMIT 1; 
    SELECT * FROM customer_shop WHERE id = @update_id; 
END 

:ここ

は私が話している現在使用して作業するストアドプロシージャです。 :/

よろしく、マーク

+0

投稿全体のエラー! – Namphibian

+0

ここに行きます: エラーコード:1064. SQL構文にエラーがあります。あなたのMySQLサーバーのバージョンに対応するマニュアルをチェックして、正しい構文を "3行目"の近くで使用してください。 –

答えて

1

、対応するEND

DELIMITER ;; -- or anything else you like 

CREATE PROCEDURE 
    ... 
END;;  -- use the new delimiter you chose above here 

DELIMITER ; -- reset to normal 
+0

それを解決しました。それを解決..多くの多くのありがとう。 :) –

-1

MySQLのストアドプロシージャを使用していない ":=" 値の割り当てのために、単に "=" を使用します。

また、「id =(SELECT @update_id:= id)」は受け入れ可能とは思われません。

CREATE DEFINER=`root`@`localhost` PROCEDURE `customer_getcard`(IN Iinstance INT, IN Itimebuy DOUBLE, IN Iprice DECIMAL(10,2), IN Itariff INT, IN Icomment VARCHAR(128)) 
BEGIN 
    select id into @update_id from customer_shop WHERE tariff=Itariff AND state = 0 LIMIT 1; 
    UPDATE customer_shop SET state = 1, instance=Iinstance, timebuy=Itimebuy, price=Iprice, comment=Icomment where id = @update_id; 
    SELECT * FROM customer_shop WHERE id = @update_id; 
END 

あなたはまた、場合にエラーハンドラを配置することで編集することが一致する行がありません。ここでは(未テスト)の代替ソリューションです。

それは BEGIN後で前だと構文エラーになりますが、MySQLは、現在お使いの CREATE PROCEDUREコマンドは、それが( 0後、3行目)に出会う最初の ;で終わると思って、代替コマンドの区切り文字を定義する必要が
+0

私はそれを試してみました。動作しません。しかし、私が言ったように、上記のストアドプロシージャはサーバーに保存され、正常に動作します。たぶんそれは古いmysqlで行われた、私は知らない。私はあなたのスクリプトを試しましたが、同じエラーを返します。今回は "LIMIT 1"の1が強調表示されます。 :/ –

+0

私は= =) –