bur*_*ark 26 mysql sql stored-procedures
当我使用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
Run Code Online (Sandbox Code Playgroud)
错误显示"未知表'性能'".
这是我第一次真正使用存储过程,我从谷歌获取了我的资源.我只是想弄清楚我做错了什么.
Jon*_*ack 23
我已经为你整理了一些,并添加了示例代码.我始终保持我的参数名称与它们所代表的字段相同,但前缀为p_,这可以防止出现问题.我对sproc体中声明的变量执行相同的操作,但前缀为v_.
你可以在这里找到我的另一个例子:
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');
Run Code Online (Sandbox Code Playgroud)
默认情况下,MySQL配置变量sql_notes设置为1.
这意味着将warning_count
DROP TEMPORARY TABLE IF EXISTS performance;
递增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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
79840 次 |
| 最近记录: |