Ich habe dieses Problem, das mich verwirrt.Paketspezifikation und Paketkörperproblem, illegale Verwendung des Typs vor der Deklaration
Ich weiß, um einen assoziativen Array-Typ als Prozedurparameter oder als Rückgabetyp einer Funktion zu verwenden, müssen Sie ein Paket erstellen; weil assoziative Arrays nur in PL/SQL-Blöcken verwendet werden können.
Und so tat ich, das ist mein Paket Schema:
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;
/
Mein Körper Paket:
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;
/
Aber aus unerfindlichen Gründen, bekomme ich diese Fehler:
Fehler (9,12): PLS-00323: Unterprogramm oder Cursor 'BUILD_MATRIX' ist in einer Paketspezifikation deklariert und muss im pa definiert werden ket Körper
Fehler (19,3): PL/SQL: Item ignoriert
Fehler (20,13): PLS-00498: illegale Verwendung eines Typs vor seiner Erklärung
I verstehe ich nicht, was ich falsch gemacht habe, die Typen der Header meiner Prozedur und Funktion sind die gleichen mit den Implementierungen: gleiche Parameter, gleicher Rückgabetyp ... Was mache ich falsch?
Vielen Dank für Ihre Zeit.