Какой уродливый код! Не удивительно, что вы не можете обнаружить ошибку.
Я удалил двойные кавычки и +
знаки. Затем Formatter показывает это:
<snip>
|| DECODE (hs.ora3,
NULL, NULL,
', ' || udmurtneft_n.dg_sdes (hs.ora3))
--> error FROM udmurtneft_n.well_stock_hist_ext hs || decode(hs.ora3, null, null, ', ' ||
Вы объединяете псевдоним таблицы (hs
) с еще одним DECODE
- это не сработает.
Если мы полностью удалим это предложение FROM
, код будет отформатирован:
SELECT uwi,
well_name,
cid_rab,
cid,
plast,
top,
base,
H_ef,
porosity_alt,
KH,
nas,
sat_tek
FROM (SELECT ws.uwi,
h.well_name,
h.crstatus,
h.class,
h.well_type,
(SELECT udmurtneft_n.dg_sdes (hs.ora1)
|| DECODE (hs.ora2,
NULL, NULL,
': ' || udmurtneft_n.dg_sdes (hs.ora2))
|| DECODE (hs.ora3,
NULL, NULL,
', ' || udmurtneft_n.dg_sdes (hs.ora3))
-- FROM udmurtneft_n.well_stock_hist_ext hs --> FROM removed, here
|| DECODE (hs.ora3,
NULL, NULL,
', ' || udmurtneft_n.dg_sdes (hs.ora3))
FROM udmurtneft_n.well_stock_hist_ext hs
WHERE DECODE (INSTR (ws.uwi, 'B'),
0, ws.uwi,
SUBSTR (ws.uwi, 1, LENGTH (ws.uwi) - 2)) =
hs.uwi
AND hs.status_date IN '01.04.2019')
AS cid_rab,
udmurtneft_n.dg_sdes (ws.reservoir) AS cid,
udmurtneft_n.dg_des (ws.layer_id) AS plast,
ws.top,
ws.base,
ws.top_dsrd,
ws.base_dsrd,
ABS (ROUND (ws.top_dsrd, 5) - ROUND (ws.base_dsrd, 5)) AS H_ef,
ROUND (ws.permeability_alt, 5),
ws.porosity_alt,
ABS (ROUND (ws.top_dsrd, 5) - ROUND (ws.base_dsrd, 5))
* ROUND (ws.permeability, 5)
AS KH,
ws.saturation,
udmurtneft_n.dg_des (ws.saturation) AS nas,
(SELECT udmurtneft_n.str_sum (DISTINCT ps.top)
FROM unofm.perflayers2 ps
WHERE Uwi = ws.Uwi
AND ( ( top >= ws.top
AND top < ws.base)
OR ( botm > ws.top
AND botm <= ws.base)
OR ( ws.top >= top
AND ws.top < botm)
OR ( ws.base > top
AND ws.base <= botm))
AND ps.dat_perf IS NOT NULL
AND Interpreter IN (1, 3))
top_ps,
(SELECT udmurtneft_n.str_sum (DISTINCT ps.botm)
FROM unofm.perflayers2 ps
WHERE Uwi = ws.Uwi
AND ( ( top >= ws.top
AND top < ws.base)
OR ( botm > ws.top
AND botm <= ws.base)
OR ( ws.top >= top
AND ws.top < botm)
OR ( ws.base > top
AND ws.base <= botm))
AND ps.dat_perf IS NOT NULL
AND Interpreter IN (1, 3))
botm_ps,
(SELECT udmurtneft_n.str_sum (DISTINCT tt.sat_cat)
FROM udmurtneft_n.geophys_st st,
udmurtneft_n.geophys_st_interpr i,
udmurtneft_n.dict_sat tt
WHERE st.id = i.id
AND st.uwi = ws.uwi
AND TRIM (tt.sat_rem) = TRIM (i.saturation)
AND ( ( i.top >= ws.top
AND i.top < ws.base)
OR ( i.bottom > ws.top
AND i.bottom <= ws.base)
OR ( ws.top >= i.top
AND ws.top < i.bottom)
OR ( ws.base > i.top
AND ws.base <= i.bottom)))
AS sat_tek
FROM udmurtneft_n.well_log_result_sublayers ws,
udmurtneft_n.well_hdr h
WHERE ws.uwi = h.uwi
AND ws.interpreter IN (1, 3)
AND ws.uwi NOT LIKE '%_F%'
AND h.field = 510399)
WHERE top_ps IS NULL
AND H_ef >= 1
AND KH > 100
AND porosity_alt >= 0.16
AND class = 26690
AND crstatus NOT IN (85790, 85850)
AND well_type IS NULL
AND uwi NOT LIKE '%B%'
AND saturation IN (217463,
217443,
217483,
217603,
217683,
217783,
273943,
274003,
1083681,
1126381)
AND ( sat_tek IS NULL
OR ( sat_tek NOT LIKE '%водонасыщенный%'
AND sat_tek NOT LIKE '%газонасыщенный%'
AND sat_tek NOT LIKE
'%газоводонасыщенный%%'))
ORDER BY uwi, top;
Посмотрите, поможет ли это.