错误在plSQL中生成pascal三角形时

时间:2018-04-24 15:37:38

标签: sql oracle plsql buffer-overflow pascals-triangle

我对plSQL很新,我似乎无法弄清楚在尝试生成pascal三角形时我遇到的一些错误

以下是代码:

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'            被调用,导致生成此错误。 *操作:按错误消息或联系中所述更正问题            应用程序管理员或DBA以获取更多信息。

2 个答案:

答案 0 :(得分:0)

您遇到的问题与SQL * Plus(Oracle SQL客户端)有关,而不是编程语言PL / SQL。将SET SERVEROUTPUT ON更改为

的行
SET SERVEROUTPUT ON SIZE UNLIMITED

此错误可能,但是,表明您有一个无限循环,所以要小心。请注意,I似乎永远不会递增,N永远不会递减,因此从WHILE (I<N) LOOP开始的循环可能不会终止。

祝你好运。

答案 1 :(得分:0)

IN都没有更新过,所以你有一个无限循环。除此之外,错误表明正在超出DBMS_OUTPUT缓冲区。它的默认缓冲区大小为1,000,000字节,但您可以使用适当的DBMS_OUTPUT.ENABLE调用或SET SERVEROUTPUT SIZE语句进行调整。