Oracle 数据库在使用过程时无法识别类型

Oracle database not recognizing type when using procedure

我在包头中声明了我的类型:

file_2.sql

CREATE OR REPLACE PACKAGE MY_UTILS
IS
TYPE VECTOR IS TABLE OF PLS_INTEGER INDEX BY PLS_INTEGER;
TYPE MATRIX IS TABLE OF VECTOR INDEX BY PLS_INTEGER;
PROCEDURE PRINT_MATRIX(p_matrix IN MATRIX);
END MY_UTILS;

我的打印矩阵程序

PROCEDURE PRINT_MATRIX(p_matrix IN MATRIX)  IS
BEGIN
DBMS_OUTPUT.PUT_LINE('printing matrix..');
END PRINT_MATRIX;

PRINT_MATRIX 程序执行简单的 DBMS_OUTPUT.PUT_LINE 打印矩阵;当我尝试使用 MY_UTILS.PRINT_MATRIX(v_matrix) 时出现错误:

PLS-00306: wrong number or types of arguments in call to 'PRINT_MATRIX'

在我的另一个 .sql 文件中,我也声明了与包中相同的 MATRIX 类型。

file_1.sql

set serveroutput ON;
DECLARE
TYPE VECTOR IS TABLE OF PLS_INTEGER INDEX BY PLS_INTEGER;
TYPE MATRIX IS TABLE OF VECTOR INDEX BY PLS_INTEGER;
v_matrix MATRIX;
BEGIN
--populate matrix, printing it works with 2 FOR LOOPS
MY_UTILS.PRINT_MATRIX(v_matrix); -- error
END;

Oracle 将您的变量视为与正式参数不同的类型。对你来说它们看起来是一样的,买给 Oracle 它们是两种不同的类型。

From the documentation:

A collection type defined in a package specification is incompatible with an identically defined local or standalone collection type.

因此您必须更改变量声明以使用包中的类型:

DECLARE
  v_matrix MY_UTILS.MATRIX;
BEGIN
  --populate matrix, printing it works with 2 FOR LOOPS
  MY_UTILS.PRINT_MATRIX(v_matrix); -- error
END;