2016-12-08 17 views
0

私はストアドプロシージャを書くのが良くありません。これで私を助けてください。私はmysqlのワークベンチを使用します。私はストアドプロシージャを作成し、2つのselect文を使って2つの出力を得ました。しかし、ストアドプロシージャの最後に書かれた1つのselect文を出力します。以下は手順です。ストアドプロシージャが複数の出力パラメータの結果を与えない

CREATE DEFINER=`root`@`localhost` PROCEDURE `new_procedure`(IN date_x DATE, OUT emplist3 varchar(200), OUT emplist4 varchar(200)) 
    BEGIN 
    select employee.name as emplist3 
    from employee 
    where employee.id IN (
    select emp_position.employee_id 
    from emp_position 
    where emp_position.employee_id NOT IN (
     select emp_event.employee_id 
     from emp_event 
     where emp_event.date = date_x 
    ) 
    AND emp_position.position = "Cameraman" 
    ); 

    select employee.name as emplist4 
    from employee 
    where employee.id IN (
    select emp_position.employee_id 
    from emp_position 
    where emp_position.employee_id NOT IN (
     select emp_event.employee_id 
     from emp_event 
     where emp_event.date = date_x 
    ) 
    AND emp_position.position = "Camera_Assistant" 
    ); 
    END 

上記の手順からemplist3とemplist4の両方の結果を取得してください。 ありがとうございます。

+0

代わりでの参加と私は、このデータベースのものを書くには良くないよ@AnkitAgrawal優れたパフォーマンス、優れたSQLクエリ –

+0

を見るには参加の代わりではない左。あなたのソリューションで自分のコードを編集してください。 – Christeen

+0

公開した手順はうまくいくように見えます。質問を編集して、それを呼び出すコード(変数定義を含む)、コードからの実際の出力、およびselect文がmysqlworkbenchで実行されたときに期待通りに動作することを確認できますか?良いと思われるサンプルデータを公開できる場合は、 –

答えて

0

必要に応じて次の例を調整してください。あなたは、内側使うべき

mysql> DELIMITER // 

mysql> DROP PROCEDURE IF EXISTS `new_procedure`// 
Query OK, 0 rows affected (0.00 sec) 

mysql> CREATE DEFINER=`root`@`localhost` PROCEDURE `new_procedure`(
    -> IN `date_x` DATE, 
    -> OUT `emplist3` VARCHAR(200), 
    -> OUT `emplist4` VARCHAR(200) 
    ->) 
    -> BEGIN 
    -> SELECT 'EMPLOYEE.NAME 1' INTO `emplist3` 
    -> FROM DUAL 
    -> WHERE `date_x` = `date_x`; 
    -> 
    -> SELECT 'EMPLOYEE.NAME 2' INTO `emplist4` 
    -> FROM DUAL 
    -> WHERE `date_x` = `date_x`; 
    -> END// 
Query OK, 0 rows affected (0.00 sec) 

mysql> DELIMITER ; 

mysql> SET @`NAME1` := NULL, 
    ->  @`NAME2` := NULL; 
Query OK, 0 rows affected (0.00 sec) 

mysql> CALL `new_procedure`(DATE('2000-01-01'), @`NAME1`, @`NAME2`); 
Query OK, 1 row affected (0.00 sec) 

mysql> SELECT @`NAME1`, @`NAME2`; 
+-----------------+-----------------+ 
| @`NAME1`  | @`NAME2`  | 
+-----------------+-----------------+ 
| EMPLOYEE.NAME 1 | EMPLOYEE.NAME 2 | 
+-----------------+-----------------+ 
1 row in set (0.00 sec) 
関連する問題