2015-02-05 4 views
2

Есть ли способ объявить глобальную переменную или константу, которая может быть использована в разделе DECLARE блока и из других мест, таких как C#?Oracle Глобальная константа или переменная?

У меня есть несколько сценариев, которые устанавливают разные состояния в таблице журналов в зависимости от успеха их работы. Такие нас:

UPDATE LOG_TABLE SET STATUS = ''success' WHERE OBJECT_ID = :object_id 

Также у нас есть приложение C#, который выполняет определенные операции, которые не могут быть сделаны из Oracle. И это приложение также устанавливает STATUS в соответствии с успехом его операций.

Поскольку некоторые из статусов используются в нескольких сценариях, а в C# я хотел бы определить их только в одном месте. А затем получить доступ и использовать их везде.

Есть ли способ, которым я мог бы объявить что-то похожее на глобальную константу, которые впоследствии могут быть использованы в/SQL блок PL, как это:

GLOBAL ORACLE CONSTANT=> MY_CONSTANT 

DECLARE 
    my_update_script VARCHAR2(300) := 'UPDATE LOG_TABLE SET STATUS = '''|| MY_CONSTANT ||''' WHERE OBJECT_ID = :object_id; 

А также быть в состоянии использовать его из C#?

+1

Используйте «Контекстную переменную». Он будет иметь одинаковую ценность во всех сеансах. –

+2

Определите константу в спецификации пакета. Или создать функцию, возвращающую константу (не знаю об эффективности последнего, хотя). – collapsar

+0

@LalitKumarB Я мало знаю о переменной контекста, но из того, что я читаю, если я создаю глобальный контекст приложения, он будет доступен для всей базы данных и всех пользователей, я прав? – Dzyann

ответ

1

Лучший способ создать глобальную переменную - это создать ее внутри пакета.

Как:

CREATE OR REPLACE PACKAGE PKG_PARAM AS 
PROCEDURE SET_MY_CONSTANT (P_MY_CONSTANT IN VARCHAR2); 
MY_CONSTANT VARCHAR2 (30); 
END PKG_PARAM;  

Вы можете использовать его как

my_update_script VARCHAR2(300) := 'UPDATE LOG_TABLE SET STATUS = '''|| PKG_PARAM.MY_CONSTANT ||''' WHERE OBJECT_ID = :object_id; 

Также вы можете изменить значение переменной, создав процедуру внутри пакета, как:

CREATE OR REPLACE PACKAGE BODY PKG_PARAM AS 
PROCEDURE SET_MY_CONSTANT (P_MY_CONSTANT IN VARCHAR2) 
IS 
BEGIN 
MY_CONSTANT := P_MY_CONSTANT; 
END; 
END PKG_PARAM; 

и затем выполните процедуру:

EXEC PKG_PARAM.SET_MY_CONSTANT('ASIA'); 
Смежные вопросы