您的位置:首页 > 数据库 > Oracle

通过存储过程更新表结构

2016-06-03 15:58 573 查看
/* 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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  存储过程 mysql oracle