Oracle - store procedure

 
Vista:

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
/
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:store procedure

Publicado por Cristian H. (1 intervención) el 29/06/2006 00:04:39
Estimado,

la tabla se debe crear afuera del procedimiento. Si quieres puedes ocupar el sigueinte script que nosotros ocupamos.

CREATE GLOBAL TEMPORARY TABLE NOMBRE_TABLA_TMP

(

CAMPO1 TYPO,

CAMPO2 TYPO,

CAMPO3 TYPO,

...

CAMPO2 TYPO,

)

ON COMMIT PRESERVE ROWS;



CREATE UNIQUE INDEX PK_NOMBRE_TABLA_TMP ON NOMBRE_TABLA_TMP

(CAMPO1, CAMPO2... ECT.);


Saludos,

Cristian H.
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