在oracle过程中设置serveroutput

bic*_*cle 6 oracle procedure

我创建了一个简单的程序.在这个过程中,我想输出一些数据.但是我把set serveroutput放在哪里

它说

错误(26,5):PLS-00103:当遇到以下情况之一时遇到符号"SERVEROUTPUT":. (),*@%&= - + </> at in是mod的余数不是rem => <>或!=或〜=> = <= <>和/或类似like2 like4 likec之间的|| multiset成员submultiset

我把它放在哪里并不重要,它一直在说.

create or replace PROCEDURE discount  

is --- signature 

BEGIN --- executable part

update dvd set me_our_price = me_our_price*0.90 WHERE me_release_year = 2011;
update dvd set me_our_price = me_our_price*0.80 WHERE me_release_year = 2010;

update bluray set me_our_price = me_our_price*0.95 WHERE me_release_year = 2011;
update bluray set me_our_price = me_our_price*0.90 WHERE me_release_year = 2010;


DBMS_OUTPUT.PUT_LINE(' Blurays '); 
for i in ( 
SELECT e.mo_title, e.mo_bluray.me_list_price as me_list_price, e.mo_bluray.me_our_price    as  me_our_price FROM movie e  where e.mo_bluray is not null
 ) 
loop 

DBMS_OUTPUT.PUT_LINE(i.mo_title|| '  ' || i.me_list_price|| '  ' || i.me_list_price); 

end loop; 

DBMS_OUTPUT.PUT_LINE(' DVDs '); 
for i in ( 
set serveroutput on
SELECT e.mo_title, e.mo_dvd.me_list_price as me_list_price, e.mo_dvd.me_our_price as      me_our_price FROM movie e  where e.mo_dvd is not null
 ) 
loop 
DBMS_OUTPUT.PUT_LINE(i.mo_title|| '  ' || i.me_list_price|| '  ' || i.me_list_price); 
end loop; 


END discount; 
Run Code Online (Sandbox Code Playgroud)

Ash*_*wal 24

要理解"SET SERVEROUTPUT ON"的使用,我将举一个例子

DECLARE
a number(10)  :=10;
BEGIN
dbms_output.put_line(a) ;
dbms_output.put_line('Hello World ! ')  ;
END ;
Run Code Online (Sandbox Code Playgroud)

输出:PL/SQl程序成功完成,即没有预期的输出

其背后的主要原因是,无论我们在dbms_output.put_line('ARGUMENT'/ VALUES)内传递什么,即ARGUMENT/VALUES,都在内部存储在SGA(共享全局区域)内存区域的缓冲区内,最多可达200​​0字节.

*注意:***但是应该注意,只有当我们使用**dbms_output时才会创建此缓冲区.我们只需要为会话设置一次环境变量!!

为了从缓冲区中获取它,我们需要为会话设置环境变量.对于我们正在设置服务器输出的初学者来说(由于它的命名法)会让很多人感到困惑,但遗憾的是它并不是那样的.使用SET SERVER OUTPUT ON只是告诉PL/SQL引擎

*嘿,请打印我将在dbms_output.put_line内传递的ARGUMENT/VALUES,
然后PL/SQl运行时引擎在主控制台上打印参数.

我想我很清楚.祝你一切顺利 .要了解有关Oracle Server Engine 架构结构的更多信息, 您可以在Quora上查看我的答案http://qr.ae/RojAn8

并回答你的问题"一个人应该在会话开始时使用SET SERVER OUTPUT."


DCo*_*kie 17

"SET serveroutput ON"是SQL*Plus命令,并且不是有效的PL/SQL.


Lui*_*ndo 7

首先在sp中添加下一个代码:

BEGIN
    dbms_output.enable();
    dbms_output.put_line ('TEST LINE'); 
END;
Run Code Online (Sandbox Code Playgroud)

在Oracle SQL开发人员中编译代码.所以转到菜单视图 - > dbms输出.单击Icon Green Plus并选择您的架构.现在运行你的sp.