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 它们是两种不同的类型。
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;
我在包头中声明了我的类型:
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 它们是两种不同的类型。
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;