função não funciona

05/11/2012

0

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

Responder

Posts

06/11/2012

Jair N.

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
Responder

06/11/2012

Alan Mario

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

obrigado!!!
Responder

06/11/2012

Jair N.

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!!!
Responder

06/11/2012

Alan Mario

ok, neste caso, eu utilizo seu codigo postado???
Responder

06/11/2012

Alan Mario

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"
Responder

06/11/2012

Lucas Araujo

USE ASPA SIMPLES
Responder

06/11/2012

Alan Mario

o problema é só isso???
Responder

APRENDA A PROGRAMAR DO ZERO AO PROFISSIONAL

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

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

Aceitar