当前位置:主页 > 数据库 > Oracle >

Oracle中PL/SQL复合数据类型

时间:2022-12-13 09:29:46 | 栏目:Oracle | 点击:

一、PL/SQL记录:一条记录

可简化单行多列的数据的处理。当使用pl/sql记录时,应用开发人员即可以自定义记录类型和记录变量,也可以使用%rowtype属性直接定义记录变量。

1、当使用自定义的pl/sql记录时,需要分别定义pl/sql记录类型和记录变量。

declare 
type emp_record_type is record(
      name emp.ename%type,salary emp.sal%type
      );
            emp_record emp_record_type;
begin
select ename,sal into emp_record from emp where empno=&no;
dbms_output.put_line('雇员名:'||emp_record.name);
dbms_output.put_line('雇员工资:'||emp_record.salary);
end;

2、使用%rowtype 属性定义记录变量

declare 
emp_record emp%rowtype;
begin 
select * into emp_record from emp where empno=&no;
dbms_output.put_line('姓名: '||emp_record.ename);
dbms_output.put_line('工资: '||emp_record.sal);
end;

二、PL/SQL表:一列数据

用于处理单列多行数据。类似于一维数组。PL/SQL表的元素个数没有限制,且下表可为负数。

语法如下:

type 表类型  is table of  类型 
 index by binary_integer; 
表变量名  表类型;

index by binary_integer 子句代表以符号整数为索引,访问表类型变量中的数据方法就是“表变量名(索引符号整数)”。可以不按顺序赋值,但必须先赋值后使用。

1、使用PL/SQL表处理单列单行数据

declare 
type ename_table_type is table of emp.ename%type
index by binary_integer;
ename_table ename_table_type;
begin
select ename into ename_table(1) from emp where empno=&eno;
dbms_output.put_line('雇员名: '||ename_table(1));
end;

2、使用PL/SQL表处理单列多行数据

declare
type ename_table_type is table of emp.ename%type
index by binary_integer;
ename_table ename_table_type;
begin 
select ename bulk collect into ename_table from emp
where deptno=&dno;
for i in 1..ename_table.count loop
dbms_output.put_line('雇员名: '||ename_table(i));
end loop;
end;

三、PL/SQL记录表:多列多行表

用于处理多行多列数据。类似于多维数组。

定义记录表类型的语法如下:

TYPE table_name IS TABLE OF element_type [NOT NULL] 
INDEX BY [BINARY_INTEGER | PLS_INTEGER | VARRAY2];

记录表中的方法:

例1:

declare 
type emp_table_type is table of emp%rowtype
index by binary_integer;
emp_table emp_table_type;
begin
select * bulk collect into emp_table from emp where deptno=&dno;
for i in 1..emp_table.count loop
dbms_output.put_line('雇员名: '||emp_table(i).ename||',工资: '||emp_table(i).sal);
end loop;
end;

按一维数组使用表:

DECLARE
--定义记录表数据类型
   TYPE reg_table_type IS TABLE OF varchar2(25)
   INDEX BY BINARY_INTEGER;
--声明记录表数据类型的变量
   v_reg_table REG_TABLE_TYPE;
    
BEGIN
   v_reg_table(1) := 'Europe';
   v_reg_table(2) := 'Americas';
   v_reg_table(3) := 'Asia';
   v_reg_table(4) := 'Middle East and Africa';
   v_reg_table(5) := 'NULL';
 
   DBMS_OUTPUT.PUT_LINE('地区名称:'||v_reg_table (1)||'、'       ||v_reg_table (2)||'、'      ||v_reg_table (3)||'、'      ||v_reg_table (4));
   DBMS_OUTPUT.PUT_LINE('第5个成员的值:'||v_reg_table(5));
END;

四、varry数据类型:数组

具有相同数据类型的一组成员的集合,每个成员都有一个唯一的下标。

定义VARRAY数据类型的语法如下:

TYPE VARRAY_NAME IS VARRAY(SIZE) OF ELEMENT_TYPE [NOT NULL];

VARRAY的使用举例:

DECLARE
--定义一个最多保存5个VARCHAR(25)数据类型成员的VARRAY数据类型
   TYPE reg_varray_type IS VARRAY(5) OF VARCHAR(25);
--声明一个该VARRAY数据类型的变量
   v_reg_varray REG_VARRAY_TYPE;

BEGIN
--用构造函数语法赋予初值
   v_reg_varray := reg_varray_type
         ('中国', '美国', '英国', '日本', '法国');

   DBMS_OUTPUT.PUT_LINE('地区名称:'||v_reg_varray(1)||'、'
                                    ||v_reg_varray(2)||'、'
                                    ||v_reg_varray(3)||'、'
                                    ||v_reg_varray(4));
   DBMS_OUTPUT.PUT_LINE('赋予初值NULL的第5个成员的值:'||v_reg_varray(5));
--用构造函数语法赋予初值后就可以这样对成员赋值
   v_reg_varray(5) := '法国';
   DBMS_OUTPUT.PUT_LINE('第5个成员的值:'||v_reg_varray(5));
END;

您可能感兴趣的文章:

相关文章