天天看点

这是oracle包实体里面的一个存储过程 oracle存储过程中的if...elseif...else用法

这是oracle包实体里面的一个存储过程

CREATE OR REPLACE PACKAGE BODY CHXT_FWZ_FWH_RELATIONPACKAGE

is

    procedure GetFwxxByFwzl

    (

    ret_cursor out  mycursor,-- 定义过程,用游标变量作为返回参数

    p_fwzl in varchar2,

    p_yzh  in  varchar2,

    p_gczh in number,

    p_fh in varchar2,

    p_type in number)  as

    p_strsql varchar2(500);

    BEGIN

       IF p_type =1 then

       --精确查询

           p_strsql := 'select a.*,b.* from chxt_fwzxxb a,chxt_fwfhxxb b where a.fwzl = p_fwzl ';

           if p_yzh <> '' then

              p_strsql := p_strsql || ' and YZH= p_yzh';

                 end if;

           if p_gczh >0 then

              p_strsql := p_strsql || ' and gczh = p_gczh';

           end if;  

           p_strsql := p_strsql || ' and a.autoid = b.zbh';

           if p_fh <> '' then

               p_strsql := p_strsql || ' and b.fh = p_fh';

           end if;

           open ret_cursor for p_strsql;

     ----- else if p_type = 2 then

           -----p_strsql := 'select a.*,b.* from chxt_fwzxxb a,chxt_fwfhxxb b where a.fwzl = p_fwzl ';

           -----open ret_cursor for p_strsql;

      else 

           p_strsql := 'select a.*,b.* from chxt_fwzxxb a,chxt_fwfhxxb b where a.fwzl = p_fwzl ';

           open ret_cursor for p_strsql;

       end if;

    END GetFwxxByFwzl;

END CHXT_FWZ_FWH_RELATIONPACKAGE;

如果我注释掉

----- else if p_type = 2 then

           -----p_strsql := 'select a.*,b.* from chxt_fwzxxb a,chxt_fwfhxxb b where a.fwzl = p_fwzl ';

           -----open ret_cursor for p_strsql;

这一段,编译是正确的

但是,加上这一段 如下

CREATE OR REPLACE PACKAGE BODY CHXT_FWZ_FWH_RELATIONPACKAGE

is

    procedure GetFwxxByFwzl

    (

    ret_cursor out  mycursor,-- 定义过程,用游标变量作为返回参数

    p_fwzl in varchar2,

    p_yzh  in  varchar2,

    p_gczh in number,

    p_fh in varchar2,

    p_type in number)  as

    p_strsql varchar2(500);

    BEGIN

       IF p_type =1 then

       --精确查询

           p_strsql := 'select a.*,b.* from chxt_fwzxxb a,chxt_fwfhxxb b where a.fwzl = p_fwzl ';

           if p_yzh <> '' then

              p_strsql := p_strsql || ' and YZH= p_yzh';

                 end if;

           if p_gczh >0 then

              p_strsql := p_strsql || ' and gczh = p_gczh';

           end if;  

           p_strsql := p_strsql || ' and a.autoid = b.zbh';

           if p_fh <> '' then

               p_strsql := p_strsql || ' and b.fh = p_fh';

           end if;

           open ret_cursor for p_strsql;

      else if p_type = 2 then

           p_strsql := 'select a.*,b.* from chxt_fwzxxb a,chxt_fwfhxxb b where a.fwzl = p_fwzl ';

           open ret_cursor for p_strsql;

      else 

           p_strsql := 'select a.*,b.* from chxt_fwzxxb a,chxt_fwfhxxb b where a.fwzl = p_fwzl ';

           open ret_cursor for p_strsql;

       end if;

    END GetFwxxByFwzl;

END CHXT_FWZ_FWH_RELATIONPACKAGE;

编译就有错误

Compilation errors for PACKAGE BODY FCCH.CHXT_FWZ_FWH_RELATIONPACKAGE

Error: PLS-00103: 出现符号 "GETFWXXBYFWZL"在需要下列之一时:

       if

Line: 44

Text: END GetFwxxByFwzl;

Error: PLS-00103: 出现符号 "end-of-file"在需要下列之一时:

       beginfunction

          packagepragmaprocedureform

Line: 51

Compilation errors for PACKAGE BODY FCCH.CHXT_FWZ_FWH_RELATIONPACKAGE

Error: PLS-00103: 出现符号 "GETFWXXBYFWZL"在需要下列之一时:

       if

Line: 44

Text: END GetFwxxByFwzl;

Error: PLS-00103: 出现符号 "end-of-file"在需要下列之一时:

       beginfunction

          packagepragmaprocedureform

Line: 51

if ... then 

...   

elsif ... then 

...   

else 

...   

end if;   

or     

if ... then     

  ...   

else 

...   

end if;   

or     

if ... then 

...   

end if;

注:if后的条件不加括号

例子如下:

           if   p_fh <> ''   then

               p_strsql := p_strsql || ' and b.fh = p_fh';

           end if;