PL/SQL复合类型 Oracle存储过程返回结果集

[color=gray]PL/SQL是 Procedure Language & Structured Query Language(过程化SQL语言) 的缩写
PL/SQL是对SQL语言存储过程语言的扩展[/color]

记录类型 :记录类型是把逻辑相关的数据作为一个单元存储起来

定义记录类型语法如下:
TYPE record_type IS RECORD(
Field1 type1 [NOT NULL] [:= exp1 ],
Field2 type2 [NOT NULL] [:= exp2 ],
. . . . . .
Fieldn typen [NOT NULL] [:= expn ] ) ;

Example:
DECLARE
-- 用 %TYPE 类型定义与表相配的字段
TYPE t_Record IS RECORD(
T_no emp.empno%TYPE,
T_name emp.ename%TYPE,
T_sal emp.sal%TYPE );
-- 声明接收数据的变量
v_emp t_Record;

记录类型:
DECLARE
id o_user.userid%TYPE := &no;
userSelected o_user%ROWTYPE;
BEGIN
SELECT * INTO userSelected FROM o_user WHERE userid = id;
DBMS_OUTPUT.PUT_LINE('姓名:' || userSelected.username || '邮箱:' ||
userSelected.email);
END;

PL/SQL表:
PL/SQL表或者称为索引表(index-table),是可以在PL/SQL 程序中引用、能够模仿数组的非永久表。用户可以定义一个表类型,然后声明这种类型的变量。接下来,用户就可以将记录添加到用户的PL/SQL 表中,并且采用与引用数组元素大体相同的方法引用他们。
表包括两个基本成分:数据处理类型为BINARY_INTEGER主键;标量或记录数据类型的列
DECLARE
type ouser_table_type is table of o_user%ROWTYPE index by binary_integer;
my_dname_table ouser_table_type;
int number(3);
BEGIN
int := 1;
my_dname_table(int).username := 'searching';
dbms_output.put_line(my_dname_table(int).username);
int := 2;
my_dname_table(int).username := 'market';
dbms_output.put_line(my_dname_table(int).username);
int := 3;
my_dname_table(int).username := 'finance';
dbms_output.put_line(my_dname_table(int).username);
END;

可变数组:
DECLARE
type strings is varray(5) of varchar2(10);
v_list strings := strings('scott', 'peter', 'smith', 'tom');
int number;
BEGIN
int := 1;
dbms_output.put_line(v_list(int));
v_list(int) := 'urman';
dbms_output.put_line(v_list(int));
int := 3;
dbms_output.put_line(v_list(int));
v_list(int) := 'jackson';
dbms_output.put_line(v_list(int));
v_list.extend;
v_list(5) := 'oracle';
dbms_output.put_line(v_list(5));
END;

[color=gray]PL/SQL表和可变数组的区别:
1.VARRAY集合中的元素的数量是有限的,Index_by则是没有限制的。
2.Index_by表的下标可以有间隔, VARRAY集合的下标之间没有间隔。
3.Index_by表不能存储在数据库中,但嵌套表和VARRAY可以被存储在数据库中。
4.Index_by表初始化是自动进行的,VARRAY就必须使用内建的构造函数,构造函数和集合的名字相同。[/color]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值