【数据库】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。