2017-01-13 2 views
0
create table Funkcje 
(
    nazwa_funkcji varchar(15) constraint funk_pk PRIMARY KEY, 
    min_myszy number(5) funk_min_nn NOT NULL, 
    max_myszy number(5) funk_max_nn NOT NULL, 
    constraint funk_ch check(min_myszy < max_myszy) 
) 

Я получаю сообщение об ошибке при создании таблицы заказов:00907. 00000 - "отсутствует правая скобка"

ORA-00907 - "отсутствует правая скобка"

ответ

3

Если вы хотите назовите ограничение NOT NULL в строке, вам нужно использовать ключевое слово ограничения, как и для любого другого типа ограничений.

create table Funkcje 
(
    nazwa_funkcji varchar(15) constraint funk_pk PRIMARY KEY, 
    min_myszy number(5) constraint funk_min_nn NOT NULL, 
    max_myszy number(5) constraint funk_max_nn NOT NULL, 
    constraint funk_ch check(min_myszy < max_myszy) 
) 

Это возвращает следующее в словаре данных

SQL> select constraint_name, constraint_type, search_condition_vc 
    2 from user_constraints 
    3 where table_name = 'FUNKCJE'; 

CONSTRAINT_NAME  C SEARCH_CONDITION_VC 
-------------------- - ----------------------- 
FUNK_MIN_NN   C "MIN_MYSZY" IS NOT NULL 
FUNK_MAX_NN   C "MAX_MYSZY" IS NOT NULL 
FUNK_CH    C min_myszy < max_myszy 
FUNK_PK    P 

Кроме того, хотя VARCHAR и varchar2 идентичны Oracle не гарантирует, что текущее поведение VARCHAR будет продолжаться (это было то же самое в течение очень долгого времени, хотя). Было бы более обычным использовать varchar2. The documentation says:

Не используйте тип данных VARCHAR. Вместо этого используйте тип данных VARCHAR2. Хотя тип данных VARCHAR в настоящее время является синонимом VARCHAR2, , тип данных VARCHAR планируется переопределить как отдельный тип данных , используемый для символьных строк переменной длины по сравнению с различной семантикой сравнения.

Смежные вопросы