> 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/sql-reference-guide/data-definition-language/create-type.md).

# CREATE TYPE

사용자 정의 타입을 새로 정의하거나 기존 사용자 정의 타입을 대체합니다. 사용자 정의 타입은 tbPSM에서 사용할 수 있으며, Tibero 서버에 저장됩니다.

**CREATE TYPE**의 세부 내용은 다음과 같습니다.

* **문법**

<div align="left"><figure><img src="https://content.gitbook.com/content/evqs7Ne3nMyXQFkBSQWR/blobs/tru5jgb0WoXWwCjU5jJN/image.png" alt=""><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://content.gitbook.com/content/evqs7Ne3nMyXQFkBSQWR/blobs/OfNZQmfiRHJhzdqR3UPF/image.png" alt=""><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://content.gitbook.com/content/evqs7Ne3nMyXQFkBSQWR/blobs/A8BprCNcXHuJ10GXIDwo/image.png" alt=""><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://content.gitbook.com/content/evqs7Ne3nMyXQFkBSQWR/blobs/I3SnmadlO5PkgN336Bf5/image.png" alt=""><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://content.gitbook.com/content/evqs7Ne3nMyXQFkBSQWR/blobs/KDtZZDPbhpKG3IRUCe2v/image.png" alt=""><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://content.gitbook.com/content/evqs7Ne3nMyXQFkBSQWR/blobs/8j2q4G9dlDcDQ03GzO6I/image.png" alt=""><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://content.gitbook.com/content/evqs7Ne3nMyXQFkBSQWR/blobs/M0gHbF0dVhRHkwrXXPzY/image.png" alt=""><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://content.gitbook.com/content/evqs7Ne3nMyXQFkBSQWR/blobs/t3wudAMlDIdbxLoa36Xf/image.png" alt=""><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://content.gitbook.com/content/evqs7Ne3nMyXQFkBSQWR/blobs/h37J3u6u33sJKdQwuBw7/image.png" alt=""><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://content.gitbook.com/content/evqs7Ne3nMyXQFkBSQWR/blobs/McIttI323jOwE7mtzPiz/image.png" alt=""><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://content.gitbook.com/content/evqs7Ne3nMyXQFkBSQWR/blobs/O4CromiPkwNgBWUQ2dQ0/image.png" alt=""><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://content.gitbook.com/content/evqs7Ne3nMyXQFkBSQWR/blobs/HPfLazU6zKmGBm4fCrVx/image.png" alt=""><figcaption></figcaption></figure></div>

<div align="left"><figure><img src="https://content.gitbook.com/content/evqs7Ne3nMyXQFkBSQWR/blobs/7ySFmXRclezg9qvcGQIH/image.png" alt=""><figcaption></figcaption></figure></div>

* **특권**
  * `CREATE TYPE` 시스템 특권이 있으면 자신의 스키마에 사용자 정의 타입을 생성할 수 있습니다.
  * `CREATE ANY TYPE` 시스템 특권이 있으면 다른 사용자의 스키마에 사용자 정의 타입을 생성할 수 있습니다.
  * `ALTER ANY TYPE` 시스템 특권이 있으면 다른 사용자의 스키마에 있는 사용자 정의 타입을 변경할 수 있습니다.
* **구성요소**

– create\_type

<table><thead><tr><th width="238.88897705078125">구성요소</th><th>설명</th></tr></thead><tbody><tr><td>OR REPLACE</td><td><ul><li>이미 존재하는 사용자 정의 타입을 다시 정의할 때 사용</li><li>해당 타입을 재컴파일</li><li>타입을 제거 후 다시 생성하는 방식과 달리, 기존 특권이 유지됨</li></ul></td></tr><tr><td>schema</td><td><ul><li>사용자 정의 타입이 속한 스키마 이름</li><li>생략하면 현재 사용자의 스키마로 인식</li></ul></td></tr><tr><td>type_name</td><td>생성할 사용자 정의 타입 이름</td></tr><tr><td>oid_clause</td><td>현재 버전에서는 의미 없음</td></tr><tr><td>IS</td><td><ul><li><code>IS</code> 또는 <code>AS</code> 중 하나를 선택해 사용</li><li>두 키워드의 의미 차이는 없음</li></ul></td></tr><tr><td>AS</td><td><code>IS</code>와 동일</td></tr><tr><td>VARYING ARRAY</td><td><ul><li>생성할 사용자 정의 타입이 배열임을 지정</li><li><code>VARRAY</code>와 동일</li></ul></td></tr><tr><td>VARRAY</td><td><ul><li>생성할 사용자 정의 타입이 배열임을 지정</li><li><code>VARYING ARRAY</code>와 동일</li></ul></td></tr><tr><td>unsigned_integer</td><td>배열의 최대 길이를 지정하는 양수</td></tr><tr><td>TABLE</td><td>생성할 사용자 정의 타입이 네스티드 테이블임을 지정</td></tr><tr><td>element_datatype</td><td><ul><li>구성 요소의 데이터 타입</li><li>tbPSM에서 지원하는 모든 데이터 타입과 사용자 정의 데이터 타입 사용 가능</li><li>문자열 길이, 숫자 정밀도, 스케일 지정 가능</li></ul></td></tr><tr><td>OBJECT</td><td>생성할 사용자 정의 타입이 오브젝트 타입임을 지정</td></tr><tr><td>attribute_name</td><td>Attribute 이름</td></tr><tr><td>attribute_datatype</td><td><ul><li>Attribute의 데이터 타입</li><li>tbPSM에서 지원하는 모든 데이터 타입과 사용자 정의 데이터 타입 사용 가능</li><li>문자열 길이, 숫자 정밀도, 스케일 지정 가능</li></ul></td></tr><tr><td>constructor_declaration</td><td><ul><li>생성자 선언부</li><li>리턴 타입은 생성 타입과 동일하며 <code>SELF AS RESULT</code>로 표현</li></ul></td></tr><tr><td>map_method_declaration</td><td><ul><li>맵 메소드 선언부</li><li>리턴 타입은 항상 스칼라 타입</li><li>파라미터는 없거나 <code>SELF</code>만 가짐</li></ul></td></tr><tr><td>order_method_declaration</td><td><ul><li>오더 메소드 선언부</li><li>리턴 타입은 항상 숫자 타입</li><li><code>SELF</code>를 제외하면 같은 타입의 파라미터 하나만 가질 수 있음</li></ul></td></tr><tr><td>normal_method_declaration</td><td><ul><li>일반 메소드 선언부</li><li>함수 또는 프러시저 선언 가능</li><li>선택적으로 <code>SELF</code>를 가질 수 있음</li></ul></td></tr><tr><td>FINAL</td><td><ul><li>하위 타입 생성 가능 여부를 지정</li><li>기본값은 <code>FINAL</code></li><li><code>FINAL</code>은 하위 타입 생성 불가, <code>NOT FINAL</code>은 생성 가능</li></ul></td></tr><tr><td>INSTANTIABLE</td><td><ul><li>인스턴스 생성 가능 여부를 지정</li><li>기본값은 <code>INSTANTIABLE</code></li><li><code>NOT INSTANTIABLE</code>는 기본 생성자 또는 사용자 정의 생성자 생성 불가</li></ul></td></tr></tbody></table>

* **예제**

다음은 **CREATE TYPE** 문을 사용해 사용자 타입을 생성하는 예입니다.

```sql
-- VARYING ARRAY TYPE
CREATE OR REPLACE TYPE sample_array_type AS VARRAY(10) OF NUMBER(8, 2);
/

-- TABLE TYPE
CREATE OR REPLACE TYPE sample_nested_table_type AS TABLE OF VARCHAR(1024);
/

-- VARYING ARRAY OF VARYING ARRAY TYPE
CREATE OR REPLACE TYPE array_of_array AS VARRAY(10) OF sample_array_type;
/

-- TABLE OF TABLE TYPE
CREATE OR REPLACE TYPE table_of_table AS TABLE OF sample_nested_table_type;
/

-- VARYING ARRAY OF TABLE TYPE
CREATE OR REPLACE TYPE array_of_table AS VARRAY(10) OF sample_nested_table_type;
/

-- TABLE OF VARYING ARRAY
CREATE OR REPLACE TYPE table_of_array AS TABLE OF sample_array_type;
/

-- OBJECT TYPE
CREATE OR REPLACE TYPE person AS OBJECT (name VARCHAR2(1024),
                                         age NUMBER,
                                         gender VARCHAR(6));
/
-- OBJECT OF OBJECT TYPE
CREATE OR REPLACE TYPE employee AS OBJECT(pinfo person, department VARCHAR(64));
/

-- COLLECTION OF OBJECT
CREATE OR REPLACE TYPE employees AS VARRAY(100) OF employee;
/

CREATE OR REPLACE TYPE employee_table AS TABLE OF employee;
/
-- COLLECTION ATTRIBUTES

CREATE OR REPLACE TYPE scores AS TABLE OF NUMBER;
/

CREATE OR REPLACE TYPE students AS TABLE OF person;
/

CREATE OR REPLACE TYPE class AS OBJECT (code CHAR(10), name VARCHAR(100),
                                       professor person, std students, mterm_exam scores, final_exam scores);
/

-- OBJECT METHODS

CREATE TYPE constructor_example AS OBJECT (
    attr1 NUMBER,
    attr2 NUMBER,
    CONSTRUCTOR FUNCTION constructor_example(p1 NUMBER) RETURN SELF AS RESULT
);
/

CREATE TYPE order_method_example AS OBJECT (
    attr1 NUMBER,
    attr2 NUMBER,
    ORDER MEMBER FUNCTION order_method_example(v order_method_example)
        RETURN NUMBER
);
/

CREATE TYPE normal_method_example AS OBJECT (
    attr1 NUMBER,
    attr2 NUMBER,
    MEMBER FUNCTION normal_function_example(value NUMBER) RETURN NUMBER,
    MEMBER PROCEDURE normal_procedure_example(SELF IN normal_method_example)
);
/
  

-- FINAL & INSTANTIABLE
CREATE TYPE final_example AS OBJECT (
    attr1 NUMBER,
    attr2 NUMBER
)
NOT FINAL;
/ 

CREATE TYPE final_sub_example UNDER final_example (
    attr3 NUMBER
);
/ 

CREATE TYPE instantiable_example AS OBJECT (
    attr1 NUMBER,
    attr2 NUMBER
)
INSTANTIABLE;
/
```


---

# 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/sql-reference-guide/data-definition-language/create-type.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.
