ORACLE中RECORD、VARRAY、TABLE、IS REF CURSOR 的使用及实例详解
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 的使用及实例详解的更多相关文章
- ORACLE中RECORD、VARRAY、TABLE的使用详解(转)
原文地址:ORACLE中RECORD.VARRAY.TABLE的使用详解
- 问题:oracle select into;结果:oracle SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解
oracle SELECT INTO 和 INSERT INTO SELECT 两种表复制语句详解 (2011-07-08 08:59:47) 转载▼ 标签: it 分类: oracle 我们经常会遇 ...
- Oracle排名函数(Rank)实例详解
这篇文章主要介绍了Oracle排名函数(Rank)实例详解,需要的朋友可以参考下 --已知:两种排名方式(分区和不分区):使用和不使用partition --两种计算方式(连续,不连续),对应 ...
- JAVA高级架构师基础功:Spring中AOP的两种代理方式:动态代理和CGLIB详解
在spring框架中使用了两种代理方式: 1.JDK自带的动态代理. 2.Spring框架自己提供的CGLIB的方式. 这两种也是Spring框架核心AOP的基础. 在详细讲解上述提到的动态代理和CG ...
- 【翻译】Anatomy of a Program in Memory—剖析内存中的一个程序(进程的虚拟存储器映像布局详解)
[翻译]Anatomy of a Program in Memory—剖析内存中的一个程序(进程的虚拟存储器映像布局详解) . . .
- 《HTML5网页开发实例详解》连载(四)HTML5中的FileSystem接口
HTML 5除了提供用于获取文件信息的File对象外,还添加了FileSystem相关的应用接口.FileSystem对于不同的处理功能做了细致的分类,如用于文件读取和处理的FileReader和Fi ...
- python中argparse模块用法实例详解
python中argparse模块用法实例详解 这篇文章主要介绍了python中argparse模块用法,以实例形式较为详细的分析了argparse模块解析命令行参数的使用技巧,需要的朋友可以参考下 ...
- Opencv中Mat矩阵相乘——点乘、dot、mul运算详解
Opencv中Mat矩阵相乘——点乘.dot.mul运算详解 2016年09月02日 00:00:36 -牧野- 阅读数:59593 标签: Opencv矩阵相乘点乘dotmul 更多 个人分类: O ...
- java中List的用法和实例详解
java中List的用法和实例详解 List的用法List包括List接口以及List接口的所有实现类.因为List接口实现了Collection接口,所以List接口拥有Collection接口提供 ...
随机推荐
- anaconda3安装caffe
使用anaconda3安装caffe踩坑无数次,放弃治疗,直接在~/.bashrc中删除anaconda的路径,备份一下等要用的时候再写上,用默认的python2.7系统环境安装 要使用人脸检测项目中 ...
- 界面切换动画(CATransition实现 )
调用 // CATransition动画实现 [self pushWithAnimationType:@"fade"]; - (void)pushWithAnimationType ...
- CC22:检查是否为BST
题目 请实现一个函数,检查一棵二叉树是否为二叉查找树. 给定树的根结点指针TreeNode* root,请返回一个bool,代表该树是否为二叉查找树. 解法 二叉排序树有个特点是,结点通过中序遍历出来 ...
- JS 对象的操作方法
第一种: 变量名.style.属性: 第二种: 变量名.style[参数]
- Codeforces 161A(贪心)
要点 我在想贪心是对的那要二分图何用,自己的想法是:二分图最开始并不知道怎么匹配最好所以就按输入顺序连了,之后慢慢修改:而这道匹配也成对匹配但从一开始你就可以知道选哪个最划算,就是贪心地选最小的.不必 ...
- Spring中的注入方式 和使用的注解 详解
注解:http://www.cnblogs.com/liangxiaofeng/p/6390868.html 注入方式:http://www.cnblogs.com/java-class/p/4727 ...
- MiniDao分页的坑
//TODO 此处切记不要传(page-1)*rows,MiniDAO底层已经做了此运算,.sql文件中也无需写limit,会自动加上List<BcProjectSampleBackEntity ...
- 零基础逆向工程15_C语言09_位运算
1.汇编中的移位指令 算数移位指令 指令格式:SAL/SAR Reg/Mem, CL/Imm SAL(Shift Arithmetic Left):算数左移 SAR(Shift Arithmetic ...
- 手机QQ访问时,html页面在QQ中自定义预览和自定义分享
手机QQ访问时,html页面在QQ中自定义预览和自定义分享 有一天,产品说要做个自定义预览和分享功能,于是很快在微信上实现了,可是不知道在QQ上怎么实现,查看了很多网站,最后才找到了解决方案,于是想和 ...
- SpringBoot LogBack文件配置
<?xml version="1.0" encoding="UTF-8"?> <configuration scan="true&q ...