Ir para conteúdo

Arquivado

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

Rafael Bizio

como criar uma função no postgres passando nome tabela como parametro

Recommended Posts

Pessoal criei uma funcao no postgres para fazer processamento de saldo bancario, mas eu preciso mandar como parametro o nome da tabela para poder fazer os calculos na tabela segue abaixo a funçao desenvolvida.CREATE OR REPLACE FUNCTION medsal(SaldoInicial FLOAT, varchar(45) ) returns varchar(35) AS 'DECLARE lancamento RECORD ; LSALDO_A FLOAT ; LSALDO_A1 FLOAT ; AuxSaldo FLOAT ; AuxSaldoB FLOAT ; NomeTabela text ;BEGIN NomeTabela := $2 ; LSALDO_A := SaldoInicial; LSALDO_A1 := SaldoInicial; FOR lancamento IN SELECT saldo_a AS saldo_a, pk AS pk, saldo AS saldo, valor AS valor, baixa AS baixa, dc AS dc FROM NomeTabela ORDER BY DATA loop if lancamento.dc = ''D'' THEN AuxSaldo := LSALDO_A - lancamento.valor ; elseif lancamento.dc = ''C'' THEN AuxSaldo := LSALDO_A + lancamento.valor ; END if ; if (lancamento.dc = ''D'') AND (lancamento.baixa = ''S'') THEN AuxSaldoB := LSALDO_A1 - lancamento.valor ; LSALDO_A1 := AuxSaldoB; elseif (lancamento.dc = ''C'') AND (lancamento.baixa = ''S'') THEN AuxSaldoB := LSALDO_A1 + lancamento.valor ; LSALDO_A1 := AuxSaldoB; ELSE AuxSaldoB := LSALDO_A1 ; END if ; UPDATE NomeTabela SET saldo = AuxSaldo, saldob = AuxSaldoB, saldo_a = LSALDO_A WHERE pk = lancamento.pk ; LSALDO_A := lancamento.saldo ; END loop ; return NomeTabela ; END 'LANGUAGE 'plpgsql'; Quando executo o sequinte comando select medsal(100.00, 'lan00023' ); Dá o seguinte erro :ERROR: syntax error at or near "$1" at character 102QUERY: SELECT saldo_a AS saldo_a, pk AS pk, saldo AS saldo, valor AS valor, baixa AS baixa, dc AS dc FROM $1 ORDER BY DATACONTEXT: PL/pgSQL function "medsal" line 12 at for over select rowsAlguem sabe como eu resolvo esse problema ?tentei usar os comando EXUCUTE e PERFORM e tambem não funcionou. Alguem tem alguma dica ????Desde já agradeço a atenção.Rafael Bizio Alves

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal achei a solução caso alguem tenha duvida me avisa que vou ajudar ......CREATE OR REPLACE FUNCTION CalculaSaldoBancos(FLOAT,TEXT) returns FLOAT AS 'DECLARE lancamento RECORD ; LSALDO_A FLOAT ; LSALDO_A1 FLOAT ; AuxSaldo FLOAT ; AuxSaldoB FLOAT ; SaldoInicial ALIAS FOR $1 ; NomeTabela ALIAS FOR $2 ;BEGIN LSALDO_A := SaldoInicial; LSALDO_A1 := SaldoInicial; AuxSaldo := SaldoInicial; FOR lancamento IN EXECUTE ''SELECT saldo_a, lanc, saldo, valor, baixa, dc FROM ''||NomeTabela||'' ORDER BY DATA, lanc'' loop EXECUTE ''UPDATE ''||NomeTabela||'' SET saldo_a = ''||AuxSaldo::TEXT||'' WHERE lanc = ''||lancamento.lanc::TEXT ; if lancamento.dc = ''D'' THEN AuxSaldo := LSALDO_A - lancamento.valor ; elseif lancamento.dc = ''C'' THEN AuxSaldo := LSALDO_A + lancamento.valor ; END if ; if (lancamento.dc = ''D'') AND (lancamento.baixa = ''S'') THEN AuxSaldoB := LSALDO_A1 - lancamento.valor ; LSALDO_A1 := AuxSaldoB; elseif (lancamento.dc = ''C'') AND (lancamento.baixa = ''S'') THEN AuxSaldoB := LSALDO_A1 + lancamento.valor ; LSALDO_A1 := AuxSaldoB; ELSE AuxSaldoB := LSALDO_A1 ; END if ; EXECUTE ''UPDATE ''||NomeTabela||'' SET saldo = ''||AuxSaldo::TEXT||'', saldob = ''||AuxSaldoB::TEXT||'' WHERE lanc = ''||lancamento.lanc::TEXT ; LSALDO_A := AuxSaldo ; END loop ; return LSALDO_A ; END 'LANGUAGE 'plpgsql';

Pessoal criei uma funcao no postgres para fazer processamento de saldo bancario, mas eu preciso mandar como parametro o nome da tabela para poder fazer os calculos na tabela segue abaixo a funçao desenvolvida.CREATE OR REPLACE FUNCTION medsal(SaldoInicial FLOAT, varchar(45) ) returns varchar(35) AS 'DECLARE lancamento RECORD ; LSALDO_A FLOAT ; LSALDO_A1 FLOAT ; AuxSaldo FLOAT ; AuxSaldoB FLOAT ; NomeTabela text ;BEGIN NomeTabela := $2 ; LSALDO_A := SaldoInicial; LSALDO_A1 := SaldoInicial; FOR lancamento IN SELECT saldo_a AS saldo_a, pk AS pk, saldo AS saldo, valor AS valor, baixa AS baixa, dc AS dc FROM NomeTabela ORDER BY DATA loop if lancamento.dc = ''D'' THEN AuxSaldo := LSALDO_A - lancamento.valor ; elseif lancamento.dc = ''C'' THEN AuxSaldo := LSALDO_A + lancamento.valor ; END if ; if (lancamento.dc = ''D'') AND (lancamento.baixa = ''S'') THEN AuxSaldoB := LSALDO_A1 - lancamento.valor ; LSALDO_A1 := AuxSaldoB; elseif (lancamento.dc = ''C'') AND (lancamento.baixa = ''S'') THEN AuxSaldoB := LSALDO_A1 + lancamento.valor ; LSALDO_A1 := AuxSaldoB; ELSE AuxSaldoB := LSALDO_A1 ; END if ; UPDATE NomeTabela SET saldo = AuxSaldo, saldob = AuxSaldoB, saldo_a = LSALDO_A WHERE pk = lancamento.pk ; LSALDO_A := lancamento.saldo ; END loop ; return NomeTabela ; END 'LANGUAGE 'plpgsql'; Quando executo o sequinte comando select medsal(100.00, 'lan00023' ); Dá o seguinte erro :ERROR: syntax error at or near "$1" at character 102QUERY: SELECT saldo_a AS saldo_a, pk AS pk, saldo AS saldo, valor AS valor, baixa AS baixa, dc AS dc FROM $1 ORDER BY DATACONTEXT: PL/pgSQL function "medsal" line 12 at for over select rowsAlguem sabe como eu resolvo esse problema ?tentei usar os comando EXUCUTE e PERFORM e tambem não funcionou. Alguem tem alguma dica ????Desde já agradeço a atenção.Rafael Bizio Alves

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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