oracle定义了一个包
CREATE OR REPLACE PACKAGE "HMCS"."MY_PACKAGE1" AS
/* TODO enter package declarations (types, exceptions, methods etc) here */
FUNCTION t1(a int,b int) return int;
END;
CREATE OR REPLACE PACKAGE BODY "HMCS"."MY_PACKAGE1" AS
FUNCTION t1(a int,b int) return int as
BEGIN
return a+b;
end t1;
END;
达梦通过dblink调用
select MY_PACKAGE1.T1@ct_link(2,2); --成功
select MY_PACKAGE1.T1@ct_link(a => 2,b =>2); --失败
Call parameters incompatible or mismatch for [T1]
我需要第二种方案,能指明给哪个参数进行传参。
要怎么写?
第二个问题兼容性问题,在一个包体里面,我需要定义两个同名函数,入参类型也一样,区别只是参数名称有区别。oracle可以实现这个功能
需求就是这样,不能改名。
CREATE OR REPLACE PACKAGE "HMCS"."MY_PACKAGE1" AS
/* TODO enter package declarations (types, exceptions, methods etc) here */
FUNCTION t1(a int,b int) return int;
FUNCTION t1(c int,d int) return int;
END;
CREATE OR REPLACE PACKAGE BODY "HMCS"."MY_PACKAGE1" AS
FUNCTION t1(a int,b int) return int as
BEGIN
return a+b;
end t1;
FUNCTION t1(c int,d int) return int as
BEGIN
return c-d;
end t1;
END;
oracle的调用:
select MY_PACKAGE1.t1(a => 1,b => 3) from dual; -- 结果4
select MY_PACKAGE1.t1(c => 5,d => 3) from dual; -- 结果2
达梦现在不允许包体里面定义上面这样的同名参数,会报错,所以我现在这部分代码迁移失败。
第一个问题的报错是Oracle端抛出的,那感觉不像是DM不支持才对,否则会在DM段显现,看详情应该是参赛类型对应错了;第二个问题的话属于函数重载,既然DM段不允许同名,那就是不能重载,如果不能改名的话,可以尝试把两个函数合成一个进行绕过,比如创建t1(a int,b int,c int,d int),指定具体参数的时候给出前二者或者后二者,但是这需要先把问题1解决