«Отсутствует правильная скобка» на DEFAULT в CREATE TABLE - PullRequest
0 голосов
/ 30 декабря 2018

В таблице Aposta я хочу, чтобы значение CodEstadoAposta по умолчанию равнялось 0 всякий раз, когда я вставляю новые строки, и не ноль, но это постоянно отображается в выходных данных скрипта:

"Отчет об ошибке - ORA-00907:отсутствует правая круглая скобка 00907. 00000 - «отсутствует правая круглая скобка» * Причина:
* Действие: «

Таблица Aposta:

CREATE TABLE Aposta (
CodAposta Number(10) Primary key,
data DATE default sysdate not null,
hora VARCHAR2(5) not null, 
valor Number(10,2) not null,
quotaTotal Number(10,2)  not null,
CodTipoAposta references TipoAposta(CodTipoAposta) not null,
CodEstadoAposta references EstadoAposta(CodEstadoAposta) default '0' not null
);

И если это полезно, таблицы EstadoAposta и TipoAposta:

CREATE TABLE EstadoAposta (
CodEstadoAposta Number(1) Primary key
  check (CodEstadoAposta in ('0','1','2')),
desc_EstadoAposta VARCHAR2(20) not null
);

CREATE TABLE TipoAposta (
CodTipoAposta Number(1) Primary key
  check (CodTipoAposta in ('0','1')),
desc_TipoAposta VARCHAR2(20) not null
); 

РЕДАКТИРОВАТЬ:

Это показывает: ошибка синтаксиса по умолчанию - у него есть «1» после по умолчанию, но это был только я тестирование.

Ответы [ 3 ]

0 голосов
/ 30 декабря 2018

Я считаю, что вы хотите:

CREATE TABLE Aposta (
    CodAposta Number(10) Primary key,
    data DATE default sysdate not null,
    hora VARCHAR2(5) not null, 
    valor Number(10,2) not null,
    quotaTotal Number(10,2)  not null,
    CodTipoAposta not null references TipoAposta(CodTipoAposta),
    CodEstadoAposta varchar2(1) default '0' references EstadoAposta(CodEstadoAposta) 
);

Обратите внимание, что типы должны быть объявлены для столбцов, когда есть ссылки на внешний ключ.Я также поместил ссылку на внешний ключ в качестве последнего условия в столбце.

0 голосов
/ 30 декабря 2018

Типы данных требуются для всех столбцов: например,

CREATE TABLE Aposta (
    CodAposta Number(10) PRIMARY KEY
  , data date DEFAULT sysdate NOT NULL
  , hora VARCHAR2(5) NOT NULL
  , valor Number(10, 2) NOT NULL
  , quotaTotal Number(10, 2) NOT NULL
  , CodTipoAposta number(1) NOT NULL --references TipoAposta(CodTipoAposta)
  , CodEstadoAposta number(1) DEFAULT 0 --references EstadoAposta(CodEstadoAposta) 
);

db <> fiddle здесь

ссылки прокомментированы, потому что у меня нет этих таблиц, так как используемые значения данных могут быть неверными

0 голосов
/ 30 декабря 2018

Я провел это через Postgresql, слегка модифицированный для типов Postgres, чтобы получить более точную диагностику.

test=> CREATE TABLE Aposta (
test(>     CodAposta decimal(10) Primary key,
test(>     data DATE default sysdate not null,
test(>     hora varchar(5) not null, 
test(>     valor decimal(10,2) not null,
test(>     quotaTotal decimal(10,2)  not null,
test(>     CodTipoAposta references TipoAposta(CodTipoAposta) not null,
test(>     CodEstadoAposta references EstadoAposta(CodEstadoAposta) default '0' not null
test(> );
ERROR:  syntax error at or near "references"
LINE 7:     CodTipoAposta references TipoAposta(CodTipoAposta) not n...

Для каждого столбца требуется имя, тип и дополнительные ограничения.references ... является ограничением.В нем отсутствует тип, который должен соответствовать типу столбца, на который он ссылается.

Кроме того, Oracle выглядит так: чрезвычайно , особенно в отношении порядка ограничений.default должен появляться после типа и перед любыми ограничениями.

enter image description here

CodTipoAposta number (1) not null references TipoAposta(CodTipoAposta),
CodEstadoAposta number(1) default '0' not null references EstadoAposta(CodEstadoAposta)

См. db <> fiddle .

Кажется, что Oracle строго следует стандартной грамматике SQL для определения столбца , где default отделен от ограничений столбца, таких как references и not null.Большинство реализаций SQL используют более расслабленную грамматику, где default считается ограничением столбца.

...