En SQL Server, puede hacer cosas como esta:¿Existe un Oracle equivalente a OUTPUT INSERTED de SQL Server. *?
INSERT INTO some_table (...) OUTPUT INSERTED.*
VALUES (...)
Así que se puede insertar conjuntos arbitrarios de columnas/valores y obtener los resultados de vuelta. ¿Hay alguna forma de hacer esto en Oracle?
Lo mejor que puedo llegar a es la siguiente:
INSERT INTO some_table (...)
VALUES (...)
RETURNING ROWID INTO :out_rowid
... usando: out_rowid como una variable de vinculación. Y a continuación, utilizando una segunda consulta como esta:
SELECT *
FROM some_table
WHERE ROWID = :rowid
... pero esto no es exactamente lo mismo que se vuelve todo dentro de la columna, no sólo las columnas he insertado.
¿Hay alguna forma mejor de hacer esto sin usar una gran cantidad de PL/SQL y preferiblemente con sólo una consulta?
Si son las columnas que le interesan (no los datos de la fila) ... - ¿Cómo se deriva el (...)? Seguramente en ese momento, ¿sabes a qué columnas se hace referencia en el inserto? –
Acabo de leer en OUTPUT INSERTED (http://msdn.microsoft.com/en-us/library/ms177564.aspx). Aparentemente le permite elegir si los datos de la fila devueltos son anteriores o posteriores a la ejecución de cualquier desencadenante de tabla. La cláusula RETURNING de Oracle no es compatible con esto, solo le da los datos una vez que los desencadenantes han tenido la oportunidad de cambiarlos. –
@ Jeffrey Kemp - Sabría cuáles son esas columnas. Sin embargo, también debería hacerlo la base de datos. :-) –