Fórum CRIAR CURSOR POSTGRES #510629

13/02/2015

0

Boa tarde, à Todos!

Venho por meio deste fórum, pedir um HELP para criação de um cursor que execute no PostGres 9.1.
Estou começando a trabalhar com Banco de Dados POSTGRES 9.1, pois tenho conhecimento de banco de dados Oracle.

Preciso criar um cursor para que a partir de uma data X e um valor inicial X, o cursor CALCULE o valor da coluna INICIAL (menos) o valor da coluna VENDAS, e se a caso tiver valor na coluna COMPRA some o valor e insira este valor na próxima coluna (dia seguinte)
((INICIAL – VENDAS) + COMPRA)

No ORACLE criei o cursor da seguinte forma:

DECLARE
/** VALOR INICIAL DA VARIAVEL**/
v_SALDO TBESTOQUETANQUES.INICIAL%TYPE := 4319.74;

BEGIN
FOR TESTE IN (

SELECT CODIGO,DATA,DESCRICAO,INICIAL,COMPRAS,VENDAS,PERIODO FROM TBESTOQUETANQUES ORDER BY PERIODO)
LOOP
/** IRAR ALTERAR O INICIAL DE ACORDO COM O VALOR QUE ESTÁ NA MINHA VARIAVEL**/
UPDATE TBESTOQUETANQUES SET INICIAL=v_SALDO WHERE CODIGO=TESTE.CODIGO;


/** MOSTRAR COMO ESTÁ INDO**/
DBMS_OUTPUT.PUT_LINE(TESTE.CODIGO||' ---- '||TESTE.DATA||' ---- '||
TESTE.DESCRICAO||' ---- '||TESTE.INICIAL||' ---- '||TESTE.COMPRAS||' ---- '||TESTE.VENDAS||' ---- '||TESTE.PERIODO);


/** EFETUO O CALCULO PARA IDENTIFICAR O VALOR DO PROXIMO REGISTRO DO INICIAL**/
SELECT ((INICIAL-VENDAS)+COMPRAS) INTO v_SALDO FROM TBESTOQUETANQUES
WHERE CODIGO=TESTE.CODIGO;

COMMIT;
END LOOP;

END;

No POSTGRES criei o FUNCTION/CURSOR da seguinte forma:
Alguém saberia me dizer como montar este cursor de forma correta, para que não apresente a mensagem de erro abaixo?
CREATE OR REPLACE FUNCTION cursor_inicial()
RETURNS integer AS $$
DECLARE
v_SALDO TBESTOQUETANQUES.INICIAL%TYPE:= 4319.74; --Digite o valor inicial do estoque
cursor_teste CURSOR FOR (
SELECT CODIGO, DATA, DESCRICAO, INICIAL, COMPRAS, VENDAS, PERIODO
FROM TBESTOQUETANQUES ORDER BY PERIODO);
BEGIN
OPEN cursor_teste;
LOOP
UPDATE TBESTOQUETANQUES SET INICIAL=v_SALDO
WHERE DATA >= '2015-02-01'; -- Data inicial para o calculo
RAISE NOTICE 'Codigo %', TBESTOQUETANQUES.CODIGO,
'Data %', TBESTOQUETANQUES.DATA,
'Descricao %', TBESTOQUETANQUES.DESCRICAO,
'Inicial %', TBESTOQUETANQUES.INICIAL,
'Compras %', TBESTOQUETANQUES.COMPRAS,
'Vendas %', TBESTOQUETANQUES.VENDAS,
'Periodo %', TBESTOQUETANQUES.PERIODO;
SELECT ((INICIAL-VENDAS)+COMPRAS)
INTO v_SALDO
FROM TBESTOQUETANQUES
WHERE TBESTOQUETANQUES.DATA >='2015-02-01'; --Digite a DATA inicial para o ajuste
COMMIT;
END LOOP;
CLOSE cursor_teste;
END;
$$ LANGUAGE 'plpgsql';

SELECT cursor_inicial(); --SELECT Q EXECUTA À FUNÇÃO/CURSOR

/** MENSAGEM DE ERRO AO EXECUTAR A FUNCTION */
ERRO: faltando entrada para tabela "tbestoquetanques" na cláusula FROM
LINE 1: SELECT TBESTOQUETANQUES.CODIGO
^
QUERY: SELECT TBESTOQUETANQUES.CODIGO
CONTEXT: função PL/pgSQL cursor_inicial6() linha 19 em RAISE

********** Error **********

ERRO: faltando entrada para tabela "tbestoquetanques" na cláusula FROM
SQL state: 42P01
Vinicius Redorat

Vinicius Redorat

Responder

Posts

13/02/2015

Ronaldo Lanhellas

Tente mudar o seu DECLARE para:

v_SALDO NUMERIC(15,2) := 4319.74; --Digite o valor inicial do estoque 
Responder

Gostei + 0

13/02/2015

Ronaldo Lanhellas

Tente mudar o seu DECLARE para:

v_SALDO NUMERIC(15,2) := 4319.74; --Digite o valor inicial do estoque 
Responder

Gostei + 0

13/02/2015

Vinicius Redorat

Ronaldo, boa tarde!
primeiramente obrigado pela ajuda.
Apliquei alteração, conforme mostra na imagem e a mensagem em anexo e o erro persiste!

[img]http://arquivo.devmedia.com.br/forum/imagem/387430-20150213-173615.jpg[/img]
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar