【问题标题】:getting ORA-06550 error [closed]出现 ORA-06550 错误 [关闭]
【发布时间】:2013-08-08 12:14:59
【问题描述】:
Declare
  type v_year_arr is varray(100) of emps%rowtype;
  v_deptid emps.department_id%type :=90;
  v_rem1 number(5,2);
  v_rem2 number(5,2);  
  v_rem3 number(5,2);
  v_year v_year_arr;
Begin
   select * bulk collect into v_year from emps where department_id = v_deptid;
   v_rem1 := MOD(v_year.yof,4);
   v_rem2 := MOD(v_year.yof,100);
   v_rem3 := MOD(v_year.yof,400);
   for i..v_year loop
      If (v_rem1=0 and v_rem2=0 and v_rem3=0)
      then
        DBMS_OUTPUT.PUT_LINE('Leap year :'||v_year.yof);
      else
        DBMS_OUTPUT.PUT_LINE('Not a Leap year :'||v_year.yof)
      End if;
   end loop;
end;

【问题讨论】:

  • 请解释一下什么是“v_year.yof”。
  • 请编辑您的问题并包含其他信息,例如错误消息的确切文本、标记哪一行的指示等。谢谢。

标签: plsql oracle10g varray


【解决方案1】:

我认为您最好使用游标 FOR 循环来编写此代码,如下所示:

Declare
  v_deptid emps.department_id%type :=90;
  v_rem1 number(5,2);
  v_rem2 number(5,2);  
  v_rem3 number(5,2);
Begin
  FOR aRow IN (select * from emps where department_id = v_deptid)
  LOOP
    v_rem1 := MOD(aRow.yof,4);
    v_rem2 := MOD(aRow.yof,100);
    v_rem3 := MOD(aRow.yof,400);

    If (v_rem1=0 and v_rem2<>0) or (v_rem2=0 and v_rem3=0) then
      DBMS_OUTPUT.PUT_LINE('Leap year :'||aRow.yof);
    else
      DBMS_OUTPUT.PUT_LINE('Not a Leap year :'||aRow.yof)
    End if;
  end loop;
end;

这消除了SELECT...BULK COLLECT INTO... 语句返回超过100 行的潜在问题。我还冒昧地纠正了您的闰年决定。

分享和享受。

【讨论】:

    猜你喜欢
    • 2010-11-22
    • 2015-08-24
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    • 2013-12-02
    相关资源
    最近更新 更多