PL/SQL复合变量

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

在PL/SQL中,使用%TYPE声明的变量类型与数据表中字段的数据类型相同,当数据表中字段数据类型修改后,PL/SQL程序中相应变量的类型也自动随之改变。

如EMP表中有一个ENAME字段,其数据类型为VARCHAR2(30),声明变量v_name用来存放ENAME字段的数据,声明如下:

v_name emp.ename%TYPE;

则变量v_name的数据类型始终与ENAME字段的类型保持一致,即VARCHAR2(30),当ENAME字段的数据类型改为VARCHAR2(50)时,v_name变量的数据类型也自动修改为VARCHAR2(50)。

DECLARE

v_name emp.ename%TYPE;

BEGIN

SELECT ename INTO v_name FROM emp

WHERE empno=7788;

DBMS_OUTPUT.PUT_LINE(v_name);

END;

/

PL/SQL提供了%ROWTYPE来存储一行数据。例如,要定义DEPT表中的一行记录,并且数据类型和每列类型一致可以使用%ROWTYPE,声明如下:

dept_record dept%ROWTYPE;

下面使用%ROWTYPE类型的变量存储DEPT表中的一行数据,示例如下:

DECLARE

v_dept dept%ROWTYPE;

BEGIN

SELECT * INTO v_dept FROM dept

WHERE deptno=30;

DBMS_OUTPUT.PUT_LINE(v_dept.deptno);

DBMS_OUTPUT.PUT_LINE(v_dept.dname);

DBMS_OUTPUT.PUT_LINE(v_dept.loc);

END;

/

记录类型与数据库中的行结构非常类似,使用记录类型定义的变量可以存储由多个列值组成的一行数据。当使用记录类型的变量时,首先需要定义记录的结构,然后定义记录类型的变量。定义记录类型时必须使用TYPE语句指出将在记录中包含的字段及其数据类型,语法如下:

DECLARE

TYPE emp_record_type IS RECORD(

name emp.ename%TYPE,

salary emp.sal%TYPE,

dno emp.deptno%TYPE);  --自定义变量类型emp_record_type

emp_record emp_record_type;  --定义emp_record_type类型的变量emp_record

BEGIN

SELECT ename,sal,deptno INTO emp_record

FROM emp WHERE empno=7788;  --查询ename,sal,deptno赋值给变量emp_record

DBMS_OUTPUT.PUT_LINE(emp_record.name);

END;

/

--------------------------------------------------

DECLARE

TYPE emp_record_type IS RECORD(

name emp.ename%TYPE,

salary emp.sal%TYPE,

dno emp.deptno%TYPE);  --自定义变量类型emp_record_type

emp_record emp_record_type;  --定义emp_record_type类型的变量emp_record

BEGIN

SELECT ename,sal INTO emp_record.name,epm_record.salary

FROM emp WHERE empno=7788;  --查询ename,sal,deptno赋值给变量emp_record

DBMS_OUTPUT.PUT_LINE(emp_record.name);

END;

/

时间: 2024-11-03 21:00:28

PL/SQL复合变量的相关文章

PL/SQL——编程——变量定义

1.变量标量类型(scalar)复合类型(composite)参照类型(reference)lob(large object) --定义一个变长字符串v_ename VARCHAR2(10)--定义一个小数,范围-9999.99~9999.99v_sal NUMBER(6,2)--定义一个小数,并给初始值5.4,:=是plsql的赋值符v_sal2 NUMBER(6,2):=5.4--定义一个日期类型v_hiredate date--定义一个布尔量,不能为空,初始值为falsev_valid B

PL/SQL的变量

PL/SQL的变量: 变量类型: 1.系统内置的常规简单变量类型: 比如大多数 数据库表的字段类型都可以作为变量类型: 2.用户自定义复杂变量类型: 比如记录类型: 3.引用类型:保存了一个指针值: 4.大对象类型( LOB):保存了一个指向大对象的地址: 语法:  identifier [CONSTANT] datatype [NOT NULL] [:= | DEFAULT expr]; 说明: 1.变量命名建议遵循通用规则,比如v_name 表示一个变量,c_name表示一个常量: 2.一般

PL/SQL编程—变量

SQL> declare 2 c_tax_rate number(3,2):=0.03; 3 v_name varchar2(20); 4 v_passwd varchar2(20); 5 v_sale number(7,2); 6 v_tax_sale number(7,2); 7 begin 8 select name,passwd,salary into v_name,v_passwd,v_sale from mytest where id=&inpt; 9 v_tax_sale:=v

Oracle PL/SQL复合数据类型

复合数据类型大致可以分为两类.一类是记录类型,适用于处理单行多列数据,有点类似于java中的VO:一类是集合类型,适用于处理单列多行的数据,类似java中的List,以下实验在11.2.0.1.0版本下做的. 1.记录类型 drop table test purge; create table test ( id number(2), name varchar2(60) ); insert into test values(1,'aaa'); insert into test values(2,

PL/SQL编程--变量声明及赋值

declare v_price number(10,2);--单价 v_usenum number;--水费字数 v_usenum2 number;--使用吨数 begin v_price:=2.45;--每吨单价 v_usenum := 10000000; v_usenum2 := round(v_usenum/1000,2); DBMS_OUTPUT.put_line('金额为:'||(v_price*v_usenum2)); end; 原文地址:https://www.cnblogs.co

Oracle PL/SQL编程之变量

注: 以下测试案例所用的表均来自与scott方案,使用前,请确保该用户解锁. 1.简介 和大多数编程语言一样,在编写PL/SQL程序时,可以定义常量和变量,在pl/sql程序中包括有: a.标量类型(Scalar) b.复合类型(Composite) c.参照类型(Refrence) d.lob(large object)类型 下面来一一介绍 2.标量(Scalar)类型  ---常用类型 在编写pl/sql语句时,如果需要用到变量,那么就需要在定义部分定义变量.pl/sql中定义变量个常量的语

PL/SQL 02 声明变量 declare

语法:identifier [CONSTANT] datatype [NOT NULL] [:= | DEFAULT expr] identifier:用于指定变量或常量的名称.CONSTANT:用于指定常量.当定义常量时,必须指定它的初始值,并且其数值不能变.datatype:用于指定变量或常量的数据类型.NOT NULL:用于强制初始化变量(不能为NULL).当指定 NOT NULL 选项时,必须要为变量提供数值.:= 用于为变量和常量指定初始值.DEFAULT:用于为常量和变量指定初始值.

二十四、oracle pl/sql 变量

一.变量介绍在编写pl/sql程序时,可以定义变量和常量:在pl/sql程序中包括有:1).标量类型(scalar)2).复合类型(composite) --用于操作单条记录3).参照类型(reference) --用于操作多条记录4).lob(large object) 二.标量(scalar)——常用类型1).在编写pl/sql块时,如果要使用变量,需在定义部分定义变量.pl/sql中定义变量和常量的语法如下:identifier [constant] datatype [not null]

PL/SQL基本结构---PLSQL复合类型---表类型变量table

表类型变量table 语法如下:      type 表类型  is table of  类型  index by binary_integer;      表变量名  表类型; 类型可以是前面的类型定义,index by binary_integer 子句代表以符号整数为索引,这样访问表类型变量中的数据方法就是“表变量名(索引符号整数)”.table类型,相当于java中的Map容器,就是一个可变长的数组,key(符号整数索引)必须是整数,可以是负数,value(类型)可以是标量,也可以是re