首页 > 解决方案 > PLS-00382:从匿名块执行包函数的表达式类型错误

问题描述

这是我func的包中的函数A

create or replace PACKAGE A AS

    type MY_TYPE IS TABLE OF MYTABLE%ROWTYPE;

    FUNCTION func RETURN MY_TYPE;

END A;


create or replace PACKAGE BODY A AS

    FUNCTION func RETURN MY_TYPE IS
        CURSOR myCursor IS
           SELECT * FROM MYTABLE;
           var_cursor MYTABLE%ROWTYPE;
           myParam MY_TYPE;
           i NUMBER := 1;

        BEGIN
           FOR var_cursor IN myCursor
           LOOP
             myParam.EXTEND;
             myParam(i) := var_cursor;
             i := i + 1;
           END LOOP;

           RETURN myParam;
        END func;
END A;

我想调用这个函数。

DECLARE
 type my_type IS TABLE OF MYTABLE%ROWTYPE;
 variable my_type;

BEGIN
   variable := A.func();
END;

这给出了错误

PLS-00382:表达式类型错误

类型是相同的,所以我做错了什么,我该如何解决?

标签: oracleplsqltypes

解决方案


您需要使用相同的类型,而不是相同但单独定义的类型:

DECLARE
 variable a.my_type;

BEGIN
   variable := A.func();
END;

推荐阅读