2016-12-08 3 views
0

Я плохо разбираюсь в хранимых процедурах. Пожалуйста помоги мне с этим. Я использую workbench mysql. Я создал хранимую процедуру для получения двух выходов с двумя операторами select. Но он дает только один вывод из одного оператора 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 из приведенной выше процедуры. Thank U.

+0

вы должны использовать внутреннее соединение, а не в и слева присоединиться вместо не, чтобы получить лучшую производительность, лучше SQL запрос –

+0

@AnkitAgrawal Я не очень хорош в написании этой базы данных вещей. Не могли бы вы отредактировать мой код с помощью своего решения? – Christeen

+0

Процедура, которую вы опубликовали, выглядит так, как будто она должна работать. Можете ли вы отредактировать свой вопрос, чтобы включить код, который вызывает его (включая определения переменных), фактический вывод из кода и подтверждение того, что операторы выбора работают должным образом при запуске в 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) 
Смежные вопросы