我想创建一个名为OE的过程,它将根据我定义的数字输出文本。
例如,输入数字6将提供以下输出:
odd
even
odd
even
odd
even
= even steven!
并输入数字5将给出以下输出:
odd
even
odd
even
odd
= you oddball!
我对此非常陌生并且一直在努力使奇数正确加载(出于某种原因,它会陷入无限循环)。任何帮助,将不胜感激!这是我到目前为止所得到的:
CREATE OR REPLACE procedure oe
(p_n IN number)
AS
v_n number;
v_on number;
BEGIN
v_n := p_n;
v_on := p_n;
IF v_n>0 THEN LOOP
dbms_output.put_line('odd');
v_n := v_n-1;
dbms_output.put_line('even');
v_n := v_n-1;
If v_n=0 then
exit;
if v_on mod 2 > 0 then dbms_output.put_line('=' || ' you oddball!');
exit;
else
dbms_output.put_line('=' || ' even steven!');
exit;
end if;
end if;
end loop;
end if;
END;
/
答案 0 :(得分:1)
您没有正确使用退出条件,因此您的代码将进入无限循环。您可以简化逻辑,如下所示。让我知道它对你有用。 您可以添加一些验证以确保获得正确的输入参数,例如p_n> 0和其他。
CREATE OR REPLACE procedure oe
(p_n IN number)
AS
begin
for i in 1..p_n
loop
if mod(i,2)=1 then dbms_output.put_line('odd');
else dbms_output.put_line('even');
end if;
end loop;
if mod(p_n,2)=1 then dbms_output.put_line('= you oddball!');
else dbms_output.put_line('= even steven!');
end if;
end;
答案 1 :(得分:0)
hemalp108已经回答了这个问题,但我只是想补充一点,你甚至不需要填充程序的if/else
逻辑(除了可能处理小于1的值,我和#39;留下作为练习),因为我们有case
:
create or replace procedure oe
( p_n in number )
as
begin
for i in 1 .. p_n loop
dbms_output.put_line(case mod(i,2) when 1 then 'odd' else 'even' end);
end loop;
dbms_output.put_line(case mod(p_n,2) when 1 then '= you oddball!' else '= even steven!' end);
end;
(您可能还会注意到如何整齐地编写代码是调试代码的一半。)