GARANTIR DESCONTO

Fórum Update dentro de FUNCTION #398680

04/04/2011

0

Olá amigos....bom dia

preciso de uma ajuda...

Tenho 2 tabelas:
atual;antiga;ambas detém a seguinte estrutura:


CREATE TABLE dba_carga.anterior
(
  id_registro_conselho_classe bigint NOT NULL,
  registro_conselho_classe character varying(10),
  nome_profissional character varying(255),
  id_tipo_inscricao_conselho integer,
  id_situacao_reg_conselho integer,
  id_uf integer,
  especialidade character varying(255),
  id_tipo_documento integer NOT NULL,
  CONSTRAINT anterior_pkey PRIMARY KEY (id_registro_conselho_classe, id_tipo_documento)
)

O problema é que criei uma function que pega registro por registro da "atual" e compara com a "antiga", caso
o registro antigo seja diferente do registro atual deve ser dado um update com o valor listado na tabela "atual". Creio ter montado a estrutura corretamente, porém, o update não é realizado. Gostaria de sabe o que acontece. Segue abaixo minha function:


CREATE OR REPLACE FUNCTION dba_carga.teste_cursor3()
  RETURNS text AS
$$
    DECLARE
        --VARIÁVEIS GLOBAIS SIMPLES
        v_registro_cc_atual varchar(10);
        v_id_tipo_inscricao_conselho int4;
        v_id_situacao_reg_conselho int4;
        v_especialidade varchar(255);
        v_id_tipo_documento int4;

        v_registro_cc_old varchar(10);
        v_id_tipo_documento_old int4;
               
        --VARIÁVEIS RECORD
        r_old record;

        --CURSORES
        cursor_atual CURSOR is select * from dba_carga.atual;

    BEGIN
        FOR  xxx IN cursor_atual LOOP
       
            --ATRIBUIÇÃO DE VALOR ÀS VARIÁVEIS

                           
            v_registro_cc_atual := xxx.registro_conselho_classe;
            v_id_tipo_inscricao_conselho := xxx.id_tipo_inscricao_conselho;
            v_id_tipo_documento := xxx.id_tipo_documento;
                       
                --SELECT PARA BUSCAR NA TABELA ANTIGA OS REGISTROS QUE DEVERÃO SER ATUALIZADOS
                select *
                    into r_old
                    from dba_carga.anterior
                    where registro_conselho_classe = v_registro_cc_atual
                    and id_tipo_documento = v_id_tipo_documento;

                v_registro_cc_old := r_old.registro_conselho_classe;
                v_id_tipo_documento_old := r_old.id_tipo_documento;
                --CONDICIONAIS
                        IF FOUND THEN
                            --CONDICIONAIS PARA VERIFICAR O "ID_TIPO_INSCRIÇÃO_CONSELHO"
                               
                           
                            IF r_old.id_tipo_inscricao_conselho != v_id_tipo_inscricao_conselho then
                                --RAISE NOTICE 'UPDATE id_registro_conselho_classe = % ID_TIPO_INSCRICAO_CONSELHO (OLD = %/ NEW = %)',r_old.id_registro_conselho_classe,r_old.id_tipo_inscricao_conselho,v_id_tipo_inscricao_conselho;
                                RAISE NOTICE 'registro_old = %     old = % atual = %',r_old.id_registro_conselho_classe,r_old.id_tipo_inscricao_conselho,xxx.id_tipo_inscricao_conselho;
                                execute 'UPDATE dba_carga.anterior SET id_tipo_inscricao_conselho = v_id_tipo_inscricao_conselho
                                    where registro_conselho_classe = v_registro_cc_old
                                    and id_tipo_documento = v_id_tipo_documento_old'; 
                            END IF;
                           
                            /*RAISE NOTICE 'TESTE => DADOS ENCONTRADOS';
                            RAISE NOTICE '%',r_old;*/
                        ELSIF not found then 
                            RAISE NOTICE 'TESTE => DADOS NÃO ENCONTRADOS';
                            RAISE NOTICE '%',r_old;
                        END IF;
            --RAISE NOTICE '%',xxx;
            --RAISE NOTICE '% %',v_registro_cc, v_id_tipo_documento;
        END LOOP;           
    END;
$$
  LANGUAGE plpgsql
Gustavo Silva

Gustavo Silva

Responder

Posts

07/04/2011

Gustavo Silva

Galera...já resolvi por aqui... havia me esquecido da clausula return
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar