store procedure
Publicado por lala_mtts (1 intervención) el 26/05/2006 17:05:03
hola a todos:
tengo el siguiente sp, pero esta malo, yo soy en este tema del sp en oracle, por lo que no entiendo mucho, he revisado, cuanta pagina he encontrado pero no sé como solucionar mi problema.
bueno mi consulta es que si puede utilizar tablas temporales dentro del mismo sp.
aqui les dejo mi sp para que vean y me ayuden
CREATE OR REPLACE PROCEDURE PREVENCION.SP_PRS_ELEMENTOS (CODIGO_USUARIO_IN IN VARCHAR2)
IS
DECLARE
LV_CODIGO_EMPRESA VARCHAR2(16);
LV_DESCR_EMPRESA VARCHAR2(120);
LV_PERIODO VARCHAR2(16);
LV_CODIGO_TRABAJADOR VARCHAR2(12);
LV_NOMBRE_TRABAJADOR VARCHAR2(150);
LV_CODIGO_UNIDAD VARCHAR2(16);
LV_DESCR_UNIDAD VARCHAR2(80);
LV_CODIGO_ELEMENTO VARCHAR2(16);
LV_DESCR_ELEMENTO VARCHAR2(300);
LV_CODIGO_CARGO VARCHAR2(16);
LV_DESCR_CARGO VARCHAR2(60);
LV_FECHA_ASIGNACION DATE;
LV_FECHA_RETIRO DATE;
LV_ESTADO VARCHAR2(16);
LV_FECHA_CONTROL DATE;
LV_CANTIDAD NUMBER(15);
LV_CODIGO_UNIDAD VARCHAR2(16);
LV_TALLA VARCHAR2(16);
CREATE GLOBAL TEMPORARY TABLE ELEMENTOS (
CODIGO_EMPRESA VARCHAR2(16),
DESCR_EMPRESA VARCHAR2(120),
PERIODO VARCHAR2(16),
CODIGO_TRABAJADOR VARCHAR2(12),
NOMBRE_TRABAJADOR VARCHAR2(150),
CODIGO_UNIDAD VARCHAR2(16),
DESCR_UNIDAD VARCHAR2(80),
CODIGO_ELEMENTO VARCHAR2(16),
DESCR_ELEMENTO VARCHAR2(300),
CODIGO_CARGO VARCHAR2(16),
DESCR_CARGO VARCHAR2(60),
FECHA_ASIGNACION DATE,
FECHA_RETIRO DATE,
ESTADO VARCHAR2(16),
FECHA_CONTROL DATE,
CANTIDAD NUMBER(15),
TALLA VARCHAR2(16)
)ON COMMIT DELETE ROWS;
DECLARE CURSOR_ELEMENTOS IS
(CODIGO_USUARIO_IN VARCHAR2(16))
SELECT PREVENCION.PRS_ASIGNACION.CODIGO_EMPRESA,RAZON_SOCIAL,PREVENCION.PRS_ASIGNACION.PERIODO,
PREVENCION.PRS_ASIGNACION.CODIGO_TRABAJADOR,NOMBRES_APELLIDOS,
PREVENCION.CONTRACTUAL.CODIGO_UNIDAD,PREVENCION.UNIDAD_ADMINISTRATIVA.DESCRIPCION,
PREVENCION.PRS_ASIGNACION.CODIGO_ELEMENTO,
PREVENCION.PRS_ELEMENTOS.DESCRIPCION,
PREVENCION.PRS_ASIGNACION.CODIGO_CARGO,PREVENCION.CARGOS_TRABAJADOR.DESCRIPCION,
PREVENCION.PRS_ASIGNACION.FECHA_ASIGNACION,
PREVENCION.PRS_ASIGNACION.FECHA_RETIRO,PREVENCION.PRS_ASIGNACION.ESTADO,
PREVENCION.PRS_ASIGNACION.FECHA_CONTROL,PREVENCION.PRS_ASIGNACION.CANTIDAD,
PREVENCION.PRS_ASIGNACION.CODIGO_UNIDAD,PREVENCION.PRS_ASIGNACION.TALLA
FROM PREVENCION.PRS_ASIGNACION,PREVENCION.PRS_ELEMENTOS,PREVENCION.MAESTRO_PERSONAS,
PREVENCION.EMPRESA,PREVENCION.CARGOS_TRABAJADOR,PREVENCION.CONTRACTUAL,
PREVENCION.UNIDAD_ADMINISTRATIVA
WHERE PREVENCION.PRS_ASIGNACION.CODIGO_TRABAJADOR=PREVENCION.MAESTRO_PERSONAS.CODIGO_TRABAJADOR
AND PREVENCION.PRS_ASIGNACION.PERIODO=PREVENCION.PRS_ELEMENTOS.PERIODO
AND PREVENCION.PRS_ASIGNACION.CODIGO_EMPRESA=PREVENCION.EMPRESA.CODIGO_EMPRESA
AND PREVENCION.PRS_ASIGNACION.CODIGO_CARGO=PREVENCION.CARGOS_TRABAJADOR.CODIGO_CARGO
AND PREVENCION.CONTRACTUAL.CODIGO_UNIDAD=PREVENCION.UNIDAD_ADMINISTRATIVA.CODIGO_UNIDAD
AND PREVENCION.CONTRACTUAL.CODIGO_TRABAJADOR=PREVENCION.PRS_ASIGNACION.CODIGO_TRABAJADOR
AND PREVENCION.CONTRACTUAL.CODIGO_EMPRESA=PREVENCION.PRS_ASIGNACION.CODIGO_EMPRESA
AND PREVENCION.PRS_ASIGNACION.CODIGO_ELEMENTO=PREVENCION.PRS_ELEMENTOS.CODIGO_ELEMENTO
AND PREVENCION.PRS_ASIGNACION.CODIGO_USUARIO > CODIGO_USUARIO_IN
ORDER BY PREVENCION.PRS_ELEMENTOS.DESCRIPCION;
CODIGO_TRABAJADOR PREVENCION.PRS_ASIGNACION.CODIGO_USUARIO_IN%TYPE;
BEGIN
dbms_output.ENABLE;
OPEN CURSOR_ELEMENTOS;
LOOP
FETCH CURSOR_ELEMENTOS INTO LV_CODIGO_EMPRESA,LV_DESCR_EMPRESA,LV_PERIODO,LV_CODIGO_TRABAJADOR,
LV_NOMBRE_TRABAJADOR,LV_CODIGO_UNIDAD,LV_DESCR_UNIDAD,LV_CODIGO_ELEMENTO,
LV_DESCR_ELEMENTO,LV_CODIGO_CARGO,LV_DESCR_CARGO,LV_FECHA_ASIGNACION,
LV_FECHA_RETIRO,LV_ESTADO,LV_FECHA_CONTROL,LV_CANTIDAD,LV_CODIGO_UNIDAD,
LV_TALLA
BEGIN
INSERT INTO GLOBAL TEMPORARY TABLE ELEMENTOS (CODIGO_EMPRESA,DESCR_EMPRESA,PERIODO,CODIGO_TRABAJADOR,
NOMBRE_TRABAJADOR,CODIGO_UNIDAD,DESCR_UNIDAD,CODIGO_ELEMENTO,
DESCR_ELEMENTO,CODIGO_CARGO,DESCR_CARGO,FECHA_ASIGNACION,FECHA_RETIRO,
ESTADO,FECHA_CONTROL,CANTIDAD,CODIGO_UNIDAD,TALLA)
VALUES (LV_CODIGO_EMPRESA,LV_DESCR_EMPRESA,LV_PERIODO,LV_CODIGO_TRABAJADOR,LV_NOMBRE_TRABAJADOR,
LV_CODIGO_UNIDAD,LV_DESCR_UNIDAD,LV_CODIGO_ELEMENTO,LV_DESCR_ELEMENTO,LV_CODIGO_CARGO,
LV_DESCR_CARGO,LV_FECHA_ASIGNACION,LV_FECHA_RETIRO,LV_ESTADO,LV_FECHA_CONTROL,LV_CANTIDAD,
LV_CODIGO_UNIDAD,LV_TALLA)
FETCH CURSOR_ELEMENTOS INTO LV_CODIGO_EMPRESA,LV_DESCR_EMPRESA,LV_PERIODO,LV_CODIGO_TRABAJADOR,
LV_NOMBRE_TRABAJADOR,LV_CODIGO_UNIDAD,LV_DESCR_UNIDAD,LV_CODIGO_ELEMENTO,
LV_DESCR_ELEMENTO,LV_CODIGO_CARGO,LV_DESCR_CARGO,LV_FECHA_ASIGNACION,
LV_FECHA_RETIRO,LV_ESTADO,LV_FECHA_CONTROL,LV_CANTIDAD,LV_CODIGO_UNIDAD,
LV_TALLA
END
EXIT WHEN CURSOR_ELEMENTOS%NOTFOUND;
dbms_output.put_line(CODIGO_USUARIO_IN.CODIGO_TRABAJADOR);
END LOOP;
CLOSE CURSOR_ELEMENTOS
SELECT DESCR_EMPRESA,PERIODO,CODIGO_TRABAJADOR,NOMBRE_TRABAJADOR,DESCR_UNIDAD,CODIGO_ELEMENTO,
DESCR_ELEMENTO,DESCR_CARGO,FECHA_ASIGNACION,FECHA_RETIRO,ESTADO,FECHA_CONTROL,CANTIDAD,
CODIGO_UNIDAD,TALLA
FROM GLOBAL TEMPORARY TABLE ELEMENTOS
ORDER BY DESCR_ELEMENTO
/
tengo el siguiente sp, pero esta malo, yo soy en este tema del sp en oracle, por lo que no entiendo mucho, he revisado, cuanta pagina he encontrado pero no sé como solucionar mi problema.
bueno mi consulta es que si puede utilizar tablas temporales dentro del mismo sp.
aqui les dejo mi sp para que vean y me ayuden
CREATE OR REPLACE PROCEDURE PREVENCION.SP_PRS_ELEMENTOS (CODIGO_USUARIO_IN IN VARCHAR2)
IS
DECLARE
LV_CODIGO_EMPRESA VARCHAR2(16);
LV_DESCR_EMPRESA VARCHAR2(120);
LV_PERIODO VARCHAR2(16);
LV_CODIGO_TRABAJADOR VARCHAR2(12);
LV_NOMBRE_TRABAJADOR VARCHAR2(150);
LV_CODIGO_UNIDAD VARCHAR2(16);
LV_DESCR_UNIDAD VARCHAR2(80);
LV_CODIGO_ELEMENTO VARCHAR2(16);
LV_DESCR_ELEMENTO VARCHAR2(300);
LV_CODIGO_CARGO VARCHAR2(16);
LV_DESCR_CARGO VARCHAR2(60);
LV_FECHA_ASIGNACION DATE;
LV_FECHA_RETIRO DATE;
LV_ESTADO VARCHAR2(16);
LV_FECHA_CONTROL DATE;
LV_CANTIDAD NUMBER(15);
LV_CODIGO_UNIDAD VARCHAR2(16);
LV_TALLA VARCHAR2(16);
CREATE GLOBAL TEMPORARY TABLE ELEMENTOS (
CODIGO_EMPRESA VARCHAR2(16),
DESCR_EMPRESA VARCHAR2(120),
PERIODO VARCHAR2(16),
CODIGO_TRABAJADOR VARCHAR2(12),
NOMBRE_TRABAJADOR VARCHAR2(150),
CODIGO_UNIDAD VARCHAR2(16),
DESCR_UNIDAD VARCHAR2(80),
CODIGO_ELEMENTO VARCHAR2(16),
DESCR_ELEMENTO VARCHAR2(300),
CODIGO_CARGO VARCHAR2(16),
DESCR_CARGO VARCHAR2(60),
FECHA_ASIGNACION DATE,
FECHA_RETIRO DATE,
ESTADO VARCHAR2(16),
FECHA_CONTROL DATE,
CANTIDAD NUMBER(15),
TALLA VARCHAR2(16)
)ON COMMIT DELETE ROWS;
DECLARE CURSOR_ELEMENTOS IS
(CODIGO_USUARIO_IN VARCHAR2(16))
SELECT PREVENCION.PRS_ASIGNACION.CODIGO_EMPRESA,RAZON_SOCIAL,PREVENCION.PRS_ASIGNACION.PERIODO,
PREVENCION.PRS_ASIGNACION.CODIGO_TRABAJADOR,NOMBRES_APELLIDOS,
PREVENCION.CONTRACTUAL.CODIGO_UNIDAD,PREVENCION.UNIDAD_ADMINISTRATIVA.DESCRIPCION,
PREVENCION.PRS_ASIGNACION.CODIGO_ELEMENTO,
PREVENCION.PRS_ELEMENTOS.DESCRIPCION,
PREVENCION.PRS_ASIGNACION.CODIGO_CARGO,PREVENCION.CARGOS_TRABAJADOR.DESCRIPCION,
PREVENCION.PRS_ASIGNACION.FECHA_ASIGNACION,
PREVENCION.PRS_ASIGNACION.FECHA_RETIRO,PREVENCION.PRS_ASIGNACION.ESTADO,
PREVENCION.PRS_ASIGNACION.FECHA_CONTROL,PREVENCION.PRS_ASIGNACION.CANTIDAD,
PREVENCION.PRS_ASIGNACION.CODIGO_UNIDAD,PREVENCION.PRS_ASIGNACION.TALLA
FROM PREVENCION.PRS_ASIGNACION,PREVENCION.PRS_ELEMENTOS,PREVENCION.MAESTRO_PERSONAS,
PREVENCION.EMPRESA,PREVENCION.CARGOS_TRABAJADOR,PREVENCION.CONTRACTUAL,
PREVENCION.UNIDAD_ADMINISTRATIVA
WHERE PREVENCION.PRS_ASIGNACION.CODIGO_TRABAJADOR=PREVENCION.MAESTRO_PERSONAS.CODIGO_TRABAJADOR
AND PREVENCION.PRS_ASIGNACION.PERIODO=PREVENCION.PRS_ELEMENTOS.PERIODO
AND PREVENCION.PRS_ASIGNACION.CODIGO_EMPRESA=PREVENCION.EMPRESA.CODIGO_EMPRESA
AND PREVENCION.PRS_ASIGNACION.CODIGO_CARGO=PREVENCION.CARGOS_TRABAJADOR.CODIGO_CARGO
AND PREVENCION.CONTRACTUAL.CODIGO_UNIDAD=PREVENCION.UNIDAD_ADMINISTRATIVA.CODIGO_UNIDAD
AND PREVENCION.CONTRACTUAL.CODIGO_TRABAJADOR=PREVENCION.PRS_ASIGNACION.CODIGO_TRABAJADOR
AND PREVENCION.CONTRACTUAL.CODIGO_EMPRESA=PREVENCION.PRS_ASIGNACION.CODIGO_EMPRESA
AND PREVENCION.PRS_ASIGNACION.CODIGO_ELEMENTO=PREVENCION.PRS_ELEMENTOS.CODIGO_ELEMENTO
AND PREVENCION.PRS_ASIGNACION.CODIGO_USUARIO > CODIGO_USUARIO_IN
ORDER BY PREVENCION.PRS_ELEMENTOS.DESCRIPCION;
CODIGO_TRABAJADOR PREVENCION.PRS_ASIGNACION.CODIGO_USUARIO_IN%TYPE;
BEGIN
dbms_output.ENABLE;
OPEN CURSOR_ELEMENTOS;
LOOP
FETCH CURSOR_ELEMENTOS INTO LV_CODIGO_EMPRESA,LV_DESCR_EMPRESA,LV_PERIODO,LV_CODIGO_TRABAJADOR,
LV_NOMBRE_TRABAJADOR,LV_CODIGO_UNIDAD,LV_DESCR_UNIDAD,LV_CODIGO_ELEMENTO,
LV_DESCR_ELEMENTO,LV_CODIGO_CARGO,LV_DESCR_CARGO,LV_FECHA_ASIGNACION,
LV_FECHA_RETIRO,LV_ESTADO,LV_FECHA_CONTROL,LV_CANTIDAD,LV_CODIGO_UNIDAD,
LV_TALLA
BEGIN
INSERT INTO GLOBAL TEMPORARY TABLE ELEMENTOS (CODIGO_EMPRESA,DESCR_EMPRESA,PERIODO,CODIGO_TRABAJADOR,
NOMBRE_TRABAJADOR,CODIGO_UNIDAD,DESCR_UNIDAD,CODIGO_ELEMENTO,
DESCR_ELEMENTO,CODIGO_CARGO,DESCR_CARGO,FECHA_ASIGNACION,FECHA_RETIRO,
ESTADO,FECHA_CONTROL,CANTIDAD,CODIGO_UNIDAD,TALLA)
VALUES (LV_CODIGO_EMPRESA,LV_DESCR_EMPRESA,LV_PERIODO,LV_CODIGO_TRABAJADOR,LV_NOMBRE_TRABAJADOR,
LV_CODIGO_UNIDAD,LV_DESCR_UNIDAD,LV_CODIGO_ELEMENTO,LV_DESCR_ELEMENTO,LV_CODIGO_CARGO,
LV_DESCR_CARGO,LV_FECHA_ASIGNACION,LV_FECHA_RETIRO,LV_ESTADO,LV_FECHA_CONTROL,LV_CANTIDAD,
LV_CODIGO_UNIDAD,LV_TALLA)
FETCH CURSOR_ELEMENTOS INTO LV_CODIGO_EMPRESA,LV_DESCR_EMPRESA,LV_PERIODO,LV_CODIGO_TRABAJADOR,
LV_NOMBRE_TRABAJADOR,LV_CODIGO_UNIDAD,LV_DESCR_UNIDAD,LV_CODIGO_ELEMENTO,
LV_DESCR_ELEMENTO,LV_CODIGO_CARGO,LV_DESCR_CARGO,LV_FECHA_ASIGNACION,
LV_FECHA_RETIRO,LV_ESTADO,LV_FECHA_CONTROL,LV_CANTIDAD,LV_CODIGO_UNIDAD,
LV_TALLA
END
EXIT WHEN CURSOR_ELEMENTOS%NOTFOUND;
dbms_output.put_line(CODIGO_USUARIO_IN.CODIGO_TRABAJADOR);
END LOOP;
CLOSE CURSOR_ELEMENTOS
SELECT DESCR_EMPRESA,PERIODO,CODIGO_TRABAJADOR,NOMBRE_TRABAJADOR,DESCR_UNIDAD,CODIGO_ELEMENTO,
DESCR_ELEMENTO,DESCR_CARGO,FECHA_ASIGNACION,FECHA_RETIRO,ESTADO,FECHA_CONTROL,CANTIDAD,
CODIGO_UNIDAD,TALLA
FROM GLOBAL TEMPORARY TABLE ELEMENTOS
ORDER BY DESCR_ELEMENTO
/
Valora esta pregunta


0