Yahoo Answers is shutting down on May 4th, 2021 (Eastern Time) and beginning April 20th, 2021 (Eastern Time) the Yahoo Answers website will be in read-only mode. There will be no changes to other Yahoo properties or services, or your Yahoo account. You can find more information about the Yahoo Answers shutdown and how to download your data on this help page.
Trending News
¿cómo le paso el resultado de un cursor como parámetro a un Procedimiento almacenado en PL/SQL?
Tengo un código que se ejecuta para un sólo registro (where registro = 1) y necesito que se consulte para todos cada uno de los registros de esa tabla pasándoselo como parámetro.
¿Cómo lo declaro y cómo lo llamo?
Lo estoy haciendo con un procedimiento almacenado
digamos que tengo un procedimiento almacenado que contiene un cursor que trae los numeros de empleado:
CREATE OR REPLACE PROCEDURE usuario.SP_PRUEBA
IS
BEGIN
dbms_output.enable;
DECLARE
CURSOR c_TraeIdEmpleado
IS
select n_num_empleado
from t_PERSONAL
WHERE D_BAJA IS NULL;
BEGIN
FOR v_reg in c_TraeIdEmpleado
LOOP
dbms_output.put_line ( Num_Empleado: || v_reg.n_num_empleado);
end loop;
end;
END SP_PRUEBA;
/
y tengo un Query que dice
SELECT COUNT(*) FROM TB_FALTAS --AUSENCIAS
where N_STATUS=4
and N_TIPO_AUSENCIA=5
AND N_NUM_EMPLEADO = 103
AND to_date( 01/01/2015 , dd/mm/yyyy ) BETWEEN d_fecha_inicio
AND d_fecha_final
AND NOT EXISTS (SELECT n_id_vacacion FROM tb_vacaciones WHERE to_date( 01/01/2015 , dd/mm/yyyy ) BETWEEN d_fecha_inicio AND d_fecha_final
AND n_num_empleado = 103 and N_STATUS=4 )
AND NOT EXISTS (SELECT n_id_ausencia FROM TB_FALTAS --AUSENCIAS WHERE to_date( 01/01/2015 , dd/mm/yyyy ) BETWEEN d_fecha_inicio
AND d_fecha_final
and n_tipo_ausencia <> 5
and n_status = 4
AND n_num_empleado = 103)
Necesito que en lugar del 103, tome el resultado del cursor de arriba
2 Answers
- 6 years agoFavorite Answer
No es posible ejecutar un SP en un query, pero como yo lo veo no es necesario, puedes usar un subquery en el where de tu consulta de abajo en lugar de hacer "n_num_empleado = 10" puedes reemplazarlo con la condición IN: "n_num_empleado IN (query del stored procedure)". Completo:
La condición IN te permite los valores coincidan con los valores que te arroja la subconsulta a manera de OR con cada uno de los elementos que te devuelva.
Extra: creo que tu consulta podría ser mas optima, en lugar de exists puedes usar joins para no repetir condiciones (no estoy seguro del todo, ya que no puedo hacer pruebas).
- 6 years ago
Te agradezco la respuesta.
El query no es mío, me pidieron meterlo en un PL/SQL para poder contar cuánto tarda y demostrar que no está optimizado, lo hice creando un cursor que me guardara el num de empleado y pasandoselo como parámetro.