通過儲存過程更新表結構
* sp_alter_table:修改表結構
* t_name:表名稱
* f_name:列名稱
* ftype:資料型別
*================================================================*/
procedure sp_alter_table(t_name in varchar2,f_name in varchar2,ftype varchar2) is
--定義變數
v_strSQL varchar2(2000);
v_col int;
begin
select count(*)
into v_col
from user_tab_columns a
where a.table_name = '' || upper(t_name) || ''
and a.column_name = '' || upper(f_name) || '';
if v_col = 0 then
v_strSQL := 'alter table '||t_name||' add '||f_name||' '||ftype||'';
dbms_output.put_line(v_strSQL);
execute immediate v_strSQL;
end if;
end;
/* Mysql版本修改表結構
* Alter_Table_Object:修改表結構
* sqlStr:alter 語句
* columnName:欄位名稱
* tableName:表名稱
*================================================================*/
DROP PROCEDURE IF EXISTS `Alter_Table_Object`;
CREATE DEFINER=`root`@`%` PROCEDURE `Alter_Table_Object`(IN sqlStr VARCHAR(1000), IN columnName VARCHAR(100), IN tableName VARCHAR(100))
BEGIN
IF NOT EXISTS (SELECT 1
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = tableName
AND COLUMN_NAME = columnName)
THEN
SET @v_sql=sqlStr;
PREPARE stmt FROM @v_sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END IF;
END;
下面是mysql版本具體測試
use privatelypolicy;
- 18902 新增更新forceaccesspolicy表結構
CALL Alter_Table_Object('ALTER TABLE `forceaccesspolicy` ADD COLUMN `policycategory` SMALLINT(6) DEFAULT 1 AFTER `policystatus`','policycategory','forceaccesspolicy');
-- 19425 新增更新policyheap表結構
CALL Alter_Table_Object('ALTER TABLE `policyheap` ADD COLUMN `ispush`TINYINT(1) DEFAULT 0','ispush','policyheap');
-- 新增plat_policy_issue_record表
-- ----------------------------
-- Table structure for `plat_policy_issue_record`
-- ----------------------------
CREATE TABLE IF NOT EXISTS `plat_policy_issue_record` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`batch` int(11) NOT NULL,
`platId` varchar(40) NOT NULL,
`policyMark` varchar(32) NOT NULL,
`serviceType` varchar(32) NOT NULL,
`time` varchar(32) NOT NULL,
`lockTime` int(11) DEFAULT NULL,
`status` tinyint(1) DEFAULT NULL,
`isAnswer` tinyint(1) DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=88 DEFAULT CHARSET=utf8;