On May 7, 8:19=A0pm, Mark D Powell <Mark.Pow...@[EMAIL PROTECTED]
> wrote:
> On May 7, 4:37=A0pm, "stephen O'D" <stephen.odonn...@[EMAIL PROTECTED]
> wrote:
>
>
>
>
>
> > On May 7, 5:28 pm, Mark D Powell <Mark.Pow...@[EMAIL PROTECTED]
> wrote:
>
> > > On May 7, 4:07 am, Robert Klemme <shortcut...@[EMAIL PROTECTED]
> wrote:
>
> > > > On May 7, 6:51 am, m...@[EMAIL PROTECTED]
wrote:
>
> > > > > This is what I'm doing now... is there a better way?
> > > > > It would be great if there were some construct such
> > > > > as 'for i in x begin ... end;'
>
> > > > > =A0 =A0 i :=3D x.first;
> > > > > =A0 =A0 loop
> > > > > =A0 =A0 =A0 =A0 dbms_output.put_line(i);
> > > > > =A0 =A0 =A0 =A0 exit when i =3D x.last;
> > > > > =A0 =A0 =A0 =A0 i :=3D x.next(i);
> > > > > =A0 =A0 end loop;
>
> > > > > Many TIA!
> > > > > Mark
>
> > > > This will break for empty collections. =A0You can do
>
> > > > SQL> set serverout on
> > > > SQL> DECLARE =A0TYPE population_type IS TABLE OF NUMBER INDEX BY
> > > > VARCHAR2(64);
> > > > =A0 2 =A0 =A0continent_population population_type;
> > > > =A0 3 =A0 =A0which VARCHAR2(64);
> > > > =A0 4 =A0BEGIN
> > > > =A0 5 =A0 =A0dbms_output.put_line('-----------');
> > > > =A0 6
> > > > =A0 7 =A0 =A0which :=3D continent_population.FIRST;
> > > > =A0 8 =A0 =A0while which is not null loop
> > > > =A0 9 =A0 =A0 =A0dbms_output.put_line(which || ' -> ' ||
> > > > continent_population(which));
> > > > =A010 =A0 =A0 =A0which :=3D continent_population.NEXT(which);
> > > > =A011 =A0 =A0end loop;
> > > > =A012
> > > > =A013 =A0 =A0dbms_output.put_line('-----------');
> > > > =A014
> > > > =A015 =A0 =A0continent_population('Australia') :=3D 30000000;
> > > > =A016 =A0 =A0continent_population('Antarctica') :=3D 1000; --
Create=
s new
> > > > entry
> > > > =A017 =A0 =A0continent_population('Antarctica') :=3D 1001; --
Replac=
es
> > > > previous value
> > > > =A018
> > > > =A019 =A0 =A0which :=3D continent_population.FIRST;
> > > > =A020 =A0 =A0while which is not null loop
> > > > =A021 =A0 =A0 =A0dbms_output.put_line(which || ' -> ' ||
> > > > continent_population(which));
> > > > =A022 =A0 =A0 =A0which :=3D continent_population.NEXT(which);
> > > > =A023 =A0 =A0end loop;
> > > > =A024
> > > > =A025 =A0 =A0dbms_output.put_line('-----------');
> > > > =A026 =A0END;
> > > > =A027 =A0/
> > > > -----------
> > > > -----------
> > > > Antarctica -> 1001
> > > > Australia -> 30000000
> > > > -----------
>
> > > > PL/SQL procedure successfully completed.
>
> > > > SQL>
>
> > > > Cheers
>
> > > > robert
>
> > > >
seehttp://download.oracle.com/docs/cd/B19306_01/appdev.102/b14261/co=
llec......
>
> > > I think I would consider the For I in 1..n construct
>
> > > UT1 > l
> > > =A0 1 =A0declare
> > > =A0 2 =A0type t_array is table of varchar2(10) index by
binary_integer=
;
> > > =A0 3 =A0t_list =A0 t_array;
> > > =A0 4 =A0begin
> > > =A0 5 =A0t_list(1) :=3D 'one';
> > > =A0 6 =A0t_list(2) :=3D 'two';
> > > =A0 7 =A0t_list(3) :=3D 'three';
> > > =A0 8 =A0t_list(4) :=3D 'four';
> > > =A0 9 =A0t_list(5) :=3D 'five';
> > > =A010 =A0for I in 1..t_list.last loop
> > > =A011 =A0 =A0dbms_output.put_line(t_list(I));
> > > =A012 =A0end loop;
> > > =A013* end;
> > > UT1 > /
> > > one
> > > two
> > > three
> > > four
> > > five
>
> > > PL/SQL procedure successfully completed.
>
> > > Again as Robert warned in his solution the array should not be
empty.
>
> > > HTH -- Mark D Powell --
>
> > I am fairly sure if you do
>
> > for i in 1 .. v_array.count loop
> > =A0 null;
> > end loop;
>
> > It will happily handle an empty array (don't have access to Oracle
> > right now to check).- Hide quoted text -
>
> > - Show quoted text -
>
> Your are probably correct. =A0My quick test failed however using
> table.count instead of table.last like I did would probably be a
> better idea and would be worth testing. =A0It has been over 3 years
> since I wrote any PL/SQL code worth mentioning. =A0After posting I
> though I should have tested table.first .. table.last also. =A0Maybe
> tomorrow I will find some spare time.
>
> -- Mark D Powell --- Hide quoted text -
>
> - Show quoted text -
I ran a test and a for loop with table.count works with an empty set.
The same test with table.first .. table.last does not though first to
last works fine with data.
Just use my previously posted code to duplicate.
-- Mark D Powell --


|