Announcement

Collapse
No announcement yet.

probleme beim Ausführen von oracle Funktionen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • probleme beim Ausführen von oracle Funktionen

    Hallo,

    ich erstelle in meinem Java Programm eine Oracle Function
    danach möchte ich diese Funktion im Erstellen von einer View verwenden.

    Die "CREATE OR REPLACE FUNCTION" Statement wird ausgeführt:
    Statement stmt = connection.createStatement();
    stmt.executeUpdate(statement);
    connection.commit();

    Die Datenbank zeigt mir jedoch, dass diese Funktion 'invalid' ist.

    Daher kann nicht weiter beim erstellen einer View verwendet werden.

    jdbc wirft eine sql Exception: ORA-00911 invalid character

    (wenn ich die gleiche Funktion auf der Datenbank direkt ausführe, dann läuft alles ok)

    Hat jemand schon mit Oracle änliche Erfahrungen gemacht? Bzw. hat jemand eine Idee?

    Danke im Voraus,
    Larysa
    Zuletzt editiert von visenger; 24.04.2008, 16:59.

  • #2
    Hallo visenger,

    lad Dir die Beispiele von Oracle für jdbc herunter. Hier werden die Prozeduren auch via jdbc erzeugt.


    http://www.oracle.com/technology/sof...dbc_10201.html

    nimm die demo.tar

    Ok, die proc ist invalid. Dann schau einfach warum oder wie der Fehler lautet, dann solltest Du schon einen klaren Hinweis bekommen was falsch gelaufen ist. Ich würde als erstet auf die Hochkomma tippen.

    lg Dietmar

    Comment


    • #3
      ein Rechteproblem? Aber das ist nur geraten.

      Comment


      • #4
        Originally posted by Dietmar Müller View Post

        lad Dir die Beispiele von Oracle für jdbc herunter. Hier werden die Prozeduren auch via jdbc erzeugt.


        http://www.oracle.com/technology/sof...dbc_10201.html

        nimm die demo.tar

        Ok, die proc ist invalid. Dann schau einfach warum oder wie der Fehler lautet, dann solltest Du schon einen klaren Hinweis bekommen was falsch gelaufen ist. Ich würde als erstet auf die Hochkomma tippen.

        lg Dietmar
        Hallo,

        herzlichen Dank für den tollen link.

        Eigentlich mache ich nichts anders als in diesen Beispielen.

        Die gleiche Funktion wird fehlerfrei mit Sql*Plus (mit dem gleichem User) erstellt.

        Aber per jdbc ist sie ungültig.

        Kann das an jdbc treiber liegen?

        Gruß,
        Larysa
        Zuletzt editiert von visenger; 25.04.2008, 11:55.

        Comment


        • #5
          Originally posted by uminky View Post
          ein Rechteproblem? Aber das ist nur geraten.
          Hallo,

          erst habe ich auch gedacht, dass es ein Rechtproblem sei, aber die gleiche Funktion wird fehlerfrei mit Sql*Plus (mit dem gleichem User) erstellt. Also daran kann eigentlich nicht liegen.

          Gruß
          Larysa

          Comment


          • #6
            Hallo Larysa,

            nachdem du die Funktion mit Java erstellt hast, solltest du dir mal mit
            [highlight=sql]
            select name, line, position, text
            from user_errors
            where name = 'NAME_DER_FUNKTION'
            order by line, position;
            [/highlight]
            im SQLPlus ansehen, warum die Funktion 'invalid' ist. Ggfs. kannst du die Meldung(en) hier auch posten.

            Gruß Falk
            Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

            Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

            Comment


            • #7
              Originally posted by Falk Prüfer View Post
              [highlight=sql]
              select name, line, position, text
              from user_errors
              where name = 'NAME_DER_FUNKTION'
              order by line, position;
              [/highlight]
              im SQLPlus ansehen, warum die Funktion 'invalid' ist. Ggfs. kannst du die Meldung(en) hier auch posten.

              Gruß Falk
              Hallo,

              ich habe festgestellt, wenn man die connection schließt, dann sind die Funktionen valid.

              Bei mir, im Programm habe ich 2 statements die nacheinander ausgeführt werden:

              Code:
              1. create or replace function fName...
              2. create or replace view (und dieses View verwendet die func fName)
              Wenn man folgendes macht:

              Code:
              1. create or replace function fName...
              statement.close()
              connection.createStatement()
              2. create or replace view (und dieses View verwendet die func fName)
              dann ist zwar die Funktion fName valid, aber View (generell) wird trotzdem nicht erstellt.

              Fehlermeldung: 00911: invalid character

              Rechte sind vergeben, daher daran kann das nicht liegen.



              Gruß,
              Larysa

              Comment


              • #8
                Das hört sich an als ob der DatenTyp nicht stimmt. Überprüfe die Datentypen deiner View.

                Comment


                • #9
                  Originally posted by visenger View Post
                  ...Fehlermeldung: 00911: invalid character...
                  Hallo Larysa,

                  ist der Befehlsstring ordnungsgemäß maskiert? Ansonsten solltest du deinen Befehlsstring mal posten, damit wir hier kein Rätselraten machen müssen wo den das "invalid character" herkommen könnte.

                  Gruß Falk
                  Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                  Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                  Comment


                  • #10
                    Hallo zusammen,

                    meine Statement lautet:

                    CREATE OR REPLACE VIEW LARWIN.pathview
                    AS
                    SELECT XHDOC, SYSROWID, JCRXNAME, (SELECT LARWIN."get_path"(SYSROWID, '') FROM DUAL) AS JCRPATH
                    FROM LARWIN.default_nodes
                    WHERE (SYSINDEXSTATE < 65000);
                    Diese Statement wird problemlos auf der Datenbank mit SqlPlus ausgeführt.

                    Aber mit jdbc habe ich Probleme.

                    Gruß,
                    Larysa

                    Comment


                    • #11
                      musst du dein Create or .... in eine char stecken und diesen mit Gänsefüßen begrenzen? Dann solltest du die Gänsefüßen um "get_path" weglassen. Warscheinlich muss dann die Funktion LARWIN.get_path in LARWIN.GET_PATH umbenannt werden.
                      Du solltest generell vermeiden kleinbuchstaben in Opjectnamen zu verwenden.
                      Kannst du get_path nicht umbenennen kannst du auch ein Synonym drauf legen.

                      Comment


                      • #12
                        Hallo Larysa,

                        ich würde die doppelten Hochkomma um get_path ganz weglassen. Normalerweise ist Oracle beim Aufruf von Funktionen nicht casesensitiv.
                        Auch würde ich das Select anders formulieren. Du solltest die Funktion auch direkt in die Selectlist einbinden können, ohne den Umweg über ... from dual. Und laß mal testweise das ; am Ende weg.
                        [highlight=sql]
                        CREATE OR REPLACE VIEW LARWIN.pathview
                        AS
                        SELECT XHDOC, SYSROWID, JCRXNAME, LARWIN.get_path(SYSROWID, '') JCRPATH
                        FROM LARWIN.default_nodes
                        WHERE (SYSINDEXSTATE < 65000)[/highlight]

                        Gruß Falk
                        Wenn du denkst du hast alle Bugs gefunden, dann ist das ein Bug in deiner Denksoftware.

                        Quellcode ohne ein Mindestmaß an Formatierung sehe ich mir nicht an! Ich leiste keinen Privatsupport per Mail oder PN!

                        Comment


                        • #13
                          Hallo Falk,
                          Originally posted by Falk Prüfer View Post

                          ich würde die doppelten Hochkomma um get_path ganz weglassen. Normalerweise ist Oracle beim Aufruf von Funktionen nicht casesensitiv.
                          hm.. bei mir geht nicht, weil get_path lower case definiert wurde. D.h. Hochkomma muss da sein.

                          Originally posted by Falk Prüfer View Post
                          Auch würde ich das Select anders formulieren. Du solltest die Funktion auch direkt in die Selectlist einbinden können, ohne den Umweg über ... from dual. Und laß mal testweise das ; am Ende weg.
                          [highlight=sql]
                          CREATE OR REPLACE VIEW LARWIN.pathview
                          AS
                          SELECT XHDOC, SYSROWID, JCRXNAME, LARWIN.get_path(SYSROWID, '') JCRPATH
                          FROM LARWIN.default_nodes
                          WHERE (SYSINDEXSTATE < 65000)[/highlight]
                          Danke für den Tipp mit Select und Semikolon ( ; musste tatsächlich weg), das hat funktioniert.

                          Übrigens, ich habe den Hacken gerade gefunden (das war in der View Deklaration):

                          Falsch: CREATE OR REPLACE VIEW LARWIN.pathview

                          Richtig: CREATE OR REPLACE VIEW pathview

                          Also, das Erstellen einer View mit der Angabe von Schema war falsch.

                          Jetzt läuft alles gut!


                          Herzlichen Dank an Alle!!!
                          Larysa

                          Comment


                          • #14
                            @falk
                            wenn LARWIN."get_path" im SQL plus funktioniert, kann ein LARWIN.get_path nicht funktionieren.

                            @visenger
                            Also Funktion neu anlegen, ohne Gänsefüßen.

                            Comment

                            Working...
                            X