当前位置:文档之家› Oracle__插入数据

Oracle__插入数据

Oracle 插入数据
插入数据就是将数据放置到已经创建的表中,Oracle 数据库是通过INSERT 语句来实现插入数据的。

一般情况下,使用INSERT 语句可以一次插入一行数据。

与SELECT 语句相比,INSERT 语句的使用方式要简单的多。

在INSERT 语句的使用方式中,最为常用的形式是在INSERT INTO 子句中指定添加数据的列,并在V ALUES 子句中为各个列提供一个值。

下面语句将向SCOTT 模式中的EMP 表添加一条记录:
SQL> insert into emp(empno,ename,job,mgr,hiredate,sal,comm,deptno)
2 values(7995,'A TG','CLERK',7782,to_date('2007-9-23','yyyy-mm-dd'),1300,null,10);
已创建 1 行。

在向表中所有列添加数据时,可以省略INSERT INTO 子句后的列表清单,使用这种方法时,必须根据表中定义的列的顺序,为所有的列提供数据,用户可以使用DESC 命令查看表中定义列的顺序。

下面的INSERT 语句在向EMP 表添加记录时省略了列清单:
SQL> desc emp
SQL> insert into emp
2 values(7996,'LI','CLERK',7782,to_date('2006-5-12','yyyy-mm-dd'),1200,null,10);
已创建 1 行。

在插入操作过程中,用户也可以根据实际情况只为部分列提供数据,而省略某些列的数据。

注意这些列必须允许空值、有默认值或系统可以自动成生值等。

例如,在EMP 表中,除EMPNO 列不允许空值外,其他列都可以为空值。

如果某个列不允许NULL 值存在,而用户没有为该列提供数据,则会因为违反相应的约束而插入失败。

事实上,在定义表的时候为了数据的完整性,经常会为表添加许多约束。

例如,在EMP 表中为了保证表中每条记录的惟一性,在表的EMPNO 列上定义了主键约束。

如果用户试图为表中的EMPNO 列添加一个重复值,则因为违反主键约束而失败:
SQL> insert into emp(empno,ename,job)
2 values(7782,'KING','CLERK');
insert into emp(empno,ename,job)
*
第 1 行出现错误:
ORA-00001: 违反唯一约束条件 (SCOTT.PK_EMP)
注 意
使用这种方法插入数据时有一个大隐患,如果为表指定的数值位置不对,
并且指定的数据类型之间可以转化,则执行该语句时系统不会返回任何错误信息。

但是这会为该表添加一条错误的记录。

由于这种错误难以发现,所以在添
加记录时最好在INSERT INTO 子句中指定列清单,以明确接收数据的列。

关于为表定义完整性约束,将在后面的章节中介绍,这里需要记住的是在向表添加记录时,添加的数据必须符合为表定义的所有完整性约束。

INSERT语句还有一种用法,可以实现一次向表中添加一组数据。

即使用SELECT语句替换V ALUES子句,这样由SELECT语句提供添加的数值。

例如,下面的示例从EMP表提取属于某一部门的雇员信息保存到另外一个表中:
SQL> create table accounting_employees(
2 empno number(4),
3 ename varchar2(10),
4 job varchar2(20),
5 hiredate date,
6 sal number(6,2));
表已创建。

SQL> insert into accounting_employees
2 select empno,ename,job,hiredate,sal
3 from emp
4 where deptno=10;
已创建5行。

从上面的语句执行结果可以看出,通过使用INSERT和SELECT语句的组合一次性为新创建的表添加了5行数据。

注意
在使有INSERT和SELECT语句的组合成批添加数所时,INSERT INTO 子句后所指定的列名可以与SELECT子句指定的列名不相同,但是其数据类型必须相匹配,即SELECT语句返回的数据必须满足表中的约束。

相关主题