Oracle全局常量还是变量?

时间:2015-02-05 13:21:06

标签: oracle oracle10g

有没有办法声明可以在块的DECLARE部分和C#等其他地方使用的全局变量或常量?

我有几个脚本在日志表上设置不同的状态,具体取决于它们的操作是否成功。 我们这样:

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

此外,我们还有一个C#应用程序,可以执行某些无法从Oracle完成的操作。此应用程序还根据其运营成功设置了状态。

由于某些Status用于多个脚本和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 个答案:

答案 0 :(得分: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');