1.标准Insert --单表单行插入

语法:

INSERT INTO table [(column1,column2,...)] VALUE (value1,value2,...)

例子:

insert into dep (dep_id,dep_name) values(1,'技术部');

备注:使用标准语法只能插入一条数据,且只能在一张表中插入数据

2, 无条件 Insert all --多表多行插入

语法:

INSERT [ALL] [condition_insert_clause]

[insert_into_clause values_clause] (subquery)

示例:

INSERT ALL

INTO sal_history(emp_id,hire_date,salary) values (empid,hiredate,sal)

INTO mgr_history(emp_id,manager_id,salary) values (empid,hiredate,sal)

SELECT employee_id empid,hire_date hiredate,salary sal,manager_id mgr

FROM employees

WHERE employee_id>200;

3,有条件的Insert

语法:

INSERT [ALL | FIRST]

WHEN condition THEN insert_into_clause values_clause

[WHEN condition THEN] [insert_into_clause values_clause]

......

[ELSE] [insert_into_clause values_clause]

Subquery;

示例:

Insert All

when id>5 then into z_test1(id, name) values(id,name)

when id<>2 then into z_test2(id) values(id)

else into z_test3 values(name)

select id,name from z_test;

当使用ALL关键字时,oracle会从上至下判断每一个条件,当条件满足时就执行后面的into语句

在上面的例子中,如果ID=6 那么将会在z_test1中插入一条记录,同时也在z_test2中插入一条记录

备注:

当使用FIRST关键字时,oracle会从上至下判断每一个条件,当遇到第一个满足时就执行后面的into语句,

同时中断判断的条件判断,在上面的例子中,如果ID=6,仅仅会在z_test1中插入一条数据

4, 旋转Insert (pivoting insert)

create table sales_source_data (

employee_id number(6),

week_id number(2),

sales_mon number(8,2),

sales_tue number(8,2),

sales_wed number(8,2),

sales_thur number(8,2),

sales_fri number(8,2)

);

insert into sales_source_data values (176,6,2000,3000,4000,5000,6000);

create table sales_info (

employee_id number(6),

week number(2),

sales number(8,2)

);

看上面的表结构,现在将要sales_source_data表中的数据转换到sales_info表中,这种情况就需要使用旋转Insert

示例如下:

insert all

into sales_info values(employee_id,week_id,sales_mon)

into sales_info values(employee_id,week_id,sales_tue)

into sales_info values(employee_id,week_id,sales_wed)

into sales_info values(employee_id,week_id,sales_thur)

into sales_info values(employee_id,week_id,sales_fri)

select employee_id,week_id,sales_mon,sales_tue,

sales_wed,sales_thur,sales_fri

from sales_source_data;

从该例子可以看出,所谓旋转Insert是无条件 insert all 的一种特殊应用,但这种应用被oracle官方,赋予了一个pivoting insert的名称,即旋转insert

1.一般的insert 操作。

使用语法insert into table_name[(column[,column...])] values

(value[,value…])的insert语句,每条insert只能插入到目标表中一条指定的数据。如果有很多行需要插入,而且这些数据来源于别

的表或多个表之间提取的数据,那么这就不能满足要求了。因此oracle提供了一个扩展,见下面描述。

2.insert into table_name[(column[,column…])] select_statement

Oracle提供了一个扩展,将通过select语句查询的记录插入到指定表的所有列或者指定列中。每次只能插入到一个表中,但是性能已经比写

很多条insert语句要高了。另外oracle还提供了直接create table table_name as

select….(as不可以少!),实现直接创建表并且插入数据,依赖于后面的select语句的结果,比如只复制表结构,约束不赋值,那么可以使用

Create table new_table as select * from source_table where 1=0;

--1=0不查询记录,只复制基本结构。

比如有个需求:表mxt 新增了一个列time,那么这个新增的列在oracle 中会被放在所有列的后面,现在想把这个time列放在第2 个位置,那么可以使用这个操作:

下面具体说明oracle 对insert 操作的其他扩展,实现目标,一条insert 操作,插入到多个表中,每个表插入多条记录。

3向多个目标insert

这里有四种类型:

1. 无条件的insert

2. 带条件的insert all

3. 带条件的insert first

4. pivoting insert

多表insert使用限制:

1. 只能对table使用多表insert,不能对视图或物化视图使用。

2. 不能对远程表进行这个插入操作。

3. 在做多表insert操作,不能指定一个表的集合表达式。

4. 多表insert中的的into目标表加在一起的列数不能超过999 个。

语法:

注:如果没有conditional_insert_clause,必须有all,即insert all 开头。如果有conditional_insert_clause,则all和first只能取其一。

3.1 无条件的insert操作

这里所说的无条件的insert操作有两种,一种就是单表insert into dest_table select..,一种是向多个目标中insert,那么使用insert all into dest_table1,dest table2…select…

目标表只有一个:insert into dest_table[colum(,column…)] select …

目标表有多个: insert all --可以替代上面的操作

Into dest_table1[column(,column…)] [values(…)]

Into dest_table2[column(,column…)] [values(…)]

Select_statement—values中指定的是select结果中的列

目标表只有一个的,那么插入目标表中后面可以跟指定的列,依赖于查询出来的数目以及类型,没有values指定。如果不指定列,那么表示目标表的列类型和顺序与select语句查询的结果完全一致。

对于目标表有多个的必须使用insert all,all 不能省略。与带条件的不同,带条件的all

可以省略,后面讲解。这里的每个目标表可以不指定列,依赖于values

中指定的select语句查询出来的结果中的列。如果目标表不指定列,那么表示目标表的列的顺序类型和values 中指定的一致,而values

中的列则依赖于select

语句查询出的结果。当然也可以省略values,那么表示目标表中的列顺序和类型和select语句查询出来的结果完全一致,否则报错。Insert

all可以替代目标表只有一个的操作。

建议不要省略目标表中的列和values,增强可读性。

例如:

这里总共插入了75行记录,select语句查询的记录为25 行,因为是无条件的插入,那么对每个目标表都插入了25行记录,所以总共插入75 行记录。

3.2 带条件的insert all

带条件的insert all与不带条件的insert all相比可以省略all,但是不建议省略。另外的区别就是插入到目标表之前,有条件判断,从查询的结果行中筛选出满足条件的记录,然后向目标表中插入,而不在是无条件的insert all中的全量插入。

语法是:

Insert all

When 条件 then

Into dest[指定列] values(查询中的列)

When 条件 then

[else]

Into dest[指定列] values(查询中的列)

Select语句.

是否可以省略目标表中的指定列和values 那么与无条件的insert all

一致。条件中的列那么必须与查询的结果列名保持一致,如果select中使用别名,那么条件中也必须使用别名,和values中的规则一样。Else可以

指定,如果不指定else,则按照条件筛选,如果指定else,则表示与前面全不匹配的插入到else后面的目标表中。带条件的insert

all与insert first的区别在于只按条件对查询的结果进行筛选,不会不考虑前面已经匹配过的记录,每次都是全量匹配,而insert

first是后面的when条件insert操作会对前面已经匹配过的记录不予考虑。

例如:

总共插入26行,而查询结果为25行,emp_2中插入了一条与emp_1中重复的记录。

3.3 带条件的insert first

Insert first只有带条件的,没有不带条件的。

语法只要将insert all中的all改为first就可以了。这里的first不可以省略。省略那么默认就是all。

它的插入规则是如果前面的when 匹配过的,下一个when 会自动不考虑上面已经匹配过的行记录。比如将上面16.3.2中的例子改为:

插入25行,因为when s_last_name like M%不考虑前面已经匹配的行,所以emp_2中就没有那条与插入emp_1中的重复行。

3.4 pivoting insert(旋转插入)

这节主要讨论使用pivoting insert 实现将非关系性表记录转换为关系型表中存储。Pivot 旋转是OLAP 中的一个基本改变,提供多维度数据分析。比如一个表为sales_source_data,里面的列为

employee_id number,week_id number,sales_mon number,sales_tue

number,sales_wed number,sales_thur number,sales_fri number

员工id,周id,其他的是工作日的每天的销售记录。

现在要把数据转到sales_info表中,这个表的列为employee_id,week_id,sales。

要实现这个转换可以使用pivoting insert 操作。和insert all类似,只不过这里的多表都是同一个表。

insert all

into sales_info values(employee_id,week_id,sales_mon) --分别按每个工作日插入

into sales_info values(employee_id,week_id,sales_tue)

into sales_info values(employee_id,week_id,sales_wed)

into sales_info values(employee_id,week_id,sales_thur)

into sales_info values(employee_id,week_id,sales_fri)

select employee_id,week_id,sales_mon,sales_tue,sales_wed,sales_thur,sales_fri

from sales_source_data;

比如原来的sales_source_data 中只有一条记录,那么插入到sales_info 中就变成了5 条记录。

select * from sales_source_data;

select * from sales_info;

4 external tables(外部表)

oracle insert into insert,总结下Oracle 中的Insert用法相关推荐

  1. 在linux操作系统中启动oracle数据库程序,Linux系统下Oracle数据库的安装和启动关闭操作教程...

    这篇文章主要介绍了Linux系统下Oracle数据库的安装和启动关闭操作教程,并针对在sqlplus下所需执行的命令进行讲解,需要的朋友可以参考下 1.准备: df -H 查看空间剩余   一般准备最 ...

  2. linux中oracle数据乱码,解决linux下oracle导入数据中文乱码方案

    主要的原因是两个数据库的字符集不相同引起的 先查导出的数据的oracle字符集 用sys用户登陆oracle 用如下命令: select * from nls_database_parameters ...

  3. 【Oracle 集群】Linux下Oracle RAC集群搭建之基本测试与使用(九)

    Oracle 11G RAC数据库安装(九) 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习的汇总 ...

  4. linux oracle新建监听,linux 下 oracle图形界面(需配置监听,创建实例)

    摘要:oracle 图形界面配置监听,创建实例,以下都是我安装是的截图,按步骤一定可以安装成功! CentOS6.7_x64_minimal_desktop的虚拟机一台(安装oracle需要图形界面, ...

  5. oracle startup出错,startup Linux下oracle报以下错

    startup Linux下oracle报以下错 ORA-27102:out of memory Linux-X86_64 Error: 28: No space left on device     ...

  6. windows10 oracle自动备份,Windows系统下oracle 自动备份数据库

    Windows系统下oracle 自动备份数据库 1.创建批处理文件(.bat) 2.建立windows 定时任务 2.1创建任务 2.2 常规处 ->填写任务名称 2.3触发器 2.4 操作 ...

  7. oracle设置开机启动,linux下oracle设置开机自启动实现方法

    一.在Linux下启动Oracle 登录到CentOS,切换到oracle用户权限 # su – oracle 接着输入: $ sqlplus "/as sysdba" 原本的画面 ...

  8. oracle odbc驱动 linux,linux下oracle的odbc驱动的安装与配置

    最近做一个项目,在RHEL 5下建立一个oracle数据库系统,用于存储集群的录音数据,其中数据库驱动用的是odbc,这里简单的记录下安装配置odbc的经过吧. 一.安装unixODBC 从,下载了u ...

  9. oracle 11g proc/c...,Windows下Oracle 11g的下载与安装

    一.Oracle下载 二.Oracle安装 1.安装准备 Oracle的安装包下载以后是两个压缩包,同时选中两个压缩包右击进行解压 2.解压完成如下图所示 3.双击 setup.exe 文件进行安装, ...

  10. linux的oracle怎么建库,linux下oracle手工建库过程

    1.创建目录 $ORACLE_BASE/admin/ $ORACLE_BASE/oradata $ORACLE_BASE/flash_recovery_area 2.建初始化参数文件 cd   $OR ...

最新文章

  1. 【原创】如何分析一个网站使用的服务器类型
  2. java获取手机号码归属地_手机号码归属地能否取消?这些热点问题,工信部回复了...
  3. java的object_Java中的Object类详细介绍
  4. Dirichlet分布与多项分布的共轭性
  5. 中科大在50年代的教学理念
  6. (王道408考研操作系统)第四章文件管理-第二节2:磁盘调度算法
  7. L2-039 清点代码库 (25 分)-PAT 团体程序设计天梯赛 GPLT
  8. 飘逸的python - 几行代码实现unix管道风格的函数调用
  9. TED如何和压力做朋友(第四天完)
  10. 嵌入式Linux开发与单片机开发的区别
  11. 汽车VIN码超详细解析规则
  12. 在Swing中使用JxBrowser-Using JxBrowser in Swing
  13. P13~P14 谋定而后动,知止而有得
  14. java 日期 面试题_Java面试试题日期和时间
  15. 拳皇重生服务器维护,《拳皇97 OL》3月8日更新维护公告
  16. 基于LSTM的股票预测模型_python实现_超详细
  17. 一起来学自然语言处理----语料库和词汇资源
  18. 教你一招设计图纸不被外泄的方法
  19. 基于视觉的扫地机器人导航系统(模块设计)
  20. 定义了Circle圆形类,在此基础上派生出Cylinder圆柱体类。 Circle圆形类定义如下: class Circle { public: Circle(double r):radius(r

热门文章

  1. 10月韩国MogaFX外汇交易下降
  2. 黑马程序员MySQL数据库之基础篇笔记(SQL语法)(每日更新)
  3. DateTime.Now 的24小时和12小时制
  4. Vue脚手架3.0快速搭建项目
  5. fmod函数python_python fmod函数_Python numpy.fmod方法代码示例
  6. 【使用OpenCV进行视频人脸检测】------机器学习(附完整代码和数据集)
  7. 原神米游社自动签到教程
  8. 《Linux那些事儿之我是USB》我是U盘(18)冬天来了,春天还会远吗?(四)
  9. 【Windows】Windows Server 2008 R2 安装 .Net Framework 4.5
  10. (2022版)一套教程搞定k8s安装到实战 | Docker基本命令