2017-01-20 5 views
0

私は、2つの入力を取り、2つの出力を与える手続きを作成しました。
私は別にクエリを実行すると、それは私に適切な出力を提供します、しかし、私は、クエリを呼び出しながらそれは私null結果プロシージャがnullの結果を生成するのはなぜですか?

を作る手順を呼び出そうとする場合:

SELECT field1, field2 
     INTO @var1, @var2 
     FROM MyTable ID=? and Name=? 

、その後:

select @var1, @var2; 

しかし、同じコードを手続きに組み込むと、両方のフィールドにnullが与えられます。

手順:

DELIMITER $$ 

CREATE DEFINER=`user`@`localhost` PROCEDURE `My_Proc`(
    IN `ID` INT, 
    IN `Name` VARCHAR(20) 
    -- OUT `result` INT, 
    -- OUT `result1` INT 
) 
BEGIN 

set @var1 = 0; 
set @var2 = 0; 

    set @query := CONCAT("SELECT 
         field1, field2 
      INTO @var1, @var2 
         FROM MyTable ID=? and Name=?"); 

    PREPARE stmt FROM @query; 
    Execute stmt USING @Id,@Name; 
    DEALLOCATE PREPARE `stmt`; 

select @var1,@var2; 


END 

私は手続きの外select @var1,@var2;を呼び出そうとしましたが、それはまた、ヌルフィールドを与えます。あなたが手順のthatsの中にいくつかのミスは、以下の削除されている必要があり、私はMySQLのワークベンチで6.0

+0

削除を持っていますfield1とfield2の動的クエリの単一引用符を使用し、id =の前にwhere節を使用します。 –

+0

@AnkitAgrawal、実際のクエリではないところで、デモコードの作成中に間違って追加しました。 – Niraj

+0

私の答えは以下を参照 –

答えて

1

を働いています


..........見

DELIMITER $$ 

CREATE DEFINER=`user`@`localhost` PROCEDURE `My_Proc`(
    IN `ID` INT, 
    IN `Name` VARCHAR(20) 
    -- OUT `result` INT, 
    -- OUT `result1` INT 
) 
BEGIN 

set @var1 = 0; 
set @var2 = 0; 

    set @query := CONCAT("SELECT 
         field1,field2 
      INTO @var1, @var2 
         FROM MyTable where ID=? and Name=?"); 

    PREPARE stmt FROM @query; 
    Execute stmt USING @Id,@Name; 
    DEALLOCATE PREPARE stmt ; 

select @var1,@var2; 


END 
+0

ありがとう。元のProcで変更してチェックしてみましょう。 – Niraj

+0

また、 'from'はデモで見逃されました。私は小さな間違いを訂正し、まだ結果はありません! – Niraj

+0

入力名を疑問符で置き換えます。 –

関連する問題