Meu Caro Rogério Troque a declaração vempresa record; para um ROWTYPE de public.empresa;.
É apenas uma dica, para este caso específico não faz muito sentido usar um pseudotipo. []'s Pedrosinho -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] On Behalf Of Rogério A Bassete Sent: terça-feira, 1 de abril de 2008 09:14 To: [email protected] Subject: [pgbr-geral] Problemas com função em PL/pgsql Pessoal, Após diversas tentativas, venho a lista atrás do motivo. tabela: CREATE TABLE public.empresa ( id SERIAL, nomefantasia VARCHAR(50) NOT NULL, razaosocial VARCHAR(50) NOT NULL, endereco VARCHAR(40) NOT NULL, numero VARCHAR(6) NOT NULL, complemento VARCHAR(20) NOT NULL, bairro VARCHAR(20) NOT NULL, cep VARCHAR(8) NOT NULL, id_municipio INTEGER NOT NULL, dddtelefone VARCHAR(2) NOT NULL, telefone VARCHAR(8) NOT NULL, dddfax VARCHAR(2) NOT NULL, fax VARCHAR(8) NOT NULL, cnpj VARCHAR(14) NOT NULL, cei VARCHAR(14) NOT NULL, iestadual VARCHAR(20) NOT NULL, imunicipal VARCHAR(10) NOT NULL, registro VARCHAR(20) NOT NULL, orgaoregistro VARCHAR(20) NOT NULL, dataregistro DATE NOT NULL, inicioatividade DATE NOT NULL, encerratividade DATE NOT NULL, valorcapital NUMERIC(12,2) NOT NULL, id_naturezajuridica INTEGER NOT NULL, id_cnae INTEGER NOT NULL, url VARCHAR(60) NOT NULL, email VARCHAR(60) NOT NULL, id_gpspagamento INTEGER NOT NULL, id_fpas INTEGER NOT NULL, CONSTRAINT id_empresa PRIMARY KEY(id) ) WITHOUT OIDS; Function: CREATE OR REPLACE FUNCTION public.getgridempresa (tabcampo varchar, tabvalorpesquisa varchar) RETURNS SETOF public.empresa AS $body$ declare vempresa record; begin FOR vempresa IN EXECUTE 'SELECT * FROM public.empresa WHERE ' || tabCampo || ' ILIKE ''' || tabValorPesquisa || '''' LOOP RETURN NEXT vempresa; END LOOP; end $body$ LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER; Quando executo: select * from getgridempresa('nomefantasia','m%'); o erro abaixo é retornado: ERRO: wrong record type supplied in RETURN NEXT CONTEXT: PL/pgSQL function "getgridempresa" line 6 at return next Se colocar no retorno da FUNCTION um COMPOSITE TYPE dos campos da tabela public.empresa, resolve! Mas porque em outras tabelas funciona eu colocando o nome da tabela como retorno? Nesta funciona: create table teste ( id serial not null, nome varchar(100) not null, datanascimento date not null, salario numeric(12,2) not null, horario time not null, CONSTRAINT id_teste primary key (id) ); Rogério Bassete Servidor: Debian Sarge, PostgreSQL 8.1. _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral _______________________________________________ pgbr-geral mailing list [email protected] https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral
