我想在另一个过程中调用存储过程,但是语法似乎不正确。
我试图直接跳过该过程,直接执行select命令,但这似乎不起作用,而且我想知道如何做到这一点。
DELIMITER //
create procedure Find_Eid(Pid int)
select EId from Employees inner join Patient on EId = EId_fk where Patient.PId = Pid;
//
DELIMITER ;
call Find_Eid(4);
drop procedure Fill_Interact;
DELIMITER //
create procedure Fill_Interact()
begin
declare N1 int;
declare TOT date;
declare Rid int;
declare Pid int;
declare Eid int;
set N1 = (select count(*) from Patient);
set TOT = curdate();
set Rid = 1;
set Pid = 1;
while N1 > 0 do
set Eid = (call Find_Eid(Pid));
insert into Interact
(Time_Of_Treatment, RId_fk, PId_fk, EId_fk)
values
(TOT,Rid,Pid, Eid);
if Rid = (select count(*) from Room limit 1) then
set Rid = 1;
set TOT = TOT + 1;
else
set Rid = Rid + 1;
end if;
set N1 = N1 - 1;
set Pid = Pid + 1;
end while;
end;
//
DELIMITER ;
call Fill_Interact();
select * from Interact;
答案 0 :(得分:1)
如果要将过程值分配给另一个变量,则必须在proc中使用out参数。因此,您的第一个过程应该是-
DELIMITER //
create procedure Find_Eid(in Pid int, out eid int)
select EId into eid
from Employees
inner join Patient on EId = EId_fk
where Patient.PId = Pid;
//
然后您可以在第二个过程中使用此proc-
drop procedure Fill_Interact;
DELIMITER //
create procedure Fill_Interact()
begin
declare N1 int;
declare TOT date;
declare Rid int;
declare Pid int;
declare Eid int;
set N1 = (select count(*) from Patient);
set TOT = curdate();
set Rid = 1;
set Pid = 1;
while N1 > 0 do
call Find_Eid(Pid, Eid);
insert into Interact
(Time_Of_Treatment, RId_fk, PId_fk, EId_fk)
values
(TOT,Rid,Pid, Eid);
if Rid = (select count(*) from Room) then
set Rid = 1;
set TOT = TOT + 1;
else
set Rid = Rid + 1;
end if;
set N1 = N1 - 1;
set Pid = Pid + 1;
end while;
end;
//
DELIMITER ;
call Fill_Interact();