ahcore: Zugriff auf eine Instanz eines Oracle-Types per JDBC?!

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!

  1. 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

    1. 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?

      1. 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

        1. 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)

          1. 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?

            1. 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