当我使用CALL语句调用它时,以下过程给出了一个错误:
CREATE DEFINER=`user`@`localhost` PROCEDURE `emp_performance`(id VARCHAR(10))
BEGIN
DROP TEMPORARY TABLE IF EXISTS performance;
CREATE TEMPORARY TABLE performance AS
SELECT time_in, time_out, day FROM attendance WHERE employee_id = id;
END
错误显示“未知表格'效果'”。
这是我第一次真正使用存储过程,而且我从Google获取了我的资源。我只是想弄清楚我做错了什么。
答案 0 :(得分:20)
我已经为你整理了一些并添加了示例代码。我始终保持我的参数名称与它们所代表的字段相同,但前缀为p_,这可以防止出现问题。我对在sproc体中声明的变量执行相同的操作,但前缀为v _。
你可以在这里找到我的另一个例子:
Generating Depth based tree from Hierarchical Data in MySQL (no CTEs)
drop procedure if exists emp_performance;
delimiter #
create procedure emp_performance
(
in p_employee_id varchar(10)
)
begin
declare v_counter int unsigned default 0;
create temporary table tmp engine=memory select time_in, time_out
from attendance where employee_id = p_employee_id;
-- do stuff with tmp...
select count(*) into v_counter from tmp;
-- output and cleanup
select * from tmp order by time_in;
drop temporary table if exists tmp;
end#
delimiter ;
call emp_performance('E123456789');
答案 1 :(得分:6)
默认情况下,MySQL配置变量sql_notes设置为1。
这意味着
DROP TEMPORARY TABLE IF EXISTS performance;
将warning_count递增1,并在存储过程完成时收到警告。
您可以在my.cnf中将sql_notes变量设置为0,或者像这样重写存储过程:
CREATE DEFINER=`user`@`localhost` PROCEDURE `emp_performance`(id VARCHAR(10))
BEGIN
SET @@session.sql_notes = 0;
DROP TEMPORARY TABLE IF EXISTS performance;
CREATE TEMPORARY TABLE performance AS
SELECT time_in, time_out, day FROM attendance WHERE employee_id = id;
SET @@session.sql_notes = 1;
END