sql create table ORA-00902:数据类型无效

时间:2017-08-01 16:43:51

标签: sql oracle11g

我正在尝试创建一个表格,我收到错误invalid datatype。我试图更改变量,但错误仍然存​​在。有人能帮助我吗?

代码:

CREATE TABLE DETALLEFACTURA (
    NUMERO_FACTURA_DETALLE NUMBER(15),
    NUMERO_DETALLE_FACTURA VARCHAR(20),
    CODIGO_ARTICULO VARCHAR(20),
    CANTIDAD NUMBER(6),
    PORCENTAJE_GANANCIA NUMBER(10),
    PRECIO NUMBER(8),
    CONSTRAINT DETALLE_PK PRIMARY KEY(NUMERO_FACTURA_DETALLE,NUMERO_DETALLE_FACTURA), 

    CONSTRAINT (NUMERO_FACTURA_DETALLE_FK) FOREIGN KEY(NUMERO_FACTURA_DETALLE) REFERENCES FACTURA(NUMERO_FACTURA) on delete cascade,
    CONSTRAINT (NUMERO_DETALLE_FACTURA_FK) FOREIGN KEY(NUMERO_DETALLE_FACTURA) REFERENCES ARTICULO(CODIGO_ARTICULO) on delete cascade
);

错误

ORA-00902: invalid datatype

提前感谢大家!

1 个答案:

答案 0 :(得分:1)

错误来自约束名称周围的括号;这会得到同样的错误:

create table FACTURA(NUMERO_FACTURA NUMBER(15) primary key);
create table ARTICULO(CODIGO_ARTICULO VARCHAR(20) primary key);

CREATE TABLE DETALLEFACTURA(
NUMERO_FACTURA_DETALLE NUMBER(15),
NUMERO_DETALLE_FACTURA VARCHAR(20),
CODIGO_ARTICULO VARCHAR(20),
CANTIDAD NUMBER(6),
PORCENTAJE_GANANCIA NUMBER(10),
PRECIO NUMBER(8),
CONSTRAINT DETALLE_PK PRIMARY KEY(NUMERO_FACTURA_DETALLE,NUMERO_DETALLE_FACTURA), 
CONSTRAINT (NUMERO_FACTURA_DETALLE_FK) FOREIGN KEY(NUMERO_FACTURA_DETALLE) REFERENCES FACTURA(NUMERO_FACTURA) on delete cascade,
CONSTRAINT (NUMERO_DETALLE_FACTURA_FK) FOREIGN KEY(NUMERO_DETALLE_FACTURA) REFERENCES ARTICULO(CODIGO_ARTICULO) on delete cascade
);

ORA-00902:数据类型无效

这不是:

CREATE TABLE DETALLEFACTURA(
NUMERO_FACTURA_DETALLE NUMBER(15),
NUMERO_DETALLE_FACTURA VARCHAR(20),
CODIGO_ARTICULO VARCHAR(20),
CANTIDAD NUMBER(6),
PORCENTAJE_GANANCIA NUMBER(10),
PRECIO NUMBER(8),
CONSTRAINT DETALLE_PK PRIMARY KEY(NUMERO_FACTURA_DETALLE,NUMERO_DETALLE_FACTURA), 
CONSTRAINT NUMERO_FACTURA_DETALLE_FK FOREIGN KEY(NUMERO_FACTURA_DETALLE) REFERENCES FACTURA(NUMERO_FACTURA) on delete cascade,
CONSTRAINT NUMERO_DETALLE_FACTURA_FK FOREIGN KEY(NUMERO_DETALLE_FACTURA) REFERENCES ARTICULO(CODIGO_ARTICULO) on delete cascade
);

Table DETALLEFACTURA created.

唯一的区别是删除了最后两个约束的括号。

顺便提一下,Oracle recommends using varchar2 instead of varchar;它不会导致错误但会引起混淆,并且在可能的情况下遵循他们的建议会更好。他们一直说它会被重新定义,只要我记得,但谁知道,它可能会在某一天发生......