1

I had a problem with Oracle SQL. I need to use this PL/SQL sentence on a stored procedure:

select t.ID_CURSO,p.DESCRIPCION,p.FECHA_INICIO,p.FECHA_FIN 
      from curso t 
      inner join contrato c on t.ID_CURSO = c.curso_id_curso
      inner join PAQUETE_ACTIVIDADES p on 
            c.ID_PAQUETE_ACTIVIDADES_ID = p.ID_PAQUETE_ACTIVIDADES
where id_curso=value;

I need to show the data of this select query How can I do that? I'm new at this Thanks for your help

Kaushik Nayak
  • 30,772
  • 5
  • 32
  • 45

3 Answers3

2

If you are using Oracle 12c, you could use DBMS_SQL.RETURN_RESULT.

CREATE OR REPLACE PROCEDURE pr_show_output
AS
   l_cursor   SYS_REFCURSOR;
BEGIN
   OPEN l_cursor FOR
      SELECT t.ID_CURSO,
             p.DESCRIPCION,
             p.FECHA_INICIO,
             p.FECHA_FIN
        FROM curso t
             INNER JOIN contrato c ON t.ID_CURSO = c.curso_id_curso
             INNER JOIN PAQUETE_ACTIVIDADES p
                ON c.ID_PAQUETE_ACTIVIDADES_ID = p.ID_PAQUETE_ACTIVIDADES
       WHERE id_curso = VALUE;

   DBMS_SQL.return_result (l_cursor);
END;
/
Kaushik Nayak
  • 30,772
  • 5
  • 32
  • 45
0

This should work. A good practice is to have a specific notation for local PL/SQL variable, say here (l:local, i:id) l_i_value:

declare 
  l_i_value integer := 14;
begin
    dbms_output.enable(1000000);
    for x in (
    select t.ID_CURSO,p.DESCRIPCION,p.FECHA_INICIO,p.FECHA_FIN 
          from curso t 
          inner join contrato c on t.ID_CURSO = c.curso_id_curso
          inner join PAQUETE_ACTIVIDADES p on 
                c.ID_PAQUETE_ACTIVIDADES_ID = p.ID_PAQUETE_ACTIVIDADES
    where id_curso=l_i_value )
    loop
      dbms_output.put_line('---');
      dbms_output.put_line(x.ID_CURSO);
      dbms_output.put_line(x.DESCRIPCION);
   -- ...
    end loop;
end;
/
J. Chomel
  • 8,193
  • 15
  • 41
  • 69
-1

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;
aljassi
  • 246
  • 2
  • 10