下面我创建了一个过程,它使用了两个参数company\u name和sn\u f,
我想将表名作为参数传递给procedure,我想为其创建游标。
DELIMITER //
CREATE PROCEDURE transfer_t(IN company_name varchar(50), SN_f int)
BEGIN
DECLARE done BOOLEAN DEFAULT 0;
DECLARE dates_f date default null;
DECLARE high_f float default 0.0;
DECLARE low_f float default 0.0;
DECLARE open_f float default 0.0;
DECLARE close_f float default 0.0;
DECLARE volume_f int default 0;
DECLARE adj_close_f float default 0.0;
DECLARE Company_detail cursor for
select Date, high, low, open, close, volume, adj_close from company_name;
Declare CONTINUE HANDLER FOR NOT FOUND SET done=1;
OPEN Company_detail;
REPEAT
FETCH company_detail into dates_f, high_f, low_f, open_f, close_f, volume_f, adj_close_f;
insert into historic_data(sn ,Date ,High ,low ,open ,close , volume , adj_close) values (SN_f,dates_f,high_f,low_f,open_f,close_f, volume_f, adj_close_f);
until done END REPEAT;
close company_detail;
END//
DELIMITER ;
上面的过程创建成功了,但是每当我这样调用它时,
call transfer_t('tcs_temp', 1);
它给出了以下错误
Error Code: 1146. Table 'test_schema.company_name' doesn't exist
请帮我解决这个问题。。。
1条答案
按热度按时间cnjp1d6j1#
您似乎希望将所有记录从作为参数给定的表名复制到另一个固定表中。我觉得这里不需要光标。sql是一种基于集合的语言,它是为在本地执行此类操作而构建的。您通常会使用
insert into ... select ...
语法。另一方面,如果希望将表名用作变量,则需要使用动态sql—当前代码缺少该变量。
下面的代码应该是您想要的: