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

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/234844.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • c语言十进制转八进制程序_c语言八进制以什么开头

    c语言十进制转八进制程序_c语言八进制以什么开头二进制整数转八进制算法二进制整数转换为八进制整数时,每三位二进制数字转换为一位八进制数字,运算的顺序是从低位向高位依次进行,高位不足三位用零补齐。八进制整数转二进制算法八进制整数转换为二进制整数时,每一位八进制数字转换为三位二进制数字,运算的顺序也是从低位向高位依次进行。案例二进制整数转八进制将二进制整数1110111100转换为八进制,转换过程如下:我们将二进制的1110111100转…

    2022年10月30日
    0
  • keil5使用教程

    keil5使用教程简单介绍keil5得使用教程。

    2022年5月28日
    55
  • AbstractQueuedSynchronizer浅析「建议收藏」

    AbstractQueuedSynchronizer浅析「建议收藏」文章目录简介如何实现自定义同步器实现分析1.publicfinalvoidacquire(intarg)该方法以排他的方式获取锁,对中断不敏感,完成synchronized语义。简介这是一个抽象类,提供了一个FIFO(先进先出的队列),可以用来构建锁或者其他同步装置的基础框架。该同步器利用intstate来表示一个状态。子类通过继续该抽象类并实现他的方法来管理其状态,管理方式是通过acquire(intarg)方法release(intarg)方法来操作状态。多线程环境中对状

    2022年9月25日
    0
  • C#的一些关键字的总结

    C#的一些关键字的总结

    2021年7月27日
    58
  • 搭建CICD平台

    搭建CICD平台**搭建CICD平台**1、主机准备。2、安装前预配置。准备相应的系统配置与软件依赖。3、执行安装。4、安装后配置。添加相应的组件以及修改配置。如导入模板等。一、主机准备Centos7.2配置:内存大于4G。(其中Jenkins占1.5G、Gitlab占2G)8080、10080、10022、50000端口未使用二、安装前预配置1、添加阿里yum源(如果已配置了…

    2022年6月12日
    42
  • 进销存ERP源码 进销存APP源码 带小程序ERP源码

    进销存ERP源码 进销存APP源码 带小程序ERP源码前端开发:uniapp后端开发:PHP数据库:MySql移动端:APP+小程序界面简洁,前端采用Bootstrap以及Bootstrap-table相结合,实现自适应的效果、弹窗等。

    2022年5月31日
    69

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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