日期:2014-05-17  浏览次数:21008 次

oracle怎么调用存储过程?在线等!!!
SQL code
create or replace procedure P_SiteBissusSumStat(ACenterID varchar2,--网点营业统计报表
                                            ABeginDate varchar2,
                                            AEndDate varchar2,
                                            ErrString out varchar2,
                                            RetValue  out integer,
                                            v_cur  out MyPKG_public.Cursor_Ref)

-----------------------------------------------------
DECLARE
  RetValue NUMBER(4);
  ErrString VARCHAR2(100);
  v_cur MyPKG_public.Cursor_Ref;
begin

call P_SiteBissusSumStat('76901',--网点营业统计报表
  '2012-3-7',
  '2012-3-7',
  ErrString,
  RetValue,
  v_cur)
   
  end ;  
上面这样写不行,在Pl/sql中执行,这个又是什么类型呢?MyPKG_public.Cursor_Ref

------解决方案--------------------
我的异常网推荐解决方案:oracle存储过程,http://www.aiyiweb.com/oracle-develop/177537.html
------解决方案--------------------
后面三个参数是输出,不需要赋值的。
exec P_SiteBissusSumStat('76901','2012-3-7','2012-3-7')

MyPKG_public.Cursor_Ref 应该返回游标结果集。

------解决方案--------------------
直接就可以调用,不用call吧

SQL code
DECLARE
  RetValue NUMBER(4);
  ErrString VARCHAR2(100);
  v_cur MyPKG_public.Cursor_Ref;
begin

P_SiteBissusSumStat('76901',--网点营业统计报表
  '2012-3-7',
  '2012-3-7',
  ErrString,
  RetValue,
  v_cur)
    
  end ;

------解决方案--------------------
存储过程调用方式有几种 在sql窗口直接调用的话 用call
在begin和end中间 可以直接使用 不用加call 因为begin块内本身就相当于一个过程
------解决方案--------------------
sql窗口中:
DECLARE
RetValue NUMBER(4);
ErrString VARCHAR2(100);
v_cur MyPKG_public.Cursor_Ref;
begin

P_SiteBissusSumStat('76901',--网点营业统计报表
'2012-3-7',
'2012-3-7',
ErrString,
RetValue,
v_cur)
;
end ; 

你的;后没加上。
在COMMAND 窗口中 先定义输出变量 如:variable o_iSqlcode NUMBER ;
variable o_sSqlMsg VARCHAR2(255) ;
variable o_sAction VARCHAR2(255) ;
variable o_tProcDate VARCHAR2(255) ;
然后再CALL PROC_NAME;

CALL不是在SQL 窗口中调用的e