【问题标题】:Error While generating pascal's triangle in plSQL在 plSQL 中生成帕斯卡三角形时出错
【发布时间】:2018-10-04 22:53:36
【问题描述】:

好吧,我对 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” 被调用,导致生成此错误。 *措施:更正错误消息中描述的问题或联系 有关详细信息,请联系应用程序管理员或 DBA。

【问题讨论】:

  • 检查这应该有帮助:thecrazyprogrammer.com/2017/10/…
  • 它来自 dbms_output。它在爆炸之前只能保存这么多数据。如果需要,您可以创建一个 CLOB
  • 感谢您的链接,但我并不真正需要代码,如果您能告诉我生成 错误 的原因是什么,我将不胜感激跨度>

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    SET SERVEROUTPUT ON SIZE UNLIMITED
    

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

    祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-24
      • 1970-01-01
      • 1970-01-01
      • 2013-11-19
      • 2014-11-12
      • 2015-01-29
      • 1970-01-01
      相关资源
      最近更新 更多