2008-12-11 15 views

Respuesta

28

inserte ... volviendo.

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()) 
9

Editar: como Mark Harrison señaló, esto supone que usted tiene control sobre cómo se crea la ID de su registro insertado. Si usted tiene el control total y la responsabilidad por ello, este debe trabajo ...


utilizar un procedimiento almacenado para realizar su inserción y devolver la ID.

por ejemplo: para una tabla de nombres con los identificadores:

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 las operaciones CRUD es una buena idea sin tener en cuenta si usted no está utilizando una capa ORM, ya que hace que el código sea más base de datos- agnóstico, ayuda contra los ataques de inyección, etc.

6

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); 


    } 
} 
} 
Cuestiones relacionadas