存储过程不提供多个输出参数的结果

时间:2016-12-08 05:28:41

标签: mysql stored-procedures

我不擅长编写存储过程。请帮帮我。我使用mysql workbench。我创建了存储过程以获得两个带有两个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的结果。 谢谢你。

2 个答案:

答案 0 :(得分:0)

根据需要调整和修改以下示例。

p {
  all: revert;
}

答案 1 :(得分:0)

您需要选择两个参数,因为那是out参数的作用。

您还需要确保返回值是标量,

您不能在out参数中返回整个结果集。

使用输出参数的主要好处是,您可以在返回过程之前对过程中的数据进行一些操作, 如果您无意这样做和/或可能返回多行,那么您就不能真正使用完参数。

此外,您还没有在代码中更改定界符,因此需要在存储过程中更改定界符,以便MYSQL将整个过程视为代码块。

尝试: 分隔符// 创建过程new_procedure(date_x DATE,OUT emplist3 varchar(200), OUT emplist4 varchar(200) )

BEGIN
      select employee.name INTO 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 INTO 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 //
DELIMITER ;

在创建过程之后,您需要像这样对参数调用select语句:

SELECT @emplist3,@emplist4;

或者如果您稍后要调用该过程:

CALL new_procedure(@myout1,@myout2);
SELECT @myout1,@myout2;