`
javawangli
  • 浏览: 221663 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Oracle 中使用的%TYPE和%ROWTYPE类型的变量和复合变量

阅读更多

 

Oracle 中使用的%TYPE和%ROWTYPE类型的变量和复合变量

 

   在定义变量时处理可以使用oracle规定的数据类型外,还可以使用%TYPE%ROWTYPE来定义变量.

     %TYPE类型的变量是专门为存储在数据列中检索到的值而创建的.对于使用%TYPE创建的变量,其数据类型由系统根据检索的数据列的数据类型决定.

     %ROWTYPE类型的变量,它可以一次存储从数据库检索的一行数据。

当你不知道表中的数据类型是什么时候?那你就考虑%TYPE来解决此问题。

 

%TYPE

SQL> declare

  2     empno emp.empno%TYPE; //声明的时候一定要加上表的中列

  3     ename emp.ename%TYPE;

  4     job   emp.job%TYPE;

  5  begin

  6     select empno,ename,job into empno,ename,job from emp where empno='7369';

  7     dbms_output.put_line(empno||'/'||ename||'/'||job);

  8  end;

  9  /

 

7369/SMITH/CLERK

emp.empno%TYPE; 解析:首先它到emp表中去查找empno列 %TYPE返回其数据的数据类型。

 

%TYPE的好处:

1、 可移植性高(当我们对表的数据类型发生改变时,用户不必考虑定义变量类型)

2、 用户不必查看数据类型就可以定义变量能够存储检索的数据。

 

%ROWTYPE

   SQL> declare

  2      row_data emp%ROWTYPE;

  3  begin

  4     select * into row_data from emp where empno='7369';

  5     dbms_output.put_line(row_data.empno||'/'||row_data.ename||'/'||row_data.job);

  6  end;

  7  /

注意:如果定义了%rowtype类型的变量,该变量的结构与定义表的结构完全相同,查询时必须使用*或者列举全部的字段信息。

 

 

复合变量

    

   复合变量可以将不同的数据类型的多个值存储在一个单元中.由于复合数据类型可以有用户根据需要定义其结构,所以复合数据类型也称为自定义数据类型。

  PL/SQL提供了两种类型的复合数据类型:

1、 记录类型

在记录类型中可以存储多个标量值,与数据库中的行相似

2、 记录表类型

允许用户在程序代码中使用,以便存储多个行的数据。它只在程序运行期间有效。类似于程序代码中集合|数组。

 

记录类型:

   必须使用TYPE语句定义记录类型的语法声明如下:

TYPE record_name is record(

Field_name data_type[not null, :=default value]

………

)

     

%Rowtype不同之处是

   1%rowtype查询的是全部数据

   2、记录类型必须使用type语法格式声明

//案例

SQL> declare

  2     type empinfo is record(  //声明一个记录类型

  3       empno number(4),

  4       ename varchar2(10),

  5       job  varchar2(9)

  6     );

  7  

  8   emp_data  empinfo; //声明一个记录类型的变量

  9  begin

 10    select empno,ename,job into emp_data from emp where empno=7369; //查询的结果赋值给定义的变量

 11    dbms_output.put_line(emp_data.empno||'/'||emp_data.ename||'/'||emp_data.job);

 12  end;

 13  /

 

 

记录表类型

   它可以处理多个记录或多个行记录。

1、 为什么使用记录表类型呢?

 因为我们查询的数据的往往需要返回多行记录,所以需要记录表类型。

 

2、 定义记录表类型

TYPE table_name is table of data_type[not null]

     Index by binary_integer;//主键的索引

declare

   type table_emp is table of emp%rowtype //创建一个表 此表的类型与emp表的类型一致

   index by binary_integer;

  

   type table_text is table of varchar2(20) //创建一个表 此表具有一个varchar2列的简单表

   index by binary_integer;

   

   empt  table_emp; //声明记录表类型的变量

   tabtext table_text;

begin

 

 

案例:

SQL> declare

  2     type table_emp is table of emp%rowtype

  3     index by binary_integer;

  4     empt table_emp;

  5  begin

  6     empt(1).ename:='wangyi';

  7     dbms_output.put_line(empt(1).ename);

  8  end;

  9  /

 

//返回总记录

SQL> declare

  2     type table_emp is table of emp%rowtype

  3     index by binary_integer;

  4     empt table_emp;

  5  begin

  6     dbms_output.put_line(empt.count);

  7  end;

  8  /

 

0  //没有记录

 

 

//删除的操作

  表名.Delete(记录数);

//检索记录变量

First:获取第一个的索引

Next:下一个的索引 但是必须有参数

Last:最后一个的索引

SQL> declare

  2     type table_emp is table of emp%rowtype

  3     index by binary_integer;

  4     empt table_emp;

  5     i number(2):=1;

  6  begin

  7      while i<10

  8      loop

  9        empt(i).ename:='wangyi';

 10        i:=i+1;

 11      end loop;

 12  

 13     dbms_output.put_line(empt.count);

 14  

 15     empt.delete(2);

 16  

 17     dbms_output.put_line(empt.count);

 18  

 19     dbms_output.put_line(empt.first);

 20     dbms_output.put_line(empt.next(2));

 21     dbms_output.put_line(empt.last);

 22  end;

 23  /

 

9

8

1

3

9

 

 

<!--EndFragment-->

0
0
分享到:
评论

相关推荐

    PL/SQL 基础.doc

    3) 表中的元素可以是复合类型; 4) KEY 没有必要是顺序的; 5) 当数据被插入表中的时候,表所需的空间就被分配了; 6. 变量的作用域和可见性 &lt;&lt;outer&gt;&gt; 1) 执行块里可以嵌入执行块; 2) 里层执行块的变量对外层不...

    oracle存储过程进阶

    介绍了oracle存储过程中常见的sql写法,游标(隐式,显式),触发器, CASE ... WHEN ...... ELSIF ...THEN...ELSE...END IF,记录类型变量定义和使用 ,%type定义变量,%rowtype定义变量,goto,异常。多且全

    oracle存储过程、游标、函数、PL/SQL块

    包含oracle存储过程的增、删、查、改 %type、%rowtype的使用 自定义函数 PL/SQL块

    亚信科技面试原题数据库

    平台管理维护-数据库平台编码 技术能力考试2级 课程名称 oracle数据库系统编程 课程号 MD02 考试...2、在创建需要存储客户资料表中的所有列值的记录变量时,将使用什么 A. %TYPE B. %ROWTYPE C. 列列表 D. %ROWCOUNT

    PLsql语法.md

    #### PLsql 是什么 - 是专用于Oracle服务器,在SQL基础之上,**添加了一些过程化控制语句,叫PLSQL** ...##### 何时使用%type,何时使用%rowtype? ### 条件判断 #### 基本语法 #### 小练习

    PLSQL编程03

    PL/SQL基础编程之(三)[自定义复合变量][%TYPE和%ROWTYPE的应用]

    Oracle8i_9i数据库基础

    §12.4.2 复合类型(记录和表) 238 §12.4.3 使用%ROWTYPE 240 §12.4.4 LOB类型 240 §12.4.5 用户定义的子类型 241 §12.4.6 数据类型的转换 243 §12.5 运算符和表达式(数据定义) 243 §12.5.1 关系运算符 243 ...

    Oracle 10g 开发与管理

    7.4 使用%TYPE和%ROWTYPE类型的变量 58 1.%Type 59 2.%RowType 59 7.5 复合变量 60 1.记录类型(“行”) 60 2.记录表类型(“表” ) 60 (1)使用的原因: 60 (2)定义记录表类型(联合数组) 60 7.6 条件判断...

    oracle学习资料

    §2.4.2 复合类型 9 §2.4.3 使用%ROWTYPE 11 §2.4.4 LOB类型* 11 §2.4.5 Bind 变量 11 §2.4.6 INDEX BY TABLES 12 §2.4.7 数据类型的转换* 13 §2.5 运算符和表达式(数据定义) 13 §2.5.1 关系运算符 13 §...

    plsql_oracle 编程

    §2.4.2 复合类型 9 §2.4.3 使用%ROWTYPE 11 §2.4.4 LOB类型* 11 §2.4.5 Bind 变量 11 §2.4.6 INDEX BY TABLES 12 §2.4.7 数据类型的转换* 13 §2.5 运算符和表达式(数据定义) 13 §2.5.1 关系运算符 13 §...

    plsql_oracle 8i 编程讲义

    §2.4.2 复合类型 9 §2.4.3 使用%ROWTYPE 11 §2.4.4 LOB类型* 11 §2.4.5 Bind 变量 11 §2.4.6 INDEX BY TABLES 12 §2.4.7 数据类型的转换* 13 §2.5 运算符和表达式(数据定义) 13 §2.5.1 关系运算符 13 §...

    oracle教案(doc)+SQL Reference 10g(chm).rar

    7.5.5 %type属性 114 7.5.6 %rowtype属性 114 7.5.7 SQL语句在PL/SQL中的运用 114 7.6 选择结构 114 7.6.1 格式1: IF_THEN_ELSE语句 114 7.6.2 格式2: IF_THEN_ELSE_IF语句 114 7.7 循环结构 114 7.8 异常处理(了解)...

    精通SQL 结构化查询语言详解

    17.4.3 %TYPE、%ROWTYPE定义记录变量  17.4.4 参数化游标  17.4.5 游标中的循环  17.4.6 游标变量 17.5 小结  第18章 事务控制与并发处理 18.1 SQL事务控制  18.1.1 事务控制的引入  18.1.2 事务的...

    精通SQL--结构化查询语言详解

    17.4.3 %type、%rowtype定义记录变量 367 17.4.4 参数化游标 368 17.4.5 游标中的循环 369 17.4.6 游标变量 371 17.5 小结 372 第18章 事务控制与并发处理 373 18.1 sql事务控制 373 18.1.1 事务控制的引入 ...

    C# 访问Oracle示例+PL/SQL+存储过程+触发器 完整示例 测试可用 易懂

    pname变量的类型与products.name列的类型一样 declare pid constant products.id%type:=1; --定义常量,初值1 pname products.name%type; pdate products.adddate%type; begin --pid:=1; select name,adddate ...

    SQL21日自学通

    在选择语句中使用更新和删除275 在执行前测试选择语句276 嵌入型SQL277 静态SQL 与动态SQL277 使用SQL 来编程279 总结280 问与答280 校练场280 练习281 第14 天动态使用SQL 282 目标282 快速入门282 ODBC 282 ...

    数据库基础

    §12.4.2 复合类型(记录和表) 238 §12.4.3 使用%ROWTYPE 240 §12.4.4 LOB类型 240 §12.4.5 用户定义的子类型 241 §12.4.6 数据类型的转换 243 §12.5 运算符和表达式(数据定义) 243 §12.5.1 关系运算符 243 ...

    精髓Oralcle讲课笔记

    -- 首先,以超级管理员的身份登录oracle sqlplus sys/bjsxt as sysdba --然后,解除对scott用户的锁 alter user scott account unlock; --那么这个用户名就能使用了。 --(默认全局数据库名orcl) 1、...

    sql总结.doc

    (变量的赋值例如:(a name%type)(a varchar(2))) Begin Sql语句以及判断条件 End 名称; (3)存储过程的作用 1.存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而 一般SQL 语句每执行一次就...

    21天学习SQL V1.0

    CEIL 和FLOOR ............................................................................................... 73 COS COSH SIN SINH TAN TANH........................................................ 73 ...

Global site tag (gtag.js) - Google Analytics