`

%TYPE和%ROWTYPE类型的变量

阅读更多
写道
在定义变量时处理可以使用oracle规定的数据类型外,还可以使用%TYPE和%ROWTYPE来定义变量.
%TYPE类型的变量是专门为存储在数据列中检索到的值而创建的.对于使用%TYPE创建的变量,其数据类型由系统根据检索的数据列的数据类型决定.
%ROWTYPE类型的变量,它可以一次存储从数据库检索的一行数据。

当你不知道表中的数据类型是什么时候?那你就考虑%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 /
 
分享到:
评论

相关推荐

    Oracle PL/SQL中如何使用%TYPE和%ROWTYPE

    其中,%TYPE 和 %ROWTYPE 是两个非常重要的概念,它们可以帮助开发者更方便地声明变量,从而提高编程效率和代码质量。 一、使用 %TYPE 在 PL/SQL 中,变量可以用来存储在数据库表中的数据。在这种情况下,变量应该...

    PL/SQL 基础.doc

    1) 扩展变量和类型; 2) 扩展控制结构; 3) 扩展过程与函数; 4) 扩展对象类型与方法 ---- 第二章 PL/SQL程序结构 ---- 1. PL/SQL块 1) 申明部分, DECLARE (如果语句不需要声明任何变量,可以不写); 2) ...

    PLSQL编程03

    本节我们将深入探讨PL/SQL中的自定义复合变量,以及`%TYPE`和`%ROWTYPE`这两个关键特性在编程中的应用。 首先,自定义复合变量允许我们创建包含多个数据类型的结构化变量,这在处理复杂数据模型时非常有用。例如,...

    Oracle记录类型变量[归类].pdf

    在Oracle数据库中,记录类型变量(Record Type Variables)是一种非常有用的特性,允许我们创建自定义的数据结构来存储和操作多列数据。以下是对记录类型变量的详细解释: 1. **Oracle记录类型变量**:记录类型变量...

    PLSQL培训文档.ppt

    %TYPE 可以将变量类型定义为与数据库中表的字段相同的类型,当字段的数据类型变化时则变量的类型也相应的变化。%ROWTYPE 可以将变量类型定义为与具有相同类型的数据库行。 5. 内置 SQL 函数 PLSQL 提供了多种内置 ...

    oracle实验7-plsql编程基础.doc

    本实验旨在帮助学生掌握PL/SQL的基本概念和语法,包括变量的使用、%TYPE和%ROWTYPE特性,以及记录变量的操作。以下是对实验内容的详细解释: 一、PL/SQL程序块结构 PL/SQL程序块由声明部分(DECLARE)、执行部分...

    Oracle变量定义详解.docx

    Oracle 中还有些特殊的变量类型,例如 boolean、type、rowtype、record 等。这些类型只能在 PL/SQL 脚本中使用,不能用于建表。 boolean 类型用于表达真或假,可以为 boolean 类型变量赋值 true 或 false。主要用于...

    PLSQL简介.pdf

    这种方式的优势在于,不需要为表中的每一列单独定义临时变量,也不需要预先知道表中列的确切数量和类型。当表结构发生变化时,记录变量会自动适应这些变化。 例如,假设有一个名为`employees`的表,包含`emp_id`, `...

    Oracle PL SQL经典练习题1.docx

    Oracle PL/SQL经典练习题 ...这些练习题涵盖了PL/SQL程序块的多方面知识点,包括变量声明、select into语句、dbms_output.put_line语句、异常处理、%type 属性、%rowtype 属性、update语句、if-elsif语句等。

    Oracle变量概念详解.pdf

    type 类型是一种特殊的变量类型,用于引用表中的字段类型。例如: ```sql declare v_empno emp.empno%type; v_ename emp.ename%type; begin select ename into v_ename from emp where empno = v_empno; dbms_...

    oracle PL-SQL 学习笔记1

    以上内容涵盖了Oracle PL-SQL中的一些基础且重要的知识点,包括变量声明与赋值、输出设置、表操作、使用`%TYPE`和`%ROWTYPE`、记录和集合的使用。通过掌握这些核心概念,开发者可以在Oracle数据库环境中更高效地编写...

    Oracle变量定义详解.pdf

    Oracle 变量定义详解 Oracle 变量定义是指在 PL/SQL 脚本中定义和使用变量的方法。...本文还提供了多个变量定义和使用的示例,包括变量的定义、赋值、打印等操作,并解释了变量类型的特点和限制。

    plsql基础教程.pdf

    PL/SQL 中还可以使用 %TYPE 将变量类型定义为与数据库中表的字段相同的类型。使用 %ROWTYPE 可以将变量类型定义为与具有相同类型的数据库行。 PL/SQL 的优点包括软件生产效率高、系统性能良好、系统资源利用率高等...

    oracle游标变量和数据包

    接下来,可以基于上述定义的类型来定义一个 Refcursor 变量,用于装载记录集。 - 示例代码:`tab myclass;` #### 2. 给 Refcursor 赋值 要将记录集装载到 Refcursor 变量中,可以使用 `open` 语句结合 `select ...

    oracle文档

    包是PL/SQL中的另一个重要特性,用于组织和封装相关的数据类型、常量、变量、游标、过程和函数等。包可以提高代码的可读性和可维护性,并有助于实现模块化编程。 1. **包规范**:定义包中可见的对象。 2. **包主体*...

    SQLBoy 存储过程之历险记

    文章目录:1、概述:2、存储过程概念及语法格式:3、数据类型与定义变量和常量4、特殊数据类型之%TYPE和%ROWTYPE5、在存储过程中%TYPE和%ROWTYPE常用来在PL/SQL中定义变量:6、 循环语句Loop 使用7、PL/SQL 游标 概念...

    数据库编程2PPT学习教案.pptx

    5. **%TYPE和%ROWTYPE属性**:`%TYPE`用于引用数据库列的数据类型,确保变量类型与数据库列保持一致。`%ROWTYPE`则创建一个与数据库表行结构相匹配的记录类型。这样,即使列的类型发生变化,PL/SQL变量也会自动更新...

    Oracle脚本变量使用示例

    type emp_array is table of emp%rowtype index by binary_integer; emp_list emp_array; BEGIN ... END; ``` 这样,你可以像操作数组一样处理多个员工记录。 5. **变量作用域** 在PL/SQL块中,变量的作用域仅...

Global site tag (gtag.js) - Google Analytics