数据库表添加新字段(支持重复执行)
2023-09-27 14:25:31 时间
Oracle
DECLARE COLEXIST NUMBER; BEGIN SELECT COUNT(1) INTO COLEXIST FROM USER_TAB_COLUMNS WHERE TABLE_NAME=UPPER('HISTORY') AND COLUMN_NAME=UPPER('NAME');--判断列是否存在 IF COLEXIST = 0 THEN --如果不存在,进行创建 EXECUTE IMMEDIATE 'ALTER TABLE HISTORY ADD NAME VARCHAR(64) DEFAULT ('' '') NOT NULL'; END IF ; END; /
或者
CREATE OR REPLACE PROCEDURE COL_V1 ( TBNAME IN VARCHAR, COLNAME IN VARCHAR, COLTYPE IN VARCHAR ) AS COLEXIST NUMBER(4); BEGIN SELECT COUNT(1) INTO COLEXIST FROM USER_TAB_COLUMNS WHERE TABLE_NAME=UPPER(TBNAME) AND COLUMN_NAME=UPPER(COLNAME);--判断列是否存在 IF COLEXIST = 0 THEN INSERT INTO C_TEST (ID) VALUES (1); EXECUTE IMMEDIATE 'ALTER TABLE '||TBNAME||' ADD '||COLNAME||' '||COLTYPE; END IF; COMMIT; END; / CALL COL_V1('C_TEST','TPPID2','NUMBER(4) DEFAULT 0 NOT NULL');
Mysql数据库表增加字段
DELIMITER ;; DROP PROCEDURE IF EXISTS COLUMNADD; CREATE PROCEDURE `COLUMNADD`(TBNAME VARCHAR(30),COLNAME VARCHAR(32),COLTYPE VARCHAR(64)) BEGIN DECLARE P_STR VARCHAR(300); IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME = TBNAME AND COLUMN_NAME =COLNAME) THEN -- 判断列是否存在 SET P_STR= CONCAT('ALTER TABLE ',TBNAME,' ADD ',COLNAME ,' ',COLTYPE); SET @SQL = P_STR; PREPARE STMT FROM @SQL; EXECUTE STMT; DEALLOCATE PREPARE STMT; END IF; END;; DELIMITER ; -- 调用该存储过程 CALL COLUMNADD('LF_WCD_P1','WCD_URLP1','VARCHAR(64) NOT NULL DEFAULT ''''');
Mysql数据库表删除字段
DELIMITER ;; DROP PROCEDURE IF EXISTS COLUMNDEL; CREATE PROCEDURE `COLUMNDEL`(TBNAME VARCHAR(30),COLNAME VARCHAR(32)) BEGIN DECLARE P_STR VARCHAR(300); IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME = TBNAME AND COLUMN_NAME =COLNAME) THEN SET P_STR= CONCAT('ALTER TABLE ',TBNAME,' DROP COLUMN ',COLNAME ,' ',COLTYPE); SET @SQL = P_STR; PREPARE STMT FROM @SQL; EXECUTE STMT; DEALLOCATE PREPARE STMT; END IF; END;; DELIMITER ;
-- 调用该存储过程
CALL COLUMNADD('LF_WCD_P1','WCD_URLP1');
sqlserver数据库新增字段
IF EXISTS ( SELECT * FROM SYS.OBJECTS WHERE TYPE='P' AND NAME='COLUMNADD' ) BEGIN DROP PROCEDURE [COLUMNADD] END GO CREATE PROCEDURE COLUMNADD ( @TBNAME VARCHAR(15), @COLNAME VARCHAR(32), @COLTYPE VARCHAR(64) ) AS BEGIN --DECLARE @CURRENTDATABASE VARCHAR(100) DECLARE @P_STR VARCHAR(300) --set @CURRENTDATABASE = select DB_NAME() if COL_LENGTH(@TBNAME, @COLNAME) is NULL SET @P_STR = 'ALTER TABLE ' + @TBNAME + ' ADD ' + @COLNAME + ' ' + @COLTYPE EXEC(@P_STR) END GO exec COLUMNADD 'LF_MTTASK','FINISHTIME','DATETIME NOT NULL DEFAULT GETDATE()' GO
相关文章
- Confluence 6 已经存在的安装配置数据库字符集编码
- 【转】关于SQLServer无法对数据库'XXX'执行删除,因为它正用于复制。错误:'3724' 的解决方案
- 数据库还原失败System.Data.SqlClient.SqlError: 无法执行 BACKUP LOG,因为当前没有数据库备份
- Oracle11g 启动数据库实例、关闭数据库实例
- SharePoint 2013 数据库中手动更新用户信息
- 数据库理论
- JDBC对MySQL数据库存储过程的调用
- Oracle 数据库执行 操作系统的命令
- 装饰者模式---使用装饰者模式实现带日志记录功能的数据库命令执行类
- 如何删除数据库中的冗余数据(翻译)
- MyBatis中如何一次执行多条语句(使用mysql数据库)
- expect 运行脚本文件 执行postgres数据库操作
- 数据库和数据仓库有什么区别?
- laravel单数据库执行事务和多数据库执行事务
- 【JDBC】JDBC API 详解 ② ( Connection 数据库连接对象 | 获取 SQL 执行对象 - 普通、预编译 SQL 语句 | 事务管理 | 开启事物 | 提交事物 | 回滚事物 )
- 大数据量的Mysql数据库备份策略
- 数据库设计基础——三范式
- 用Socket快速判断数据库连接