我创建了一个简单的程序。在这个过程中,我想输出一些数据。然而,无论我放在哪里 在
上设置serveroutput它说
错误(26,5):PLS-00103:当遇到以下情况之一时遇到符号“SERVEROUTPUT”:. (),* @%& = - +< /> at in mod mod not rem => <>或!=或〜=> =< =<>和/或喜欢喜欢喜欢的喜欢...之间的|| 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;
答案 0 :(得分:22)
了解" SET SERVEROUTPUT ON"的使用我将举一个例子
DECLARE
a number(10) :=10;
BEGIN
dbms_output.put_line(a) ;
dbms_output.put_line('Hello World ! ') ;
END ;
输出:PL / SQ1程序成功完成,即没有预期的输出
背后的主要原因是,无论我们在 dbms_output.put_line(' ARGUMENT' / VALUES)(即ARGUMENT / VALUES)内传递的内容,都在内部存储在缓冲区中SGA(共享全局区域)内存区域高达2000字节。
*注意:***但是应该注意,只有在我们使用** 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。 "
答案 1 :(得分:17)
“SET serveroutput ON”是一个SQL * Plus命令,并且无效PL / SQL。
答案 2 :(得分:7)
首先在sp:
中添加下一个代码BEGIN
dbms_output.enable();
dbms_output.put_line ('TEST LINE');
END;
在Oracle SQL开发人员中编译代码。所以转到菜单视图 - > dbms输出。单击Icon Green Plus并选择您的架构。现在运行你的sp。
答案 3 :(得分:1)
If you want to execute any procedure then firstly you have to set serveroutput on in the sqldeveloper work environment like.
-> SET SERVEROUTPUT ON;
-> BEGIN
dbms_output.put_line ('Hello World..');
dbms_output.put_line('Its displaying the values only for the Testing purpose');
END;
/
答案 4 :(得分:0)
实际上,您需要在SET SERVEROUTPUT ON;
来电之前致电BEGIN
。
每个人都建议这样做,但没有建议在哪里实际放置这条线:
SET SERVEROUTPUT ON;
BEGIN
FOR rec in (SELECT * FROM EMPLOYEES) LOOP
DBMS_OUTPUT.PUT_LINE(rec.EmployeeName);
ENDLOOP;
END;
否则,您将看不到任何输出。
答案 5 :(得分:0)
过程成功但有支出
错误第1行:意外的标识符
代码如下:
SET SERVEROUTPUT ON
DECLARE
-- Curseurs
CURSOR c1 IS
SELECT RWID FROM J_EVT
WHERE DT_SYST < TO_DATE(TO_CHAR(SYSDATE,'DD/MM') || '/' || TO_CHAR(TO_NUMBER(TO_CHAR(SYSDATE, 'YYYY')) - 3));
-- Collections
TYPE tc1 IS TABLE OF c1%RWTYPE;
-- Variables de type record
rtc1 tc1;
vCpt NUMBER:=0;
BEGIN
OPEN c1;
LOOP
FETCH c1 BULK COLLECT INTO rtc1 LIMIT 5000;
FORALL i IN 1..rtc1.COUNT
DELETE FROM J_EVT
WHERE RWID = rtc1(i).RWID;
COMMIT;
-- Nombres lus : 5025651
FOR i IN 1..rtc1.COUNT LOOP
vCpt := vCpt + SQL%BULK_RWCOUNT(i);
END LOOP;
EXIT WHEN c1%NOTFOUND;
END LOOP;
CLOSE c1;
COMMIT;
DBMS_OUTPUT.PUT_LINE ('Nombres supprimes : ' || TO_CHAR(vCpt));
END;
/
exit