语句未在 pl/sql 中打印
Posted
技术标签:
【中文标题】语句未在 pl/sql 中打印【英文标题】:Statement not getting printing in pl/sql 【发布时间】:2020-09-24 09:25:08 【问题描述】:一行没有被打印出来
DECLARE
R integer(10);
N varchar(20);
B VArchar(20);
Y VARCHAR(10);
A Integer(10);
E varchar2(10);
CURSOR s IS
SELECT RollNo,Name, Branch, Year, Attendance_Percentage, Event FROM N_ROLLCALL
WHERE branch='Comp' ORDER BY ROLLNO;
BEGIN
OPEN s;
LOOP
FETCH s INTO R,N,B,Y,A,E ;
EXIT WHEN s%notfound;
BEGIN
DBMS_OUTPUT.PUT_LINE(' ROLLNO:'||R||' NAME:'||N||' BRANCH:'||B||' YEAR:'||Y||' ATTANDANCE_PERCENTAGE:'||A||' EVENTS:'||E);
END;
END LOOP;
CLOSE s;
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
dbms_output.put_line('You have tried to insert a duplicate roll_no.');
WHEN OTHERS THEN
dbms_output.put_line ('An error has occurred inserting a roll_no.');
END;
我得到的输出
已插入 1 行。
0.01 秒
但是,当我的行多于一个具有分支 ='comp' 的行时,我想使用 dbms_output.put_line 打印的行不会被打印。如果只有一个这样的条目,那么它就会被打印出来。
【问题讨论】:
你用的是什么客户端?打印消息通常需要在客户端手动开启。 我是 oracle apex,我已经创建了一个表 n_rollcall。我想从“comp”分支打印学生的详细信息,但没有打印任何内容。 在调用此代码 nlock 之前,您是否从控制台发出了命令SET SERVEROUTPUT ON
。
其实我并没有在控制台上运行这段代码,我正在使用一个名为 apex oracle 的在线工具。
在 Apex 的哪里?它是 SQL Workshop,还是在您的某个应用程序/页面的进程中?
【参考方案1】:
DBMS_OUTPUT
在使用 APEX 时不会打印,因为它不是从控制台运行的。要显示成功消息,您需要将全局变量 APEX_APPLICATION.g_print_success_message
设置为您想要的成功消息。如果您想引发错误,您将需要使用 APEX_ERROR
包。如果使用 APEX_ERROR 包添加了任何错误,则在 APEX 完成处理后不会提交任何事务。
DECLARE
R INTEGER (10);
N VARCHAR (20);
B VARCHAR (20);
Y VARCHAR (10);
A INTEGER (10);
E VARCHAR2 (10);
CURSOR s IS
SELECT RollNo,
Name,
Branch,
Year,
Attendance_Percentage,
Event
FROM N_ROLLCALL
WHERE branch = 'Comp'
ORDER BY ROLLNO;
BEGIN
OPEN s;
LOOP
FETCH s
INTO R,
N,
B,
Y,
A,
E;
EXIT WHEN s%NOTFOUND;
BEGIN
APEX_APPLICATION.g_print_success_message (
' ROLLNO:'
|| R
|| ' NAME:'
|| N
|| ' BRANCH:'
|| B
|| ' YEAR:'
|| Y
|| ' ATTANDANCE_PERCENTAGE:'
|| A
|| ' EVENTS:'
|| E);
END;
END LOOP;
CLOSE s;
EXCEPTION
WHEN DUP_VAL_ON_INDEX
THEN
apex_error.add_error (p_message => 'You have tried to insert a duplicate roll_no.',
p_display_location => apex_error.c_inline_in_notification);
WHEN OTHERS
THEN
apex_error.add_error (p_message => 'An error has occurred inserting a roll_no.',
p_display_location => apex_error.c_inline_in_notification);
END;
【讨论】:
我不确定是否支持直接修改 g_print_success_message。 你在哪里得到错误?引发的错误是什么?您使用的是什么版本的 APEX? 我想打印行 DBMS_OUTPUT.PUT_LINE(' ROLLNO:'||R||' NAME:'||N||' BRANCH:'||B||' YEAR:'| |Y||' ATTANDANCE_PERCENTAGE:'||A||' 事件:'||E);但是什么都没有打印出来。我正在使用 apex oracle,因为我正在使用 SQL Workshop。以上是关于语句未在 pl/sql 中打印的主要内容,如果未能解决你的问题,请参考以下文章