Non è possibile farlo. Avrete bisogno di una funzione "getter" per restituire il valore di una variabile pubblica o costante definito in 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: Se non è possibile modificare questi pacchetti, si può creare nuove funzioni o pacchetti? Se è possibile, è possibile aggirare il problema così:
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>
Hai il permesso di fare riferimento a variabili pubbliche da altri oggetti PL/SQL.
In risposta al tuo ultimo commento, ho aggiunto del codice per mostrare come si potrebbe scrivere una funzione per ottenere valori diversi dal pacchetto con una singola funzione. Se questo non funziona, temo che tu sia il proverbiale torrente.
Grazie per la risposta. Ma sfortunatamente non riesco a modificare questi pacchetti :( –
Puoi creare nuovi oggetti pl/sql? – DCookie
Preferibilmente no. E se posso, ci deve essere un piccolo insieme di procedure, non una procedura per ogni costante. Grazie ancora –