«Отсутствует правильная скобка» SQL РАЗРАБОТЧИК - PullRequest
0 голосов
/ 13 мая 2018

делал школьный проект, но затем столкнулся с этой ошибкой, когда пытался создать таблицу.

CREATE TABLE SSV_PASSENGERS ( PASS_ID# CHAR(6),
 PASS_FNAME VARCHAR(15),
 PASS_LNAME VARCHAR(15),
 PASS_ADDRESS VARCHAR(30),
 PASS_NATION VARCHAR(20),
 PASS_DOB DATE(yyyy-mm-dd),
 PASS SATRATE VARCHAR(2),
 PASS_CAB# CHAR(4),
 PASS_CABFARE NUMBER(6,2),
 PASS_TOTALEX  NUMBER(7,2),
 PASS_MEDINFO VARCHAR(30),
 PASS_DIET VARCHAR(30),
 PASS_EMNAME VARCHAR(20),
 PASS_EMPHONE# CHAR(10),
 PASS_ALTID CHAR(5),
 CONSTRAINT SSV_PASSENGERS_PK PRIMARY KEY (PASS_ID#) )

ORA-00907: отсутствует правая скобка 00907. 00000 - «отсутствует правая скобка»

Может кто-нибудь сказать мне, что не так со сценарием?

Ответы [ 3 ]

0 голосов
/ 13 мая 2018

Сообщение об ошибке ORA-00907: missing right parenthesis указывает на синтаксическую ошибку.Иногда это означает, что у нас на самом деле есть непарный левый квадрат.Но часто это означает, что компилятор натолкнулся на неожиданный символ, который может быть зависающей запятой или неожиданным идентификатором, который компилятор интерпретирует как попытку запустить новый оператор без надлежащего закрытия текущего оператора CREATE TABLE.

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

В этом случае, я думаю, проблема в следующем: PASS_DOB DATE(yyyy-mm-dd).

Oracle хранит даты в стандартной структуре: маски формата предназначены только для отображения как или приведения из строк.

Способ объявления столбцов DATE прост: PASS_DOB DATE.

Кроме того, вам не хватает подчеркивания в одном из имен столбцов: это должно быть PASS_SATRATE VARCHAR(2).

0 голосов
/ 14 мая 2018

Я нашел несколько проблем.

  1. DATE (PASS_DOB DATE (гггг-мм-дд) - вам просто нужно DATE
  2. ПРОЙДИТЕ САТРАТ ВАРХАР (2) - вам нужно подчеркнуть
  3. VARCHAR против VARCHAR2 - VARCHAR для поддержки ANSI - всегда используйте VARCHAR2

Тип данных VARCHAR Тип данных VARCHAR является синонимом VARCHAR2. тип данных. Чтобы избежать возможных изменений в поведении, всегда используйте Тип данных VARCHAR2 для хранения символьных строк переменной длины. ( Docs )

Рабочий код:

create table SSV_PASSENGERS (
    PASS_ID# char(6),
    PASS_FNAME varchar2(15),
    PASS_LNAME varchar2(15),
    PASS_ADDRESS varchar2(30),
    PASS_NATION varchar2(20),
    PASS_DOB date,
    PASS_SATRATE varchar(2),
    PASS_CAB# char(4),
    PASS_CABFARE number(6,2),
    PASS_TOTALEX number(7,2),
    PASS_MEDINFO varchar(30),
    PASS_DIET varchar(30),
    PASS_EMNAME varchar(20),
    PASS_EMPHONE# char(10),
    PASS_ALTID char(5),
    constraint SSV_PASSENGERS_PK primary key ( PASS_ID# )
);

И так как вы используете и помечаете SQL Developer, мы пытаемся показать вам, где у вас проблемы, ищите розовые загогулины возле обидного плохого SQL.

enter image description here

0 голосов
/ 13 мая 2018

Насколько я вижу, скобки в этом утверждении сбалансированы.Возможно ли сообщение об ошибке относительно какого-то другого оператора?

Oracle допускает # как часть идентификаторов столбцов, но препятствует этому.

Онлайн-документация по базе данных Oracle, 10g, выпуск 2(10.2) / Администрирование: имена и квалификаторы объектов схемы говорит:

Идентификаторы без кавычек могут содержать только буквенно-цифровые символы из набора символов вашей базы данных и подчеркивание (_), знак доллара ($),и знак фунта (#).Ссылки на базы данных также могут содержать точки (.) И знаки «at» (@). Oracle настоятельно не рекомендует вам использовать $ и # в не заключенных в кавычки идентификаторах.

(выделено мной)

Интересно, что тот же параграф в документах Oracle 12c не поддерживаетвключите то же предупреждение.

Возможно ли, что вы выполняете оператор создания таблицы в какой-либо среде, которая обрабатывает # как символ комментария (например, оболочку или код Ruby) и игнорирует весь текст, следующий за #

...