0
我不明白我做錯了什麼。準備給語法存儲過程中的錯誤
我在SQL Server中有一個存儲過程,我需要遷移到MySQL。
當我運行相同的查詢,我打印的工作,但同一個變量不能夠使準備語句,導致語法錯誤。
錯誤代碼:1064您的SQL語法錯誤;檢查對應於你的MySQL服務器版本的權利 語法使用附近的 手冊 '是否存在(SELECT * FROM INFORMATION_SCHEMA.TABLES在表格名=' 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 ;
bkup2_t_amt「輸出: -
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的值,當執行它做工精細,但具有可變執行它不起作用
。
感謝邁克,我已經完成了增加一些邏輯。 –
SET @ v_query_exist_table = concat(「SELECT count(*)from INFORMATION_SCHEMA.TABLES where table_name ='」,@ v_cmdTemp,''and table_type ='BASE TABLE'into @v_table_exists_count「); 準備來自@v_query_exist_table; EXECUTE stmt; DEALLOCATE PREPARE stmt; SELECT concat('SEQ 1#:',@ v_table_exists_count); –
IF(@ v_table_exists_count = 0)THEN SELECT concat('SEQ 1#:',@ v_table_exists_count); else SELECT concat(「DROP TABLE」,@v_cmdTemp,「;」)into @ v_cmdTemp1;SELECT concat('v_cmdTemp1 1#:',@ v_cmdTemp1); 準備來自@ v_cmdTemp1; EXECUTE stmt; DEALLOCATE PREPARE stmt; END IF; –