首页 > 解决方案 > 语句未在 pl/sql 中打印

问题描述

没有打印一行

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 打印的行不会被打印。如果只有一个这样的条目,那么它就会被打印出来。

标签: oracleplsqloracle-apex

解决方案


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;

推荐阅读