【发布时间】:2023-04-02 11:45:02
【问题描述】:
这个问题让我很困惑。
我知道为了使用,假设关联数组类型作为过程参数或作为函数的返回类型,您需要创建一个包;因为关联数组只能在 PL/SQL 块中使用。
所以我做到了,这是我的包架构:
CREATE OR REPLACE PACKAGE some_package AS
TYPE vector IS TABLE OF INTEGER INDEX BY PLS_INTEGER;
TYPE MATRIX IS TABLE OF vector INDEX BY PLS_INTEGER;
PROCEDURE printMatrix (p_matrix IN MATRIX);
FUNCTION BUILD_MATRIX(p_row_count IN INTEGER , p_column_count IN INTEGER) RETURN MATRIX;
END some_package;
/
我的身体包裹:
CREATE OR REPLACE PACKAGE BODY some_package AS
PROCEDURE printMatrix (p_matrix IN MATRIX)
IS
BEGIN
FOR i in p_matrix.first..p_matrix.last LOOP
FOR j in p_matrix(i).first..p_matrix(i).last LOOP
DBMS_OUTPUT.PUT_LINE(p_matrix(i)(j));
END LOOP;
DBMS_OUTPUT.PUT_LINE(CHR(10));
END LOOP;
DBMS_OUTPUT.PUT_LINE(CHR(10));
END printMatrix;
FUNCTION BUILD_MATRIX(p_row_count IN INTEGER , p_column_count IN INTEGER)
RETURN MATRIX IS
TYPE vector IS TABLE OF INTEGER INDEX BY PLS_INTEGER;
TYPE MATRIX IS TABLE OF vector INDEX BY PLS_INTEGER;
v_my_matrix MATRIX;
v_my_row vector;
v_contor_row INTEGER;
v_contor_column INTEGER;
BEGIN
FOR v_contor_row IN 0..p_row_count LOOP
FOR v_contor_column IN 0..p_column_count LOOP
v_my_row(v_contor_column) := 0 + MOD(ABS(DBMS_RANDOM.RANDOM),30);
END LOOP;
v_my_matrix(v_contor_row) := v_my_row;
END LOOP;
return v_my_matrix;
END;
END some_package;
/
但是由于一些未知的原因,我得到了这些错误:
错误(9,12):PLS-00323:子程序或游标“BUILD_MATRIX”是 在包规范中声明并且必须在包中定义 身体
错误(19,3):PL/SQL:项目被忽略
错误(20,13):PLS-00498:在声明之前非法使用类型
我不明白我做错了什么,我的过程和函数的标题类型与实现相同:相同的参数,相同的返回类型......我做错了什么?
感谢您的宝贵时间。
【问题讨论】:
标签: sql oracle plsql oracle-sqldeveloper