2015-09-01 52 views
-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; 
+0

可能的[PL/SQL嵌套游标]重复(http://stackoverflow.com/questions/22094903/nested-cursors-in-pl-sql) – sriharichander

+0

它可以完美无缺地运行e第二个游标。我只是希望它为每个立法机关做,而不是每年都有这样做...... – Croco1986

回答

0

你需要声明你的第二个光标作为一个参数光标:

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; 

然后在r_legislatuur.c_lgl值传递从外环你的第二个FOR循环调用c_zittingsjaren

FOR r_zittingsjaren in c_zittingsjaren(r_legislatuur.c_lgl) LOOP