programing

Oracle에서 PL/SQL의 전역 변수를 정의하는 방법은 무엇입니까?

sourcejob 2023. 9. 11. 21:37
반응형

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

반응형