【问题标题】:confused between dbms_output.put_line and dbms_output.put pl/sql在 dbms_output.put_line 和 dbms_output.put pl/sql 之间混淆
【发布时间】:2014-10-25 19:05:46
【问题描述】:

我试图做这样的事情 输入时:5

它会打印 A B C D E

输入:10

打印 A B C D E J I H G F

输入:15

打印 A B C D E J I H G F K L M N O

输入:20 A B C D E J I H G F K L M N O T S R Q P

等等…… 这是我创建的代码

    declare
    angka number := '&Angka';
    i number := trunc(angka/5);
    p number := 65;
    a number := 1;
    b number := 1;
begin
    while a <= b loop
    if mod(i,2) = 1 then
        a := 5;
        for b in 1..5 loop
            p := p + a
            dbms_output.put( chr(p) || ' ' );
            a := a - 1;
        end loop;
        p := p + 5;
    else
        a := 1;
        for b in 1..5 loop
            p := p + a
            dbms_output.put( chr(p) || ' ' );
            a := a + 1;
        end loop;
    end loop;
    dbms_output.put_line(' ');
end;
/

但我仍然很困惑它仍然没有工作 关于 dbms_output.put_line vs dbms_output.put 有人可以解释一下吗?因为我正在尝试使用 dbms_output.put 打印它没有显示.. 我不知道为什么

谢谢

【问题讨论】:

    标签: oracle plsql oracle11g


    【解决方案1】:

    首先,p := p + a 行没有以分号结束。理想情况下,PL/SQL 匿名块首先不应该编译。

    其次,使用PUT 程序,您还没有完成该行。它需要GET_LINES 从缓冲区中检索行数组。

    有一个类似的问题,Is dbms_output.put() being buffered differently from dbms_output.put_line()?

    【讨论】:

      【解决方案2】:

      您的代码中存在一些问题。我不相信您可以完全执行此代码。可能是您忘记复制其中的某些部分。

      首先,语法错误:

      declare
          angka number := '&Angka';
          i number := trunc(angka/5);
          p number := 65;
          a number := 1;
          b number := 1;
      begin
          while a <= b loop
          if mod(i,2) = 1 then
              a := 5;
              for b in 1..5 loop
                  p := p + a  -- ";" missed
                  dbms_output.put( chr(p) || ' ' );
                  a := a - 1;
              end loop;
              p := p + 5;
          else
              a := 1;
              for b in 1..5 loop
                  p := p + a  -- ";" missed
                  dbms_output.put( chr(p) || ' ' );
                  a := a + 1;
              end loop;
         -- here you missed "end if" 
          end loop;
      dbms_output.put_line(' ');
      end;
      /
      

      您也不需要外部循环(“while a

      for b in 1..5 loop
      

      oracle 在此处创建名为“b”的新变量,并且在循环中先前声明的 b 不可见。尝试执行此操作:

      declare
        b number := 111;
      begin
        for b in 1..5 loop
          dbms_output.put_line(b);
        end loop;
        dbms_output.put_line(b);
      end;
      /
      

      你会得到:

      1
      2
      3
      4
      5
      111
      

      如果您更正这些错误,您的代码将按您的意愿运行。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-25
        • 2012-09-13
        • 2011-12-08
        • 2016-09-22
        • 2015-06-01
        • 2020-01-08
        • 2012-10-21
        • 2011-09-22
        相关资源
        最近更新 更多