Я пытаюсь создать таблицу и получаю сообщение об ошибке 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 ответ
Ошибка возникает из-за скобок, заключенных в имена ограничений; это получает ту же ошибку:
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 рекомендует использовать varchar2
вместо varchar
; это не вызовет ошибок, но вызовет путаницу, и по возможности лучше следовать их рекомендациям. Они говорили, что это будет пересмотрено, сколько я себя помню, но кто знает, это может случиться однажды ...
Похожие вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.
NULL
. (Пустые строки иNULL
- это одно и то же в Oracle, вопреки стандарту SQL и логике.)