ITPub博客

首页 > 数据库 > Oracle > PLSQL Language Reference-PL/SQL子程序-重载子程序-子程序重载错误

PLSQL Language Reference-PL/SQL子程序-重载子程序-子程序重载错误

原创 Oracle 作者:LuiseDalian 时间:2014-03-30 21:21:19 0 删除 编辑

子程序重载错误

一但PL/SQL编译器判断出它不能确定调用哪个子程序时,就会捕获重载错误。

当子程序具有完全相同的头部,则当编译子程序本身或声明它们的包规范时会捕获重载错误。

其它情况就是当你编译模棱两可的子程序调用时会捕获重载错误。

--引发编译时错误

CREATE OR REPLACE PACKAGE pkg1 IS

    PROCEDURE s (p VARCHAR2);

    PROCEDURE s (p VARCHAR2);

END pkg1;

 

--编译时成功,编译调用的程序时出错

CREATE OR REPLACE PACKAGE pkg2 IS

    SUBTYPE t1 IS VARCHAR2(10);

    SUBTYPE t2 IS VARCHAR2(10);

    PROCEDURE s (p t1);

    PROCEDURE s (p t2);

END pkg2;

 

CREATE OR REPLACE PROCEDURE p IS

    a pkg2.t1 := 'a';

BEGIN

    pkg2.s(a);  -- 捕获错误

END p;

 

--修改函数的重载,s过程的形参名不一样

CREATE OR REPLACE PACKAGE pkg2 IS

    SUBTYPE t1 IS VARCHAR2(10);

    SUBTYPE t2 IS VARCHAR2(10);

    PROCEDURE s (p1 t1);

    PROCEDURE s (p2 t2);

END pkg2;

 

--调用方式也改一下,基于名字

CREATE OR REPLACE PROCEDURE p IS

    a pkg2.t1 := 'a';

BEGIN

    pkg2.s(p1=>a);  -- 不会产生编译错误

END p;

 

--没有违背重载规则

CREATE OR REPLACE PACKAGE pkg3 IS

    PROCEDURE s (p1 VARCHAR2);

    PROCEDURE s (p1 VARCHAR2, p2 VARCHAR2 := 'p2');

END pkg3;

--会产生编译错误

CREATE OR REPLACE PROCEDURE p IS

    a1 VARCHAR2(10) := 'a1';

    a2 VARCHAR2(10) := 'a2';

BEGIN

    pkg3.s(p1=>a1, p2=>a2);  -- 没有错误

    pkg3.s(p1=>a1);          -- 会引起错误,不确定是调用哪一个

END p;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/17013648/viewspace-1132828/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-02-06

  • 博文量
    1986
  • 访问量
    5569016