天道酬勤,学无止境

Oracle 在一个查询中插入两个表(Oracle INSERT into two tables in one query)

问题

只是想知道是否可以在 Oracle 11g 的单个查询中将 INSERT 运行到两个表中?

我知道您可以执行 INSERT ALL ... SELECT 查询,但我需要在没有 SELECT 的情况下执行此操作,因为这是直接从 XLS 进入数据库的数据。

理想情况下,我想要这样的例子:

INSERT INTO table1 t1, table2 t2 
(t1.tid, t1.date, t1.title, t2.tid, t2.date, t2.user, t2.note)
VALUES (1,'01-JAN-15','title',1,'01-JAN-15','john','test note');

有任何想法吗?

回答1

尝试from dual;使用from dual; , 像这样:

INSERT ALL
INTO table1
  (tid, date, title) values (s_tid, s_date, s_title)
INTO table2
  (tid, date, user, note) values (s_tid, s_date, s_user, s_note)
SELECT s_tid, s_date, s_title, s_user, s_note
FROM
( 
    SELECT 
        1 s_tid,
        '01-JAN-15' s_date,
        'title' s_title,
        'john' s_user,
        'test note' s_note
    FROM dual;
)
回答2
INSERT ALL
INTO table1
  (tid, curr_date, title) values (s_tid, s_date, s_title)
INTO table2
  (tid, curr_date, sys_user, note) values (s_tid, s_date, s_user, s_note)
SELECT s_tid, s_date, s_title, s_user, s_note
FROM
( 
    SELECT 
        2 s_tid,
        '01-FEB-15' s_date,
        'java' s_title,
        'Bablu Gope' s_user,
        'java_note' s_note
    FROM dual);

执行上述查询的过程。

  1. 将查询复制到扩展名必须为 .sql 的文件中,如 test.sql
  2. 连接到数据库
  3. 运行这个命令
  4. @test.sql
标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 从一个表中选择,插入到另一个表中的oracle sql查询(select from one table, insert into another table oracle sql query)
    问题 我正在尝试从一张表中选择数据并将数据插入另一个表 SELECT ticker FROM tickerdb; 我正在尝试使用OracleSql 从tickerdb表中获得股票代号“ GOOG”, 并将t.ticker插入stockdb表。 从tickerdb表中选择->插入quotedb表中 INSERT INTO quotedb (t.ticker, q.prevclose, q.opn, q.rnge, q.volume, q.marketcap, q.dividend, q.scrapedate) VALUES (?,?,?,?,?,?,?,?,SYSDATE) tickerdb t inner JOIN quotedb q ON t.ticker = q.ticker 回答1 从oracle文档中,以下查询对其进行了更好的解释 INSERT INTO tbl_temp2 (fld_id) SELECT tbl_temp1.fld_order_id FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100; 您可以阅读此链接 您的查询如下 //just the concept INSERT INTO quotedb (COLUMN_NAMES) //seperated by comma SELECT COLUMN_NAMES
  • 惊呆,一条sql竟然让oracle奔溃了
    目录系统介绍事故现场解决方案新的问题总结一条sql就能让oracle挂了,真的是不敢相信啊,前几天生产上确实出现了这样一个故障,我们来一起做一个事件回放。系统介绍系统架构见下图:application1和application2是一个分布式系统中的2个应用,application1连接的数据库是database1,application2连接的数据库是database2,application2生产的数据要给application1做跑批使用。application1要获取database2的数据,并不是通过接口来获取的,而是直连database2来获取,因此application1也具有database2库的读权限。database2中有1张表table_b,里面保存的数据是application1跑批需要的数据。application1查找到table_b的数据后,先保存到database1的数据库表table_a中,等跑批时取出来用。table_a和table_b的表结构如下:2个表的主键都是字段a,application1查询出table_b的数据后,会根据主键a来判断这条数据是否存在,如果数据存在,就更新,否则,就插入。application1使用的orm框架是mybatis,为了减少应用和数据库的交互,使用了oracle的merge语句。注意
  • SQL Server:是否可以同时插入两个表?(SQL Server: Is it possible to insert into two tables at the same time?)
    问题 我的数据库包含三个表,分别称为Object_Table , Data_Table和Link_Table 。 链接表仅包含两列,即对象记录的标识和数据记录的标识。 我想从链接到一个给定对象标识的DATA_TABLE复制数据,并为另一个给定对象标识将对应的记录插入Data_Table和Link_Table中。 我可以通过选择一个表变量并为每次迭代进行两次插入来循环执行此操作。 这是最好的方法吗? 编辑:我想避免循环的原因有两个,第一个是我很懒,并且循环/临时表需要更多的代码,更多的代码意味着有更多的地方出错,第二个原因是对性能的关注。 我可以在一个插入中复制所有数据,但是如何获得链接表以链接到新数据记录,其中每个记录都有一个新的ID? 回答1 在一个陈述中:不。 一笔交易:是 BEGIN TRANSACTION DECLARE @DataID int; INSERT INTO DataTable (Column1 ...) VALUES (....); SELECT @DataID = scope_identity(); INSERT INTO LinkTable VALUES (@ObjectID, @DataID); COMMIT 好消息是,上述代码也保证是原子的,并且可以在单个函数调用中使用一个sql字符串从客户端应用程序将其发送到服务器,就好像它是一条语句一样。
  • Oracle入门到实战
    文章目录 一、oracle基础语句二、oralce表查询关键字2.1 使用逻辑操作符号2.2 使用order by字句2.3 取别名2.4 聚合函数2.5 group by 和 having2.6 多表查询2.7 单行子查询2.8 多行子查询2.9 多列子查询2.10 用查询的结果创建新表2.11 union2.12 exists 三、oracle常用函数四、oracle常用结构4.1 dual 表的介绍4.2 view 视图4.3 sequence 序列4.4 index 索引4.5 cursor 游标4.6 触发器4.7 序列+触发器模拟主键自增4.8 创建用户4.9 数据库数据导入、导出 一、oracle基础语句 新建表: CREATE TABLE USERS( ID NUMBER(4) PRIMARY KEY, NAME VARCHAR(10), SEX CHAR(2), ADDR VARCHAR2(20), BIRTHDAY DATE, SAL NUMBER(8,2) ); 查看表的结构:DESC USERS; 增:insert into users(id,name,sex,ADDR,BIRTHDAY,sal)values(1,'Jack','1','USA.Los Angeles',to_date('20140214','yyyymmdd'),1000); 删
  • Oracle变异表解决方法--ORA-04091错误
    Oracle变异表解决方法--ORA-04091错误原因:触发器(或者被语句中引用的用户自定义PL/SQL函数)视图去查询(或修改)一个被另一语句修改而触发的表。解决方法:重写触发器(或函数)避免读该表。 对表进行DELETE,UPDATE,INSERT操作时,所操作的表就变成了变异表,对表的行级(FOR EACH ROW)触发器中不能对该表进行DML操作。这时可以使用两个方法解决。[@more@]1、采用自治事务pragma autonomous_transaction解决。下面给出一个使用自治事务解决ORA-04091错误的示例:CREATE OR REPLACE TRIGGER SCOTT.TRG_UPDATE_EMP AFTER UPDATE ON SCOTT.EMP FOR EACH ROWDECLARE V_NUM NUMBER;BEGIN SELECT COUNT(1) INTO V_NUM FROM SCOTT.EMP T WHERE DEPTNO = :NEW.DEPTNO; IF V_NUM > 2 THEN RAISE_APPLICATION_ERROR(-20001, V_NUM); END IF;END;执行更新操作报错ORA-04091:SYS@lhrdb> UPDATE SCOTT.EMP SET SAL=0 ;UPDATE scott.emp set
  • Oracle变异表解决方法--ORA-04091错误
    Oracle变异表解决方法--ORA-04091错误原因:触发器(或者被语句中引用的用户自定义PL/SQL函数)视图去查询(或修改)一个被另一语句修改而触发的表。解决方法:重写触发器(或函数)避免读该表。 对表进行DELETE,UPDATE,INSERT操作时,所操作的表就变成了变异表,对表的行级(FOR EACH ROW)触发器中不能对该表进行DML操作。这时可以使用两个方法解决。[@more @]1、采用自治事务pragma autonomous_transaction解决。下面给出一个使用自治事务解决ORA-04091错误的示例:CREATE OR REPLACE TRIGGER SCOTT.TRG_UPDATE_EMP AFTER UPDATE ON SCOTT.EMP FOR EACH ROWDECLARE V_NUM NUMBER;BEGIN SELECT COUNT(1) INTO V_NUM FROM SCOTT.EMP T WHERE DEPTNO = :NEW.DEPTNO; IF V_NUM > 2 THEN RAISE_APPLICATION_ERROR(-20001, V_NUM); END IF;END;执行更新操作报错ORA-04091:SYS@lhrdb> UPDATE SCOTT.EMP SET SAL=0 ;UPDATE scott.emp
  • Oracle--使用DML语句处理数据及控制事务
    数据操作语言 DML(Data Manipulation Language - 数据操作语言)可以在下列条件执行: 向表中插入数据修改现存数据删除现存数据 事务是由完成若干项工作的DML语句组成的 插入数据 insert语句语法: insert into table [(column [, column...]}] values (value [, value...]); 使用这种语法一次只能向表中插入 一 条 \color{red}{一条} 一条数据。 为每一列添加一个新值。按列的默认顺序列出各个列的值。在insert子句中随意列出列名和它们的值。 字 符 和 日 期 型 数 据 应 包 含 在 单 引 号 中 。 \color{red}{字符和日期型数据应包含在单引号中。} 字符和日期型数据应包含在单引号中。 insert into departments(department_id, department_name, manager_id, location_id) values(17, 'Public Relations', 100, 1700); 1 row created. 向表中插入空值 隐式方式:在列名表中省略该列的值。 insert into department (department_id, department_name) values (30,
  • oracle补充
    索引索引是若干数据行的关键字的列表,查询数据时,通过索引中的关键字可以快速定位到要访问的记录所在的数据块,从而大大减少读取数据的I/O次数,因此可以显著的提高性能创建索引的SQL把下面表中的name字段创建索引create index teachername on teacher(name);create index teachername2 on teacher(tid,age); --可以索引多个字段创建唯 一索引的SQLcreate unique index teacherhao on teacher(hao);create unique index teacherhao2 on teacher(hao,hao2);删除索引的SQLdrop index teachername;序列序列是Oracle提供的用于产生一系列唯一数字的数据库对象。 在某些数据表的结构中,有些字段需要这种特征: 比如,对于某个学生数据表的学号关键字段,用户可以希望在录入数据时,能够自动在上一个记录的学号字段上自动加1等。创建序列要有序列权限grant create sequence,select any sequence to 用户名--dba权限包括以上权限,所以不用重新赋予序列的创建CREATE SEQUENCE sequence --创建序列名称[INCREMENT BY n] -
  • 【DB笔试面试594】在Oracle中,关键字NOLOGGING、APPEND和PARALLEL提高DML性能方面有什么差别?
    ♣ 题目 部分在Oracle中,关键字NOLOGGING、APPEND和PARALLEL提高DML性能方面有什么差别? ♣ 答案部分 众所周知,表模式(LOGGING/NOLOGGING)、插入模式(APPEND/NOAPPEND)、数据库运行模式(归档(ARCHIVELOG)/非归档(NOARCHIVELOG))和并行模式与DML操作的效率息息相关,作者就此设计了一个实验,用来检测它们不同组合生成的Redo量、Undo量和用时长短的比较,实验结果参考表 3-22,该表数据经过多次实验得到,表中重要数据用加粗来表示。由于篇幅原因,有关实验用到的建表语句、存储过程等脚本在本书中不再列出,具体脚本可以去我的BLOG下载,下载地址为:http://blog.itpub.net/26736162/viewspace-2125815/。表 3-22 表模式、插入模式、运行模式和并行模式的组合效率序号DDL/DML OPERATIONS TYPESDDL/DML OPERATIONSDIRECT-PATHNOLOGGINGPARALLELARCHIVELOG MODENOARCHIVELOG MODEREDOUndoUSE_TIMEREDOUndoUSE_TIME1CTASCREATE TABLE XXX AS SELECT * FROM YYYYNN6661315644099623
  • sql-在一个查询中插入多个表(sql - insert into multiple tables in one query)
    问题 假设我有两个表, names和phones并且我想在一个查询中将来自某些输入的数据插入到表中,该怎么做? 如果可以的话,请解释其语法。 回答1 MySQL不支持在单个INSERT语句中进行多表插入。 奇怪的是,Oracle是我所知道的唯一一个... INSERT INTO NAMES VALUES(...) INSERT INTO PHONES VALUES(...) 回答2 你不能但是,您可以使用一个事务,并将它们都包含在一个事务中。 START TRANSACTION; INSERT INTO table1 VALUES ('1','2','3'); INSERT INTO table2 VALUES ('bob','smith'); COMMIT; http://dev.mysql.com/doc/refman/5.1/en/commit.html 回答3 我有同样的问题。 我用for循环解决它。 例子: 如果我想在2个相同的表中编写,请使用循环 for x = 0 to 1 if x = 0 then TableToWrite = "Table1" if x = 1 then TableToWrite = "Table2" Sql = "INSERT INTO " & TableToWrite & " VALUES ('1','2','3')" NEXT 任何一个
  • SQL 中的生成列/计算列以及主流数据库实现
    文章目录 什么是生成列?Oracle 中的虚拟列MySQL 中的生成列SQL Server 中的计算列PostgreSQL 中的存储生成列SQLite 中的生成列 什么是生成列? 在 SQL 数据库中,生成列(Generated Column)是指由表中其他字段计算得到的列,因此也称为计算列(Computed Column)。 生成列存在两种类型:存储(stored)生成列和虚拟(virtual)生成列。存储生成列和普通列类似,在插入或者更新数据时自动计算并且存储该列的值,需要占用存储空间;虚拟生成列不需要占用存储空间,只在读取时进行计算。因此,虚拟生成列就像是一个视图(字段的视图),而存储生成列就像是一个物化视图(实时更新)。 ⚠️我们无法直接插入或者更新生成列的值,它的值由数据库自动生成和更新。 生成列的常见用途包括: 虚拟生成列可以用来简化和统一查询。我们可以将复杂的查询条件定义成一个生成列,然后在查询该表时使用,从而确保所有的查询都使用相同的判断条件。存储生成列可以作为查询条件的物化缓存(materialized cache),减少查询时的计算成本。生成列可以模拟函数索引:定义一个基于函数表达式的生成列并且创建索引。对于存储型的生成列,这种方式需要占用更多的存储。 各种主流 SQL 数据库对于生成列/计算列的支持如下: 生成列OracleMySQLSQL
  • 使用Oracle plsql触发器从生日计算年龄并将年龄插入表中(Calculating age from birthday with oracle plsql trigger and insert the age in table)
    问题 我有一张桌子 dates (dob date, age number(4) ); 我将插入出生日期,触发器将计算年龄并将该年龄插入“年龄”字段。 CREATE OR REPLACE PROCEDURE getage IS ndob date; nage number(10); BEGIN select dob into ndob from dates; select (sysdate-to_date(ndob))/365 into nage from dual; update dates set age=nage; END; / SHOW ERRORS; 此过程可以正常工作,但仅适用于一行,并且我需要所有行都使用触发器,但是如果我从触发器中调用它,则会发生错误。 CREATE OR REPLACE TRIGGER agec after INSERT OR UPDATE ON dates FOR EACH ROW BEGIN getage; END; / 回答1 请帮助...我真的需要这个... 不,你没有。 我不确定您会注意什么; 而且没有理由您应该:-)但是: 不要将年龄存储在数据库中。 绝对保证您偶尔会出错。 每个人的年龄每年都在变化,但是对于某些人来说,它每天都在变化。 反过来,这意味着您需要每天运行一个批处理作业并更新使用期限。 如果此操作失败,或者不是非常严格
  • 行链接(Row Chaining)和行迁移(Row Migration)
    行链接(Row Chaining)和行迁移(Row Migration)一、概述: 如果你的Oracle数据库性能低下,行链接和行迁移可能是其中的原因之一。我们能够通过合理的设计或调整数据库来阻止这个现象。 行链接和行迁移是能够被避免的两个潜在性问题。我们可以通过合理的调整来提高数据库性能。本文主要描述的是: 什么是行迁移与行链接 如何判断行迁移与行链接 如何避免行迁移与行链接 当使用索引读取单行时,行迁移影响OLTP系统。最糟糕的情形是,对所有读取操作而言,增加了额外的I/O。行链接则影响索引读和全表扫描。 注:在翻译行(row)时使用记录来描述(便于理解),如第一行,使用第一条记录。二、Oralce 块 操作系统块的大小是操作系统读写的最小操作单元,也是操作系统文件的属性之一。当创建一个数据库时,选择一个基于操作系统块的 整数倍大小作为Oracle数据库块的大小。Oracle数据库读写操作则是以Oracle块为最小单位,而非操作系统块。一旦设置了Oracle数据块的大小, 则在整个数据库生命期间不能被更改(除 Oracle 9i之外)。因此为Oracle数据库定制合理的Oralce块大小,象预期数据库总大小以及并发用户数这些 因素应当予以考虑。 数据库块由下列逻辑结构(在整个数据库结构下) 头部 头部包含一些常用信息,象块地址,段的类型(表段、索引段等)。也包含一些表
  • 行链接(Row Chaining)和行迁移(Row Migration)
    行链接(Row Chaining)和行迁移(Row Migration)一、概述: 如果你的Oracle数据库性能低下,行链接和行迁移可能是其中的原因之一。我们能够通过合理的设计或调整数据库来阻止这个现象。 行链接和行迁移是能够被避免的两个潜在性问题。我们可以通过合理的调整来提高数据库性能。本文主要描述的是: 什么是行迁移与行链接 如何判断行迁移与行链接 如何避免行迁移与行链接 当使用索引读取单行时,行迁移影响OLTP系统。最糟糕的情形是,对所有读取操作而言,增加了额外的I/O。行链接则影响索引读和全表扫描。 注:在翻译行(row)时使用记录来描述(便于理解),如第一行,使用第一条记录。二、Oralce 块 操作系统块的大小是操作系统读写的最小操作单元,也是操作系统文件的属性之一。当创建一个数据库时,选择一个基于操作系统块的 整数倍大小作为Oracle数据库块的大小。Oracle数据库读写操作则是以Oracle块为最小单位,而非操作系统块。一旦设置了Oracle数据块的大小, 则在整个数据库生命期间不能被更改(除 Oracle 9i之外)。因此为Oracle数据库定制合理的Oralce块大小,象预期数据库总大小以及并发用户数这些 因素应当予以考虑。 数据库块由下列逻辑结构(在整个数据库结构下) 头部 头部包含一些常用信息,象块地址,段的类型(表段、索引段等)。也包含一些表
  • 【锁】Oracle死锁(DeadLock)的分类及其模拟
    【锁】Oracle死锁(DeadLock)的分类及其模拟1 BLOG文档结构图 2 前言部分2.1 导读和注意事项各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~:① 死锁的概念及其trace文件② 死锁的分类③ 行级死锁的模拟④ ITL的概念、ITL结构⑤ ITL引发的死锁处理⑥ ITL死锁的模拟 Tips:① 本文在itpub(http://blog.itpub.net/26736162)、博客园(http://www.cnblogs.com/lhrbest)和微信公众号(xiaomaimiaolhr)上有同步更新。② 文章中用到的所有代码、相关软件、相关资料及本文的pdf版本都请前往小麦苗的云盘下载,小麦苗的云盘地址见:http://blog.itpub.net/26736162/viewspace-1624453/。③ 若网页文章代码格式有错乱,请尝试以下办法:①去博客园地址阅读,②下载pdf格式的文档来阅读。④ 在本篇BLOG中,代码输出部分一般放在一行一列的表格中。其中,需要特别关注的地方我都用灰色背景和粉红色字体来表示,比如在下边的例子中,thread 1的最大归档日志号为33,thread 2的最大归档日志号为43是需要特别关注的地方;而命令一般使用黄色背景和红色字体标注
  • 【锁】Oracle死锁(DeadLock)的分类及其模拟
    1 BLOG文档结构图 2 前言部分2.1 导读和注意事项各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~:① 死锁的概念及其trace文件② 死锁的分类③ 行级死锁的模拟④ ITL的概念、ITL结构⑤ ITL引发的死锁处理⑥ ITL死锁的模拟 Tips:① 本文在itpub(http://blog.itpub.net/26736162)、博客园(http://www.cnblogs.com/lhrbest)和微信公众号(xiaomaimiaolhr)上有同步更新。② 文章中用到的所有代码、相关软件、相关资料及本文的pdf版本都请前往小麦苗的云盘下载,小麦苗的云盘地址见:http://blog.itpub.net/26736162/viewspace-1624453/。③ 若网页文章代码格式有错乱,请尝试以下办法:①去博客园地址阅读,②下载pdf格式的文档来阅读。④ 在本篇BLOG中,代码输出部分一般放在一行一列的表格中。其中,需要特别关注的地方我都用灰色背景和粉红色字体来表示,比如在下边的例子中,thread 1的最大归档日志号为33,thread 2的最大归档日志号为43是需要特别关注的地方;而命令一般使用黄色背景和红色字体标注;对代码或代码输出部分的注释一般采用蓝色字体表示。 List of Archived Logs
  • 【锁】Oracle死锁(DeadLock)的分类及其模拟
    【锁】Oracle死锁(DeadLock)的分类及其模拟1 BLOG文档结构图 2 前言部分2.1 导读和注意事项各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~:① 死锁的概念及其trace文件② 死锁的分类③ 行级死锁的模拟④ ITL的概念、ITL结构⑤ ITL引发的死锁处理⑥ ITL死锁的模拟 Tips:① 本文在itpub(http://blog.itpub.net/26736162)、博客园(http://www.cnblogs.com/lhrbest)和微信公众号(xiaomaimiaolhr)上有同步更新。② 文章中用到的所有代码、相关软件、相关资料及本文的pdf版本都请前往小麦苗的云盘下载,小麦苗的云盘地址见:http://blog.itpub.net/26736162/viewspace-1624453/。③ 若网页文章代码格式有错乱,请尝试以下办法:①去博客园地址阅读,②下载pdf格式的文档来阅读。④ 在本篇BLOG中,代码输出部分一般放在一行一列的表格中。其中,需要特别关注的地方我都用灰色背景和粉红色字体来表示,比如在下边的例子中,thread 1的最大归档日志号为33,thread 2的最大归档日志号为43是需要特别关注的地方;而命令一般使用黄色背景和红色字体标注
  • 在Oracle上使用ORDER插入(INSERT with ORDER on Oracle)
    问题 在Oracle 10g上,我们需要将视图中的记录插入表中,以支持本身没有sort或ORDER选项的哑客户端应用程序。 有什么方法可以控制我们的INSERT语句将记录添加到目标表的顺序? 回答1 如果没有ORDER BY则无法可靠地控制Oracle以什么顺序检索表的行。 此外,如果没有/*+APPEND*/提示,Oracle会将行实际存储在堆空间中的堆表中,该空间可能不在表的末尾! 您可能会认为Oracle会按顺序插入它们,但是任何DML或并发活动(插入2个以上会话)可能会产生不同的物理组织。 您可以使用INDEX ORGANIZED表按照PK的顺序存储行。 此后在该表上进行的大多数简单查询将产生一组已排序的行。 但是,如果您未指定ORDER BY (这取决于查询和访问路径,则行可能会以任何顺序出现),则这不能保证oracle将按该顺序选择行。 您还可以使用带有排序顺序的视图,如果您无法触摸应用程序,则这可能是最好的选择(重命名表,使用表名创建视图,让应用程序认为它查询了表)。 我不知道您的情况是否可行。 回答2 除非您指定ORDER BY,否则您将永远无法保证Oracle从SELECT返回行的顺序 回答3 只需使用ORDER BY。 就像是 INSERT INTO table ( SELECT column1, column2 FROM view ORDER BY
  • 【DB笔试面试594】在Oracle中,关键字NOLOGGING、APPEND和PARALLEL提高DML性能方面有什么差别?...
    ♣题目 部分在Oracle中,关键字NOLOGGING、APPEND和PARALLEL提高DML性能方面有什么差别? ♣答案部分众所周知,表模式(LOGGING/NOLOGGING)、插入模式(APPEND/NOAPPEND)、数据库运行模式(归档(ARCHIVELOG)/非归档(NOARCHIVELOG))和并行模式与DML操作的效率息息相关,作者就此设计了一个实验,用来检测它们不同组合生成的Redo量、Undo量和用时长短的比较,实验结果参考表 3-22,该表数据经过多次实验得到,表中重要数据用加粗来表示。由于篇幅原因,有关实验用到的建表语句、存储过程等脚本在本书中不再列出,具体脚本可以去我的BLOG下载,下载地址为:http://blog.itpub.net/26736162/viewspace-2125815/。表 3-22 表模式、插入模式、运行模式和并行模式的组合效率序号DDL/DML OPERATIONS TYPESDDL/DML OPERATIONSDIRECT-PATHNOLOGGINGPARALLELARCHIVELOG MODENOARCHIVELOG MODEREDOUndoUSE_TIMEREDOUndoUSE_TIME1CTASCREATE TABLE XXX AS SELECT * FROM YYYYNN6661315644099623
  • 【DB笔试面试594】在Oracle中,关键字NOLOGGING、APPEND和PARALLEL提高DML性能方面有什么差别?...
    ♣题目 部分 在Oracle中,关键字NOLOGGING、APPEND和PARALLEL提高DML性能方面有什么差别? ♣答案部分众所周知,表模式(LOGGING/NOLOGGING)、插入模式(APPEND/NOAPPEND)、数据库运行模式(归档(ARCHIVELOG)/非归档(NOARCHIVELOG))和并行模式与DML操作的效率息息相关,作者就此设计了一个实验,用来检测它们不同组合生成的Redo量、Undo量和用时长短的比较,实验结果参考表 3-22,该表数据经过多次实验得到,表中重要数据用加粗来表示。由于篇幅原因,有关实验用到的建表语句、存储过程等脚本在本书中不再列出,具体脚本可以去我的BLOG下载,下载地址为:http://blog.itpub.net/26736162/viewspace-2125815/。表 3-22 表模式、插入模式、运行模式和并行模式的组合效率序号DDL/DML OPERATIONS TYPESDDL/DML OPERATIONSDIRECT-PATHNOLOGGINGPARALLELARCHIVELOG MODENOARCHIVELOG MODEREDOUndoUSE_TIMEREDOUndoUSE_TIME1CTASCREATE TABLE XXX AS SELECT * FROM YYYYNN6661315644099623