Oracle에서 PL/SQL의 전역 변수를 정의하는 방법은 무엇입니까?
PL/SQL에서 모든 기능/절차/패키지에서 사용 가능한 전역 변수를 정의하려면 어떻게 해야 합니까?
정의할 수 있습니까?
아니면 이것을 할 수 있는 다른 방법이 있습니까?
다음과 같이 패키지 사양 변수를 사용하여 새 패키지를 만듭니다.
CREATE PACKAGE my_public_package IS
my_var Number;
END;
이제 my_public_package에 대한 액세스 권한을 가진 모든 코드의 변수에 액세스할 수 있습니다.
...
my_public_package.my_var := 10;
...
PL/SQL에서 모든 기능/절차/패키지에서 사용 가능한 전역 변수를 정의하려면 어떻게 해야 합니까?
전역 응용프로그램 컨텍스트 변수를 사용할 수 있습니다.
응용 프로그램 컨텍스트는 오라클 데이터베이스가 메모리에 저장하는 이름-값 쌍의 집합입니다.응용 프로그램 컨텍스트에는 네임스페이스라는 레이블이 있습니다. 예를 들어, 직원 ID를 검색하는 응용 프로그램 컨텍스트의 empno_ctx가 있습니다.컨텍스트 내에는 이름-값 쌍(연관 배열)이 있습니다. 이름은 값을 유지하는 메모리의 위치를 가리킵니다.응용프로그램은 응용프로그램 컨텍스트를 사용하여 사용자 ID 또는 기타 사용자별 정보 또는 클라이언트 ID와 같은 사용자에 대한 세션 정보에 액세스한 다음 이 데이터를 데이터베이스에 안전하게 전달할 수 있습니다.그런 다음 이 정보를 사용하여 사용자가 응용프로그램을 통해 데이터에 액세스하는 것을 허용하거나 방지할 수 있습니다.응용프로그램 컨텍스트를 사용하여 데이터베이스 사용자와 비데이터베이스 사용자를 모두 인증할 수 있습니다.
변수에 액세스하는 PL/SQL 개체에 대해 모든 세션에서 변수 값이 동일해야 하는 경우 데이터베이스 테이블을 사용하여 값을 저장합니다.
예를 들어 T.카이트는 여기서 제안합니다.
CREATE TABLE global_value(x INT);
INSERT INTO global_value VALUES (0);
COMMIT;
CREATE OR replace PACKAGE get_global
AS
FUNCTION Val
RETURN NUMBER;
PROCEDURE set_val (
p_x IN NUMBER );
END;
/
CREATE OR replace PACKAGE BODY get_global
AS
FUNCTION Val
RETURN NUMBER
AS
l_x NUMBER;
BEGIN
SELECT x
INTO l_x
FROM global_value;
RETURN l_x;
END;
PROCEDURE Set_val(p_x IN NUMBER)
AS
PRAGMA autonomous_transaction;
BEGIN
UPDATE global_value
SET x = p_x;
COMMIT;
END;
END;
/
variable_name [CONSTANT] datatype [NOT NULL] [:= | DEFAULT initial_value]
언급URL : https://stackoverflow.com/questions/29362332/how-to-define-global-variable-in-pl-sql-in-oracle
'programing' 카테고리의 다른 글
| PphStorm 프로젝트에서 사용하지 않는 모든 용도를 찾습니다. (0) | 2023.09.11 |
|---|---|
| Angular 2 라우터(버전 3)를 사용하여 상대적으로 탐색 (0) | 2023.09.11 |
| Oracle SQL PLS-00049: 잘못된 바인딩 변수 (0) | 2023.09.11 |
| 백업을 하나의 DC에서만 구현하기 위한 솔루션 모색 (0) | 2023.09.11 |
| -Xss와 -XX의 차이점은 무엇입니까?스레드 스택 크기? (0) | 2023.09.11 |