PLS-00306:错误数量或类型的参数提示函数带有“变量”数量的参数

时间:2017-09-19 19:17:55

标签: sql oracle oracle11g gis

该函数来自外部库,我无权访问其源代码,但这里是其文档: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'

1 个答案:

答案 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,例如,不能。