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

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

Как правильно составлять запросы? (вложенные селекты разрешены? объединения?)
...
Рейтинг: 0 / 0
27.01.2009, 11:53
    #35779514
Ales Protiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
правильно составить селект? :)
Запрос в студию.
Ни разу не сталкивался ни с какими ограничениями...
...
Рейтинг: 0 / 0
27.01.2009, 12:12
    #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
27.01.2009, 12:30
    #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
27.01.2009, 12:33
    #35779646
Legi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
правильно составить селект? :)
ту кавычку в первом варианте я уже исправил сразу :)

про верхний регистр это уже хорошо) сейчас переколбашу
...
Рейтинг: 0 / 0
27.01.2009, 12:47
    #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
27.01.2009, 12:51
    #35779725
Ales Protiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
правильно составить селект? :)
Legi
Код: plaintext
1.
2.
SELECT t.m_id
       t.short_gps_time,

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

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

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

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


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


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