Вы не можете сделать это. Вам понадобится функция "getter", чтобы вернуть значение публичной переменной или константы, определенной в пакете:
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>
РЕДАКТИРОВАТЬ: Если вы не можете изменить эти пакеты, можете ли вы создавать новые функции или пакеты? Если вы можете, вы можете обойти проблему следующим образом:
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>
Вам разрешено ссылаться на публичные переменные из других объектов PL / SQL.
В ответ на ваш последний комментарий я добавил некоторый код, показывающий, как можно написать функцию для получения различных значений из пакета с помощью одной функции. Если это не сработает, я боюсь, что вы дошли до пословицы.