-2
我有什么:Oracle游标
Legislatuur是 2004-2009 2009-2014
在Legislatuur 2004-2009你有 '年' 2004年 2004-2005 2005-2006 2006-2007 2008-2009
我想循环,每legislatuur有每一个“年”和它下面的“年” 我必须失去了一些东西,因为它给没有结果。 当我运行相同的立法时,它没有立法议会,它完美的作品 我只是希望它只在立法会的年份运行,当去以下议会,它需要在那一年再次开始。
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;
可能的[PL/SQL嵌套游标]重复(http://stackoverflow.com/questions/22094903/nested-cursors-in-pl-sql) – sriharichander
它可以完美无缺地运行e第二个游标。我只是希望它为每个立法机关做,而不是每年都有这样做...... – Croco1986