Announcement

Collapse
No announcement yet.

syntax error expected end-of-file near creating table

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

  • syntax error expected end-of-file near creating table

    Hello everybody,

    I get following error:
    Code:
    syntax error near "...achname, vorname)) *ERROR* Create table verwand...", expected end-of-file.
    When running following SQL Query:
    Code:
    Create table Person (
    Nachname varchar(20),
    vorname varchar(20),
    alter integer,
    Primary key (nachname, vorname))
    
    Create table verwandtmit(
    P1NName varchar(20),
    P1VName varchar(20),
    P2NName varchar(20),
    P2VName varchar(20),
    Primary key(P1NName, P1VName, P2NName, P2VName),
    Foreign key(P1NName, P1VName) references Person,
    Foreign key(P2NName, P2VName) references Person);
    
    Insert into Person (Nachname, Vorname, Alter) values (Meyer, Hans, 17);
    Insert into Person (Nachname, Vorname, Alter) values (Meyer, Max, 18);
    Insert into verwandtMit {P1NName, P1VName, P2NName, P2VName} values (Meyer, Hans, meyer, max);
    I would appreciate if you could help me what I would need to change in my query. Thank you!

  • #2
    Zunächst wäre die Angabe des Datenbanksystems erforderlich.
    a) "alter" ist ein reserviertes Wort und sollte - um späteren Ärger aus dem Weg zu gehen - bsp in Lebensalter geändert werden
    b) dürfte hinter "Primary key (nachname, vorname))" ein Semikolon fehlen
    c) je nach Datenbank sind die Name casesensitiv. Also sollten die Spaltennamen übereinstimmern (Nachname varchar(20), vs. Primary key (nachname, vorname)) )
    d) das setzen der Keys könnte u.U. falsch sein. Je nach Datenbank (MySQL FOREIGN KEY (Spalte) REFERENCES Zieltabelle(Zielspalte) ), (Oracle Spalte int FOREIGN KEY REFERENCES Zieltabelle(Zielspalte))
    e) einen PK auf Name und Vorname bedeutet, es kann keine 2 Personen mit dem gleichen Nachnamen und Vornamen geben. Das kann Ärger geben
    f) je nach Datenbank sind Zeichenketten mit ' zu versehen "Insert into Person (Nachname, Vorname, Alter) values ('Meyer', 'Hans', 17);
    Christian

    Comment


    • #3
      Danke Christian,

      Ich arbeite mit einem DB2 System (mit dieser Webschnittstelle: http://hyper-db.com/interface.html). Ich habe den Code wie folgt geändert:

      Code:
      Create table Person (
      nachname varchar(20),
      vorname varchar(20),
      lebensalter integer,
      Primary key (nachname, vorname));
      
      Create table verwandtmit(
      P1NName varchar(20),
      P1VName varchar(20),
      P2NName varchar(20),
      P2VName varchar(20),
      Primary key(P1NName, P1VName, P2NName, P2VName),
      Foreign key(P1NName, P1VName) references Person,
      Foreign key(P2NName, P2VName) references Person);
      
      Insert into Person (nachname, vorname, lebensalter) values ('Meyer', 'Hans', 17);
      Insert into Person (nachname, vorname, lebensalter) values ('Meyer', 'Max', 18);
      Insert into verwandtMit {P1NName, P1VName, P2NName, P2VName} values ('Meyer', 'Hans', 'Mayer', 'Max');
      leider bekomme ich immer noch folgende Fehlermeldung
      Code:
      syntax error near "...chname, vorname)); *ERROR* Create table verwand...", expected end-of-file.
      ​​​​​​​Dabei habe ich immer noch keinen Anhaltspunkt, wie ich den Fehler vermeiden könnte. Danke für deine weitere Hilfe

      Comment


      • #4
        M.E. kannst du mit der Schnittstelle keine create-Statements absetzen. Ein

        Create table Person (
        nachname varchar(20));

        wird mit

        input is not a query

        quittiert
        Christian

        Comment


        • #5
          Hm ok, wenn ich es auf einer anderen Seite eingebe, bei der Erstellen möglich sein sollte (z.B. https://rextester.com/PZDG79299) bekomme ich trotzdem folgende Fehlermeldung:

          Error(s), warning(s):
          42601: syntax error at or near "table"

          Comment


          • #6
            Ich bekomme den Fehler


            Error(s), warning(s):
            42P07: relation "person" already exists
            Es hat wenig Sinn das irgendwie Online zu machen. Des Weiteren ist das dann dort postgresql.
            Ich kenne den DB2 Dialekt nicht, aber Foreign key(P1NName, P1VName) references Person, erscheint wenig sinnvoll. Es müssen die Spalten der referenzierten Tabelle nicht angegeben werden?
            Ein FK in postgresql
            FOREIGN KEY (so_id) REFERENCES so_headers (id)
            wird so angegeben. Es machrt weiterhin keinen Sinn die Dialekte zu mischen
            Christian

            Comment


            • #7
              Bei Seiten wie Rextester / SQLFiddle muss / soll man die Tables am Ende auch selber abräumen-hab ich irgendwo gelesen. Also ungefähr so "hinterlasse es so, wie andere es vorfinden sollen.." Ich weiß nicht genau, wie die Betreiber das kapseln, aber ich mache hier immer ein delete der zu erstellenden Tabellen gleich am Anfang.

              Wenn also nicht bereits etwas gleichnamiges in dem Schema rumliegt, sollte das Statement auch funktionieren. Ob die Ergebnisse von Postgres 100% auf DB2 übertragbar sind, wage ich zu bezweifeln.

              Zu Deinem Modell:
              Du merkst hoffentlich spätestens an der Verwandtschaftstabelle, dass Dein Datenmodell nicht der Hit ist.
              Idr vergibt man technische ID (Nummern) als Primärschlüssel. In diesem Fall hier würde das ermöglichen, dass auch mehrere Menschen mit gleichem Namen aufgenommen werden können. Es würde auch die Verwandtschaftstabelle sehr verschlanken.

              Comment


              • #8
                Kannte die "online" DB Anbieter bisher nicht. Finde es eher seltsam, dass dann jeder in einer DB rumwüten kann.
                Aber das Datenbank-Hopping wie in diesem Fall führt doch zu nichts. Die DBs haben halt unterschiedliche Dialekte.
                Warum nicht einfach
                MySQL & Workbench
                Oracel & SQL Developer
                SQLite & SQLite Studio
                ....
                lokal installieren und damit üben. So groß sind letztlich die Unterschiede nicht, wenn man dann mal ein anderes System bekommt
                Christian

                Comment


                • #9
                  naja, ich denke diese Online Angebote sind eher für collaborative Zwecke oder eben interaktive Ansätze zum Remote Support gedacht.
                  Vermutlich ist hier das Problem, dass
                  a) rextester kein db2 kann oder
                  b) sqlfiddle das könnte, wenn es verfügbar wäre

                  Weiß nicht, welche es sonst noch gibt.

                  Das Hopping scheint also eine "Notlösung" zur Veröffentlichung des Problems zu sein. Und klar, die Unterschiede sind oft minimal oder gar nicht da. Für den Anfänger aber gerade dann doch eine Hürde.

                  Ich würde auch erwarten, dass sqlfiddle & co einem eine saubere Umgebung liefern, aber das scheint nicht immer zu klappen. Wenn man das Problem einmal erkannt hat, ist es ja auch leicht zu umgehen.

                  Grundsätzlich ist natürlich die heimische DB immer besser als die Cloud.

                  Comment

                  Working...
                  X