função não funciona
alguem pode me ajudar???
pessoal, toda vez que eu executo este comando:
ele não altera o campo "faltas", alguem sabe me dizer o pq?
obrigado
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
Curtidas 0
Respostas
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;
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???
pessoal, toda vez que eu executo este comando:
ele não altera o campo "faltas", alguem sabe me dizer o pq?
obrigado
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
05/11/2012
como eu atualizo o banco? tem como colocar o codigo?
obrigado!!!
obrigado!!!
GOSTEI 0
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
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!!!
obrigado!!!
GOSTEI 0
Alan Mario
05/11/2012
ok, neste caso, eu utilizo seu codigo postado???
GOSTEI 0
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"
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
05/11/2012
USE ASPA SIMPLES
GOSTEI 0
Alan Mario
05/11/2012
o problema é só isso???
GOSTEI 0