oracle - 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:表达式类型错误
类型是相同的,所以我做错了什么,我该如何解决?
解决方案
您需要使用相同的类型,而不是相同但单独定义的类型:
DECLARE
variable a.my_type;
BEGIN
variable := A.func();
END;
推荐阅读
- dart - Dart 中是否有与 C++ 类似的 std::bind ?
- javascript - React 如何搜索(过滤)数组中的所有字段?
- css - Chrome 在过渡时仍然闪烁
- sql-server - SQL Server 2016 数据库备份和还原
- sql - 附加查询不起作用 Access 2016
- mysql - 用户在哪里 - 在 15 秒内增加选择?
- elasticsearch - elasticsearch-pyspark:即使在使用 spark 指定之后,也没有从文档中获取特定字段(获取所有字段)
- java - 火花 SQL sql("
").first().getDouble(0) 给我不一致的结果 - visual-studio-code - 将图标添加到树视图的正确方法是什么?
- java - 修改映射键 java - 性能