Oracle utiliza secuencias en cuanto a sus columnas de identidad, si se puede decir así.
Si ha establecido una secuencia para la clave principal de su tabla, también debe escribir un desencadenador que insertará Sequence.NextValue en el campo de clave principal.
Suponiendo que ya está familiarizado con este concepto, simplemente consulte su secuencia, luego obtendrá su respuesta. Lo que se practica mucho en Oracle es hacerse una función que devolverá una INT, luego dentro de su función, realizará su INSERCIÓN. Suponiendo que haya configurado su disparador correctamente, podrá devolver el valor de su secuencia al consultarlo.
He aquí un ejemplo:
CREATE TABLE my_table (
id_my_table INT PRIMARY KEY
description VARCHAR2(100) NOT NULL
)
CREATE SEQUENCE my_table_seq
MINVALUE 1
MAXVALUE 1000
START WITH 1
INCREMENT BY 2
CACHE 5;
Si desea administrar el incremento automático a sí mismo, se hace así:
INSERT INTO my_table (
id_my_table,
description
) VALUES (my_table_seq.NEXTVAL, "Some description");
COMMIT;
Por otro lado, si usted desea no se preocupan por el PRIMARIA Incremento de KEY, puede proceder con un disparador.
CREATE OR REPLACE TRIGGER my_table_insert_trg
BEFORE INSERT ON my_table FOR EACH ROW
BEGIN
SELECT my_table_seq.NEXTVAL INTO :NEW.id_my_table FROM DUAL;
END;
Entonces, cuando se está insertando, sólo hay que escribir la instrucción INSERT de la siguiente manera:
INSERT INTO my_table (description) VALUES ("Some other description");
COMMIT;
después de una inserción, supongo que querrá
SELECT my_table_seq.CURRVAL
o algo como esto para seleccionar el valor real de su secuencia.
Éstos son algunos enlaces para ayudar:
http://www.orafaq.com/wiki/Sequence
http://www.orafaq.com/wiki/AutoNumber_and_Identity_columns
Espero que esto ayude!
Poner esto como un comentario, ya que es especulativa, pero ha SQL Server "@@ SCOPE_IDENTITY" por lo que la declaración puede ser "insertar en fo ....; select @@ SCOPE_IDENTITY" ... ¿Tiene Oracle tiene algo ¿similar? – Rob
esa sería la respuesta :) – andrecarlucci
En cuanto a SQL Server, no sé acerca de esta variable del sistema @@ SCOPE_IDENTITY, por lo tanto sé sobre una función escalar IDENT_CURRENT que hace lo mismo (SELECT IDENT_CURRENT (N'TableName ') –