Zugriff auf eine Instanz eines Oracle-Types per JDBC?!
ahcore
- datenbank
Hallo,
und zwar habe ich eine stored procedure in der so ungefähr das drinne steht:
-------------
DECLARE
x type1;
y type2;
BEGIN
FOR i IN x.Parts.FIRST .. x.Parts.LAST LOOP
x.Parts (i).getWerte(y);
END LOOP;
END;
-------------
Aber wie kann ich jetzt per JDBC auf die Instanz y zugreifen wenn da meine gewünschten Werte drinne stehen?
Zur Zeit führe ich ein CallableStatement "call procedure_x()" durch, aber weiss absolut nicht wie ich nun an die einzelnen Spalten von y rankomme.
Leider steckt in meiner procedure ja auch keine SELECT-Anweisung, wo ich dann einfach das ResultSet ausgeben könnte.
Also wie kann ich die Instanz selektieren um sie nachher per JDBC/ResultSet auszugeben??
Danke Leute!
Hallo,
und zwar habe ich eine stored procedure in der so ungefähr das drinne steht:
DECLARE
x type1;
y type2;
BEGIN
FOR i IN x.Parts.FIRST .. x.Parts.LAST LOOP
x.Parts (i).getWerte(y);
END LOOP;
END;Aber wie kann ich jetzt per JDBC auf die Instanz y zugreifen wenn da meine gewünschten Werte drinne stehen?
Zur Zeit führe ich ein CallableStatement "call procedure_x()" durch, aber weiss absolut nicht wie ich nun an die einzelnen Spalten von y rankomme.
Leider steckt in meiner procedure ja auch keine SELECT-Anweisung, wo ich dann einfach das ResultSet ausgeben könnte.Also wie kann ich die Instanz selektieren um sie nachher per JDBC/ResultSet auszugeben??
ich habe es gar nicht hinbekommen... du könntest es höchstens mal
mit temporären tabellen versuchen, falls du in der prozedur drauf
zugreifen möchtest oder die daten zurück liefer möchtest.
du kannst diese daten allerdings nicht in einer zweiten prozedur
verwenden... (hier könnte evt autocommitoff helfen, da die tmp daten
normalerweise bei jedem neuen aufruf gelöscht sind)
wenn dir eine andere lösung zu dem thema einfällt/zufliegt/eingereicht wird, poste die hier mal
gruss
horst
gruss
horst
Hallo,
und zwar habe ich eine stored procedure in der so ungefähr das drinne steht:
DECLARE
x type1;
y type2;
BEGIN
FOR i IN x.Parts.FIRST .. x.Parts.LAST LOOP
x.Parts (i).getWerte(y);
END LOOP;
END;Aber wie kann ich jetzt per JDBC auf die Instanz y zugreifen wenn da meine gewünschten Werte drinne stehen?
Zur Zeit führe ich ein CallableStatement "call procedure_x()" durch, aber weiss absolut nicht wie ich nun an die einzelnen Spalten von y rankomme.
Leider steckt in meiner procedure ja auch keine SELECT-Anweisung, wo ich dann einfach das ResultSet ausgeben könnte.Also wie kann ich die Instanz selektieren um sie nachher per JDBC/ResultSet auszugeben??
ich habe es gar nicht hinbekommen... du könntest es höchstens mal
mit temporären tabellen versuchen, falls du in der prozedur drauf
zugreifen möchtest oder die daten zurück liefer möchtest.
du kannst diese daten allerdings nicht in einer zweiten prozedur
verwenden... (hier könnte evt autocommitoff helfen, da die tmp daten
normalerweise bei jedem neuen aufruf gelöscht sind)wenn dir eine andere lösung zu dem thema einfällt/zufliegt/eingereicht wird, poste die hier mal
gruss
horst
gruss
horst
Vielen Dank Horst,
das mit ner temporären Tabelle hab ich gerade ausprobiert und musste mit Bedauern feststellen dass ich meine Procedure nicht mit einem "CREATE TABLE.." Eintrag compilieren kann.
Kann das sein dass CREATE in Proceduren nicht erlaubt ist?
Also was gibt es noch für Möglichkeiten eine temporäre Tabelle zu erstellen?
hallo
das mit ner temporären Tabelle hab ich gerade ausprobiert und musste mit Bedauern feststellen dass ich meine Procedure nicht mit einem "CREATE TABLE.." Eintrag compilieren kann.
Kann das sein dass CREATE in Proceduren nicht erlaubt ist?
ja, das ist richtig, es ist nicht erlaubt
temporäre tabellen werden vorher erstellt, die tabelle ist also nicht wirklich temporär, sondern nur deren inhalt
gruss
horst
hallo
das mit ner temporären Tabelle hab ich gerade ausprobiert und musste mit Bedauern feststellen dass ich meine Procedure nicht mit einem "CREATE TABLE.." Eintrag compilieren kann.
Kann das sein dass CREATE in Proceduren nicht erlaubt ist?ja, das ist richtig, es ist nicht erlaubt
temporäre tabellen werden vorher erstellt, die tabelle ist also nicht wirklich temporär, sondern nur deren inhalt
create global temporary und der Rest wie gehabt...
die daten sind dann nur für den sichtbar, der sie auch eingetragen hat.. einfach mal ein bisschen mit rumspielen (erstmal über das sql+ fenster)
Nochmals Danke an Horst!
Das mit den GLOBAL TEMPORARY TABLE ist eine gute Idee, und bei SQL+ funktioniert das auch alles super, aber meine eingefügten Daten sind dann wirklich nur per SQL+ (gleiche Session) verfügbar.
Wenn ich zum Beispiel per TOAD in diese temporäre Tabelle reinschau ist sie leer.
Und irgendwie klappt das aus diesem Grund auch nicht per JDBC!
Obwohl ich in einem Durchlauf einen INSERT mache, und anschließend mir per SELECT einen ResultSet hole, ist er leer.
Hat es irgendwas mit dem commit zu tun?
Was muss ich beim commit alles beachten?
Hat es irgendwas mit dem commit zu tun?
Was muss ich beim commit alles beachten?
das weiss ich leider nicht so genau...
such mal bei deiner bevorzugten suchmaschine nach
autocommit java
oder ähnlichem... oder schau mal auf java.sun.com unter den API's nach
habe mal was zum autocommit ausschalten gelesen, irgendwie geht das... es darf halt kein commit mehr kommen und es sollte die gleiche verbindung/session sein.
kannst übrigens auch mailen: the.dragon@web.de
gruss
horst