Collection Methods Example In Oracle
EXISTS:
--Collection Methods Example In Oracle: EXISTS
set serveroutput on;
declare
type t_num is table of number;
v_num t_num := t_num(1, 3, 5);
begin
if v_num.exists(1) then
dbms_output.put_line('Element 1 exists.');
end if;
if v_num.exists(4) then
dbms_output.put_line('Element 4 exists.');
else
dbms_output.put_line('Element 4 does not exists.');
end if;
if v_num.exists(2) = TRUE then
dbms_output.put_line('Element 2 exists.');
else
dbms_output.put_line('Element 2 does not exists.');
end if;
end;
/ Output:
COUNT:
--Collection Methods Example In Oracle: COUNT
set serveroutput on;
declare
type t_num is table of number;
v_num t_num := t_num(1, 3, 5, 8);
begin
dbms_output.put_line('No of elements in the List -> '||v_num.count);
for i in 1..v_num.count
loop
dbms_output.put_line('Element at '||i||' is -> '||v_num(i));
end loop;
end;
/ Output:
No of elements in the List -> 4
Element at 1 is -> 1
Element at 2 is -> 3
Element at 3 is -> 5
Element at 4 is -> 8
LIMIT:
--Collection Methods Example In Oracle: LIMIT
set serveroutput on;
declare
type t_num is varray(10) of number;
v_num t_num := t_num(1, 3, 5, 8);
begin
dbms_output.put_line('No of elements in the List -> '||v_num.limit);
dbms_output.put_line('No of elements in the List -> '||v_num.count);
for i in 1..v_num.count
loop
dbms_output.put_line('Element at '||i||' is -> '||v_num(i));
end loop;
end;
/ Output:
No of elements in the List -> 10
No of elements in the List -> 4
Element at 1 is -> 1
Element at 2 is -> 3
Element at 3 is -> 5
Element at 4 is -> 8
FIRST & LAST:
--Collection Methods Example In Oracle: FIRST & LAST
set serveroutput on;
declare
type t_num is table of number;
v_num t_num := t_num(10, 3, 5, 8);
begin
dbms_output.put_line('First Position is '||v_num.first);
dbms_output.put_line('Last Position is '||v_num.last);
for i in v_num.first..v_num.last
loop
if i = v_num.first then
dbms_output.put_line('First element is '||v_num(i));
end if;
dbms_output.put_line('Element at '||i||' is ->'||v_num(i));
if i = v_num.last then
dbms_output.put_line('Last element is '||v_num(i));
end if;
end loop;
end;
/ First Position is 1
Last Position is 4
First element is 10
Element at 1 is ->10
Element at 2 is ->3
Element at 3 is ->5
Element at 4 is ->8
First element is 8
Output:
PRIOR & NEXT:
--Collection Methods Example In Oracle: PRIOR & NEXT
set serveroutput on;
declare
type t_num is table of number;
v_num t_num := t_num(1, 3, 5, 8);
begin
if v_num.prior(v_num.first) is null then
dbms_output.put_line('Cannot go prior first element.');
end if;
if v_num.next(v_num.last) is null then
dbms_output.put_line('Cannot go beyond last element.');
end if;
dbms_output.put_line('Second element is ->'||v_num.next(1));
end;
/
Output:
Cannot go prior first element.
Cannot go beyond last element.
Second element is ->2
Note:
When there is a gap between consecutive elements then we will use While loop
Use Prior & Next for traversing through the loop
--Collection Methods Example In Oracle: PRIOR & NEXT
set serveroutput on;
declare
type t_num is table of number;
v_num t_num := t_num(1, 3, 5, 8);
v_cnt integer;
begin
v_cnt := v_num.first;
while v_cnt is not null
loop
dbms_output.put_line('Element at '||v_cnt||' is ->'||v_num(v_cnt));
v_cnt := v_num.next(v_cnt);
end loop;
--Reverse order
dbms_output.put_line('Reverse Order');
v_cnt := v_num.last;
while v_cnt is not null
loop
dbms_output.put_line('Element at '||v_cnt||' is ->'||v_num(v_cnt));
v_cnt := v_num.prior(v_cnt);
end loop;
end;
/ Output:
Element at 1 is ->1
Element at 2 is ->3
Element at 3 is ->5
Element at 4 is ->8
Reverse Order
Element at 4 is ->8
Element at 3 is ->5
Element at 2 is ->3
Element at 1 is ->1
Note:
When traversing through elements Prior & Next skip deleted elements
--Collection Methods Example In Oracle: PRIOR & NEXT
set serveroutput on;
declare
type t_num is table of number;
v_num t_num := t_num(1, 3, 5, 8);
v_cnt integer;
begin
v_num.delete(2); --Deleted 2nd element
v_cnt := v_num.first;
while v_cnt is not null
loop
dbms_output.put_line('Element at '||v_cnt||' is ->'||v_num(v_cnt));
v_cnt := v_num.next(v_cnt);
end loop;
end;
/ Output:
Element at 1 is ->1
Element at 3 is ->5
Element at 4 is ->8
EXTENDS:
EXTENDS WITH NO ARGUMENTS NESTED TABLE:
--Collection Methods Example In Oracle: EXTENDS WITH NO ARGUMENTS NESTED TABLE
set serveroutput on;
declare
type t_num is table of number;
v_num t_num := t_num();
begin
v_num.extend;
v_num(1) := 100;
dbms_output.put_line('Value of v_num -> '||v_num(1));
end;
/ OUTPUT:
PL/SQL procedure successfully completed.
Value of v_num -> 100
EXTENDS WITH NO ARGUMENTS VARRAY:
--Collection Methods Example In Oracle: EXTENDS WITH NO ARGUMENTS VARRAY
set serveroutput on;
declare
type t_num is varray(10) of number;
v_num t_num := t_num();
begin
v_num.extend;
v_num(1) := 100;
dbms_output.put_line('Value of v_num -> '||v_num(1));
end;
/ OUTPUT:
PL/SQL procedure successfully completed.
Value of v_num -> 100
EXTEND WITH SINGLE ARGUMENT:
--Collection Methods Example In Oracle: EXTENDS WITH SINGLE ARGUMENT
set serveroutput on;
declare
type t_num is table of number;
v_num t_num := t_num();
begin
v_num.extend(3);
v_num(1) := 100;
v_num(2) := 200;
v_num(3) := 300;
for i in 1..v_num.count
loop
dbms_output.put_line('Value of v_num ('||i||') -> '||v_num(i));
end loop;
end;
/ OUTPUT:
PL/SQL procedure successfully completed.
Value of v_num (1) -> 100
Value of v_num (2) -> 200
Value of v_num (3) -> 300
EXTEND WITH TWO ARGUMENTS:
--Collection Methods Example In Oracle: EXTENDS WITH TWO ARGUMENTS
set serveroutput on;
declare
type t_num is table of number;
v_num t_num := t_num(10, 15);
begin
v_num.extend;
v_num(3) := 20;
--
for i in 1..v_num.count
loop
dbms_output.put_line('Value of v_num ('||i||') -> '||v_num(i));
end loop;
--
dbms_output.put_line('Extending 5 copies of 3td element');
dbms_output.new_line;
v_num.extend(5, 3);
--
for i in 1..v_num.count
loop
dbms_output.put_line('Value of v_num ('||i||') -> '||v_num(i));
end loop;
end;
/ OUTPUT:
PL/SQL procedure successfully completed.
Value of v_num (1) -> 10
Value of v_num (2) -> 15
Value of v_num (3) -> 20
Extending 5 copies of 3td element
Value of v_num (1) -> 10
Value of v_num (2) -> 15
Value of v_num (3) -> 20
Value of v_num (4) -> 20
Value of v_num (5) -> 20
Value of v_num (6) -> 20
Value of v_num (7) -> 20
Value of v_num (8) -> 20
DELETE:
DELETE SPECIFIC ELEMENT:
--Collection Methods Example In Oracle: DELETE
set serveroutput on;
declare
type t_num is table of number;
v_num t_num := t_num(10, 15, 20, 25, 30);
begin
--
for i in 1..v_num.last
loop
dbms_output.put_line('Value of v_num ('||i||') -> '||v_num(i));
end loop;
--
dbms_output.new_line;
dbms_output.put_line('Deleting 3rd element');
dbms_output.new_line;
v_num.delete(3);
--
for i in 1..v_num.last
loop
if v_num.exists(i) then
dbms_output.put_line('Value of v_num ('||i||') -> '||v_num(i));
end if;
end loop;
end;
/ OUTPUT:
PL/SQL procedure successfully completed.
Value of v_num (1) -> 10
Value of v_num (2) -> 15
Value of v_num (3) -> 20
Value of v_num (4) -> 25
Value of v_num (5) -> 30
Deleting 3rd element
Value of v_num (1) -> 10
Value of v_num (2) -> 15
Value of v_num (4) -> 25
Value of v_num (5) -> 30
DELETING RANGE ELEMENTS:
--Collection Methods Example In Oracle: DELETING RANGE ELEMENTS
set serveroutput on;
declare
type t_num is table of number;
v_num t_num := t_num(10, 15, 20, 25, 30, 35);
begin
--
for i in 1..v_num.last
loop
dbms_output.put_line('Value of v_num ('||i||') -> '||v_num(i));
end loop;
--
dbms_output.new_line;
dbms_output.put_line('Deleting 2nd to 4th elements');
dbms_output.new_line;
v_num.delete(2,3);
--
for i in 1..v_num.last
loop
if v_num.exists(i) then
dbms_output.put_line('Value of v_num ('||i||') -> '||v_num(i));
end if;
end loop;
end;
/ OUTPUT:
PL/SQL procedure successfully completed.
Value of v_num (1) -> 10
Value of v_num (2) -> 15
Value of v_num (3) -> 20
Value of v_num (4) -> 25
Value of v_num (5) -> 30
Value of v_num (6) -> 35
Deleting 2nd to 4th elements
Value of v_num (1) -> 10
Value of v_num (4) -> 25
Value of v_num (5) -> 30
Value of v_num (6) -> 35
DELETING ALL ELEMENTS:
--Collection Methods Example In Oracle: DELETING ALL ELEMENTS
set serveroutput on;
declare
type t_num is table of number;
v_num t_num := t_num(10, 15, 20, 25, 30, 35);
begin
--
for i in 1..v_num.last
loop
dbms_output.put_line('Value of v_num ('||i||') -> '||v_num(i));
end loop;
--
dbms_output.new_line;
dbms_output.put_line('Deleting all elements');
dbms_output.new_line;
v_num.delete;
--
begin
for i in 1..v_num.last
loop
if v_num.exists(i) then
dbms_output.put_line('Value of v_num ('||i||') -> '||v_num(i));
end if;
end loop;
exception
when others then
dbms_output.put_line('Error -> No elements are exists');
end;
end;
/ OUTPUT:
PL/SQL procedure successfully completed.
Value of v_num (1) -> 10
Value of v_num (2) -> 15
Value of v_num (3) -> 20
Value of v_num (4) -> 25
Value of v_num (5) -> 30
Value of v_num (6) -> 35
Deleting all elements
Error -> No elements are exists
TRIM:
TRIM LAST ELEMENT:
--Collection Methods Example In Oracle: TRIMING LAST ELEMENT
set serveroutput on;
declare
type t_num is table of number;
v_num t_num := t_num(10, 15, 20, 25, 30, 35);
begin
--
for i in 1..v_num.last
loop
dbms_output.put_line('Value of v_num ('||i||') -> '||v_num(i));
end loop;
--
dbms_output.new_line;
dbms_output.put_line('Trim last elements');
dbms_output.new_line;
v_num.trim;
--
begin
for i in 1..v_num.last
loop
if v_num.exists(i) then
dbms_output.put_line('Value of v_num ('||i||') -> '||v_num(i));
else
dbms_output.put_line('No element is exists');
end if;
end loop;
exception
when others then
dbms_output.put_line('Error -> No elements are exists');
end;
end;
/ OUTPUT:
PL/SQL procedure successfully completed.
Value of v_num (1) -> 10
Value of v_num (2) -> 15
Value of v_num (3) -> 20
Value of v_num (4) -> 25
Value of v_num (5) -> 30
Value of v_num (6) -> 35
Trim last elements
Value of v_num (1) -> 10
Value of v_num (2) -> 15
Value of v_num (3) -> 20
Value of v_num (4) -> 25
Value of v_num (5) -> 30
TRIM LAST TWO ELEMENTS:
--Collection Methods Example In Oracle: TRIMING LAST TWO ELEMENTS
set serveroutput on;
declare
type t_num is table of number;
v_num t_num := t_num(10, 15, 20, 25, 30, 35);
begin
--
for i in 1..v_num.last
loop
dbms_output.put_line('Value of v_num ('||i||') -> '||v_num(i));
end loop;
--
dbms_output.new_line;
dbms_output.put_line('Trim last 2 elements');
dbms_output.new_line;
v_num.trim(2);
--
begin
for i in 1..v_num.last
loop
if v_num.exists(i) then
dbms_output.put_line('Value of v_num ('||i||') -> '||v_num(i));
else
dbms_output.put_line('No element is exists');
end if;
end loop;
exception
when others then
dbms_output.put_line('Error -> No elements are exists');
end;
end;
/ OUTPUT:
PL/SQL procedure successfully completed.
Value of v_num (1) -> 10
Value of v_num (2) -> 15
Value of v_num (3) -> 20
Value of v_num (4) -> 25
Value of v_num (5) -> 30
Value of v_num (6) -> 35
Trim last 2 elements
Value of v_num (1) -> 10
Value of v_num (2) -> 15
Value of v_num (3) -> 20
Value of v_num (4) -> 25
TRIM ALL ELEMENTS:
--Collection Methods Example In Oracle: TRIMING ALL ELEMENTS set serveroutput on; declare type t_num is table of number; v_num t_num := t_num(10, 15, 20, 25, 30, 35); begin -- for i in 1..v_num.last loop dbms_output.put_line('Value of v_num ('||i||') -> '||v_num(i)); end loop; -- dbms_output.new_line; dbms_output.put_line('Trim all elements'); dbms_output.new_line; v_num.trim(v_num.count); -- begin for i in 1..v_num.last loop if v_num.exists(i) then dbms_output.put_line('Value of v_num ('||i||') -> '||v_num(i)); else dbms_output.put_line('No element is exists'); end if; end loop; exception when others then dbms_output.put_line('Error -> No elements are exists'); end; end; /
OUTPUT:
PL/SQL procedure successfully completed.
Value of v_num (1) -> 10
Value of v_num (2) -> 15
Value of v_num (3) -> 20
Value of v_num (4) -> 25
Value of v_num (5) -> 30
Value of v_num (6) -> 35
Trim all elements
Error -> No elements are exists