ďťż
 
Oracle, nested table, jdbc. ďťż
 
Oracle, nested table, jdbc.
Zobacz wiadomości
 
Cytat
A gdyby tak się wedrzeć na umysłów górę, / Gdyby stanąć na ludzkich myśli piramidzie, / I przebić czołem przesądów chmurę, / I być najwyższą myślą wcieloną. . . Juliusz Słowacki, Kordian
Indeks BCB i MySQL subiekt gt fototapeta
 
  Witamy

Oracle, nested table, jdbc.



Piotr Sieniawski - 21-12-2005 12:22
Oracle, nested table, jdbc.
  Witam.

Mam w Oracle'u PLSQLowa funkcje, ktora zwraca nested table i chce te dane
wyciagnac poprzez JDBC do java'y.

Wyglada to tak (typy i funkcja to prosty przyklad wziety skads tam):

create or replace type address as object (
street varchar2(60),
city varchar2(30),
state char(2),
zip_code char(5) );

create or replace type address_list as table of address;

create or replace function get_address_list
return address_list is
v_table address_list:=address_list();
i binary_integer;
begin
v_table.extend(5);
for i in 1..5 loop
v_table(i):=address('x','y','z',to_char(i));
end loop;
return v_table;
end get_address_list;

Teraz mam dwa kawalki Java'ovego kodu (jeden dziala a drugi nie bardzo)
Najpierw dzialajacy:

Statement stmnt = conn.createStatement();
rs = stmnt.executeQuery("select * from table(get_address_list)");
while (rs.next()){
String s1 = rs.getString(1);
String s2 = rs.getString(2);
String s3 = rs.getString(3);
String s4 = rs.getString(4);
System.out.println(s1 + "," + s2 + "," + s3 + "," + s4);
}

To cos elegancko zwraca co nastepuje:
x,y,z ,1
x,y,z ,2
x,y,z ,3
x,y,z ,4
x,y,z ,5

A teraz drugi, ktory sie opiera i nie do konca chce dzialac (prawdopodobnie
z winy Oracle'a)

cstmt = conn.prepareCall("{ ? = call get_address_list() }");
cstmt.registerOutParameter(1, Types.ARRAY, "ADDRESS_LIST");
cstmt.execute();
array = (Array) cstmt.getObject(1);
rs = array.getResultSet();
while (rs.next()) {
// Get the object that is in the address_list ( SQL TYPE "ADDRESS" )
// 1st column is the row index
// 2nd column is the actual object
Struct obj = (Struct) rs.getObject(2);
// Get the column attributes for the object
Object[] attrs = obj.getAttributes();
// get each of the object columns
// It is the programmers responsibility to know specifically
// what these types are. In this case they are all strings.
String s1 = (String) attrs[0];
String s2 = (String) attrs[1];
String s3 = (String) attrs[2];
String s4 = (String) attrs[3];
System.out.println(s1 + "," + s2 + "," + s3 + "," + s4);
}

Teraz dostaje piekna kolekcje znakow zapytania.:
???,???,???,???
???,???,???,???
???,???,???,???
???,???,???,???
???,???,???,???

Jak zamiast tych znakow zapytania otrzymac to co zwraca funkcja PLSQL?
Niestety nie moge skorzystac z pierwszej wersji, poniewaz docelowa funkcja
bedzie modyfikowac dane w bazie, wiec wsadzenie jej do selecta odpada.
Jakies pomysly? Doswiadczenia?

Jesli idzie o samego Oracle'a to oto pare informacji na jego temat
Oracle9i Release 9.2.0.6.0 - 64bit Production
PL/SQL Release 9.2.0.6.0 - Production
CORE 9.2.0.6.0 Production
TNS for Solaris: Version 9.2.0.6.0 - Production
NLSRTL Version 9.2.0.6.0 - Production





Adamzrk - 21-12-2005 12:22

  Jakiego strownika JDBC używasz?
Ja miałem problemy z tym do oracle 9i. Może zmiana sterownika na ten z
oracle 10g pomoże.
Moż coś tutaj znajdziesz:
http://www.cs.umb.edu/cs634/ora9idoc...a96654/toc.htm
jesli jeszcze tam nie zaglądałeś.

Pozdrawiam

Użytkownik "Piotr Sieniawski" <fake@fake.com> napisał w wiadomości
news:1135004075.624789@kwintesencja.lan.mareon.com .pl...
> Witam.
>
> Mam w Oracle'u PLSQLowa funkcje, ktora zwraca nested table i chce te dane
> wyciagnac poprzez JDBC do java'y.
>
> Wyglada to tak (typy i funkcja to prosty przyklad wziety skads tam):
>
> create or replace type address as object (
> street varchar2(60),
> city varchar2(30),
> state char(2),
> zip_code char(5) );
>
> create or replace type address_list as table of address;
>
> create or replace function get_address_list
> return address_list is
> v_table address_list:=address_list();
> i binary_integer;
> begin
> v_table.extend(5);
> for i in 1..5 loop
> v_table(i):=address('x','y','z',to_char(i));
> end loop;
> return v_table;
> end get_address_list;
>
>
> Teraz mam dwa kawalki Java'ovego kodu (jeden dziala a drugi nie bardzo)
> Najpierw dzialajacy:
>
> Statement stmnt = conn.createStatement();
> rs = stmnt.executeQuery("select * from table(get_address_list)");
> while (rs.next()){
> String s1 = rs.getString(1);
> String s2 = rs.getString(2);
> String s3 = rs.getString(3);
> String s4 = rs.getString(4);
> System.out.println(s1 + "," + s2 + "," + s3 + "," + s4);
> }
>
> To cos elegancko zwraca co nastepuje:
> x,y,z ,1
> x,y,z ,2
> x,y,z ,3
> x,y,z ,4
> x,y,z ,5
>
>
> A teraz drugi, ktory sie opiera i nie do konca chce dzialac
> (prawdopodobnie z winy Oracle'a)
>
> cstmt = conn.prepareCall("{ ? = call get_address_list() }");
> cstmt.registerOutParameter(1, Types.ARRAY, "ADDRESS_LIST");
> cstmt.execute();
> array = (Array) cstmt.getObject(1);
> rs = array.getResultSet();
> while (rs.next()) {
> // Get the object that is in the address_list ( SQL TYPE "ADDRESS" )
> // 1st column is the row index
> // 2nd column is the actual object
> Struct obj = (Struct) rs.getObject(2);
> // Get the column attributes for the object
> Object[] attrs = obj.getAttributes();
> // get each of the object columns
> // It is the programmers responsibility to know specifically
> // what these types are. In this case they are all strings.
> String s1 = (String) attrs[0];
> String s2 = (String) attrs[1];
> String s3 = (String) attrs[2];
> String s4 = (String) attrs[3];
> System.out.println(s1 + "," + s2 + "," + s3 + "," + s4);
> }
>
> Teraz dostaje piekna kolekcje znakow zapytania.:
> ???,???,???,???
> ???,???,???,???
> ???,???,???,???
> ???,???,???,???
> ???,???,???,???
>
> Jak zamiast tych znakow zapytania otrzymac to co zwraca funkcja PLSQL?
> Niestety nie moge skorzystac z pierwszej wersji, poniewaz docelowa funkcja
> bedzie modyfikowac dane w bazie, wiec wsadzenie jej do selecta odpada.
> Jakies pomysly? Doswiadczenia?
>
> Jesli idzie o samego Oracle'a to oto pare informacji na jego temat
> Oracle9i Release 9.2.0.6.0 - 64bit Production
> PL/SQL Release 9.2.0.6.0 - Production
> CORE 9.2.0.6.0 Production
> TNS for Solaris: Version 9.2.0.6.0 - Production
> NLSRTL Version 9.2.0.6.0 - Production
>




Piotr Sieniawski - 21-12-2005 12:22

  Adamzrk wrote:
> Jakiego strownika JDBC używasz?
> Ja miałem problemy z tym do oracle 9i. Może zmiana sterownika na ten z
> oracle 10g pomoże.
Sterownik mam do 10g. Lipa jakas.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • effulla.pev.pl
  • comp
    Oracle, SQL, PL/SQL. Jak =?ISO-8859-2?Q?napisa=E6_zapytanie=2C?==?ISO-8859-2?Q?_kt=F3re_zwr=F3ci_nazw=EA_atrybutu=2C_kt=F3reg o?==?ISO-8859-2?Q?_warto=B6ci_spe=B3niaj=B1_zadany_warunek?= Oracle 19g +Insert +Insert +Insert... [oracle] zapytanie dynamiczne z =?ISO-8859-2?Q?=22dynamiczn=B1_?==?ISO-8859-2?Q?nazw=B1_tabeli=22?= [Oracle] jak =?ISO-8859-2?Q?ograniczy=E6_pami=EA=E6_dla_se?==?ISO-8859-2?Q?rwera=3F?= =?ISO-8859-2?Q?=5BOT=5D_Zdany_egzamin_Oracle_1Z0-007_a?==?ISO-8859-2?Q?_brak_informacji_na_stronie_Prometric_-_czy?==?ISO-8859-2?Q?_co=B6_nie_tak=3F?= [oracle] czy da =?ISO-8859-2?Q?si=EA_z_poziomu_procedury_?==?ISO-8859-2?Q?zrobi=E6_kopi=EA_zapasow=B1=3F?= [oracle 10g] czy =?ISO-8859-2?Q?mo=BFna_wy=B3=B1czy=E6_wszys?==?ISO-8859-2?Q?tkie_wi=EAzy_w_schemacie=3F?= MSSQL Express czy Oracle Express =?iso-8859-2?q?[oracle]_Jak_sprawdzi=E6_wielko=B6=E6_tabeli_=3F=3F?= =?ISO-8859-2?Q?Poszukjue_ksi=B1=BFki_"Oracle_?= =?ISO-8859-2?Q?optymalizacja_wydajno=B6ci"..?=
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • sulimczyk.pev.pl
  • Cytat

    Decede mihi sole - nie zasłaniaj mi słonca.
    Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści
    Hoc fac - tak czyń.
    A tergo - od tyłu; z tyłu.
    I czarne włosy posiwieją. Safona

    Valid HTML 4.01 Transitional

    Free website template provided by freeweblooks.com