2016-04-11 12 views
0

電子メールを使用してADMINテーブルからadminIDを取得し、製品テーブルにadminIDを保存したいとします。私はそれをやってみました、それはProductIDのadminIDにnullを返します。私が間違っている箇所を教えてください。insertステートメントとselectステートメントを使用したスト​​アドプロシージャ

CREATE PROCEDURE prc_saveProduct 
(
    IN inputuserEmail VARCHAR(255), 
    inputproductName VARCHAR(255), 
    inputpoints INT(11), 
) 
BEGIN 
    SET @AdminID = (SELECT AdminID FROM ADMIN WHERE email = inputuserEmail); 

    INSERT INTO PRODUCTS(AdminID, productName, points) 
    VALUES (@AdminID, inputproductName, inputpoints); 
END 
+0

あなたのテーブルアーキテクチャとデータを投稿することができます –

+0

あなたの挿入ステートメントでは、 "、"ポイントと入力ポイントの後にコンマを置くことができません。それが問題です。私は文の構文に訂正された挿入と完全な答えを投稿した。 INT(11)の後のprocのparamsの宣言には余分なカンマがあります。 – user2278120

答えて

2

これは動作します。

DELIMITER $$ 

CREATE PROCEDURE `yourSchema`.`prc_saveProduct`(
    p_inputuserEmail VARCHAR(255), 
    p_inputproductname VARCHAR(255), 
    p_inputpoints INT(11) 
) 
    BEGIN 

    DECLARE _AdminID VARCHAR(255); 

    SELECT 
     AdminID FROM ADMIN WHERE email = p_inputuserEmail 
    INTO 
     _AdminID; 

    INSERT INTO PRODUCTS(
    AdminID, 
    productName, 
    points 
    ) 
    VALUES 
    (
    _AdminID, 
    p_inputproductName, 
    p_inputpoints 
    ); 


    END$$ 

DELIMITER ; 

p_は必要ではありません。私はそれを区別するためにproc paramsを追加するだけです。私がローカル変数 "_AdminID"に使用するのが好きなアンダースコアですが、それは必ずしも必要ではありません。私はちょうどそれらの命名規則を好む。

+0

あなたはセッション変数をlocal..whatに変更しました。それは影響を与えますか?それはうまくいくでしょうか? –

+0

それは動作します。このストアドプロシージャを呼び出すと、後で同じセッションで使用するAdminID値を持つために、他のプロセスでセッション変数が必要な場合にのみ影響を与えます。 – user2278120

+0

私の間違いthats私の間違いthats ...なぜいくつかのより多くの値があります...編集中私はそれらのコンマの@ジョーダン – dpk

関連する問題