具有全局用户定义类型的 Oracle SQL TABLE 运算符显示 "expression is of wrong type"

Oracle SQL TABLE Operator with Global User-Defined Types showing "expression is of wrong type"

我有一个名为 testingPackage 的包裹。它有一个名为 ToDo 的函数,带有一个关联数组输入参数 arrPhoneType

testingPackage.ToDo('Kitty',arrTest)时,出现expression is of wrong type错误

如何将关联数组值输入到用户自定义类型?

testingPackage.sql

CREATE OR REPLACE PACKAGE testingPackage
AS

    TYPE PHONE IS RECORD
        (
        lfMobileNumber      NUMBER,
        lfPhoneNumber       NUMBER
        );
    TYPE arrPhoneType IS TABLE OF PHONE INDEX BY BINARY_INTEGER;
    INTS arrPhoneType;

    FUNCTION ToDo
        (
        szName          IN VARCHAR2,
        szList          IN arrPhoneType DEFAULT CAST(NULL AS arrPhoneType)
        )
    RETURN VARCHAR2;
END testingPackage;
/

testingFunction.sql

CREATE OR REPLACE PACKAGE testingFunction
...
END testingFunction;
/
CREATE OR REPLACE PACKAGE BODY testingFunction
AS
    FUNCTION FunctionA
    RETURN VARCHAR2
    IS
        szResult            VARCHAR2(2000);
        arrTest             testingPackage.arrPhoneType;
    BEGIN
        arrTest(0).lfMobileNumber := 12345678;
        arrTest(0).lfPhoneNumber := 87654321;
        
        SELECT  NVL(testingPackage.ToDo('Kitty',arrTest),'')
        INTO    szResult
        FROM    Dual;

        RETURN szResult;
    END FunctionA;
END testingFunction;
/

从风格上讲,直接赋值实际上总是比从 dual 执行 select 更可取。由于您使用的是旧版本的 Oracle,这也将解决编译问题,因为旧的 SQL 引擎无法处理 PL/SQL.

中定义的集合

这是一个 dbfiddle 显示,如果您使用的是 Oracle 11g R2 并将行更改为

szResult :=  NVL(testingPackage.ToDo('Kitty',arrTest),'') ;

代码应该编译