Aspx y oracle, leer clave primaria
Tengo desarrollada una aplicación aspx con SQL SERver, una vez terminada el cliente me ha pedido que la pase a ORacle. Ya lo tengo todo preparado pero me he encontrado con la siguiente dificultad.
Con SQL server tenía el campo clave primaria con un autonumérico que se incrementaba en una unidad. Cada vez que hacía una insert recuperaba la clave primaria de la tabla con un sentencia del tipo...
Insert into TBACCESOS (NombreA) values ('Nombre Acceso); select @@identity;
Con esto conseguía que al hacer la insert me devolviera el Identificativo de la tabla donde se ha hecho la insert.
¿Cómo hacer esto con ORACLE?, bueno he seguido los pasos de un artículo que he leído y ha quedado de la siguiente manera.
PRIMERO: después de crear la tabla TBACCESO creo el índice PK_TBACCESO
SEGUNDO: defino una secuencia
Create sequence s_824_1_tbacceso increment by 1
start with 62 maxvalue 1.0e27 minvalue 1 nocycle
cache 20 noorder
TERCERO: he añadido un package
Create or replace package identitypkg as
LastIdentity number := -1000;
end IdentityPkg;
Y por ultimo forcé la asignación de un valor secuencial en un trigger asociado a la tabla de ACCESOS
CREATE OR REPLACE TRIGGER TR_S_824_1_TBACCESO
BEFORE
INSERT ON TBACCESO FOR EACH ROW begin
select S_824_1_TBACCESO.NextVal
into :new.IDACCESO
from DUAL;
IdentityPkg.LastIdentity := :new.IDACCESO;
end;
Bien con todo esto consigo definir la clave primaria y que ésta se autoincremente en una unidad cada vez que hago la insert. PERO... Lo que no consigo, bueno lo que no se es hacer es que me devuelva el valor que ha insertado en la clave primaria. De tal modo que al hacer la insert pueda recoger el valor de la clave primaria. Se que tiene que estar guardado el package pero no se como leerlo
Estoy un poco desesperado, yo estoy un poco pez con oracle y no se por donde tirar... Cualquier genero de ayuda será bienvenida
Con SQL server tenía el campo clave primaria con un autonumérico que se incrementaba en una unidad. Cada vez que hacía una insert recuperaba la clave primaria de la tabla con un sentencia del tipo...
Insert into TBACCESOS (NombreA) values ('Nombre Acceso); select @@identity;
Con esto conseguía que al hacer la insert me devolviera el Identificativo de la tabla donde se ha hecho la insert.
¿Cómo hacer esto con ORACLE?, bueno he seguido los pasos de un artículo que he leído y ha quedado de la siguiente manera.
PRIMERO: después de crear la tabla TBACCESO creo el índice PK_TBACCESO
SEGUNDO: defino una secuencia
Create sequence s_824_1_tbacceso increment by 1
start with 62 maxvalue 1.0e27 minvalue 1 nocycle
cache 20 noorder
TERCERO: he añadido un package
Create or replace package identitypkg as
LastIdentity number := -1000;
end IdentityPkg;
Y por ultimo forcé la asignación de un valor secuencial en un trigger asociado a la tabla de ACCESOS
CREATE OR REPLACE TRIGGER TR_S_824_1_TBACCESO
BEFORE
INSERT ON TBACCESO FOR EACH ROW begin
select S_824_1_TBACCESO.NextVal
into :new.IDACCESO
from DUAL;
IdentityPkg.LastIdentity := :new.IDACCESO;
end;
Bien con todo esto consigo definir la clave primaria y que ésta se autoincremente en una unidad cada vez que hago la insert. PERO... Lo que no consigo, bueno lo que no se es hacer es que me devuelva el valor que ha insertado en la clave primaria. De tal modo que al hacer la insert pueda recoger el valor de la clave primaria. Se que tiene que estar guardado el package pero no se como leerlo
Estoy un poco desesperado, yo estoy un poco pez con oracle y no se por donde tirar... Cualquier genero de ayuda será bienvenida
1 respuesta
Respuesta de tinodba
1