> For the complete documentation index, see [llms.txt](https://docs.tibero.com/tibero-manuals/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.tibero.com/tibero-manuals/7.2.6.manuals/tbpsm-reference-guide/dbms_session.md).

# DBMS\_SESSION

DBMS\_SESSION 패키지의 기본 개념과 패키지 내의 프러시저와 함수를 사용하는 방법을 설명합니다.

## **개요**

**DBMS\_SESSION**은 세션의 식별자를 설정하고, 시스템에 고유한 세션의 식별자를 가져오는 데 사용되는 패키지입니다. 이 외에도 애플리케이션 문맥(application context)의 설정과 조회, 세션에 적용된 롤의 확인과 변경, 세션이 보유한 패키지 상태의 초기화, DBLINK 종료 기능을 함께 제공합니다.

**DBMS\_SESSION**이 제공하는 기능은 다음과 같이 분류할 수 있습니다.

<table><thead><tr><th width="190">분류</th><th>서브프로그램</th></tr></thead><tbody><tr><td>세션 식별자</td><td>SET_IDENTIFIER, CLEAR_IDENTIFIER, UNIQUE_SESSION_ID, IS_SESSION_ALIVE</td></tr><tr><td>애플리케이션 문맥</td><td>SET_CONTEXT, CLEAR_CONTEXT, CLEAR_ALL_CONTEXT, LIST_CONTEXT</td></tr><tr><td>롤</td><td>SET_ROLE, IS_ROLE_ENABLED</td></tr><tr><td>패키지 상태</td><td>MODIFY_PACKAGE_STATE, RESET_PACKAGE</td></tr><tr><td>기타</td><td>CLOSE_DATABASE_LINK, FREE_UNUSED_USER_MEMORY, SET_NLS</td></tr></tbody></table>

이 패키지는 AUTHID CURRENT\_USER로 정의되어 있으므로, 각 서브프로그램은 패키지를 호출한 사용자의 권한으로 수행됩니다.

## **상수**

본 절에서는 DBMS\_SESSION 패키지에서 제공하는 상수를 알파벳 순으로 설명합니다. 두 상수는 MODIFY\_PACKAGE\_STATE 프러시저의 action\_flags 파라미터에 사용합니다.

<table><thead><tr><th width="215">상수</th><th width="130">타입</th><th width="70">값</th><th>설명</th></tr></thead><tbody><tr><td>FREE_ALL_RESOURCES</td><td>PLS_INTEGER</td><td>1</td><td>세션이 보유한 모든 패키지의 인스턴스를 삭제</td></tr><tr><td>REINITIALIZE</td><td>PLS_INTEGER</td><td>2</td><td>세션이 보유한 모든 패키지의 인스턴스를 초기 상태로 되돌림</td></tr></tbody></table>

## **타입**

본 절에서는 DBMS\_SESSION 패키지에서 제공하는 타입을 설명합니다. 두 타입은 LIST\_CONTEXT 프러시저의 list 파라미터에 사용합니다.

```
TYPE AppCtxRecTyp IS RECORD (namespace VARCHAR2(30),
                             attribute VARCHAR2(30),
                             value     VARCHAR2(256));

TYPE AppCtxTabTyp IS TABLE OF AppCtxRecTyp INDEX BY BINARY_INTEGER;
```

## **프러시저**

본 절에서는 DBMS\_SESSION 패키지에서 제공하는 프러시저를 알파벳 순으로 설명합니다.

### **CLEAR\_ALL\_CONTEXT**

문맥의 모든 속성값들을 지웁니다. 이 프러시저는 CREATE CONTEXT DDL을 통해 지정된 패키지 내에서만 호출할 수 있습니다. 그 외의 위치(익명 블록, 다른 패키지 등)에서 호출하면 TBR-17004가 발생합니다. namespace에 NULL을 지정하면 TBR-14002가 발생합니다.

CLEAR\_ALL\_CONTEXT 프러시저의 세부 내용은 다음과 같습니다.

* 프로토타입

```
DBMS_SESSION.CLEAR_ALL_CONTEXT
(
    namespace      IN VARCHAR2
)
```

* 파라미터

<table><thead><tr><th width="222">파라미터</th><th>설명</th></tr></thead><tbody><tr><td>namespace</td><td>지울 문맥의 네임스페이스 이름을 지정</td></tr></tbody></table>

* 예제

```
CREATE OR REPLACE PACKAGE sec_pkg AS
    PROCEDURE set_attr (attr VARCHAR2, val VARCHAR2);
    PROCEDURE clear_all;
END;
/
CREATE OR REPLACE PACKAGE BODY sec_pkg AS
    PROCEDURE set_attr (attr VARCHAR2, val VARCHAR2) IS
    BEGIN
        DBMS_SESSION.SET_CONTEXT('MY_CTX', attr, val);
    END;

    PROCEDURE clear_all IS
    BEGIN
        DBMS_SESSION.CLEAR_ALL_CONTEXT('MY_CTX');
    END;
END;
/
CREATE OR REPLACE CONTEXT MY_CTX USING sec_pkg;

BEGIN
    sec_pkg.set_attr('DEPT', 'SALES');
    sec_pkg.set_attr('REGION', 'SEOUL');
END;
/
SELECT COUNT(*) AS attr_cnt FROM SESSION_CONTEXT WHERE NAMESPACE = 'MY_CTX';

BEGIN
    sec_pkg.clear_all;
END;
/
SELECT COUNT(*) AS attr_cnt FROM SESSION_CONTEXT WHERE NAMESPACE = 'MY_CTX';

DROP CONTEXT MY_CTX;
DROP PACKAGE sec_pkg;
```

### **CLEAR\_CONTEXT**

문맥의 속성값(들)을 지웁니다. 이 프러시저는 CREATE CONTEXT DDL을 통해 지정된 패키지 내에서만 호출할 수 있습니다. 그 외의 위치에서 호출하면 TBR-17004가 발생합니다. namespace에 NULL을 지정하면 TBR-14002가 발생합니다.

CLEAR\_CONTEXT 프러시저의 세부 내용은 다음과 같습니다.

* 프로토타입

```
DBMS_SESSION.CLEAR_CONTEXT
(
    namespace       IN VARCHAR2,
    client_id       IN VARCHAR2 DEFAULT NULL,
    attribute       IN VARCHAR2 DEFAULT NULL
)
```

* 파라미터

<table><thead><tr><th width="178">파라미터</th><th>설명</th></tr></thead><tbody><tr><td>namespace</td><td>지울 문맥의 네임스페이스 이름을 지정</td></tr><tr><td>client_id</td><td><ul><li>ACCESSED GLOBALLY로 생성된 문맥일 경우에만 의미를 가짐</li><li>NULL을 명시하면 SET_CONTEXT를 호출할 때에 client_id에 NULL을 주고 지정한 속성을 지울 수 있음(기본값: NULL)</li></ul></td></tr><tr><td>attribute</td><td><ul><li>특정 속성을 지우고자 할 때 명시</li><li>명시하지 않으면 해당 문맥의(해당 client_id를 가지는) 모든 속성값이 지워짐(기본값: NULL)</li></ul></td></tr></tbody></table>

* 예제

```
CREATE OR REPLACE PACKAGE sec_pkg AS
    PROCEDURE set_attr (attr VARCHAR2, val VARCHAR2);
    PROCEDURE clear (attr VARCHAR2);
END;
/
CREATE OR REPLACE PACKAGE BODY sec_pkg AS
    PROCEDURE set_attr (attr VARCHAR2, val VARCHAR2) IS
    BEGIN
        DBMS_SESSION.SET_CONTEXT('MY_CTX', attr, val);
    END;

    PROCEDURE clear (attr VARCHAR2) IS
    BEGIN
        DBMS_SESSION.CLEAR_CONTEXT('MY_CTX', NULL, attr);
    END;
END;
/
CREATE OR REPLACE CONTEXT MY_CTX USING sec_pkg;

BEGIN
    sec_pkg.set_attr('DEPT', 'SALES');
    sec_pkg.set_attr('REGION', 'SEOUL');
    sec_pkg.clear('DEPT');
END;
/
SELECT NVL(SYS_CONTEXT('MY_CTX', 'DEPT'), '(NULL)')     AS dept,
       NVL(SYS_CONTEXT('MY_CTX', 'REGION'), '(NULL)')   AS region
  FROM dual;

DROP CONTEXT MY_CTX;
DROP PACKAGE sec_pkg;
```

### **CLEAR\_IDENTIFIER**

현재 세션의 IDENTIFIER를 NULL로 설정합니다. 지운 뒤에는 V$SESSION의 CLIENT\_IDENTIFIER 컬럼과 SYS\_CONTEXT('USERENV', 'CLIENT\_IDENTIFIER')가 모두 NULL을 반환합니다.

CLEAR\_IDENTIFIER 프러시저의 세부 내용은 다음과 같습니다.

* 프로토타입

```
DBMS_SESSION.CLEAR_IDENTIFIER
```

* 예제

```
BEGIN
    DBMS_SESSION.SET_IDENTIFIER('MY_CLIENT_ID');
    DBMS_SESSION.CLEAR_IDENTIFIER;
END;
/

SELECT NVL(SYS_CONTEXT('USERENV', 'CLIENT_IDENTIFIER'), '(NULL)') AS client_id
  FROM dual;
```

### **CLOSE\_DATABASE\_LINK**

현재 열려 있는 DBLINK를 닫습니다. 내부적으로 'ALTER SESSION CLOSE DATABASE LINK dblink' 문장을 수행합니다. 지정한 DBLINK가 현재 세션에서 열려 있지 않으면 TBR-12057이 발생합니다. 그런 이름의 DBLINK가 아예 존재하지 않는 경우에도 같은 오류가 발생하므로, 이 오류만으로는 DBLINK의 존재 여부를 구분할 수 없습니다.

CLOSE\_DATABASE\_LINK 프러시저의 세부 내용은 다음과 같습니다.

* 프로토타입

```
DBMS_SESSION.CLOSE_DATABASE_LINK
(
    dblink       IN VARCHAR2
)
```

* 파라미터

<table><thead><tr><th width="204">파라미터</th><th>설명</th></tr></thead><tbody><tr><td>dblink</td><td>닫을 DBLINK의 이름을 지정</td></tr></tbody></table>

* 예제

다음은 열려 있지 않은 DBLINK를 닫으려 할 때 반환되는 오류 번호를 확인하는 예제입니다.

```
SET SERVEROUTPUT ON

BEGIN
    DBMS_SESSION.CLOSE_DATABASE_LINK('LINK1');
EXCEPTION
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('SQLCODE = ' || SQLCODE);
END;
/
```

### **FREE\_UNUSED\_USER\_MEMORY**

세션이 사용하지 않는 사용자 메모리를 반납합니다. Tibero는 세션 메모리를 자체적으로 관리하므로 이 프러시저는 아무 동작도 수행하지 않습니다. 호출해도 오류는 발생하지 않으며, 다른 데이터베이스에서 이식한 애플리케이션의 호환성을 위해 제공됩니다.

FREE\_UNUSED\_USER\_MEMORY 프러시저의 세부 내용은 다음과 같습니다.

* 프로토타입

```
DBMS_SESSION.FREE_UNUSED_USER_MEMORY
```

* 예제

```
BEGIN
    DBMS_SESSION.FREE_UNUSED_USER_MEMORY;
END;
/
```

### **LIST\_CONTEXT**

현재 세션에서 접근이 가능한 문맥들의 내용을 반환하는 프러시저입니다. SESSION\_CONTEXT 뷰의 내용을 list에 1번부터 순서대로 채우고, 채운 개수를 size에 반환합니다. 접근 가능한 문맥이 없으면 size에 0이 반환되고 list는 비어 있습니다.

LIST\_CONTEXT 프러시저의 세부 내용은 다음과 같습니다.

* 프로토타입

```
DBMS_SESSION.LIST_CONTEXT
(
    list      OUT AppCtxTabTyp,
    size      OUT NUMBER
)
```

* 파라미터

<table><thead><tr><th width="228">파라미터</th><th>설명</th></tr></thead><tbody><tr><td>list</td><td>문맥의 내용을 저장할 INDEX BY 테이블을 명시. 타입은 DBMS_SESSION.AppCtxTabTyp</td></tr><tr><td>size</td><td>buffer에 반환되는 entry의 수</td></tr></tbody></table>

* 예제

```
SET SERVEROUTPUT ON

DECLARE
    ctx_list   DBMS_SESSION.AppCtxTabTyp;
    ctx_cnt    NUMBER;
BEGIN
    DBMS_SESSION.LIST_CONTEXT(ctx_list, ctx_cnt);
    DBMS_OUTPUT.PUT_LINE('COUNT = ' || ctx_cnt);

    FOR i IN 1 .. ctx_cnt LOOP
        DBMS_OUTPUT.PUT_LINE(ctx_list(i).namespace || '.' ||
                             ctx_list(i).attribute || ' = ' ||
                             ctx_list(i).value);
    END LOOP;
END;
/
```

### **MODIFY\_PACKAGE\_STATE**

현재 세션이 보유한 모든 패키지 인스턴스의 상태를 변경합니다. action\_flags에는 FREE\_ALL\_RESOURCES(1) 또는 REINITIALIZE(2)만 지정할 수 있으며, 그 외의 값이나 NULL을 지정하면 TBR-14002가 발생합니다.

두 값 모두 패키지의 전역 변수를 선언 시점의 초기값으로 되돌립니다. 이 초기화는 DBMS\_OUTPUT을 포함한 시스템 패키지에도 적용되므로, 호출 이후에는 DBMS\_OUTPUT 버퍼의 내용과 활성화 상태가 사라집니다. 출력을 다시 받으려면 SET SERVEROUTPUT ON을 다시 수행해야 합니다.

MODIFY\_PACKAGE\_STATE 프러시저의 세부 내용은 다음과 같습니다.

* 프로토타입

```
DBMS_SESSION.MODIFY_PACKAGE_STATE
(
    action_flags     IN PLS_INTEGER
)
```

* 파라미터

<table><thead><tr><th width="180">파라미터</th><th>설명</th></tr></thead><tbody><tr><td>action_flags</td><td><ul><li>수행할 동작을 지정</li><li>DBMS_SESSION.FREE_ALL_RESOURCES(1): 세션이 보유한 모든 패키지 인스턴스를 삭제</li><li>DBMS_SESSION.REINITIALIZE(2): 세션이 보유한 모든 패키지 인스턴스를 초기 상태로 되돌림</li></ul></td></tr></tbody></table>

* 예제

```
BEGIN
    DBMS_SESSION.MODIFY_PACKAGE_STATE(DBMS_SESSION.FREE_ALL_RESOURCES);
END;
/

BEGIN
    DBMS_SESSION.MODIFY_PACKAGE_STATE(DBMS_SESSION.REINITIALIZE);
END;
/
```

### **RESET\_PACKAGE**

현재 세션이 보유한 모든 패키지 인스턴스를 삭제합니다. MODIFY\_PACKAGE\_STATE(DBMS\_SESSION.FREE\_ALL\_RESOURCES)를 호출하는 것과 동작이 동일하며, 패키지의 전역 변수는 선언 시점의 초기값으로 되돌아갑니다. DBMS\_OUTPUT의 버퍼와 활성화 상태도 함께 사라지므로, 출력을 다시 받으려면 SET SERVEROUTPUT ON을 다시 수행해야 합니다.

RESET\_PACKAGE 프러시저의 세부 내용은 다음과 같습니다.

* 프로토타입

```
DBMS_SESSION.RESET_PACKAGE
```

* 예제

```
BEGIN
    DBMS_SESSION.RESET_PACKAGE;
END;
/
```

### **SET\_CONTEXT**

이 프러시저는 CREATE CONTEXT DDL을 통해 지정된 패키지 내에서만 호출할 수 있습니다. 그 외의 위치에서 호출하면 TBR-17004가 발생합니다. 설정된 속성값은 세션이 유지되는 동안 보존됩니다. 만일 해당 문맥의 속성이 이미 설정되어 있을 경우 SET\_CONTEXT 호출은 해당 속성값을 덮어씁니다. namespace 또는 attribute에 NULL을 지정하면 TBR-14002가 발생합니다.

SET\_CONTEXT 프러시저의 세부 내용은 다음과 같습니다.

* 프로토타입

```
DBMS_SESSION.SET_CONTEXT
(
    namespace     IN VARCHAR2,
    attribute     IN VARCHAR2,
    value         IN VARCHAR2,
    username      IN VARCHAR2 DEFAULT NULL,
    client_id     IN VARCHAR2 DEFAULT NULL
)
```

* 파라미터

<table><thead><tr><th width="167">파라미터</th><th>설명</th></tr></thead><tbody><tr><td>namespace</td><td>속성값을 설정할 문맥의 네임스페이스 이름</td></tr><tr><td>attribute</td><td>해당 문맥에서의 속성 이름</td></tr><tr><td>value</td><td>설정할 속성에 대한 속성값</td></tr><tr><td>username</td><td><ul><li>해당 속성에 접근할 수 있는 데이터베이스 사용자명</li><li>GLOBALLY ACCESSED인 문맥에 대한 속성을 설정할 때만 사용</li><li>이 값을 설정하게 되면 해당 사용자만 이 속성에 접근할 수 있으며, 설정하지 않으면 모든 사용자가 속성에 접근할 수 있음(기본값: NULL)</li></ul></td></tr><tr><td>client_id</td><td><ul><li>해당 속성에 대해 애플리케이션에서 사용하는 client_id를 명시할 수 있음</li><li>대소문자를 구별하며 SET_IDENTIFIER 프러시저를 호출했을 때 명시했던 값과 일치해야 함</li><li>GLOBALLY ACCESSED인 문맥에 대한 속성을 설정할 때만 사용(기본값: NULL)</li></ul></td></tr></tbody></table>

* 예제

```
CREATE OR REPLACE PACKAGE sec_pkg AS
    PROCEDURE set_attr (attr VARCHAR2, val VARCHAR2);
END;
/
CREATE OR REPLACE PACKAGE BODY sec_pkg AS
    PROCEDURE set_attr (attr VARCHAR2, val VARCHAR2) IS
    BEGIN
        DBMS_SESSION.SET_CONTEXT('MY_CTX', attr, val);
    END;
END;
/
CREATE OR REPLACE CONTEXT MY_CTX USING sec_pkg;

BEGIN
    sec_pkg.set_attr('DEPT', 'SALES');
END;
/
SELECT SYS_CONTEXT('MY_CTX', 'DEPT') AS dept FROM dual;

DROP CONTEXT MY_CTX;
DROP PACKAGE sec_pkg;
```

### **SET\_IDENTIFIER**

세션의 CLIENT\_IDENTIFIER를 설정합니다. 설정된 값은 V$SESSION의 CLIENT\_IDENTIFIER 컬럼 또는 SYS\_CONTEXT('USERENV', 'CLIENT\_IDENTIFIER') 내장 함수를 호출하여 얻을 수 있습니다.

SET\_IDENTIFIER 프러시저의 세부 내용은 다음과 같습니다.

* 프로토타입

```
DBMS_SESSION.SET_IDENTIFIER
(
    client_id     IN VARCHAR2
)
```

* 파라미터

<table><thead><tr><th width="205">파라미터</th><th>설명</th></tr></thead><tbody><tr><td>client_id</td><td><ul><li>클라이언트 식별자</li><li>최대 길이는 64바이트이며, 이를 초과하는 값은 앞에서부터 64바이트까지만 저장되고 나머지는 버려짐</li><li>절삭은 바이트 단위로 수행되므로 멀티바이트 문자의 경계는 보장되지 않음</li></ul></td></tr></tbody></table>

* 예제

```
DECLARE
   client_id VARCHAR2(64);
BEGIN
   client_id := 'MY_CLIENT_ID';
   DBMS_SESSION.SET_IDENTIFIER(client_id);
END;
/

SELECT SID, CLIENT_IDENTIFIER FROM V$SESSION
 WHERE CLIENT_IDENTIFIER = 'MY_CLIENT_ID';

BEGIN
   DBMS_SESSION.CLEAR_IDENTIFIER;
END;
/
```

### **SET\_NLS**

사용하지 않는 프러시저입니다. 호출하면 TBR-14001이 발생합니다. 세션의 NLS 파라미터를 변경할 때에는 ALTER SESSION SET 문장을 사용합니다.

SET\_NLS 프러시저의 세부 내용은 다음과 같습니다.

* 프로토타입

```
DBMS_SESSION.SET_NLS
(
    param      IN VARCHAR2,
    value      IN VARCHAR2
)
```

* 파라미터

<table><thead><tr><th width="180">파라미터</th><th>설명</th></tr></thead><tbody><tr><td>param</td><td>변경할 NLS 파라미터의 이름</td></tr><tr><td>value</td><td>설정할 값</td></tr></tbody></table>

### **SET\_ROLE**

이 프러시저를 호출한 세션의 롤을 변경합니다. 이 프러시저는 'SET ROLE'로 시작하는 DDL을 수행하는 것과 동작이 동일하며, 입력값은 'SET ROLE' 다음에 오는 문장입니다. 존재하지 않는 롤을 지정하면 TBR-7075가 발생하고, 호출한 사용자에게 부여되지 않은 롤을 지정하면 TBR-7179가 발생합니다. 'ALL EXCEPT rolename' 형태도 rolename이 호출한 사용자에게 부여되어 있어야 합니다.

SET\_ROLE 프러시저의 세부 내용은 다음과 같습니다.

* 프로토타입

```
DBMS_SESSION.SET_ROLE
(
    role_cmd       IN VARCHAR2
)
```

* 파라미터

<table><thead><tr><th width="240">파라미터</th><th>설명</th></tr></thead><tbody><tr><td>role_cmd</td><td><ul><li>부여할 역할을 지정</li><li>'ALL', 'NONE', 'ALL EXCEPT rolename', 'rolename' 등 SET ROLE 문장의 인자를 그대로 사용</li></ul></td></tr></tbody></table>

* 예제

```
BEGIN
    DBMS_SESSION.SET_ROLE('ALL EXCEPT CONNECT');
END;
/

BEGIN
    DBMS_SESSION.SET_ROLE('ALL');
END;
/
```

## **함수**

본 절에서는 DBMS\_SESSION 패키지에서 제공하는 함수를 알파벳 순으로 설명합니다.

### **IS\_ROLE\_ENABLED**

이 함수를 호출한 세션에 롤이 적용되어 있는지 확인합니다. rolename은 데이터 딕셔너리에 저장된 이름과 정확히 일치해야 하므로 대문자로 지정해야 합니다. 존재하지 않는 롤 이름을 지정한 경우에도 오류 없이 FALSE를 반환합니다.

IS\_ROLE\_ENABLED 함수의 세부 내용은 다음과 같습니다.

* 프로토타입

```
DBMS_SESSION.IS_ROLE_ENABLED
(
    rolename IN VARCHAR2
)
RETURN BOOLEAN
```

* 파라미터

<table><thead><tr><th width="225">파라미터</th><th>설명</th></tr></thead><tbody><tr><td>rolename</td><td>적용 여부를 확인할 롤 이름. 대문자로 지정</td></tr></tbody></table>

* 반환값

<table><thead><tr><th width="150">값</th><th>설명</th></tr></thead><tbody><tr><td>TRUE</td><td>해당 롤이 현재 세션에 적용되어 있음</td></tr><tr><td>FALSE</td><td>해당 롤이 적용되어 있지 않거나, 그런 이름의 롤이 존재하지 않음</td></tr></tbody></table>

* 예제

```
SET SERVEROUTPUT ON

DECLARE
    result BOOLEAN;
BEGIN
    result := DBMS_SESSION.IS_ROLE_ENABLED('CONNECT');

    IF result THEN
        DBMS_OUTPUT.PUT_LINE('CONNECT = TRUE');
    ELSE
        DBMS_OUTPUT.PUT_LINE('CONNECT = FALSE');
    END IF;
END;
/
```

### **IS\_SESSION\_ALIVE**

UNIQUE\_SESSION\_ID로 얻은 세션 식별자를 받아 해당 세션이 아직 살아 있는지 확인합니다. uniqueid는 숫자로 변환할 수 있는 문자열이어야 하며, 그렇지 않으면 TBR-14002가 발생합니다.

IS\_SESSION\_ALIVE 함수의 세부 내용은 다음과 같습니다.

* 프로토타입

```
DBMS_SESSION.IS_SESSION_ALIVE
(
    uniqueid IN VARCHAR2
)
RETURN BOOLEAN
```

* 파라미터

<table><thead><tr><th width="205">파라미터</th><th>설명</th></tr></thead><tbody><tr><td>uniqueid</td><td>확인할 세션의 식별자. UNIQUE_SESSION_ID 함수가 반환하는 값과 같은 형식</td></tr></tbody></table>

* 반환값

<table><thead><tr><th width="150">값</th><th>설명</th></tr></thead><tbody><tr><td>TRUE</td><td>해당 식별자를 가진 세션이 존재하며 활성 상태임</td></tr><tr><td>FALSE</td><td>해당 식별자를 가진 세션이 없거나 활성 상태가 아님</td></tr></tbody></table>

* 예제

```
SET SERVEROUTPUT ON

DECLARE
    my_id   VARCHAR2(64);
    alive   BOOLEAN;
BEGIN
    my_id := DBMS_SESSION.UNIQUE_SESSION_ID;
    alive := DBMS_SESSION.IS_SESSION_ALIVE(my_id);

    IF alive THEN
        DBMS_OUTPUT.PUT_LINE(my_id || ' = TRUE');
    ELSE
        DBMS_OUTPUT.PUT_LINE(my_id || ' = FALSE');
    END IF;
END;
/
```

### **UNIQUE\_SESSION\_ID**

시스템 유일의 세션 식별자를 반환합니다. 반환값은 현재 세션의 일련번호(V$SESSION의 SERIAL# 컬럼)를 왼쪽에 0을 채워 24자리로 만든 숫자 문자열입니다. 이 값은 IS\_SESSION\_ALIVE 함수의 입력으로 사용할 수 있습니다.

UNIQUE\_SESSION\_ID 함수의 세부 내용은 다음과 같습니다.

* 프로토타입

```
DBMS_SESSION.UNIQUE_SESSION_ID RETURN VARCHAR2
```

* 반환값

<table><thead><tr><th width="150">값</th><th>설명</th></tr></thead><tbody><tr><td>VARCHAR2</td><td>현재 세션의 유일한 식별자. 길이는 24바이트로 고정</td></tr></tbody></table>

* 예제

```
SET SERVEROUTPUT ON

DECLARE
   u_sess_id VARCHAR2(64);
BEGIN
   u_sess_id := DBMS_SESSION.UNIQUE_SESSION_ID;
   DBMS_OUTPUT.PUT_LINE(u_sess_id);
END;
/

SELECT SERIAL# FROM V$SESSION
 WHERE SERIAL# = TO_NUMBER(DBMS_SESSION.UNIQUE_SESSION_ID);
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.tibero.com/tibero-manuals/7.2.6.manuals/tbpsm-reference-guide/dbms_session.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
