Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Rendan

Função no POstGres não funciona com query como uma variável?

Recommended Posts

Olá

 

Sou iniciante e estava tentando criar uma função no postgres que os resultado fosse dinâmico de acordo com os parâmetros passados e assim a clausula where fosse construída testando os campos.

Minha função da erro justamente na hora que passa a string do select para ser executada. 

 

A FUNÇÃO:


CREATE OR REPLACE FUNCTION public.get_auditoria(
	vcpf character varying DEFAULT NULL,
	vlogin character varying DEFAULT NULL,
	vom character varying DEFAULT NULL,
	vidregistro bigint DEFAULT NULL,
	vmodulo character varying DEFAULT NULL,
	vacao text DEFAULT NULL,
	vip character varying DEFAULT NULL
)
    RETURNS SETOF record 
    LANGUAGE 'plpgsql'

    COST 100
    VOLATILE 
    ROWS 1000
AS $BODY$

DECLARE
	txtsql character varying :='SELECT cpf FROM auditoria WHERE 1=1';
BEGIN

	IF vcpf <> NULL THEN
    	txtsql := txtsql || ' AND cpf=vcpf';
	END IF;
	
	RETURN QUERY (txtsql);
RETURN;
END;

$BODY$;

ALTER FUNCTION public.get_auditoria(
	 character varying,
	 character varying,
	 character varying,
	 bigint,
	 character varying,
	 text,
	 character varying
)
    OWNER TO postgres;

O ERRO:

 

ERROR:  ERRO:  erro de sintaxe em ou próximo a "txtsql"
LINE 28:  RETURN QUERY (txtsql);
                        ^

SQL state: 42601
Character: 487

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ckcesar
      Eu tenho uma aplicação no zend com a versão 5.6 e com o postgresql 9.6. Agora eu precisei mudar a versão do meu postgresql para o 16.1, a parte de conexão do bd e consultas sqls funciona perfeitamente, o meu problema está para acessar os meus controllers. Eles não são encontrados em nenhuma rota, quero ver se alguém já passou por esse problema para me ajudar. Obrigado.
    • Por ronaldo_calado
      Bom dia, estou com dificuldades em fazer um consulta para retornar a soma de valores usando um alias, gostaria de saber se tem outra forma de fazer a consulta, ela funciona no mysql, mas como postgres funciona de forma diferente eu não estou conseguindo fazer
      SELECT date_part('year', due_at) AS ano, date_part('month', due_at) AS mes, (SELECT SUM(value) FROM app_invoices WHERE user_id = 51 AND status = 'paid' AND type = 'income' AND year(due_at) = ano AND month(due_at) = mes) AS income, (SELECT SUM(value) FROM app_invoices WHERE user_id = 51 AND status ='paid' AND type = 'expense' AND year(due_at) = ano AND month(due_at) = mes) AS expense FROM app_invoices WHERE user_id = 51 AND status = 'paid' AND due_at >= DATE(now() - INTERVAL '3' MONTH) GROUP BY date_part('year', due_at), date_part('month', due_at) O erro que está retornando é ERROR: column "ano" does not exist
       
      A ideia era ele somar as faturas dos meses e como na imagem:
       

    • Por mateus.andriollo
      Boa tarde,
      Tenho alguns campos numéricos q ao fazer uma select gostaria q retornasse uma legenda
       
      exemplo:
      Status: 0=Inativo / 1=Ativo Condição: 1=Funcionando / 2=Em manutenção / 3=Manutenção Interna   
      Seria algo assim, tenho varias tabelas com estes campos... mas tenho q ficar usando replace.
      Existe uma forma de criar uma função para isso? Nem q na função eu tenha que setar nome do campo, ficando assim:
      Legenda('Status',cadastro.status) 
    • Por Luiz Henrique
      Olá pessoas,
       
      Tenho uma classe e dentro dela várias chamadas para métodos de acordo com a necessidade em outra classe (para obter dados DB), como são muitas e vou duplicar os arquivos, para ganhar tempo queria colocar o nome da classe em uma variável porém não funciona.
       
      use Class1; class Class2 { public $className = 'Class1'; ... $dados = $this->className::function(); // não funciona } Era para gerar isso:
      $dados = Class1::function();
      Se eu der um echo $this->$className, ele me retorno o nome da Class1 porém para executar um método dentro da Class1 não vai, diz que a classe Class1 não existe!
      Tem alguma forma de funcionar isso?
       
      Obrigado.
    • Por ernestovm
      Bom dia.
      Descobri, depois de muito trabalho, um problema esquisito. Tenho duas imagens que chamam funções JavaScript determinadas. Uma funciona e a outra não. Isso no Firefox. No Chrome as duas funcionam perfeitamente. Alguém conhece alguma gambiarra para fazer o Firefox funcionar? Segue os códigos:
      HTML:
      <img src="images/ic_abrir.png" width="70" height="70" onClick="abre_notificacao(<? echo "'".$us_codigo."','".$item."'"; ?>);" style="cursor:pointer" id="p_imagem-<? echo $item; ?>" name="p_imagem-<? echo $item; ?>">
       <img src="images/ic_excluir.png" width="70" height="70" onClick="excluir_notificacao(<? echo "'".$us_codigo."'"; ?>);" style="cursor:pointer">
      JAVASCRIPT:
      <script type="text/javascript">
          function abre_notificacao(codigo,indice) {
              $("#p_imagem-"+indice).attr("src","images/ic_abrir_ok.png");
              $("#ver-"+indice).css("display", "block");
          }
          function excluir_notificacao(codigo) {
              $.post("excluir_notificacao.php", {codigo: codigo}, function(resposta) {
                  confirm(resposta+" ("+codigo+")");
              });
              location.reload();
          }

      </script>
      A Função abre_notificacao(codigo,indice)  funciona perfeitamente nos dois browsers.
      A Função excluir_notificacao(codigo) só funciona no Chrome.
      Obrigado pela luz
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.