oracle插入多表(insert all/first)

这篇具有很好参考价值的文章主要介绍了oracle插入多表(insert all/first)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、建测试表

CREATE TABLE EDW_INT
(
  AGMT_NO         VARCHAR2(40 BYTE)             NOT NULL,
  AGMT_SUB_NO     VARCHAR2(4 BYTE)              NOT NULL,
  NEED_REPAY_INT  NUMBER(22,2),
  CURR_PERIOD     NUMBER(4)                     NOT NULL
);
CREATE TABLE EDW_INT_1
(
  AGMT_NO         VARCHAR2(40 BYTE)             NOT NULL,
  AGMT_SUB_NO     VARCHAR2(4 BYTE)              NOT NULL,
  NEED_REPAY_INT  NUMBER(22,2),
  CURR_PERIOD     NUMBER(4)                     NOT NULL
);
CREATE TABLE EDW_INT_2
(
  AGMT_NO         VARCHAR2(40 BYTE)             NOT NULL,
  AGMT_SUB_NO     VARCHAR2(4 BYTE)              NOT NULL,
  NEED_REPAY_INT  NUMBER(22,2),
  CURR_PERIOD     NUMBER(4)                     NOT NULL
);

2、插入测试数据

INSERT INTO EDW_INT
  (AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)
VALUES
  ('20003874', '2104', 3126.5, 7);
INSERT INTO EDW_INT
  (AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)
VALUES
  ('20003874', '2104', 3290.76, 6);
INSERT INTO EDW_INT
  (AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)
VALUES
  ('20003874', '2104', 3454.06, 5);
INSERT INTO EDW_INT
  (AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)
VALUES
  ('20003874', '2104', 3616.41, 4);
INSERT INTO EDW_INT
  (AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)
VALUES
  ('20017143', '2104', 2350.86, 0);
INSERT INTO EDW_INT
  (AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)
VALUES
  ('20017143', '2104', 3566.55, 0);
INSERT INTO EDW_INT
  (AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)
VALUES
  ('20018273', '2104', 1639.46, 0);
INSERT INTO EDW_INT
  (AGMT_NO, AGMT_SUB_NO, NEED_REPAY_INT, CURR_PERIOD)
VALUES
  ('20018273', '2104', 2080.49, 0);
COMMIT;

3、insert all/first语句示例

(1)、insert all-不带条件
insert all
into edw_int_1(agmt_no,agmt_sub_no,need_repay_int,curr_period)
values(agmt_no,agmt_sub_no,need_repay_int,curr_period)
into edw_int_2(agmt_no,agmt_sub_no,curr_period)
values(agmt_no,'1234',curr_period)
select agmt_no,agmt_sub_no,need_repay_int,curr_period from edw_int;
commit;
(2)、insert all-带条件
insert all
when curr_period=0 then 
into edw_int_1(agmt_no,agmt_sub_no,need_repay_int,curr_period)
values(agmt_no,agmt_sub_no,need_repay_int,curr_period)
else
into edw_int_2(agmt_no,agmt_sub_no,need_repay_int,curr_period)
values(agmt_no,agmt_sub_no,need_repay_int,curr_period)
select agmt_no,agmt_sub_no,need_repay_int,curr_period from edw_int;
commit;
(3)、insert first-带条件
insert first
when curr_period=0 then 
into edw_int_1(agmt_no,agmt_sub_no,need_repay_int,curr_period)
values(agmt_no,agmt_sub_no,need_repay_int,curr_period)
when agmt_sub_no='2104' then
into edw_int_2(agmt_no,agmt_sub_no,need_repay_int,curr_period)
values(agmt_no,agmt_sub_no,need_repay_int,curr_period)
select agmt_no,agmt_sub_no,need_repay_int,curr_period from edw_int;
commit;

4、数据结果查看

truncate table edw_int_1;
truncate table edw_int_2;
select * from edw_int;
select * from edw_int_1;
select * from edw_int_2;

5、all与first的区别

all:不考虑先后关系,只要满足条件,就全部插入;

first:考虑先后关系,如果有数据满足第一个when条件又满足第二个when条件,则执行第一个then插入语句,第二个then就不插入第一个then已经插入过的数据了。

其区别也可描述为,all只要满足条件,可能会作重复插入;first首先要满足条件,然后筛选,不做重复插入。文章来源地址https://www.toymoban.com/news/detail-637701.html

6、利用insert all实现行列转换(insert all的旋转功能)

1、建一行多列表及测试数据插入
create table week_bal(id int,w1_bal number,w2_bal number,w3_bal number,w4_bal number,w5_bal number);
insert into week_bal values(1,10.09,12.98,23.89,89.08,1098.01);
commit;
select * from week_bal;
2、建少列多行表
create table week_bal_new(id int,week int,bal number);
3、利用insert all语句插入
insert all
into week_bal_new(id,week,bal)values(id,1,w1_bal)
into week_bal_new(id,week,bal)values(id,2,w2_bal)
into week_bal_new(id,week,bal)values(id,3,w3_bal)
into week_bal_new(id,week,bal)values(id,4,w4_bal)
into week_bal_new(id,week,bal)values(id,5,w5_bal)
select id,w1_bal,w2_bal,w3_bal,w4_bal,w5_bal from week_bal;
select * from week_bal_new;

到了这里,关于oracle插入多表(insert all/first)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MySQL(62)MySQL INSERT:插入数据(添加数据)

    数据库与表创建成功以后,需要向数据库的表中插入数据。在 MySQL 中可以使用 INSERT 语句向数据库已有的表中插入一行或者多行元组数据。 INSERT 语句有两种语法形式,分别是 INSERT…VALUES 语句和 INSERT…SET 语句。 1) INSERT…VALUES语句 INSERT VALUES 的语法格式为: 语法说明如下。

    2024年02月08日
    浏览(39)
  • Mybatis使用insert插入后获取id值

    在mapper中定义insert方法: 属性 useGeneratedKeys:设置为true,否则无法获取到主键id。 keyProperty:实体类对象的主键id属性名称。 keyColumn:数据库中主键id字段名称。 调用orderMapper.insertOrder(record)执行插入语句,返回值是一个int类型,如果成功返回的是1,失败返回的是exception。 插

    2024年02月16日
    浏览(43)
  • Hive insert插入数据与with子查询

    insert into 与 insert overwrite 都可以向hive表中插入数据,但是insert into直接追加到表中数据的尾部,而insert overwrite会重写数据,既先进行删除,再写入 注意:如果存在分区的情况,insert overwrite只重写当前分区数据,不会全部重写 当在hive中同时使用insert into(overwrite) table xx 与wi

    2024年02月03日
    浏览(42)
  • SQL INSERT INTO 语句详解:插入新记录、多行插入和自增字段

    SQL INSERT INTO 语句用于在表中插入新记录。 INSERT INTO 语法 可以以两种方式编写INSERT INTO语句: 指定要插入的列名和值: 如果要为表的所有列添加值,则无需在SQL查询中指定列名。但是,请确保值的顺序与表中的列顺序相同。在这种情况下,INSERT INTO 语法如下: 演示数据库 以

    2024年02月05日
    浏览(59)
  • MySQL:插入数据insert ignore,重复数据自动忽略

    MySQL中插入数据,如果插入的数据在表中已经存在(主键或者唯一键已存在),使用insert ignore 语法可以忽略插入重复的数据。 1、insert ignore 语法 使用insert ignore语法插入数据时,如果发生主键或者唯一键冲突,则忽略这条插入的数据。 满足以下条件之一: 主键重复 唯一键重

    2024年02月12日
    浏览(37)
  • MySQL数据库——MySQL INSERT:插入数据(添加数据)

    数据库与表创建成功以后,需要向数据库的表中插入数据。在 MySQL 中可以使用 INSERT 语句向数据库已有的表中插入一行或者多行元组数据。 INSERT 语句有两种语法形式,分别是 INSERT…VALUES 语句和 INSERT…SET 语句。 1) INSERT…VALUES语句 INSERT VALUES 的语法格式为: 语法说明如下:

    2024年02月08日
    浏览(64)
  • oracle 同一张表同时insert多条数据 mysql 同一张表同时insert多条数据

    在Oracle数据库中,你可以使用INSERT ALL语句同时向同一张表插入多条数据。INSERT ALL语句允许你一次执行多个插入操作,可以提高插入的效率和速度。 以下是使用INSERT ALL语句插入多条数据的示例: 在上面的示例中,我们使用INSERT ALL语句向\\\"employees\\\"表插入了三条数据。每个INSE

    2024年02月03日
    浏览(40)
  • 如何在Insert插入操作之后,获取自增主键的ID值

    MyBatis中,在大多数情况下,我们向数据库中插入一条数据之后,并不需要关注这条新插入数据的主键ID。我们也知道,正常在DAO中的插入语句虽然可以返回一个int类型的值,但是这个值表示的是插入影响的行数,而不是新插入数据的主键ID。 近期有一个需求,核心是保存一些

    2024年02月09日
    浏览(46)
  • mybatis实战:四、insert 用法(普通插入、返回主键自增的值)

    1.UserMapper.xml 1.指定特殊数据类型 2.<insert >元素,这个标签包含如下属性  2. UserMapperTest  1.只插入一条数据 2.回滚(不写入数据库) 3.插入后判断是否为空(为空/不为空,抛异常) 3.UserMapper 方法一: 使用 JDBC 方式返回主键自增的值  方法二: 使用 selectKey 返回主键的值

    2024年02月07日
    浏览(44)
  • 在NET5中 使用code first 进行数据迁移 常见的问题

    出现问题1 PM add-migration v1.1 Build started... Build succeeded. Microsoft.EntityFrameworkCore.Model.Validation[10400]       Sensitive data logging is enabled. Log entries and exception messages may include sensitive application data; this mode should only be enabled during development. Microsoft.EntityFrameworkCore.Infrastructure[10403]       Ent

    2024年02月08日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包