该函数来自外部库,我无权访问其源代码,但这里是其文档:http://desktop.arcgis.com/en/arcmap/10.4/manage-data/using-sql-with-gdbs/st-transform.htm
它声称有两个函数,但具有相同的签名,但Oracle在标题中给出了错误(我错误地假设)并且不允许我编译该函数。
有没有办法可以跳过这个错误并让它在下面编译我的函数?因为我假设执行时不会出现此错误。
或者我真的错过了什么?
功能:
create or replace function transform_to_utm_sul_x(fuso varchar,shape st_geometry)
RETURN number
AUTHID CURRENT_USER
AS
utm_x number;
srid INTEGER;
begin
SELECT
wkid_sul
INTO
srid
FROM
limt_fusos_utm
WHERE
zone = fuso and srid is not null and srid <> '';
utm_x := st_x(st_transform(shape, srid));
return utm_x;
end transform_to_utm_sul_x;
堆栈追踪:
错误(16,47):PLS-00306:调用的参数提示数量或类型错误 'ST_TRANSFORM_F'
答案 0 :(得分:1)
您调用st_transform,其形状为st_geometry,srid为INTEGER。 Oracle表示ST_TRANSFORM_F与类型(st_geometry,integer)没有匹配的定义。或者更确切地说,Oracle无法将具有实际类型(st_geometry,整数)的参数转换为ST_TRANSFORM_F的任何现有定义。
快速演示。
SQL> create or replace function ST_TRANSFORM_F(i in integer) return integer
2 as begin return 1; end;
3 /
Function created.
SQL> create or replace function f(p in sys.odcinumberlist) return integer as
2 begin return ST_TRANSFORM_F(p); end;
3 /
Warning: Function created with compilation errors.
SQL> sho err
Errors for FUNCTION F:
LINE/COL ERROR
-------- -----------------------------------------------------------------
2/7 PL/SQL: Statement ignored
2/14 PLS-00306: wrong number or types of arguments in call to
'ST_TRANSFORM_F'
SQL> create or replace function f(p in number) return integer as
2 begin return ST_TRANSFORM_F(p); end;
3 /
Function created.
number可以转换为整数,但sys.odcinumberlist,例如,不能。