função não funciona

PostgreSQL

05/11/2012

alguem pode me ajudar???


CREATE OR REPLACE FUNCTION gera_movimento() returns integer as
'
DECLARE
    registros RECORD;
    registros2 RECORD;
BEGIN
        for registros2 in SELECT * FROM funcionarios WHERE presente = ''N'' LOOP
            UPDATE funcionarios SET faltas = faltas + 1 WHERE id = registros2.id;
    END LOOP;
    return 1;


    for registros in SELECT * FROM funcionarios WHERE presente = ''S'' LOOP
            INSERT INTO movimentos(funcionario) VALUES (registros.nome);
            UPDATE funcionarios SET presente = ''N'' WHERE id = registros.id;
    END LOOP;
END
'
language 'plpgsql'




pessoal, toda vez que eu executo este comando:


select gera_movimento();




ele não altera o campo "faltas", alguem sabe me dizer o pq?


obrigado
Alan Mario

Alan Mario

Curtidas 0

Respostas

Jair N.

Jair N.

05/11/2012

Bom dia tente fazer a atualização do banco com o comando EXECUTE...

CREATE OR REPLACE FUNCTION gera_movimento() RETURNS void AS
$$
DECLARE
registros RECORD;
BEGIN

FOR registros IN SELECT * FROM funcionarios
LOOP
IF (registros.presente = ''N'') THEN
EXECUTE ''UPDATE funcionarios SET faltas = faltas + 1 WHERE (id = '' || registros.id || '');'';
ELSE
EXECUTE ''INSERT INTO movimentos(funcionario) VALUES ('''' || registros.nome || '''')'';
EXECUTE ''UPDATE funcionarios SET presente = ''N'' WHERE (id = '' || registros.id || '');'';
END;
END LOOP;

RETURN;
END
$$
LANGUAGE 'plpgsql' VOLATILE;

alguem pode me ajudar???


CREATE OR REPLACE FUNCTION gera_movimento() returns integer as
'
DECLARE
    registros RECORD;
    registros2 RECORD;
BEGIN
        for registros2 in SELECT * FROM funcionarios WHERE presente = ''N'' LOOP
            UPDATE funcionarios SET faltas = faltas + 1 WHERE id = registros2.id;
    END LOOP;
    return 1;


    for registros in SELECT * FROM funcionarios WHERE presente = ''S'' LOOP
            INSERT INTO movimentos(funcionario) VALUES (registros.nome);
            UPDATE funcionarios SET presente = ''N'' WHERE id = registros.id;
    END LOOP;
END
'
language 'plpgsql'




pessoal, toda vez que eu executo este comando:


select gera_movimento();




ele não altera o campo "faltas", alguem sabe me dizer o pq?


obrigado
GOSTEI 0
Alan Mario

Alan Mario

05/11/2012

como eu atualizo o banco? tem como colocar o codigo?

obrigado!!!
GOSTEI 0
Jair N.

Jair N.

05/11/2012

Do mesmo jeito que antes voce utilizava:
SELECT gera_movimento();

o void não retorna nada, no caso acredido que não seja necessário...
apenas veja os resultados no banco ao criar e alterar os registros das tabelas movimentos e funcionarios


como eu atualizo o banco? tem como colocar o codigo?

obrigado!!!
GOSTEI 0
Alan Mario

Alan Mario

05/11/2012

ok, neste caso, eu utilizo seu codigo postado???
GOSTEI 0
Alan Mario

Alan Mario

05/11/2012

o codigo não funcionou, apresenta o seguinte erro:


ERRO: erro de sintaxe em ou próximo a "N"
LINE 1: SELECT ( $1 = ''N'')
^
QUERY: SELECT ( $1 = ''N'')
CONTEXT: SQL statement in PL/PgSQL function "gera_movimento" near line 7

********** Erro **********

ERRO: erro de sintaxe em ou próximo a "N"
GOSTEI 0
Lucas Araujo

Lucas Araujo

05/11/2012

USE ASPA SIMPLES
GOSTEI 0
Alan Mario

Alan Mario

05/11/2012

o problema é só isso???
GOSTEI 0
POSTAR