2015-02-05 47 views
2

有沒有辦法來聲明一個全局變量或常量,可以在塊的DECLARE部分和其他地方(如C#)中使用?Oracle全局常量或變量?

我有幾個腳本根據他們的操作成功在日誌表上設置不同的狀態。 這樣我們:

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

另外,我們有執行某些操作無法從Oracle做一個C#應用程序。此應用程序還根據其操作的成功設置了狀態。

由於一些狀態用於幾個腳本和C#我想只在一個地方定義它們。然後從其他地方訪問和使用它們。

有沒有一種方法,我可以宣佈類似於以後可以在PL/SQL塊中使用這樣的全局常量東西:

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

使用「上下文變量」。它將在所有會話中具有相同的全球價值。 – 2015-02-05 13:22:57

+2

在包規範中定義一個常量。或者創建一個函數返回一個常量(不知道後者的效率如何)。 – collapsar 2015-02-05 18:09:22

+0

@LalitKumarB我對Context變量不是很瞭解,但是從我正在閱讀的內容來看,如果我創建了全局應用程序上下文,它將適用於整個數據庫和所有用戶,我是否正確? – Dzyann 2015-02-05 20:31:41

回答

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');