create or replace procedure p_name as
v_number number;
begin
...
end p_name;
/

解决方案 »

  1.   

    这是过程返回记录集的例子.在oracle中不是这么写的,给个例子你参考一下:create or replace package pkg_test
    as
      type myCursor is ref cursor;
      function get(p_id number) return myCursor;
    end pkg_test;
    --包体
    create or replace package body pkg_test 
    as
      function get(p_id number) return myCursor is
         rc myCursor;
         strsql varchar2(200);
      begin
         if p_id=0 then 
            open rc for select a.user_name from fnd_user a ;  
         else
            strsql:='select a.user_name from fnd_user a where a.user_id=:p_id';
            open rc for strsql using p_id;
         end if;
         return rc;  
         end get;
         
    end pkg_test;--调用测试
    set serverout on 
    declare 
      w_rc pkg_test.myCursor;
      w_name varchar2(100);
    begin
      w_rc:=pkg_test.get(0);
      loop
      fetch w_rc into w_name;
            exit when w_rc%notfound;
      dbms_output.put_line(w_name);
      end loop;
    end;
    /
      

  2.   

    dinya2003(OK) 
    你给的例子里面,又是Package,又是function,可是存储过程怎么办???对于高手或者熟手来说,写这个不是难事,可是对于初学者来说,为难死了。
    Ora的帮助文档,一级烂。初学者根本找不到入口。这一点比MSSQL差太远。如果MSSQL2005在性能上可以和Ora打成平手,Ora早晚死掉。不过,请给出一个存储过程的例子。不要是Package或者function,好么?
      

  3.   

    如果你很熟悉sqlserver语法,那么写oracle还不是小菜一碟.花两天时间熟悉一下就好了.
    oralce没有sqlserver的联机帮助,这个是最大的问题.
    sql的基本道理都是一样的.
      

  4.   

    zhouweiwansui(为什么我就是这么性感) :
    我也是这么认为。不过首先是Ora的语法、规则本来就不熟悉。手头也没有好的入门读物。
    上手就开始用它。很为难啊。我只是需要一个返回结果及的存储过程的例子,怎么就这么困难?
      

  5.   

    客户端是ADO.Net,数据库是Ora9i。
    写一个存储过程,返回表中的全部数据集。就是这么个需求。
    5555555
      

  6.   

    上面的看起来麻烦,其实不麻烦,写成过程也差不多是这个样子的. create or replace procedure get(p_id in number,p_out out pkg_test.MyCursor) is
         rc pkg_test.myCursor;
         strsql varchar2(200);
      begin
         if p_id=0 then 
            open rc for select a.user_name from fnd_user a ;  
         else
            strsql:='select a.user_name from fnd_user a where a.user_id=:p_id';
            open rc for strsql using p_id;
         end if;
         p_out:=c;  
         end get;
      

  7.   

    TO: dinya2003(OK)
    Thanks!我测试一下客户端ADO.Net的调用方法。稍后再发言。;)
      

  8.   

    TO: dinya2003(OK)
    你这里使用的游标类型是pkg_test.myCursor。这个类型你在上面定义过:
    type myCursor is ref cursor;为什么我不能直接用cursor呢?
      

  9.   

    不行。ADO.Net端,使用OracleCommandBuilder.DeriveParameters(cmd);去获取这个存储过程的参数,返回空。他没有能正常工作。