【问题标题】:sql) i want String outsql) 我想输出字符串
【发布时间】:2021-03-31 07:05:57
【问题描述】:
CREATE OR REPLACE PROCEDURE
pr(  v IN VARCHAR2 )  is
begin
     dbms_output.put(v);
end;
/

CREATE OR REPLACE 
PROCEDURE prt
(  n IN number )  
is
i number :=0;
begin
  LOOP
    i := i+1;
    exit when i=n ;
    pr(i);      
  END LOOP;
  pl(''); --dbms_output.new_line;
END;
/

set serveroutput on

exec prt(5);CREATE OR REPLACE PROCEDURE
pr(  v IN VARCHAR2 )  is
begin
     dbms_output.put(v);
end;
/

CREATE OR REPLACE 
PROCEDURE prt
(  n IN number )  
is
i number :=0;
begin
  LOOP
    i := i+1;
    exit when i=n ;
    pr(i);      
  END LOOP;
  pl(''); --dbms_output.new_line;
END;
/

set serveroutput on

exec prt(5);

该代码旨在仅输出输入的数字,但我想输出一个字符串而不是数字。所以我尝试用代码 pr(i||abc'); 创建它。但我遇到了一个错误。如果您能告诉我如何更正它以便我可以输出文本,我将不胜感激。

【问题讨论】:

  • 您需要非常小心退出语句。你有 exit when i=n ; 但是当有人进入 *exec prt(-1)" 时会发生什么。答案:运行了很长时间,然后得到溢出异常。

标签: sql plsql sqlplus


【解决方案1】:

你有一个“错误”?哪个错误?我没有:

SQL> CREATE OR REPLACE PROCEDURE pr (v IN VARCHAR2)
  2  IS
  3  BEGIN
  4     DBMS_OUTPUT.put_line (v);
  5  END;
  6  /

Procedure created.

SQL> CREATE OR REPLACE PROCEDURE prt (n IN NUMBER)
  2  IS
  3     i  NUMBER := 0;
  4  BEGIN
  5     LOOP
  6        i := i + 1;
  7        EXIT WHEN i = n;
  8        pr (i);
  9     END LOOP;
 10  END;
 11  /

Procedure created.

SQL> EXEC prt(5);
1
2
3
4

PL/SQL procedure successfully completed.

SQL>

连接的'abc':

SQL> CREATE OR REPLACE PROCEDURE prt (n IN NUMBER)
  2  IS
  3     i  NUMBER := 0;
  4  BEGIN
  5     LOOP
  6        i := i + 1;
  7        EXIT WHEN i = n;
  8        pr (i || 'abc');       --> concatenated abc
  9     END LOOP;
 10  END;
 11  /

Procedure created.

SQL> EXEC prt(5);
1abc
2abc
3abc
4abc

PL/SQL procedure successfully completed.

SQL>

【讨论】:

  • 更改pr(i)时出错;到 pr(i|abc');在循环语句中。我想要的是将结果更改为 abc abc abc 而不是 1 2 3 4。
  • 对我仍然有效;我添加了那个例子,看看。
  • 非常感谢您的回复。但是,会出现编译错误。这似乎是 sql 的问题,而不是代码。
  • 哪个编译错误?请编辑您的初始消息并复制/粘贴您的 SQL*Plus 会话,以便我们可以看到您做了什么以及 Oracle 是如何响应的。
猜你喜欢
  • 2016-08-17
  • 2023-01-20
  • 1970-01-01
  • 1970-01-01
  • 2020-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-30
相关资源
最近更新 更多