0

for ループで if else 条件を設定することは可能でしょうか

例えば

  IF (emp_no IS NULL) then
 for i in (select * from employees where emp_no= p_retval)
else
 for i in (select * from employees where emp_no= p_retval_withcond)
end if;

上記を試してみると、コンパイルエラーが発生しました。

よろしく

4

2 に答える 2

3

構造は次のとおりです。

IF (emp_no IS NULL) then
  for i in (select * from employees where emp_no= p_retval)
  loop
    -- loop actions
  end loop;
else
  for i in (select * from employees where emp_no= p_retval_withcond)
  loop
    -- second loop actions
  end loop;
end if;
于 2012-09-17T11:21:14.617 に答える
1

forループでは不可能ですが、ループ内のアクションが2つのケースで似ている場合は、カーソルでこれを行います。

declare
cursor c1 is select * from employees where emp_no= p_retval;
cursor c2 is select * from employees where emp_no= p_retval_withcond;
ligne employees%rowtype;
.....
begin
   IF (emp_no IS NULL) then
      open c1;
   ELSE
      open C2;
   END IF;
   loop
      IF (emp_no IS NULL) then
         fetch C1 into ligne;
         exit when c1%notfound;
      ELSE
         fetch C2 into ligne;
         exit when c2%notfound;
      END IF;
      -- loop actions
      ....  
   end loop;
   IF (emp_no IS NULL) then
      close c1;
   ELSE
      close C2;
   END IF;
end;
于 2012-09-17T12:19:53.300 に答える