Announcement

Collapse
No announcement yet.

SQL-Fehler: ORA-00911: invalid character

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

  • SQL-Fehler: ORA-00911: invalid character

    Hallo,

    Ich habe ein leere Tabelle:
    Code:
      CREATE TABLE PROJECT5.L1080_1FUNCT
       (	RNAME VARCHAR2(12 BYTE), 
    	SEQ NUMBER(3,0), 
    	TEXT VARCHAR2(200 BYTE)
       );
    und wollte die folgenden Zeilen hinzuifügen:
    Code:
    INSERT INTO project5.funct (RNAME, SEQ, TEXT)  VALUES ('CIV_U',1,'char s[16];');
    INSERT INTO project5.funct (RNAME, SEQ, TEXT)  VALUES ('CIV_U',2,'        /* ----  civage  --------------------------------------------------- */');
    INSERT INTO project5.funct (RNAME, SEQ, TEXT)  VALUES ('CIV_U',3,'        if ((XA.CIVAGE[0] == '\0') || (XB.CIVAGE[0] == '\0'))');
    Dabei habe folgenden Meldung erhalten:
    Fehler beim Start in Zeile 3 in Befehl:
    INSERT INTO project5.L1080_1funct (RNAME, SEQ, TEXT) VALUES ('CIV_U',3,' if ((XA.CIVAGE[0] == '\0') || (XB.CIVAGE[0] == '\0'))')
    Fehler bei Befehlszeile:3 Spalte:103
    Fehlerbericht:
    SQL-Fehler: ORA-00911: invalid character
    00911. 00000 - "invalid character"
    *Cause: identifiers may not start with any ASCII character other than
    letters and numbers. $#_ are also allowed after the first
    character. Identifiers enclosed by doublequotes may contain
    any character other than a doublequote. Alternative quotes
    (q'#...#') cannot use spaces, tabs, or carriage returns as
    delimiters. For all other contexts, consult the SQL Language
    Reference Manual.
    *Action:
    Die ersten beiden Zeilen werden problemlos hinzugefügt. Die dritte nicht, was mir auch einleuchtet. Es hilft auch nicht, wenn ich den dritten Wert in mit Doublequote (") abgrenze.
    Kann mir jemand einen Tipp geben, wie ich dieses Problem lösen kann?

    Besten Dank
    giordano

  • #2
    Hallo,
    Habe gerade entdeckt, dass es so geht:
    Code:
    INSERT INTO project5.funct (RNAME, SEQ, TEXT)  VALUES ('CIV_U',3,'        if ((XA.CIVAGE[0] == ''\0'') || (XB.CIVAGE[0] == ''\0''))');
    Offenbar ist ' ein Steuerzeichen.
    giordano

    Comment


    • #3
      Originally posted by giordano View Post
      Hallo,
      Habe gerade entdeckt, dass es so geht:
      Code:
      INSERT INTO project5.funct (RNAME, SEQ, TEXT)  VALUES ('CIV_U',3,'        if ((XA.CIVAGE[0] == ''\0'') || (XB.CIVAGE[0] == ''\0''))');
      Offenbar ist ' ein Steuerzeichen.
      giordano
      Nein, kein Steuerzeichen, sondern die Begrenzung für einen String.
      Im Prizip versuchst du nur den rotgeschriebenen Teil einzufügen
      ' if ((XA.CIVAGE[0] == '\0') || (XB.CIVAGE[0] == '\0'))

      Gruss

      Comment


      • #4
        Besten Dank. Leuchtet ein.
        giordano

        Comment


        • #5
          Hallo Wernfried,
          Ich habe das genauer angeschaut und meiner Meinung hat ' die Funktion eines Steurzeichens, je nach Ort:
          'a' ergibt a
          ''a'' ergibt Fehler
          '''a' ergibt 'a
          '''a''' ergibt 'a'
          Gruss
          giordano

          Comment


          • #6
            Im SQL-Standard ist das Hochkomme (') der Stringbegrenzer so wie er es das Anführungszeichen (") in Java und C/C++ ist.
            Um nun ein Hochkomma im String zu haben muss man es mit einem Hochkomme davor escapen.

            Die Regel ist einfach:

            ' -> Anfang/Ende eines Strings
            '' -> Hochkomma im String

            Comment


            • #7
              Hallo Bernhard,
              Danke für die Ausführung. Mir fehlte der korrekte Ausdruck. Mit Steuerzeichen habe ich eigentlich Escape gemeint.
              Gruss
              giordano

              Comment

              Working...
              X