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
相关推荐
Oracle PL/SQL 中的 %TYPE 和 %ROWTYPE 应用详解 Oracle PL/SQL 是一种强大的编程...%TYPE 和 %ROWTYPE 是 Oracle PL/SQL 中两种非常重要的概念,它们可以帮助开发者更方便地声明变量,从而提高编程效率和代码质量。
了解如何在Oracle脚本中使用变量是提升效率的关键。本篇将深入讲解Oracle脚本中的变量使用,通过实例来帮助你更好地理解和应用。 1. **变量声明** 在Oracle中,变量在PL/SQL块内进行声明。基本格式如下: ```sql ...
Oracle 变量定义详解 Oracle 变量定义是指在 PL/SQL 中定义变量的过程。...通过本文的学习,我们了解了 Oracle 变量定义的基本概念和语法,了解了各种变量类型的特点和使用方法,以及在 PL/SQL 脚本中的应用。
- **变量的作用域**:在`DECLARE`部分定义的变量只能在其所在的`BEGIN...END`块中使用。 - **复合变量的使用**:复合变量如`%ROWTYPE`和`RECORD`能够有效地存储多个相关的值,适用于复杂的查询场景。 - **Oracle与...
变量可以在 PL/SQL 脚本中使用,例如: ```sql declare v1 char; v2 varchar2(10); v3 number; begin v1 := 'ab'; v2 := 'abcd'; v3 := 100; dbms_output.put_line(v1); dbms_output.put_line(v2); dbms_...
3) 表中的元素可以是复合类型; 4) KEY 没有必要是顺序的; 5) 当数据被插入表中的时候,表所需的空间就被分配了; 6. 变量的作用域和可见性 <<outer>> 1) 执行块里可以嵌入执行块; 2) 里层执行块的变量对外层不...
在Oracle数据库中,记录类型变量(Record Type Variables)是一种非常有用的特性,允许我们创建自定义的数据结构来存储和操作多列数据。以下是对记录类型变量的详细解释: 1. **Oracle记录类型变量**:记录类型变量...
另一类是只能在 PL/SQL 脚本中使用的数据类型,如 boolean、type、rowtype、record 等。 在 Oracle 中,变量可以分为标量变量和复合变量。标量变量只能保存一个值,如 char、type 等;复合变量可以保存多个值,如 ...
总结来说,理解并熟练运用PL/SQL中的自定义复合变量、`%TYPE`和`%ROWTYPE`是提升Oracle数据库编程能力的关键步骤。通过它们,我们可以更加高效地管理数据,编写出更加灵活和健壮的PL/SQL程序。在实际项目中,这些...
这个程序块的关键是使用%type 属性声明变量,然后使用select into语句将数据从emp表中fetch 到变量中,最后使用dbms_output.put_line语句将结果输出。 4. 编写一个程序块,利用%rowtype 属性,接受一个雇员号,从...
ORACLE 数组使用方法 Oracle 数组是一种复杂的数据类型,可以存储多个元素,数组可以分为固定数组和可...Oracle 数组是一种功能强大且灵活的数据类型,可以用来存储大量的数据,并且可以通过索引来访问数组中的元素。
本实验旨在帮助学生掌握PL/SQL的基本概念和语法,包括变量的使用、%TYPE和%ROWTYPE特性,以及记录变量的操作。以下是对实验内容的详细解释: 一、PL/SQL程序块结构 PL/SQL程序块由声明部分(DECLARE)、执行部分...
根据提供的文件内容,本文将详细解释Oracle中的游标变量与程序包的概念及其应用。 ### 一、游标变量 #### 1. Refcursor 类型创建 在 Oracle 的 PL/SQL 环境中,Refcursor 是一种特殊的游标类型,它可以作为函数的...
通过本文档的学习,您应该能够理解如何在Oracle PL/SQL中使用`SELECT INTO`语句、显式游标、隐式游标以及各种DML语句。此外,还介绍了如何利用`%TYPE`属性简化代码编写和维护。熟练掌握这些技术将大大提高您在Oracle...
Oracle 实验四的目的是掌握 PL/SQL 语句块、PL/SQL 的基本语法、PL/SQL 的控制结构,掌握 PL/SQL 块中使用复合数据类型和游标的方法,掌握 PL/SQL 异常处理技术,掌握存储过程、存储函数、触发器高级数据库对象的...
记录变量可以使用 TYPE 命令和%ROWTYPE 定义,例如:DECLARE R_emp EMP%ROWTYPE;其中,R_emp 是记录变量名,EMP 是表名。 在使用游标时,需要注意关闭游标,以免资源泄露。关闭游标需要使用 CLOSE 语句,语法为:...
%TYPE 可以将变量类型定义为与数据库中表的字段相同的类型,当字段的数据类型变化时则变量的类型也相应的变化。%ROWTYPE 可以将变量类型定义为与具有相同类型的数据库行。 5. 内置 SQL 函数 PLSQL 提供了多种内置 ...
此外,我们还探讨了%TYPE和%ROWTYPE属性的用法,这有助于更灵活地处理Oracle数据库中的数据类型。 总之,熟练掌握Oracle游标及其相关属性的使用对于提高数据库应用程序的效率至关重要。希望本文能够为正在学习...
以上内容涵盖了Oracle PL-SQL中的一些基础且重要的知识点,包括变量声明与赋值、输出设置、表操作、使用`%TYPE`和`%ROWTYPE`、记录和集合的使用。通过掌握这些核心概念,开发者可以在Oracle数据库环境中更高效地编写...