Oracle dml和ddl扩展

1.语句回顾
1)用insert语句添加新行到表中

  insert into table[(column [,column...])]
  values (value[,value...]);
  
  用此语法一次只能插入一行:
  例:
     insert into dept(deptno,dname,loc)    
     values (70,'public relations','shenyang');

2)用update语句修改存在的行
  
  update table
  set    column=value[,column=value,...]
  [where condition];
  
  -一次可以修改多行
  -如果使用了where子句,可以指定一行或多行被修改
  例:
     update emp
     set    deptno=30
     where  empno=7369;   

2.多表insert语句
1)insert...select语句能够作为单个的dml语句的一部分用于插入行到多表中
2)多表insert语句能够被用在数据仓库系统中从一个或多个操作源转移数据到一组目的表中
3)oracle9i引入下面的多表插入语句的类型:
  -无条件insert
  -条件all insert
  -条件first insert
  -枢轴式(pivoting)insert

3.无条件insert语句
  
1)语法
  insert all
         [insert_into_value][values_clause]
  (subquery)

2)例子
  -从emp表中选择empno大于7698雇员的empno,hiredate,sal和mgr值
  -用多表insert插入这些值到sal_history(empno,hiredate,sal)和mgr_history(empno,mgr,sal)表中 

  insert all
    into sal_history values(empno,hiredate,sal)
    into mgr_history values(empno,mgr,sal)
  select empno,hiredate,sal,mgr
  from   emp
  where  empno>7698;

4.条件insert语句
1)语法
  insert all
       [when condition then]
             [insert_into_clause][values_clause]
  (subquery)

2)例子
  -从emp表中选择empno大于7698雇员的empno,hiredate,sal和mgr值
  -如果sal大于$2500,用一个条件多表insert语句插入这些值到sal_history表中
  -如果mgr大于7782,用一个多表insert语句插入这些值到mgr_history表中

  insert all
    when sal>2500 then
      into sal_history values(empno,hiredate,sal)
    when mgr>7782 then
      into mgr_history values(empno,mgr,sal)
  select empno,hiredate,sal,mgr
  from   emp
  where  empno>7698;
    
5.条件first insert
1)语法
  
  insert first
      [when condition then]
               [insert_into_clause][values_clause]
      [else]
               [insert_into_clause][values_clause]
  (subquery)

2)例子
  -从emp表中选择empno大于7698雇员的empno,hiredate,sal和mgr值
  -如果sal大于$2500,则用一个条件first多表insert语句插入这些值到sal_history表中
  -如果第一个when子句的值为true,则该行后面的when子句被跳过
  -如果mgr大于7782,用一个条件first多表insert语句插入这些值到mgr_history表中

  insert first
    when sal>2500 then
      into sal_history values(empno,hiredate,sal)
    when mgr>7782 then
      into mgr_history values(empno,mgr,sal)
  select empno,hiredate,sal,mgr
  from   emp
  where  empno>7698;

6.枢轴式(pivoting) insert

1)支持从非关系数据库表中接受一组销售记录
  sales_source_data的格式如下:
    empno,week_id,sales_mon,sales_tue,sales_wed,sales_thur,sales_fri
2)你可能想要以一种典型的相关格式存储这些记录到sales_info(empno,week,sales)表中
3)使用pivoting insert,从非关系数据库表转换销售记录集到关系格式

  insert all
    into sales_info values(empno,week_id,sales_mon)
    into sales_info values(empno,week_id,sales_tue)
    into sales_info values(empno,week_id,sales_wed)
    into sales_info values(empno,week_id,sales_thur)
    into sales_info values(empno,week_id,sales_fri)
  select empno,week_id,sales_mon,sales_tue,sales_wed,sales_thur,sales_fri
  from   sales_source_data;
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值