(con la ‘y’ perché fa più figo).
Ora.
Scrivo un nuovo post dopo secoli per lamentarmi (chi l’avrebbe mai detto).
Qui sotto uno script SQL, di cui dovrei capire il funzionamento.
Non dico altro.
(in fondo compare pure una scrollbar orizzontale, visto che l’indentazione diventa, come dire, non banale)
WHENEVER SQLERROR EXIT FAILURE ROLLBACK
WHENEVER OSERROR EXIT FAILURE ROLLBACK
set time on
set timing on
SET VERIFY OFF
WHENEVER SQLERROR CONTINUE
drop table seo_l2kc_lingua_&1 purge;
WHENEVER SQLERROR EXIT FAILURE ROLLBACK
create table seo_l2kc_lingua_&1 tablespace DATA_L nologging as
SELECT a dove,
b parola,
e seo_rank,
f regione,
g c_categoria,
0 ctj,
&1 clingua
FROM (SELECT a,
b,
SUM(e) e,
f,
MAX(g) g
FROM (SELECT s.dove a,
s.cat b,
round((nvl(cnt, 0) ) *
100000 + SUM(s.COUNT)) e,
des_regione f,
c_categoria g
FROM seotmp_tq tq,
(SELECT dove dove,
lower(cat) cat,
COUNT(1) COUNT,
regione des_regione,
ca.cd_categoria c_categoria
FROM seo_tmp_cat_lingua1 ca,
(SELECT dove,
cat cat,
regione
FROM (
--category match esatto --il match esatto lo inserisco solo una volta
SELECT dove,
cat,
regione
FROM (SELECT decode(l.localita,
NULL,
lbs.ds_comune,
l.localita) dove,
ca.ds_categoria cat,
decode(l2.localita,
NULL,
lbs.ds_regione,
l2.localita) regione
FROM mdr_inserzioni_categorie c,
mdr_inserzioni i,
seo_tmp_cat_lingua1 ca,
mdr_anag_lbs lbs,
seo_localita_lingua l,
seo_localita_lingua l2
WHERE ca.cd_categoria = c.cd_categoria
AND c.pr_inserzione =i.pr_inserzione
AND lbs.cd_localita = i.cd_localita_lbs
AND cd_comune !=0
AND cd_frazione =0
AND lbs.cd_lingua=&1
AND l2.lingua = &1
AND l.lingua = &1
AND l2.tipo = 'r'
AND l.tipo = 'c'
AND ca.clingua = &1
AND l.cd(+) = lbs.cd_comune
AND l2.cd(+) = lbs.cd_regione
AND l2.lingua = &1
AND i.fl_lingua = decode(&1,
2,
'1000',
3,
'0100',
4,
'0010',
5,
'0001')
union
SELECT decode(l.localita,
NULL,
lbs.ds_comune,
l.localita) dove,
ca.ds_categoria cat,
decode(l2.localita,
NULL,
lbs.ds_regione,
l2.localita) regione
FROM mdr_inseriti i,
seo_tmp_cat_lingua1 ca,
mdr_anag_lbs lbs,
seo_localita_lingua l,
seo_localita_lingua l2
WHERE lbs.cd_lingua=1 and ca.cd_categoria = i.cd_categoria
AND lbs.cd_localita = i.cd_localita_lbs
AND cd_comune !=0
AND cd_frazione =0
AND l2.lingua = &1
AND l.lingua = &1
AND l2.tipo = 'r'
AND l.tipo = 'c'
AND ca.clingua = &1
AND l.cd(+) = lbs.cd_comune
and l2.lingua=&1
AND l2.cd(+) = lbs.cd_regione
)))
WHERE ca.ds_categoria(+) = cat
GROUP BY dove,
lower(cat),
ca.ds_categoria,
ca.cd_categoria,
regione,
ca.ds_categoria) s
WHERE tq.qs(+) = s.cat
AND tq.dv(+) = s.dove
GROUP BY s.dove,
s.cat,
des_regione,
c_categoria,
cnt
UNION ALL
-----------------------province-----------------------------
SELECT s.dove a,
s.cat b,
round((nvl(cnt, 0) ) *
100000 + SUM(s.COUNT)) e,
des_regione f,
c_categoria g
FROM seotmp_tq tq,
(SELECT dove dove,
lower(cat) cat,
COUNT(1) COUNT,
regione des_regione,
ca.cd_categoria c_categoria
FROM seo_tmp_cat_lingua1 ca,
(SELECT dove,
cat cat,
regione
FROM (
--category match esatto --il match esatto lo inserisco solo una volta
SELECT dove,
cat,
regione
FROM (SELECT lbs.ds_sigla_prov dove,
ca.ds_categoria cat,
decode(l2.localita,
NULL,
lbs.ds_regione,
l2.localita) regione
FROM mdr_inserzioni_categorie c,
mdr_inserzioni i,
seo_tmp_cat_lingua1 ca,
mdr_anag_lbs lbs,
seo_localita_lingua l2
WHERE lbs.cd_lingua =&1 and ca.cd_categoria = c.cd_categoria
AND c.pr_inserzione = i.pr_inserzione
AND lbs.cd_localita =i.cd_localita_lbs
AND cd_comune !=0
AND cd_frazione =0
AND l2.tipo = 'r'
AND ca.clingua = &1
and l2.lingua=&1
AND l2.cd(+) = lbs.cd_regione
and i.fl_lingua=decode(&1,2,'1000',3,'0100',4,'0010',5,'0001')
union
SELECT lbs.ds_sigla_prov dove,
ca.ds_categoria cat,
decode(l2.localita,
NULL,
lbs.ds_regione,
l2.localita) regione
FROM mdr_inseriti i,
seo_tmp_cat_lingua1 ca,
mdr_anag_lbs lbs,
seo_localita_lingua l2
WHERE lbs.cd_lingua =&1 and ca.cd_categoria = i.cd_categoria
-- AND ca.cd_categoria != '000000000'
AND lbs.cd_localita =
i.cd_localita_lbs
AND cd_comune !=0
AND cd_frazione =0
AND l2.tipo = 'r'
and l2.lingua=&1
AND ca.clingua = &1
AND l2.cd(+) = lbs.cd_regione)))
WHERE ca.ds_categoria(+) = cat
GROUP BY dove,
lower(cat),
ca.ds_categoria,
ca.cd_categoria,
regione,
ca.ds_categoria) s
WHERE tq.qs(+) = s.cat
AND tq.dv(+) = s.dove
GROUP BY s.dove,
s.cat,
des_regione,
c_categoria,
cnt
UNION ALL
---------------------raggruppamenti------------------------
SELECT s.dove || ' (zona)' a,
s.cat b,
round((nvl(cnt, 0)
) *
100000 + SUM(s.COUNT)) e,
des_regione f,
c_categoria g
FROM seotmp_tq tq,
(SELECT dove dove,
lower(cat) cat,
COUNT(1) COUNT,
regione des_regione,
ca.cd_categoria c_categoria
FROM seo_tmp_cat_lingua1 ca,
(SELECT dove,
cat cat,
regione
FROM (
--category match esatto --il match esatto lo inserisco solo una volta
SELECT dove,
cat,
regione
FROM (SELECT ll.localita dove, --rag.raggruppamento dove,
ca.ds_categoria cat,
ll3.localita regione
/* decode(l2.localita,
NULL,
lbs.ds_regione,
l2.localita) regione*/
FROM mdr_inserzioni_categorie c,
mdr_inserzioni i,
seo_tmp_cat_lingua1 ca,
seo_anag_raggruppamenti rag,
mdr_anag_lbs lbs,
--seo_localita_lingua l2,
seo_localita_lingua ll,
seo_localita_lingua ll2,
seo_localita_lingua ll3
WHERE lbs.cd_lingua =&1 and ca.cd_categoria =
c.cd_categoria
AND c.pr_inserzione = i.pr_inserzione
AND lbs.cd_localita = i.cd_localita_lbs
AND lbs.cd_comune !=0
AND cd_frazione =0
AND lbs.ds_comune = ll2.localita --rag.comune
-- AND l2.tipo = 'r'
AND ca.clingua = &1
-- and l2.lingua=&1
-- AND l2.cd(+) = lbs.cd_regione
AND i.fl_lingua =
decode(&1,
2,
'1000',
3,
'0100',
4,
'0010',
5,
'0001')
AND ll.lingua = &1
AND ll2.lingua = &1
AND ll3.lingua = &1
AND ll.cd =
rag.cd_raggruppamento
AND ll2.cd = rag.cd_comune
AND ll3.tipo = 'r'
AND ll.tipo = 'ragg'
AND ll2.tipo = 'c'
AND ll3.cd = rag.cd_regione
UNION
SELECT ll.localita dove,--rag.raggruppamento dove,
ca.ds_categoria cat,
ll3.localita regione/*decode(l2.localita,
NULL,
lbs.ds_regione,
l2.localita) regione*/
FROM mdr_inseriti i,
seo_tmp_cat_lingua1 ca,
seo_anag_raggruppamenti rag,
mdr_anag_lbs lbs,
seo_localita_lingua ll,
seo_localita_lingua ll2,
seo_localita_lingua ll3
WHERE lbs.cd_lingua =&1 and ca.cd_categoria =
i.cd_categoria
AND lbs.cd_localita =
i.cd_localita_lbs
AND lbs.cd_comune !=0
AND cd_frazione =0
AND lbs.ds_comune = ll2.localita--rag.comune
AND ll.lingua = &1
AND ll2.lingua = &1
AND ll3.lingua = &1
AND ll.cd =
rag.cd_raggruppamento
AND ll2.cd =
rag.cd_comune
AND ll3.tipo = 'r'
AND ca.clingua = &1
AND ll.tipo =
'ragg'
AND ll2.tipo = 'c'
AND ll3.cd =
rag.cd_regione
)))
WHERE ca.ds_categoria(+) = cat
GROUP BY dove,
lower(cat),
ca.ds_categoria,
ca.cd_categoria,
regione,
ca.ds_categoria) s
WHERE tq.qs(+) = s.cat
AND tq.dv(+) = s.dove
GROUP BY s.dove,
s.cat,
des_regione,
c_categoria,
cnt
UNION ALL
/*-----------------------frazioni-----------------------------
SELECT s.dove a,
s.cat b,
round((nvl(cnt, 0) ) *
100000 + SUM(s.COUNT)) e,
des_regione f,
c_categoria g
FROM seotmp_tq tq,
(SELECT dove dove,
lower(cat) cat,
COUNT(1) COUNT,
regione des_regione,
ca.cd_categoria c_categoria
FROM seo_tmp_cat_lingua1 ca,
(SELECT dove,
cat cat,
regione
FROM (
--category match esatto --il match esatto lo inserisco solo una volta
SELECT dove,
cat,
regione
FROM (SELECT decode(l.localita,
NULL,
lbs.ds_frazione,
l.localita) || ' (' ||
lbs.ds_sigla_prov || ')' dove,
ca.ds_categoria cat,
decode(l2.localita,
NULL,
lbs.ds_regione,
l2.localita) regione
FROM mdr_inserzioni_categorie c,
mdr_inserzioni i,
seo_tmp_cat_lingua1 ca,
mdr_localita_lbs lbs,
seo_localita_lingua l,
seo_localita_lingua l2
WHERE ca.cd_categoria = c.cd_categoria
AND c.pr_inserzione = i.pr_inserzione
AND lbs.cd_frazione =
get_frazione(i.cd_localita_lbs)
AND cd_frazione IS NOT NULL
AND lpad(nvl(lbs.ds_cap, 0), 5, '0') =
'00000'
AND c.cd_categoria != '000000000'
AND l.lingua = &1
AND l2.tipo = 'r'
AND l.tipo = 'f'
AND ca.clingua = &1
AND l.cd(+) = lbs.cd_frazione
AND l2.cd(+) = lbs.cd_regione
and l2.lingua=&1
UNION
SELECT decode(l.localita,
NULL,
lbs.ds_frazione,
l.localita) || ' (' ||
lbs.ds_sigla_prov || ')' dove,
ca.ds_categoria cat,
decode(l2.localita,
NULL,
lbs.ds_regione,
l2.localita) regione
FROM mdr_inseriti i,
seo_tmp_cat_lingua1 ca,
mdr_localita_lbs lbs,
seo_localita_lingua l,
seo_localita_lingua l2
WHERE ca.cd_categoria = i.cd_categoria
AND ca.cd_categoria != '000000000'
AND lbs.cd_frazione =
get_frazione(i.cd_localita_lbs)
AND cd_frazione IS NOT NULL
AND lpad(nvl(lbs.ds_cap, 0), 5, '0') =
'00000'
AND l2.tipo = 'r'
AND l.tipo = 'f'
and l2.lingua=&1
AND ca.clingua = &1
AND l.cd(+) = lbs.cd_frazione
AND l2.cd(+) = lbs.cd_regione)
))
WHERE ca.ds_categoria(+) = cat
GROUP BY dove,
lower(cat),
ca.ds_categoria,
ca.cd_categoria,
regione,
ca.ds_categoria) s
WHERE tq.qs = s.cat
AND tq.dv = s.dove
GROUP BY s.dove,
s.cat,
des_regione,
c_categoria,
cnt
UNION ALL*/
----------------------regioni------------------------------
SELECT s.dove a,
s.cat b,
round((nvl(cnt, 0)
) *
100000 + SUM(s.COUNT)) e,
des_regione f,
c_categoria g
FROM seotmp_tq tq,
(SELECT dove dove,
lower(cat) cat,
COUNT(1) COUNT,
dove des_regione,
ca.cd_categoria c_categoria
FROM seo_tmp_cat_lingua1 ca,
(
--category match esatto --il match esatto lo inserisco solo una volta
SELECT dove,
cat
FROM (SELECT decode(l2.localita,
NULL,
lbs.ds_regione,
l2.localita) dove,
ca.ds_categoria cat
FROM mdr_inserzioni_categorie c,
mdr_inserzioni i,
seo_tmp_cat_lingua1 ca,
mdr_anag_lbs lbs,
seo_localita_lingua l2
WHERE lbs.cd_lingua = &1 and ca.cd_categoria =
c.cd_categoria
AND c.pr_inserzione = i.pr_inserzione
AND lbs.cd_localita = i.cd_localita_lbs
AND cd_comune !=0
AND cd_frazione =0
AND l2.lingua = &1
AND l2.tipo = 'r'
AND ca.clingua = &1
AND l2.cd(+) = lbs.cd_regione
AND i.fl_lingua =
decode(&1,
2,
'1000',
3,
'0100',
4,
'0010',
5,
'0001')
UNION
SELECT decode(l2.localita,
NULL,
lbs.ds_regione,
l2.localita) dove,
ca.ds_categoria cat
FROM mdr_inseriti i,
seo_tmp_cat_lingua1 ca,
mdr_anag_lbs lbs,
seo_localita_lingua l2
WHERE lbs.cd_lingua =&1 and ca.cd_categoria = i.cd_categoria
AND lbs.cd_localita = i.cd_localita_lbs
AND cd_comune !=0
AND cd_frazione =0
AND l2.lingua = &1
AND l2.tipo = 'r'
and l2.lingua=&1
AND ca.clingua = &1
AND l2.cd(+) = lbs.cd_regione
))
WHERE ca.ds_categoria(+) = cat
GROUP BY dove,
lower(cat),
ca.ds_categoria,
ca.cd_categoria) s
WHERE tq.qs(+) = s.cat
AND tq.dv(+) = s.dove
GROUP BY s.dove,
s.cat,
des_regione,
c_categoria,
cnt)
GROUP BY a,
b,
f);
exit;