CREATE OR REPLACE PACKAGE multdim
-- Created by John Beresniewicz
IS
   TYPE dim1_t IS TABLE OF VARCHAR2 (32767)
      INDEX BY BINARY_INTEGER;

   TYPE dim2_t IS TABLE OF dim1_t
      INDEX BY BINARY_INTEGER;

   TYPE dim3_t IS TABLE OF dim2_t
      INDEX BY BINARY_INTEGER;

   PROCEDURE setcell (
      array_in   IN OUT  dim3_t,
      dim1_in         PLS_INTEGER,
      dim2_in         PLS_INTEGER,
      dim3_in         PLS_INTEGER,
      value_in   IN   VARCHAR2
   );
// testing C++ comments
   FUNCTION getcell (
      array_in   IN   dim3_t,
      dim1_in         PLS_INTEGER,
      dim2_in         PLS_INTEGER,
      dim3_in         PLS_INTEGER
   )
      RETURN VARCHAR2;

   FUNCTION EXISTS (
      array_in   IN   dim3_t,
      dim1_in         PLS_INTEGER,
      dim2_in         PLS_INTEGER,
      dim3_in         PLS_INTEGER
   )
      RETURN BOOLEAN;
END multdim;

CREATE OR REPLACE PACKAGE BODY multdim IS PROCEDURE setcell ( array_in IN OUT dim3_t, dim1_in PLS_INTEGER, dim2_in PLS_INTEGER, dim3_in PLS_INTEGER, value_in IN VARCHAR2 ) IS BEGIN array_in(dim3_in )(dim2_in )(dim1_in) := value_in; END; FUNCTION getcell ( array_in IN dim3_t, dim1_in PLS_INTEGER, dim2_in PLS_INTEGER, dim3_in PLS_INTEGER ) RETURN VARCHAR2 IS BEGIN RETURN array_in(dim3_in )(dim2_in )(dim1_in); END; FUNCTION EXISTS ( array_in IN dim3_t, dim1_in PLS_INTEGER, dim2_in PLS_INTEGER, dim3_in PLS_INTEGER ) RETURN BOOLEAN IS BEGIN -- 11/2002 Manchester -- The value doesn't matter; what matters is whether -- this combination exists or not. IF array_in(dim3_in )(dim2_in )(dim1_in) IS NULL THEN RETURN TRUE; ELSE RETURN TRUE; END IF; EXCEPTION WHEN NO_DATA_FOUND THEN RETURN FALSE ; END; END multdim;