Criando Function PostGreSQL
09/12/2016
0
Boa Tarde,
estou com um problema , ao criar uma function , eu estou puxando os parametros dela da minha aplicação java , o problema ocorre ao puxar os parametros ( variavel1, e variavel2) porque elas estão vindo da aplicação como texto, ''c.id_medico'," mas quando vou comparar minha query dentro da função
ERROR: operator does not exist: integer = text
LINE 12: ... inner JOIN prestadores m on m.id= variavel1...
justamente porque o id do prestadores é integer !!!!
Já tentei fazer esse cast dentro da função , mas ai ele da erro também porque nao reconhece o "c.id_medico" que preciso passar por parametro, sómente numeros ... ou seja passando 1, 2, 3.... e assim não dá porque pode haver casos que na minha aplicação posso passar outros id... de outras tabelas.....
=======FUNÇÃO=======
=====EXECUÇÃO DA FUNÇÃO=======
estou com um problema , ao criar uma function , eu estou puxando os parametros dela da minha aplicação java , o problema ocorre ao puxar os parametros ( variavel1, e variavel2) porque elas estão vindo da aplicação como texto, ''c.id_medico'," mas quando vou comparar minha query dentro da função
inner JOIN prestadores m on m.id= variavel1
ERROR: operator does not exist: integer = text
LINE 12: ... inner JOIN prestadores m on m.id= variavel1...
justamente porque o id do prestadores é integer !!!!
Já tentei fazer esse cast dentro da função
inner JOIN prestadores m on m.id= variavel1::integer
=======FUNÇÃO=======
CREATE OR REPLACE FUNCTION public.rel_repasse_solicitante(data1 date, data2 date, idcorp integer, titulo text, variavel1 text, variavel2 text) RETURNS SETOF record AS $BODY$ BEGIN RETURN QUERY select data1 as inicio, data2 as fim, p.nome as paciente, titulo as titulo, pl.nome as plano, m.nome as medico, c.data_prescricao AS data_atendimento, c.codigo_tiss, c.codigo_tiss || ' - ' || t.descri as descri, c.conta, c.id_pagamento_medico, c.guia, 5 as taxa, c.quant, (c.quant * 5) as valor_total from contas c inner join cadastro_pessoa_fisica p on p.id=c.id_paciente left outer join pagamento_medico pg on pg.id=c.id_pagamento_medico inner join plano_convenio pl on pl.id=c.id_plano inner join guia_consulta_tiss g on g.id=c.guia inner JOIN prestadores m on m.id= variavel1 inner JOIN prestadores co on co.id=pl.id_convenio inner join empresas e on e.id=co.id_empresa left outer join tabela_amb t on t.codigo=c.codigo_tiss and variavel2 and t.ativo=true and t.id_tabela=pl.id_tabela_amb where p.id_corp=idcorp and c.data_prescricao >=data1 and c.data_prescricao <=data2 and (c.tipo=3 or c.tipo > 4) and c.codigo_tiss != '50101010' and c.codigo_tiss != '60101010' and c.codigo_tiss != '20010010' and c.codigo_tiss != '10101012' and c.codigo_tiss != '20101012' and c.codigo_tiss != '30101012' and c.codigo_tiss != '00010014' and c.codigo_tiss != '40101010' and c.codigo_tiss != '20010010' and c.codigo_tiss != '20101011' order by pg.id, m.nome, c.data_prescricao, paciente; RETURN; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100 ROWS 1000; ALTER FUNCTION public.rel_repasse_solicitante(data1 date, data2 date, idcorp integer, titulo text, variavel1 text, variavel2 text) OWNER TO postgres;
=====EXECUÇÃO DA FUNÇÃO=======
select * from rel_repasse_solicitante('2016-01-01', '2016-12-09',1, 'PREVIA DO REPASSE DE BONUS PARA O MEDICO EXECUTANTE', 'c.id_medico', ' c.data_prescricao >=2016-01-01 and c.data_prescricao <=2016-12-09 and c.data_recebimento notnull and c.id_pagamento_medico isnull and c.ativo=true') as (inicio date, fim date, paciente character varying, titulo text, plano character varying, medico character varying, data_atendimento date, codigo_tiss character varying, descri text, conta integer, id_pagamento_medico integer, guia integer, taxa integer, quant numeric, valor_total numeric)
Arthur
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)