Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



oracle: "bulk collect" vice rowtypes v jednom selectu

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: oracle: "bulk collect" vice rowtypes v jednom selectu

Autor: griffin

12:12:36 14.11.2011

perfekt! funguje to tak jak sem si predstavoval. diky.

jeste prikladam na cem sem to zkusil:[code]
declare
-- dummy select
cursor c_o is
select
da.dummy a
,db.dummy b
,iw.c c
from
dual da
cross join
dual db
cross join (
select 'Q1' c from dual
union all
select 'Q2' c from dual
) iw
;
type t_o is table of c_o%rowtype;
var_o t_o := t_o();
i pls_integer;
begin
open c_o;
loop
fetch c_o
bulk collect into var_o
limit 100;

exit when var_o.count=0;

i:= var_o.first();
while i is not null loop
dbms_output.put_line('a:'||var_o(i).a||', b:'||var_o(i).b||', c:'||var_o(i).c);
i:= var_o.next(i);
end loop;

end loop;
close c_o;
end;
/

----- dbms_ouput -----
a:X, b:X, c:Q1
a:X, b:X, c:Q2[/code]

Citovat příspěvek

 

Re: oracle: "bulk collect" vice rowtypes v jednom selectu

Autor: griffin

11:11:22 14.11.2011

diky za tip. jak bude cas tak hnedka vyzkousim a dam vedet.

Citovat příspěvek

 

Re: oracle: "bulk collect" vice rowtypes v jednom selectu

Autor: steel

22:39:33 12.11.2011

Zavisi na co to potrebujes.

Nieco taketo si skusal?

declare
cursor c_o is
select
table_a.*
,table_b.*
from
table_a
inner join table_b on ...;

type t_co is table of c_o%rowtype;
v_co t_co;
begin
open c_o;
loop
fetch c_o bulk collect into v_co limit 100;
exist when v_co.count = 0;

...

end loop;
close c_o;
end;

Citovat příspěvek

 

oracle: "bulk collect" vice rowtypes v jednom selectu

Autor: griffin

13:57:52 08.11.2011

Ahoj,

chtel bych si napsat PL/SQL skript, ve kterym by slo pouzit neco jako:[code]
declare
type tab_a is table of table_a%rowtype;
type tab_b is table of table_b%rowtype;

ta tab_a := tab_a();
tb tab_b := tab_b();
begin
select
table_a.*
,table_b.*
bulk collect into
ta,tb
from
table_a
inner join table_b
on ...
;
end;[/code]
toto mi PL/SQL nesezere a vyhodi chybu[code]
PLS-00494: není podporováno vynucení do více cílových položek záznamu
PL/SQL: ORA-00904: : neplatný identifikátor
PL/SQL: SQL Statement ignored
[/code]
coz docela chapu. zkousel jsem i udelat[code]
type ab is record
(
a table_a%rowtype
,b table_b%rowtype
);

type tab_ab is table of ab;[/code]
a potom udelat bulk collect do promenne typu "tab_ab", ale to zase pise[code]
PLS-00597: výraz 'var_ab' v seznamu INTO je chybného typu
PL/SQL: ORA-00904: : neplatný identifikátor
PL/SQL: SQL Statement ignored[/code]
trosku zoufale sem zkousel i neco ve smyslu[code]
declare
cursor c_o is
select
table_a.*
,table_b.*
from
table_a
inner join table_b
on ...
;

a table_a%rowtype;
b table_b%rowtype;
begin
for o in c_o loop
a:= o.table_a;
b:= o.table_b;
end loop;
end;[/code]
ale to uz byla takova zoufalost. za prve identifikator "o.table_a" pochopitelne neexistuje a jeste ke vsemu maji obe tabulky nazvy nekterych sloupcu stejne, takze uz ani neprojde kompilace toho kursoru.

nevite jak jednoduse na to? zatim se branim tomu vypisovat vsechny sloupce pro kazdy %rowtype.

Popripade udelat ten kursor pres jednu tabulku a v kursoru si do jinyho rowtype nacist data z druhy tabulky zvlst. ale to asi nebude tak vykony.

Dik.

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: