2016-04-06 46 views
-1

试图制作此表,得到ORA-00907: missing right parenthesis缺少权限Peren,Oracle语法错误

定义:

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' 
    ); 

全文:

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)

(通过PHP/PDO)。

我错过了什么?

+1

你真的使用PHP5.2.5? – RiggsFolly

+0

多年来,Oracle不推荐使用长数据类型(尽管元数据仍然使用它)。此外,为什么当它们被设置为数字列的默认值时引用数字1和0? – kevinsky

+0

我正试图将一个MySQL表移植到Oracle。我谷歌的例子有引用的数字。在MySQL中工作并删除它们并没有帮助。 –

回答

1

直到Oracle 11g.I假定您正在使用Oracle版本11g及更低版本时,才能在create table语句中使用Sequence。

为了使用自动增量标识在创建表,你必须使用一个序列

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

和触发

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; 

和 要么使用触发器像上面 或 在插入语句中,调用sequence.nextval以将数据插入表中。

更改创建表定义这样

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。 。 。不幸的是,这并没有解决SQL小提琴中的问题。我认为在定义中可能有一个倒退的字符。 –

+0

仍然收到相同的错误。 –

+2

将DEFAULT'0'的顺序颠倒NOT NULL ENABLE – cableload