DBMS_CLOUD Avro, ORC 및 Parquet 지원
DBMS_CLOUD Avro, ORC, Parquet에 대한 패키지 형식 옵션
DBMS_CLOUD
의 format 인수는 소스 파일의 형식을 지정합니다.
format 인수를 지정하는 두 가지 방법은 다음과 같습니다.
format => '{"format_option" : “format_value” }'
및:
format => json_object('format_option' value 'format_value'))
예를 들면 다음과 같습니다.
format => json_object('type' VALUE 'CSV')
여러 형식 옵션을 지정하려면 값을 ",
"로 구분합니다.
예:
format => json_object('ignoremissingcolumns' value 'true', 'removequotes' value 'true', 'dateformat' value 'YYYY-MM-DD-HH24-MI-SS', 'blankasnull' value 'true')
형식 옵션 | 설명 | 구문 |
---|---|---|
|
정규 표현식 패턴은 URI의 파일 이름 또는 하위 폴더 경로에 대해서만 지원되며 패턴 일치는 External Table의 경우 이 옵션은 Object Storage에 있는 파일에 생성된 테이블에서만 지원됩니다. 예:
|
기본값: |
type |
파일 유형을 지정합니다. |
|
|
스키마를 열 이름은 Avro, ORC 또는 Parquet에 있는 열 이름과 일치합니다. 데이터 유형은 Avro, ORC, Parquet 데이터 유형에서 Oracle 데이터 유형으로 변환됩니다. 모든 열이 테이블에 추가됩니다.
기본값: 주: Avro, ORC 또는 Parquet 형식 파일의 경우 |
|
DBMS_CLOUD 패키지 Avro와 Oracle 데이터 유형 매핑
Avro 데이터 유형을 Oracle 데이터 유형에 매핑하는 방법을 설명합니다.
주:
맵, 배열 및 구조와 같은 복잡한 유형은 Oracle Database 19c부터 지원됩니다. Avro 복합 유형 사용에 대한 자세한 내용은 DBMS_CLOUD Package Avro, ORC, and Parquet Complex Types을 참조하십시오.Avro 유형 | Oracle 유형 |
---|---|
INT | NUMBER(10) |
LONG | 숫자(19) |
품질 관리 | 번호(1) |
UTF8 BYTE_ARRAY | RAW(2000) |
FLT | BINARY_FLOAT |
DBL | BINARY_DOUBLE |
DECIMAL(p) | 숫자(p) |
DECIMAL(p,s) | NUMBER(p,s) |
DATE | DATE |
STRING | VARCHAR2 |
TIME_MILLIS | VARCHAR2(20바이트) |
TIME_MICROS | VARCHAR2(20바이트) |
TIMESTAMP_MILLIS | TIMESTAMP(3) |
TIMESTAMP_MICROS | TIMESTAMP(6) |
목록 | VARCHAR2(n) 여기서 "n"은 AVRO ENUM의 가능한 값의 실제 최대 길이입니다. |
DURATION | RAW(2000) |
수정됨 | RAW(2000) |
NULL | VARCHAR2(1) 바이트 |
Avro 복합 유형 사용에 대한 자세한 내용은 DBMS_CLOUD Package Avro, ORC, and Parquet Complex Types을 참조하십시오.
DBMS_CLOUD 패키지 ORC-Oracle 데이터 유형 매핑
ORC 데이터 유형을 Oracle 데이터 유형에 매핑하는 방법을 설명합니다.
ORC 복합 유형 사용에 대한 자세한 내용은 DBMS_CLOUD Package Avro, ORC, and Parquet Complex Types을 참조하십시오.
ORC 유형 | Oracle 유형 | 추가 정보 |
---|---|---|
배열 | VARCHAR2(n) JSON 형식 | DBMS_CLOUD 패키지 Avro, ORC 및 Parquet 복합 유형 |
bigint(64비트) | 숫자(19) | |
바이너리 | BLOB | |
부울(1비트) | 번호(1) | |
char | CHAR(n) | |
날짜 | DATE | |
double | BINARY_DOUBLE | |
float | BINARY_FLOAT | |
int(32비트) | NUMBER(10) | |
list | VARCHAR2(n) JSON 형식 | DBMS_CLOUD 패키지 Avro, ORC 및 Parquet 복합 유형 |
맵 | VARCHAR2(n) JSON 형식 | DBMS_CLOUD 패키지 Avro, ORC 및 Parquet 복합 유형 |
smallint(16비트) | 번호(5) | |
string | VARCHAR2(4000) | |
struct | VARCHAR2(n) JSON 형식 | DBMS_CLOUD 패키지 Avro, ORC 및 Parquet 복합 유형 |
시간기록 | TIMESTAMP | |
tinyint(8비트) | 번호(3) | |
union | VARCHAR2(n) JSON 형식 | DBMS_CLOUD 패키지 Avro, ORC 및 Parquet 복합 유형 |
varchar | VARCHAR2(n) |
DBMS_CLOUD Oracle 데이터 유형 매핑에 대한 패키지 연회
Parquet 데이터 유형을 Oracle 데이터 유형에 매핑하는 방법을 설명합니다.
주:
맵, 배열 및 구조와 같은 복잡한 유형은 Oracle Database 19c부터 지원됩니다. Parquet 복합 유형 사용에 대한 자세한 내용은 DBMS_CLOUD Package Avro, ORC, and Parquet Complex Types을 참조하십시오.연회 유형 | Oracle 유형 |
---|---|
UINT_64 | 숫자(20) |
INT_64 | 숫자(19) |
UINT_32 | NUMBER(10) |
INT_32 | NUMBER(10) |
UINT_16 | 번호(5) |
INT_16 | 번호(5) |
UINT_8 | 번호(3) |
INT_8 | 번호(3) |
품질 관리 | 번호(1) |
UTF8 BYTE_ARRAY | VARCHAR2(4000바이트) |
FLT | BINARY_FLOAT |
DBL | BINARY_DOUBLE |
DECIMAL(p) | 숫자(p) |
DECIMAL(p,s) | NUMBER(p,s) |
DATE | DATE |
STRING | VARCHAR2(4000) |
TIME_MILLIS | VARCHAR2(20바이트) |
TIME_MILLIS_UTC | VARCHAR2(20바이트) |
TIME_MICROS | VARCHAR2(20바이트) |
TIME_MICROS_UTC | VARCHAR2(20바이트) |
TIMESTAMP_MILLIS | TIMESTAMP(3) |
TIMESTAMP_MILLIS_UTC | TIMESTAMP(3) |
TIMESTAMP_MICROS | TIMESTAMP(6) |
TIMESTAMP_MICROS_UTC | TIMESTAMP(6) |
TIMESTAMP_NANOS | TIMESTAMP(9) |
Parquet 복합 유형 사용에 대한 자세한 내용은 DBMS_CLOUD Package Avro, ORC, and Parquet Complex Types을 참조하십시오.
DBMS_CLOUD 패키지 Oracle 데이터 유형-연회 매핑
Oracle 데이터 유형을 Parquet 데이터 유형에 매핑하는 방법을 설명합니다.
Oracle 유형 | 연회 유형 |
---|---|
BINARY_DOUBLE | DBL |
BINARY_FLOAT | FLT |
DATE | DATE |
NUMBER(p,s) | DECIMAL(p,s) |
숫자(p) | DECIMAL(p) |
TIMESTAMP(3) | TIMESTAMP_MILLIS |
TIMESTAMP(3) | TIMESTAMP_MILLIS_UTC |
TIMESTAMP(6) | TIMESTAMP_MICROS |
TIMESTAMP(6) | TIMESTAMP_MICROS_UTC |
TIMESTAMP(9) | TIMESTAMP_NANOS |
VARCHAR2(4000) | STRING |
NLS 세션 매개변수
NLS 세션 매개변수 NLS_DATE_FORMAT
, NLS_TIMESTAMP_FORMAT
, NLS_TIMESTAMP_TZ_FORMAT
및 NLS_NUMERIC_CHARACTERS
는 해당 열 유형이 있는 테이블을 질의할 때 날짜, 시간기록, 시간대 형식의 시간기록, 소수점 표시자가 있는 시간기록의 기수 구분자가 표시되는 방법을 정의합니다.
또한 DBMS_CLOUD.EXPORT_DATA
를 사용하여 데이터를 익스포트하고 Parquet 출력을 지정하면 Autonomous Database는 NLS_SESSION_PARAMETERS
테이블에서 해당 매개변수의 값을 읽습니다. Autonomous Database는 이러한 값을 사용하여 Oracle 데이터 유형 DATE
또는 TIMESTAMP
을 Parquet 유형으로 변환합니다.
NLS_SESSION_PARAMETERS
매개변수는 RR
형식 마스크(2자 연도 지정)를 지원합니다.
해당 연도에 대한 RR
형식 마스크는 DBMS_CLOUD.EXPORT_DATA
를 사용하여 Parquet로 데이터를 익스포트할 때 해당 매개변수에 대해 지원되지 않습니다. parquet로 엑스포트하려고 시도하고 NLS_SESSION_PARAMETERS
가 RR
형식 마스크를 사용하도록 설정된 경우 응용 프로그램 오류가 발생합니다. RR
형식의 기본값은 NLS_TERRITORY
매개변수의 값에 따라 다릅니다.
NLS_DATE_FORMAT
, NLS_TIMESTAMP_FORMAT
또는 NLS_TIMESTAMP_TZ_FORMAT
매개변수 중 하나가 RR
형식 마스크를 사용하는 경우 DBMS_CLOUD.EXPORT_DATA
를 사용하여 Parquet에 데이터를 익스포트하려면 형식 값을 지원되는 값으로 변경해야 합니다. 예:
ALTER SESSION SET NLS_DATE_FORMAT = "MM/DD/YYYY";
ALTER SESSION SET NLS_TIMESTAMP_FORMAT = 'YYYY-MM-DD HH:MI:SS.FF';
ALTER SESSION SET NLS_TIMESTAMP_TZ_FORMAT='YYYY-MM-DD HH:MI:SS.FF TZH:TZM';
NLS_SESSION_PARAMETERS
뷰를 질의하여 변경사항을 확인할 수 있습니다.SELECT value FROM NLS_SESSION_PARAMETERS
WHERE parameter IN ('NLS_DATE_FORMAT','NLS_TIMESTAMP_FORMAT','NLS_TIMESTAMP_TZ_FORMAT');
NLS_DATE_FORMAT
가 설정된 경우 DATE
데이터 유형의 열에 적용됩니다. NLS_TIMESTAMP_FORMAT
가 설정된 경우 TIMESTAMP
데이터 유형의 열에 적용됩니다. NLS_TIMESTAMP_TZ_FORMAT
가 설정된 경우 TIMESTAMP WITH TIME ZONE
데이터 유형의 열에 적용됩니다.
See Date and Time Parameters in Oracle Database 19c Database Globalization Support Guide or Oracle Database 23ai Database Globalization Support Guide and NLS Data Dictionary Views in Oracle Database 19c Database Globalization Support Guide or Oracle Database 23ai Database Globalization Support Guide for more information.
DBMS_CLOUD 패키지 Avro, ORC, and Parquet 복합 유형
Avro, ORC, Parquet 복합 데이터 유형을 Oracle 데이터 유형에 매핑하는 방법에 대해 설명합니다.
Autonomous Database는 다음과 같은 복잡한 유형을 포함하여 복잡한 데이터 유형을 지원합니다.
-
struct
-
list
-
맵
-
union
-
배열
소스 파일 유형을 Avro, ORC, Parquet로 지정하고 소스 파일에 복합 열이 포함된 경우 Autonomous Database 쿼리는 복합 열에 대해 JSON을 반환합니다. 이를 통해 쿼리 결과의 처리가 간소화되고, 파일 유형 및 데이터 유형 전반에서 Oracle의 강력한 JSON 구문 분석 기능을 일관되게 사용할 수 있습니다. 다음 표에서는 Autonomous Database의 복합 유형에 대한 형식을 보여줍니다.
주:
복합 필드는VARCHAR2
열에 매핑되고 VARCHAR2
크기 제한이 적용됩니다.
유형 | Parquet | ORC | Avro | Oracle |
---|---|---|---|---|
List: 값 시퀀스 | 나열 | 나열 | Array | VARCHAR2 (JSON 형식)
|
맵: 단일 키가 있는 객체 목록 | 맵 | 맵 | 맵 | VARCHAR2 (JSON 형식)
|
조합: 다른 유형의 값 | 사용할 수 없음 | 결합 | 결합 | VARCHAR2 (JSON 형식)
|
객체: 0개 이상의 키-값 쌍 | 구조 | 구조 | 레코드 | VARCHAR2 (JSON 형식)
|
ORC, Parquet 또는 Avro 소스 파일에 복합 유형이 포함되어 있는 경우 이러한 공통 복합 유형에 대해 JSON 출력을 쿼리할 수 있습니다. 예를 들어, 다음은 복잡한 유형의 ORC 파일 movie-info.orc
를 보여 줍니다. Parquet 및 Avro 소스 파일에 대해서도 동일한 복합 유형 처리가 적용됩니다.
다음 스키마가 포함된 movie-info.orc
파일을 고려해 보십시오.
id int
original_title string
overview string
poster_path string
release_date string
vote_count int
runtime int
popularity double
genres array<struct<id:int,name:string>
각 동영상은 genres
배열을 사용하여 여러 genres
로 분류됩니다. genres
배열은 structs
의 array
이고 각 항목은 id
(int
) 및 name
(string
)를 가집니다. genres
배열은 복합 유형으로 간주됩니다. 다음과 같이 DBMS_CLOUD.CREATE_EXTERNAL_TABLE
를 사용하여 이 ORC 파일에 대해 테이블을 만들 수 있습니다.
BEGIN
DBMS_CLOUD.CREATE_EXTERNAL_TABLE
(
table_name =>'movie_info',
credential_name =>'OBJ_STORE_CRED',
file_uri_list =>'https://objectstorage.us-phoenix-1.oraclecloud.com/n/mytenancy/b/movies/o/movie-info.orc',
format => '{"type":"orc", "schema": "first"}');
END;
/
External Table을 생성하면 데이터베이스가 ORC 파일의 스키마를 기반으로 열을 자동으로 생성합니다(Avro 또는 Parquet를 사용하는 경우도 동일하게 적용됨). 이 예에서는 DBMS_CLOUD.CREATE_EXTERNAL_TABLE
가 다음과 같이 데이터베이스에 테이블을 만듭니다.
CREATE TABLE "ADMIN"."MOVIE_INFO"
( "ID"
NUMBER(10,0),
"ORIGINAL_TITLE" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP",
"OVERVIEW" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP",
"POSTER_PATH" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP",
"RELEASE_DATE" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP",
"VOTE_COUNT" NUMBER(10,0),
"RUNTIME" NUMBER(10,0),
"POPULARITY" BINARY_DOUBLE,
"GENRES" VARCHAR2(4000 BYTE) COLLATE "USING_NLS_COMP"
) DEFAULT COLLATION "USING_NLS_COMP"
ORGANIZATION EXTERNAL
( TYPE ORACLE_BIGDATA
DEFAULT DIRECTORY "DATA_PUMP_DIR"
ACCESS PARAMETERS
( com.oracle.bigdata.credential.name=OBJ_STORE_CRED
com.oracle.bigdata.fileformat=ORC
)
LOCATION
(
'https://objectstorage.us-phoenix-1.oraclecloud.com/n/mytenancy/b/movies/o/movie-info.orc'
)
)
REJECT LIMIT UNLIMITED
PARALLEL;
)
이제 동영상 데이터를 쿼리할 수 있습니다.
SELECT original_title, release_date, genres
FROM movie_info
WHERE release_date > '2000'
ORDER BY original_title;
그러면 다음 출력이 생성됩니다.
original_title release_date genres
(500) Days of Summer 2009 [{"id":3,"name":"Drama"},{"id":6,"name":"Comedy"},{"id":17,"name":"Horror"},{"id":19,"name":"Western"},{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
10,000 BC 2008 [{"id":6,"name":"Comedy"}]
11:14 2003 [{"id":9,"name":"Thriller"},{"id":14,"name":"Family"}]
127 Hours 2010 [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"}]
13 Going on 30 2004 [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"},{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
1408 2007 [{"id":45,"name":"Sci-Fi"},{"id":6,"name":"Comedy"},{"id":17,"name":"Horror"},{"id":6,"name":"Comedy"},{"id":18,"name":"War"}]
복합 유형 genres
가 JSON 배열로 반환됩니다.
JSON 데이터의 유용성을 높이기 위해 Oracle의 JSON 함수를 사용하여 열을 변환할 수 있습니다. 예를 들어, JSON "." 표기법과 JSON_TABLE
와 같은 보다 강력한 변환 함수를 사용할 수 있습니다.
"." 표기법에 대한 자세한 내용은 Oracle Database 19c JSON Developer's Guide의 Simple Dot-Notation Access to JSON Data 또는 Oracle Database 23ai JSON Developer's Guide를 참조하십시오.
JSON_TABLE
에 대한 자세한 내용은 Oracle Database 19c JSON Developer's Guide의 SQL/JSON Function JSON_TABLE 또는 Oracle Database 23ai JSON Developer's Guide를 참조하십시오.
SELECT original_title, release_date, m.genre_name, genres
FROM movie_info mi,
JSON_TABLE(mi.genres, '$.name[*]'
COLUMNS (genre_name VARCHAR2(25) PATH
'$')
) AS m
WHERE rownum < 10;
JSON_TABLE
는 배열의 각 값에 대한 행을 생성하고, 포괄 조인을 생각하며, 구조체를 구문 분석하여 장르의 이름을 추출합니다. 그러면 다음 출력이 생성됩니다.
original_title release_date genre_name genres
(500) Days of Summer 2009 Drama [{"id":3,"name":"Drama"},{"id":6,"name":"Comedy"},
{"id":17,"name":"Horror"},{"id":19,"name":"Western"},
{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
(500) Days of Summer 2009 Comedy [{"id":3,"name":"Drama"},{"id":6,"name":"Comedy"},
{"id":17,"name":"Horror"},{"id":19,"name":"Western"},
{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
(500) Days of Summer 2009 Horror [{"id":3,"name":"Drama"},{"id":6,"name":"Comedy"},
{"id":17,"name":"Horror"},{"id":19,"name":"Western"},
{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
(500) Days of Summer 2009 Western [{"id":3,"name":"Drama"},{"id":6,"name":"Comedy"},
{"id":17,"name":"Horror"},{"id":19,"name":"Western"},
{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
(500) Days of Summer 2009 War [{"id":3,"name":"Drama"},{"id":6,"name":"Comedy"},
{"id":17,"name":"Horror"},{"id":19,"name":"Western"},
{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
(500) Days of Summer 2009 Romance [{"id":3,"name":"Drama"},{"id":6,"name":"Comedy"},
{"id":17,"name":"Horror"},{"id":19,"name":"Western"},
{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
10,000 BC 2008 Comedy [{"id":6,"name":"Comedy"}]
11:14 2003 Family [{"id":9,"name":"Thriller"},{"id":14,"name":"Family"}]
11:14 2003 Thriller [{"id":9,"name":"Thriller"},{"id":14,"name":"Family"}]
127 Hours 2010 Comedy [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"}]
127 Hours 2010 Drama [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"}]
13 Going on 30 2004 Romance [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"},
{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
13 Going on 30 2004 Comedy [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"},
{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
13 Going on 30 2004 War [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"},
{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
13 Going on 30 2004 Drama [{"id":6,"name":"Comedy"},{"id":3,"name":"Drama"},
{"id":18,"name":"War"},{"id":15,"name":"Romance"}]
DBMS_CLOUD 패키지 Avro, ORC, and Parquet - Oracle 열 이름 매핑
Avro, ORC, Parquet 열 이름이 Oracle 열 이름으로 변환되는 방법에 대한 규칙을 설명합니다.
다음은 Avro, ORC, Parquet 열 이름에 대해 지원되지만 External Table의 Oracle SQL 참조에 대해 큰 따옴표를 사용해야 할 수 있습니다. 따라서 사용하기 쉽고 열 이름을 참조할 때 큰 따옴표를 사용하지 않으려면 가능한 경우 Avro, ORC, and Parquet 열 이름에 다음을 사용하지 마십시오.
-
포함된 공백
-
선행 숫자
-
선행 밑줄
-
Oracle SQL 예약어
다음 표에서는 다양한 유형의 Avro, ORC, Parquet 열 이름 및 External Table의 Oracle 열 이름에 열 이름을 사용하는 규칙을 보여 줍니다.
Avro, ORC, or Parquet 이름 | CREATE TABLE 이름 | Oracle 카탈로그 | 적합한 SQL | 참고 |
---|---|---|---|---|
부품, 부품 또는 부품 | 부품, 부품, 부품 | 부분 |
|
Oracle은 따옴표로 묶이지 않은 열 이름을 암시적으로 대문자 |
주문 번호 | "주문 번호" | 주문 번호 | select "Ord No" |
공백이 포함된 경우 큰 따옴표가 필요하며, 문자 대소문자도 유지됩니다. |
__index_key__ | "__index_key__" | __index_key__ | select "__index_key__" |
문자 대소문자를 보존하는 선행 밑줄이 있는 경우 큰 따옴표가 필요합니다. |
6Way | "6Way" | 6Way | select "6Way" |
문자 대소문자를 보존하는 선행 숫자 자릿수가 있는 경우 큰 따옴표가 필요합니다. |
생성, 생성 또는 CREATE 등(대소문자 구분 없이) PARTITION, PARTITION, PARTITION 등(Oracle Reserved 단어의 경우) | "분할 영역 생성" | 분할 영역 생성 |
|
Oracle SQL 예약어는 큰 따옴표로 묶어야 합니다. 대문자로 강제 적용되지만 SQL의 어디에나 사용할 때는 항상 큰 따옴표를 사용해야 합니다. |
ROWID, ROWID, ROWid 등(ROWID의 경우 주 참조) | rowid |
|
ROWID의 경우 ROWID의 혼합 또는 소문자 변형은 대소문자를 보존하며 항상 이중 따옴표로 묶고 원래의 대소문자 변형을 사용해야 합니다. 테이블의 Oracle ROWID와 고유의 충돌로 인해 대문자 ROWID를 지정하면 행이 자동으로 소문자 "ROWID"로 저장되며 참조할 때는 항상 큰 따옴표로 묶어야 합니다. |
참고:
-
일반적으로 External Table의 열 이름은 큰따옴표 없이 참조될 수 있습니다.
-
포함된 공백이 없으면 열 이름에 선행 밑줄("_") 또는 선행 숫자 숫자("0" ~ "9")가 없으면 열 이름의 원래 대소문자가 보존되며, 항상 큰 따옴표로 참조되고 Avro, ORC 또는 Parquet 열 이름의 원래 대소문자(위쪽, 아래쪽 또는 혼합 대소문자)를 사용해야 합니다.
-
DBMS_CLOUD.CREATE_EXTERNAL_TABLE
를 사용하여avro
,orc
또는parquet
로 지정된 형식으로 외부 테이블을 생성한 후 SQL*Plus에서DESCRIBE
명령을 사용하여 테이블의 열 이름을 확인합니다. -
Oracle SQL 예약어가 Avro, ORC 또는 Parquet 열 이름에 사용되는 경우 SQL의 어느 곳에서나 참조될 때는 항상 큰 따옴표를 사용해야 합니다. 자세한 내용은 Oracle SQL Reserved Words in Oracle Database 23ai SQL Language Reference 또는 Oracle Database 23ai SQL Language Reference를 참조하십시오.