2016-08-03 3 views
0

Ich benutze Python mit Cx_Oracle, um mit Oracle 11g zu arbeiten.Einfache Tabellenerstellung sql funktioniert für mysql und postgre, aber berichtete Fehler in oracle

Ich habe folgende SQL-Arbeit gut mit MySQL/PostgreSQL,

stock_info_create = 'CREATE TABLE STOCK_INFO(' + \ 
        'CODE VARCHAR2(255) NOT NULL,' + \ 
        'NAME VARCHAR2(255) NOT NULL,' + \ 
        'TIMETOMARKET VARCHAR2(255),' + \ 
        'PRIMARY KEY (CODE)' + \ 
        ');' 

Und die zurückgegebene Nachricht war

(cx_Oracle.DatabaseError) ORA-00911: invalid character 
[SQL: 'CREATE TABLE STOCK_INFO(CODE VARCHAR2(255) NOT NULL,NAME VARCHAR2(255) NOT NULL,TIMETOMARKET VARCHAR2(255),PRIMARY KEY (CODE));'] 

Natürlich Diese SQL für Oracle zu verwenden, die ich VARCHAR zu VARCHAR2 da ich geändert dachte der Fehler wurde durch falschen Datentyp verursacht. Aber nach dem Wechsel zu VARCHAR2 funktionierte es immer noch nicht.

Ein weiteres Problem ist auch bei der Tabellenerstellung.

stock_h_create = 'CREATE TABLE STOCK_H_NONE(' + \ 
       'CODE VARCHAR(16) NOT NULL,' + \ 
       'DATE DATE,' + \ 
       'OPEN FLOAT,' + \ 
       'HIGH FLOAT,' + \ 
       'CLOSE FLOAT,' + \ 
       'LOW FLOAT,' + \ 
       'VOLUME FLOAT,' + \ 
       'AMOUNT FLOAT,' + \ 
       'AUTYPE VARCHAR(16),' + \ 
       'LAST_UPDATED TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,' + \ 
       'PRIMARY KEY (CODE,AUTYPE,DATE)' + \ 
       ');' 

Die zurückgegebene Nachricht war

Creating table STOCK_H_NONE... (cx_Oracle.DatabaseError) ORA-00904: : invalid identifier 
[SQL: 'CREATE TABLE STOCK_H_NONE(CODE VARCHAR(16) NOT NULL,DATE DATE,OPEN FLOAT,HIGH FLOAT,CLOSE FLOAT,LOW FLOAT,VOLUME FLOAT,AMOUNT FLOAT,AUTYPE VARCHAR(16),LAST_UPDATED TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,PRIMARY KEY (CODE,AUTYPE,DATE));'] 

Ich schätze jede Art von Hilfe und Ihren Besuch.

Antwort

1

Bestimmte reservierte Wörter in Oracle dürfen nicht als Spaltennamen verwendet werden - Datentypen gehören zu diesen reservierten Wörtern, z. Date, Number. Sie haben einen Fehler "ORA-00904: ungültiger Bezeichner" wegen Ihrer Date Spalte. Versuchen Sie für eine gute Vorgehensweise, reservierte Wörter als Spaltennamen zu vermeiden.

+0

Danke für Ihre Hilfe. Ich habe versucht, NAME in etwas anderes wie SNAME zu ändern, aber es wird immer die gleiche Fehlermeldung zurückgegeben. Außerdem kopiere ich die sql-Abfrage in der Fehlermeldung direkt in sql-developer und führe sie aus. Die Tabelle wurde erfolgreich erstellt. Gibt es andere mögliche Probleme? – Kulbear

+0

Versuchen Sie, das Semikolon in der Zeichenfolge loszuwerden - das kann den Fehler "ungültiges Zeichen" verursachen. –

+0

Sie sind jetzt der Superstar lol. Fehler sind weg. Das ist so komisch, als ich in der Schule war, benutzten wir python2.7 mit cx_Oracle, in diesem Moment brauchte es das Semikolon ... – Kulbear

Verwandte Themen