2014-01-17 4 views
-1

Это мой код:ORA - 00935: отсутствует выражение

select max(vhis_data.C0432_SAMPL_VALUE1_R), vhis_data.C0401_aid 
from vhis_data, T0401_accounts 
where vhis_data.C0401_aid = T0401_accounts.C0401_aid 
and (
vhis_data.c0401_aid between 1179 and 1291 or 
vhis_data.c0401_aid between 1382 and 1402 or 
vhis_data.c0401_aid between 1462 and 1620 or 

# and so on until... 

vhis_data.c0401_aid between 5450 and 5485 or 
vhis_data.c0401_aid between 5503 and 5495 or 
) 

(эти цифры представляют различные точки в системе)

Программа отображается сообщение об ошибке:

vhis_data.c0401_aid between 1179 and 1291 or 
* 
ERROR at line 5: 
ORA-00936: missing expression 

Я «Я заметил, что первая часть ошибки ссылается на первую строку в моей части кода and (...). Я также заметил, что есть or на последней строке моего кода. Я могу вытащить его, но это лишний orтолько причина, что вся and (...) часть не работает? Или есть еще одна причина, по которой мой код не работает?

(я предполагаю, вложенный мой вопрос, то есть, если есть отсутствует выражение, где делает код остановка выполнения правильно?)

Например, здесь, недостающее выражение потенциально последней строки (потому что он ожидает что-то после «или»). Однако код даже не проходит через первую строку части кода and (...).

Я прочесал сеть для объяснений, касающихся ошибки ORA-00936: отсутствует выражение, но не нашли ничего подходящего, чтобы помочь мне в этой конкретной ситуации.

Я приветствую любую критику или совет, которые у вас могут быть, и благодарим вас заблаговременно за любые вклады, которые вы мне даете!

+0

Запрос разобран в целом. Когда вы говорите, что код даже не проходит через первую строку и (...) части кода_, это на самом деле не имеет смысла. Теперь строка #, указанная в ошибке, может не всегда указывать вам точное место, к сожалению – GriffeyDog

+0

У Oracle есть довольно расплывчатые сообщения об ошибках. Это один из тех. Хороший способ определить причину - принять детские шаги. Напишите запрос skelton и запустите его. Затем добавьте немного и запустите его снова. Если вы получите ошибку во второй раз, вы узнаете, что это вызвано бит, который вы только что добавили. –

ответ

1

вы не должны закончить все это с или

5495 or 
) 

это делает всю вводную фразу недействительной - все в() ... так вот почему номер строки попадает на вершину.

1

Could this extra or be the only reason that the whole and (...) part does not work?

Это причина, по которой весь запрос не работает.

SQL-запрос не выполняется так, как строка команд. Весь запрос скомпилирован, построен план и план выполнен. По этой причине часто возникают синтаксические ошибки, указывающие на строки, которые не имеют фактической ошибки.

Таким образом, «код» не «выполняет» вообще. Компиляция не удалась, поэтому выполнить нечего.

+0

Но почему в ошибке он ссылается только на первую строку «и (...)» части кода?Почему не последняя строка, где ошибка действительно лежит (потому что я ошибочно добавил «или» там)? – vmck

+0

Как я уже сказал в своем другом комментарии, вы не можете положиться на строку #, чтобы указать на точную проблему. Ваша ошибка находится в нижней части этого выражения 'и', и поэтому он указывает вас на' и'. – GriffeyDog

+0

Потому что с точки зрения SQL все внутри И есть _Описание. Просто потому, что у вас есть разрывы строк, не означает, что каждое условие компилируется отдельно. Ошибка затем показывает вам этот оператор, и поскольку у вас есть разрывы строк, он показывает вам первую строку. Если у вас не было разрывов строк, это, вероятно, покажет вам больше. –

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