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

这个package为什么编译不了?
SQL code

create or replace package pack_sunyard_test is
  type refcur is ref cursor;
/******************************************************************************
--函数名称:        func_sunyard_test
--作者:           sunyard_zhengxl
--时间:           2007年04月01日
--使用源表名称:    sunyard.tset_a(测试表A)
                   sunyard.tset_b(测试表B)
--目标表明称:     
--参数说明:
--                 i_id                (ID值)
--                 o_name              (返回NAME值)
--功能:           oracle plsql开发示例-函数
--解释:
******************************************************************************/
function func_sunyard_test(
                           i_id in number     --ID值
                          ) 
  return varchar2;
  
/******************************************************************************
--存储过程名称:        proc_sunyard_test1
--作者:               sunyard_zhengxl
--时间:               2007年04月01日
--使用源表名称:        sunyard.tset_a(测试表A)
                       sunyard.tset_b(测试表B)
--目标表明称: 
--参数说明:
--                     i_id                (ID值)
--                     o_name              (返回NAME值)     
--功能:               oracle plsql开发示例-数据类型、控制结构、调用函数
--解释:
******************************************************************************/
procedure proc_sunyard_test1(
                             i_id    in  number,       --ID值
                             o_name  out varchar2      --姓名
                            );
                            
/******************************************************************************
--存储过程名称:        proc_sunyard_test2
--作者:               sunyard_zhengxl
--时间:               2007年04月01日
--使用源表名称:        sunyard.tset_a(测试表A)
                       sunyard.tset_b(测试表B)
--目标表明称: 
--参数说明:
--                     i_id                (ID值)
--                     o_name              (返回NAME值)     
--功能:               oracle plsql开发示例-调用过程、游标、游标变量、动态sql
--解释:
******************************************************************************/
procedure proc_sunyard_test2(
                             i_id    in  number,       --ID值
                             o_name  out varchar2,     --姓名
                             o_cur   out refcur        --游标变量
                            );
end pack_sunyard_test; 
/
create or replace package body pack_sunyard_test is
/******************************************************************************
--函数名称:        func_sunyard_test
--作者:           sunyard_zhengxl
--时间:           2007年04月01日
--使用源表名称:    sunyard.tset_a(测试表A)
                   sunyard.tset_b(测试表B)
--目标表明称:     
--参数说明:
--                 i_id                (ID值)
--                 o_name              (返回NAME值)
--功能:           oracle plsql开发示例-函数
--解释:
******************************************************************************/
function func_sunyard_test(
                           i_id in number     --ID值
                          ) 
  return varchar2 
is
  v_name    varchar2(10);  --姓名
  
begin

  --根据输入的ID查询相应的NAME值
  select a.name
  into v_name
  from test_a a 
  where a.id = i_id;

  return v_name;
  
  exception
      when others then
         raise;--抛出异常到调用模块
end func_sunyard_test;


procedure proc_sunyard_test1(
                             i_id    in  number,       --ID值
                             o_name  out varchar2      --姓名
                            ) 
is
  v_code1  number;
  v_code2  number(17,2);
  v_name   varchar2(100);
  
begin

      --number显式或隐式转换成varchar2时会将前面的0转换掉
      v_name := '001';
      v_code1 := v_name;
      
      --控制结构
      if v_name = '001' then
         v_code1 := 0;
      elsif v_name = '002' then
         v_code1 := 1;
      else 
         v_code1 := -1;
      end if;
      
      case v_name
        when '001' then v_code1 := 0;
        when '002' then v_code1 := 1;
        else v_code1 := -1;
      end case;
      
      loop