因為要升級程式,需要根據店鋪代碼,增加表 ks_goods 一個欄位,存盤程序如下:
DELIMITER //
DROP PROCEDURE IF EXISTS `checkTabColumns`;
CREATE PROCEDURE checkTabColumns()
BEGIN
#定義變數
declare CurrentDatabase VARCHAR(100);
declare rs char(4);
declare mdstr char(10);#這個變數的值就是我想增加的欄位名!
declare cursor_finished int(1);
#定義游標
declare cursor_store CURSOR for select storeSymbol from ks_store;
declare CONTINUE HANDLER FOR NOT FOUND SET cursor_finished = 1;
set CurrentDatabase = database();
open cursor_store;
loop1:loop
fetch cursor_store into rs;
if cursor_finished=1 then
leave loop1;
end if;
set mdstr = CONCAT("md_",rs);#我想要的欄位名格式是: md_SA
select mdstr;#這里mdstr的確已經賦值為我想的要格式!
#檢查是否已經有了該欄位
if not exists (select * from information_schema.columns where TABLE_SCHEMA=CurrentDatabase AND TABLE_NAME='ks_goods' AND COLUMN_NAME=mdstr) then
alter table `ks_goods` add column mdstr tinyint(1) NOT NULL DEFAULT 0 COMMENT '1:本商品屬于該代碼門店,0:不屬于' after `isvalid`;
#這一句,雖然增加了一個新欄位,但欄位名不是md_SA,而就是mdstr???為什么?怎么才能讓增加的欄位名是md_SA?
end if;
end loop loop1;
close cursor_store;
END//
DELIMITER ;
CALL checkTabColumns();
實際增加的欄位如下圖:
uj5u.com熱心網友回復:
add后的mdstr,修改改成md_SAuj5u.com熱心網友回復:
mysql中表名,列名無法是變數。可以考慮使用PREPAREuj5u.com熱心網友回復:
謝謝ACMAIN_CHM版主!這又增加了一個知識點了!
去學習prepare了
uj5u.com熱心網友回復:

我要瘋了,這哪里錯了
uj5u.com熱心網友回復:
知道是怎么回事了,prepare必須是用戶變數………………uj5u.com熱心網友回復:
prepare 必須是 @ 的那種轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/96650.html
標籤:MySQL
上一篇:R語言 資料型別轉換問題
下一篇:資料倉庫分層是什么意思
