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. JS实现动态瀑布流及放大切换图片效果(js案例)

    整理了一下当时学js写的一些案例,再次体验了一把用原生JS实现动态瀑布流效果的乐趣,现在把它整理出来,需要的小伙伴可以参考一下. 该案例主要是用HTML+CSS控制样式,通过JS实现全局瀑布流以及点击 ...

  2. Visiual Studio CLR20r3问题

    原文转自:http://blog.sina.com.cn/s/blog_3f2ef11801013p8c.html(刘帝勇的大观园) 看到有更新,习惯性的点了,升级到Visiual Studio Ul ...

  3. ES6新特性使用小结(三)

    九.数据类型 Symbol /* * Symbol 数据类型 概念: Symbol 提供一个独一无二的值 * */ { let a1 = Symbol(); let a2 = Symbol(); co ...

  4. HDU-3639-Hawk-and-Chicken(强连通,缩点,DFS)

    链接:https://vjudge.net/problem/HDU-3639 题意: 有n个小朋友在一个班级中,现在要选择班长.收集了小朋友们的意见,一条意见表示为A认为B合适.这个是具备传递性的,A ...

  5. is null 的优化

    bk1gx7xwj9du6SELECT *  FROM HEADERS GJH WHERE ATTRIBUTE10 IS NULL FOR UPDATE 优化建议如下: 短期来说:建立一个索引来优化: ...

  6. Zepto事件模块源码分析

    Zepto事件模块源码分析 一.保存事件数据的handlers 我们知道js原生api中要移除事件,需要传入绑定时的回调函数.而Zepto则可以不传入回调函数,直接移除对应类型的所有事件.原因就在于Z ...

  7. Unity3d中3D Text对模型的穿透显示

    昨晚,好友在电话里问我在Unity3d中使用3D Text,不想让其穿透模型显示,即想让场景中的3D Text与模型有正确的遮挡关系,怎么解? 今早谷歌上查了查,明白了原因,因为3D Text的默认材 ...

  8. Mybatis基础配置及增删查改操作

    一.简介 平时我们都用JDBC访问数据库,除了需要自己写SQL之外,还必须操作Connection, Statement, ResultSet 这些其实只是手段的辅助类. 不仅如此,访问不同的表,还会 ...

  9. 洛谷 P1807 最长路_NOI导刊2010提高(07)

    最长路 #include <iostream> #include <cstdio> #include <cstring> #include <queue> ...

  10. 使用OpenSSH远程管理Linux服务器

    一.使用OpenSSH远程管理Linux服务器 sshd是OpenSSH的服务器端守护进程,与之对应的Windows下客户端软件有SecureCRT/Xshell/PuTTY等. OpenSSH一般为 ...