식별자

식별자 작성 원칙

테이블 이름, 인덱스 이름, 뷰 이름, 칼럼 이름, 사용자 이름 등이 식별자에 해당한다. 식별자는 다음의 원칙에 따라 작성해야 한다.

  • 반드시 문자로 시작되어야 한다. 즉, 숫자나 기호로 시작할 수 없다.

  • 대소문자를 구별하지 않는다.

  • 예약어는 허용되지 않는다.

identifier        ::=  identifier_letter [ { other_identifier }; ]
identifier_letter ::=  upper_case_letter | lower_case_letter
other_identifier  ::=  identifier_letter | digit | _ | #
digit             ::=  0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
upper_case_letter ::=  A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P| Q | R | S | T | U | V | W | X | Y | Z
lower_case_letter ::=  a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | p| q | r | s | t | u | v | w | x | y | z

허용되는 식별자

문자로 시작되는 식별자

식별자의 첫 글자에는 반드시 문자를 사용해야 하며, 연산자로 사용되는 특수 문자를 제외한 나머지 특수 문자를 포함할 수 있다. 다음은 허용되는 식별자의 예제이다.

a
a_b
ssn#
this_is_an_example_#

큰따옴표, 대괄호, 백틱 부호로 둘러싸인 식별자

허용되지 않는 식별자 또는 예약어에 해당하더라도, 큰따옴표(” “)나 대괄호([ ]) 또는 백틱 부호(` `)로 식별자를 둘러싸면 예외적으로 허용된다. 큰따옴표는 질의 관련 파라미터인 ansi_quotes가 yes일 때에만 식별자를 감싸는 부호로 사용할 수 있고, 이 값이 no이면 문자열을 감싸는 부호로 사용한다. ansi_quotes의 기본값은 yes이다. 다음은 허용되는 식별자의 예제이다.

"select"
"@lowcost"
"low cost"
"abc""def"
[position]

Note

10.0 버전부터는 예약어로 된 칼럼 이름이 “테이블 이름 (또는 별칭).”과 같이 사용되는 경우, 칼럼 이름을 겹따옴표로 감싸지 않아도 된다.

CREATE TABLE tbl ("int" int, "double" double);

SELECT t.int FROM tbl t;

위의 SELECT 질의문에서 “int”가 “t.”과 함께 쓰인 칼럼 이름이다.

허용되지 않는 식별자

특수 문자나 숫자로 시작되는 식별자

다음과 같이 언더바(_), #을 제외한 특수 문자, 숫자로 시작되는 식별자는 허용되지 않는다.

_a
#ack
%nums
2fer
88abs

공백을 포함하는 식별자

다음과 같이 중간에 공백을 포함하는 식별자는 허용되지 않는다.

col1 t1

연산자로 사용하는 특수 문자를 포함하는 식별자

다음과 같이 연산자로 사용되는 특수 문자(+, -, *, /, %, ||, !, <, >, =, |, ^, &, ~)를 포함하는 식별자는 허용되지 않는다.

col+
col~
col&&

식별자 이름의 최대 길이

다음은 각 식별자 이름으로 허용되는 최대 바이트 길이를 정리한 표이다. 단위는 바이트 길이이며, 사용하는 문자셋에 따라 문자 수와 바이트 길이는 다를 수 있음에 주의한다. (예를 들어, UTF-8 문자셋에서 한글 한 글자는 3바이트의 바이트 길이이다.)

식별자

최대 바이트 길이

Database

17

Table

254

Column

254

Index

254

Constraint

254

Java Stored Procedure

254

Trigger

254

View

254

Serial

254

Note

기본 키(pk_<table_name>_<column_name>), 외래 키(fk_<table_name>_<column_name>)의 이름 등 자동으로 생성되는 제약조건(constraint) 이름도 식별자의 최대 길이인 254바이트를 넘을 수 없다.