【数据库】Oracle数据表相关操作(CREATE & INSERT INTO & TRUNCATE & TRUNCATE & MERGE INTO)、JOB注意事项
Oracle数据表相关操作、JOB注意事项
2022/9/1 周四
偶尔有Oracle库的报表需求,每次隔久了就忘记一些小细节,所以把抓数据时常用的操作(CREATE & INSERT INTO & TRUNCATE & TRUNCATE & MERGE INTO)记录一下,便于以后翻看。
(主要是针对我常用的,需要从已有数据表提取并大量插入新表的情况,其他内容还可以看我的第一篇博客:【数据库】MySQL,数据库和表的增删改,约束,数据类型)
1. CREATE 新建表
表不存在的情况下,直接在CREATE建表语句里,写对应抓取数据的sql就可以了:
CREATE TABLE XXXX AS(
SELECT *
FROM XXXX
WHERE ......
);
这样数据也一并查出来在表里了
2. INSERT INTO 插入数据
表存在的情况下,需要每天插入数据,就在INSERT语句后面写抓取sql:
INSERT INTO XXXX
SELECT *
FROM XXXX
WHERE ......;
COMMIT;
记得要提交
3. TRUNCATE 截断表/清空数据
需要全量更新的数据表,每天插入数据前需清空之前的数据:
TRUNCATE TABLE XXXX;
TRUNCATE与DELETE的区别:
(1)truncate是DDL数据定义语言,不可回滚,而delete是DML数据操作语言,可回滚;
(2)delete时会触发与表相关的触发器,而truncate不会;
(3)delete可以有删除条件,truncate没有;
(4)truncate会重置表的自增值,delete不会。
4. DROP 删除表
如果表字段需要变化,可以直接删除表再重新建:
DROP TABLE XXXX;
(是在每天全量更新表的基础上才这样做,反正每天数据都要重新抓)
5. MERGE INTO 插入和更新数据
简单来说就是,把来源表中的数据更新到目标表。相当于整合了INSERT和UPDATE,更快捷。
要求必须要有主键关联。如果那条数据在目标表中已存在了,就只更新对应字段;如果不存在,则插入这条数据到目标表。
MERGE INTO TARGET T --目标表T
USING XXXX A --来源表A
ON (T.KEY = A.KEY ) --两张表的主键KEY字段作为关联条件
WHEN MATCHED THEN
--如果关联上,表示目标表已存在该条数据,就使用UPDATE更新
UPDATE SET
T.AAA = A.AAA, --需要更新的字段
T.BBB = A.BBB,
······
WHEN NOT MATCHED THEN
--如果未关联到,说明目标表中还没有这条数据,则使用INSERT插入
INSERT
(KEY, --记得主键也要写
AAA,
BBB,
······
)
VALUES
(A.KEY,
A.AAA,
A.BBB,
······);
COMMIT;
主要用来 把每天全量更新的临时表中的数据,更新到增量更新的总表中。
6. JOB注意事项
JOB正在运行时,无法修改对应的存储过程;
JOB运行如果发现存储过程报错,会停止JOB,图标变灰,下次需要重新开启Enabled。