create or replace procedure AA_SXJTEST is
  out_gg number(8);
begin
  select id into out_gg from t_gzgl_zxjr_list where id=423; --查出来的只有一条记录
  DBMS_OUTPUT.put_line('out_gg变量的值=:'||out_gg);
end AA_SXJTEST;--命令窗口去执行的话,我可以看到结果,如下
SQL> set serverout on;
SQL> exec AA_SXJTEST;
表的数据量为:423--**************我想问的是***************
create or replace procedure AA_SXJTEST is
  out_gg ????; 
--如果用下面的查询的话,这里的参数应该定义成什么,然后我怎样才可以到命令窗口里去看到这个参数的结果
begin
  select id into out_gg from t_gzgl_zxjr_list;  --查出来的是一个数据集
end AA_SXJTEST;

解决方案 »

  1.   

    可以用游标输出
    create or replace procedure AA_SXJTEST is 
      out_gg number(8); 
      cursor v_cur is select id from t_gzgl_zxjr_list
    begin 
      open v_cur;
      fetch v_cur into out_gg;
      while v_cur %found loop
        DBMS_OUTPUT.put_line('out_gg变量的值=:'||out_gg); 
        fetch v_cur into out_gg;
      end loop;
      close v_cur;
    end AA_SXJTEST; 
      

  2.   


    首先,procedure是没有returntype的,只有out parameter这样的形式,所以在procedure里返回是不行的,你顶对是通过dbms_output把数据集打出来,
    这个可以通过loop 游标实现。如果是function是有返回值的,也可以通过返回一个游标或者table,array等形式来返回数据集,
    不过返回的数据集在oracle里是以游标形式的,也就是你直接是不能看到其中的数据集的,
    对于PLSQL developer或者TOAD工具,可以点击这个result,查看数据集。也可以通过一些java做的sqlbrowser来查看返回的数据集的
      

  3.   

    create or replace procedure AA_SXJTEST is 
      out_gg number(8); 
      cursor v_cur is select id from t_gzgl_zxjr_list
    begin 
      open v_cur;
      fetch v_cur into out_gg;
      while v_cur %found loop
        DBMS_OUTPUT.put_line('out_gg变量的值=:'||out_gg); 
        fetch v_cur into out_gg;
      end loop;
      close v_cur;
    end AA_SXJTEST; 
      

  4.   


    过程是没有return type,但对out parameter可以输出我们的相关信息,包括结果集,如Procedure Procedure_Name (
      parameter_   In Varchar2,
      list_        Out Sys_Refcursor
    )
    Is
    Begin
    Open list_ For
      Select *
    From table_name;End Procedure_Name;这样同事可以在PLSQL developer点击test时可以看到相关结果集...