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接口提供 ...
随机推荐
- 51nod1108(曼哈顿距离)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1108 题意:中文题诶- 思路:曼哈顿距离,题目没要求所求点要在 ...
- uoj#348/洛谷P4221 [WC2018]州区划分(FWT)
传送门(uoj) 传送门(洛谷) 全世界都会子集卷积就咱不会--全世界都在写\(FMT\)就咱只会\(FWT\)-- 前置芝士 或运算\(FWT\)或者\(FMT\) 左转洛谷模板区,包教包会 子集卷 ...
- Ajax遇到的那些坑
提前说明:这里我用的是Windows系统,所以解决问题的方法也是仅限Windows系统,浏览器使用Chrome 第一个坑:Access to XMLHttpRequest at 'file:///C: ...
- React入门看这篇就够了
摘要: 很多值得了解的细节. 原文:React入门看这篇就够了 作者:Random Fundebug经授权转载,版权归原作者所有. React 背景介绍 React 入门实例教程 React 起源于 ...
- HTML+CSS注意点
1. 对于中文网页,需要在header中使用<meta charset="utf-8">声明编码,否则会出现乱码. 2. 属性 属性 描述 class 为html元素定 ...
- PostgreSQL - raise函数打印字符串
raise函数 在PostgreSQL中,该函数用于打印字符串,类似于Java中的System.out.println(),Oracle中的dbms_output.put_line(). 用法如下: ...
- JMeter(2) 集成jmeter+ant+jenkins
一.ant安装 $su root $vi /etc/bashrc 插入两行(i+enter插入) export ANT_HOME=/usr/local/apache-ant-1.9.3 export ...
- js异步加载和按需加载
function loadScript(url,callback){ var script = document.creatElement("script"); script.ty ...
- python进阶06 常用问题库(2)datetime模块 base64
python进阶06 常用问题库(2)datetime模块 base64 一.datetime模块(时间) 1.datetime.time() t=datetime.time(20,43,30,1) ...
- Codecraft-17 and Codeforces Round #391 (Div. 1 + Div. 2, combined) A
Bash wants to become a Pokemon master one day. Although he liked a lot of Pokemon, he has always bee ...