developer - obtener el ultimo registro insertado sql
Oracle: ¿Cómo obtengo el número de secuencia de la fila recién insertada? (3)
¿Cómo obtengo el número de secuencia de la fila recién insertada?
Editar: como Mark Harrison señaló, esto supone que usted tiene control sobre cómo se crea la identificación de su registro insertado. Si tiene el control y la responsabilidad totales sobre él, esto debería funcionar ...
Use un procedimiento almacenado para realizar su inserción y devolver la identificación.
por ejemplo: para una tabla de nombres con ids:
PROCEDURE insert_name(new_name IN names.name%TYPE,
new_name_id OUT names.id%TYPE)
IS
new_id names.id%TYPE;
BEGIN
SELECT names_sequence.nextVal INTO new_id FROM dual;
INSERT INTO names(id, name) VALUES(new_id, new_name);
new_name_id := new_id;
END;
El uso de procedimientos almacenados para operaciones CRUD es una buena idea, independientemente de si no está utilizando una capa ORM, ya que hace que su código sea más independiente de la base de datos, ayuda contra los ataques de inyección, etc.
insertar ... regresar.
declare
s2 number;
begin
insert into seqtest2(x) values (''aaa'') returning seq into s2;
dbms_output.put_line(s2);
end;
"seq" aquí se refiere al nombre de la columna cuyo valor desea almacenar en la variable s2.
en python:
myseq=curs.var(cx_Oracle.NUMBER)
curs.prepare("insert into seqtest2(x) values(''bbb'') returning seq into :x")
curs.execute(None, x=myseq)
print int(myseq.getvalue())
Mi respuesta en C #, considerando que la tabla "testtable" tiene una columna "ID" como PK con una secuencia autoinc y el campo "testname" es un campo varchar.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Oracle.DataAccess.Client;
using System.Data;
namespace ConsoleApplication3
{
class Program
{
public static void Main(string[] args)
{
OracleConnection cn = new OracleConnection("your connection string here");
string sql = "INSERT INTO testtable(testname) VALUES(''testing2'') RETURNING id INTO :LASTID";
OracleParameter lastId = new OracleParameter(":LASTID", OracleDbType.Int32);
lastId.Direction = ParameterDirection.Output;
using (OracleCommand cmd = new OracleCommand(sql, cn))
{
cn.Open();
cmd.Parameters.Add(lastId);
cmd.ExecuteNonQuery();
Console.WriteLine("Last ID: " + lastId.Value.ToString());
cn.Close();
}
Console.WriteLine();
Console.ReadKey(false);
}
}
}