aspx y Oracle.. como leer la clave primaria después de hacer una insert
hola, buenos dÃas..
La verdad es que la pregunta se las trae espero que tengais un poco de paciencia conmigo y puedais 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
La verdad es que la pregunta se las trae espero que tengais un poco de paciencia conmigo y puedais 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
Hola,
igual si en el package que has creado pones el LastIdentity como parámetro de entrada y salida lo puedes recoger cuando hagas la llamada al package
igual si en el package que has creado pones el LastIdentity como parámetro de entrada y salida lo puedes recoger cuando hagas la llamada al package
Otra forma de hacer esto es incrementar la secuencia fuera de la sentencia de inserción y guardarla en una variable que luego puedes utilizar en otra parte del código.
SELECT nombre_secuencia.NEXTVAL FROM DUAL o
SELECT nombre_secuencia.NEXTVAL INTO :variable FROM DUAL
SELECT nombre_secuencia.NEXTVAL FROM DUAL o
SELECT nombre_secuencia.NEXTVAL INTO :variable FROM DUAL
