【发布时间】:2015-09-02 05:44:14
【问题描述】:
我有什么:
立法者是 2004-2009 2009-2014
在 2004-2009 年的立法者中,您有“年” 2004年 2004-2005 2005-2006 2006-2007 2008-2009
我想循环让每个立法者拥有每个“年”及其下一个“年” 我一定错过了什么,因为它没有结果。 当我在没有 legislatuurcursor 的情况下运行相同的程序时,它可以完美运行 我只想让它在立法者中运行几年,当去下一个立法者时,它需要从那一年重新开始。
DECLARE
c_zj zittingsjaren.zittingsjaar%type;
c_zj_next varchar2(20);
c_lgl varchar2(20);
CURSOR c_legislatuur IS
select legislatuur as c_lgl
from core_admin.legislaturen
where legislatuur = '2004-2009';
CURSOR c_zittingsjaren IS
SELECT zittingsjaar, lead(zittingsjaar) over (order by zittingsjaar) as c_zj_next
FROM core_admin.zittingsjaren zj
JOIN core_admin.legislaturen lgl ON (zj.id_lgl = lgl.id)
WHERE lgl.LEGISLATUUR = c_lgl;
BEGIN
FOR r_legislatuur in c_legislatuur LOOP
FOR r_zittingsjaren in c_zittingsjaren LOOP
INSERT INTO DEC_STAT_DECR
( id_pobj
, decr_type
, titel
, zittingsjaar
, zittingsjaar_behandeld
, legislatuur
, status
, status_nummer
, fractie
, bevoegdheid )
SELECT id_pobj
, decr_type
, titel
, zittingsjaar
, zittingsjaar_behandeld
, legislatuur
, 'NVT' -- Status 'NVT' om zo échte dubbels te vermijden, elke keer filteren op 'NVT' in andere grafieken/tabellen
, '(5) te behandelen of in behandeling = (1)+(2)-(3)-(4)'
, fractie
, bevoegdheid
FROM DEC_STAT_DECR
WHERE id_pobj in(
SELECT id_pobj
FROM (
SELECT id_pobj
FROM dec_stat_decr
WHERE zittingsjaar_behandeld = r_zittingsjaren.zittingsjaar
AND DECR_TYPE in('VOORSTEL VAN RESOLUTIE')
AND status_nummer in( '(1) nog niet afgehandeld op het einde van het vorige zittingsjaar', '(2) ingediend')
MINUS
SELECT id_pobj
FROM dec_stat_decr
WHERE zittingsjaar_behandeld = r_zittingsjaren.zittingsjaar -- zittingsjaar
AND DECR_TYPE in('VOORSTEL VAN RESOLUTIE')
AND status_nummer in( '(3) ingetrokken', '(4) behandeld in samenhand met een ontwerp of ander voorstel van decreet')
)
)
AND zittingsjaar_behandeld = r_zittingsjaren.zittingsjaar
AND DECR_TYPE in('VOORSTEL VAN RESOLUTIE')
group by id_pobj, decr_type, titel, zittingsjaar, zittingsjaar_behandeld, legislatuur, fractie, bevoegdheid;
commit;
-- Berekening (5) gedaan en toegevoegd
-- Nu (8) berekenen op basis van (5)
INSERT INTO DEC_STAT_DECR
( id_pobj
, decr_type
, titel
, zittingsjaar
, zittingsjaar_behandeld
, legislatuur
, status
, status_nummer
, fractie
, bevoegdheid )
SELECT id_pobj
, decr_type
, titel
, zittingsjaar
, zittingsjaar_behandeld
, legislatuur
, 'NVT' -- Status 'NVT' om zo échte dubbels te vermijden, elke keer filteren op 'NVT' in andere grafieken/tabellen
, '(8) nog niet afgehandeld op het einde van het zittingsjaar = (5) - (6) - (7)'
, fractie
, bevoegdheid
from dec_Stat_decr
WHERE id_POBJ in(
SELECT DISTINCT(id_pobj)
FROM dec_stat_decr
WHERE status_nummer= '(5) te behandelen of in behandeling = (1)+(2)-(3)-(4)'
AND zittingsjaar_behandeld = r_zittingsjaren.zittingsjaar
AND DECR_TYPE in('VOORSTEL VAN RESOLUTIE')
minus
SELECT id_pobj
FROM dec_stat_decr
WHERE zittingsjaar_behandeld = r_zittingsjaren.zittingsjaar
AND DECR_TYPE in('VOORSTEL VAN RESOLUTIE')
AND status_nummer in( '(6) aangenomen', '(7) verworpen')
)
AND zittingsjaar_behandeld = r_zittingsjaren.zittingsjaar
AND DECR_TYPE in('VOORSTEL VAN RESOLUTIE')
group by id_pobj, decr_type, titel, zittingsjaar, zittingsjaar_behandeld, legislatuur, fractie, bevoegdheid;
commit;
-- Resultaat '(8) nog niet afgehandeld op het einde van het zittingsjaar = (5) - (6) - (7)'
-- Toegevoegd in tabel met ook status NVT
-- Selecteer mij alle (8) van dit jaar want deze zijn (1) van volgend jaar
INSERT INTO DEC_STAT_DECR
( id_pobj
, decr_type
, titel
, zittingsjaar
, zittingsjaar_behandeld
, legislatuur
, status
, status_nummer
, fractie
, bevoegdheid )
SELECT id_pobj
, decr_type
, titel
, zittingsjaar
, r_zittingsjaren.c_zj_next -- resultaat van (8) is hetzelfde voor zittingsjaar +1 dus hier gaat men c_zj_next nemen dat het volgende zittingsjaar in de volgorde is
, legislatuur
, 'NVT' -- Status 'NVT' om zo échte dubbels te vermijden, elke keer filteren op 'NVT' in andere grafieken/tabellen
, '(1) nog niet afgehandeld op het einde van het vorige zittingsjaar'
, fractie
, bevoegdheid
FROM dec_stat_decr
WHERE id_POBJ in(
SELECT id_pobj
FROM dec_stat_decr
WHERE status_nummer= '(5) te behandelen of in behandeling = (1)+(2)-(3)-(4)'
AND zittingsjaar_behandeld = r_zittingsjaren.zittingsjaar
AND DECR_TYPE in('VOORSTEL VAN RESOLUTIE')
minus
SELECT id_pobj
FROM dec_stat_decr
WHERE zittingsjaar_behandeld = r_zittingsjaren.zittingsjaar
AND DECR_TYPE in('VOORSTEL VAN RESOLUTIE')
AND status_nummer in( '(6) aangenomen', '(7) verworpen')
)
AND zittingsjaar_behandeld = r_zittingsjaren.zittingsjaar
AND DECR_TYPE in('VOORSTEL VAN RESOLUTIE')
group by id_pobj, decr_type, titel, zittingsjaar, zittingsjaar_behandeld, legislatuur, fractie, bevoegdheid;
commit;
---------------------------------------------------
-- Totalen berekenen
---------------------------------------------------
INSERT INTO DEC_STAT_DECR
( id_pobj
, decr_type
, titel
, zittingsjaar
, zittingsjaar_behandeld
, legislatuur
, status
, status_nummer
, fractie
, bevoegdheid )
SELECT id_pobj
, decr_type
, titel
, zittingsjaar
, zittingsjaar_behandeld
, legislatuur
, 'totaal resolutie'
, 'NVT'
, fractie
, bevoegdheid
FROM DEC_STAT_DECR
WHERE id_pobj in(
SELECT distinct(id_pobj)
FROM (
SELECT o_decr.id_pobj
FROM dec_stat_decr o_decr
WHERE o_decr.zittingsjaar = r_zittingsjaren.zittingsjaar
AND o_decr.decr_type = 'VOORSTEL VAN RESOLUTIE'
AND lower(o_decr.status) = 'ingediend'
AND not exists (
SELECT o_decr.id_pobj
FROM dec_stat_decr decr
WHERE decr.zittingsjaar = r_zittingsjaren.zittingsjaar
AND decr.decr_type = 'VOORSTEL VAN RESOLUTIE'
AND decr.id_pobj = o_decr.id_pobj
AND lower(decr.status) = 'ingetrokken'
)
)
)
AND zittingsjaar = r_zittingsjaren.zittingsjaar
AND lower(status) in ('ingetrokken', 'ingediend');
commit;
-- TOTAAL berekenen
INSERT INTO DEC_STAT_DECR
( id_pobj
, decr_type
, titel
, zittingsjaar
, zittingsjaar_behandeld
, legislatuur
, status
, status_nummer
, fractie
, bevoegdheid )
SELECT id_pobj
, 'TOTAAL RESOLUTIE' -- in decreet type omdat het een totaal is dat daaronder komt.
, titel
, zittingsjaar
, zittingsjaar_behandeld
, legislatuur
, 'Totaal' -- geen status
, 'NVT' -- geen statusnummer
, fractie
, bevoegdheid
FROM DEC_STAT_DECR
WHERE id_pobj in (
SELECT id_pobj
FROM DEC_STAT_DECR
WHERE status in ('totaal resolutie' )
AND zittingsjaar = r_zittingsjaren.zittingsjaar)
AND zittingsjaar = r_zittingsjaren.zittingsjaar
and status in ('totaal resolutie' );
commit;
END LOOP;
END LOOP;
END;
【问题讨论】:
-
Nested Cursors in PL/SQL 的可能重复项
-
没有第二个光标也能完美运行。我只是希望它为每个立法者都这样做,而不是每年都这样做......