here an Example . i hope it helps u
CREATE OR REPLACE PROCEDURE my_first_stored_proc IS
v_sql varchar2(2000);
v_ID_CURSO number;
v_DESCRIPCION varchar2(500);
v_FECHA_INICIO varchar2(50);
v_FECHA_FIN number;
BEGIN
v_sql := 'select t.ID_CURSO,p.DESCRIPCION,p.FECHA_INICIO,p.FECHA_FIN ';
v_sql := v_sql||' from curso t ';
v_sql := v_sql||' inner join contrato c on t.ID_CURSO = c.curso_id_curso
';
v_sql := v_sql||' inner join PAQUETE_ACTIVIDADES p on ';
v_sql := v_sql||' c.ID_PAQUETE_ACTIVIDADES_ID = p.ID_PAQUETE_ACTIVIDADES ';
v_sql := v_sql||' where id_curso=value ';
--the result is one row selected
EXECUTE IMMEDIATE v_sql INTO v_ID_CURSO,v_DESCRIPCION,v_FECHA_INICIO,
v_FECHA_FIN;
--// Do something else with variable
v_ID_CURSO,v_DESCRIPCION,v_FECHA_INICIO, v_FECHA_FIN
-- ...
--// End -Do something else with variable
v_ID_CURSO,v_DESCRIPCION,v_FECHA_INICIO, v_FECHA_FIN
--// Or you can save select result in a table by doing something like this
v_sql := 'create table my_first_table As ';
v_sql := v_sql||' select
t.ID_CURSO,p.DESCRIPCION,p.FECHA_INICIO,p.FECHA_FIN ';
v_sql := v_sql||' from curso t ';
v_sql := v_sql||' inner join contrato c on t.ID_CURSO = c.curso_id_curso
';
v_sql := v_sql||' inner join PAQUETE_ACTIVIDADES p on ';
v_sql := v_sql||' c.ID_PAQUETE_ACTIVIDADES_ID = p.ID_PAQUETE_ACTIVIDADES
';
v_sql := v_sql||' where id_curso=value ';
EXECUTE IMMEDIATE v_sql;
--// Do something else with my_first_table
-- ...
--// End -Do something else with my_first_table
--// and so on....
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line('ERROR: '||sqlerrm);
END my_first_stored_proc;