PL / SQL - 如何用最终输出重复交替文本给定次数?

时间:2016-10-04 06:57:49

标签: oracle plsql

我想创建一个名为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;
/

2 个答案:

答案 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;

(您可能还会注意到如何整齐地编写代码是调试代码的一半。)