Ошибка при генерации треугольника Паскаля в plSQL - PullRequest
0 голосов
/ 24 апреля 2018

Ну, я довольно новичок в 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" * Причина: Хранимая процедура 'rise_application_error' был вызван, что приводит к возникновению этой ошибки. * Действие: устраните проблему, как описано в сообщении об ошибке или свяжитесь с администратор приложения или администратор базы данных для получения дополнительной информации.

Ответы [ 2 ]

0 голосов
/ 24 апреля 2018

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

0 голосов
/ 24 апреля 2018

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

SET SERVEROUTPUT ON SIZE UNLIMITED

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

Удачи.

...