我有什么:
立法是 2004-2009 2009-2014在2004 - 2009年的立法中,你已经有了多年的时间。 2004年 2004- 2005年 2005-2006 2006-2007 2008-2009
我想循环每一个立法机构,让每一年都有这样的事情。及其随后的“年份” 我必须遗漏一些东西,因为它没有结果。 当我在没有立法指标的情况下运行它时,它完美地运行 我只是希望它在立法机关中运行多年,当进入下面的立法机构时,它需要在那一年重新启动。
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;
答案 0 :(得分:0)
You need to declare your second cursor as a parameterized cursor:
CURSOR c_zittingsjaren(c_lgl core_admin.legislaturen.legislatuur%type) 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;
Then in your second FOR
loop call c_zittingsjaren
passing in the r_legislatuur.c_lgl
value from the outer loop:
FOR r_zittingsjaren in c_zittingsjaren(r_legislatuur.c_lgl) LOOP