[20180111]Oracle Bulk Collect and Limit2

简介: [20180111]Oracle's Bulk Collect and Limit2.txt --//昨天在测试时遇到一个的奇怪问题,链接http://blog.itpub.net/267265/viewspace-2149969/,执行 --//@ limit 9 时,重复输出了2次。

[20180111]Oracle's Bulk Collect and Limit2.txt

--//昨天在测试时遇到一个的奇怪问题,链接http://blog.itpub.net/267265/viewspace-2149969/,执行
--//@ limit 9 时,重复输出了2次。主要是我的glogin配置文件里面包含如下:
set termout off
call dbms_output.enable(1e6);
set termout on

--//itpub论坛的提问:http://www.itpub.net/thread-2096243-1-1.html
--//缺省设置 set serverout off,而且dbms_output设置为disable,而我在配置文件中打开了即使是set serverout off的情况下。
--//通过一个例子说明问题:

1.环境:
SCOTT@book> @ &r/ver1

PORT_STRING                    VERSION        BANNER
------------------------------ -------------- --------------------------------------------------------------------------------
x86_64/Linux 2.4.xx            11.2.0.4.0     Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production

SCOTT@book> show serveroutput
serveroutput OFF

2.测试:

SCOTT@book> call dbms_output.enable(1e6);
Call completed.

SCOTT@book> exec DBMS_OUTPUT.put_line ('this is a first test!');
PL/SQL procedure successfully completed.

--//现在不显示是正常的。

SCOTT@book> set serverout on
SCOTT@book> exec DBMS_OUTPUT.put_line ('this is a second test!');
this is a first test!
this is a second test!
PL/SQL procedure successfully completed.

--//OK,现在把在缓存的第一行一起显示出来。出现了2行。再次执行就不会了。

SCOTT@book> exec DBMS_OUTPUT.put_line ('this is a second test!');
this is a second test!
PL/SQL procedure successfully completed.


3.回到我当时的出现的问题就很好理解了。
我现在set serverout off情况下执行
set serverout off
@limit 9
set serverout on
@limit 9

--//这样就出现2次显示,感觉重复显示了。主要问题我在set serverout off的情况下打开了dbms_output.enable(1e6)。
--//而这样设置源于去年的这个帖子:http://blog.itpub.net/267265/viewspace-2148591/=>[20171211]dbms_output无serveroutput on
--//这样看来没有想作者想像的这么复杂,只要随手调用1次exec DBMS_OUTPUT.put_line就ok了。

4.测试:
--//退出在登录:
SCOTT@book> exec dbms_output.enable(1e6);
PL/SQL procedure successfully completed.

SCOTT@book> exec dbms_output.put_line('first');
PL/SQL procedure successfully completed.

SCOTT@book> set serverout on
SCOTT@book> exec dbms_output.put_line(' ');
first

PL/SQL procedure successfully completed.

--//退出在登录:
SCOTT@book> exec dbms_output.enable(1e6);

PL/SQL procedure successfully completed.

SCOTT@book> @ limit 9
old  13:       FETCH get_emp_data BULK COLLECT INTO emp_c LIMIT &1;
new  13:       FETCH get_emp_data BULK COLLECT INTO emp_c LIMIT 9;
PL/SQL procedure successfully completed.

SCOTT@book> @ &r/output_print.sql
PL/SQL procedure successfully completed.
OUTPUT
---------------
7369SMITH800
7499ALLEN1600
7521WARD1250
7566JONES2975
7654MARTIN1250
7698BLAKE2850
7782CLARK2450
7788SCOTT3000
7839KING5000


10 rows selected.

--//这样的好处不用设置set serverout on就能显示。

目录
相关文章
|
SQL Oracle 关系型数据库
[20180110]Oracle Bulk Collect and Limit
[20180110]Oracle's Bulk Collect and Limit.txt --//链接提到https://www.databasejournal.
971 0
|
SQL Oracle 关系型数据库
Oracle数据库之FORALL与BULK COLLECT语句
Oracle数据库之FORALL与BULK COLLECT语句    我们再来看一下PL/SQL块的执行过程:当PL/SQL运行时引擎处理一块代码时,它使用PL/SQL引擎来执行过程化的代码,而将SQL语句发送给SQL引擎来执行;SQL引擎执行完毕后,将结果再返回给PL/SQL引擎。
854 0
|
SQL 关系型数据库 Perl
PLSQL_性能优化系列11_Oracle Bulk Collect批处理
2014-10-04 Created By BaoXinjian 一、摘要 PL/SQL程序中运行SQL语句是存在开销的,因为SQL语句是要提交给SQL引擎处理。 这种在PL/SQL引擎和SQL引擎之间的控制转移叫做上下文却换,每次却换时,都有额外的开销。
1005 0
|
SQL 关系型数据库 计算机视觉
Oracle bulk 示例
Oracle有2个引擎来执行PL/SQL blocks 和 subprograms。那么在执行的时候,PL/SQL 引擎把DML 语句发送给SQL 引擎,然后由SQL 引擎执行,执行完毕后,SQL 引擎把结果集在发送给PL/SQL 引擎。
826 0
|
3月前
|
存储 Oracle 关系型数据库
Oracle数据库的应用场景有哪些?
【10月更文挑战第15天】Oracle数据库的应用场景有哪些?
230 64
|
30天前
|
存储 Oracle 关系型数据库
数据库数据恢复—ORACLE常见故障的数据恢复方案
Oracle数据库常见故障表现: 1、ORACLE数据库无法启动或无法正常工作。 2、ORACLE ASM存储破坏。 3、ORACLE数据文件丢失。 4、ORACLE数据文件部分损坏。 5、ORACLE DUMP文件损坏。
94 11
|
2月前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—Oracle数据库文件有坏快损坏的数据恢复案例
一台Oracle数据库打开报错,报错信息: “system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。管理员联系我们数据恢复中心寻求帮助,并提供了Oracle_Home目录的所有文件。用户方要求恢复zxfg用户下的数据。 由于数据库没有备份,无法通过备份去恢复数据库。
|
2月前
|
存储 Oracle 关系型数据库
oracle数据恢复—Oracle数据库文件大小变为0kb的数据恢复案例
存储掉盘超过上限,lun无法识别。管理员重组存储的位图信息并导出lun,发现linux操作系统上部署的oracle数据库中有上百个数据文件的大小变为0kb。数据库的大小缩水了80%以上。 取出&并分析oracle数据库的控制文件。重组存储位图信息,重新导出控制文件中记录的数据文件,发现这些文件的大小依然为0kb。
|
1月前
|
存储 Oracle 关系型数据库
服务器数据恢复—华为S5300存储Oracle数据库恢复案例
服务器存储数据恢复环境: 华为S5300存储中有12块FC硬盘,其中11块硬盘作为数据盘组建了一组RAID5阵列,剩下的1块硬盘作为热备盘使用。基于RAID的LUN分配给linux操作系统使用,存放的数据主要是Oracle数据库。 服务器存储故障: RAID5阵列中1块硬盘出现故障离线,热备盘自动激活开始同步数据,在同步数据的过程中又一块硬盘离线,RAID5阵列瘫痪,上层LUN无法使用。