2015-02-05 2 views
2

블록의 DECLARE 섹션과 C#과 같은 다른 곳에서 사용할 수있는 전역 변수 또는 상수를 선언 할 수있는 방법이 있습니까?Oracle 글로벌 상수 또는 변수?

나는 그들의 작업 성공에 따라 로그 테이블에 다른 상태를 설정하는 몇 가지 스크립트가 있습니다. 이러한 우리는 :

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

는 또한 우리는 오라클에서 할 수없는 특정 작업을 수행하는 C# 응용 프로그램이 있습니다. 또한이 응용 프로그램은 작업의 성공에 따라 STATUS를 설정합니다.

일부 상태는 여러 스크립트와 C#에서 사용되기 때문에 한 곳에서만 정의하고 싶습니다. 그런 다음 다른 곳에서 액세스하여 사용하십시오.

나중에이 같은 PL/SQL 블록에서 사용될 수있는 글로벌 상수 유사한 선언 할 수있는 방법이 있나요 : C#을에서 사용할 수도

GLOBAL ORACLE CONSTANT=> MY_CONSTANT 

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

을 그리고는?

+1

'컨텍스트 변수'를 사용하십시오. 모든 세션에서 전역 적으로 동일한 값을 갖습니다. –

+2

패키지 스펙에 상수를 정의하십시오. 또는 상수를 반환하는 함수를 만듭니다 (후자의 효율성에 대해서는 알지 못함). – collapsar

+0

@LalitKumarB 컨텍스트 변수에 대해서는 많이 알지 못하지만, 내가 읽고있는 내용에서 전체 응용 프로그램 컨텍스트를 만들면 전체 데이터베이스와 모든 사용자가 사용할 수 있습니다. 맞습니까? – Dzyann

답변

1

글로벌 변수를 만드는 가장 좋은 방법은 패키지 안에 생성하는 것입니다.

처럼 :

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; 

과 :

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; 

처럼 사용할 수 있습니다 다음 절차를 실행하십시오.

EXEC PKG_PARAM.SET_MY_CONSTANT('ASIA');