Hi,
ich hab hier ein kleines Beispiel. Dazu habe ich eine Minitabelle samt Inhalt erstellt (Inhalt ist egal):
Oracle8 Enterprise Edition Release 8.0.4.3.1 - Production
With the Partitioning and Objects options
PL/SQL Release 8.0.4.3.1 - Production
create table tabtest( name varchar2(20), zahl number);
insert into tabtest values ('Jan', 3);
insert into tabtest values ('Peter', 24);
insert into tabtest values ('Kalle', 17);
commit;
Dazu habe ich eine kleine Package erstellt, die den Inhalt der Tabelle ausliest und zurückgibt.
Sie hat zwei Funktionen: die eine gibt einen Ref-Cursor zurück, die andere eine PL/SQL-Tabelle.
Ich hoffe, das reicht Dir, wenn nicht, kannst Du mich gern fragen.
create or replace package QueryTabtest as
-- Zuerst einen Recordtypen definieren, als Beispiel meine Tabelle:
type r\_tabtest is record (rName tabtest.name%type, rZahl tabtest.zahl%type);
-- Dann einen Ref-Cursor definieren, der einen Record wie oben definiert zurückgibt:
type refc\_tabtest is ref cursor return r\_tabtest;
-- Dann einen Tabellentyp definieren (Achtung, keine DB-Tabelle sondern eine PL/SQL-Table!):
type tab\_tabtest is table of r\_tabtest index by binary\_integer;
-- Zwei Prozeduren für Select: die eine über Cursor, die andere über PL/SQL-Tabelle
procedure SelectCursor(pTabtestCursor IN OUT refc\_tabtest, pWhereClause IN VARCHAR2);
procedure SelectTable(pTabtestTable IN OUT tab\_tabtest, pWhereClause IN VARCHAR2);
end QueryTabtest;
/
create or replace package body QueryTabtest as
procedure SelectCursor(pTabtestCursor IN OUT refc\_tabtest, pWhereClause IN VARCHAR2) IS
vWhereClause varchar2(80) := nvl(pWhereClause, '%');
begin
open pTabtestCursor for
select Name, zahl
from tabtest
where Name like vWhereClause
order by zahl;
end;
procedure SelectTable(pTabtestTable IN OUT tab\_tabtest, pWhereClause IN VARCHAR2) IS
vWhereClause varchar2(80) := nvl(pWhereClause, '%');
n number := 1;
Cursor TabtestCur is
Select Name, Zahl
from tabtest
where Name like vWhereClause
order by zahl;
begin
open TabtestCur;
loop
fetch TabtestCur into pTabtestTable(n).rName, pTabtestTable(n).rZahl;
exit when TabtestCur%NOTFOUND;
n := n + 1;
end loop;
end;
end QueryTabtest;
/
Gruß
J.