编写oracle可重复执行脚本
在家办公的情况下,每位项目成员都在自己本地数据库操作,如何保持数据一致性,让小伙伴能正常使用你的功能,可重复执行的脚本就重要了。这里使用的是存储过程,记录下来,方便备查。
1、创建表
在创建脚本方面,oracle与mysql语法上有所区别。以新建人员表为例,下面是两种数据库的建库脚本。
oracle 建数据表脚本
//**建表之前进行判断**
DECLARE num NUMBER ;
BEGIN
SELECT COUNT (1) INTO num FROM user_tables WHERE TABLE_NAME = 'user' ;
IF num = 1 THEN
//判断是否存在
EXECUTE IMMEDIATE 'drop table user cascade constraints' ;
END IF;
END;
/
create table user
(
id VARCHAR2(36) not null,
sex VARCHAR2(2),
name VARCHAR2(100),
age NUMBER,
constraint PK_user primary key (id)
);
comment on table user is '人员表';
COMMENT ON COLUMN user.id IS '人员id';
COMMENT ON COLUMN user.sex IS '性别';
COMMENT ON COLUMN user.name IS '姓名';
COMMENT ON COLUMN user.age IS '年龄';
commit; 注意:在两个DECLARE之间需要用到 / 来进行分割,否则可能会报错如下:
ORA-06550: 第 14 行, 第 1 列:
PLS-00103: 出现符号 "DECLARE"
ORA-06550: 第 22 行, 第 0 列:
PLS-00103: 出现符号 "end-of-file"在需要下列之一时:
( begin case
declare end exception exit for goto if loop mod null pragma
raise return select update while with <an identifier="">
<a bind va</an>
mysql建表脚本
//数据表创建前,进行查询,存在则需要删除 DROP TABLE IF EXISTS `user`; //建表语句 CREATE TABLE `user` ( `user_PKID` int(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '主键ID', `id` varchar(36) NOT NULL COMMENT '人员id', `sex` varchar(2) DEFAULT NULL COMMENT '性别', `name` varchar(100) DEFAULT NULL COMMENT '姓名', `age` int(10) DEFAULT NULL COMMENT '年龄', PRIMARY KEY (`user_PKID`), UNIQUE KEY `uniq_key_user` (`id`) COMMENT 'id:人员id索引' ) COMMENT ='人员表' ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2、增加列
增加列,可以使用 alert tabel 表名 add (列名 类型)
如 对user表增加姓名列。
//声明columnCount,用于存放查询的结果
DECLARE columnCount number;
begin
//从user_tab_columns 中查询是否存在该列
select count(1) into columnCount from user_tab_columns where table_name = upper('user') and column_name = upper('name');
if columnCount = 0 then
EXECUTE IMMEDIATE
//执行表的新增列语句
'ALTER TABLE user ADD name varchar2(20)';
end if;
end;
/ 3、修改列
修改列的类型、长度等信息 可以使用 alert tabel 表名 modify (列名 类型) , 如 对user表增加姓名列的长度。
DECLARE columnCount number;
begin
select count(1) into columnCount from user_tab_columns where table_name = upper('user') and column_name = upper('name ');
if columnCount = 0 then
EXECUTE IMMEDIATE
'ALTER TABLE user MODIFY (name nvarchar2(50))';
end if;
end;
/ 4、更新表中数据
更新数据前,需要查询表中是否有该数据,不存在进行插入操作,存在进行更新操作。
DECLARE
num NUMBER;
BEGIN
SELECT COUNT(1) INTO num FROM user WHERE id= '10235';
IF num < 1 THEN
insert into user(id,name,age,sex) values('10235' , 'jerry','18', '男' );
else
update user set name = "Tom" where id= '10235';
END IF;
COMMIT;
END;
/ 博客参考
【1】https://blog.csdn.net/u010590016/article/details/40433695

