Announcement

Collapse
No announcement yet.

Problem mit "Continue" in einer While-Schleife -> Syntaxfehler?

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

  • Problem mit "Continue" in einer While-Schleife -> Syntaxfehler?

    Hallo liebe Forumsmitglieder,

    ich verwende DB2 LUW v. 9.7 und versuche vergeblich das continue Statement in eine while schleife einzubauen. Hier ein Test-Skript (was zugegebener Maßen nicht sinnvoll, aber dennoch erklärend, ist):

    Code:
     CREATE OR REPLACE FUNCTION testContinue(var varchar(3))
    RETURNS varchar(100)
    
    Begin
    
    DECLARE i integer DEFAULT 3;
    DECLARE j integer DEFAULT 0;
    
    While i>0 Do
    	SET i = i-1;
    	SET j = j+1;
    	if i=j then
    	  continue;
    	end if;
    End While;
    
    return 'test';
    
    End@
    Hier erhalte ich folgenden Fehler:
    SQL0104N An unexpected token "continue" was found following "+1; if i = j
    then ". Expected tokens may include: "COMMIT". LINE NUMBER=13.
    SQLSTATE=42601

    Im Online-Handbuch von IBM wird continue allerdings so ähnlich verwendet:
    http://publib.boulder.ibm.com/infoce.../r0057458.html

    Ich erkenne einfach nicht den Grund dafür, dass das Statement so nicht akzeptiert wird.

    Ich bin sehr dankbar für eure Hilfe vorab.

    Viele Grüße
    Antje

  • #2
    Und was passiert, wenn du mal direkt das Beispiel aus dem Handbuch laufen lässt?
    Den einzigen Unterschied den ich zwischen deinem Source und dem Handbuch-Beispiel sehe: der "For i IN ... END LOOP;" steht in einem BEGIN-END-Block, vielleicht braucht es dieses BEGIN/END dazu?

    bye,
    Helmut (kein DB2-Anwender)

    Comment


    • #3
      Ist der Vergleichsoperator
      i=j

      so richtig
      Christian

      Comment


      • #4
        Hallo,

        danke zunächst für die zeitnahen Antworten

        Also den Begin/End Block habe ich bereits in meiner Funktion. Begin steht noch vor dem Declare-Bereich und End am Ende...

        Ich habe nun auch das Beispiel aus dem Handbuch getestet, was komischer Weise ebenso nicht funktioniert. Hier meckert der Compiler allerdings schon wegen der for schleife... Vielleicht muss ich für die Funktionen noch ein Feature freischalten?

        Der Vergleich i = j ist okay. Hier wird kein "==" verwendet Das selbe Problem habe ich auch bei i < j oder ähnlich.

        Habt ihr vielleicht noch eine Idee?
        Wird sicherlich nicht einfach, das continue in meiner Original-Funktion zu ersetzen. Dort verwende ich dies nämlich recht häufig. Hättet ihr hierzu noch Tipps/Hinweise?

        Danke vorab.

        Freundliche Grüße
        Antje

        Comment


        • #5
          Wenn er da schon beim FOR meckert, dann deutet das ganz stark darauf hin, dass es gar nicht am CONTINUE liegt sondern der Fehler schon früher entsteht, sich der Parser aber erst später verhaspelt. In diesem Fall mal alles in der Prozedur auskommentieren und nur die Schleife aus dem Handbuch rein, dann mal testen ...

          bye,
          Helmut

          Comment


          • #6
            Was das verlinkte Handbuch korrekt ist, wird die while Schleife so gebaut

            WHILE i>0 LOOP
            ....
            END LOOP;
            Christian

            Comment


            • #7
              Hallo Helmut,

              also ich habe folgende Funktion erstellt:

              Code:
              CREATE OR REPLACE FUNCTION testContinue(var varchar(3))
              RETURNS varchar(10)
              
              BEGIN
              
              DECLARE j integer DEFAULT 10;
              
                FOR i IN 1 .. 3 LOOP
                  SET j = j +i;	 
               END LOOP;
              
              return varchar(j);
              
              END
              Und da kommt der Fehler:
              SQL0104N An unexpected token "FOR" was found following "nteger DEFAULT 10;

              ". Expected tokens may include: "<psm_while>
              Ich weiß echt nicht mehr weiter...

              Viele Grüße
              Antje

              Comment


              • #8
                Also ich muss da jetzt aussteigen. Bin kein Oracle-User und für mich sieht das soweit alles okay aus. Aber irgendwas läuft wohl schief ...

                bye,
                Helmut

                Comment


                • #9
                  Also wenn das PL/SQL sein soll, dann muss das declare weg und die Variablendeklaration gehört zwischen create und begin.
                  Declare verwendet man nur bei anonymen PL/SQL Blöcken.

                  Dim
                  Zitat Tom Kyte:
                  I have a simple philosophy when it comes to the Oracle Database: you can treat it as a black box and just stick data into it, or you can understand how it works and exploit it as a powerful computing environment.

                  Comment


                  • #10
                    Frage beantwortet

                    Hallo Dimitri,

                    Originally posted by dimitri View Post
                    Also wenn das PL/SQL sein soll, dann muss das declare weg und die Variablendeklaration gehört zwischen create und begin.
                    Declare verwendet man nur bei anonymen PL/SQL Blöcken.

                    Dim
                    Danke, du hast mich nun auf die Lösung verwiesen. Das "continue" statement wie auch diese spezielle for-schleife gehören zur PL/SQL und nicht zum standard-sql... Da ich Newbie in der DB-Programmierung bin, ist mir dies bisher nicht bewusst gewesen.

                    Danke auch an die anderen "helfenden" Kommentare.

                    Viele Grüße
                    Antje

                    Comment

                    Working...
                    X