pledge to_debezium采集 oracle

pledge to_debezium采集 oracle下面我们来看两个范例,一个是使用BULKCOLLECT的,一个没有:范例1、使用多次循环来检索并显示数据。范例2、一次性获取数据,然后再循环显示。下面是一些有关BULKCOLLECT的建议:1、从Oracle9i开始,你都可以在静态SQL和动态SQL中使用BULKCOLLECT。2、你可以在任何地方的SELECTINTO,FETCHINTO,和RETURNINGINTO子句中使用BUL…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

下面我们来看两个范例,一个是使用BULK COLLECT的,一个没有:

范例1、使用多次循环来检索并显示数据。

27042095_201208100928251.jpg

范例2、一次性获取数据,然后再循环显示。

27042095_201208100929491.jpg

下面是一些有关BULK COLLECT的建议:

1、从Oracle9i开始,你都可以在静态SQL和动态SQL中使用BULK COLLECT。

2、你可以在任何地方的SELECT INTO,FETCH INTO,和RETURNING INTO子句中使用BULK COLLECT关键字。

3、在Oracle9i以前,你引用的集合变量只能够存储标量值(字符串、数字和日期)。换句话说,你不能提取一条记录存放到一个记录型的数据结构中(这个数据结构是一个集合变量中的一行记录)。

4、SQL引擎会自动地初始化和扩展你在BULK COLLECT子句中引用的集合变量。它会从索引1开始,连续地把记录填充进集合中,并且会重写任何以前定义了的数据。

5、你不能在一个FORALL语句中使用SELECT…BULK COLLECT语句。

6、如果找不到任何记录,SELECT…BULK COLLECT也不会产生NO_DATA_FOUND异常。相应地,你必须检查集合的内容,以察看里面是否有数据。

7、在执行查询以前,BULK COLLECT操作会清空在INTO子句中引用的集合。如果查询没有返回任何记录,这个集合的COUNT方法就会返回0。

如果对于Oracle9i或以上的版本,我们把上面的例子写得更简单一些:

create or replace procedure Bulk_Demo2(i_deptno in number) is

type t_tbl1 is table of emp%ROWTYPE index by binary_integer;

emp_info1 t_tbl1;

type emp_rec is record(

empno emp.empno%type,

ename emp.ename%type);

type t_tbl2 is table of emp_rec index by binary_integer;

emp_info2 t_tbl2;

begin

Select t.* BULK COLLECT

INTO emp_info1

From emp t

Where t.deptno = i_deptno;

Dbms_Output.put_line(‘——批量存放整行记录类型——-‘);

For i in 1 .. emp_info1.count Loop

Dbms_Output.put_line(emp_info1(i).empno || ‘ ‘ || emp_info1(i)

.ename || ‘ ‘ || emp_info1(i)

.job || ‘ ‘ || emp_info1(i)

.sal || ‘ ‘ || emp_info1(i).hiredate);

End Loop;

Dbms_Output.put_line(‘+++++++++++++++++++++++++++++++++++++++’);

Dbms_Output.put_line(‘——批量存放自定义记录类型——-‘);

select t.empno, t.ename BULK COLLECT

INTO emp_info2

From emp t

Where t.deptno = i_deptno;

For i in 1 .. emp_info2.count Loop

Dbms_Output.put_line(emp_info2(i).empno ||’ ‘|| emp_info2(i).ename);

End Loop;

Dbms_Output.put_line(‘++++++++++++++++++++++++++++++++++++++’);

end BULK_demo2;

运行结果:

27042095_201208100938341.jpg

1.1.1.1限制BULK COLLECT提取的记录数目

Oracle对于BULK COLLECT提供了一个LIMIT关键字来让你限制从数据库检索出来的记录数目。语法如下:

FETCH cursor BULK COLLECT INTO … [LIMIT rows];

这里的rows参数可以是一个字面值,变量或者是表达式——都指向一个整数(不然的话,Oracle将会给出一个VALUE_ERROR的异常信息)。

LIMIT对于BULK COLLECT来说是非常有用的。它帮助你清楚地了解并管理程序所用到过程数据。比如说,你要精确地查询并处理1000条记录。你可以使用BULK COLLECT来取出这些记录,并且残生了一个相对较大的集合。但是这种方法会消耗许多PGA(全局进程区)内存。如果这个代码是被很多独立的会话使用,那么你的应用就会因为PGA频繁的页面交换而效率低下。

下面的这段代码(在Oracle9i的HR模式下),在FETCH语句中使用了LIMIT语句。请注意,这里使用了集合的COUNT方法来确认是否有数据被取出。而%FOUND和%NOTFOUND属性在这里就不能用来检测是否有数据被取出。

create or replace procedure LimitDemo is

CURSOR allrows_cur IS

SELECT employee_id FROM employees;

TYPE employee_aat IS TABLE OF

employees.employee_id%Type INDEX BY BINARY_INTEGER;

l_employees employee_aat;

begin

OPEN allrows_cur;

Loop

EXIT WHEN allrows_cur%NOTFOUND;

FETCH allrows_cur BULK COLLECT

INTO l_employees LIMIT 100;

Dbms_Output.put_line(l_employees.count);

end loop;

close allrows_cur;

end LimitDemo;

获得结果是:27042095_201208100940241.jpg

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:http://www.javaforall.cn/234844.html原文链接:http://www.javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号