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,转载请注明出处:https://javaforall.cn/234844.html原文链接:https://javaforall.cn

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

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

(0)
blank

相关推荐

  • SqlServer服务器和数据库角色

    SqlServer服务器和数据库角色

    2021年11月25日
  • python编写nc的思考

    0x00前言发现自己学习python已经有半个月了,也开发了自己的一些渗透的小脚本,但觉得还是不够,我个人觉得工具和脚本还有框架是个本质上的区别。脚本的话,不会考虑到其他的一些因素,例如报错和交互

    2021年12月11日
  • TCP具体解释(3):重传、流量控制、拥塞控制……

    TCP具体解释(3):重传、流量控制、拥塞控制……

  • 基于51单片机控制步进电机正反转「建议收藏」

    基于51单片机控制步进电机正反转「建议收藏」基于51单片机控制步进电机正反转此次采用uln2003模块来链接步进电机;##步进电机工作原理步进电机是一种将电脉冲信号转换成相应角位移或线位移的电动机。每输入一个脉冲信号,转子就转动一个角度或前进一步,其输出的角位移或线位移与输入的脉冲数成正比,转速与脉冲频率成正比。步进电动机的结构形式和分类方法较多,一般按励磁方式分为磁阻式、永磁式和混磁式三种;按相数可分为单相、两相、三相和多相等形式。因此我们可以控制单片机I/O口的电平来控制步进电机,此次设计中采用四相单拍工作方式,在这种工作方式下,A、

  • 业务流程引擎_业务流程管理

    业务流程引擎_业务流程管理一般的时候,我们都采用编程式开发,编程式开发的好处非常明显:直接、高效、自由,当然其缺点也是有的,与其优点刚好相对,因为直接,所以有些变化都要进行代码上的修改;因为高效,所以一旦出问题,导致的结果也比较严重,因为自由,所以带来的修改风险也比较大。  这也就是许多大的公司都在进行流程化开发的重要原因之一,比如:上海普元,Livebos,Justep,还有许许多多知名不知名的公司都有类似的流程化开发

  • Java读取pkl文件_theano csv到pkl文件

    Java读取pkl文件_theano csv到pkl文件我正在尝试将一个pkl文件从csv起点加载到theano中importnumpyasnpimportcsvimportgzip,cPicklefromnumpyimportgenfromtxtimporttheanoimporttheano.tensorasT#OpencsvfileandreadindatacsvFile=”filename.csv”my…

发表回复

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

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