Ошибка при создании треугольника Паскаля в plSQL

хорошо, я новичок в plSQL, и я не могу понять некоторые ошибки, которые я получаю при попытке создать треугольник Паскаля

Вот код:

SET SERVEROUTPUT ON;
DECLARE
    N NUMBER;
    I NUMBER;
    J NUMBER;
    K NUMBER;
    L NUMBER;
    T NUMBER;
    S NUMBER;
BEGIN
    DBMS_OUTPUT.PUT_LINE('ENTER THE LIMIT');
    N:=&N; 
    I:=0;
    T:=N-2;
    S:=0;
    L:=0;
    WHILE (I<N) LOOP
        J:=0;
        WHILE (J<T) LOOP
            DBMS_OUTPUT.PUT(' ');
            J:=J+1;
        END LOOP;
        K:=0;
        WHILE (K<=S) LOOP
            IF (K<=I) THEN
                DBMS_OUTPUT.PUT(K+1);
                L:=K;
            ELSE
                L:=L-1;
                DBMS_OUTPUT.PUT(L+1);
            END IF;
            K:=K+1;
        END LOOP;
        DBMS_OUTPUT.PUT_LINE('');
        T:=T-1;
        S:=S+2;
    END LOOP;
END;

Ошибки

Отчет об ошибке - ORA-20000: ORU-10027: переполнение буфера, предел 1000000 байт ORA-06512: в "SYS.DBMS_OUTPUT", строка 32 ORA-06512: в "SYS.DBMS_OUTPUT", строка 97 ORA-06512: в строке 29 20000. 00000 - "%s" *Причина: была вызвана хранимая процедура 'raise_application_error', из-за которой возникла эта ошибка. *Действие: устраните проблему, как описано в сообщении об ошибке, или обратитесь за дополнительной информацией к администратору приложения или администратору баз данных.


person Soutrik Mukherjee    schedule 24.04.2018    source источник


Ответы (2)


Ни I, ни N никогда не обновляются, поэтому у вас бесконечный цикл. Помимо этого, ошибка указывает на превышение буфера DBMS_OUTPUT. Размер буфера по умолчанию составляет 1 000 000 байт, хотя вы можете настроить его с помощью соответствующего вызова DBMS_OUTPUT.ENABLE или инструкции SET SERVEROUTPUT SIZE.

person Sentinel    schedule 24.04.2018

Проблема, с которой вы столкнулись, связана с SQL*Plus, клиентом Oracle SQL, а не с PL/SQL, языком программирования. Измените строку, которая говорит SET SERVEROUTPUT ON на

SET SERVEROUTPUT ON SIZE UNLIMITED

Однако эта ошибка может указывать на бесконечный цикл, поэтому будьте осторожны. Обратите внимание, что I никогда не увеличивается, а N никогда не уменьшается, поэтому цикл, начатый в WHILE (I<N) LOOP, может не завершиться.

Удачи.

person Bob Jarvis - Reinstate Monica    schedule 24.04.2018