powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / правильно составить селект? :)
11 сообщений из 11, страница 1 из 1
правильно составить селект? :)
    #35778847
Фотография Legi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Товарищи.. вот уже который раз бьюсь головой об стену, когда мне нужно выполнить какоу-нить хитрожопный селект в репорт... в ТОАДе, ПЛ\СКУЛе отрабатывает замечательно.. оттестировал.. и вот настало время переносить в АРЕХи...
но что я вижу... а что я блин только не вижу...
хорошо если он мне дал успешно сохранить изменения запроса в регионе репорта...
но дальше опять НЕПОНЯТНЫЕ по какой причине взялись ошибки типа "не нашёл ключевое слово FROM" и т.д. (методом тыка правлю потенциальные неприятности.. но не вижу смысла в исправлениях.. где-то допустим не поставил двойные кавычки... а где-то ьез них работает.. а где-то без них не будет работать)
начинает напрягать :)

Кто поделится безценным опытом СИНТАКСИСА SQL для APEX? :)

Как правильно составлять запросы? (вложенные селекты разрешены? объединения?)
...
Рейтинг: 0 / 0
правильно составить селект? :)
    #35779514
Фотография Ales Protiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запрос в студию.
Ни разу не сталкивался ни с какими ограничениями...
...
Рейтинг: 0 / 0
правильно составить селект? :)
    #35779568
Фотография Legi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изначально выглядит так (и в ПЛ\СКЛ Девелопере работает великолепно):
Код: plaintext
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.
SELECT t.m_id
       t.short_gps_time,
       t.regno,
       t.adr,
       t.speed,
       t.type_of_msg,
       t.km,
       t.sum_km
FROM
(SELECT   mi.m_id,
         CASE WHEN mi.type_of_msg = '42' AND LAG(mi.type_of_msg) over (order by mi.gps_time) = '41' THEN LAG(mi.gps_time) over (order by mi.gps_time)
              WHEN mi.type_of_msg = '42' AND LAG(mi.type_of_msg) over (order by mi.gps_time) = '42' THEN NULL
              WHEN mi.type_of_msg = '41' THEN mi.gps_time
         END short_gps_time,
         pkg_cw_function.Func_carid_to_regno( 1747 ) as regno,
         mi.adr,
         mi.speed,
         mi.type_of_msg,
         kkm.km,
         ROUND(SUM(kkm.km) over(order by mi.gps_time), 2 ) as sum_km
  FROM MESSAGES_IN mi,
       KARTKM kkm"
  WHERE mi.car_id = :P1_CAR_ID
        AND mi.gps_time >= TO_DATE(:P1_DATE_START,'dd.mm.yyyy')
        AND mi.gps_time <= TO_DATE(:P1_DATE_STOP,'dd.mm.yyyy')
        AND kkm.m_id = mi.m_id
        AND (mi.type_of_msg = '41' OR mi.type_of_msg = '42')
  ORDER BY mi.gps_time) t
WHERE t.short_gps_time IS NOT NULL

этот съедается если указать ему
Use Generic Column Names (parse query at runtime only)


а вот если указать ему дефолтовое "Use Query-Specific Column Names and Validate Query" то ругаецо на:
Код: plaintext
Query cannot be parsed within the Builder. If you believe your query is syntactically correct, check the ''generic columns'' checkbox below the region source to proceed without parsing. ORA- 00923 : FROM keyword not found where expected


вот так он съелся (если так же указать Use Generic Column Names (parse query at runtime only)):
Код: plaintext
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.
SELECT "t"."m_id" as "m_id",
       "t"."short_gps_time" as "short_gps_time",
       "t"."regno" as "regno",
       "t"."adr" as "adr",
       "t"."speed" as "speed",
       "t"."type_of_msg" as "type_of_msg",
       "t"."km" as "km",
       "t"."sum_km" as "sum_km"
FROM
(SELECT   "mi"."m_id",
         CASE WHEN mi.type_of_msg = '42' AND LAG(mi.type_of_msg) over (order by mi.gps_time) = '41' THEN LAG(mi.gps_time) over (order by mi.gps_time)
              WHEN mi.type_of_msg = '42' AND LAG(mi.type_of_msg) over (order by mi.gps_time) = '42' THEN NULL
              WHEN mi.type_of_msg = '41' THEN mi.gps_time
         END "short_gps_time",
         pkg_cw_function.Func_carid_to_regno( 1747 ) as "regno",
         "mi."adr",
         "mi."speed",
         "mi."type_of_msg",
         "kkm"."km",
         ROUND(SUM("kkm"."km") over(order by "mi"."gps_time"),2) as "sum_km"
  FROM "MESSAGES_IN" "mi",
       "KARTKM" "kkm"
  WHERE "mi"."car_id" = :P1_CAR_ID
        AND "mi"."gps_time" >= TO_DATE(:P1_DATE_START,'dd.mm.yyyy')
        AND "mi"."gps_time" <= TO_DATE(:P1_DATE_STOP,'dd.mm.yyyy')
        AND "kkm".m_id = "mi"."m_id"
        AND ("mi"."type_of_msg" = '41' OR "mi"."type_of_msg" = '42')
  ORDER BY "mi"."gps_time") "t"
WHERE "t"."short_gps_time" IS NOT NULL

но ругается при вызове:
Код: plaintext
1.
failed to parse SQL query:
ORA- 00923 : FROM keyword not found where expected
...
Рейтинг: 0 / 0
правильно составить селект? :)
    #35779627
Фотография Ales Protiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LegiИзначально выглядит так (и в ПЛ\СКЛ Девелопере работает великолепно):
Код: plaintext
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.
SELECT t.m_id
       t.short_gps_time,
       t.regno,
       t.adr,
       t.speed,
       t.type_of_msg,
       t.km,
       t.sum_km
FROM
(SELECT   mi.m_id,
         CASE WHEN mi.type_of_msg = '42' AND LAG(mi.type_of_msg) over (order by mi.gps_time) = '41' THEN LAG(mi.gps_time) over (order by mi.gps_time)
              WHEN mi.type_of_msg = '42' AND LAG(mi.type_of_msg) over (order by mi.gps_time) = '42' THEN NULL
              WHEN mi.type_of_msg = '41' THEN mi.gps_time
         END short_gps_time,
         pkg_cw_function.Func_carid_to_regno( 1747 ) as regno,
         mi.adr,
         mi.speed,
         mi.type_of_msg,
         kkm.km,
         ROUND(SUM(kkm.km) over(order by mi.gps_time), 2 ) as sum_km
  FROM MESSAGES_IN mi,
       KARTKM kkm"
  WHERE mi.car_id = :P1_CAR_ID
        AND mi.gps_time >= TO_DATE(:P1_DATE_START,'dd.mm.yyyy')
        AND mi.gps_time <= TO_DATE(:P1_DATE_STOP,'dd.mm.yyyy')
        AND kkm.m_id = mi.m_id
        AND (mi.type_of_msg = '41' OR mi.type_of_msg = '42')
  ORDER BY mi.gps_time) t
WHERE t.short_gps_time IS NOT NULL

этот съедается если указать ему
Use Generic Column Names (parse query at runtime only)


а вот если указать ему дефолтовое "Use Query-Specific Column Names and Validate Query" то ругаецо на:
Код: plaintext
Query cannot be parsed within the Builder. If you believe your query is syntactically correct, check the ''generic columns'' checkbox below the region source to proceed without parsing. ORA- 00923 : FROM keyword not found where expected


вот так он съелся (если так же указать Use Generic Column Names (parse query at runtime only)):
Код: plaintext
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.
SELECT "t"."m_id" as "m_id",
       "t"."short_gps_time" as "short_gps_time",
       "t"."regno" as "regno",
       "t"."adr" as "adr",
       "t"."speed" as "speed",
       "t"."type_of_msg" as "type_of_msg",
       "t"."km" as "km",
       "t"."sum_km" as "sum_km"
FROM
(SELECT   "mi"."m_id",
         CASE WHEN mi.type_of_msg = '42' AND LAG(mi.type_of_msg) over (order by mi.gps_time) = '41' THEN LAG(mi.gps_time) over (order by mi.gps_time)
              WHEN mi.type_of_msg = '42' AND LAG(mi.type_of_msg) over (order by mi.gps_time) = '42' THEN NULL
              WHEN mi.type_of_msg = '41' THEN mi.gps_time
         END "short_gps_time",
         pkg_cw_function.Func_carid_to_regno( 1747 ) as "regno",

 "mi."adr", 
"mi."speed", 
"mi."type_of_msg",
         "kkm"."km",
         ROUND(SUM("kkm"."km") over(order by "mi"."gps_time"),2) as "sum_km"
  FROM "MESSAGES_IN" "mi",
       "KARTKM" "kkm"
  WHERE "mi"."car_id" = :P1_CAR_ID
        AND "mi"."gps_time" >= TO_DATE(:P1_DATE_START,'dd.mm.yyyy')
        AND "mi"."gps_time" <= TO_DATE(:P1_DATE_STOP,'dd.mm.yyyy')
        AND "kkm".m_id = "mi"."m_id"
        AND ("mi"."type_of_msg" = '41' OR "mi"."type_of_msg" = '42')
  ORDER BY "mi"."gps_time") "t"
WHERE "t"."short_gps_time" IS NOT NULL

но ругается при вызове:
Код: plaintext
1.
failed to parse SQL query:
ORA- 00923 : FROM keyword not found where expected


Когда берешь колонки в двойные кавычки, то нужно писать в верхнем регистре как правило.
...
Рейтинг: 0 / 0
правильно составить селект? :)
    #35779646
Фотография Legi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ту кавычку в первом варианте я уже исправил сразу :)

про верхний регистр это уже хорошо) сейчас переколбашу
...
Рейтинг: 0 / 0
правильно составить селект? :)
    #35779706
Фотография Legi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
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.
SELECT "T"."M_ID" as "M_ID"
       "T"."SHORT_GPS_TIME" as "SHORT_GPS_TIME",
       "T"."REGNO" as "REGNO",
       "T"."ADR" as "ADR",
       "T"."SPEED" as "SPEED",
       "T"."TYPE_OF_MSG" as "TYPE_OF_MSG",
       "T"."KM" as "KM",
       "T"."SUM_KM" as "SUM_KM"
FROM
(SELECT   "MESSAGES_IN"."M_ID",
         CASE WHEN "MESSAGES_IN"."TYPE_OF_MSG" = '42' AND LAG("MESSAGES_IN"."TYPE_OF_MSG") over (order by "MESSAGES_IN"."GPS_TIME") = '41' THEN LAG("MESSAGES_IN"."GPS_TIME") over (order by "MESSAGES_IN"."GPS_TIME")
              WHEN "MESSAGES_IN"."TYPE_OF_MSG" = '42' AND LAG("MESSAGES_IN"."TYPE_OF_MSG") over (order by "MESSAGES_IN"."GPS_TIME") = '42' THEN NULL
              WHEN "MESSAGES_IN"."TYPE_OF_MSG" = '41' THEN "MESSAGES_IN"."GPS_TIME"
         END "SHORT_GPS_TIME",
         pkg_cw_function.Func_carid_to_regno(:P1_CAR_ID) as "REGNO",
         "MESSAGES_IN"."ADR",
         "MESSAGES_IN"."SPEED",
         "MESSAGES_IN"."TYPE_OF_MSG",
         "KARTKM"."KM",
         ROUND(SUM("KARTKM"."KM") over(order by "MESSAGES_IN"."GPS_TIME"), 2 ) as "SUM_KM"
  FROM "MESSAGES_IN" "MESSAGES_IN",
       "KARTKM" "KARTKM"
  WHERE "MESSAGES_IN"."CAR_ID" = :P1_CAR_ID
        AND "MESSAGES_IN"."GPS_TIME" >= TO_DATE(:P1_DATE_START,'dd.mm.yyyy')
        AND "MESSAGES_IN"."GPS_TIME" <= TO_DATE(:P1_DATE_STOP,'dd.mm.yyyy')
        AND "KARTKM"."M_ID" = "MESSAGES_IN"."M_ID"
        AND ("MESSAGES_IN"."TYPE_OF_MSG" = '41' OR "MESSAGES_IN"."TYPE_OF_MSG" = '42')
  ORDER BY "MESSAGES_IN"."GPS_TIME") "T"
WHERE "T"."SHORT_GPS_TIME" IS NOT NULL



при попытки сохранить с флажком:
Use Query-Specific Column Names and Validate Query

Выплёвывает еррор:
Query cannot be parsed within the Builder. If you believe your query is syntactically correct, check the ''generic columns'' checkbox below the region source to proceed without parsing. ORA-00923: FROM keyword not found where expected
___________________________________
при попытки сохранить с флажком:
Use Generic Column Names (parse query at runtime only) (значение 8)
сожрал...

но при запуске приложения и загрузки этого репорта ругается на:

Код: plaintext
1.
failed to parse SQL query:
ORA- 00923 : FROM keyword not found where expected
...
Рейтинг: 0 / 0
правильно составить селект? :)
    #35779725
Фотография Ales Protiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Legi
Код: plaintext
1.
2.
SELECT t.m_id
       t.short_gps_time,

запятую пропустил
с двойными кавычками не заморачивайся
...
Рейтинг: 0 / 0
правильно составить селект? :)
    #35779733
Фотография Legi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я идиот!!!!!!!!!!

в первой строчке ошибка (
там НЕТ запятой в селекте!!!!!! (

я палено блин
...
Рейтинг: 0 / 0
правильно составить селект? :)
    #35779736
Фотография Legi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ales ProtivLegi
Код: plaintext
1.
2.
SELECT t.m_id
       t.short_gps_time,

запятую пропустил
с двойными кавычками не заморачивайся


уху спасибо, уже увидел :)
...
Рейтинг: 0 / 0
правильно составить селект? :)
    #35782529
Фотография l_kator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И как это работало в девелопере?
...
Рейтинг: 0 / 0
правильно составить селект? :)
    #35782576
Фотография Legi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в девелопере было t.*
а потом когда скопировал, начал впсивать полянку вместо звёздочки...
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Oracle APEX [игнор отключен] [закрыт для гостей] / правильно составить селект? :)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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