powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите увидеть ошибку синтаксиса
11 сообщений из 11, страница 1 из 1
Помогите увидеть ошибку синтаксиса
    #39711063
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня есть такой запрос:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
with
  CL as (
select "YEAR", "MONTH", "CLIENT"
...
from (
select trunc(AA.MOMENT,'YYYY') as "YEAR", trunc(AA.MOMENT,'MM') as "MONTH", to_number(SL.VALUE) as "CLIENT"
...
) RES
group by "YEAR", "MONTH", "CLIENT"
)
, FL as (
select trunc(PA.PERIOD_START,'YYYY') as "YEAR", trunc(PA.PERIOD_START,'MM') as "MONTH", S.CUSTOMER_ID as "CLIENT"
...
)
select coalesce(CL."YEAR", FL."YEAR") as "YEAR", coalesce(CL."MONTH", FL."MONTH") as "MONTH", coalesce(CL."CLIENT", FL."CLIENT") as "CLIENT"
, CL."SUM", CL.SUM0, CL.SUM1, CL.SUM2, CL.SUM3, CL.SUM4, CL.SUM5, CL.SUM6, CL.SUM7, CL.SUM8, CL.SUM9
, FL."FEE", FL.FEE0, FL.FEE1, FL.FEE2, FL.FEE3, FL.FEE4, FL.FEE5, FL.FEE6, FL.FEE7, FL.FEE8, FL.FEE9
from CL outer join FL on (FL."YEAR" = CL."YEAR" and FL."MONTH" = CL."MONTH" and FL."CLIENT" = CL."CLIENT")



По отдельности внутренние запросы (CL и FL) выполняются успешно.
Но когда я пытаюсь запустить его целиком, получаю ошибку:
Код: plaintext
ORA-00904: "CL"."CLIENT": недопустимый идентификатор
Иногда ошибка бывает ORA-00900.
Ошибка скорее всего не в CL.CLIENT, а где-то рядом, но я ее в упор не вижу. Не подскажите, что не так?
...
Рейтинг: 0 / 0
Помогите увидеть ошибку синтаксиса
    #39711067
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот минимизированный пример:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
with
  CL as (
select 2018 as "YEAR", 1 as "MONTH", 1 as "CLIENT", 10 as "SUM" from dual
)
, FL as (
select 2018 as "YEAR", 2 as "MONTH", 2 as "CLIENT", 20 as "FEE" from dual
)
select coalesce(CL."YEAR", FL."YEAR") as "YEAR", coalesce(CL."MONTH", FL."MONTH") as "MONTH", coalesce(CL."CLIENT", FL."CLIENT") as "CLIENT"
, CL."SUM", FL."FEE"
from CL outer join FL on (FL."YEAR" = CL."YEAR" and FL."MONTH" = CL."MONTH" and FL."CLIENT" = CL."CLIENT")


И я не вижу в нем ошибки.
...
Рейтинг: 0 / 0
Помогите увидеть ошибку синтаксиса
    #39711071
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

C кирилицей часом не набрано?


ps
List of Oracle Reserved Words
YEAR
.....
stax
...
Рейтинг: 0 / 0
Помогите увидеть ошибку синтаксиса
    #39711074
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, нужно было полностью указывать синтаксис внешнего join: full outer join
...
Рейтинг: 0 / 0
Помогите увидеть ошибку синтаксиса
    #39711078
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.
Код: plsql
1.
CL outer join FL


И я не вижу в нем ошибки.
Ошибко тут.
...
Рейтинг: 0 / 0
Помогите увидеть ошибку синтаксиса
    #39711084
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.Нет, нужно было полностью указывать синтаксис внешнего join: full outer join
outer join бывает трех видов: left, right, full
Опускать можно слово outer, но не {left, right, full}.

Кроме того, всегда используйте алиасы.
В некоторых местах (особенно в новых синтаксических конструкциях и расширениях типа объектного) без алиаса вообще толком не работает. Проще всегда писать алиас, чем угадывать что именно "пошло не так"
...
Рейтинг: 0 / 0
Помогите увидеть ошибку синтаксиса
    #39711087
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrey_anonymousКроме того, всегда используйте алиасы.
Речь про CL и FL? Это ведь и так альясы, разве нет?
...
Рейтинг: 0 / 0
Помогите увидеть ошибку синтаксиса
    #39711095
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.,

Так работает:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
with
  CL as (
select "YEAR", "MONTH", "CLIENT"
from (
select '2018' as "YEAR", '12' as "MONTH", 1 as "CLIENT" from dual
) RES
group by "YEAR", "MONTH", "CLIENT"
)
, FL as (
select '2018' as "YEAR", '12' as "MONTH", 2 as "CLIENT" from dual
)
select coalesce(CL."YEAR", FL."YEAR") as "YEAR", coalesce(CL."MONTH", FL."MONTH") as "MONTH", coalesce(CL."CLIENT", FL."CLIENT") as "CLIENT"
--, CL."SUM", CL.SUM0, CL.SUM1, CL.SUM2, CL.SUM3, CL.SUM4, CL.SUM5, CL.SUM6, CL.SUM7, CL.SUM8, CL.SUM9
--, FL."FEE", FL.FEE0, FL.FEE1, FL.FEE2, FL.FEE3, FL.FEE4, FL.FEE5, FL.FEE6, FL.FEE7, FL.FEE8, FL.FEE9
from CL --outer 
join FL on (FL."YEAR" = CL."YEAR" and FL."MONTH" = CL."MONTH" and FL."CLIENT" = CL."CLIENT")



А так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
with
  CL as (
select "YEAR", "MONTH", "CLIENT"
from (
select '2018' as "YEAR", '12' as "MONTH", 1 as "CLIENT" from dual
) RES
group by "YEAR", "MONTH", "CLIENT"
)
, FL as (
select '2018' as "YEAR", '12' as "MONTH", 2 as "CLIENT" from dual
)
select coalesce(CL."YEAR", FL."YEAR") as "YEAR", coalesce(CL."MONTH", FL."MONTH") as "MONTH", coalesce(CL."CLIENT", FL."CLIENT") as "CLIENT"
--, CL."SUM", CL.SUM0, CL.SUM1, CL.SUM2, CL.SUM3, CL.SUM4, CL.SUM5, CL.SUM6, CL.SUM7, CL.SUM8, CL.SUM9
--, FL."FEE", FL.FEE0, FL.FEE1, FL.FEE2, FL.FEE3, FL.FEE4, FL.FEE5, FL.FEE6, FL.FEE7, FL.FEE8, FL.FEE9
from CL outer 
join FL on (FL."YEAR" = CL."YEAR" and FL."MONTH" = CL."MONTH" and FL."CLIENT" = CL."CLIENT")



ORA-00904: "CL"."CLIENT": invalid identifier
...
Рейтинг: 0 / 0
Помогите увидеть ошибку синтаксиса
    #39711146
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alibek B.andrey_anonymousКроме того, всегда используйте алиасы.
Речь про CL и FL? Это ведь и так альясы, разве нет?

c алиасами быстрее найдете ошибку

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
SQL> ed
Wrote file afiedt.buf

  1  with
  2   d1 as (select 1 a from dual)
  3  ,d2 as (select 2 b from dual)
  4* select * from d1 t1 outer join d2 t2  on (t1.a=t2.b)
SQL> /
select * from d1 t1 outer join d2 t2  on (t1.a=t2.b)
                    *
ERROR at line 4:
ORA-00933: SQL command not properly ended


SQL> ed
Wrote file afiedt.buf

  1  with
  2   d1 as (select 1 a from dual)
  3  ,d2 as (select 2 b from dual)
  4* select * from d1 outer join d2 on (d1.a=d2.b)
SQL> /
select * from d1 outer join d2 on (d1.a=d2.b)
                                   *
ERROR at line 4:
ORA-00904: "D1"."A": invalid identifier


SQL> ed
Wrote file afiedt.buf

  1  with
  2   d1 as (select 1 a from dual)
  3  ,d2 as (select 2 b from dual)
  4* select * from d1 d1 outer join d2 d2 on (d1.a=d2.b)
SQL> /
select * from d1 d1 outer join d2 d2 on (d1.a=d2.b)
                    *
ERROR at line 4:
ORA-00933: SQL command not properly ended



имхо ето бага

.....
stax
...
Рейтинг: 0 / 0
Помогите увидеть ошибку синтаксиса
    #39711163
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

ИМХО Oracle ожидает (в выделенном вами случае) что нибудь вроде
Код: plsql
1.
2.
3.
4.
with
   d1 as (select 1 a from dual)
  ,d2 as (select 2 b from dual)
select * from d1 outer join d2 on (outer.a=d2.b) 



Regards

Maxim
...
Рейтинг: 0 / 0
Помогите увидеть ошибку синтаксиса
    #39711170
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim DemenkoStax,

ИМХО Oracle ожидает (в выделенном вами случае) что нибудь вроде
Код: plsql
1.
2.
3.
4.
with
   d1 as (select 1 a from dual)
  ,d2 as (select 2 b from dual)
select * from d1 outer join d2 on (outer.a=d2.b) 



Regards

Maxim

спасибо, понял

был неправ

.....
stax
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите увидеть ошибку синтаксиса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]