oracle函数、存储过程一些简单例子

区别:

1. 返回值的区别,函数有1个返回值,而存储过程是通过参数返回的,可以有多个或者没有
2.调用的区别,函数可以在查询语句中直接调用,而存储过程必须单独调用.
函数一般情况下是用来计算并返回一个计算结果而存储过程一般是用来完成特定的数据操作(比如修改、插入数据库表或执行某些DDL语句等等)
例子:

   --①游标的使用:获取 SAP当天某个零件的收货信息说明  参数:零件号,收货日期 
 /*
 格式: 第一次收货日期+时间+数量 、第二次收货日期+时间+数量 、第二N次收货日期+时间+数量
 */
  function getShxx( myMNUMBER varchar2, myday date) return varchar2 is
    myresult varchar2(8000);


    cursor mycursor is
       select  '订单号('||x.VGBEL||')订单行号('||x.VGPOS||')时间('||x.ERZET||')到货'||x.RFMNG||'个'  as w
           from t2i_sq10  x
           where x.MATNR=myMNUMBER 
           and to_char(myday,'yyyy-mm-dd')=x.ERDAT;
    myrow mycursor%rowtype;
  begin
    myresult :=  ' ';
    for myrow in mycursor loop
      myresult :=myresult ||  myrow.w ||';';
    end loop;
 
    return myresult;
    end; 


 /*②exception的使用:
 从SAP的SQ11接口中得到零件最新的仓库信息
 */
function getWarhouse(myMNUMBER varchar2) return varchar2 is
  myresult varchar2(8000);
begin
  select LGFSB || '{f*}' || LGPLA
    into myresult
    from t2i_sq11
   where id = (select max(id)
                 from t2i_sq11 x
                where x.MATNR = myMNUMBER
                group by MATNR);
  return myresult;
exception
  when no_data_found then
    myresult := '{f*}';
    return myresult;
end;


/*③返回值为结果集的使用:

*/

 procedure test(myMNUMBER varchar2 ,Resultdata out myCursorType,flag out varchar2) is
 --  TYPE myCursorType IS REF CURSOR /*这句话需要在包的开始里面定义*/;
 begin
 open Resultdata  for
   select LGFSB || '{f*}' || LGPLA
    from t2i_sq11
   where id = (select max(id)
                 from t2i_sq11 x
                where x.MATNR = myMNUMBER
                group by MATNR);
  flag :='ok';       
end;

/*④块的使用,及打印函数dbms_output.put_line(myresult); 

见图4-1,4-2

*/

declare
  myresult varchar2(8000);
begin
  select LGFSB || '{f*}' || LGPLA
    into myresult
    from t2i_sq11
   where id = (select max(id)
                 from t2i_sq11 x
                where x.MATNR = 'A120032J-D0200'
                group by MATNR);


  dbms_output.put_line(myresult);
exception
  when no_data_found then
    myresult := '{f*}';
    dbms_output.put_line(myresult);
end;




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值