ORACLE中RECORD、VARRAY、TAB、IS REF CURSOR LE的使用及实例详解

create or replace
procedure PRO_RECORD_ROW_TAB_EXAMPLE
IS
--记录一行二列的数据
type V_REC is RECORD(
FACT_NO char(4),
FACT_ODR_NO char(20)
);
--对变量进行实例化
V_REC1 V_REC;
--定义一个表示表中一行记录的变量
v_row1 odrm%rowtype;

----指定是一个集合的表的数组类型,简单的来说就是一个可以存储一列多行的数据类型。
--INDEX BY BINARY_INTEGER:指索引组织类型
TYPE V_TAB IS TABLE OF VARCHAR2(20) INDEX BY BINARY_INTEGER;
---实例化变量
V_TAB1 V_TAB;

--存储单列多行
TYPE T_TAB_FACT_ODR_NO IS TABLE OF ODRM.FACT_ODR_NO%TYPE INDEX BY BINARY_INTEGER;
--实例化变量
VAR_FACT_ODR_NO T_TAB_FACT_ODR_NO;

-- 存储多列多行和ROWTYPE结合使用
TYPE T_TAB_ODRM IS TABLE OF ODRM%ROWTYPE INDEX BY BINARY_INTEGER ;
--实例化变量
var_odrm t_tab_odrm;

-- 存储多列多行和RECORD结合使用
TYPE T_TAB_rec IS TABLE OF v_rec INDEX BY BINARY_INTEGER ;
--实例化变量
var_odrm_rec T_TAB_rec;

--数组是具有相同数据类型的一组成员的集合。每个成员都有一个唯一的下标,它取决于成员在数组中的位置。在PL/SQL中,数组数据类型是VARRAY(variable array,即可变数组
TYPE V_VARRAY IS VARRAY(5) OF VARCHAR2(25);
--实例化变量
varray_1 v_varray;

/*
像游标cursor一样,游标变量ref cursor指向指定查询结果集当前行。游标变量显得更加灵活因为其声明并不绑定指定查询。
其主要运用于PLSQL函数或存储过程以及其他编程语言java等程序之间作为参数传递。
不像游标的一点,游标变量没有参数。
游标变量具有以下属性:
(%FOUND, %NOTFOUND, %ISOPEN, and %ROWCOUNT)
游标变量又分为强类型strong(with a return type)和弱类型(with no return type)
*/
---强类型
TYPE MYCURA IS REF CURSOR RETURN ODRM%ROWTYPE;
--实例化变量
ref_cur mycura;
v_row_type odrm%rowtype;

--强类型
TYPE REF_CURSOR IS REF CURSOR RETURN V_REC;
--实例化变量
ref_cur1 ref_cursor;

---弱类型
TYPE REF_CURSOR1 IS REF CURSOR ;
--实例化变量
ref_cur2 ref_cursor1;
v_fact_odr_no odrm.fact_odr_no%type;

---游标变量 与记录配合使用
TYPE REF_CURSOR2 IS REF CURSOR ;
--实例化变量
ref_cur3 ref_cursor2;

begin
select FACT_NO,FACT_ODR_NO into V_REC1
from ODRM
where rownum =1;

select * into v_row1
from ODRM
where rownum =1;

V_TAB1(-1) :='-1';
v_tab1(1) :=' 1';

---BULK COLLECT :指是一个成批聚合类型,简单的来说 , 它可以存储一个多行多列存储类型,采用BULK COLLECT可以将查询结果一次性地加载到集合中。
--采用bulkcollect可以将查询结果一次性地加载到collections中。而不是通过cursor一条一条地处理。
select FACT_ODR_NO
bulk collect into var_fact_odr_no
from ODRM
where rownum <=10;

for X in VAR_FACT_ODR_NO.first..VAR_FACT_ODR_NO.last LOOP
DBMS_OUTPUT.PUT_LINE(var_fact_odr_no(x));
end loop;

select *
bulk collect into var_odrm
from ODRM
where rownum <=11;
for X in 1..VAR_ODRM.COUNT LOOP
DBMS_OUTPUT.PUT_LINE(VAR_odrm(x).fact_no||','||var_odrm(x).fact_odr_no);
END LOOP;

select fact_no,FACT_ODR_NO
bulk collect into var_odrm_rec
from ODRM
where rownum <=10;

for X in var_odrm_rec.first..var_odrm_rec.last LOOP
DBMS_OUTPUT.PUT_LINE(VAR_FACT_ODR_NO(X));
end loop;

varray_1 := v_varray('1','2','3','4','5');
dbms_output.put_line(varray_1(1) );
VARRAY_1(5) := '500';
dbms_output.put_line(varray_1(5));

open ref_cur for select * from odrm where rownum <12;
loop
fetch ref_cur into v_row_type;
exit when ref_cur%notfound;
dbms_output.put_line(v_row_type.fact_no ||','||v_row_type.fact_odr_no);
end loop;
close ref_cur;
--
open ref_cur1 for select fact_no,fact_odr_no from odrm where rownum <12;
loop
fetch ref_cur1 into v_rec1;
exit when ref_cur1%notfound;
dbms_output.put_line(v_rec1.fact_odr_no || v_rec1.fact_no);
end loop;
close ref_cur1;

open ref_cur2 for select fact_odr_no from odrm where rownum <12;
loop
fetch ref_cur2 into v_fact_odr_no;
exit when ref_cur2%notfound;
dbms_output.put_line(v_fact_odr_no);
end loop;
close ref_cur2;

open ref_cur3 for select * from odrm where rownum <12;
loop
fetch ref_cur3 into v_row_type;
exit when ref_cur3%notfound;
dbms_output.put_line(v_row_type.fact_odr_no);
end loop;
close ref_cur3;

end;

ORACLE中RECORD、VARRAY、TABLE、IS REF CURSOR 的使用及实例详解的更多相关文章

  1. ORACLE中RECORD、VARRAY、TABLE的使用详解(转)

    原文地址:ORACLE中RECORD.VARRAY.TABLE的使用详解

  2. 问题:oracle select into;结果:oracle SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解

    oracle SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解 (2011-07-08 08:59:47) 转载▼ 标签: it 分类: oracle 我们经常会遇 ...

  3. Oracle排名函数(Rank)实例详解

    这篇文章主要介绍了Oracle排名函数(Rank)实例详解,需要的朋友可以参考下     --已知:两种排名方式(分区和不分区):使用和不使用partition --两种计算方式(连续,不连续),对应 ...

  4. JAVA高级架构师基础功:Spring中AOP的两种代理方式:动态代理和CGLIB详解

    在spring框架中使用了两种代理方式: 1.JDK自带的动态代理. 2.Spring框架自己提供的CGLIB的方式. 这两种也是Spring框架核心AOP的基础. 在详细讲解上述提到的动态代理和CG ...

  5. 【翻译】Anatomy of a Program in Memory—剖析内存中的一个程序(进程的虚拟存储器映像布局详解)

    [翻译]Anatomy of a Program in Memory—剖析内存中的一个程序(进程的虚拟存储器映像布局详解) . . .

  6. 《HTML5网页开发实例详解》连载(四)HTML5中的FileSystem接口

    HTML 5除了提供用于获取文件信息的File对象外,还添加了FileSystem相关的应用接口.FileSystem对于不同的处理功能做了细致的分类,如用于文件读取和处理的FileReader和Fi ...

  7. python中argparse模块用法实例详解

    python中argparse模块用法实例详解 这篇文章主要介绍了python中argparse模块用法,以实例形式较为详细的分析了argparse模块解析命令行参数的使用技巧,需要的朋友可以参考下 ...

  8. Opencv中Mat矩阵相乘——点乘、dot、mul运算详解

    Opencv中Mat矩阵相乘——点乘.dot.mul运算详解 2016年09月02日 00:00:36 -牧野- 阅读数:59593 标签: Opencv矩阵相乘点乘dotmul 更多 个人分类: O ...

  9. java中List的用法和实例详解

    java中List的用法和实例详解 List的用法List包括List接口以及List接口的所有实现类.因为List接口实现了Collection接口,所以List接口拥有Collection接口提供 ...

随机推荐

  1. VBA for AutoCAD

    Download the Microsoft Visual Basic for Applications Module (VBA) 2016 Downloads AutoCAD 2016 VBA mo ...

  2. 重启centOS丢失nginx.pid导致无法启动nginx的解决方法

    目录 找到nginx 找到nginx的配置文件 拼接命令,启动nginx Nginx指令拓展知识(中英对照): tags: centOS linux nginx categories: 服务器 找到n ...

  3. Ubuntu下安装wine plsql

    在电脑上安装了第二系统Ubuntu,但面临各种Linux不支持的开发软件也是束手无策.比如常用的Eclipse,PlSQl,Oracle,QQ等等,于是,上网查阅各种资料,最终的解决方案还是要依赖于w ...

  4. LeetCode:灯泡开关2

    题目 现有一个房间,墙上挂有 n 只已经打开的灯泡和 4 个按钮.在进行了 m 次未知操作后,你需要返回这 n 只灯泡可能有多少种不同的状态. 假设这 n 只灯泡被编号为 [1, 2, 3 ..., ...

  5. Js 文件上传后缀验证

    //img格式验证 function imgFormat(name) { //再对文件名进行截取,以取得后缀名 var namearr= name.split("."); //获取 ...

  6. Codeforces 161E(搜索)

    要点 标签是dp但搜索一发就能过了. 因为是对称矩阵所以试填一下就是一个外层都填满了,因此搜索的深度其实不超过5. 显然要预处理有哪些素数.在这个过程中可以顺便再处理出一个\(vector:re[le ...

  7. HttpEnum

    package com.yd.ifm.client.caller.util.http; public class HttpEnum { public enum DefContentTypeEnum i ...

  8. SpringBoot---核心---日志配置

  9. PIX 防火墙

    ---恢复内容开始--- 一 , PIX 防火墙的认识 PIX 是cisco 的硬件防火墙 硬件防火墙的工作速度快,使用方便. PIX 有很多型号,并发连接数是PIX防火墙的重要参数   PIX 25 ...

  10. STM32空闲中断

    收发共存的思路没有经过验证!!! 空闲中断:既可以用来作为不定长接收数据帧的断帧判断/特别是DMA数据的接收,也可以用来指示中断发送的结束. 在需要发送的地方USART_ITConfig(UART5, ...