Function com cursor no loop

PostgreSQL

04/05/2011

Bom dia!!!!

Não conheço muito bem o PL/pgsql e preciso fazer uma function para pegar todos os id's de uma tabela e inserir em outra.
Fiz o código, mas parece que o loop não está parceando meu cursor!
Eis o código:

CREATE OR REPLACE FUNCTION insere_sistemaperfilopcao() RETURNS trigger AS
$BODY$ 
DECLARE C_Perfil CURSOR FOR 
    SELECT sistemaperfil.id_sistemaperfil
    FROM sistemaperfil;   

    R_Perfil  integer;
    v_id_negativo sistemapermissaoopcao.id_sistemapermissaoopcao%TYPE;

BEGIN
        IF(NEW.opcao = 0) THEN
        v_id_negativo = NEW.id_sistemapermissaoopcao;
        END IF;

        OPEN C_Perfil;       
       
        LOOP    
            FETCH C_Perfil INTO R_Perfil;
            INSERT INTO sistemaperfilopcao (fk_id_sistemapermissaoopcao,fk_id_sistemaperfil)
            VALUES (v_id_negativo, R_Perfil);
            return NEW;                       
        END LOOP;
        CLOSE C_Perfil;   
        return NEW;
END;  

$BODY$
LANGUAGE 'plpgsql' VOLATILE
COST 100;


Alguém pode me ajudar?!!!!! Por favor?! =]

obrigada!



Kellysampaio

Kellysampaio

Curtidas 0

Respostas

Jair N.

Jair N.

04/05/2011

Boa Tarde Kelly, só pra entender melhor tem como voce passar o scritp destas duas tabelas os campos da tabela "sistemaperfilopcao" são estes mesmos "fk_id_sistemapermissaoopcao e fk_id_sistemaperfil" com as iniciais de "FK-Foreign Key" no seu insert é isso mesmo?

GOSTEI 0
Kellysampaio

Kellysampaio

04/05/2011

Então, Consegui resolver!
O Problema era no cursor...

DECLARE
v_id_negativo sistemapermissaoopcao.id_sistemapermissaoopcao%TYPE;

P_Perfil CURSOR FOR SELECT sistemaperfil.id_sistemaperfil FROM sistemaperfil;

BEGIN
        IF(NEW.opcao = 0) THEN
        v_id_negativo = NEW.id_sistemapermissaoopcao;
            for r_perfil in p_perfil loop
            INSERT INTO sistemaperfilopcao (fk_id_sistemapermissaoopcao,fk_id_sistemaperfil)
            VALUES (v_id_negativo, r_Perfil.id_sistemaperfil);
            end loop;               
        END IF;
        return NEW;
END;


Obrigada
GOSTEI 0
POSTAR