如何正确输出PL/SQL
我在一个.sql文件中有两块代码。一个块是函数,另一个是过程。在第一个块中,我运行一个查询并将它打印到屏幕上(我使用DBMS_OUTPUT.PUT_LINE()),用于它自己行中的每一行。然后,该过程有另一个查询需要打印在同一行上(我使用的是DBMS_OUTPUT.PUT())。当我对第二个块使用DBMS_OUTPUT.PUT()时,由于某种原因,它会使第一个块出错,并且第一个块永远不会打印 以下是代码的链接: (代码的相关部分在第97-103行附近) 当我在过程中使用DBMS_OUTPUT.PUT_LINE()时,所有内容都会正确显示,但当我在过程中使用DBMS_OUTPUT.PUT()时,看起来该函数从未被调用 下面是PUT_LINE()的输出结果: 以下是just PUT()的输出: 我认为这与缓冲区大小有关,但我不太确定是什么/为什么如何正确输出PL/SQL,sql,oracle,plsql,Sql,Oracle,Plsql,我在一个.sql文件中有两块代码。一个块是函数,另一个是过程。在第一个块中,我运行一个查询并将它打印到屏幕上(我使用DBMS_OUTPUT.PUT_LINE()),用于它自己行中的每一行。然后,该过程有另一个查询需要打印在同一行上(我使用的是DBMS_OUTPUT.PUT())。当我对第二个块使用DBMS_OUTPUT.PUT()时,由于某种原因,它会使第一个块出错,并且第一个块永远不会打印 以下是代码的链接: (代码的相关部分在第97-103行附近) 当我在过程中使用DBMS_OUTPUT.P
任何帮助都将不胜感激 为什么不根据需要将结果附加到VARCHAR2变量,然后在行完成时将该字符串放在行中?这样您就可以控制格式了。为什么不根据需要将结果附加到VARCHAR2变量,然后在行完成时将该字符串放在行中?这样您就可以控制格式设置。第二个存储过程的代码片段:
FOR player IN rows LOOP
currentCount := maxCount;
DBMS_OUTPUT.PUT(player.FIRSTNAME || ' ' || player.LASTNAME || ':' || player.points || ' ');
--DBMS_OUTPUT.NEW_LINE();
END LOOP;
如果希望结果输出显示为一行,则应将DBMS\u output.NEW\u line()
移动到循环外部(循环之后)。因此,您的代码如下所示:
FOR player IN rows LOOP
currentCount := maxCount;
DBMS_OUTPUT.PUT(player.FIRSTNAME || ' ' || player.LASTNAME || ':' || player.points || ' ');
END LOOP;
DBMS_OUTPUT.NEW_LINE();
保持DBMS_输出.NEW_行()在DBMS\u输出之后的循环内进行code>操作。PUT
您只需模拟DBMS\u输出。PUT\u LINE
过程
SQL> create or replace procedure output1
2 is
3 l_str varchar2(100);
4 l_status number;
5 begin
6 for i in 1..7
7 loop
8 dbms_output.put('Text_' || To_char(i));
9 dbms_output.new_line;
10 end loop;
11 end;
12 /
Procedure created
SQL>
SQL> create or replace procedure output2
2 is
3 l_str varchar2(100);
4 l_status number;
5 begin
6 for i in 1..7
7 loop
8 dbms_output.put('Text_' || To_char(i));
9 end loop;
10 dbms_output.new_line;
11 end;
12 /
Procedure created
SQL> exec output1;
Text_1
Text_2
Text_3
Text_4
Text_5
Text_6
Text_7
PL/SQL procedure successfully completed
SQL> exec output2;
Text_1Text_2Text_3Text_4Text_5Text_6Text_7
PL/SQL procedure successfully completed
在代码中:
SET serveroutput ON size 32000;
REM Change output file name TO proj3-NetID.OUT!
SPOOL proj3-hgeorge3.OUT;
exec DBMS_OUTPUT.enable('100000000');
如果使用了serveroutput
选项(设置为ON),则无需调用DBMS\u OUTPUT.enable
过程。如果它碰巧调用了DBMS\u OUTPUT.enable
,那么数字数据类型的值应该作为参数而不是字符串传入。是的,会有数据类型的隐式转换,但最好避免这种转换。缓冲区的最大大小为100万。第二个存储过程的代码片段:
FOR player IN rows LOOP
currentCount := maxCount;
DBMS_OUTPUT.PUT(player.FIRSTNAME || ' ' || player.LASTNAME || ':' || player.points || ' ');
--DBMS_OUTPUT.NEW_LINE();
END LOOP;
如果希望结果输出显示为一行,则应将DBMS\u output.NEW\u line()
移动到循环外部(循环之后)。因此,您的代码如下所示:
FOR player IN rows LOOP
currentCount := maxCount;
DBMS_OUTPUT.PUT(player.FIRSTNAME || ' ' || player.LASTNAME || ':' || player.points || ' ');
END LOOP;
DBMS_OUTPUT.NEW_LINE();
保持DBMS_输出.NEW_行()在DBMS\u输出之后的循环内进行code>操作。PUT
您只需模拟DBMS\u输出。PUT\u LINE
过程
SQL> create or replace procedure output1
2 is
3 l_str varchar2(100);
4 l_status number;
5 begin
6 for i in 1..7
7 loop
8 dbms_output.put('Text_' || To_char(i));
9 dbms_output.new_line;
10 end loop;
11 end;
12 /
Procedure created
SQL>
SQL> create or replace procedure output2
2 is
3 l_str varchar2(100);
4 l_status number;
5 begin
6 for i in 1..7
7 loop
8 dbms_output.put('Text_' || To_char(i));
9 end loop;
10 dbms_output.new_line;
11 end;
12 /
Procedure created
SQL> exec output1;
Text_1
Text_2
Text_3
Text_4
Text_5
Text_6
Text_7
PL/SQL procedure successfully completed
SQL> exec output2;
Text_1Text_2Text_3Text_4Text_5Text_6Text_7
PL/SQL procedure successfully completed
在代码中:
SET serveroutput ON size 32000;
REM Change output file name TO proj3-NetID.OUT!
SPOOL proj3-hgeorge3.OUT;
exec DBMS_OUTPUT.enable('100000000');
如果使用了serveroutput
选项(设置为ON),则无需调用DBMS\u OUTPUT.enable
过程。如果它碰巧调用了DBMS\u OUTPUT.enable
,那么数字数据类型的值应该作为参数而不是字符串传入。是的,会有数据类型的隐式转换,但最好避免这种转换。缓冲区的最大大小为100万。您是否尝试添加DBMS\u OUTPUT.NEW\u LINE()代码>在循环之后?我的意思是在所有的DBMS\u OUTPUT.PUT()
命令之后?您是否尝试添加DBMS\u OUTPUT.NEW\u LINE()代码>在循环之后?我的意思是在所有的DBMS\u OUTPUT.PUT()
命令之后?对于您的回答的第一部分:我不能把它放在外面,因为任务要求我们基本上构建三角形,所以它看起来像:第1行(\n)第2行,第3行(\n)第4行,第5行,第6行(\n)第7行,第8行,第9行,第10行(\n)第11行,第12行,第13行,第14行(\n)回答的第一部分:我不能把它放在外面,因为作业要求我们基本上建立三角形,所以它看起来像:第1行(\n)第2行,第3行(\n)第4行,第5行,第6行(\n)第7行,第8行,第9行,第10行(\n)第11行,第12行,第13行,第14行(\n)等等。这是个好主意。我觉得自己很傻,没有先想到那件事。谢谢那是个好主意。我觉得自己很傻,没有先想到那件事。谢谢