首页 > 代码库 > Oracle DML

Oracle DML

地址符 &
  :在所有的DML语句中都可以使用,其是预编译一条语句,之后给地址符处传入参数,可以一直执行该语句.

insert into emp(empno,ename,sal,deptno) values(&empno,&ename,&sal,&deptno);
输入 empno 的值: 1002
输入 ename 的值: Mary
输入 sal 的值: 2000
输入 deptno 的值: 30
原值 1: insert into emp(empno,ename,sal,deptno) values(&empno,&ename,&sal,&deptno)
新值 1: insert into emp(empno,ename,sal,deptno) values(1002,Mary,2000,30)
select empno,ename,sal,&t from emp;
输入 t 的值: job
原值 1: select empno,ename,sal,&t
新值 1: select empno,ename,sal,job

 


数据处理:
  SQL 的类型
    1. DML(data manipulation Language 数据操作语言): insert update delete select
    2. DDL(Data Definition Language 数据定义语言): create table,alter table,drop table,truncate table
                      create/drop view,sequence(序列),index,synonym(同义词)
    3. DCL(Data Control Language 数据控制语言): grant(授权) revoke(撤销权限)
                grant create view to scott


  insert:
    插入 insert

insert into emp(empno,ename,sal,deptno) values(1001,Tom,3000,10);

    批处理

    创建一张和emp相同的表

 table emp10 as select * from emp where 1=2;

    一次性将emp中,所有10号部门的员工插入到emp10中(拷贝)

insert into emp10 select * from emp where deptno=10;

      (海量拷贝数据
        1. 数据泵(datapump) ---> plsql
        2. SQL*Loader
        3. (数据仓库)外部表
        4. 可传输的表空间)

  update:
    

update emp set enamel=Tomas where empno = 2;
update emp set enamel=Tomas;
(update中也可以使用子查询语句)

  delete:

delete from emp where empno = 1;
delete emp ;(删除所有)
(delete中也可以使用子查询语句)

  delete和truncate的区别:
    1. delete逐条删除;truncate先摧毁表,再重建
    2.(根本)delete是DML,truncate是DDL
        (可以回滚) (不可以回滚)
    3. delete不会释放空间 truncate会
    4. delete可以闪回 truncate不可以
      (flashback)
    5. delete会产生碎片;truncate不会
      整理碎片: alter table emp move;(或者导入和到处 exp/expdp imp/impdp )

与MYSQL不同,ORACLE中delete效率更高.(undo数据(还原数据))

Oracle DML