Vous ne pouvez pas faire cela. Vous aurez besoin d'une fonction « getter » pour renvoyer la valeur d'une variable publique ou constante définie dans un pacakge:
CREATE OR REPLACE PACKAGE Package1 IS
A_CONSTANT CONSTANT VARCHAR2(100) := 'Constant value a';
B_CONSTANT CONSTANT VARCHAR2(100) := 'Constant value b';
FUNCTION get_const(p_id NUMBER) RETURN VARCHAR2;
END Package1;
CREATE OR REPLACE PACKAGE BODY Package1 IS
FUNCTION get_const(p_id NUMBER) RETURN VARCHAR2
IS
BEGIN
IF p_id = 1 THEN
RETURN package1.a_constant;
ELSIF p_id = 2 THEN
RETURN package1.b_constant;
END IF;
RETURN NULL;
END;
END Package1;
SQL> select package1.a_constant from dual;
select package1.a_constant from dual
ORA-06553: PLS-221: 'A_CONSTANT' is not a procedure or is undefined
SQL> select package1.get_const(1) from dual;
PACKAGE1.GET_CONST(1)
--------------------------------------------------------------------------------
Constant value a
SQL>
EDIT: Si vous ne pouvez pas modifier ces packages, vous pouvez créer de nouvelles fonctions ou paquets? Si vous le pouvez, vous pouvez contourner le problème ainsi:
CREATE OR REPLACE FUNCTION get_const(p_id NUMBER) RETURN VARCHAR2 IS
BEGIN
IF p_id = 1 THEN
RETURN package1.a_constant;
ELSIF p_id = 2 THEN
RETURN package1.b_constant;
END IF;
RETURN NULL;
END;
/
SQL> select get_const(1) from dual;
GET_CONST(1)
--------------------------------------------------------------------------------
Constant value a
SQL> select get_const(2) from dual;
GET_CONST(2)
--------------------------------------------------------------------------------
Constant value b
SQL>
Vous êtes autorisé à utiliser des variables publiques d'autres objets PL/SQL.
En réponse à votre dernier commentaire, j'ai ajouté du code pour montrer comment on pourrait écrire une fonction pour obtenir différentes valeurs du paquet avec une seule fonction. Si ça ne marche pas, j'ai peur que tu sois dans la crique proverbiale.
Merci pour votre réponse. Mais malheureusement, je ne peux pas modifier ces paquets :( –
Pouvez-vous créer de nouveaux objets pl/sql? – DCookie
Préférablement non Et si je peux, il doit y avoir un petit ensemble de procédures, pas une procédure pour chaque constante.Merci encore –