2016-04-06 10 views
-1

Versuchen, diese Tabelle zu machen, erhalten ORA-00907: missing right parenthesis.Fehlende Richtig Peren, Oracle-Syntaxfehler

Definition:

CREATE TABLE "crawler" (
     "id" NUMBER(10,0) NOT NULL ENABLE DEFAULT master_seq.NEXTVAL, 
     "title" VARCHAR2(500) NOT NULL ENABLE, 
     "url" VARCHAR2(500) NOT NULL ENABLE, 
     "body" LONG NOT NULL ENABLE, 
     "depth" NUMBER(10,0) NOT NULL ENABLE DEFAULT '1', 
     "updated" NUMBER(10,0) NOT NULL ENABLE, 
     "linked_from" VARCHAR2(500) NOT NULL ENABLE, 
     "crawled" NUMBER(10,0) NOT NULL ENABLE DEFAULT '0' 
    ); 

Volltext:

Error: SQLSTATE[HY000]: General error: 907 OCIStmtExecute: ORA-00907: missing right parenthesis (/core-php-src-5.2.5/php-5.2.5/ext/pdo_oci/oci_statement.c:146)

(via PHP/PDO).

Was fehlt mir?

+1

Sind Sie wirklich PHP5.2.5 mit erstellen? – RiggsFolly

+0

Die Verwendung eines langen Datentyps wurde von Oracle seit Jahren nicht empfohlen (obwohl die Metadaten diese immer noch verwenden). Warum zitieren Sie auch die Zahlen 1 und 0, wenn sie als Voreinstellung für eine Zahlenspalte gesetzt sind? – kevinsky

+0

Ich versuche eine MySQL-Tabelle nach Oracle zu portieren. In den Beispielen, die ich gegoogelt habe, wurden die Zahlen zitiert. Works in MySQL und das Entfernen von ihnen hat nicht geholfen. –

Antwort

1

Sie können die Sequenz in Ihrer create table-Anweisung nicht verwenden, bis Oracle 11g.Ich nehme an, dass Sie Oracle Version 11g und niedriger verwenden.

Um eine Autoinkrement Id in der Tabelle erstellen zu können, müssen Sie eine Sequenz verwenden

CREATE SEQUENCE my_table_sequence 
START WITH 1 
MAXVALUE 999999999999999 
MINVALUE 1 
NOCYCLE; 

und einen Trigger

CREATE OR REPLACE TRIGGER my_trigger 
BEFORE INSERT ON my_table 
FOR EACH ROW 
BEGIN 
    SELECT my_table_sequence.NEXTVAL 
    INTO :new.id 
    FROM dual; 
END; 

und entweder einen Auslöser wie oben oder In Ihren INSERT-Anweisungen rufen Sie sequence.nextval auf, um Daten in die Tabelle einzufügen.

ändern Tabellendefinition auf diese Weise

CREATE TABLE "crawler" (
    "id" NUMBER(10,0) NOT NULL ENABLE, 
    "title" VARCHAR2(500) NOT NULL ENABLE, 
    "url" VARCHAR2(500) NOT NULL ENABLE, 
    "body" LONG NOT NULL ENABLE, 
    "depth" NUMBER(10,0) DEFAULT '1' NOT NULL, 
    "updated" NUMBER(10,0) NOT NULL ENABLE, 
    "linked_from" VARCHAR2(500) NOT NULL ENABLE, 
    "crawled" NUMBER(10,0) DEFAULT '0' NOT NULL ENABLE 
); 
+0

@ calbeload. . . Leider behebt das das Problem nicht in SQL Fiddle. Ich denke, dass es in der Definition ein Rückzeichen geben könnte. –

+0

Immer noch der gleiche Fehler. –

+2

Kehren Sie die Reihenfolge wie DEFAULT '0' NICHT NULL ENABLE – cableload