Variável x Insert com Returning
Olá ...
Estou precisando dentro de uma função realizar o comando abaixo de inserção porém o resultado do mesmo defini-lo em uma variável _Sequencia:
INSERT INTO Auditoria (Nome_Tabela, Codigo_Usuario, Data) VALUES ('ESTADOS', _Codigo_Usuario, Current_Timestamp) RETURNING Sequencia;
Alguém pode me ajudar nessa?
Estou precisando dentro de uma função realizar o comando abaixo de inserção porém o resultado do mesmo defini-lo em uma variável _Sequencia:
INSERT INTO Auditoria (Nome_Tabela, Codigo_Usuario, Data) VALUES ('ESTADOS', _Codigo_Usuario, Current_Timestamp) RETURNING Sequencia;
Alguém pode me ajudar nessa?
Alexandre
Curtidas 0
Respostas
Jair N.
29/03/2011
Bom Dia no caso o tipo do campo "sequencia" é "autoincremental"?
Caso se for, pode-se utilizar como retorno:
FUNCTION ... RETURNS INTEGER...
BEGIN
INSERT INTO Auditoria (Nome_Tabela, Codigo_Usuario, Data) VALUES ('ESTADOS', _Codigo_Usuario, Current_Timestamp) ;
RESULT := CURRVALl('auditora.sequencia');
END:
GOSTEI 0
Alexandre
29/03/2011
Preciso capturar como demonstrei realmente, existe alguma forma?
GOSTEI 0
Jair N.
29/03/2011
Bom Dia, sempre existe outra forma de obter o retorno do sequêncial. No último comentário cometi um erro e acerto aqui se o campo sequencia for autoincremetal (serial, bigserial)...
FUNCTION ... RETURNS INTEGER...
$BODY$
DECLARE
intSequencial INTEGER;
dtmData TIMESTAMP;
BEGIN
dtmData :=Current_Timestamp;
-- ('auditora_sequencia') Neste caso deve-se observal qual o nome "SEQUENCE" seq_agr_agrupa
INSERT INTO Auditoria (Nome_Tabela, Codigo_Usuario, Data) VALUES ('ESTADOS', _Codigo_Usuario, dtmData) ;
RETURN CURRVALl('auditora_sequencia');
-- (ou) Bem como retorno você pode fazer uma consulta pela chave alternativa no caso a Data-hora da Gravação:
SELECT sequencial INTO intSequencial FROM estados WHERE data = dtmData;
RETURN intSequencial;
END:
$BODY$
FUNCTION ... RETURNS INTEGER...
$BODY$
DECLARE
intSequencial INTEGER;
dtmData TIMESTAMP;
BEGIN
dtmData :=Current_Timestamp;
-- ('auditora_sequencia') Neste caso deve-se observal qual o nome "SEQUENCE" seq_agr_agrupa
INSERT INTO Auditoria (Nome_Tabela, Codigo_Usuario, Data) VALUES ('ESTADOS', _Codigo_Usuario, dtmData) ;
RETURN CURRVALl('auditora_sequencia');
-- (ou) Bem como retorno você pode fazer uma consulta pela chave alternativa no caso a Data-hora da Gravação:
SELECT sequencial INTO intSequencial FROM estados WHERE data = dtmData;
RETURN intSequencial;
END:
$BODY$
GOSTEI 0
Alexandre
29/03/2011
Eu consegui fazer desta forma, mas será que tem outra forma de atribuir a variável o returning do insert?
FOR _Registro IN EXECUTE 'INSERT INTO Auditoria (Nome_Tabela, Codigo_Usuario, Data) VALUES (''ESTADOS'', ' || _Codigo_Usuario || ', Current_Timestamp) RETURNING Sequencia' LOOP
_Sequencia = _Registro.Sequencia;
END LOOP;
FOR _Registro IN EXECUTE 'INSERT INTO Auditoria (Nome_Tabela, Codigo_Usuario, Data) VALUES (''ESTADOS'', ' || _Codigo_Usuario || ', Current_Timestamp) RETURNING Sequencia' LOOP
_Sequencia = _Registro.Sequencia;
END LOOP;
GOSTEI 0
Alexandre
29/03/2011
Resolvido:
INSERT INTO Auditoria (Nome_Tabela, Codigo_Usuario, Data) VALUES ('ESTADOS', _Codigo_Usuario, Current_Timestamp) RETURNING Sequencia INTO _Sequencia;
INSERT INTO Auditoria (Nome_Tabela, Codigo_Usuario, Data) VALUES ('ESTADOS', _Codigo_Usuario, Current_Timestamp) RETURNING Sequencia INTO _Sequencia;
GOSTEI 0