2017-08-01 280 views
-1

我想創建一個表,我得到的錯誤invalid datatype。我試圖改變變量,但錯誤依然存在。有人能幫我嗎?SQL創建表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 
); 

錯誤

ORA-00902: invalid datatype 

感謝大家提前!

回答

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;它不會造成錯誤,但會造成混亂,最好在可以的時候遵循他們的建議。他們一直在說,只要我記得它會被重新定義,但是誰知道,它可能會發生一天...

+0

非常感謝Alex! – dansan

+0

關於你最後的評論(「這可能發生一天......」) - 我等不及了!就我所知,重新定義VARCHAR的主要原因與Oracle遵守SQL標準有關 - 特別是允許空字符串與NULL不同。 (與SQL標準和邏輯相反,空字符串和'NULL'在Oracle中是相同的。) – mathguy

+0

@mathguy自信地提供一個錯誤的答案,沒有什麼比這讓自己感到尷尬。根據您的建議,我刪除了以前的答案。 –