Reputation: 81
I am trying to create a package in Oracle, but i am getting the following errors:
PLS-00323 PLS-00371
The package code is:
CREATE OR REPLACE PACKAGE mahalanobis_distance_package AS
max_d NUMBER;
TYPE tbnumber IS
TABLE OF NUMBER INDEX BY PLS_INTEGER;
FUNCTION rel_mahalanobis_distance_aux_3 (
a NUMBER,
b1 NUMBER,
b2 NUMBER,
b3 NUMBER
) RETURN tbnumber;
END mahalanobis_distance_package;
/
CREATE OR REPLACE PACKAGE BODY mahalanobis_distance_package AS
max_d NUMBER;
TYPE tbnumber IS
TABLE OF NUMBER INDEX BY PLS_INTEGER;
FUNCTION rel_mahalanobis_distance_aux_3 (
a NUMBER,
b1 NUMBER,
b2 NUMBER,
b3 NUMBER
) RETURN tbnumber IS
tbnumber_obj tbnumber;
BEGIN
max_d := 0;
FOR j IN 1..3 LOOP
tbnumber_obj(j) := 0;
END LOOP;
tbnumber_obj(1) := abs(a - b1);
IF
tbnumber_obj(1) > max_d
THEN
max_d := tbnumber_obj(1);
END IF;
tbnumber_obj(2) := abs(a - b2);
IF
tbnumber_obj(2) > max_d
THEN
max_d := tbnumber_obj(2);
END IF;
tbnumber_obj(3) := abs(a - b3);
IF
tbnumber_obj(3) > max_d
THEN
max_d := tbnumber_obj(3);
END IF;
RETURN tbnumber_obj;
END rel_mahalanobis_distance_aux_3;
END mahalanobis_distance_package;
/
Why am I getting these errors?
Thanks in advance!
Upvotes: 0
Views: 1258
Reputation: 22412
You already declared the package variable and the TYPE tbnumber in the package spec.
Remove those declarations from the body, and it will compile just fine.
Although you'll get compiler warnings (if enabled)
Warning(2,11): PLW-06026: package specification exposes global variable
Here's your code
create or replace PACKAGE mahalanobis_distance_package AS
max_d NUMBER;
TYPE tbnumber IS
TABLE OF NUMBER INDEX BY PLS_INTEGER;
FUNCTION rel_mahalanobis_distance_aux_3 (
a NUMBER,
b1 NUMBER,
b2 NUMBER,
b3 NUMBER
) RETURN tbnumber;
END mahalanobis_distance_package;
/
create or replace PACKAGE BODY mahalanobis_distance_package AS
FUNCTION rel_mahalanobis_distance_aux_3 (
a NUMBER,
b1 NUMBER,
b2 NUMBER,
b3 NUMBER
) RETURN tbnumber IS
tbnumber_obj tbnumber;
BEGIN
max_d := 0;
FOR j IN 1..3 LOOP
tbnumber_obj(j) := 0;
END LOOP;
tbnumber_obj(1) := abs(a - b1);
IF
tbnumber_obj(1) > max_d
THEN
max_d := tbnumber_obj(1);
END IF;
tbnumber_obj(2) := abs(a - b2);
IF
tbnumber_obj(2) > max_d
THEN
max_d := tbnumber_obj(2);
END IF;
tbnumber_obj(3) := abs(a - b3);
IF
tbnumber_obj(3) > max_d
THEN
max_d := tbnumber_obj(3);
END IF;
RETURN tbnumber_obj;
END rel_mahalanobis_distance_aux_3;
END mahalanobis_distance_package;
/
Upvotes: 0
Reputation: 175556
There is no need for package variable/type declaration inside package body:
CREATE OR REPLACE PACKAGE BODY mahalanobis_distance_package AS
--max_d NUMBER;
--TYPE tbNumber IS TABLE OF NUMBER INDEX BY PLS_INTEGER;
function rel_mahalanobis_distance_aux_3( A NUMBER,
B1 NUMBER,B2 NUMBER,B3 NUMBER) RETURN tbNumber IS
tbNumber_obj tbNumber;
BEGIN
max_d := 0;
FOR j IN 1..3 LOOP
tbNumber_obj(j) := 0;
END LOOP;
tbNumber_obj(1) := ABS(A - B1);
IF tbNumber_obj(1) > max_d THEN
max_d := tbNumber_obj(1);
END IF;
tbNumber_obj(2) := ABS(A - B2);
IF tbNumber_obj(2) > max_d THEN
max_d := tbNumber_obj(2);
END IF;
tbNumber_obj(3) := ABS(A - B3);
IF tbNumber_obj(3) > max_d THEN
max_d := tbNumber_obj(3);
END IF;
return tbNumber_obj;
END rel_mahalanobis_distance_aux_3;
END mahalanobis_distance_package;
/
Upvotes: 1