查询差旅费的,输入四个参数,输入一个结果集,用于我们的报表代码:
create or replace package P_Rpt_Rate_Evection is
  type cur is ref cursor;
  procedure Rpt_Rate_Evection
  (
    StartDate in date,---开始日期
    EndDate  in  date,---结束日期
    DepartMent in varchar2,--部门名称
    HandleMan     in varchar2---报销人  );
end P_Rpt_Rate_Evection;create or replace package body P_Rpt_Rate_Evection
is 
procedure Rpt_Rate_Evection 
(
    StartDate in date,---开始日期
    EndDate  in  date,---结束日期
    DepartMent in varchar2,--部门名称
    HandleMan    in varchar2---报销人
  
  )
  is 
-------------变量定义
  mysql varchar2(30);
  V_DEPARTMENT varchar(50); V_HANDLEMAN varchar(50); V_CARAMOUNT NUMBER; V_TRAINAMOUNT NUMBER; V_FLIGHTAMOUNT NUMBER;
  V_MEETAMOUNT NUMBER;V_TAXIAMOUNT NUMBER;V_HOTELAMOUNT NUMBER; V_EDUCATEAMOUNT NUMBER;
  V_SUBSIDYAMOUNT NUMBER; V_OTHERAMOUNT NUMBER;V_AMOUNT NUMBER ;
----------游标定义-------------
 CURSOR cur  is 
 (select D.NAME,DU.NAME, R.CARAMOUNT,R.TRAINAMOUNT,R.FLIGHTAMOUNT,R.MEETAMOUNT,R.TAXIAMOUNT, R.HOTELAMOUNT ,
          R.EDUCATEAMOUNT,R.SUBSIDYAMOUNT, R.OTHERAMOUNT,R.AMOUNT 
        from rate_evection R ,d_organization D,d_user DU
           where R.DEPARTMENT_XID=D.ID and R.HANDLEMAN_XID=DU.ID and D.NAME like  DepartMent
               and DU.NAME like  HandleMan and to_char( R.CREATEDATE)<=to_char( EndDate) AND to_char( R.CREATEDATE)>=to_char(StartDate));
            
             
begin
  -----创建临时表-------  
   mysql:='create GLOBAL TEMPORARY table temp ( DEPARTMENT varchar, HANDLEMAN varchar, CARAMOUNT NUMBER(15,2), 
           TRAINAMOUNT NUMBER(15,2), FLIGHTAMOUNT NUMBER(15,2),  MEETAMOUNT NUMBER(10,2),TAXIAMOUNT NUMBER(15,2),
           HOTELAMOUNT NUMBER(15,2), EDUCATEAMOUNT NUMBER(10,2), SUBSIDYAMOUNT NUMBER(10,2), OTHERAMOUNT NUMBER(10,2), AMOUNT NUMBER(15,2),  )
           on commit preserve rows  ';  
  execute immediate mysql;
  open cur;
    loop
    fetch cur into  V_DEPARTMENT,V_HANDLEMAN,V_CARAMOUNT,V_TRAINAMOUNT, V_FLIGHTAMOUNT,V_MEETAMOUNT , V_TAXIAMOUNT, 
                          V_HOTELAMOUNT, V_EDUCATEAMOUNT, V_SUBSIDYAMOUNT,  V_OTHERAMOUNT, V_AMOUNT;
        EXIT WHEN cur%NOTFOUND;
    mysql:='INSERT  INTO  temp 
                 values (V_DEPARTMENT,V_HANDLEMAN,V_CARAMOUNT,V_TRAINAMOUNT,V_FLIGHTAMOUNT,V_MEETAMOUNT ,V_TAXIAMOUNT,
                         V_HOTELAMOUNT,V_EDUCATEAMOUNT, V_SUBSIDYAMOUNT,V_OTHERAMOUNT,V_AMOUNT)';
   execute immediate mysql;
   end loop;
   close cur;
   commit;
   mysql:=' select * from temp';
   execute immediate mysql;
   end;
 end P_Rpt_Rate_Evection;
在CS客户端调用时报错ORA-06550: 第 1 行, 第 7 列: 
PLS-00306: 调用 'RPT_RATE_EVECTION' 时参数个数或类型错误
ORA-06550: 第 1 行, 第 7 列: 
PL/SQL: Statement ignored
我是ORACLE新手,上面的包是仿照写的,以前没写过?是不是有什么定义不对的地方?编绎正确
最多100分,都给了,希望大家帮忙

解决方案 »

  1.   

    问题1:
    and D.NAME like DepartMent
    and DU.NAME like HandleMan
    用‘=’就行了吧?问题2
    and to_char(R.CREATEDATE) <= to_char(EndDate)
    AND to_char(R.CREATEDATE) >= to_char(StartDate));
    最好指定日期格式问题3
    commit;
    mysql := ' select * from temp';
    execute immediate mysql;
    执行查询语句后啥也不干,废代码问题4
    没有异常处理。
    即使事务是由外层控制,也需要raise异常
      

  2.   

    哦,还有 mysql varchar2(30);
    太小了
      

  3.   

    高级开发工程师职位推荐
    岗位责任:
    1、Senior  Developer有3年以上的成功的软件产品或类似项目的开发经验。有较强的独立思考,判断和研发能力。能够比较准确的判断每个开发任务的工作量。对产品的质量和专业制造有比较成熟的经验和认识。
    2.Senior Developer 的主要任务是在产品研发经理(Team Leader/Manager)带领下参与实现8a产品开发。必须有较高的技术水平和团队工作能力,并对8a及其相关的技术要有较高的兴趣和钻研能力。要有能够主动接受技术挑战,并能够将任务实现到底的精神和动力。
    任职资格: 
    1.20岁以上,35岁以下,至少本科毕业,最好是国内1流大学理科的计算机专业。北京大学、清华大学、人民大学毕业生优先。 
    2.至少3年以上的软件公司的C/C++开发工作经验,用C/C++参与开发过成功的产品。 
    3.对 C/C++, Linux 系统必须有实际开发经验和高水平的掌握. 
    4.对参加过数据库开发的优先 
    5.对使用C/C++ 开发过系统内核(System Kernel), 网络通信 (Networking), 并行计算 (Parallel Computing),  分布式处理模式的优先 (Distributed Computing). 
    6.对Oracle ; Sybase IQ ; DB2等数据库有深入了解的优先 
    7.要求总结分析能力属于较高水平 
    8.英语必须有中等水平以上的读写能力,口语好的优先 
    9.要求开朗,积极,向上,能够承受一定的心理和工作压力
    岗位地点:北京 
    月薪20K以内
    Lade Chen
    Bilast & Associates, Inc. 
    R 1501 Tower B Xintiandi Building No.1 Xibahe Road Chaoyang District Beijing PRC.
    M:15011205431
    P: 8610.5128.6869-828
    Email: [email protected]
    F: 8610.5128.6869 ext.888