GARANTIR DESCONTO

Fórum Variável x Insert com Returning #398408

29/03/2011

0

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?
Alexandre

Alexandre

Responder

Posts

30/03/2011

Jair N.


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:


Responder

Gostei + 0

30/03/2011

Alexandre

Preciso capturar como demonstrei realmente, existe alguma forma?
Responder

Gostei + 0

31/03/2011

Jair N.

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$




Responder

Gostei + 0

31/03/2011

Alexandre

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;

Responder

Gostei + 0

31/03/2011

Alexandre

Resolvido:

INSERT INTO Auditoria (Nome_Tabela, Codigo_Usuario, Data) VALUES ('ESTADOS', _Codigo_Usuario, Current_Timestamp) RETURNING Sequencia INTO _Sequencia;
Responder

Gostei + 0

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

Aceitar