...
Все используемые системой константы описаны в специальном сервисном пакете SS_CONSTANTS_PKG_S
, а также (публичный синоним CONST
). Этот же пакет содержит функцию GET_CONST
, возвращающую значение константы по ее коду. Также доступны в глобальном контексте CONST
и в представлении SS_V_CONSTANTS
.Для передачи констант в качестве значения аргумента хранимой процедуры
В PL/SQL-коде для передачи значений констант рекомендуется использовать обращение через пакет:
CONST.<код константы>
...
Code Block language sql title Пример использования констант в PL/SQL BEGIN -- Аннулировать документ с идентификатором 1577736201 SD_DOCUMENTS_PKG.SD_DOCUMENTS_CHANGE_STATE ( num_N_DOC_ID => 1577736201, num_N_New_DOC_STATE_ID => CONST.DOC_STATE_Canceled); END;
Для SQL-запросов
...
, которые выполняются вне PL/SQL, рекомендуется использовать функцию
CONST.GET_CONST('<код константы>')
: она возвращает числовое (типNUMBER
) значение константы и в случае ошибки в названии константы вызывает исключение видаPLS-00302: component 'DOC_TYPE_CHARGEDOG' must be declared
.Code Block language sql title Пример использования констант в SQL через функцию CONST.GET_CONST -- Подсчитать количество актуальных
...
актов начислений в системе SELECT COUNT(*) FROM SD_V_DOCUMENTS WHERE N_DOC_TYPE_ID =
...
CONST.GET_
...
CONST(
...
'
...
DOC_TYPE_
...
ChargeLog')
...
AND N_DOC_STATE_ID =
...
CONST.GET_
...
CONST('DOC_STATE_Actual');
Также в SQL-запросах можно применять обращение через контекстSYS_CONTEXT('CONST',
...
'<код константы>')
...
. Обратите внимание, функция
SYS_CONTEXT
...
всегда возвращает строковое значение. Чтобы при ее использовании не столкнуться с проблемами преобразования типов, результат
...
следует явно приводить к числовому
...
типу с помощью функции
TO_NUMBER
. Передача в данную функцию некорректного кода константы не приведёт к ошибке: в таком случае она возвращаетNULL
.Code Block language sql title Пример использования констант в SQL через функцию SYS_CONTEXT -- Подсчитать количество актуальных актов начислений в системе SELECT COUNT(*) FROM SD_V_DOCUMENTS WHERE N_DOC_TYPE_ID = TO_NUMBER(SYS_CONTEXT('CONST', 'DOC_TYPE_ChargeLog')) AND N_DOC_STATE_ID = TO_NUMBER(SYS_CONTEXT('CONST', 'DOC_STATE_Actual'));
Приложения, постоянно взаимодействующие с
ais_name |
---|
...