用于返回的PL/SQL질문

用于返回的PL/SQL질문,sql,plsql,Sql,Plsql,如果您遇到RETURN,您应该停止并打印dbms_output_line v_sum; 不执行输出文本。 dbms_output.put_行'abc';即使我把它放在下面,它也不会打印。您应该阅读Oracle PL/SQL文档 您需要初始化变量v_sum。 要中断PL/SQL中的循环,请使用exit和notreturn。 dbms_output.put_行适用于VARCHAR而不是NUMBER,因此使用to_char来转换它。 如果您使用的是SQL*Plus,请确保将serveroutput设置

如果您遇到RETURN,您应该停止并打印dbms_output_line v_sum; 不执行输出文本。
dbms_output.put_行'abc';即使我把它放在下面,它也不会打印。

您应该阅读Oracle PL/SQL文档

您需要初始化变量v_sum。 要中断PL/SQL中的循环,请使用exit和notreturn。 dbms_output.put_行适用于VARCHAR而不是NUMBER,因此使用to_char来转换它。 如果您使用的是SQL*Plus,请确保将serveroutput设置为on 我相信下面的代码符合您的要求

声明 v_和数15,2; 开始 v_和:=0; 对于1..100循环中的i v_sum:=v_sum+i; 如果i=50,那么 出口 如果结束; 端环; dbms_output.put_line'v_sum='|到_charv_sum; 终止
是的,dbms_输出语句将在您不使用to_char的情况下工作。它使用隐式转换而不是显式转换。这是一个坏习惯。对于隐式预言,预言家猜测结果应该是什么;这不是一个好的猜测。依赖隐式转换会导致在猜测错误时极难找到bug。摆脱隐式转换习惯。只需谷歌甲骨文隐式转换。 既然如此,为什么要使用IF语句退出循环呢。所使用的for循环基本上是一个“promise”,它执行encloses语句一定次数。如果你的设计违背了这个承诺。是的,很少有退出的例外,但不是出于设计。这种设计上的退出使您的代码更长,更容易出错。这毕竟是问题的原因。要执行该循环50次,请按以下方式编写:

declare
v_sum number(15,2);
begin
for i in 1..100 Loop
v_sum := v_sum + i;
if i = 50 then
RETURN;
end if;
end loop;
dbms_output.put_line(v_sum);
end;
/
或者只需要一点数学知识

declare
  v_sum number(15,2);
begin
  v_sum := 0;
  for i in 1..50 Loop
    v_sum := v_sum + i;
  end loop;
  dbms_output.put_line('v_sum = ' || to_char(v_sum));
end;

非常感谢。初始值被分配给0。另一个不使用return的数字输出语句是一个问题,因为它在不使用to_Char的情况下工作正常。它使用出口而不是返回,所以它会打印。欢迎使用stackoverflow!请看一看
declare
  v_num integer := 50
begin
  dbms_output.put_line('sum(1..50) = ' || to_char(n*(n+1)/2));
end;