【发布时间】:2017-01-01 18:39:17
【问题描述】:
我不明白我做错了什么。
我在 SQL Server 中有一个存储过程,我需要迁移到 MySQL。
当我运行我打印的相同查询时,我正在运行,但相同的变量无法生成准备语句,导致语法错误。
错误代码:1064 您的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 'if 存在附近使用的语法(select * from INFORMATION_SCHEMA.TABLES where table_name='bkup2_t_amt' 在第 1 行
DELIMITER //
DROP PROCEDURE IF EXISTS pull_amts_from_PS;
CREATE Procedure pull_amts_from_PS ( p_PSEnv VARCHAR(50))
BEGIN
DECLARE v_cmd NVARCHAR (3500);
#-- -------------- backup previous amts records
DECLARE v_seq int;
DECLARE v_iterations int;
SET v_iterations = 10;
SELECT info_fieldval_int into @seq from t_lrdb_general_info WHERE info_fieldname = 'amts_backup_sequence_no' ;
select concat('SEQ #: ',@seq) ;
select concat(concat('bkup',@seq),'_t_amts_input') into @v_cmdTemp;
select concat('v_cmdTemp #: ',@v_cmdTemp) ;
set @seq=concat("select * from INFORMATION_SCHEMA.TABLES where table_name='",@v_cmdTemp,"' and table_type='BASE TABLE'");
select concat('SEQ 1 #: ',@seq) ;
set @v_cmdTemp1=concat( "if exists (", @seq ,") THEN DROP TABLE ", @v_cmdTemp ," ; END IF;");
select concat('v_cmdTemp1 1 #: ',@v_cmdTemp1) ;
PREPARE stmt FROM @v_cmdTemp1;
EXECUTE stmt ;
DEALLOCATE PREPARE stmt ;
END;
//
DELIMITER ;
输出:-
SEQ #: 2
v_cmdTemp #: bkup2_t_amts_input
SEQ 1 #: select * from INFORMATION_SCHEMA.TABLES where table_name='bkup2_t_amts_input' and table_type='BASE TABLE'
v_cmdTemp1 1 #: if exists (select * from INFORMATION_SCHEMA.TABLES where table_name='bkup2_t_amts_input' and table_type='BASE TABLE') THEN DROP TABLE bkup2_t_amts_input ; END IF;
v_cmdTemp1 的最后一个值,执行时可以正常工作,但使用变量执行时就不行了。
【问题讨论】:
标签: mysql stored-procedures mysql-workbench