当前位置:  数据库>oracle

Oracle %type和%rowtype小实例

    来源: 互联网  发布时间:2017-04-02

    本文导语: //%type   //如果声明的变量是直接映射到数据库的某一列上,那么就可以使用%type关键字将变量   //锚定到这个列上。这样做有什么好处呢?   //比如:   //declare v_ename scott.emp.ename%type;   //当数据类型发生变化时,此方法显得...

//%type  
//如果声明的变量是直接映射到数据库的某一列上,那么就可以使用%type关键字将变量  
//锚定到这个列上。这样做有什么好处呢?  
//比如:  
//declare v_ename scott.emp.ename%type;  
//当数据类型发生变化时,此方法显得非常灵活。  
//如果更改了列的长度,那么锚定到该列上的所有变量都会自动更改其长度;  
//假设我们将v_ename定义为varchar2(10),那么当emp表中的ename列发生变化时,  
//我们得手动将v_enam更改为emp.ename相同的数据长度;  
//当我们使用锚定类型后,变量就会自动进行调整。  
//%rowtype  
//%rowtype与%type相似;不过它将变量锚定到表的所有列,而不是锚定到某一列;  
//更多关于%rowtype与%type,  
//请参考:http://blog.csdn.net/BOBO12082119/archive/2010/12/02/6051367.aspx  
//下面是一个实例:  
create table dept(  
       deptno varchar2(5),  
       dname varchar2(20),  
       loc varchar2(20)  
       );  
create or replace procedure pro_insert(  
       deptno_in in dept.deptno%type,  
       dname_in in dept.dname%type,  
       loc_in in dept.loc%type  
       )  
as 
  v_dept dept%rowtype;  
begin  
     begin  
          insert into dept  
          select deptno_in,dname_in,loc_in  
          from dual;  
          commit;  
          dbms_output.put_line('inserting successed');  
          exception  
          when others then  
               rollback;  
     end;  
     begin  
          select deptno_in,dname_in,loc_in  
          into v_dept from dual;  
          dbms_output.put_line(  
          'The data having been inserted.'||  
          'deptno:'||v_dept.deptno||  
          ',dname:'||v_dept.dname||  
          ',loc:'||v_dept.loc  
          );  
     end;  
end pro_insert;  
//  
//上面的过程中,使用到了嵌套块;  
//所谓嵌套块就是块中包含其他子块;  
//嵌套块允许出现在代码块的异常处理部分和执行部分,  
//但是不允许出现在声明中。  
//  
SQL> set serveroutput on;  
SQL> exec pro_insert('111','财务部','福州');  
inserting successed  
The data having been inserted.deptno:111,dname:财务部,loc:福州  
PL/SQL procedure successfully completed  
//  
//从这里看出来,%rowtype定义的变量作用有点相似游标,  
//但是我们不能将%rowtype定义的变量当做游标来使用,  
//否则我们将会得到下面的错误:  
//ORA-01422: exact fetch returns more than requested number of rows  
declare v_dept dept%rowtype;  
begin  
     select deptno,dname,loc  
     into v_dept  
     from dept;  
     dbms_output.put_line(  
          'The data having been inserted.'||  
          'deptno:'||v_dept.deptno||  
          ',dname:'||v_dept.dname||  
          ',loc:'||v_dept.loc  
          );  
end;  
//  
//下面我们用游标来实现上面的操作,具体看下面的匿名块:  
declare  
       cursor cv_dept is 
       select *  
       from dept;  
begin  
     //变量v_dept不必我们显示声明  
     //for循环会为我们隐式的打开和关闭游标,不必我们现实的打开和关闭游标  
     for v_dept in cv_dept loop  
     dbms_output.put_line(  
          'deptno:'||v_dept.deptno||  
          ',dname:'||v_dept.dname||  
          ',loc:'||v_dept.loc  
          );  
      end loop;  
end;  
//  
deptno:111,dname:财务部,loc:福州  
deptno:120,dname:销售部,loc:大连  
deptno:130,dname:科研部,loc:北京  
PL/SQL procedure successfully completed 


































































































    
 
 

您可能感兴趣的文章:

  • Linux上建立第二个ORACLE实例分析
  • Linux操作系统下Oracle数据库多实例启动方式及修改内存
  • oracle的存储过程实例讲解
  • linux redhat5.6安装oracle11g在自动创建实例时停住不动,有图
  • oracle分页存储过程 oracle存储过程实例
  • C#连接Oracle数据库的实例方法
  • Oracle数据库实例两则
  • Oracle 删除归档日志实例
  • Oracle 10g for solaris准备工作和实例的删除
  • Oracle 11G 无法连接到数据库实例故障排除
  • Linux下设置Oracle 10g 服务以及实例自动启动
  • oracle group by语句实例测试
  • Oracle数据库异构服务原理及实例说明
  • Linux下删除Oracle实例
  • 与Oracle RAC相关的连接配置写法实例
  • Oracle监听器Server端与Client端配置实例
  • Oracle中使用触发器(trigger)和序列(sequence)模拟实现自增列实例
  • oracle删除已存在的表的实例
  • Aix 5.3下自动备份Oracle多个实例
  • Oracle数据库安全性管理基本措施实例解析
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Oracle 12c发布简单介绍及官方下载地址
  • 在linux下安装oracle,如何设置让oracle自动启动!也就是让oracle那个服务自动启动,不是手动的
  • oracle 11g最新版官方下载地址
  • 请问su oracle 和su - oracle有什么不同?
  • Oracle 数据库(oracle Database)Select 多表关联查询方式
  • 虚拟机装Oracle R12与Oracle10g
  • Oracle数据库(Oracle Database)体系结构及基本组成介绍
  • Oracle 数据库开发工具 Oracle SQL Developer
  • 如何设置让Oracle SQL Developer显示的时间包含时分秒
  • Oracle EBS R12 支持 Oracle Database 11g
  • Oracle 10g和Oracle 11g网格技术介绍
  • SCO unix下安装oracle,但没有光盘,请大家推荐一个oracle下载站点(unix版本的)。谢谢!!!!
  • oracle中如何把表中具有相同值列的多行数据合并成一行
  • 请问大家用oracle数据库, 用import oracle.*;下的东西么? 还是用标准库?
  • Oracle 数据库(oracle Database)性能调优技术详解
  • Linux /$ORACLE_HOME $ORACLE_HOME
  • ORACLE日期相关操作
  • Linux系统下Oracle的启动与Oracle监听的启动
  • ORACLE数据库常用字段数据类型介绍
  • 请问在solaris下安装ORACLE,用root用户和用oracle用户安装有什么区别么?
  • Oracle 12c的九大最新技术特性介绍
  • 网间Oracle的连接,远程连接Oracle服务器??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3