我不擅长编写存储过程。请帮帮我。我使用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的结果。 谢谢你。
答案 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;