Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите увидеть ошибку синтаксиса / 11 сообщений из 11, страница 1 из 1
01.10.2018, 16:36
    #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
01.10.2018, 16:42
    #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
01.10.2018, 16:44
    #39711071
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите увидеть ошибку синтаксиса
Alibek B.,

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


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


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

Кроме того, всегда используйте алиасы.
В некоторых местах (особенно в новых синтаксических конструкциях и расширениях типа объектного) без алиаса вообще толком не работает. Проще всегда писать алиас, чем угадывать что именно "пошло не так"
...
Рейтинг: 0 / 0
01.10.2018, 17:01
    #39711087
Alibek B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Помогите увидеть ошибку синтаксиса
andrey_anonymousКроме того, всегда используйте алиасы.
Речь про CL и FL? Это ведь и так альясы, разве нет?
...
Рейтинг: 0 / 0
01.10.2018, 17:13
    #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
01.10.2018, 17:59
    #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
01.10.2018, 18:04
    #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
01.10.2018, 18:12
    #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
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Помогите увидеть ошибку синтаксиса / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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