2008-11-06 8 views
6

Trabajando con una base de datos Oracle 9i desde una aplicación ASP.NET 2.0 (VB) usando OLEDB. ¿Hay alguna manera de hacer que una declaración de inserción devuelva un valor? Tengo una secuencia configurada para numerar las entradas a medida que ingresan a la base de datos, pero necesito que ese valor regrese después de la inserción para poder manipular el conjunto que acabo de ingresar en el VB con código subyacente.Devuelve un valor de una instrucción de inserción

Respuesta

8

Algunas posibilidades:

1) el uso de la cláusula de Regreso:

INSERT INTO emp (empno, ename) VALUES (emp_seq.NEXTVAL, 'ANDREWS') 
RETURNING empno INTO :variable; 

2) Usar el CURRVAL secuencia:

INSERT INTO emp (empno, ename) VALUES (emp_seq.NEXTVAL, 'ANDREWS'); 
SELECT emp_seq.CURRVAL INTO :variable FROM DUAL; 

CURRVAL devuelve el último valor de secuencia generado por tu sesión

+0

Hola Tony, ¿Esto también es aplicable para SQL Server? Necesito lo mismo para SQL Server 2008 R2. –

+0

@Sujay, lo siento, no sé SQL Server pero vea http://bytes.com/topic/sql-server/answers/83675-return-primary-key-insert-statement –

+0

Gracias por su ayuda. Pero no estoy buscando un procedimiento almacenado. –

0

Si este valor es la clave que crea la base de datos, ha encontrado un buen ejemplo de por qué debe usar UUID como clave de tabla y generarlos en código.

Este método le dará un rendimiento más rápido en su configuración.

2

Oracle parece tener un keywod llamado "regresar" que puede devolver una columna dada de la fila insertada, sin embargo eso puede requerir que configure manualmente el campo "autoincrement" invocando el siguiente valor en su secuencia.

Marque esta discusión al respecto:

http://forums.oracle.com/forums/thread.jspa?threadID=354998

Sin embargo, siempre se puede seleccionar el número de secuencia actual en una segunda consulta, algo así como MySQLs last_insert_id()

0

primer lugar, utilice un SELECT declaración para obtener la siguiente secuencia. Puede usar the Oracle dual table para hacer esto.

SELECT my_seq.nextval FROM dual 

utilice la secuencia que recuperó en posteriores INSERT declaraciones.

INSERT ... 
INSERT ... 
Cuestiones relacionadas