PL/PGSQL a vicerozmerna pole

Kluvanek Martin kluvanek na tesnet.cz
Úterý Leden 20 15:14:54 CET 2004


Jan Vysoky napsal(a):

> Dobry den,
> resim rekl bych pomerne trivialni problem, ale stale se mi neradi ani s pomoci dokumentace a googlu najit reseni.
> 
> CREATE OR REPLACE FUNCTION test() 
> RETURNS boolean
> AS'
>   declare 
>     i int4[][] = ''{}'';
>   begin
>     i[1][1] := 1;
> --->    i[1][2] := 1;  <---
>     return true;
>   end;
> '
> LANGUAGE 'plpgsql';
> 
> a po zavolani select test() dostanu na vyrazu oznacenem sipkou
> ERROR:  invalid array subscripts 
No ja som nieco trochu podobne riesil v ORA v PLSQL
a tam to bolo spravne takto:

CREATE OR REPLACE TYPE TYP_VSTUPY_MODULU AS VARRAY(128) of number;
-- atd...
declare
   pr mse.TYP_VSTUPY_MODULU:= mse.TYP_VSTUPY_MODULU();
   mi  mse.TYP_VSTUPY_MODULU:= mse.TYP_VSTUPY_MODULU();
   ma  mse.TYP_VSTUPY_MODULU:= mse.TYP_VSTUPY_MODULU();
   -- Local variables here
   i integer;
   ii integer;
begin
   pr.extend(96);
   mi.extend(96);
   ma.extend(96);
for ii in 1..1
loop
     for i in pr.first..pr.last
     loop
     pr(i):=i+10000+ii*1000;--nejake data
     mi(i):=i+20000+ii*1000;--nejake data
     ma(i):=i+30000+ii*1000;--nejake data
     end loop;
insert into mse.pomaly_archiv_2 values (1050, sysdate+ii/(24*60*60),12,pr,mi,ma)  ;
end loop;
commit;
end;

ten trik bol v tom extend, pretoze v declare som to zalozil ako prazdny vektor a 
tym extendom som to natiahol na vektor s 96 prvkami.
No a problem ze nemusim vzdy vediet kolko prvkov ma ten vektor pripadne i kde 
zacina riesi metoda .first a .last.
Tak to chodi v ORACLE snad bude nieco podobe i v PL/PGSQL ???
premene polia, mnoziny atd..

> 
> Uz opravdu nevim co s tim dal. Dekuji za rady.
> 
> 
> ____________________________________________________________
> Licitovat nejvyhodnejsi nabídku je postavene na hlavu! Skoda Octavia nyni se zvyhodnenim az 90.000 Kc! http://ad2.seznam.cz/redir.cgi?instance=69100%26url=http://www.skoda-auto.cz/action/fast
> 


-- 
Martin Kluvanek
ved.odd. vyvoje (head of development department)
TES s.r.o
Testovani Energetickych Systemu (Testing of Energetical Systems)

Prazska 597
674 01 Trebic
Czech republic
tel:568 8384 28  (+420 5688384 28)
fax:568 8384 27  (+420 5688384 27)
homepage: http://www.tesnet.cz



Další informace o konferenci Test