Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

display select results inside anonymous block

I'm trying to debug a SELECT inside a procedure, and I'm trying to this using a anonymous block. I would like that SQL Developer simply return the last SELECT statement, but I get the error:

ORA-06550: line 21, column 5:
PLS-00428: an INTO clause is expected in this SELECT statement

Inside the procedure, I have an INTO for that select, but is there a simple way that I can simply get the results for the last SELECT statement for my debugging? I'm using anonymous block and variables so that the code is as similar as possible from what's actually inside the procedure, so that I don't have to change the code

set serveroutput on format wrapped;
DECLARE
  p_cd_doc_type number;
  p_dc_doc_code varchar2(200);
  p_dt_base date;
  p_qt_days number;
  p_vl_mov_total number;
  p_qt_transac number;
  v_dt_max date;
  v_dt_min date;
begin
  p_dt_base := sysdate;
  p_qt_days := 1;

  v_dt_max := trunc(p_dt_base) + 1;
  v_dt_min := v_dt_max - p_qt_days;
  p_vl_mov_total := 0;

  DBMS_OUTPUT.PUT_LINE('v_dt_max = ' || v_dt_max);
  DBMS_OUTPUT.PUT_LINE('v_dt_min = ' || v_dt_min);

    select *
    from tb_cad_cliente a join tb_trn_transacao b
      on a.cd_cliente = b.cd_cliente 
    where a.cd_doc_type = p_cd_doc_type
    and a.dc_doc_code = p_dc_doc_code
    and b.dt_row between v_dt_min and v_dt_max
    and b.cd_status = 3;
end;
like image 329
Pascal Avatar asked Jun 23 '11 14:06

Pascal


3 Answers

For oracle 12c or higher

declare
    rfc sys_refcursor; 
begin
    open rfc for select * from table;
    dbms_sql.return_result(rfc);
end;
like image 130
Luis Acero Avatar answered Sep 29 '22 11:09

Luis Acero


In order to return the value of the select it needs to be selected into a container (a reference cursor or REF CURSOR). In your Declare you should include ref_cursor_out SYS_REFCURSOR; and change your select to:

select * into ref_cursor_out ...

In SQL Developer there is an option (I am a Toad user, so I forget where in SD) that tells the IDE to load the result set into a grid to view.

[edit: per comment from @DCookie, Thanks for the catch!]

like image 30
Cos Callis Avatar answered Sep 29 '22 11:09

Cos Callis


You can try with this, to print your result easily:

declare
your_variable varchar2(19);
BEGIN
DBMS_OUTPUT.PUT_LINE('init..');
 FOR x IN (SELECT      your_column
                 FROM you_table
                 where rownum<2
             order by 1)
   LOOP
      DBMS_OUTPUT.PUT_LINE(x.your_column);
   END LOOP;
END;
like image 41
Aitor Avatar answered Sep 29 '22 11:09

Aitor