2011-10-27 18 views
0

私はMysqlを初めて使用しています。私は、製品の価格を更新するストアドプロシージャを作成したい。私はこのストアドプロシージャを実装するためにjdbcを使用します。しかし、私のストアドプロシージャのコマンドは何度も失敗しました。以下はmysqlコードです。 「p」は製品を意味し、「des」は価格の低下を意味し、「pro」は製品名を意味する。 JavaのCallableStatementは、製品名とその製品価格の低下を示します。したがって、ストアドプロシージャは、対応する製品の価格を下げます。Mysqlコマンドがストアドプロシージャを実装できませんでした

DELIMITER $ 

CREATE PROCEDURE updateP(IN pro CHAR(10), IN des INT) 

BEGIN 
    UPDATE customers 
    SET price = price-des 
    WHERE product= pro; 

END$ 

DELIMITER ; 

パラメータとして渡さ減少量によって現在の価格を下げる必要があること:

`CREATE PROCEDURE updateP(IN pro CHAR(10), IN des INT)` 
` 
BEGIN` 
    UPDATE customers 
    `DECLARE p INT;` 
    `SET p = (SELECT price FROM customers WHERE product= pro);` 
    `SELECT p;` 
    `p = p - des;` 
END 
+0

ストアドプロシージャは意味をなさないものです。 1.phere = p-des'は 'CHAR'で実行されるすべての演算で、減算したい場合は数値型にする必要があります。 3.ある時点でテーブルを更新したいと思っていて、どこにも 'update'ステートメントが表示されていないと思います。あなたの目標をもう少し明確にしてください。 – Icarus

+0

返信用のThx。顧客はテーブルであり、価格はそれの属性です。 – user1015798

答えて

0

私はこれがあなたが必要とするすべてだと思います。

1つの提案:sprocUpdateProductまたはUpdateProduct_spのような完全な名前を使用updatePあなたの手順に名前を付けないでください。明日あなたが人を更新する必要がある場合は、がPersonまたはProductのいずれかを更新するかどうかが分かりません。変数についても同様で、フルネームを使用します。

+0

thx、どこでもセミコロンを追加する必要がありますか? – user1015798

+0

@ user1015798 'Where'節の後にセミコロンを追加しました。正直言って、私はMySQLにストアドプロシージャを書いていないので、6年以上経っていますが、覚えている限り、私が置いたセミコロンだけが必要です。他の誰かがここで確認できますか? – Icarus

+0

@Icarusセミコロンが必要です。スクリプトの一部としてプロシージャーコードの前と後ろにセミコロン以外の区切り文字を設定することを忘れないでください。あなたの投稿を編集しようと思います。 –

関連する問題