Oracle - aspx y oracle, devolver clave primaria tras insert

 
Vista:

aspx y oracle, devolver clave primaria tras insert

Publicado por adlorenzo (3 intervenciones) el 15/06/2005 11:37:17
hola, buenos días.. estoy un poco agobiado con esto, la verdad es que la pregunta se las trae espero que tengas un poco de paciencia conmigo y puedas echarme una manita

Tengo desarrollada una aplicacion 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 autonumerico 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: despues 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

Muchas gracias por todo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:aspx y oracle, devolver clave primaria tras ins

Publicado por Leonardo (91 intervenciones) el 15/06/2005 16:03:11
Puedo ver:
BEFORE
INSERT ON TBACCESO
el dato que buscas no esta en TBACCESO?

Puedo ver tambien:
select S_824_1_TBACCESO.NextVal
into :new.IDACCESO
from DUAL;
Podrias guardar el valor de :new.IDACCESO en una tabla, ahi siempre estaria el ultimo valor
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:aspx y oracle, devolver clave primaria tras ins

Publicado por Adlorenzo (3 intervenciones) el 15/06/2005 16:23:04
Hola leonardo, muchas gracias por la respuesta.

a ver si consigo explicarme.

al hacer el insert en la tabla TBACCESOS, el campo idAcceso que es el PK se auto incrementa de manera automatica, yo necesito saber que nuemero entero le ha asignado, para poder hacer otra inser en una tabla relacionada.

Las insert se hacen desde paginas aspx, en funcion del numero de usuarios que esten conectados a la web se pueden estar haciendo varias insert a la vez en diferentes tablas.

si guardo el ultimo idAcceso en una tabla temporal y despues lo leo para devolverselo a la pagina correspondiente, como se que realmente ese corresponde al insert que acabo de hacer y no a oto que ha hecho otro usuario casi al mismo tiempo. (a menos que guarde el idUsuario que ha hecho la insert)

igual esto es una solucion.

Pero tiene que haber una forma de leer el lasIdentity o el new.IDAcceso directamente sin encesidad de meterlo en la tabla. solo con una sentencia SQL

Tendria que ser algo asi, pero no porque no es ninguna tabla

Insert into TBACCESOS (NombreA) values ('Nombre Acceso);
select lastIdentity from IDENTITYPKG;

perdona me estoy liando yo solo, de nuevo muchas gracias por tu ayuda, si no consigo nada probaré con lo meterlo en una tabla.... mil gracias

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:aspx y oracle, devolver clave primaria tras ins

Publicado por Leonardo (91 intervenciones) el 15/06/2005 16:45:36
Entonces en la funcion, paquete o procedimiento que autoincrementa el idAcceso deberia recibir los parametros tabla, usuario
para que puedas guardar al mismo instante en tu tabla relacionada

procedure incrementaguarda(tabla, usuario)
is
begin
--proceso de incremento o de obtencion idAcceso
if tabla = 'primera' then
insert into primera values(idAcceso, usuario);
end if;
if tabla = 'segunda' then
insert into segunda values(idAcceso, usuario);
end if;
end;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:aspx y oracle, devolver clave primaria tras ins

Publicado por adlorenzo (3 intervenciones) el 15/06/2005 16:50:30
Muchas gracias Leonardo a ver si me arreglo con eso....

un saludo desde bilbao

Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar