1. 程式人生 > >通過儲存過程更新表結構

通過儲存過程更新表結構

/* oracle版本修改表結構
 * 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;