[PL/SQL - Portal 9R2] procedure met een result set.

Pagina: 1
Acties:

  • JaQ
  • Registratie: Juni 2001
  • Laatst online: 23:19
Hi,

Ik ben bezig met Oracle Portal en daarin heb ik een package aangemaakt waar
1 van de procedures een tweetal parameters gebruikt. Een van deze 2 parameters
is een zogenaamde pl/sql table (array).

Uit de package definitie:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  TYPE rt_data IS RECORD
    (naam   varchar2(50)
    ,waarde varchar2(50)
    );
                                                                                                                             
  rec_data rt_data;

  TYPE tt_data IS TABLE OF rt_data
   INDEX BY BINARY_INTEGER;
                                                                                                                             
  tab_data tt_data;                                                                                                                             
                                                                                                                             
  procedure p_toon_header
   ( p_naam in varchar2
   , p_data in tab_data%type);


Vervolgens wil ik vanuit een form deze package aanroepen, zodat er netjes
waarden naar toe gaan (en ik maar op 1 centrale plaats mijn HTML hoef te
beheren). Dat doe ik als volgt:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
declare
                                                                                
  tab_data <<schema_naam>>.<<package_naam>>.tab_data%type;
  rec_data <<schema_naam>>.<<package_naam>>.rec_data%type;
                                                                                
begin
                                                                                
  -- vul variabelen --
  rec_data.naam := '0';
  rec_data.waarde := '0';
  tab_data(0) := rec_data;
                                                                                
  rec_data.naam := '1';
  rec_data.waarde := '1';
  tab_data (1) := rec_data;
                                                                                
  <<schema_naam>>.<<package_naam>>.p_toon_header('test',tab_data);
                                                                                
end;


Op deze manier kan ik netjes de waarden die in tab_data staan doorsturen naar
die procedure. Het eerst wat ik doe in die procedure is het aantal rijen dat in
tab_data staat naar buiten schrijven m.b.v. htp.p

code:
1
  htp.p('Het aantal rijen is ' || tab_data.count );


Alleen ik krijg 0 terug. ;(

Als ik gewoon eigenwijs toch probeer de waarde van tab_data(0).naam naar buiten
te schrijven, krijg ik een foutmelding (no data found), wat er op wijst dat om een of
andere reden de array leeg is. (ikke niet begrijp).

Heeft iemand enig i.d. waar dit aan kan liggen?

Nog even voor de puristen onder ons:
Het gaat om Oracle 9iAS R2 draaiend op RedHat 7.3, i.c.m. bijbehorende Oracle
Portal. Customer database is 9.0.2

wkr

Egoist: A person of low taste, more interested in themselves than in me


  • Goodielover
  • Registratie: November 2001
  • Laatst online: 18-08 11:34

Goodielover

Only The Best is Good Enough.

Als ik het goed zie is in je procedure de tabel een IN parameter. Volgens mij moet dit IN OUT zijn.

  • justmental
  • Registratie: April 2000
  • Niet online

justmental

my heart, the beat

Hij is leuk :)
Je definieert je table 'tab_data' in de package header.
In je procedure refereer je naar deze table ipv. je parameter 'p_data'.

Who is John Galt?


  • JaQ
  • Registratie: Juni 2001
  • Laatst online: 23:19
Goodielover >> nee, het moet geen In OUT zijn, aangezien ik de pl/sql tabel niet weer naar buiten geef (anders zou het iets van var = proc(pl/sql-tabel); moeten zijn.

justmental >> you are the man! je hebt me een perfecte hint gegeven.

In de procedure declareer ik een variabele met het type van tab_data, dat is goed (op die manier weet ik zeker dat het exact dezelfde datatypen zijn), alleen in de package pakte ik opnieuw tab_data (superglobal) i.p.v de parameter p_data.
Stomme fout van mijn zijde dus.

thx

Egoist: A person of low taste, more interested in themselves than in me