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
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
Curtir tópico
+ 0
Responder
Posts
07/04/2011
Gustavo Silva
Galera...já resolvi por aqui... havia me esquecido da clausula return
Responder
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)