Oracle® Database

SQL言語リファレンス

12cリリース1 (12.1)

B71278-13(原本部品番号:E41329-25)

2017年7月

Oracle Database SQL言語リファレンス, 12cリリース1 (12.1)

B71278-13

Copyright © 1996, 2017, Oracle and/or its affiliates. All rights reserved.

原本著者: Mary Beth Roeser

原本協力者:  Oracle Database 12cのドキュメントを、本リリースに携わった全員にとって創造の源となったMark Townsendに捧げます。

原本協力者: David Alpern、Angela Amor、Geeta Arora、Vikas Arora、Lance Ashdown、Hermann Baer、Prasad Bagal、Nigel Bayliss、Eric Belden、Allen Brumm、Donna Carver、Timothy Chien、Alan Choi、Eugene Chong、George Eadon、Amit Ganesh、Barb Glover、Naveen Gopal、Mike Hallas、Beda Hammerschmidt、Min-Hank Ho、Patricia Huey、Chandrasekharan Iyer、Peter Knaggs、Srinath Krishnaswamy、Andre Kruglikov、Tom Kyte、Jonghyun Lee、Huagang Li、Yunrui Li、Bryn Llewellyn、Rich Long、Scott Lynn、Vineet Marwah、David McDermid、Robert McGuirk、Jan Michels、Rahil Mir、Gopal Mulagund、Sujatha Muthulingam、Paul Needham、Padmaja Potineni、Hanlin Qian、Ananth Raghavan、Vivek Raja、Ashish Ray、Jia Shi、Wayne Smith、Sachin Sonawane、Jim Stenoish、Sankar Subramanian、Seema Sundara、Kathy Taylor、Randy Urbano、William Waddington、Peter Wahl、Charles Wetherell、Andy Witkowski、Sergiusz Wolicki、Tsae-feng Yu、Mohamed Zait、Fred Zemke、Wei Zhang、Weiran Zhang

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs.No other rights are granted to the U.S. Government.

このソフトウェアまたはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアまたはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用する際、このソフトウェアまたはハードウェアを安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracleおよびその関連企業の登録商標です。その他の名称は、他社の商標の可能性があります。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXはThe Open Groupの登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

目次

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

Oracle Database SQL言語リファレンスのこのリリースでの変更点

- Oracle Database 12cリリース1 (12.1.0.2)での変更点

- Oracle Database 12cリリース1 (12.1.0.1)での変更点

1 Oracle SQLの概要

- SQLの歴史

- SQL規格

- SQLの特長

- すべてのリレーショナル・データベースに共通の言語

- Enterprise Managerの使用方法

- 字句規則

- ツール製品のサポート

2 Oracle SQLの基本要素

- データ型

- Oracleの組込みデータ型

- CHARデータ型

- NCHARデータ型

- VARCHAR2データ型

- VARCHARデータ型

- NVARCHAR2データ型

- NUMBERデータ型

- FLOATデータ型

- 浮動小数点数

- 数値の優先順位

- DATEデータ型

- TIMESTAMPデータ型

- TIMESTAMP WITH TIME ZONEデータ型

- TIMESTAMP WITH LOCAL TIME ZONEデータ型

- INTERVAL YEAR TO MONTHデータ型

- INTERVAL DAY TO SECONDデータ型

- 日時および期間の演算

- 夏時間のサポート

- 日時および期間の例

- RAWデータ型とLONG RAWデータ型

- BFILEデータ型

- BLOBデータ型

- CLOBデータ型

- NCLOBデータ型

- 拡張データ型

- ROWIDデータ型

- ROWIDデータ型

- UROWIDデータ型

- ANSI、DB2、SQL/DSのデータ型

- ユーザー定義型

- オブジェクト型

- REFデータ型

- VARRAY

- ネストした表

- Oracleが提供する型

- 任意型

- ANYTYPE

- ANYDATA

- ANYDATASET

- XML型

- XMLType

- URIデータ型

- URIFactoryパッケージ

- Spatial型

- SDO_GEOMETRY

- SDO_TOPO_GEOMETRY

- SDO_GEORASTER

- メディア型

- データ型の比較規則

- 数値

- 日付値

- 文字値

- オブジェクト値

- VARRAYとネストした表

- データ型の優先順位

- データ変換

- 暗黙的なデータ変換と明示的なデータ変換

- 暗黙的なデータ変換

- 暗黙的なデータ変換の例

- 明示的なデータ変換

- データ変換のセキュリティ上の考慮事項

- リテラル

- テキスト・リテラル

- 数値リテラル

- 整数リテラル

- NUMBERおよび浮動小数点リテラル

- 日時リテラル

- 期間リテラル

- INTERVAL YEAR TO MONTH

- INTERVAL DAY TO SECOND

- 書式モデル

- 数値書式モデル

- 数値書式要素

- 日時書式モデル

- 日時書式要素

- 日時書式要素およびグローバリゼーション・サポート

- ISO標準日付書式要素

- RR日時書式要素

- 日時書式要素の接尾辞

- 書式モデルの修飾子

- 書式モデルの例

- 文字列から日付への変換に関する規則

- XML書式モデル

- NULL

- SQLファンクションでのNULL

- 比較条件でのNULL

- 条件でのNULL

- コメント

- SQL文中のコメント

- スキーマ・オブジェクトおよび非スキーマ・オブジェクトに関するコメント

- ヒント

- ヒントのリスト(アルファベット順)

- ALL_ROWSヒント

- APPENDヒント

- APPEND_VALUESヒント

- CACHEヒント

- CHANGE_DUPKEY_ERROR_INDEXヒント

- CLUSTERヒント

- CLUSTERINGヒント

- CURSOR_SHARING_EXACTヒント

- DISABLE_PARALLEL_DMLヒント

- DRIVING_SITEヒント

- DYNAMIC_SAMPLINGヒント

- ENABLE_PARALLEL_DMLヒント

- FACTヒント

- FIRST_ROWSヒント

- FULLヒント

- GATHER_OPTIMIZER_STATISTICSヒント

- HASHヒント

- IGNORE_ROW_ON_DUPKEY_INDEXヒント

- INDEXヒント

- INDEX_ASCヒント

- INDEX_COMBINEヒント

- INDEX_DESCヒント

- INDEX_FFSヒント

- INDEX_JOINヒント

- INDEX_SSヒント

- INDEX_SS_ASCヒント

- INDEX_SS_DESCヒント

- INMEMORYヒント

- INMEMORY_PRUNINGヒント

- LEADINGヒント

- MERGEヒント

- MODEL_MIN_ANALYSISヒント

- MONITORヒント

- NATIVE_FULL_OUTER_JOINヒント

- NOAPPENDヒント

- NOCACHEヒント

- NO_CLUSTERINGヒント

- NO_EXPANDヒント

- NO_FACTヒント

- NO_GATHER_OPTIMIZER_STATISTICSヒント

- NO_INDEXヒント

- NO_INDEX_FFSヒント

- NO_INDEX_SSヒント

- NO_INMEMORYヒント

- NO_INMEMORY_PRUNINGヒント

- NO_MERGEヒント

- NO_MONITORヒント

- NO_NATIVE_FULL_OUTER_JOINヒント

- NO_PARALLELヒント

- NOPARALLELヒント

- NO_PARALLEL_INDEXヒント

- NOPARALLEL_INDEXヒント

- NO_PQ_CONCURRENT_UNIONヒント

- NO_PQ_SKEWヒント

- NO_PUSH_PREDヒント

- NO_PUSH_SUBQヒント

- NO_PX_JOIN_FILTERヒント

- NO_QUERY_TRANSFORMATIONヒント

- NO_RESULT_CACHEヒント

- NO_REWRITEヒント

- NOREWRITEヒント

- NO_STAR_TRANSFORMATIONヒント

- NO_STATEMENT_QUEUINGヒント

- NO_UNNESTヒント

- NO_USE_CUBEヒント

- NO_USE_HASHヒント

- NO_USE_MERGEヒント

- NO_USE_NLヒント

- NO_XML_QUERY_REWRITEヒント

- NO_XMLINDEX_REWRITEヒント

- NO_ZONEMAPヒント

- OPT_PARAMヒント

- ORDEREDヒント

- PARALLELヒント

- PARALLEL_INDEXヒント

- PQ_CONCURRENT_UNIONヒント

- PQ_DISTRIBUTEヒント

- PQ_FILTERヒント

- PQ_SKEWヒント

- PUSH_PREDヒント

- PUSH_SUBQヒント

- PX_JOIN_FILTERヒント

- QB_NAMEヒント

- RESULT_CACHEヒント

- RETRY_ON_ROW_CHANGEヒント

- REWRITEヒント

- STAR_TRANSFORMATIONヒント

- STATEMENT_QUEUINGヒント

- UNNESTヒント

- USE_CONCATヒント

- USE_CUBEヒント

- USE_HASHヒント

- USE_MERGEヒント

- USE_NLヒント

- USE_NL_WITH_INDEXヒント

- データベース・オブジェクト

- スキーマ・オブジェクト

- 非スキーマ・オブジェクト

- データベース・オブジェクト名および修飾子

- データベース・オブジェクトのネーミング規則

- スキーマ・オブジェクトのネーミング例

- スキーマ・オブジェクトのネーミングのガイドライン

- スキーマ・オブジェクトの構文およびSQL文の構成要素

- Oracle Databaseによるスキーマ・オブジェクト参照の変換方法

- 他のスキーマ内のオブジェクトの参照

- リモート・データベース内のオブジェクトの参照

- データベース・リンクの作成

- データベース・リンクの参照

- パーティション表と索引の参照

- オブジェクト型の属性とメソッドの参照

3 疑似列

- 階層問合せ疑似列

- CONNECT_BY_ISCYCLE疑似列

- CONNECT_BY_ISLEAF疑似列

- LEVEL疑似列

- 順序疑似列

- 順序値の使用場所

- 順序値の使用方法

- バージョン問合せ疑似列

- COLUMN_VALUE疑似列

- OBJECT_ID疑似列

- OBJECT_VALUE疑似列

- ORA_ROWSCN疑似列

- ROWID疑似列

- ROWNUM疑似列

- XMLDATA疑似列

4 演算子

- SQL演算子

- 単項演算子およびバイナリ演算子

- 演算子の優先順位

- 算術演算子

- 連結演算子

- 階層問合せ演算子

- PRIOR

- CONNECT_BY_ROOT

- 集合演算子

- MULTISET演算子

- MULTISET EXCEPT

- MULTISET INTERSECT

- MULTISET UNION

- ユーザー定義演算子

5 式

- SQL式

- 単純式

- 複合式

- CASE式

- 列式

- CURSOR式

- 日時式

- ファンクション式

- 期間式

- JSONオブジェクト・アクセス式

- モデル式

- オブジェクト・アクセス式

- プレースホルダ式

- スカラー副問合せ式

- 型コンストラクタ式

- 式のリスト

6 条件

- SQL条件

- 条件の優先順位

- 比較条件

- 単純比較条件

- グループ比較条件

- 浮動小数点条件

- 論理条件

- モデル条件

- IS ANY条件

- IS PRESENT条件

- 多重集合条件

- IS A SET条件

- IS EMPTY条件

- MEMBER条件

- SUBMULTISET条件

- パターン一致条件

- LIKE条件

- REGEXP_LIKE条件

- NULL条件

- XML条件

- EQUALS_PATH条件

- UNDER_PATH条件

- JSON条件

- IS JSON条件

- JSON_EXISTS条件

- JSON_TEXTCONTAINS条件

- 複合条件

- BETWEEN条件

- EXISTS条件

- IN条件

- IS OF type条件

7 ファンクション

- SQLファンクション

- 単一行ファンクション

- 数値ファンクション

- 文字値を戻す文字ファンクション

- 数値を戻す文字ファンクション

- キャラクタ・セット・ファンクション

- 日時ファンクション

- 一般的な比較ファンクション

- 変換ファンクション

- ラージ・オブジェクト・ファンクション

- 収集ファンクション

- 階層ファンクション

- データ・マイニング・ファンクション

- XMLファンクション

- JSONファンクション

- エンコーディング・ファンクションおよびデコーディング・ファンクション

- NULL関連ファンクション

- 環境ファンクションおよび識別子ファンクション

- 集計ファンクション

- 分析ファンクション

- オブジェクト参照ファンクション

- モデル・ファンクション

- OLAPファンクション

- データ・カートリッジ・ファンクション

- ABS

- ACOS

- ADD_MONTHS

- APPENDCHILDXML

- APPROX_COUNT_DISTINCT

- ASCII

- ASCIISTR

- ASIN

- ATAN

- ATAN2

- AVG

- BFILENAME

- BIN_TO_NUM

- BITAND

- CARDINALITY

- CAST

- CEIL

- CHARTOROWID

- 「CHR」

- CLUSTER_DETAILS

- CLUSTER_DISTANCE

- CLUSTER_ID

- CLUSTER_PROBABILITY

- CLUSTER_SET

- COALESCE

- COLLECT

- 「COMPOSE」

- CON_DBID_TO_ID

- CON_GUID_TO_ID

- CON_NAME_TO_ID

- CON_UID_TO_ID

- CONCAT

- CONVERT

- CORR

- CORR_*

- CORR_S

- CORR_K

- COS

- COSH

- COUNT

- COVAR_POP

- COVAR_SAMP

- CUBE_TABLE

- CUME_DIST

- CURRENT_DATE

- CURRENT_TIMESTAMP

- CV

- DATAOBJ_TO_MAT_PARTITION

- DATAOBJ_TO_PARTITION

- DBTIMEZONE

- DECODE

- 「DECOMPOSE」

- DELETEXML

- 「DENSE_RANK」

- DEPTH

- DEREF

- DUMP

- EMPTY_BLOB、EMPTY_CLOB

- EXISTSNODE

- EXP

- EXTRACT(日時)

- EXTRACT(XML)

- EXTRACTVALUE

- FEATURE_DETAILS

- FEATURE_ID

- FEATURE_SET

- FEATURE_VALUE

- FIRST

- FIRST_VALUE

- FLOOR

- FROM_TZ

- GREATEST

- GROUP_ID

- GROUPING

- GROUPING_ID

- HEXTORAW

- INITCAP

- INSERTCHILDXML

- INSERTCHILDXMLAFTER

- INSERTCHILDXMLBEFORE

- INSERTXMLAFTER

- INSERTXMLBEFORE

- INSTR

- ITERATION_NUMBER

- JSON_QUERY

- JSON_TABLE

- JSON_VALUE

- LAG

- LAST

- LAST_DAY

- LAST_VALUE

- LEAD

- LEAST

- LENGTH

- LISTAGG

- LN

- LNNVL

- 「LOCALTIMESTAMP」

- LOG

- LOWER

- LPAD

- 「LTRIM」

- 「MAKE_REF」

- MAX

- MEDIAN

- MIN

- MOD

- MONTHS_BETWEEN

- NANVL

- NCHR

- NEW_TIME

- NEXT_DAY

- NLS_CHARSET_DECL_LEN

- NLS_CHARSET_ID

- NLS_CHARSET_NAME

- 「NLS_INITCAP」

- NLS_LOWER

- NLS_UPPER

- NLSSORT

- NTH_VALUE

- NTILE

- NULLIF

- NUMTODSINTERVAL

- NUMTOYMINTERVAL

- NVL

- NVL2

- ORA_DST_AFFECTED

- ORA_DST_CONVERT

- ORA_DST_ERROR

- ORA_HASH

- ORA_INVOKING_USER

- ORA_INVOKING_USERID

- PATH

- PERCENT_RANK

- PERCENTILE_CONT

- PERCENTILE_DISC

- POWER

- POWERMULTISET

- POWERMULTISET_BY_CARDINALITY

- PREDICTION

- PREDICTION_BOUNDS

- PREDICTION_COST

- PREDICTION_DETAILS

- PREDICTION_PROBABILITY

- PREDICTION_SET

- PRESENTNNV

- PRESENTV

- PREVIOUS

- RANK

- RATIO_TO_REPORT

- RAWTOHEX

- RAWTONHEX

- REF

- REFTOHEX

- REGEXP_COUNT

- REGEXP_INSTR

- REGEXP_REPLACE

- REGEXP_SUBSTR

- REGR_(線形回帰)ファンクション

- REMAINDER

- 「REPLACE」

- ROUND(日付)

- ROUND(数値)

- ROW_NUMBER

- ROWIDTOCHAR

- ROWIDTONCHAR

- RPAD

- 「RTRIM」

- 「SCN_TO_TIMESTAMP」

- SESSIONTIMEZONE

- SET

- SIGN

- SIN

- SINH

- SOUNDEX

- SQRT

- STANDARD_HASH

- STATS_BINOMIAL_TEST

- STATS_CROSSTAB

- STATS_F_TEST

- STATS_KS_TEST

- STATS_MODE

- STATS_MW_TEST

- STATS_ONE_WAY_ANOVA

- STATS_T_TEST_*

- STATS_T_TEST_ONE

- STATS_T_TEST_PAIRED

- STATS_T_TEST_INDEPおよびSTATS_T_TEST_INDEPU

- STATS_WSR_TEST

- STDDEV

- STDDEV_POP

- STDDEV_SAMP

- SUBSTR

- SUM

- SYS_CONNECT_BY_PATH

- SYS_CONTEXT

- SYS_DBURIGEN

- SYS_EXTRACT_UTC

- SYS_GUID

- SYS_OP_ZONE_ID

- SYS_TYPEID

- SYS_XMLAGG

- 「SYS_XMLGEN」

- SYSDATE

- SYSTIMESTAMP

- TAN

- TANH

- TIMESTAMP_TO_SCN

- TO_BINARY_DOUBLE

- TO_BINARY_FLOAT

- TO_BLOB

- TO_CHAR(文字)

- TO_CHAR(日時)

- TO_CHAR(数値)

- TO_CLOB

- TO_DATE

- TO_DSINTERVAL

- TO_LOB

- TO_MULTI_BYTE

- TO_NCHAR(文字)

- TO_NCHAR(日時)

- TO_NCHAR(数値)

- TO_NCLOB

- TO_NUMBER

- TO_SINGLE_BYTE

- TO_TIMESTAMP

- TO_TIMESTAMP_TZ

- TO_YMINTERVAL

- 「TRANSLATE」

- TRANSLATE ... USING

- TREAT

- TRIM

- TRUNC(日付)

- TRUNC(数値)

- TZ_OFFSET

- UID

- 「UNISTR」

- UPDATEXML

- UPPER

- USER

- USERENV

- VALUE

- VAR_POP

- VAR_SAMP

- VARIANCE

- VSIZE

- WIDTH_BUCKET

- XMLAGG

- XMLCAST

- XMLCDATA

- XMLCOLATTVAL

- XMLCOMMENT

- XMLCONCAT

- XMLDIFF

- XMLELEMENT

- XMLEXISTS

- XMLFOREST

- XMLISVALID

- XMLPARSE

- XMLPATCH

- XMLPI

- XMLQUERY

- XMLROOT

- 「XMLSEQUENCE」

- XMLSERIALIZE

- XMLTABLE

- XMLTRANSFORM

- ROUNDおよびTRUNC日付ファンクション

- ユーザー定義ファンクション

- 前提条件

- 名前の優先順位

8 共通のSQL DDL句

- allocate_extent_clause

- constraint

- deallocate_unused_clause

- file_specification

- logging_clause

- parallel_clause

- physical_attributes_clause

- size_clause

- storage_clause

9 SQL問合せおよび副問合せ

- 問合せおよび副問合せ

- 単純な問合せの作成

- 階層問合せ

- 階層問合せの例

- UNION [ALL]、INTERSECTおよびMINUS演算子

- 問合せ結果のソート

- 結合

- 結合条件

- 等価結合

- 自己結合

- デカルト積

- 内部結合

- 外部結合

- アンチ結合

- セミ結合

- 副問合せの使用方法

- ネストされた副問合せのネスト解除

- DUAL表からの選択

- 分散問合せ

10 SQL文: ADMINISTER KEY MANAGEMENTからALTER JAVA

- 様々な種類のSQL文

- データ定義言語(DDL)文

- データ操作言語(DML)文

- トランザクション制御文

- セッション制御文

- システム制御文

- 埋込みSQL文

- SQL文に関する章の構成

- ADMINISTER KEY MANAGEMENT

- ALTER AUDIT POLICY (統合監査)

- ALTER CLUSTER

- 「ALTER DATABASE」

- ALTER DATABASE LINK

- ALTER DIMENSION

- ALTER DISKGROUP

- ALTER FLASHBACK ARCHIVE

- ALTER FUNCTION

- ALTER INDEX

- ALTER INDEXTYPE

- ALTER JAVA

11 SQL文: ALTER LIBRARYからALTER SYSTEM

- ALTER LIBRARY

- 「ALTER MATERIALIZED VIEW」

- ALTER MATERIALIZED VIEW LOG

- ALTER MATERIALIZED ZONEMAP

- ALTER OPERATOR

- ALTER OUTLINE

- ALTER PACKAGE

- ALTER PLUGGABLE DATABASE

- ALTER PROCEDURE

- ALTER PROFILE

- ALTER RESOURCE COST

- ALTER ROLE

- ALTER ROLLBACK SEGMENT

- ALTER SEQUENCE

- 「ALTER SESSION」

- 初期化パラメータおよびALTER SESSION

- セッション・パラメータおよびALTER SESSION

- ALTER SYNONYM

- ALTER SYSTEM

12 SQL文: ALTER TABLEからALTER TABLESPACE

- ALTER TABLE

- ALTER TABLESPACE

13 SQL文: ALTER TRIGGERからCOMMIT

- ALTER TRIGGER

- ALTER TYPE

- ALTER USER

- ALTER VIEW

- ANALYZE

- 「ASSOCIATE STATISTICS」

- AUDIT (従来型監査)

- AUDIT (統合監査)

- CALL

- COMMENT

- 「COMMIT」

14 SQL文: CREATE AUDIT POLICYからCREATE JAVA

- CREATE AUDIT POLICY (統合監査)

- CREATE CLUSTER

- CREATE CONTEXT

- CREATE CONTROLFILE

- 「CREATE DATABASE」

- CREATE DATABASE LINK

- CREATE DIMENSION

- 「CREATE DIRECTORY」

- CREATE DISKGROUP

- CREATE EDITION

- CREATE FLASHBACK ARCHIVE

- CREATE FUNCTION

- 「CREATE INDEX」

- CREATE INDEXTYPE

- 「CREATE JAVA」

15 SQL文: CREATE LIBRARYからCREATE SPFILE

- CREATE LIBRARY

- CREATE MATERIALIZED VIEW

- CREATE MATERIALIZED VIEW LOG

- CREATE MATERIALIZED ZONEMAP

- 「CREATE OPERATOR」

- CREATE OUTLINE

- CREATE PACKAGE

- CREATE PACKAGE BODY

- CREATE PFILE

- CREATE PLUGGABLE DATABASE

- CREATE PROCEDURE

- CREATE PROFILE

- CREATE RESTORE POINT

- CREATE ROLE

- CREATE ROLLBACK SEGMENT

- CREATE SCHEMA

- CREATE SEQUENCE

- CREATE SPFILE

16 SQL文: CREATE SYNONYMからCREATE TRIGGER

- CREATE SYNONYM

- 「CREATE TABLE」

- 「CREATE TABLESPACE」

- CREATE TRIGGER

17 SQL文: CREATE TYPEからDROP ROLLBACK SEGMENT

- CREATE TYPE

- CREATE TYPE BODY

- CREATE USER

- 「CREATE VIEW」

- DELETE

- DISASSOCIATE STATISTICS

- DROP AUDIT POLICY (統合監査)

- DROP CLUSTER

- DROP CONTEXT

- DROP DATABASE

- DROP DATABASE LINK

- DROP DIMENSION

- DROP DIRECTORY

- DROP DISKGROUP

- DROP EDITION

- DROP FLASHBACK ARCHIVE

- DROP FUNCTION

- DROP INDEX

- DROP INDEXTYPE

- DROP JAVA

- DROP LIBRARY

- DROP MATERIALIZED VIEW

- DROP MATERIALIZED VIEW LOG

- DROP MATERIALIZED ZONEMAP

- DROP OPERATOR

- DROP OUTLINE

- DROP PACKAGE

- DROP PLUGGABLE DATABASE

- DROP PROCEDURE

- DROP PROFILE

- DROP RESTORE POINT

- DROP ROLE

- DROP ROLLBACK SEGMENT

18 SQL文: DROP SEQUENCEからROLLBACK

- DROP SEQUENCE

- DROP SYNONYM

- 「DROP TABLE」

- DROP TABLESPACE

- DROP TRIGGER

- DROP TYPE

- DROP TYPE BODY

- DROP USER

- DROP VIEW

- 「EXPLAIN PLAN」

- EXPLAIN WORK

- FLASHBACK DATABASE

- FLASHBACK TABLE

- 「GRANT」

- INSERT

- LOCK TABLE

- MERGE

- 「NOAUDIT (従来型監査)」

- NOAUDIT (統合監査)

- PURGE

- RENAME

- REVOKE

- 「ROLLBACK」

19 SQL文: SAVEPOINTからUPDATE

- 「SAVEPOINT」

- 「SELECT」

- SET CONSTRAINT[S]

- SET ROLE

- SET TRANSACTION

- TRUNCATE CLUSTER

- TRUNCATE TABLE

- UPDATE

A 構文図の読み方

- 図形構文図

- 必須キーワードとパラメータ

- オプションのキーワードとパラメータ

- 構文のループ

- 複数の部分に分割された構文図

- データベース・オブジェクト

- バッカス正規形構文

B SQL操作時の自動ロックと手動ロックのメカニズム

- DML操作での自動ロック

- DDL操作での自動ロック

- 排他DDLロック

- 共有DDLロック

- ブレーク可能解析ロック

- 手動データ・ロック

C Oracleと標準SQL

- ANSI規格

- ISO規格

- Core SQL:2011に対するOracleの準拠

- SQL/Foundation:2011のオプション機能に対するOracleのサポート

- SQL/CLI:2008に対するOracleの準拠

- SQL/PSM:2011に対するOracleの準拠

- SQL/MED:2008に対するOracleの準拠

- SQL/OLB:2008に対するOracleの準拠

- SQL/JRT:2008に対するOracleの準拠

- SQL/XML:2011に対するOracleの準拠

- SQL/RPR:2012に対するOracleの準拠

- FIPS 127-2に対するOracleの準拠

- 標準SQLに対するOracle拡張機能

- 以前の規格に対するOracleの準拠

- キャラクタ・セットのサポート

D Oracleの正規表現のサポート

- 多言語の正規表現の構文

- 正規表現の演算子の多言語拡張

- Oracleの正規表現におけるPerlによる拡張機能

E Oracle SQLの予約語とキーワード

- Oracle SQLの予約語

- Oracle SQLキーワード

F 詳細な例

- 拡張索引作成機能の使用方法

- SQL文でのXMLの使用方法

索引

はじめに

このマニュアルでは、Oracle Databaseの情報を管理するために使用されるStructured Query Language(SQL)について説明します。Oracle SQLは、ANSI(米国規格協会)およびISO(国際標準化機構)のSQL:2011規格にさらに多くの内容を盛り込んでいます。

ここでは、次の項目について説明します。

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

対象読者

Oracle Database SQL言語リファレンスは、すべてのOracle SQLユーザーを対象としています。

ドキュメントのアクセシビリティについて

オラクル社のアクセシビリティへの取組みの詳細は、Oracle Accessibility ProgramのWebサイトhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=docaccを参照してください。

Oracleサポートへのアクセス

Oracleサポート・サービスでは、サポートを購入したお客様にMy Oracle Supportを通して電子支援サービスを提供しています。詳細は、http://www.oracle.com/pls/topic/lookup?ctx=acc&id=infoまたはhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs (聴覚障害者向け)を参照してください。

関連ドキュメント

詳細は、次のOracleドキュメントを参照してください。

- PL/SQL、Oracle SQLに対する手続き型言語の拡張の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

- Oracleの組込みSQLの詳細は、『Pro*C/C++プログラマーズ・ガイド』、『Oracle SQL*Module for Ada Programmer's Guide』および『Pro*COBOLプログラマーズ・ガイド』を参照してください。

このマニュアルに記載されている例の多くは、「基本インストール」オプションを選択した場合にOracle Databaseとともにデフォルトでインストールされるサンプル・スキーマを使用しています。これらのスキーマがどのように作成されているかと、その使用方法については、『Oracle Databaseサンプル・スキーマ』を参照してください。

表記規則

このマニュアルでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック体

イタリックは、ドキュメントのタイトル、強調またはユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

Oracle Database SQL言語リファレンスのこのリリースでの変更点

この章の内容は次のとおりです。

- Oracle Database 12cリリース1 (12.1.0.2)での変更点

- Oracle Database 12cリリース1 (12.1.0.1)での変更点

Oracle Database 12cリリース1 (12.1.0.2)での変更点

Oracle Database 12cリリース1 (12.1.0.2)のOracle Database SQL言語リファレンスで変更された点を次に示します。

新機能

このリリースの新機能は次のとおりです。

- インメモリー列ストア(IM列ストア)は任意に入力できる静的なSGAプールです。ここには、迅速にスキャンできるように最適化された特殊な列形式で、表のコピーおよびパーティションが格納されています。
CREATE TABLEのinmemory_table_clause、CREATE TABLESPACEのinmemory_clause、CREATE MATERIALIZED VIEWのinmemory_table_clauseを参照してください。

次のヒントを参照してください。

- INMEMORYヒント

- NO_INMEMORYヒント

- INMEMORY_PRUNINGヒント

- NO_INMEMORY_PRUNINGヒント

- Oracle Databaseでは、JavaScript Object Notation(JSON)がサポートされるようになりました。
次の条件を参照してください。

- IS JSON条件

- JSON_EXISTS条件

- JSON_TEXTCONTAINS条件

次のファンクションを参照してください。

- JSON_QUERY

- JSON_TABLE

- JSON_VALUE

「JSONオブジェクト・アクセス式」を参照してください。

- 属性クラスタリングは、指定された列の内容に基づいて物理的に近い表データをクラスタリングできます。
CREATE TABLEのattribute_clustering_clauseおよびALTER TABLEのattribute_clustering_clauseを参照してください。

次のヒントを参照してください。

- CLUSTERINGヒント

- NO_CLUSTERINGヒント

- ゾーン・マップは、特定の列の値が格納される連続したデータ・ブロックのセット(ゾーン)を追跡して、表スキャンのI/OおよびCPUコストを削減できます。属性クラスタリングの使用に関係なくゾーン・マップを使用できます。
CREATE MATERIALIZED ZONEMAP、ALTER MATERIALIZED ZONEMAP、DROP MATERIALIZED ZONEMAP文とCREATE TABLEのzonemap_clauseを参照してください。

NO_ZONEMAPヒントとSYS_OP_ZONE_IDファンクションを参照してください。

- レンジ・パーティション・ハッシュ・クラスタを作成できます。
CREATE CLUSTERのcluster_range_partitions句およびALTER CLUSTERのallocate_extent_clause を参照してください。

- 新しいファンクションAPPROX_COUNT_DISTINCTは、列に対して適切な数の異なる値を戻します。このファンクションは、COUNTファンクションの代替機能です。正確な結果とわずかに誤差がありますが、COUNTよりはるかに高速に大量のデータを処理します。
APPROX_COUNT_DISTINCTを参照してください。

- 拡張索引圧縮と呼ばれる新しいタイプの索引圧縮は、索引の効率的なアクセスを維持しながら圧縮率を向上できます。
CREATE INDEXのadvanced_index_compression句を参照してください。

- ハイブリッド列圧縮で圧縮された表の場合、DML操作中に行レベル・ロックを使用するかどうかを制御できるようになりました。
CREATE TABLEの[NO] ROW LEVEL LOCKING句を参照してください。

- データベースでは、バッファ・キャッシュ内のキャッシュに適しているNOCACHE LOBを含むデータベース全体を指定できる強制完全データベース・キャッシュ・モードをサポートするようになりました。
ALTER DATABASEの[NO] FORCE FULL DATABASE CACHING句を参照してください。

- データベース・ロールをCBAC付与を行うユーザーに付与する場合、ロールの権限受領者の追加権限を付与しないようにGRANT文にWITH DELEGATE OPTIONを指定できるようになりました。WITH DELEGATE OPTIONは、WITH ADMIN OPTIONの代替機能です。ロールをプログラム・ユニットに付与できますが、他のプリンシパルへのロールの付与やロール自体の管理は許可されていません。
GRANTのWITH DELEGATE OPTION句を参照してください。

- 新しいREADオブジェクト権限およびREAD ANY TABLEシステム権限によって、ユーザーは、表、マテリアライズド・ビュー、ビューおよびそれらのシノニムを問い合せることができます。
READオブジェクト権限は、SELECTオブジェクト権限の代替機能です。オブジェクトの問合せ以外に、SELECTオブジェクト権限を使用すると、ユーザーは、LOCK TABLEおよびSELECT ... FOR UPDATE文を使用して表の行をロックできます。READオブジェクト権限のみ、ユーザーはオブジェクトを問い合せることができます。詳細は、表18-2を参照してください。

READ ANY TABLEシステム権限は、SELECT ANY TABLEシステム権限の代替機能です。オブジェクトの問合せ以外に、SELECT ANY TABLE権限を使用すると、ユーザーは、SELECT ... FOR UPDATE文を使用して表の行をロックできます。READ ANY TABLE権限のみ、ユーザーはオブジェクトを問い合せることができます。詳細は、表18-1を参照してください。

Oracle Database 12cリリース1 (12.1.0.1)での変更点

Oracle Database 12cリリース1 (12.1.0.1)のOracle Database SQL言語リファレンスで変更された点を次に示します。

新機能

このリリースの新機能は次のとおりです。

新しいSQL文が導入される機能

次の機能では、新しいSQL文が導入されます。

- マルチテナント・アーキテクチャで提供される機能により、Oracle Databaseはマルチテナント・コンテナ・データベース(CDB)として機能します。CDBは、1つ以上のプラガブル・データベース(PDB)を含むOracle Databaseです。PDBは、Oracleクライアントに非CDBとして表示されるスキーマ、スキーマ・オブジェクトおよび非スキーマ・オブジェクトのポータブル・コレクションです。PDBはCDBから切断し、異なるCDBに接続できます。
次の新しい文を参照してください。

- CREATE PLUGGABLE DATABASE

- ALTER PLUGGABLE DATABASE

- DROP PLUGGABLE DATABASE

- 統合監査は、強化された監査機能の完全なセットを提供します。指定した名前の統合監査ポリシーの作成、統合監査ポリシーの有効化または無効化、ポリシーへのユーザーの適用または除外を行うことができます。また、監査動作が失敗した場合、成功した場合、または両方の場合に監査レコードを作成するかどうかを設定できます。さらに、監査レコード内のアプリケーション・コンテキストの値を取得することもできます。
次の新しい文を参照してください。

- CREATE AUDIT POLICY (統合監査)

- ALTER AUDIT POLICY (統合監査)

- DROP AUDIT POLICY (統合監査)

- AUDIT (統合監査)

- NOAUDIT (統合監査)

- 透過的データ暗号化(TDE)用の新しい統合キー管理インタフェースにより、キー管理タスクが簡単になり、コンプライアンスおよびトラッキングが向上するだけでなく、データベース管理者とセキュリティ管理者の職務権限の分離も向上します。
新しいADMINISTER KEY MANAGEMENT文を参照してください。

ALTER DATABASEの機能強化

次の機能により、ALTER DATABASE文が強化されています。

- ストレージ・スナップショット最適化により、バックアップ・モードなしで作成されたサード・パーティによるデータベースのストレージ・スナップショットを、あらゆる種類のリカバリ操作(ポイント・イン・タイム・リカバリを含む)に使用できます。ALTER DATABASE文が新しいSNAPSHOT TIME句によって強化され、このようなストレージ・スナップショットを使用してデータベースをリカバリできるようになりました。
ALTER DATABASEのfull_database_recovery句の新しい「SNAPSHOT TIME」句を参照してください。

- データベースがオープン状態のときに、オンライン・データファイルを新しい場所に移動して、そのデータファイルにアクセスできます。
ALTER DATABASEの新しい句「move_datafile_clause」を参照してください。

- Data Guard遠隔同期インスタンスの制御ファイルを作成できます。
ALTER DATABASEの強化された句「controlfile_clauses」を参照してください。

- 物理スタンバイ・データベースへのスイッチオーバーおよびフェイルオーバーの実行が単純化されています。
ALTER DATABASEの新しい句「switchover_clause」および「failover_clause」を参照してください。

- 物理スタンバイ・データベースに対するREDO Apply時に、デフォルトでリアルタイム適用が有効化されるようになりました。リアルタイム適用を無効化するには、USING ARCHIVED LOGFILEを指定します。
ALTER DATABASEの強化された「managed_standby_recovery」句を参照してください。

ALTER SYSTEMの機能強化

次の機能により、ALTER SYSTEM文が強化されています。

- クライアントを最も負荷が低いOracle ASMインスタンスに再配置します。
ALTER SYSTEMの新しい「RELOCATE CLIENT」句を参照してください。

- Oracle ASM用にリリースされた個別パッチをローリング方式で適用します。
ALTER SYSTEMの新しい「rolling_patch_clauses」を参照してください。

AUDITとNOAUDIT(従来型監査)の機能強化

次の機能により、従来型監査用のAUDIT文とNOAUDIT文が強化されています。

- SQL翻訳プロファイルに対する監査操作。
AUDITの新しい句「ON SQL TRANSLATION PROFILE」を参照してください。

CREATE DISKGROUPとALTER DISKGROUPの機能強化

次の機能により、CREATE DISKGROUP文、ALTER DISKGROUP文、またはその両方が強化されています。

- 標準冗長性および高冗長性のOracle ASMディスク・グループで、論理データの破損を検査して自動的に修復できます。
ALTER DISKGROUPの新しい句「scrub_clause」を参照してください。

- Oracle ASMディスク・グループ内のユーザーを置換できます。
ALTER DISKGROUPの強化された「user_clauses」を参照してください。

- Oracle ASMディスク・グループ・ファイルがオープン状態のときに、このファイルの権限、所有者およびユーザー・グループを変更できます。
ALTER DISKGROUPの強化された句「file_permissions_clause」および「file_owner_clause」を参照してください。

- Oracle ASMディスク・グループ内の1つ以上のディスクを単一の操作で置換できます。
ALTER DISKGROUPの新しい「replace_disk_clause」を参照してください。

- Oracle ASMディスク・グループ内のディスクの名前を変更できます。
ALTER DISKGROUPの新しい「rename_disk_clause」を参照してください。

- Oracle ASMディスク・グループの新しい属性は次のとおりです。

- CONTENT.CHECKでは、ディスク・グループのリバランスのためにデータ・コピー操作を実行する際のコンテンツ・チェックを有効化または無効化できます。

- FAILGROUP_REPAIR_TIMEでは、ディスク・グループ内の障害グループのデフォルトの修復時間を指定できます。

- PHYS_META_REPLICATEDでは、ディスク・グループのレプリケーション・ステータスをトラッキングできます。

- THIN_PROVISIONEDでは、ディスク・グループのリバランスの完了後に未使用の記憶領域を破棄する機能を有効化または無効化することができます。

表14-2,「ディスク・グループの属性」を参照してください。

CREATE FLASHBACK ARCHIVEとALTER FLASHBACK ARCHIVEの機能強化

次の機能により、CREATE FLASHBACK ARCHIVE文とALTER FLASHBACK ARCHIVE文が強化されています。

- 履歴表のデータ記憶域を最適化するようにデータベースに指示できます。
CREATE FLASHBACK ARCHIVEの新しい句「[NO] OPTIMIZE DATA」と、ALTER FLASHBACK ARCHVEの新しい句「[NO] OPTIMIZE DATA」を参照してください。

CREATE INDEXとALTER INDEXの機能強化

次の機能により、CREATE INDEX文、ALTER INDEX文、またはその両方が強化されています。

- 表のパーティションのサブセットに部分索引を作成できます。
CREATE INDEXの新しい句「partial_index_clause」を参照してください。

- 表パーティションのメンテナンス操作により、以前に削除または切捨てされたレコードに対する孤立した索引エントリを削除できます。
ALTER INDEX ... COALESCEの新しいキーワード「CLEANUP」、およびALTER INDEX ... MODIFY PARTITION ... COALESCEの新しいキーワード「CLEANUP」を参照してください。

- 索引のタイプが異なる場合、索引が異なるパーティション化を使用する場合、または索引に個別の一意性プロパティがある場合に、同じ列、列式またはその両方のセットに対して複数の索引を作成できます。
CREATE INDEXの「index_expr」句を参照してください。

CREATE INDEXTYPEとALTER INDEXTYPEの機能強化

次の機能により、CREATE INDEXTYPE文とALTER INDEXTYPE文が強化されています。

- ハッシュ・パーティション表および時間隔パーティション表にドメイン索引を作成できます。
「CREATE INDEXTYPE」および「ALTER INDEXTYPE」を参照してください。

CREATE MATERIALIZED VIEWとALTER MATERIALIZED VIEWの機能強化

次の機能により、CREATE MATERIALIZED VIEW文とALTER MATERIALIZED VIEW文が強化されています。

- マテリアライズド・ビューは非エディション・オブジェクトですが、エディション・オブジェクトに依存できます。
関連項目:

- CREATE MATERIALIZED VIEWの新しい句「evaluation_edition_clause」および「unusable_editions_clause」

- ALTER MATERIALIZEED VIEWの新しい句「evaluation_edition_clause」および「unusable_editions_clause」

CREATE MATERIALIZED VIEW LOGとALTER MATERIALIZED VIEW LOGの機能強化

次の機能により、CREATE MATERIALIZED VIEW LOG文とALTER MATERIALIZED VIEW LOG文が強化されています。

- マテリアライズド・ビュー・ログに使用するリフレッシュ方法を指定できます。Oracle Database 12cで導入された同期リフレッシュ、または以前のリリースでも利用可能な高速リフレッシュを指定できます。
関連項目:

- CREATE MATERIALIZED VIEW LOGの新しい「for_refresh_clause」

- ALTER MATERIALIZED VIEW LOGの新しい「for_refresh_clause」

CREATE SEQUENCEとALTER SEQUENCEの機能強化

次の機能により、CREATE SEQUENCE文とALTER SEQUENCE文が強化されています。

- アプリケーション・コンティニュイティのための再実行中に、順序疑似列NEXTVALの元の値を保持するかどうかを制御します。
関連項目:

- CREATE SEQUENCEの新しい句「KEEP」および「NOKEEP」

- ALTER SEQUENCEの新しい句「KEEP」および「NOKEEP」

- セッションの順序を作成できます。この順序は、セッションで認識できるグローバル一時表に使用することが具体的に指定される特種な順序です。
関連項目:

- CREATE SEQUENCEの新しい句「SESSION」および「GLOBAL」

- ALTER SEQUENCEの新しい句「SESSION」および「GLOBAL」

CREATE TABLEとALTER TABLEの機能強化

次の機能により、CREATE TABLE文、ALTER TABLE文、またはその両方が強化されています。

- VARCHAR2、NVARCHAR2、およびRAWデータ型の最大サイズが、32,767バイトに拡大されています。
「拡張データ型」を参照してください。

- 一時的有効性のサポートにより、有効な時間ディメンションを表に関連付けることができます。Oracleフラッシュバック問合せを使用すると、その表の行を、指定された時刻の時点で、または指定された期間中に有効と認識されるかどうかに基づいて取得できます。
関連項目:

- CREATE TABLEの新しい句「period_definition」

- ALTER TABLEの新しい句「add_period_clause」および「drop_period_clause」

- SELECTの強化された「flashback_query_clause」

- 仮想列は非エディション・オブジェクトですが、エディション・オブジェクトに依存できます。
関連項目:

- CREATE TABLEの新しい句「evaluation_edition_clause」および「unusable_editions_clause」

- ALTER TABLEの新しい句「modify_virtcol_properties」

- NULL値可能の列にDEFAULT値を指定したときのパフォーマンスが向上されました。
ALTER TABLEの「DEFAULT」句を参照してください。

- 順序疑似列のCURRVALとNEXTVALを含むデフォルトの列値を指定できます。
関連項目:

- CREATE TABLEの「DEFAULT」句

- ALTER TABLEの「DEFAULT」句

- DEFAULT句には新しい句のON NULLが使用できます。この句を使用すると、INSERT文で割り当てようとしている値がNULLに評価されるときに、指定したデフォルトの列値を割り当てるようにデータベースに指示できます。
関連項目:

- CREATE TABLEの「ON NULL」句

- ALTER TABLEの「ON NULL」句

- 順序ジェネレータの増加または減少する整数値が割り当てられるID列を指定できます。
関連項目:

- CREATE TABLEの新しい句「identity_clause」およびCREATE TABLEの新しい句「identity_options」を参照してください。

- ALTER TABLEの新しい句「identity_clause」、およびALTER TABLEの新しい句「identity_options」を参照してください。

- 表内の列を非表示および非表示解除できます。
関連項目:

- CREATE TABLEの新しい句「VISIBLE | INVISIBLE」

- CREATE TABLEの仮想列用の新しい句「VISIBLE | INVISIBLE」

- ALTER TABLEの新しい句「modify_col_visibility」

- 切捨て操作を子表に向けて再帰的にカスケードできます。
ALTER TABLEの句truncate_partition_subpartの新しいキーワード「CASCADE」を参照してください。

- 交換操作を子表に向けて再帰的にカスケードできます。
ALTER TABLEの句exchange_partition_subpartの新しいキーワード「CASCADE」を参照してください。

- XMLTypeデータ、およびXMLType型、CLOB型、BLOB型、またはNCLOB型の属性を含む抽象データ型をANYDATA列に格納できます。
ALTER TABLEの新しい句「modify_opaque_type」を参照してください。

- インデータベース・アーカイブの行アーカイブに対して表を有効化できます。
CREATE TABLEの新しい「ROW ARCHIVAL」句を参照してください。

- 自動データ最適化のためのポリシーを管理できます。
CREATE TABLEの新しい「ilm_clause」と、ALTER TABLEの新しい「ilm_clause」を参照してください。

- 親表が時間隔パーティション表の場合に子表の参照パーティション表を作成できます。
CREATE TABLEの強化された句「reference_partitioning」を参照してください。

- 次のALTER TABLE操作に、複数の表パーティションまたは表サブパーティションを指定できます。

- 1つ以上のレンジ、リスト、またはシステム・パーティションを表に追加する。「add_table_partition」を参照してください。

- 1つ以上のレンジ・サブパーティションをパーティションに追加する。「add_range_subpartition」を参照してください。

- 1つ以上のリスト・サブパーティションをパーティションに追加する。「add_list_subpartition」を参照してください。

- 1つのレンジまたはリスト・パーティションを2つ以上のパーティションに分割する。「split_table_partition」を参照してください。

- 1つのレンジまたはリスト・サブパーティションを2つ以上のサブパーティションに分割する。「split_table_subpartition」を参照してください。

- 2つ以上のレンジ、リストまたはシステム・パーティションを1つの新しいパーティションにマージする。「merge_table_partitions」を参照してください。

- 2つ以上のレンジまたはリスト・サブパーティションを1つの新しいサブパーティションにマージする。「merge_table_subpartitions」を参照してください。

- 1つ以上のパーティションまたはサブパーティションを切り捨てる。「truncate_partition_subpart」を参照してください。

- 1つ以上のパーティションを削除する。「drop_table_partition」を参照してください。

- 1つ以上のサブパーティションを削除する。「drop_table_subpartition」を参照してください。

- 以前のリリースでは、次のDDL操作にはDMLブロッキング・ロックが必要でした。新しいONLINEキーワードを使用すると、次のDDL操作時にDML文を実行できるようになります。

- 索引の削除(DROP INDEX ... 「ONLINE」 ...を使用)

- 索引へのUNUSABLEのマーク付け(ALTER INDEX ... UNUSABLE 「ONLINE」を使用)

- 列へのUNUSEDのマーク付け(ALTER TABLE ... SET UNUSED ... 「ONLINE」 ...を使用)

- 制約の削除(ALTER TABLE ... DROP ... 「ONLINE」 ...を使用)

- 表パーティションの移動(ALTER TABLE ... MOVE PARTITION ... ONLINEを使用)

- 表サブパーティションの移動(ALTER TABLE ... MOVE SUBPARTITION ... ONLINEを使用)

CREATE VIEWの機能強化

次の機能により、CREATE VIEW文が強化されています。

- ビュー内の列を非表示および非表示解除できます。
CREATE VIEWの新しい句「VISIBLE | INVISIBLE」を参照してください。

- ビューで参照されるファンクションをビューの実行者権限で実行するか、ビューの定義者権限で実行するかを指定できます。
CREATE VIEWの新しい句「BEQUEATH」を参照してください。

GRANTとREVOKEの機能強化

次の機能により、GRANT文とREVOKE文が強化されています。

- あるユーザーに対するオブジェクト権限を複数のユーザーとロールに付与できます。
関連項目:

- GRANTの新しい句「ON USER」

- REVOKEの新しい句「ON USER」

- SQL翻訳プロファイルに対するオブジェクト権限を複数のユーザーおよびロールに付与できます。
関連項目:

- GRANTの新しい句「ON SQL TRANSLATION PROFILE」

- REVOKEの新しい句「ON SQL TRANSLATION PROFILE」

- コードに基づくアクセス制御(CBAC)ロールをプログラム・ユニットに付与できます。
関連項目:

- GRANTの新しい句grant_roles_to_programs

- REVOKEの新しい句revoke_roles_from_programs

SELECTの機能強化

次の機能により、SELECT文が強化されています。

- パターン一致により、表内の複数の行にわたって発生するパターンを認識できます。
SELECTの新しい句「row_pattern_clause」を参照してください。

- 上位N番までの問合せの実行に、オフセットと、戻される行数または行数の割合を指定できます。
SELECTの新しい句「row_limiting_clause」を参照してください。

- 2組以上の表の外部結合を行う問合せにおいて、単一表は複数の表に対してNULL生成された表になることができます。
「外部結合」を参照してください。

- 左相関のサポートにより、ANSI CROSS JOINまたはANSI LEFT OUTER JOINの変化形を実行できます。結合句の右側に表参照またはコレクション式を指定できます。
SELECTの新しい句「cross_outer_apply_clause」を参照してください。

- 問合せ式にLATERALインライン・ビューを指定できます。
SELECTの新しいキーワード「LATERAL」を参照してください。

- 問合せのWITH句内でPL/SQLファンクションおよびプロシージャの宣言と定義ができます。このPL/SQLファンクションは、その問合せと、その問合せの副問合せで参照できます。
SELECTの新しい句「plsql_declarations」を参照してください。

TRUNCATE TABLEの機能強化

次の機能により、TRUNCATE TABLE文が強化されています。

- 子表を再帰的に切捨てできます。
TRUNCATE TABLEの新しい句「CASCADE」を参照してください。

新しいファンクションと強化されたファンクション

新しいファンクションまたは強化されたファンクションは、次のとおりです。

- 「CLUSTER_DETAILS」は、行ごとのクラスタ・メンバーシップを予測する新しいファンクションです。これは、事前定義されたクラスタリング・モデルを使用することも、動的クラスタリングを実行することもできます。このファンクションは、予測されたクラスタまたは指定されたクラスタを記述するXML文字列を戻します。

- 「CLUSTER_DISTANCE」は、行ごとのクラスタ・メンバーシップを予測する新しいファンクションです。これは、事前定義されたクラスタリング・モデルを使用することも、動的クラスタリングを実行することもできます。このファンクションは、各行間の行の距離と、予測されたクラスタまたは指定されたクラスタの重心を戻します。

- 「CLUSTER_ID」は、事前定義されたクラスタリング・モデルを使用することも、動的にクラスタリングを実行することもできるように強化されました。

- 「CLUSTER_PROBABILITY」は、事前定義されたクラスタリング・モデルを使用することも、動的にクラスタリングを実行することもできるように強化されました。戻り値のデータ型は、NUMBERからBINARY_DOUBLEに変更されました。

- 「CLUSTER_SET」は、事前定義されたクラスタリング・モデルを使用することも、動的にクラスタリングを実行することもできるように強化されました。戻される確率のデータ型は、NUMBERからBINARY_DOUBLEに変更されました。

- 「FEATURE_DETAILS」は、行ごとの特性の一致を予測する新しいファンクションです。事前定義された特性抽出モデルを使用することも、動的に特性抽出を実行することもできます。このファンクションは、予測された特性または指定された特性を記述するXML文字列を戻します。

- 「FEATURE_ID」は、事前定義された特性抽出モデルを使用することも、動的に特性抽出を実行することもできるように強化されました。

- 「FEATURE_SET」は、事前定義された特性抽出モデルを使用することも、動的に特性抽出を実行することもできるように強化されました。戻される確率のデータ型は、NUMBERからBINARY_DOUBLEに変更されました。

- 「FEATURE_VALUE」は、事前定義された特性抽出モデルを使用することも、動的に特性抽出を実行することもできるように強化されました。戻り値のデータ型は、NUMBERからBINARY_DOUBLEに変更されました。

- 「ORA_INVOKING_USER」は、現在の文またはビューを起動したデータベース・ユーザーの名前を戻す新しいファンクションです。このファンクションは、文で参照される中間ビューのBEQUEATHプロパティを考慮に入れます。

- 「ORA_INVOKING_USERID」は、現在の文またはビューを起動したデータベース・ユーザーのIDを戻す新しいファンクションです。このファンクションは、文で参照される中間ビューのBEQUEATHプロパティを考慮に入れます。

- 「PREDICTION」は、ユーザー定義の予測モデルを使用することも、動的に予測を実行することもできるように強化されています。

- 「PREDICTION_BOUNDS」は、予測の上位境界と下位境界をBINARY_DOUBLEデータ型で戻すようになりました。以前は、これらの値がNUMBERデータ型で戻されていました。

- 「PREDICTION_COST」は、ユーザー定義の予測モデルを使用することも、動的に予測を実行することもできるように強化されています。戻されるコストのデータ型は、NUMBERからBINARY_DOUBLEに変更されました。

- 「PREDICTION_DETAILS」は、ユーザー定義の予測モデルを使用することも、動的に予測を実行することもできるように強化されています。

- 「PREDICTION_PROBABILITY」は、ユーザー定義の予測モデルを使用することも、動的に予測を実行することもできるように強化されています。戻される確率のデータ型は、NUMBERからBINARY_DOUBLEに変更されました。

- 「PREDICTION_SET」は、ユーザー定義の予測モデルを使用することも、動的に予測を実行することもできるように強化されています。戻される確率のデータ型は、NUMBERからBINARY_DOUBLEに変更されました。

- 「STANDARD_HASH」は、いくつかの標準化されたハッシュ・アルゴリズムを使用して特定の式のハッシュ値を計算する新しいファンクションです。

- 「SYS_CONTEXT」では、指定されたロールが当該セッションで現在有効化されているかどうかを判断できる新しいビルトイン・ネームスペースSYS_SESSION_ROLESに対する問合せができます。

新しい権限と強化された権限

新規または強化されたシステム権限とオブジェクト権限は次のとおりです。

- 次のシステム権限については、動作が変更されています。これらの権限は、「表18-1」に一覧が示されています。

- SELECT ANY DICTIONARYでは、SYSスキーマに含まれるオブジェクトのDEFAULT_PWD$、ENC$、LINK$、USER$、USER_HISTORY$、およびXS$VERIFIERSの問合せができなくなりました。

- 次の新しいシステム権限は、「表18-1」に一覧が示されています。

- CREATE SQL TRANSLATION PROFILE、CREATE ANY SQL TRANSLATION PROFILE、ALTER ANY SQL TRANSLATION PROFILE、USE ANY SQL TRANSLATION PROFILE、およびDROP ANY SQL TRANSLATION PROFILEでは、SQL翻訳プロファイルを管理できます。

- EXEMPT REDACTION POLICYでは、既存のOracle Data Redactionポリシーをバイパスできます。

- INHERIT ANY PRIVILEGESでは、実行者の権限で実行者権限プロシージャを実行できます。

- KEEP DATE TIMEでは、SYSDATEおよびSYSTIMESTAMPファンクションで、それらの元の値をアプリケーション・コンティニュイティのための再実行中に戻せるようになります。

- KEEP SYSGUIDでは、SYS_GUIDファンクションで、その元の値をアプリケーション・コンティニュイティのための再実行中に戻せるようになります。

- LOGMININGでは、マルチテナント・コンテナ・データベース(CDB)内でLogMiner操作を実行できます。

- PURGE DBA_RECYCLEBINでは、システム全体のごみ箱からすべてのオブジェクトを削除できます。

- SYSBACKUPでは、バックアップ・タスクとリカバリ・タスクが実行できます。

- SYSDGでは、Oracle Data Guardを管理できます。

- SYSKMでは、暗号化キーの管理を実行できます。

- TRANSLATE ANY SQLでは、SQLを任意のユーザー用に変換できます。

- 次の新しいオブジェクト権限は、「表18-2」に一覧が示されています。

- ALTERおよびUSE権限は、SQL翻訳プロファイルに対する操作を許可します。

- INHERIT PRIVILEGESは新しいタイプのオブジェクト権限であり、あるユーザーから複数のユーザーおよびロールに付与できます。これにより、権限受領者が所有する実行者権限プロシージャを、この権限を付与されたユーザーが実行者の場合に、実行者の権限で実行できるようになります。

- KEEP SEQUENCEでは、順序疑似列NEXTVALが、その元の値をアプリケーション・コンティニュイティのための再実行中に維持できるようになります。

- TRANSLATE SQLは新しいタイプのオブジェクト権限であり、あるユーザーから複数のユーザーおよびロールに付与できます。これにより、権限受領者は権限受領者のSQL翻訳プロファイルを使用して、この権限が付与されたユーザー用にSQLを変換できるようになります。

新しいヒント

新しいヒントは、次のとおりです。

- 「GATHER_OPTIMIZER_STATISTICSヒント」と「NO_GATHER_OPTIMIZER_STATISTICSヒント」では、バルク・ロード中の統計収集をそれぞれ有効化または無効化できます。

- 「PQ_CONCURRENT_UNIONヒント」と「NO_PQ_CONCURRENT_UNIONヒント」では、UNION操作とUNION ALL操作の同時処理を、それぞれ有効化または無効化できます。

- 「PQ_FILTERヒント」では、相関副問合せをフィルタリングするときの行の処理方法をオプティマイザに指示できます。

- 「PQ_SKEWヒント」と「NO_PQ_SKEWヒント」では、パラレル結合の結合キーの値の分散が偏っているかどうかをオプティマイザに知らせることができます。

- 「USE_CUBEヒント」と「NO_USE_CUBEヒント」では、キューブ結合を使用するか除外するかを指定できます。

非推奨となった機能

次の機能は今回のリリースで非推奨であり、将来のリリースでサポートされなくなる可能性があります。

- ストアド・アウトラインは非推奨になりました。ストアド・アウトラインは、下位互換性を保つために今でもサポートされています。ただし、かわりにSQL計画管理を使用することをお薦めします。SQL計画管理では、ストアド・アウトラインよりも非常に安定したSQLパフォーマンスを実現するSQL計画ベースラインが作成されます。
SQL計画管理の詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。

- 透過的データ暗号化とPKI暗号化の併用は非推奨です。透過的データ暗号化を構成するには、「ADMINISTER KEY MANAGEMENT」文を使用します。
詳細は、Oracle Database Advanced Securityガイドを参照してください。

サポート対象外機能

このマニュアルに記載されていた一部の機能は、Oracle Database 12cリリース1 (12.1)ではサポート対象外になります。サポート対象外機能の一覧は、『Oracle Databaseアップグレード・ガイド』を参照してください。

1 Oracle SQLの概要

Structured Query Language(SQL)とは、プログラムおよびユーザーが、Oracle Databaseのデータにアクセスするために使用する一連の文です。アプリケーション・プログラムやOracleのツール製品を使用すると、SQLを直接使用せずにデータベースにアクセスできます。ただし、アプリケーションがユーザーの要求を実行するときには、必ずSQLを使用します。この章では、ほとんどのデータベース・システムで使用されるSQLの背景について説明します。

この章では、次の内容を説明します。

- SQLの歴史

- SQL規格

- 字句規則

- ツール製品のサポート

SQLの歴史

博士E. F.Coddは、1970年6月、Association of Computer Machinery(ACM)が刊行した「Communications of the ACM」誌で、論文「大型共用データ・バンク用のデータのリレーショナル・モデル」を発表しました。Codd博士のモデルは、現在ではリレーショナル・データベース管理システム(RDBMS)の完成したモデルとして認められています。Structured English Query Language(SEQUEL)は、IBM社がCodd博士のモデルを使用するために開発したものです。このSEQUELが後のSQLです。1979年、Relational Software, Inc.(現在のオラクル社)は、商業的に利用可能な最初のSQLの処理系を導入しました。今日、SQLは標準のRDBMS言語として認められています。

SQL規格

オラクル社は、業界標準に準拠するよう努力し、SQL標準化委員会にも積極的に参加しています。業界で認知されている委員会には、ANSI(米国規格協会)、およびIEC(国際電気標準会議)が電気・電子部門を担当しているISO(国際標準化機構)があります。ANSIとISO/IECはともに、SQLをリレーショナル・データベースの標準言語として認めています。新しいSQL規格がこの両機関から同時に発表された場合、その規格の名前は、各機関の規則に従って付けられますが、技術的な詳細は同じです。

SQL規格は10パートで構成されています。そのうちの1パートは、2012規格で新しく導入されました。その他の5パートは、2011規格で改訂されています。それ以外の4パートは、2008規格版が変更されずに維持されています。

関連項目:
SQL規格へのOracle Databaseの規格準拠については、付録C「Oracleと標準SQL」を参照してください

SQLの特長

SQLは、アプリケーション・プログラマ、データベース管理者、マネージャ、エンド・ユーザーなど、あらゆる分野のユーザーに利益をもたらします。技術的ないい方をすると、SQLはデータ副言語です。SQLの目的は、Oracle Databaseのようなリレーショナル・データベースとのインタフェースを提供することであり、すべてのSQL文はデータベースに対する命令です。この点において、SQLは、CやBASICのような汎用プログラミング言語と異なります。SQLには、次のような特長があります。

- 個々の単位としてではなく、グループとして一連のデータを処理します。

- データへの自動的なナビゲーション・アクセス(経路設定)を実行します。

- 使用される文は、それぞれが複雑、強力で、スタンドアロン型の文です。SQLにはフロー制御文は含まれていませんでしたが、SQLのオプション部分ISO/IEC 9075-4:2011にはフロー制御文が含まれています。フロー制御文は、永続保存モジュール(PSM)としてよく知られており、SQLの拡張機能であるOracleのPL/SQLは、PSMに似ています。

SQLでは、データを論理的なレベルで処理できます。処理系について考えることは、データの細部を操作する場合のみで済みます。たとえば、表から一連の行を検索するには、行をフィルタ処理するための条件を定義します。この条件を満たすすべての行が1つの手順で検索され、ユーザー、別のSQL文またはアプリケーションに1つの単位として渡されます。行単位で処理する必要がなく、行の物理的な格納方法や検索方法を気にする必要もありません。SQL文を実行すると、Oracle Databaseの問合せオプティマイザが働きます。この機能によって、指定したデータに最も速くアクセスする方法が決定されます。Oracleには、オプティマイザの性能を向上させる方法も用意されています。

SQL文を使用して、次の処理を行うことができます。

- データの問合せ

- 表の中の行の挿入、更新、削除

- オブジェクトの作成、置換、変更、削除

- データベースとデータベース・オブジェクトへのアクセス制御

- データベースの一貫性と整合性の保証

SQLでは、前述のすべてのタスクを1つの一貫性のある言語に統一しました。

すべてのリレーショナル・データベースに共通の言語

すべての主なリレーショナル・データベース管理システムは、SQLをサポートしているため、SQLで得た技術的な知識を他のデータベースでも生かすことができます。さらに、SQLで記述されたプログラムは移植性に優れています。わずかな変更のみで他のデータベースに移行できます。

Enterprise Managerの使用方法

SQL構文を使用して実行できる操作の多くは、Enterprise Managerを使用するとさらに簡単に実行できます。詳細は、Oracle Enterprise Managerのドキュメント・セット、『Oracle Database 2日でデータベース管理者』またはOracle Databaseの「2日で」シリーズのいずれかのマニュアルを参照してください。

字句規則

SQL文の記述に関する次の字句規則は、Oracle DatabaseのSQL実装に対してのみ適用されますが、他のすべてのSQL実装にも一般的に適用されます。

SQL文では、文の定義の中で空白が入る可能性がある任意の位置に、1つ以上のタブ、改行文字、空白またはコメントを記述できます。したがって、Oracle Databaseは、次の2つの文を同一と解釈します。

SELECT last_name,salary*12,MONTHS_BETWEEN(SYSDATE,hire_date)
FROM employees
WHERE department_id = 30
ORDER BY last_name;

SELECT last_name,
salary * 12,
MONTHS_BETWEEN( SYSDATE, hire_date )
FROM employees
WHERE department_id=30
ORDER BY last_name;

予約語、キーワード、識別子およびパラメータは、大文字と小文字を区別せずに記述できます。ただし、テキスト・リテラルと引用符で囲んだ名前では、大文字と小文字は区別されます。テキスト・リテラルの構文の詳細は、「テキスト・リテラル」を参照してください。

注意:
SQL文は、プログラミング環境によって終了方法が異なります。このドキュメント・セットでは、SQL*Plusのデフォルト文字(セミコロン(;))が使用されています。

ツール製品のサポート

Oracleには、SQL開発プロセスを容易にする多くのユーティリティが提供されています。

- Oracle SQL Developerは、データベース・オブジェクトの参照、作成、編集および削除、PL/SQLコードの編集およびデバッグ、SQL文およびスクリプトの実行、データの操作およびエクスポート、レポートの作成および表示を行うためのグラフィカル・ツールです。SQL Developerを使用すると、標準のOracle Database認証を使用してOracle Databaseの任意のターゲット・スキーマに接続することができます。接続後に、データベース内のオブジェクトに対する操作を行うことができます。また、MySQL、Microsoft SQL Server、Microsoft Accessなど、サード・パーティ(Oracle以外)のデータベースのスキーマに接続して、このデータベースのメタデータを表示し、Oracleにこのデータベースを移行することもできます。

- SQL*Plusは、対話形式のバッチ問合せツールです。すべてのOracle Databaseサーバーまたはクライアントの使用環境にインストールされています。このツールには、コマンドライン・ユーザー・インタフェースおよびiSQL*PlusというWebベースのユーザー・インタフェースが備わっています。

- Oracle JDeveloperは、マルチプラットフォームの統合開発環境であり、Java、WebサービスおよびSQLの開発のすべての工程をサポートします。この環境では、SQL文の実行およびチューニング用のグラフィカル・インタフェースと、ビジュアル・スキーマ・ダイアグラマ(データベース・モデラー)を使用できます。また、PL/SQLアプリケーションの編集、コンパイルおよびデバッグもサポートします。

- Oracle Application Expressは、データベース関連のWebアプリケーションの開発およびデプロイ用のホストされた環境です。Oracle Application ExpressのコンポーネントであるSQL Workshopを使用すると、Webブラウザからデータベース・オブジェクトを表示および管理できます。SQL Workshopでは、SQLコマンド・プロセッサおよびSQLスクリプト・リポジトリに素早くアクセスできます。

関連項目:
これらの製品の詳細は、『SQL*Plusユーザーズ・ガイドおよびリファレンス』および『Oracle Application Expressアプリケーション・ビルダー・ユーザーズ・ガイド』を参照してください。

Oracle Call InterfaceおよびOracleプリコンパイラを使用すると、標準SQL文をプロシージャ・プログラミング言語に埋め込むことができます。

- Oracle Call Interface(OCI)を使用すると、CプログラムにSQL文を埋め込むことができます。

- OracleプリコンパイラであるPro*C/C++およびPro*COBOLによって、埋込みSQL文が解析され、それぞれC/C++コンパイラとCOBOLコンパイラが処理できる文に変換されます。

関連項目:
各製品で使用可能な埋込みSQL文の詳細は、『Oracle C++ Call Interfaceプログラマーズ・ガイド』、『Pro*COBOLプログラマーズ・ガイド』および『Oracle Call Interfaceプログラマーズ・ガイド』を参照してください。

ほとんどのOracleツール製品は、Oracle SQLのすべての機能もサポートしています。このマニュアルでは、SQLのすべての機能について説明しています。ご使用のOracleのツール製品でサポートしていない機能がある場合は、『SQL*Plusユーザーズ・ガイドおよびリファレンス』など、そのOracleのツール製品について記述しているマニュアルで、制限事項を確認してください。

2 Oracle SQLの基本要素

この章では、Oracle SQLの基本要素に関する参照情報を説明します。これらの要素は、SQL文の最も単純な構成ブロックです。したがって、第10章から第19章で説明されている文を使用する前に、この章で説明する概念を理解しておく必要があります。

この章では、次の内容を説明します。

- データ型

- データ型の比較規則

- リテラル

- 書式モデル

- NULL

- コメント

- データベース・オブジェクト

- データベース・オブジェクト名および修飾子

- スキーマ・オブジェクトの構文およびSQL文の構成要素

データ型

Oracle Databaseが処理する値は、それぞれデータ型を持ちます。値のデータ型は、固定されたプロパティの集合をその値に対応付けます。このプロパティに応じて、Oracleは、あるデータ型の値を別のデータ型の値と区別して扱います。たとえば、NUMBERデータ型の値は加算できますが、RAWデータ型の値は加算できません。

表またはクラスタを作成する場合、各列にデータ型を指定する必要があります。プロシージャまたはストアド・ファンクションを作成する場合は、その各引数にデータ型を指定する必要があります。データ型によって、各列が含むことができる値のドメイン、または各引数が持つことができる値のドメインが決まります。たとえば、DATE列は、2月29日(うるう年を除く)、2または'SHOE'という値を格納できません。列に入る値は、その列のデータ型を受け継ぎます。たとえば、DATE列に'01-JAN-98'を挿入すると、Oracleはそれが有効な日付に変換されることを確認してから、文字列'01-JAN-98'をDATE値として扱います。

Oracle Databaseには、多くの組込みデータ型、およびデータ型として使用できるいくつかのユーザー定義型のカテゴリがあります。Oracleのデータ型の構文については、次の構文図で示します。この項は、次の6つの項にわかれています。

- Oracleの組込みデータ型

- ANSI、DB2、SQL/DSのデータ型

- ユーザー定義型

- Oracleが提供する型

- データ型の比較規則

- データ変換

データ型はスカラーまたは非スカラーです。スカラー型は、アトム値を持ちますが、非スカラー型(コレクションともいう)は一連の値を持ちます。ラージ・オブジェクト(LOB)は、スカラー型の特別な形で、バイナリまたは文字データのラージ・スカラー値を表しています。LOBはサイズが大きいため、他のスカラー型には影響しないいくつかの制限事項があります。これらの制限事項については、関連するSQL構文を参照してください。

関連項目:
「LOB列の制限事項:」

Oracleプリコンパイラによって、埋込みSQLプログラムで他のデータ型が区別されます。このようなデータ型は、外部データ型と呼ばれ、ホスト変数に対応付けられています。組込みデータ型およびユーザー定義型を外部データ型と混同しないでください。Oracleによる外部データ型と組込み型またはユーザー定義データ型の間の変換など、外部データ型の詳細は、『Pro*COBOLプログラマーズ・ガイド』および『Pro*C/C++プログラマーズ・ガイド』を参照してください。

datatypes::=

次の図に、Oracleの組込みデータ型について示します。詳細は、「Oracleの組込みデータ型」を参照してください。

Oracle_built_in_datatypes::=

character_datatypes::=

number_datatypes::=

long_and_raw_datatypes::=

datetime_datatypes::=

large_object_datatypes::=

rowid_datatypes::=

次に、ANSIがサポートしているデータ型について示します。また、「ANSI、DB2、SQL/DSのデータ型」に、ANSIがサポートしているデータ型をOracle組込みデータ型にマップする方法を示します。

ANSI_supported_datatypes::=

ユーザー定義型の詳細は、「ユーザー定義型」を参照してください。

次の図に、Oracleが提供するデータ型について示します。詳細は、「Oracleが提供する型」を参照してください。

Oracle_supplied_types::=

any_types::=

任意型の詳細は、「任意型」を参照してください。

XML_types::=

XML型の詳細は、「XML型」を参照してください。

spatial_types::=

Spatial型の詳細は、「Spatial型」を参照してください。

media_types::=

still_image_object_types::=

メディア型の詳細は、「メディア型」を参照してください。

Oracleの組込みデータ型

次の表にOracle組込みデータ型の概要を示します。構文要素については、前の項の構文を参照してください。データ型のコードは、Oracle Databaseが内部的に使用します。DUMPファンクションによって、列またはオブジェクト属性のデータ型コードが戻されます。

表2-1 組込みデータ型の概要

コード

データ型

説明

1

VARCHAR2(size [BYTE | CHAR])

最大長がsizeバイトまたは文字の可変長文字列。VARCHAR2には、sizeを指定する必要があります。最小のsizeは、1バイトまたは1文字です。最大のsizeは、次のとおりです。

- MAX_STRING_SIZE = EXTENDEDの場合は、32,767バイト(文字)

- MAX_STRING_SIZE = STANDARDの場合は、4,000バイト(文字)

MAX_STRING_SIZE初期化パラメータの詳細は、「拡張データ型」を参照してください。

BYTEは、列がバイト長セマンティクスを持つことを示します。CHARは、列がキャラクタ・セマンティクスを持つことを示します。

1

NVARCHAR2(size)

最大長がsize文字の可変長Unicode文字列。NVARCHAR2には、sizeを指定する必要があります。バイト数は、AL16UTF16エンコードの場合はsizeの2倍まで、UTF8エンコードの場合はsizeの3倍までです。最大のsizeは、各国語キャラクタ・セットの定義に応じて決まります。上限は次のとおりです。

- 32767バイト(MAX_STRING_SIZE = EXTENDEDの場合)

- 4000バイト(MAX_STRING_SIZE = STANDARDの場合)

MAX_STRING_SIZE初期化パラメータの詳細は、「拡張データ型」を参照してください。

2

NUMBER [ (p [, s]) ]

精度p、位取りsを持つ数。精度pには1から38の値を指定できます。位取りsには-84から127の値を指定できます。精度と位取りはともに10進数です。NUMBERの値は1から22バイトである必要があります。

2

FLOAT [(p)]

精度pを持つNUMBERデータ型のサブタイプ。FLOATの値は、内部的にNUMBERと表されます。精度pの値は、1から126の範囲の2進数で指定します。FLOATの値は1から22バイトである必要があります。

8

LONG

最大2GB(2^31から1を引いたバイト数)の可変長文字データ。下位互換性のために提供されています。

12

DATE

紀元前4712年1月1日から紀元9999年12月31日までの日付を指定します。デフォルトの書式は、NLS_DATE_FORMATパラメータを使用すると明示的に、NLS_TERRITORYパラメータを使用すると暗黙的に決定される。サイズは7バイトに固定されています。このデータ型には、YEAR、MONTH、DAY、HOUR、MINUTEおよびSECONDの日時フィールドが含まれます。小数部の秒数およびタイムゾーンは含まれません。

100

BINARY_FLOAT

32ビットの浮動小数点数。このデータ型には4バイトが必要です。

101

BINARY_DOUBLE

64ビットの浮動小数点数。このデータ型には8バイトが必要です。

180

TIMESTAMP [(fractional_seconds_precision)]

日付の年、月、日および時刻の時、分、秒の値。fractional_seconds_precision は、SECOND日時フィールドの小数部の桁数です。fractional_seconds_precision の有効範囲は0から9です。デフォルトは6です。デフォルトの書式は、NLS_TIMESTAMP_FORMATパラメータによって明示的に決まるか、またはNLS_TERRITORYパラメータによって暗黙的に決まります。サイズは、精度に応じて7または11バイトです。このデータ型には、YEAR、MONTH、DAY、HOUR、MINUTEおよびSECONDの日時フィールドが含まれます。小数部の秒数は含まれますが、タイムゾーンは含まれません。

181

TIMESTAMP [(fractional_seconds_precision)] WITH TIME ZONE

タイムゾーンによる時差などのすべてのTIMESTAMPの値。fractional_seconds_precision は、SECOND日時フィールドの小数部の桁数です。有効範囲は0から9です。デフォルトは6です。デフォルトの書式は、NLS_TIMESTAMP_FORMATパラメータによって明示的に決まるか、またはNLS_TERRITORYパラメータによって暗黙的に決まります。サイズは13バイトに固定されています。このデータ型には、YEAR、MONTH、DAY、HOUR、MINUTE、SECOND、TIMEZONE_HOURおよびTIMEZONE_MINUTEの日時フィールドが含まれます。小数部の秒数および明示的なタイムゾーンが含まれます。

231

TIMESTAMP [(fractional_seconds_precision)] WITH LOCAL TIME ZONE

TIMESTAMP WITH TIME ZONEのすべての値。ただし、次に示す例外があります。

- データベースへの格納時、データがデータベースのタイムゾーンに正規化されている場合。

- データの検索時、ユーザーがセッションのタイムゾーンでデータを検索する場合。

デフォルトの書式は、NLS_TIMESTAMP_FORMATパラメータによって明示的に決まるか、またはNLS_TERRITORYパラメータによって暗黙的に決まります。サイズは、精度に応じて7または11バイトです。

182

INTERVAL YEAR [(year_precision)] TO MONTH

年および月で期間を格納。year_precision は、YEAR日時フィールドの桁数です。有効範囲は0から9です。デフォルトは2です。サイズは5バイトに固定されています。

183

INTERVAL DAY [(day_precision)] TO SECOND [(fractional_seconds_precision)]

日、時、分および秒で期間を格納。

- day_precisionは、DAY日時フィールドの最大桁数です。有効範囲は0から9です。デフォルトは2です。

- fractional_seconds_precisionは、SECONDフィールドの小数部の桁数です。有効範囲は0から9です。デフォルトは6です。

サイズは11バイトに固定されています。

23

RAW(size)

長さsizeバイトのバイナリ・データ。RAW値には、sizeを指定する必要があります。最大のsizeは、次のとおりです。

- 32767バイト(MAX_STRING_SIZE = EXTENDEDの場合)

- 2000バイト(MAX_STRING_SIZE = STANDARDの場合)

MAX_STRING_SIZE初期化パラメータの詳細は、「拡張データ型」を参照してください。

24

LONG RAW

最大2GBの可変長バイナリ・データ。

69

ROWID

表の行のアドレスを一意に表すBASE64文字列。主に、ROWID疑似列によって戻される値のためのデータ型です。

208

UROWID [(size)]

索引構成表の行の論理アドレスを表すBASE64文字列。オプションのsizeは、UROWID型の列のサイズです。最大サイズおよびデフォルトは4000バイトです。

96

CHAR [(size [BYTE | CHAR])]

長さsizeバイトまたは文字の固定長文字データ。最大のsizeは2000バイトまたは文字です。デフォルトおよび最小のsizeは1バイトです。

BYTEおよびCHARは、VARCHAR2と同じセマンティクスを持ちます。

96

NCHAR[(size)]

長さsize文字の固定長文字データ。バイト数は、AL16UTF16エンコードの場合はsizeの2倍まで、UTF8エンコードの場合はsizeの3倍までです。最大のsizeは、各国語キャラクタ・セット定義(上限2000バイト)によって決定されます。デフォルトおよび最小のsizeは1文字です。

112

CLOB

シングルバイト文字またはマルチバイト・キャラクタを含むキャラクタ・ラージ・オブジェクト。固定幅および可変幅のキャラクタ・セットがサポートされ、両方ともデータベース・キャラクタ・セットで使用されます。最大サイズは、4GBから1を引いたバイト数にデータベース・ブロック・サイズを掛けた値です。

112

NCLOB

Unicodeキャラクタを含むキャラクタ・ラージ・オブジェクト。固定幅および可変幅のキャラクタ・セットがサポートされます。両方のキャラクタ・セットでデータベースの各国語キャラクタ・セットを使用します。最大サイズは、4GBから1を引いたバイト数にデータベース・ブロック・サイズを掛けた値です。各国語キャラクタ・セットのデータを格納します。

113

BLOB

バイナリ・ラージ・オブジェクト。最大サイズは、4GBから1を引いたバイト数にデータベース・ブロック・サイズを掛けた値です。

114

BFILE

データベース外に保存された大きなバイナリ・ファイルへロケータを格納。データベース・サーバー上に存在する外部LOBへのバイト・ストリームI/Oアクセスを可能にします。最大サイズは4GBです。

次の項では、Oracle Databaseに格納されるOracleデータ型について説明します。これらのデータ型をリテラルとして指定する方法については、「リテラル」を参照してください。

文字データ型

文字データ型を使用すると、単語や自由形式のテキストなど、データベース・キャラクタ・セットまたは各国語キャラクタ・セットの文字(英数字)を格納できます。文字データ型は、他のデータ型より制限が少ないため、プロパティも少なくなります。たとえば、文字データ型の列は、すべての英数字の値を格納できますが、NUMBER型の列が格納できるのは数値のみです。

文字データは、7ビットASCIIやEBCDICなど、データベース作成時に指定されたキャラクタ・セットの1つに対応しているバイト値で文字列に格納されます。Oracle Databaseは、シングルバイトのキャラクタ・セットとマルチバイトのキャラクタ・セットの両方をサポートします。

次のデータ型が、文字データに対して使用されます。

- CHARデータ型

- NCHARデータ型

- VARCHAR2データ型

- NVARCHAR2データ型

文字データ型をリテラルとして指定する方法については、「テキスト・リテラル」を参照してください。

CHARデータ型

CHARデータ型は、データベース・キャラクタ・セットの固定長の文字列を指定します。データベースの作成時には、データベース・キャラクタ・セットを指定します。

CHARの列を含む表の作成時には、sizeとして列長を指定し、その後にオプションで長さの修飾子を指定します。修飾子BYTEはバイト長セマンティクスを表し、修飾子CHARは文字長セマンティクスを表します。バイト長セマンティクスでは、sizeは列に格納するバイト数です。文字長セマンティクスでは、sizeは列に格納するデータベース・キャラクタ・セットのコード・ポイント数です。コード・ポイントは、データベース・キャラクタ・セットおよびコード・ポイントによってエンコードされた特定の文字に応じて1から4バイトです。いずれかの長さ修飾子を指定して、列の目的の長さセマンティクスを明示的に指定することをお薦めします。修飾子を指定しない場合は、列を作成しているセッションのNLS_LENGTH_SEMANTICSパラメータの値によって長さセマンティクスが定義されますが、デフォルト・セマンティクスがBYTEであるスキーマSYSに表が属している場合を除きます。

Oracleでは、CHAR列に格納されているすべての値は、選択した長さセマンティクスのsizeによって指定された長さになります。列の長さより短い値を挿入すると、列の長さにあわせるため、その値の後に空白が埋め込まれます。列に対して長すぎる値を挿入しようとすると、Oracleはエラーを戻します。列長が文字(コード・ポイント)で表現されている場合、空白埋めでは、すべての列値が同じバイト長であることは保証されません。

sizeは列定義から省略できます。デフォルト値は1です。

sizeの最大値は2000で、選択した長さセマンティクスに応じて2000バイトまたは文字(コード・ポイント)を意味します。ただし、これとは関係なく、CHAR列に格納できる文字値の絶対最大長は2000バイトです。たとえば、列長を2000文字に定義した場合でも、1つ以上のコード・ポイントの幅が1バイトより大きい2000文字の値を挿入しようとすると、エラーが戻されます。文字のsizeの値は長さの制約であり、容量を保証するものではありません。CHAR列に常にデータベース・キャラクタ・セットのsize文字を格納できるようにするには、500以下のsizeの値を使用します。

異なるキャラクタ・セットを持つデータベースおよびクライアント間で適切にデータを変換するには、CHARデータが正しい書式の文字列で構成されていることを確認してください。

関連項目:
キャラクタ・セット・サポートの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。比較セマンティクスについては、「データ型の比較規則」を参照してください。

NCHARデータ型

NCHARデータ型は、各国語キャラクタ・セットの固定長の文字列を指定します。データベースの作成時に、各国語キャラクタ・セットをAL16UTF16またはUTF8として指定します。AL16UTF16およびUTF8は、Unicodeキャラクタ・セットの2つのエンコード方式(それぞれUTF-16およびCESU-8)であるため、NCHARはUnicodeのみのデータ型です。

NCHAR列を使用して表を作成するときは、列長をsize文字として指定するか、より正確に各国語キャラクタ・セットのコード・ポイントとして指定します。1つのコード・ポイントは、コード・ポイントによってエンコードされた特定の文字に応じて、AL16UTF16では常に2バイト、UTF8では1から3バイトです。

Oracleでは、NCHAR列に格納されているすべての値は、size文字の長さになります。列の長さより短い値を挿入すると、列の長さにあわせるため、その値の後に空白が埋め込まれます。列に対して長すぎる値を挿入しようとすると、Oracleはエラーを戻します。各国語キャラクタ・セットがUTF8の場合、空白埋めでは、すべての列値が同じバイト長であることは保証されません。

sizeは列定義から省略できます。デフォルト値は1です。

sizeの最大値は、各国語キャラクタ・セットがAL16UTF16の場合は1000文字、UTF8の場合は2000文字です。ただし、これとは関係なく、NCHAR列に格納できる文字値の絶対最大長は2000バイトです。たとえば、列長を1000文字に定義した場合でも、各国語キャラクタ・セットがUTF8ですべてのコード・ポイントが3バイト幅のときに1000文字の値を挿入しようとすると、エラーが戻されます。sizeの値は長さの制約であり、容量を保証するものではありません。NCHAR列に常に両方の各国語キャラクタ・セットのsize文字を格納できるようにするには、666以下のsizeの値を使用します。

異なるキャラクタ・セットを持つデータベースおよびクライアント間で適切にデータを変換するには、NCHARデータが正しい書式の文字列で構成されていることを確認してください。

CHAR値をNCHAR列に割り当てる場合、値はデータベース・キャラクタ・セットから各国語キャラクタ・セットに暗黙的に変換されます。NCHAR値をCHAR列に割り当てる場合、値は各国語キャラクタ・セットからデータベース・キャラクタ・セットに暗黙的に変換されます。NCHAR値の文字の一部をデータベース・キャラクタ・セットで表現できない場合、セッション・パラメータNLS_NCHAR_CONV_EXCPの値がTRUEのときは、エラーが戻されます。パラメータの値がFALSEの場合は、表現できない文字はデータベース・キャラクタ・セットのデフォルトの置換文字(通常は疑問符?または逆疑問符¿)に置き換えられます。

関連項目:
Unicodeデータ型のサポートについては、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

VARCHAR2データ型

VARCHAR2データ型は、データベース・キャラクタ・セットの可変長の文字列を指定します。データベースの作成時には、データベース・キャラクタ・セットを指定します。

VARCHAR2の列を含む表の作成時には、sizeとして列長を指定し、その後にオプションで長さの修飾子を指定する必要があります。修飾子BYTEはバイト長セマンティクスを表し、修飾子CHARは文字長セマンティクスを表します。バイト長セマンティクスでは、sizeは列に格納できる最大バイト数です。文字長セマンティクスでは、sizeは列に格納できるデータベース・キャラクタ・セットの最大コード・ポイント数です。コード・ポイントは、データベース・キャラクタ・セットおよびコード・ポイントによってエンコードされた特定の文字に応じて1から4バイトです。いずれかの長さ修飾子を指定して、列の目的の長さセマンティクスを明示的に指定することをお薦めします。修飾子を指定しない場合は、列を作成しているセッションのNLS_LENGTH_SEMANTICSパラメータの値によって長さセマンティクスが定義されますが、デフォルト・セマンティクスがBYTEであるスキーマSYSに表が属している場合を除きます。

文字値は、列の長さを超えない場合、空白埋めなしに、指定したとおりにVARCHAR2列に格納されます。最大長を超える値を挿入しようとすると、Oracleはエラーを戻します。

sizeの最小値は1です。最大値は次のとおりです。

- 32767 (MAX_STRING_SIZE = EXTENDEDの場合)

- 4000 (MAX_STRING_SIZE = STANDARDの場合)

MAX_STRING_SIZE初期化パラメータと拡張データ型の内部記憶域メカニズムの詳細は、「拡張データ型」を参照してください。

sizeはバイトまたは文字(コード・ポイント)で表現できますが、VARCHAR2列に格納できる文字値の独立した絶対最大長は、MAX_STRING_SIZEに応じて32767または4000バイトです。たとえば、列長を32767文字に定義した場合でも、1つ以上のコード・ポイントの幅が1バイトより大きい32767文字の値を挿入しようとすると、エラーが戻されます。文字のsizeの値は長さの制約であり、容量を保証するものではありません。VARCHAR2列に常にデータベース・キャラクタ・セットのsize文字を格納できるようにするには、MAX_STRING_SIZE = EXTENDEDの場合は8191以下、MAX_STRING_SIZE = STANDARDの場合は1000以下のsizeの値を使用します。

Oracleは、非空白埋め比較セマンティクスを使用してVARCHAR2値を比較します。

異なるキャラクタ・セットを持つデータベース間で適切にデータを変換するには、VARCHAR2データが正しい書式の文字列で構成されていることを確認してください。キャラクタ・セット・サポートの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

関連項目:
比較セマンティクスについては、「データ型の比較規則」を参照してください。

VARCHARデータ型

VARCHARデータ型は、使用しないでください。かわりにVARCHAR2データ型を使用してください。現在、VARCHARデータ型はVARCHAR2データ型と同じ意味で使用されていますが、VARCHARデータ型は、異なる比較セマンティクスで比較される別の可変長文字列のデータ型に変更される予定です。

NVARCHAR2データ型

NVARCHAR2データ型は、各国語キャラクタ・セットの可変長文字列を指定します。データベースの作成時に、各国語キャラクタ・セットをAL16UTF16またはUTF8として指定します。AL16UTF16およびUTF8は、Unicodeキャラクタ・セットの2つのエンコード方式(それぞれUTF-16およびCESU-8)であるため、NVARCHAR2はUnicodeのみのデータ型です。

NVARCHAR2列を使用して表を作成するときは、列長をsize文字として指定するか、より正確に各国語キャラクタ・セットのコード・ポイントとして指定する必要があります。1つのコード・ポイントは、コード・ポイントによってエンコードされた特定の文字に応じて、AL16UTF16では常に2バイト、UTF8では1から3バイトです。

文字値は、列の長さを超えない場合、空白埋めなしに、指定したとおりにNVARCHAR2の列に格納されます。最大長を超える値を挿入しようとすると、Oracleはエラーを戻します。

sizeの最小値は1です。最大値は次のとおりです。

- MAX_STRING_SIZE = EXTENDEDで各国語キャラクタ・セットがAL16UTF16の場合は16383

- MAX_STRING_SIZE = EXTENDEDで各国語キャラクタ・セットがUTF8の場合は32767

- MAX_STRING_SIZE = STANDARDで各国語キャラクタ・セットがAL16UTF16の場合は2000

- MAX_STRING_SIZE = STANDARDで各国語キャラクタ・セットがUTF8の場合は4000

MAX_STRING_SIZE初期化パラメータと拡張データ型の内部記憶域メカニズムの詳細は、「拡張データ型」を参照してください。

文字の最大列長とは関係なく、NVARCHAR2列に格納できる値の絶対最大長は、MAX_STRING_SIZEに応じて32767または4000バイトです。たとえば、列長を16383文字に定義した場合でも、各国語キャラクタ・セットがUTF8ですべてのコード・ポイントが3バイト幅のときに16383文字の値を挿入しようとすると、エラーが戻されます。sizeの値は長さの制約であり、容量を保証するものではありません。NVARCHAR2列に常に両方の各国語キャラクタ・セットのsize文字を格納できるようにするには、MAX_STRING_SIZE = EXTENDEDの場合は10922以下、MAX_STRING_SIZE = STANDARDの場合は1333以下のsizeの値を使用します。

Oracleは、非空白埋め比較セマンティクスを使用してNVARCHAR2値を比較します。

異なるキャラクタ・セットを持つデータベースおよびクライアント間で適切にデータを変換するには、NVARCHAR2データが正しい書式の文字列で構成されていることを確認してください。

VARCHAR2値をNVARCHAR2列に割り当てる場合、値はデータベース・キャラクタ・セットから各国語キャラクタ・セットに暗黙的に変換されます。NVARCHAR2値をVARCHAR2列に割り当てる場合、値は各国語キャラクタ・セットからデータベース・キャラクタ・セットに暗黙的に変換されます。NVARCHAR2値の文字の一部をデータベース・キャラクタ・セットで表現できない場合、セッション・パラメータNLS_NCHAR_CONV_EXCPの値がTRUEのときは、エラーが戻されます。パラメータの値がFALSEの場合は、表現できない文字はデータベース・キャラクタ・セットのデフォルトの置換文字(通常は疑問符?または逆疑問符¿)に置き換えられます。

関連項目:
Unicodeデータ型のサポートについては、Oracle Databaseグローバリゼーション・サポート・ガイドを参照してください。比較セマンティクスについては、データ型の比較規則を参照してください。

数値データ型

Oracle Databaseの数値データ型は、正と負の固定小数点数と浮動小数点数、0(ゼロ)、無限大、および操作の未定義の結果である値(非数値、つまりNAN)を格納します。数値データ型をリテラルとして指定する方法については、「数値リテラル」を参照してください。

NUMBERデータ型

NUMBERデータ型は、0(ゼロ)と、絶対値が1.0×10-130以上1.0×10^126未満の範囲にある正と負の固定小数点数を格納します。1.0×10^126以上の絶対値を持つ算術式を指定した場合、Oracleはエラーを戻します。NUMBERの各値は1から22バイトである必要があります。

次の書式で固定小数点数を指定できます。

NUMBER(p,s)

それぞれの意味は、次のとおりです。

- pは精度(precision)、つまり最大有効桁数(10進)です。最上位有効桁は最も左側のゼロ以外の桁で、最下位有効桁は最も右側の桁です。Oracleは、100進数で20桁までの精度で数値の移植性を保証します。これは小数点の位置によって39桁(10進)または40桁(10進)になります。

- sは位取り(scale)、つまり小数点から最下位有効桁までの桁数です。位取りの有効範囲は-84から127です。

- 位取りが正の場合は、小数点の右側にある桁数で最下位有効桁を含んだ桁数になります。

- 位取りが負の場合、小数点の左側にある桁数です。この場合は最下位有効桁を含みません。位取りが負の場合、実際のデータは整数部分の右から指定された桁数のみ丸められるため、最下位有効桁は小数点の左側になります。たとえば、(10,-2)と指定すると100の位まで丸められます。

e表記を使用する場合、位取りは通常、精度よりも大きくなります。位取りが精度より大きい場合、精度は小数点の右側にある最大有効桁数を示します。たとえば、NUMBER(4,5)として定義された列は、小数点の後の最初の桁が0(ゼロ)である必要があり、小数点以下5桁を超える値はすべて丸められます。

入力に対する特別な整合性チェックとして、固定小数点数列の位取りと精度を指定することをお薦めします。位取りと精度を指定しても、すべての値が固定長に強制されるわけではありません。値が精度の有効範囲を超えると、Oracleはエラーを戻します。値が位取りの有効範囲を超えると、Oracleはその値を丸めます。

次の書式で整数を指定できます。

NUMBER(p)

これは、精度がpで、位取りが0の固定小数点数です(NUMBER(p,0)と同じです)。

次の書式で浮動小数点を指定できます。

NUMBER

精度および位取りを指定しない場合、最大の範囲および精度をOracleの数値に指定したことになります。

関連項目:
「浮動小数点数」

表2-2に、異なる精度および位取りを使用したOracleのデータの格納方法を示します。

表2-2 精度および位取りの格納

実際のデータ

指定する精度と位取り

格納されるデータ

123.89

NUMBER

123.89

123.89

NUMBER(3)

124

123.89

NUMBER(3,2)

精度を超える

123.89

NUMBER(4,2)

精度を超える

123.89

NUMBER(5,2)

123.89

123.89

NUMBER(6,1)

123.9

123.89

NUMBER(6,-2)

100

.01234

NUMBER(4,5)

.01234

.00012

NUMBER(4,5)

.00012

.000127

NUMBER(4,5)

.00013

.0000012

NUMBER(2,7)

.0000012

.00000123

NUMBER(2,7)

.0000012

1.2e-4

NUMBER(2,5)

0.00012

1.2e-5

NUMBER(2,5)

0.00001

FLOATデータ型

FLOATデータ型は、NUMBERのサブタイプです。このデータ型は、精度とともに指定するか、または精度なしで指定でき、その定義はNUMBERの場合と同じであり、1から126の範囲で指定します。位取りは指定できませんが、データから解釈されます。FLOATの各値は1から22バイトである必要があります。

2進精度から10進精度に変換するには、nに0.30103を乗算します。10進精度から2進精度に変換するには、10進精度に3.32193を乗算します。2進精度の126桁は、10進精度の38桁とほぼ等しくなります。

NUMBERとFLOATの違いは、例を使用して説明します。次の例では、同じ値がNUMBER列とFLOAT列に挿入されます。

CREATE TABLE test (col1 NUMBER(5,2), col2 FLOAT(5));

INSERT INTO test VALUES (1.23, 1.23);
INSERT INTO test VALUES (7.89, 7.89);
INSERT INTO test VALUES (12.79, 12.79);
INSERT INTO test VALUES (123.45, 123.45);

SELECT * FROM test;

COL1       COL2
---------- ----------
1.23        1.2
7.89        7.9
12.79         13
123.45        120

この例では、戻されるFLOATの値は、5桁(2進)を超えることはできません。5桁(2進)で表すことができる10進数の最大値は31です。最後の行には、31を超える10進値が含まれています。このため、FLOATの値は、その有効桁数が5桁(2進)を超えないように切り捨てられる必要があります。したがって、123.45は、2桁の有効桁数(10進)のみを持ち、4桁(2進)しか必要のない120に丸められます。

ANSIのFLOATデータを変換する際、Oracle Databaseは、OracleのFLOATデータ型を内部的に使用します。OracleのFLOATは使用可能ですが、BINARY_FLOATおよびBINARY_DOUBLEデータ型の方がより堅牢であるため、これらのデータ型を使用することをお薦めします。詳細は、「浮動小数点数」を参照してください。

浮動小数点数

浮動小数点数は、最初の桁から最後の桁までの任意の位置に小数点を置くことも、小数点を省略することもできます。指数は、数字の後に増加する桁数を表すときに、オプションで使用されます(たとえば、1.777 e-20)。小数点以下の桁数に制限はないため、浮動小数点数に対して位取りは指定できません。

2進浮動小数点数とNUMBERでは、Oracle Databaseによる内部的な値の格納方法が異なります。NUMBERの場合、値は10進精度を使用して格納されます。NUMBERでサポートされる範囲内および精度内のすべてのリテラルは、NUMBERとして正確に格納されます。これは、リテラルが10進精度(0から9)を使用して表されるためです。2進浮動小数点数は、2進精度(0および1)を使用して格納されます。このような格納スキームでは、10進精度を使用したすべての値を正確に表すことができません。値を10進精度から2進精度に変換するときに発生するエラーは、その値を2進精度から10進精度に戻すときには発生しない場合が多くあります。リテラル0.1はその一例です。

Oracle Databaseでは、浮動小数点数専用の2種類の数値データ型を提供しています。

BINARY_FLOAT

BINARY_FLOATは、32ビットの単精度浮動小数点数データ型です。BINARY_FLOATの各値には4バイトが必要です。

BINARY_DOUBLE

BINARY_DOUBLEは、64ビットの倍精度浮動小数点数データ型です。各BINARY_DOUBLEの値には8バイトが必要です。

NUMBER列では、浮動小数点数は10進精度を持ちます。BINARY_FLOAT列またはBINARY_DOUBLE列では、浮動小数点数は2進精度を持ちます。2進浮動小数点数では、特殊な値である無限大およびNaN(非数値)がサポートされます。

表2-3に示す制限内で、浮動小数点数を指定できます。浮動小数点数を指定する書式については、「数値リテラル」を参照してください。

表2-3 浮動小数点数の制限

値

BINARY_FLOAT

BINARY_DOUBLE

正の最大有限値

3.40282E+38F

1.79769313486231E+308

正の最小有限値

1.17549E-38F

2.22507485850720E-308

IEEE754への規格準拠 Oracleの浮動小数点データ型の実装は、2進浮動小数点算術の電気電子学会(IEEE)規格であるIEEE754-1985(IEEE754)規格に準拠しています。浮動小数点データ型は次の点でIEEE754に準拠しています。

- SQLファンクションSQRTは平方根を実装します。「SQRT」を参照してください。

- SQLファンクションREMAINDERは余りを実装します。「REMAINDER」を参照してください。

- 算術演算子が準拠しています。「算術演算子」を参照してください。

- 比較演算子が準拠しています。ただし、NaNと比較する場合は除きます。Oracleは、NaNが他のすべての値より大きいとみなし、NaNとNaNは等しいと評価します。「浮動小数点条件」を参照してください。

- 変換演算子が準拠しています。「変換ファンクション」を参照してください。

- デフォルトの丸めモードがサポートされています。

- デフォルトの例外処理モードがサポートされています。

- 特殊な値であるINF、-INFおよびNaNがサポートされています。「浮動小数点条件」を参照してください。

- BINARY_FLOATおよびBINARY_DOUBLEの値を整数値のBINARY_FLOATおよびBINARY_DOUBLEに丸める方法として、SQLファンクションROUND、TRUNC、CEILおよびFLOORが提供されています。

- BINARY_FLOATおよびBINARY_DOUBLEを10進値に、10進値をBINARY_FLOATおよびBINARY_DOUBLEに丸める方法として、SQLファンクションTO_CHAR、TO_NUMBER、TO_NCHAR、TO_BINARY_FLOAT、TO_BINARY_DOUBLEおよびCASTが提供されています。

浮動小数点データ型は次の点ではIEEE754に準拠していません。

- -0は+0に強制変換されます。

- NaNとの比較はサポートされていません。

- すべてのNaN値は、BINARY_FLOAT_NANまたはBINARY_DOUBLE_NANのいずれかに強制変換されます。

- デフォルト以外の丸めモードはサポートされていません。

- デフォルト以外の例外処理モードはサポートされていません。

数値の優先順位

数値データ型をサポートする操作で、操作の引数が様々なデータ型を持つ場合、Oracleが使用するデータ型は、数値の優先順位によって判断されます。数値の優先順位が最も高いデータ型はBINARY_DOUBLEであり、その次がBINARY_FLOAT、最後がNUMBERとなります。したがって、複数の数値に対する操作では、次のようになります。

- オペランドのいずれかがBINARY_DOUBLEの場合、Oracleは操作の実行前に、すべてのオペランドを暗黙的にBINARY_DOUBLEに変換しようとします。

- オペランドにBINARY_DOUBLEはないが、いずれかがBINARY_FLOATの場合、Oracleは操作の実行前に、すべてのオペランドを暗黙的にBINARY_FLOATに変換しようとします。

- それ以外の場合は、Oracleは操作の実行前に、すべてのオペランドをNUMBERに変換しようとします。

暗黙的な変換が必要な場合に変換に失敗すると、操作は実行されません。暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

他のデータ型のコンテキストでは、数値データ型の優先順位は、日時データ型と期間データ型よりも低く、文字データ型とその他のすべてのデータ型よりも高くなります。

LONGデータ型

LONG列を持つ表は作成しないでください。かわりに、LOB列(CLOB、NCLOBまたはBLOB)を使用してください。LONG列は、下位互換性のためにサポートされています。

LONG列には、2GB(2^31)から1を引いたバイト数までの可変長の文字列を格納できます。LONG列には、多くの点でVARCHAR2列と同じ特長があります。LONG列を使用すると、長いテキスト文字列を格納できます。LONG値の長さは、ご使用のコンピュータで利用できるメモリーによって制限される場合もあります。LONGリテラルは、「テキスト・リテラル」の説明のような形式になります。

既存のLONG列もLOB列に変換することをお薦めします。LOB列は、LONG列ほど制限は多くありません。LOB機能はリリースごとに拡張されていますが、LONG機能は最近のリリースでは変更されていません。LONG列からLOB列への変換については、「ALTER TABLE」の「modify_col_properties」および「TO_LOB」を参照してください。

SQL文の中の次の場所でLONG列を参照できます。

- SELECTリスト

- UPDATE文のSET句

- INSERT文のVALUES句

LONG値を使用する場合には、次の制限があります。

- 表には複数のLONG列を含めることはできません。

- LONG属性を持つオブジェクトは作成できません。

- LONG列は、WHERE句または整合性制約では指定できません(NULLおよびNOT NULL制約は除く)。

- LONG列に索引を付けることはできません。

- LONGデータは正規表現では指定できません。

- ストアド・ファンクションはLONG値を戻すことはできません。

- LONGデータ型を使用して、PL/SQLプログラム・ユニットの変数または引数を宣言できます。ただし、そのプログラム・ユニットは、SQLからコールできません。

- 単一のSQL文に指定する、すべてのLONG列、更新された表、ロックされた表は、同一データベース上にある必要があります。

- LONG列およびLONG RAW列は、分散型のSQL文で使用できません。また、レプリケートできません。

- LONGとLOBの両方の列を持つ表では、1つのSQL文でLONGとLOB列の両方に4000バイトより大きいデータをバインドすることはできません。ただし、LONG列またはLOB列のいずれか一方には、4,000バイトを超えるデータをバインドできます。

また、LONG列はSQL文の次のような部分では使用できません。

- GROUP BY句、ORDER BY句、CONNECT BY句またはSELECT文にあるDISTINCT演算子

- SELECT文のUNIQUE演算子

- CREATE CLUSTER文の列リスト

- CREATE MATERIALIZED VIEW文のCLUSTER句

- SQL組込みファンクション、式または条件

- GROUP BY句を含む問合せのSELECT構文のリスト

- UNION、INTERSECTまたはMINUS集合演算子によって結合されている副問合せまたは問合せのSELECT構文のリスト

- CREATE TABLE ... AS SELECT文のSELECT構文のリスト

- ALTER TABLE ... MOVE文

- INSERT文の副問合せのSELECT構文のリスト

トリガーでは、LONGデータ型は次のように使用されます。

- トリガー内のSQL文で、データをLONG列に挿入できます。

- LONG列のデータをCHARやVARCHAR2などの制約があるデータ型に変換できる場合は、トリガー内のSQL文でLONG列を参照できます。

- トリガー内の変数は、LONGデータ型を使用して宣言できません。

- :NEWと:OLDはLONG列で使用できません。

Oracle Call Interfaceを使用して、データベースからLONG値の一部を検索できます。

関連項目:
『Oracle Call Interfaceプログラマーズ・ガイド』

日時および期間データ型

日時データ型には、DATE、TIMESTAMP、TIMESTAMP WITH TIME ZONEおよびTIMESTAMP WITH LOCAL TIME ZONEがあります。日時データ型の値は、「日時」とも呼ばれます。期間データ型には、INTERVAL YEAR TO MONTHおよびINTERVAL DAY TO SECONDがあります。期間データ型の値は、「期間」とも呼ばれます。日時値と期間値をリテラルとして表す方法の詳細は、「日時リテラル」および「期間リテラル」を参照してください。

日時および期間はいずれもフィールドで構成されます。これらのフィールドの値は、データ型の値によって決まります。表2-4に、日時フィールド、および日時と期間の有効な値を示します。

日時データのDML操作で正しい結果を得るには、組込みSQLファンクションDBTIMEZONEおよびSESSIONTIMEZONEで問い合せることによって、データベースおよびセッションのタイムゾーンを確認します。タイムゾーンを手動で設定していない場合、Oracle Databaseは、オペレーティング・システムのタイムゾーンをデフォルトで使用します。オペレーティング・システムのタイムゾーンがOracleで有効でない場合は、Oracleは、協定世界時(UTC)(以前のグリニッジ標準時)をデフォルトの値として使用します。

表2-4 日時フィールド、および日時と期間の値

日時フィールド

日時に有効な値

期間に有効な値

YEAR

-4712から9999(0を除きます)

正または負のすべての整数

MONTH

01から12

0から11

DAY

01から31(現在のNLSカレンダ・パラメータに従ったMONTHおよびYEARの値の範囲内)

正または負のすべての整数

HOUR

00から23

0から23

MINUTE

00から59

0から59

SECOND

00から59.9(n)(「9(n)」は秒の小数部の精度。)DATEには適用されません。

00から59.9(n)(「9(n)」は秒の小数部の期間の精度)

TIMEZONE_HOUR

-12から14(この範囲は夏時間の変更を保存します。)DATEまたはTIMESTAMPには適用されません。

適用なし

TIMEZONE_MINUTE

(表の後の注意を参照)

00から59。DATEまたはTIMESTAMPには適用されません。

適用なし

TIMEZONE_REGION

V$TIMEZONE_NAMESデータ・ディクショナリ・ビュー内のTZNAME列を問い合せます。DATEまたはTIMESTAMPには適用されません。すべてのタイムゾーン地域名のリストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

適用なし

TIMEZONE_ABBR

V$TIMEZONE_NAMESデータ・ディクショナリ・ビュー内のTZABBREV列を問い合せます。DATEまたはTIMESTAMPには適用されません。

適用なし

注意:
TIMEZONE_HOURおよびTIMEZONE_MINUTEは同時に指定され、+|- hh:miの形式(-12:59から+14:00までの値を使用)で1つのエンティティとして解釈されます。APIにタイムゾーン値を指定する方法の詳細は、『Microsoft Windows用Oracle Data Provider for .NET開発者ガイド』を参照してください。

DATEデータ型

DATEデータ型は、日付および時刻の情報を格納するために使用します。日付および時刻の情報は、文字データ型および数値データ型で表現できますが、DATEデータ型には特別に対応付けられているプロパティがあります。各DATE値には、年、月、日、時、分および秒の情報が格納されます。

DATE値をリテラルに指定するか、文字値や数値をTO_DATEファンクションによって日付値に変換できます。これらの方法でのDATE値の表し方の例は、「日時リテラル」を参照してください。

ユリウス日の使用方法

ユリウス日は、紀元前4712年1月1日から経過した日数です。ユリウス日によって共通の基準で日付を算定できます。日付ファンクションTO_DATEとTO_CHARで日付書式モデル「J」を使用して、OracleのDATE値とユリウス日の間で変換を行うことができます。

注意:
Oracle Databaseでは、ユリウス日の計算に天文学方式を使用しています。この方式では、紀元前4713年は-4712として計算されます。これに対し、歴史学方式では、紀元前4713年は-4713として計算されます。Oracleのユリウス日を、歴史学方式で計算した値と比較する場合には、紀元前の日付に365日の違いがあることに注意してください。詳細は、http://aa.usno.navy.mil/faq/docs/millennium.phpを参照してください。

デフォルトの日付値は次のように決まります。

- 年は現在の年で、SYSDATEで戻されます。

- 月は現在の月で、SYSDATEで戻されます。

- 日は01、つまり月の最初の日になります。

- 時、分、秒はすべて0です。

これらのデフォルト値は、次の例(5月に発行)のように、日付が指定されていない場合に日付値を要求する問合せで使用されます。

SELECT TO_DATE('2009', 'YYYY')
FROM DUAL;

TO_DATE('
---------
01-MAY-09

例 次の文では、2009年1月1日をユリウス日で戻します。

SELECT TO_CHAR(TO_DATE('01-01-2009', 'MM-DD-YYYY'),'J')
FROM DUAL;

TO_CHAR
-------
2454833

関連項目:
DUAL表については、「DUAL表からの選択」を参照してください。

TIMESTAMPデータ型

TIMESTAMPデータ型は、DATEデータ型の拡張機能です。DATEデータ型の年、月および日に加えて、時、分および秒の値を格納します。このデータ型は、正確な時刻値の格納と、複数の地域にまたがる日時情報の収集および評価に有効です。TIMESTAMPデータ型は次のように指定します。

TIMESTAMP [(fractional_seconds_precision)]

fractional_seconds_precisionには、オプションで、Oracleが格納する桁数を、SECOND日時フィールドの小数部まで指定します。このデータ型の列を作成する場合、0から9の値を指定できます。デフォルトは6です。

関連項目:
文字データからTIMESTAMPデータへの変換については、「TO_TIMESTAMP」を参照してください。

TIMESTAMP WITH TIME ZONEデータ型

TIMESTAMP WITH TIME ZONEは、タイムゾーン地域名またはタイムゾーン・オフセットを値に含むTIMESTAMPの変形です。タイムゾーン・オフセットは、ローカルの時刻とUTC(時および分)との差異です。このデータ型は、ローカル・タイムゾーン情報を保持する場合に有効です。

TIMESTAMP WITH TIME ZONEデータ型は、次のように指定します。

TIMESTAMP [(fractional_seconds_precision)] WITH TIME ZONE

fractional_seconds_precisionには、オプションで、Oracleが格納する桁数を、SECOND日時フィールドの小数部まで指定します。このデータ型の列を作成する場合、0から9の値を指定できます。デフォルトは6です。

Oracleのタイムゾーン・データは、http://www.iana.org/time-zones/で入手できるパブリック・ドメイン情報から導出されます。Oracleのタイムゾーン・データは、このサイトで入手できる最新のデータを反映していない場合があります。

関連項目:

- Oracleのタイムゾーン・データの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

- 夏時間のサポートについては、「夏時間のサポート」および表2-17「FX書式モデル修飾子による文字データと書式モデルの一致」を参照してください。

- 文字データからTIMESTAMP WITH TIME ZONEデータへの変換については、「TO_TIMESTAMP_TZ」を参照してください。

- ERROR_ON_OVERLAP_TIMEセッション・パラメータについては、「ALTER SESSION」を参照してください。

TIMESTAMP WITH LOCAL TIME ZONEデータ型

TIMESTAMP WITH LOCAL TIME ZONEは、TIMESTAMPのもう1つの変形であり、タイムゾーン情報を識別します。これは、TIMESTAMP WITH TIME ZONEとは異なり、データベースに格納されるデータはデータベース・タイムゾーンに対して正規化され、タイムゾーン情報は列データの一部として格納されません。ユーザーがデータを検索すると、Oracleはユーザーのローカル・セッション・タイムゾーンのデータを戻します。このデータ型は、2層アプリケーションでクライアント・システムのタイムゾーンの日時情報を常に表示する場合に有効です。

TIMESTAMP WITH LOCAL TIME ZONEデータ型は、次のように指定します。

TIMESTAMP [(fractional_seconds_precision)] WITH LOCAL TIME ZONE

fractional_seconds_precisionには、オプションで、Oracleが格納する桁数を、SECOND日時フィールドの小数部まで指定します。このデータ型の列を作成する場合、0から9の値を指定できます。デフォルトは6です。

Oracleのタイムゾーン・データは、http://www.iana.org/time-zones/で入手できるパブリック・ドメイン情報から導出されます。Oracleのタイムゾーン・データは、このサイトで入手できる最新のデータを反映していない場合があります。

関連項目:

- Oracleのタイムゾーン・データの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

- このデータ型の使用例は、『Oracle Database開発ガイド』を参照してください。文字データからTIMESTAMP WITH LOCAL TIME ZONEデータへの変換については、「CAST」を参照してください。

INTERVAL YEAR TO MONTHデータ型

INTERVAL YEAR TO MONTHは、YEARおよびMONTH日時フィールドを使用して期間を格納します。このデータ型は、年および月の値のみが重要な場合に、2つの日時の値の正確な違いを表す場合に有効です。

INTERVAL YEAR TO MONTHは、次のように指定します。

INTERVAL YEAR [(year_precision)] TO MONTH

year_precisionは、YEAR日時フィールドの桁数です。year_precisionのデフォルト値は2です。

期間値をリテラルとして指定すると、高い柔軟性が得られます。期間値をリテラルとして指定する方法の詳細は、「期間リテラル」を参照してください。期間の使用例は、「日時および期間の例」を参照してください。

INTERVAL DAY TO SECONDデータ型

INTERVAL DAY TO SECONDは、日付、時、分および秒で期間を格納します。このデータ型は、2つの日時の値の正確な違いを表す場合に有効です。

このデータ型は、次のように指定します。

INTERVAL DAY [(day_precision)]
TO SECOND [(fractional_seconds_precision)]

それぞれの意味は、次のとおりです。

- day_precisionは、DAY日時フィールドの桁数です。有効範囲は0から9です。デフォルトは2です。

- fractional_seconds_precisionは、SECOND日時フィールドの小数部の桁数です。有効範囲は0から9です。デフォルトは6です。

期間値をリテラルとして指定すると、高い柔軟性が得られます。期間値をリテラルとして指定する方法の詳細は、「期間リテラル」を参照してください。期間の使用例は、「日時および期間の例」を参照してください。

日時および期間の演算

日付(DATE)、タイムスタンプ(TIMESTAMP、TIMESTAMP WITH TIME ZONEおよびTIMESTAMP WITH LOCAL TIME ZONE)および期間(INTERVAL DAY TO SECONDおよびINTERVAL YEAR TO MONTH)データに対して、様々な演算処理を実行できます。Oracleは、次の規則に基づいて結果を計算します。

- 日付およびタイムスタンプ値の演算処理ではNUMBER定数を使用できますが、期間値では使用できません。Oracleは、タイムスタンプ値を内部的に日付値に変換し、日時の演算で使用されるNUMBER定数と期間式を日数として解析します。たとえば、SYSDATE+ 1は明日です。SYSDATE -7は1週間前です。SYSDATE + (10/1440)は10分後です。SYSDATEからemployeesサンプル表のhire_date列を引くと、各従業員が雇用されてから経過した日数が戻ります。日付値またはタイムスタンプ値の乗算や除算はできません。

- Oracleは、BINARY_FLOATオペランドおよびBINARY_DOUBLEオペランドを暗黙的にNUMBERに変換します。

- 各DATE値には時刻コンポーネントが含まれるため、多くの場合、日付操作の結果には小数部が含まれます。この小数部は、日を単位として表されています。たとえば、1.5日は36時間です。小数部は、DATEデータの一般的な操作を行うOracle組込みファンクションによっても戻されます。たとえば、MONTHS_BETWEENファンクションは、2つの日付の間の月数を戻します。結果の小数部は、月(1か月は31日)を単位として表されます。

- 1つのオペランドがDATE値または数値であり、タイムゾーンおよび小数部コンポーネントのいずれも含まない場合、次のようになります。

- Oracleは、他方のオペランドを暗黙的にDATEデータに変換します。ただし、数値と期間を掛けて期間を戻す乗算を行う場合は除きます。

- 他方のオペランドがタイムゾーン値を持つ場合、Oracleは戻り値でセッション・タイムゾーンを使用します。

- 他方のオペランドが小数部の値を持つ場合、その小数部の値は失われます。

- DATEデータ型専用に設計された組込みファンクションにタイムスタンプ値、期間値または数値を渡すと、OracleはDATE値以外の値を暗黙的にDATE値に変換します。DATEへの暗黙的な変換を実行するファンクションの詳細は、「日時ファンクション」を参照してください。

- 期間の計算が日時の値を戻す場合、その結果は実際の日時の値である必要があります。実際の日時の値でない場合、データベースはエラーを戻します。たとえば、次の2つの文はエラーを戻します。

SELECT TO_DATE('31-AUG-2004','DD-MON-YYYY') + TO_YMINTERVAL('0-1')
FROM DUAL;

SELECT TO_DATE('29-FEB-2004','DD-MON-YYYY') + TO_YMINTERVAL('1-0')
FROM DUAL;

最初の文は、1か月31日の月に1か月が追加され、9月31日となります。これは有効な日付ではないため、この文は失敗します。2つ目の文は、4年に一度のみ存在する日付に1年を追加する計算は無効であるため、失敗します。ただし、2月29日に4年を追加する計算は有効であるため、次の文は成功します。

SELECT TO_DATE('29-FEB-2004', 'DD-MON-YYYY') + TO_YMINTERVAL('4-0')
FROM DUAL;

TO_DATE('
---------
29-FEB-08

- Oracleは、すべてのタイムスタンプの演算をUTC時間で実行します。TIMESTAMP WITH LOCAL TIME ZONEでは、Oracleは、日時の値をデータベース・タイムゾーンからUTCに変換し、演算を実行した後にデータベース・タイムゾーンに変換しなおします。TIMESTAMP WITH TIME ZONEでは、日時の値は常にUTCであるため、変換は必要ありません。

表2-5に、日時の演算処理のマトリックスを示します。ダッシュはサポートされていない処理を表します。

表2-5 日時の演算のマトリックス

オペランドおよび演算子

DATE

TIMESTAMP

INTERVAL

数値

DATE

+

—

—

DATE

DATE

-

NUMBER

INTERVAL

DATE

DATE

*

—

—

—

—

/

—

—

—

—

TIMESTAMP

+

—

—

TIMESTAMP

DATE

-

INTERVAL

INTERVAL

TIMESTAMP

DATE

*

—

—

—

—

/

—

—

—

—

INTERVAL

+

DATE

TIMESTAMP

INTERVAL

—

-

—

—

INTERVAL

—

*

—

—

—

INTERVAL

/

—

—

—

INTERVAL

数値

+

DATE

DATE

—

NA

-

—

—

—

NA

*

—

—

INTERVAL

NA

/

—

—

—

NA

例 期間値の式を開始時間に追加できます。order_date列を持つサンプル表oe.ordersについて考えます。次の文は、order_date列の値に30日を加算します。

SELECT order_id, order_date + INTERVAL '30' DAY AS "Due Date"
FROM orders
ORDER BY order_id, "Due Date";

夏時間のサポート

Oracle Databaseは、指定したタイムゾーン地域に、夏時間が適用されているかを自動的に判断し、それに応じてローカル時刻の値を戻します。日時の値は、境界を除いたすべての指定した地域において、夏時間が適用されているかをOracleが判断するために有効です。夏時間の開始または終了時に、境界が発生します。たとえば、米国の太平洋地域では、夏時間の開始時、時刻は午前2時から午前3時に変更されます。午前2時と午前3時の間の1時間は存在しません。夏時間の終了時、時刻は午前2時から午前1時に変更されます。午前1時と午前2時の間の1時間は繰り返されます。

このような境界を解決するために、OracleはTZRおよびTZD書式要素を使用します。詳細は、表2-17を参照してください。TZRは、日時の入力文字列でタイムゾーン地域名を表します。たとえば、'Australia/North'、'UTC'および'Singapore'などです。TZDは、夏時間情報を含むタイムゾーン地域名の略称書式です。たとえば、米国/太平洋標準時はPST、米国/太平洋夏時間はPDTなどです。TZRおよびTZD書式要素の値を表示するには、V$TIMEZONE_NAMES動的パフォーマンス・ビューのTZNAMEおよびTZABBREV列に問合せを実行してください。

注意:
夏時間機能には、タイムゾーン地域名が必要です。この名前は、大小2つのタイムゾーン・ファイルに格納されます。これらのファイルのうち、使用する環境および使用するOracle Databaseのリリースに応じて、いずれか一方がデフォルトのファイルになります。タイムゾーン・ファイルおよびタイムゾーン名の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

両方のファイル内のすべてのタイムゾーン地域名のリストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

Oracleのタイムゾーン・データは、http://www.iana.org/time-zones/で入手できるパブリック・ドメイン情報から導出されます。Oracleのタイムゾーン・データは、このサイトで入手できる最新のデータを反映していない場合があります。

関連項目:

- 書式要素の詳細は、「日時書式モデル」を参照してください。また、「ERROR_ON_OVERLAP_TIME」セッション・パラメータの説明も参照してください。

- Oracleのタイムゾーン・データの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

- 動的パフォーマンス・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

日時および期間の例

次の例では、日時および期間データ型の指定方法を示します。

CREATE TABLE time_table
(start_time    TIMESTAMP,
duration_1    INTERVAL DAY (6) TO SECOND (5),
duration_2    INTERVAL YEAR TO MONTH);

start_time列は、TIMESTAMP型です。TIMESTAMPの暗黙的な小数部の精度は6です。

duration_1列は、INTERVAL DAY TO SECOND型です。DAYフィールドの最大桁数は6です。また、小数部の最大桁数は5です(その他のすべての日時フィールドの最大桁数は2です)。

duration_2列は、INTERVAL YEAR TO MONTH型です。各フィールド(YEARおよびMONTH)の値の最大桁数は2です。

期間データ型には書式モデルはありません。そのため、これらの表示を調整するには、EXTRACTなどの文字ファンクションを結合させて要素を連結させる必要があります。たとえば、次の例では、hr.employeesとoe.orders表にそれぞれ問合せを行い、期間出力の書式を"yy-mm"から"yy years mm months"に、および"dd-hh"から"dddd days hh hours"に変更します。

SELECT last_name, EXTRACT(YEAR FROM (SYSDATE - hire_date) YEAR TO MONTH)
|| ' years '
|| EXTRACT(MONTH FROM (SYSDATE - hire_date) YEAR TO MONTH)
|| ' months'  "Interval"
FROM employees;

LAST_NAME                 Interval
------------------------- --------------------
OConnell                  2 years 3 months
Grant                     1 years 9 months
Whalen                    6 years 1 months
Hartstein                 5 years 8 months
Fay                       4 years 2 months
Mavris                    7 years 4 months
Baer                      7 years 4 months
Higgins                   7 years 4 months
Gietz                     7 years 4 months
. . .

SELECT order_id, EXTRACT(DAY FROM (SYSDATE - order_date) DAY TO SECOND)
|| ' days '
|| EXTRACT(HOUR FROM (SYSDATE - order_date) DAY TO SECOND)
|| ' hours' "Interval"
FROM orders;

ORDER_ID Interval
---------- --------------------
2458 780 days 23 hours
2397 685 days 22 hours
2454 733 days 21 hours
2354 447 days 20 hours
2358 635 days 20 hours
2381 508 days 18 hours
2440 765 days 17 hours
2357 1365 days 16 hours
2394 602 days 15 hours
2435 763 days 15 hours
. . .

RAWデータ型とLONG RAWデータ型

RAWデータ型とLONG RAWデータ型には、異なるシステム間でデータを移動する際にOracle Databaseによって明示的に変換されないデータが格納されます。これらのデータ型は、バイナリ・データまたはバイト列に使用されます。たとえば、LONG RAWは、図形、音声、文書、またはバイナリ・データの配列の格納に使用できますが、解析方法は用途によって異なります。

LONG RAW列をバイナリLOB(BLOB)へ変換することをお薦めします。LOB列は、LONG列ほど制限は多くありません。詳細は、「TO_LOB」を参照してください。

RAWは、VARCHAR2と同様に可変長データ型ですが、Oracle Net(クライアント・ソフトウェアとデータベース、またはデータベースとデータベースを接続します)およびOracleのインポート/エクスポート・ユーティリティは、RAWまたはLONG RAWデータの転送時に文字変換を行いません。これに対し、Oracle NetおよびOracleのインポート/エクスポート・ユーティリティは、自動的にCHAR、VARCHAR2およびLONGデータをあるデータベース・キャラクタ・セットから別のデータベース・キャラクタ・セットに変換するか(データがデータベース間で送信される場合)、またはデータベース・キャラクタ・セットからクライアント・キャラクタ・セットに変換します(データがデータベースとクライアントの間で送信される場合)。クライアント・キャラクタ・セットは、クライアント・インタフェースのタイプ(OCIやJDBCなど)およびクライアント構成(たとえば、NLS_LANG環境変数)によって決定されます。

OracleがRAWまたは LONG RAWデータを文字データに暗黙的に変換する場合、結果として生成される文字値は、バイナリ入力を16進表記で表したものになり、各文字はRAWデータの連続した4つのビットを表す16進数(0-9、A-F)になります。たとえば、ビット列が11001011で表示される1バイトのRAWデータは、CBという値になります。

Oracleは、文字データをRAWまたはLONG RAWに暗黙的に変換する場合、連続した入力文字をバイナリ・データの4つの連続したビットを16進表記で表したものとして解釈し、これらのビットを連結してRAWまたはLONG RAW値を生成します。入力文字の中に16進数(0-9、A-F、a-f)以外の文字がある場合は、エラーが報告されます。文字数が奇数の場合、結果は未定義になります。

SQLファンクションRAWTOHEXおよびHEXTORAWは、前述の暗黙的な変換と同等の明示的な変換を行います。オラクル社が提供するPL/SQLパッケージ(UTL_RAWおよびUTL_I18N)のファンクションを使用すると、RAWおよび文字データ間の他のタイプの変換を行うことができます。

ラージ・オブジェクト(LOB)・データ型

組込みLOBデータ型のBLOB、CLOB、NCLOB(内部ファイルに格納)およびBFILE(外部ファイルに格納)には、構造化されていない大きいデータ(text、image、video、spatial dataなど)を格納できます。BLOB、CLOBおよびNCLOBデータの最大サイズは、2^32から1を引いたバイト数にLOB記憶域のCHUNKパラメータの値を掛けた値です。データベースの表領域が標準のブロック・サイズで、LOB列を作成したときにLOB記憶域のCHUNKパラメータのデフォルト値を使用した場合には、前述の値は2^32バイトから1を引いた値にデータベース・ブロック・サイズを掛けた値に等しくなります。BFILEデータの最大サイズは、2^64バイトから1を引いた値ですが、この最大サイズはオペレーティング・システムによって制限される場合があります。

表を作成するときに、LOB列またはLOBオブジェクト属性に、オプションで表に指定したものとは異なる表領域および記憶特性を指定できます。

LOB列の作成時に行の記憶域を使用可能にしている場合、CLOB、NCLOBおよびBLOBの値は、約4000バイトを上限として表内に格納されます。4000バイトを超えるLOBは、常に外部ファイルに格納されます。詳細は、「ENABLE STORAGE IN ROW」を参照してください。

LOB列には、内部のLOB値(データベース内)または外部のLOB値(データベース外)を参照できるLOBロケータが含まれています。表からLOBを選択すると、実際にはLOBのロケータが戻され、LOB値全体は戻されません。LOBに対するDBMS_LOBパッケージとOracle Call Interface(OCI)の操作は、これらのロケータを介して行われます。

LOBは、LONG型およびLONG RAW型と似ていますが、次の点で異なります。

- LOBは、オブジェクト型(ユーザー定義のデータ型)の属性に指定できます。

- LOBロケータは、表の列に格納されます。実際のLOB値は、表の列に格納される場合と格納されない場合があります。BLOB、NCLOBおよびCLOBの値は、別々の表領域に格納されます。BFILEデータは、サーバー上の外部ファイルに格納されます。

- LOB列にアクセスしたときに戻されるのはロケータです。

- LOBの最大サイズは、2^32から1を引いたバイト数にデータベース・ブロック・サイズを掛けた値です。BFILEデータの最大サイズは、2^64バイトから1を引いた値ですが、この最大サイズはオペレーティング・システムによって制限される場合があります。

- LOBでは、効果的かつランダムなピース単位のデータ・アクセスおよび操作が可能です。

- 1つの表内に2つ以上のLOB列を定義できます。

- NCLOBの例外を除いて、1つのオブジェクトに1つ以上のLOB属性を定義できます。

- LOBバインド変数を宣言できます。

- LOB列とLOB属性を選択できます。

- 1つ以上のLOB列または1つ以上のLOB属性を持つオブジェクトが含まれている新しい行を挿入したり、既存の行を更新できます。更新操作では、内部LOB値をNULL、つまり空に設定したり、LOB全体をデータに置き換えられます。BFILEは、NULLに設定したり、別のファイルを指すように設定できます。

- LOB行と列の交差部またはLOB属性を、別のLOB行と列の交差部またはLOB属性を使用して更新できます。

- LOB列またはLOB属性が含まれている行を削除できます(これによってLOB値も削除されます)。BFILEの場合、実際のオペレーティング・システム・ファイルは削除されません。

INSERT文またはUPDATE文を発行するだけで、表内LOB列(データベースに格納されているLOB列)またはLOB属性(データベースに格納されているオブジェクト型列の属性)の行にアクセスして移入することができます。

LOB列の制限事項: LOB列には、多数のルールおよび制限事項があります。詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。

関連項目:

- これらのインタフェースおよびLOBの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』および『Oracle Call Interfaceプログラマーズ・ガイド』を参照してください。

- LONG列からLOB列への変換については、「ALTER TABLE」の「modify_col_properties」および「TO_LOB」を参照してください。

BFILEデータ型

BFILEデータ型を使用すると、Oracle Database外のファイル・システムに格納されているバイナリ・ファイルLOBにアクセスできます。BFILE列または属性には、サーバーのファイル・システム上のバイナリ・ファイルに対するポインタとして機能する、BFILEロケータが格納されます。ロケータには、ディレクトリ名とファイル名が保持されます。

BFILENAMEファンクションを使用すると、実表のデータに影響を与えずにBFILEのファイル名およびパスを変更できます。この組込みSQLファンクションの詳細は、「BFILENAME」を参照してください。

バイナリ・ファイルLOBは、トランザクションには関係なく、リカバリができません。ファイルの統合性と耐久性を提供しているのは基本にあるオペレーティング・システムです。BFILEデータの最大サイズは、2^64バイトから1を引いた値ですが、この最大サイズはオペレーティング・システムによって制限される場合があります。

データベース管理者は、外部ファイルが存在し、Oracleのプロセスがファイルに対するオペレーティング・システムの読取り権限を持っていることを確認する必要があります。

BFILEデータ型を使用すると、サイズが大きいバイナリ・ファイルの読取り専用のサポートが有効になります。この場合、ファイルを修正またはレプリケートすることはできません。Oracleでは、ファイル・データにアクセスするためのAPIが提供されています。ファイル・データにアクセスするために使用する主なインタフェースは、DBMS_LOBパッケージとOracle Call Interface(OCI)です。

関連項目:
LOBの詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』および『Oracle Call Interfaceプログラマーズ・ガイド』を参照してください。また、「CREATE DIRECTORY」も参照してください。

BLOBデータ型

BLOBデータ型は、構造化されていないバイナリ・ラージ・オブジェクトを格納するために使用します。BLOBオブジェクトは、キャラクタ・セットのセマンティクスを持たないビットストリームとして考えることができます。BLOBオブジェクトには、4GBから1を引いたバイト数にLOB記憶域のCHUNKパラメータの値を掛けた値のサイズまでのバイナリ・データを格納できます。データベースの表領域が標準のブロック・サイズで、LOB列を作成したときにLOB記憶域のCHUNKパラメータのデフォルト値を使用した場合には、前述の値は4GBから1を引いた値にデータベース・ブロック・サイズを掛けた値に等しくなります。

BLOBオブジェクトでは、トランザクションが完全にサポートされます。SQL、DBMS_LOBパッケージまたはOracle Call Interface(OCI)を介して行った変更は、すべてトランザクションに反映されます。BLOB値の操作は、コミットおよびロールバックできます。ただし、1つのトランザクションのPL/SQLまたはOCI変数をBLOBロケータに保存し、そのロケータを別のトランザクションまたはセッションで使用することはできません。

CLOBデータ型

CLOBデータ型は、シングルバイトおよびマルチバイト・キャラクタ・データを格納するために使用します。固定幅および可変幅のキャラクタ・セットがサポートされます。両方のキャラクタ・セットでデータベース・キャラクタ・セットを使用します。CLOBオブジェクトには、4GBから1を引いたバイト数にLOB記憶域のCHUNKパラメータの値を掛けた値のサイズまでの文字データを格納できます。データベースの表領域が標準のブロック・サイズで、LOB列を作成したときにLOB記憶域のCHUNKパラメータのデフォルト値を使用した場合には、前述の値は4GBから1を引いた値にデータベース・ブロック・サイズを掛けた値に等しくなります。

CLOBオブジェクトでは、トランザクションが完全にサポートされます。SQL、DBMS_LOBパッケージまたはOracle Call Interface(OCI)を介して行った変更は、すべてトランザクションに反映されます。CLOB値の操作は、コミットおよびロールバックできます。ただし、1つのトランザクションのPL/SQLまたはOCI変数をCLOBロケータに保存し、そのロケータを別のトランザクションまたはセッションで使用することはできません。

NCLOBデータ型

NCLOBデータ型は、Unicodeデータを格納するために使用します。固定幅および可変幅のキャラクタ・セットがサポートされます。両方のキャラクタ・セットで各国語キャラクタ・セットを使用します。NCLOBオブジェクトには、4GBから1を引いたバイト数にLOB記憶域のCHUNKパラメータの値を掛けた値のサイズまでの文字テキスト・データを格納できます。データベースの表領域が標準のブロック・サイズで、LOB列を作成したときにLOB記憶域のCHUNKパラメータのデフォルト値を使用した場合には、前述の値は4GBから1を引いた値にデータベース・ブロック・サイズを掛けた値に等しくなります。

NCLOBオブジェクトでは、トランザクションが完全にサポートされます。SQL、DBMS_LOBパッケージまたはOCIを介して行った変更は、すべてトランザクションに反映されます。NCLOB値の操作は、コミットおよびロールバックできます。ただし、1つのトランザクションのPL/SQLまたはOCI変数をNCLOBロケータに保存し、そのロケータを別のトランザクションまたはセッションで使用することはできません。

関連項目:
Unicodeデータ型のサポートについては、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

拡張データ型

Oracle Database 12c以降では、VARCHAR2、NVARCHAR2、およびRAWの各データ型に、32,767バイトの最大サイズを指定できます。この新しい最大サイズをデータベースでサポートするかどうかは、初期化パラメータMAX_STRING_SIZEを次のように設定することで制御できます。

- MAX_STRING_SIZE = STANDARDの場合、Oracle Database 12cより前のリリースのサイズ制限が適用されます。このサイズ制限は、VARCHAR2データ型とNVARCHAR2データ型については4,000バイト、およびRAWデータ型については2,000バイトになります。これはデフォルトです。

- MAX_STRING_SIZE = EXTENDEDの場合、VARCHAR2、NVARCHAR2、およびRAWの各データ型について、サイズ制限は32,767バイトになります。

注意:
MAX_STRING_SIZE = EXTENDEDを設定すると、データベース・オブジェクトを更新することになる場合があり、そのオブジェクトを無効化してしまう可能性があります。このパラメータの影響と、この新機能を設定して有効化する方法の詳細は、『Oracle Databaseリファレンス』を参照してください。

4,000バイト以上のサイズを宣言したVARCHAR2データ型またはNVARCHAR2データ型、または2,000バイト以上のサイズを宣言したRAWデータ型は、拡張データ型になります。拡張データ型の列は、OracleのLOBテクノロジを利用して表外に格納されます。LOB記憶域は、常に表と連動します。自動セグメント領域管理(ASSM)で管理された表領域の場合、拡張データ型の列はSecureFiles LOBとして格納されます。それ以外の場合は、BasicFiles LOBとして格納されます。記憶域メカニズムとしてのLOBは、内部使用に限定されています。そのため、これに該当するLOBは、DBMS_LOBを使用して操作することはできません。

注意:

- BasicFiles LOBを記憶域メカニズムとして使用しないでください。BasicFiles LOBが拡張データ型の列の機能を制限するうえに、将来のリリースでBasicFilesデータ型が非推奨になる予定だからです。

- 拡張データ型には、LOBと同じルールと制限が適用されます。詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。

RAWデータ型に2,000バイトを超えるサイズを設定するには、MAX_STRING_SIZE = EXTENDEDを設定する必要がありますが、RAWデータ型は、そのサイズが4,000バイトを超える場合にのみ、表外LOBとして格納されることに注意してください。たとえば、RAW(3000)のデータ型を宣言するには、MAX_STRING_SIZE = EXTENDEDを設定する必要があります。ただし、その列は表内に格納されます。

拡張データ型は、標準のデータ型と同様に使用できますが、次のような考慮事項があります。

- 拡張データ型の列に対して索引を作成するときや、索引で主キー制約または一意制約を適用する必要があるときの特別な考慮事項は、「拡張データ型の列に対する索引の作成」を参照してください。

- リスト・パーティションのパーティション化キー列が拡張データ型の列の場合、パーティションに対して指定しようとする値のリストがパーティション・バウンドの制限(4KB)を超えていることがあります。この問題を回避する方法の詳細は、CREATE TABLEの「list_partitions」句を参照してください。

- 初期化パラメータMAX_STRING_SIZEの値が影響する項目は、次のとおりです。

- テキスト・リテラルの最大長。詳細は、「テキスト・リテラル」を参照してください。

- 2つの文字列を連結した場合のサイズ制限。詳細は、「連結演算子」を参照してください。

- NLSSORTファンクションから返される照合キーの長さ。「NLSSORT」を参照してください。

- XMLFormatオブジェクトの一部の属性のサイズ。詳細は、「XML書式モデル」を参照してください。

- XMLファンクションのXMLCOLATTVAL、XMLELEMENT、XMLFOREST、XMLPI、およびXMLTABLEの一部の式のサイズ。

ROWIDデータ型

データベース内の各行にはアドレスがあります。次の項では、Oracle Databaseにおける行のアドレスの2つの書式について説明します。

ROWIDデータ型

Oracle Database固有のヒープ構成表内の行は、ROWIDという行のアドレスを持ちます。疑似列ROWIDを問い合せることによって、ROWIDの行のアドレスを調べることができます。この疑似列の値は、各行のアドレスを表す文字列です。文字列のデータ型はROWIDです。また、ROWIDデータ型を持つ実際の列を含む表やクラスタを作成することもできます。Oracle Databaseでは、このような列の値が有効なROWIDであることは保証されません。ROWID疑似列の詳細は、第3章「疑似列」を参照してください。

ROWIDには、次の情報が含まれています。

- 行を含むデータファイルのデータ・ブロック。この文字列の長さは、オペレーティング・システムによって異なります。

- データ・ブロック内の行。

- 行を含むデータベース・ファイル。最初のデータファイルは1になります。この文字列の長さは、オペレーティング・システムによって異なります。

- すべてのデータベース・セグメントに割り当てられる識別番号であるデータ・オブジェクト番号。データ・オブジェクト番号は、データ・ディクショナリ・ビューのUSER_OBJECTS、DBA_OBJECTSおよびALL_OBJECTSから取り出すことができます。同じセグメントを共有するオブジェクト(たとえば、同じクラスタ内のクラスタ化された表など)には、同じオブジェクト番号が付けられます。

ROWIDは、BASE 64の値で格納され、文字AからZ、aからz、0から9、プラス記号(+)およびスラッシュ(/)を含めることができます。ROWIDは、直接は使用できません。ROWIDの内容を解析するには、提供されているパッケージDBMS_ROWIDを使用します。パッケージ・ファンクションを使用すると、前述の4つのROWIDの要素に関する情報を抽出して利用できます。

関連項目:
DBMS_ROWIDパッケージで使用できるファンクション、およびこのファンクションの使用方法については、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

UROWIDデータ型

物理アドレスまたは永続アドレス以外のアドレス、またはOracle Databaseが生成したものではないアドレスがある行を持つ表もあります。たとえば、索引構成表の行のアドレスは索引リーフに格納され、移動できます。外部キー表のROWID(たとえば、ゲートウェイを介してアクセスされるDB2)は、標準のOracle ROWIDではありません。

Oracleでは、ユニバーサルROWID(UROWID)を使用して索引構成表および外部キー表のアドレスを格納します。索引構成表には、論理UROWIDがあり、外部キー表には外部キーUROWIDがあります。いずれのタイプのUROWIDも、(ヒープ構成表の物理ROWIDのように)ROWID疑似列に格納されます。

Oracleは、表の主キーに基づいて論理ROWIDを作成します。論理ROWIDは、主キーが変更されないかぎり、変更されません。索引構成表のROWID疑似列のデータ型は、UROWIDです。この疑似列には、ヒープ構成表のROWID疑似列と同様に(SELECT ... ROWID文を使用して)アクセスできます。索引構成表のROWIDを格納する場合、表にUROWID型の列を定義し、この列にROWID疑似列の値を取り込みます。

ANSI、DB2、SQL/DSのデータ型

表とクラスタを作成するSQL文では、ANSIデータ型、およびIBM社の製品SQL/DSとDB2のデータ型も使用できます。Oracleでは、Oracle Databaseのデータ型の名前と異なるANSIまたはIBMのデータ型の名前を認識します。データ型をOracleの同等のデータ型に変換して、Oracleのデータ型を列のデータ型の名前として記録し、次の表に示す変換に基づいて、Oracleのデータ型で列データを格納します。

表2-6 Oracleデータ型に変換されるANSIデータ型

ANSI SQLデータ型

Oracleデータ型

CHARACTER(n)

CHAR(n)

CHAR(n)

CHARACTER VARYING(n)

CHAR VARYING(n)

VARCHAR2(n)

NATIONAL CHARACTER(n)

NATIONAL CHAR(n)

NCHAR(n)

NCHAR(n)

NATIONAL CHARACTER VARYING(n)

NATIONAL CHAR VARYING(n)

NCHAR VARYING(n)

NVARCHAR2(n)

NUMERIC[(p,s)]

DECIMAL[(p,s)](注意1)

NUMBER(p,s)

INTEGER

INT

SMALLINT

NUMBER(p,0)

FLOAT(注意2)

DOUBLE PRECISION(注意3)

REAL(注意4)

FLOAT(126)

FLOAT(126)

FLOAT(63)

注意:

1. NUMERICデータ型およびDECIMALデータ型では、固定小数点数のみを指定できます。これらのデータ型では、位取りsのデフォルトは0です。

2. FLOATデータ型は、2進精度bを持つ浮動小数点数です。このデータ型のデフォルトの精度は、126桁の2進精度(38桁の10進精度)です。

3. DOUBLE PRECISIONデータ型は126桁の2進精度を持つ浮動小数点数です。

4. REALデータ型は63桁の2進精度(18桁の10進精度)を持つ浮動小数点数です。

次のSQL/DSとDB2のデータ型には、対応するOracleデータ型がありません。次のデータ型を持つ列は定義しないでください。

- GRAPHIC

- LONG VARGRAPHIC

- VARGRAPHIC

- TIME

データ型がTIMEであるデータは、Oracleの日時データとしても表現できます。

関連項目:
「日時および期間データ型」

表2-7 Oracleデータ型に変換されるSQL/DSとDB2のデータ型

SQL/DSとDB2データ型

Oracleデータ型

CHARACTER(n)

CHAR(n)

VARCHAR(n)

VARCHAR(n)

LONG VARCHAR

LONG

DECIMAL(p,s)(注意1)

NUMBER(p,s)

INTEGER

SMALLINT

NUMBER(p,0)

FLOAT(注意2)

NUMBER

注意:

1. DECIMALデータ型では、固定小数点数のみを指定できます。このデータ型では、sのデフォルトは0です。

2. FLOATデータ型はbの2進精度を持つ浮動小数点数です。このデータ型のデフォルト精度は126桁の2進精度(38桁の10進精度)です。

ユーザー定義型

ユーザー定義のデータ型は、Oracle組込みデータ型とその他のユーザー定義のデータ型を、アプリケーション内のデータの構造と動作をモデル化するオブジェクト型の構築ブロックとして使用します。次の項で、ユーザー定義型の様々なカテゴリを説明します。

関連項目:

- Oracle組込みデータ型の詳細は、『Oracle Database概要』を参照してください。

- ユーザー定義型の作成方法については、「CREATE TYPE」および「CREATE TYPE BODY」を参照してください。

- ユーザー定義型の使用方法については、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。

オブジェクト型

オブジェクト型とは、実社会エンティティ(たとえば、発注書など)を抽象化し、アプリケーション・プログラムで処理できるようにしたものです。1つのオブジェクト型は、次の3種類のコンポーネントを持つスキーマ・オブジェクトです。

- 名前 - スキーマ内でオブジェクト型を一意に識別するためのものです。

- 属性 - 組込み型またはその他のユーザー定義型です。属性は、実社会エンティティの構造をモデル化します。

- メソッド - PL/SQLで記述され、データベースに格納されるファンクションまたはプロシージャ、あるいはCやJavaなどの言語で記述され、外部に格納されるファンクションまたはプロシージャのことです。メソッドは、アプリケーションが実社会エンティティに対して実行できる操作を実装します。

REFデータ型

オブジェクト識別子(キーワードOIDで表される)を使用することによって、オブジェクトを一意に識別し、他のオブジェクトまたはリレーショナル表からそのオブジェクトを参照できます。REFと呼ばれるデータ型のカテゴリが、そのような参照を表します。REFデータ型は、オブジェクト識別子のコンテナです。REF値は、オブジェクトへのポインタとなります。

REF値が、存在しないオブジェクトを指している場合、そのREFはDANGLING(参照先がない)状態であるといいます。DANGLING状態のREFは、NULLであるREFと異なります。REFがDANGLING状態であるかどうかを確認するには、条件IS [NOT] DANGLINGを使用します。たとえば、列型がcustomer_typ(属性cust_emailを持つ)を指しているREFであるcustomer_ref列があるとします。このcustomer_ref列を含むオブジェクト・ビューoc_orders(サンプル・スキーマoe内)は、次のように指定します。

SELECT o.customer_ref.cust_email
FROM oc_orders o
WHERE o.customer_ref IS NOT DANGLING;

VARRAY

配列とは、順序付けられたデータ要素の集合です。ある特定の配列のすべての要素は、同じデータ型です。各要素には索引があります。索引は、各要素の配列内での位置に対応する番号です。

配列内の要素数は、その配列のサイズを表します。Oracleの配列は可変サイズであるため、VARRAYと呼ばれます。VARRAYを宣言する場合は、最大サイズを指定する必要があります。

VARRAYの宣言時に領域は割り当てられません。ここでは次のような型を定義します。

- リレーショナル表の列のデータ型

- オブジェクト型属性

- PL/SQLの変数、パラメータ、またはファンクションの戻り型

通常、Oracleは、1つの配列オブジェクトを表内に(その行の他のデータと同じ表領域に)、または表外に(LOBに)格納します。この形式は配列オブジェクトのサイズによって決まります。ただし、VARRAYに個別の記憶特性を指定する場合、Oracleはこれをサイズに関係なく表外に格納します。VARRAYの格納方法の詳細は、「CREATE TABLE」の「varray_col_properties」を参照してください。

ネストした表

ネストした表は、順序付けられていない要素の集合を表現します。要素には組込み型またはユーザー定義型を指定できます。ネストした表は、単一列の表として表示できます。ネストした表がオブジェクト型の場合、オブジェクト型のそれぞれの属性を表す複数列の表としても表示できます。

ネストした表の定義では、領域は割り当てられません。ネストした表では、次のものを宣言するための型を定義します。

- リレーショナル表の列のデータ型

- オブジェクト型属性

- PL/SQLの変数、パラメータ、またはファンクションの戻り型

ネストした表が、リレーショナル表内の列型として使用される場合、またはオブジェクト表の基礎となるオブジェクト型の属性として使用される場合、Oracleは、ネストした表のすべてのデータを単一表に格納し、その単一表を、ネストした表を囲むリレーショナル表またはオブジェクト表に対応付けます。

Oracleが提供する型

Oracleは、組込み型またはANSIがサポートする型が不十分な場合に、新しい型を定義するためのSQLに基づくインタフェースを提供します。これらの型の動作は、C/C++、JavaまたはPL/SQLで実装されます。Oracle Databaseは、入出力、異機種間でのクライアント側の新しいデータ型へのアクセス、およびアプリケーションとデータベース間のデータ転送のための最適化で必要な下位レベルのインフラストラクチャ・サービスを自動的に提供します。

これらのインタフェースは、ユーザー定義(またはオブジェクト)型の作成に使用できます。また、Oracleが有効なデータ型を作成するときに使用します。このようなデータ型のいくつかはサーバーで提供され、横方向の幅広いアプリケーション領域(任意型など)および縦方向の固有アプリケーション領域(Spatial型など)の両方に役立ちます。

Oracleが提供する型については、次の項で説明します。また、それらの型の実装および使用に関するドキュメントの参照先も示します。

- 任意型

- XML型

- Spatial型

- メディア型

任意型

任意型は、実際の型が不明なプロシージャ・パラメータおよび表の列の柔軟性が高いモデリングを提供します。これらのデータ型によって、型の記述、データ・インスタンスおよびその他のSQL型の一連のデータ・インスタンスを動的にカプセル化し、アクセスできます。これらの型を構成およびアクセスするには、OCIおよびPL/SQLインタフェースを使用します。

ANYTYPE

この型には、任意の名前のあるSQL型または名前のない一時型の型の記述を含めることができます。

ANYDATA

この型には、指定した型のインスタンスをデータおよび型の記述とともに含めることができます。ANYDATAは表の列データ型として使用でき、単一の列に異なる型の値を格納できます。値には、SQL組込み型またはユーザー定義型を使用できます。

ANYDATASET

この型には、指定した型の記述およびその型の一連のデータ・インスタンスを含めることができます。ANYDATASETは、柔軟性が必要なプロシージャ・パラメータのデータ型として使用できます。ユーザー定義型と同様に、SQL組込み型のデータ・インスタンスの値も格納できます。

関連項目:
ANYTYPE、ANYDATAおよびANYDATASET型の詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

XML型

eXtensible Markup Language(XML)は、World Wide Web Consortium(W3C)によって開発された、構造化されたデータおよび構造化されていないデータをWebで表示するための標準書式です。Universal Resource Identifiers(URI)は、WebページなどのWeb上のリソースを識別します。Oracleでは、データベース自体に格納されるデータにアクセスするためにDBURIRef型と呼ばれるURIのクラスと同様に、XMLおよびURIデータを処理するための型が用意されています。また、データベースから外部URIおよび内部URIの両方に格納およびアクセスする型セットを利用できます。

XMLType

Oracleが提供するこの型は、データベースでのXMLデータの格納および問合せに使用します。XMLTypeは、XPath式を使用したXMLデータへのアクセス、抽出および問合せに使用するメンバー・ファンクションを持ちます。XPathは、XML文書をトラバースするためにW3Cによって開発された別の規格です。OracleのXMLTypeファンクションは、W3Cの多数のXPath式をサポートします。また、Oracleは、既存のリレーショナルまたはオブジェクト・リレーショナル・データからXMLType値を作成するためのSQLファンクションおよびPL/SQLパッケージのセットを提供します。

XMLTypeはシステム定義型であるため、ファンクションの引数として、あるいは表またはビューの列のデータ型として使用できます。また、XMLTypeの表およびビューも作成できます。表にXMLType列を作成する際は、XMLデータをCLOB列に(内部的にはCLOBとして格納されるバイナリXMLとして)格納するか、またはオブジェクトと関連付けて格納するかを選択できます。

また、スキーマを登録し(DBMS_XMLSCHEMAパッケージを使用)、登録したスキーマに適合する表または列を作成できます。この場合、XMLデータは、デフォルトでは基礎となるオブジェクト・リレーショナル列に格納されますが、スキーマ・ベースのデータであっても、CLOB列またはバイナリXML列に格納するように指定できます。

XMLType列の問合せおよびDMLは、格納メカニズムとは関係なく、同様に動作します。

関連項目:
XMLType列の使用方法については、『Oracle XML DB開発者ガイド』を参照してください。

URIデータ型

Oracleは、継承階層で関連するURI型のファミリ(URIType、DBURIType、XDBURITypeおよびHTTPURIType)を提供します。URITypeはオブジェクト型であり、その他はURITypeのサブタイプです。URITypeはスーパータイプであるため、この型の列を作成し、DBURITypeまたはHTTPURIType型のインスタンスをこの列に格納できます。

HTTPURIType HTTPURITypeを使用すると、外部のWebページまたはファイルのURLを格納できます。Oracleは、Hypertext Transfer Protocol(HTTP)を使用して、これらのファイルにアクセスします。

XDBURIType XDBURITypeを使用すると、表の任意のURIType列に埋込み可能なURIとして、ドキュメントをXMLデータベース階層に展開できます。XDBURITypeは、URLで構成されています。URLは、参照先のXML文書の階層名と、XPath構文を表すオプションのフラグメントで構成されています。フラグメントとURL部分は、シャープ記号(#)で区切ります。次に、XDBURITypeの例を示します。

/home/oe/doc1.xml
/home/oe/doc1.xml#/orders/order_item

DBURIType DBURITypeを使用すると、データベース内のデータを参照するDBURIRef値を格納できます。DBURIRefを格納することで、データベースの内部または外部に格納されたデータを参照し、常にデータにアクセスできます。

DBURIRef値は、データベース内のデータを参照するために、XPathのような表現を使用します。データベースをXMLツリーに想定すると、表、行および列がXML文書の要素です。たとえば、サンプルの人事部門のユーザーhrは次のようにXMLツリーで表します。

<HR>
<EMPLOYEES>
<ROW>
<EMPLOYEE_ID>205</EMPLOYEE_ID>
<LAST_NAME>Higgins</LAST_NAME>
<SALARY>12008</SALARY>
.. <!-- other columns -->
</ROW>
... <!-- other rows -->
</EMPLOYEES>
<!-- other tables..-->
</HR>
<!-- other user schemas on which you have some privilege on..-->

DBURIRefは、この仮想XML文書のXPath式です。したがって、従業員番号205の従業員のSALARY値をEMPLOYEES表で参照するには、DBURIRefを次のように記述します。

/HR/EMPLOYEES/ROW[EMPLOYEE_ID=205]/SALARY

このモデルを使用すると、CLOB列またはその他の列に格納されたデータを参照し、それらのデータを外部のURLとして外部の世界へ公開できます。

URIFactoryパッケージ

Oracleは、URITypeの様々なサブタイプのインスタンスを作成し、戻すことができるURIFactoryパッケージも提供します。このパッケージは、URL文字列を分析し、URLの種類(HTTP、DBURIなど)を識別し、サブタイプのインスタンスを作成します。DBURIインスタンスを作成する場合は、URLの先頭に接頭辞/oradbを付ける必要があります。たとえば、URIFactory.getURI('/oradb/HR/EMPLOYEES')によってDBURITypeインスタンスが作成され、URIFactory.getUri('/sys/schema')によってXDBURITypeインスタンスが作成されます。

関連項目:

- オブジェクト型および型の継承については、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。

- 提供される型およびその実装については、『Oracle XML DB開発者ガイド』を参照してください。

- Oracle Advanced QueuingでのXMLTypeの使用については、『Oracle Databaseアドバンスト・キューイング・ユーザーズ・ガイド』を参照してください。

空間型

Oracle Spatial and Graphは、位置情報アプリケーション、地理情報システム(GIS)・アプリケーションおよびジオイメージング・アプリケーションのユーザーが、空間データ管理をより簡単かつ自然に行えるように設計されています。一度空間データをOracle Databaseに格納すると、そのデータの操作や取得を簡単に行うことができ、データベースに格納された他のすべてのデータと関連付けることもできます。次のデータ型は、Spatial and Graphをインストールしている場合にのみ使用できます。

SDO_GEOMETRY

空間オブジェクトのジオメトリの記述は、ユーザー定義の表の単一行およびオブジェクト型SDO_GEOMETRYの単一列に格納されます。SDO_GEOMETRY型の列を含むすべての表は、表に対して一意の主キーを定義する別の列を持つ必要があります。このような表は、ジオメトリ表と呼ばれる場合があります。

SDO_GEOMETRYオブジェクト型の定義は、次のとおりです。

CREATE TYPE SDO_GEOMETRY AS OBJECT
(sgo_gtype        NUMBER,
sdo_srid         NUMBER,
sdo_point        SDO_POINT_TYPE,
sdo_elem_info    SDO_ELEM_INFO_ARRAY,
sdo_ordinates    SDO_ORDINATE_ARRAY);
/

SDO_TOPO_GEOMETRY

この型はトポロジ・ジオメトリを記述します。この記述は、ユーザー定義の表の単一行およびオブジェクト型SDO_TOPO_GEOMETRYの単一列に格納されます。

SDO_TOPO_GEOMETRYオブジェクト型の定義は、次のとおりです。

CREATE TYPE SDO_TOPO_GEOMETRY AS OBJECT
(tg_type        NUMBER,
tg_id          NUMBER,
tg_layer_id    NUMBER,
topology_id    NUMBER);
/

SDO_GEORASTER

GeoRasterオブジェクト・リレーショナル・モデルでは、ラスター・グリッドまたはイメージ・オブジェクトは、ユーザー定義の表の単一行およびオブジェクト型SDO_GEORASTERの単一列に格納されます。このような表は、GeoRaster表と呼ばれます。

SDO_GEORASTERオブジェクト型の定義は、次のとおりです。

CREATE TYPE SDO_GEORASTER AS OBJECT
(rasterType         NUMBER,
spatialExtent      SDO_GEOMETRY,
rasterDataTable    VARCHAR2(32),
rasterID           NUMBER,
metadata           XMLType);
/

関連項目:
空間データ型の完全な実装および使用のガイドラインは、Oracle Spatial and Graph開発者ガイド、Oracle Spatial and Graphトポロジ・データ・モデルおよびネットワーク・データ・モデル・グラフ開発者ガイドおよびOracle Spatial and Graph GeoRaster開発者ガイドを参照してください。

メディア型

Oracle Multimediaは、マルチメディア・データを記述するために、JavaまたはC++クラスに類似したオブジェクト型を使用します。これらのオブジェクト型のインスタンスは、メタデータおよびメディア・データを含む属性とメソッドで構成されます。Multimediaのデータ型は、ORDSYSスキーマで作成されます。パブリック・シノニムがすべてのデータ型に対して存在するため、スキーマ名を指定せずにアクセスできます。

Oracle Multimediaでは、次のオブジェクト型が提供されます。

- ORDAudio
オーディオ・データの格納および管理をサポートします。

- ORDDicom
医用画像の規格として広く認知されている形式であるDigital Imaging and Communications in Medicine(DICOM)の格納および管理をサポートします。

- ORDDoc
オーディオ、イメージ、ビデオ・データなどすべての種類のメディア・データの格納および管理をサポートします。この型は、すべてのメディアを単一列に格納する場合に使用します。

- ORDImage
イメージ・データの格納および管理をサポートします。

- ORDVideo
ビデオ・データの格納および管理をサポートします。

次のデータ型は、ISO-IEC 13249-5 Still Image規格(一般にSQL/MM StillImageと呼ばれる)に準拠しています。

- SI_AverageColor
イメージの平均の色によってそのイメージを特徴付けます。

- SI_Color
色の値をカプセル化します。

- SI_ColorHistogram
RAWイメージのサンプルによって表示される色の相対頻度によって、イメージを特徴付けます。

- SI_FeatureList
前述したオブジェクト型(SI_AverageColor、SI_ColorHistogram、SI_PositionalColorおよびSI_Texture)が表すイメージの特徴のうち最大4つの特徴を含むリストです。各特徴は、重み付けされます。

- SI_PositionalColor
イメージをn×m個の四角形に分割すると考えた場合、SI_PositionalColorオブジェクト型は、その四角形の最も重要なn×m個の色によってイメージを特徴付けます。

- SI_StillImage
高さ、幅、フォーマットなどの固有のイメージ特性を持つデジタル・イメージを表します。

- SI_Texture
繰り返し出現している項目のサイズ(粗さ)、輝度の変化(コントラスト)および主な方向(方向性)によってイメージを特徴付けます。

関連項目:

- ORDDicomオブジェクト型の詳細は、『Oracle Multimedia DICOM開発者ガイド』を参照してください。

- この項に示されているその他のオブジェクト型の詳細は、『Oracle Multimediaリファレンス』を参照してください。

データ型の比較規則

ここでは、Oracle Databaseが各データ型の値を比較する方法について説明します。

数値

大きい値は小さい値よりも大きいとみなされます。すべての負の数は、0(ゼロ)およびすべての正の数より小さいとみなされます。したがって、-1は100より小さく、-100は-1より小さいとみなされます。

浮動小数点値NaN(非数値)は、その他の数値よりも大きく、NaNとは等しいとみなされます。

関連項目:
比較セマンティクスの詳細は、「数値の優先順位」および「浮動小数点数」を参照してください。

日付値

後の日付は前の日付よりも大きいとみなされます。たとえば、29-MAR-2005(2005年3月29日)に相当する日付は05-JAN-2006(2006年1月5日)に相当する日付よりも小さく、05-JAN-2006 1:35pm(2006年1月5日午後1時35分)に相当する日付は05-JAN-2005 10:09am(2005年1月5日午前10時9分)に相当する日付よりも大きいとみなされます。

文字値

文字値は、2つのメジャーに基づいて比較されます。

- バイナリ・ソートまたは言語ソート

- 空白埋め比較セマンティクスまたは非空白埋め比較セマンティクス

次の項で、2つのメジャーについて説明します。

バイナリ比較または言語比較

デフォルトのバイナリ比較では、Oracleは、データベース・キャラクタ・セット内の文字の数値コードを連結した値に従って文字列を比較します。第1の文字の数値が第2の文字の数値よりも大きい場合、第1の文字は第2の文字よりも大きいとみなされます。Oracleは、空白はどの文字よりも小さいとみなします。これは、ほぼすべてのキャラクタ・セットでいえることです。

次に、一般的なキャラクタ・セットを示します。

- 7ビットASCII(情報交換用米国標準コード)

- EBCDICコード(拡張2進化10進コード)

- ISO 8859/1(国際標準化機構)

- JEUC日本語拡張UNIX

数値コードのバイナリ順序と、比較する文字の言語順序が一致していない場合は、言語比較が有効です。NLS_SORTパラメータにBINARY以外の設定があり、NLS_COMPパラメータがLINGUISTICに設定されている場合は言語比較が使用されます。言語ソートでは、すべてのSQLのソートおよび比較がNLS_SORTによって指定された言語規則に基づいて行われます。

関連項目:
言語ソートについては、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

空白埋め比較セマンティクスおよび非空白埋め比較セマンティクス

空白埋め比較セマンティクスでは、2つの値の長さが異なる場合、Oracleはまず短い方の値の最後に空白を追加して、2つの値が同じ長さになるようにします。次に、その2つの値を、最初に異なる文字まで1文字ずつ比較します。最初に異なる文字の位置で、大きい方の文字を持つ値の方が大きいとみなされます。2つの値に異なる文字がない場合、その2つの値は等しいとみなされます。この規則では、2つの値の後続空白数のみが異なる場合、その2つの値は等しいとみなされます。Oracleでは、比較する両方の値が、CHARデータ型、NCHARデータ型、テキスト・リテラルのいずれかの式の場合、またはUSERファンクションの戻り値の場合のみ空白埋め比較セマンティクスを使用します。

非空白埋め比較セマンティクスでは、Oracleは、2つの値を、最初に異なる文字まで1文字ずつ比較します。最初に異なる文字の位置で、大きい方の文字を持つ値の方が大きいとみなされます。長さが異なる2つの値を短い方の値の最後まで比較して、すべて同じ文字だった場合、長い方の値が大きいとみなされます。同じ長さの2つの値に異なる文字がない場合、その2つの値は等しいとみなされます。Oracleでは、比較する片方または両方の値がVARCHAR2データ型またはNVARCHAR2データ型の場合、非空白埋め比較セマンティクスを使用します。

これらの異なる比較セマンティクスを使用して2つの文字値を比較した場合、その結果が異なることもあります。次の表に、それぞれの比較セマンティクスを使用して5組の文字を比較した結果を示します。通常、空白埋め比較と非空白埋め比較の結果は同じです。表に示されている最後の比較では、空白埋め比較と非空白埋め比較の違いが明確になっています。

空白埋め比較

非空白埋め比較

'ac' > 'ab'

'ac' > 'ab'

'ab' > 'a  '

'ab' > 'a   '

'ab' > 'a'

'ab' > 'a'

'ab' = 'ab'

'ab' = 'ab'

'a ' = 'a'

'a ' > 'a'

ASCIIとEBCDICのキャラクタ・セットの一部を表2-8と表2-9に示します。大文字と小文字は同じではありません。キャラクタ・セットの照合順番は、特定の言語の言語順序と一致しない場合があります。

表2-8 ASCIIキャラクタ・セット

記号

10進値

記号

10進値

空白

32

;

59

!

33

<

60

"

34

=

61

#

35

>

62

$

36

?

63

%

37

@

64

&

38

A-Z

65-90

'

39

[

91

(

40

\

92

)

41

]

93

*

42

^

94

+

43

_

95

,

44

'

96

-

45

a-z

97-122

.

46

{

123

/

47

|

124

0-9

48-57

}

125

:

58

~

126

表2-9 EBCDICキャラクタ・セット

記号

10進値

記号

10進値

空白

64

%

108

¢

74

_

109

.

75

>

110

<

76

?

111

(

77

:

122

+

78

#

123

|

79

@

124

&

80

'

125

!

90

=

126

$

91

"

127

*

92

a-i

129-137

)

93

j-r

145-153

;

94

s-z

162-169

ÿ

95

A-I

193-201

-

96

J-R

209-217

/

97

S-Z

226-233

オブジェクト値

オブジェクト値は、MAPとORDERの2つの比較ファンクションのいずれかを使用して比較されます。どちらのファンクションでもオブジェクト型インスタンスは比較されますが、両者は別のものです。これらのファンクションは、他のオブジェクト型と比較するオブジェクト型の一部として指定される必要があります。

関連項目:
MAPメソッドとORDERメソッド、およびこれらのメソッドが戻す値の詳細は、「CREATE TYPE」を参照してください。

VARRAYとネストした表

ネストした表の比較の詳細は、「比較条件」を参照してください。

データ型の優先順位

Oracleでは、データ型の優先順位によって、暗黙的にデータ型を変換するかどうかを判断します(次の項を参照)。Oracleデータ型の優先順位は、次のとおりです。

- 日時および期間データ型

- BINARY_DOUBLE

- BINARY_FLOAT

- NUMBER

- 文字データ型

- その他のすべての組込みデータ型

データ変換

一般に、式には異なるデータ型の値を含めることができません。たとえば、式では10に5を掛けた値に'JAMES'を加えることはできません。ただし、Oracleでは値をあるデータ型から別のデータ型へ変換する場合の、暗黙的な変換と明示的な変換をサポートしています。

暗黙的なデータ変換と明示的なデータ変換

次の理由から、暗黙的な変換または自動変換ではなく、明示的な変換を指定することをお薦めします。

- 明示的なデータ型変換ファンクションを使用すると、SQL文がわかりやすくなります。

- 暗黙的なデータ型変換(特に列値のデータ型が定数に変換される場合)は、パフォーマンスに悪影響を及ぼす可能性があります。

- 暗黙的な変換はその変換が行われるコンテキストに依存し、どんな場合でも同様に機能するとはかぎりません。たとえば、日時値からVARCHAR2型へ値を暗黙的に変換すると、NLS_DATE_FORMATパラメータに指定されている値によっては、予期しない年が戻される場合があります。

- 暗黙的な変換のアルゴリズムは、ソフトウェア・リリースやOracle製品の変更によって変更されることがあります。明示的な変換を指定しておくと、その動作は将来的にも確実になります。

- 索引式で暗黙的なデータ型変換が発生した場合、その索引が変換前のデータ型に対して定義されているために、Oracle Databaseがその索引を使用しないことがあります。これは、パフォーマンスに悪影響を与えるおそれがあります。

暗黙的なデータ変換

あるデータ型から別のデータ型への変換が意味を持つ場合、Oracle Databaseは値を自動的に変換します。

表2-10に、Oracleの暗黙的な変換のマトリックスについて示します。この表は、変換の方向または変換されるコンテキストにかかわらず、すべての可能な変換を示します。詳細は、表の後の説明を参照してください。

表2-10 暗黙的な型変換のマトリックス

CHAR

VARCHAR2

NCHAR

NVARCHAR2

DATE

DATETIME/INTERVAL

NUMBER

BINARY_FLOAT

BINARY_DOUBLE

LONG

RAW

ROWID

CLOB

BLOB

NCLOB

CHAR

--

X

X

X

X

X

X

X

X

X

X

X

X

X

X

VARCHAR2

X

--

X

X

X

X

X

X

X

X

X

X

X

--

X

NCHAR

X

X

--

X

X

X

X

X

X

X

X

X

X

--

X

NVARCHAR2

X

X

X

--

X

X

X

X

X

X

X

X

X

--

X

DATE

X

X

X

X

--

--

--

--

--

--

--

--

--

--

--

DATETIME/ INTERVAL

X

X

X

X

--

--

--

--

--

X

--

--

--

--

--

NUMBER

X

X

X

X

--

--

--

X

X

--

--

--

--

--

--

BINARY_FLOAT

X

X

X

X

--

--

X

--

X

--

--

--

--

--

--

BINARY_DOUBLE

X

X

X

X

--

--

X

X

--

--

--

--

--

--

--

LONG

X

X

X

X

--

X脚注 1

--

--

--

--

X

--

X

--

X

RAW

X

X

X

X

--

--

--

--

--

X

--

--

--

X

--

ROWID

X

X

X

X

--

--

--

--

--

--

--

--

--

--

--

CLOB

X

X

X

X

--

--

--

--

--

X

--

--

--

--

X

BLOB

--

--

--

--

--

--

--

--

--

--

X

--

--

--

--

NCLOB

X

X

X

X

--

--

--

--

--

X

--

--

X

--

--

脚注 1 LONGをINTERVALに直接変換することはできませんが、TO_CHAR(interval)を使用してLONGをVARCHAR2に変換し、そのVARCHAR2の値をINTERVALに変換できます。

暗黙的なデータ型変換は、次に示す規則によって決まります。

- INSERTおよびUPDATE操作中に、Oracleは変更する列のデータ型に値を変換します。

- SELECT FROM操作中に、Oracleは列からターゲット変数の型にデータを変換します。

- 数値を操作する際、Oracleは、通常、最大容量を確保するために精度および位取りを調整します。この場合、このような操作によって変換された数値データ型は、基礎となる表に含まれる数値データ型と異なることがあります。

- 数値と文字値を比較する場合、Oracleは文字データを数値に変換します。

- 文字値またはNUMBERの値と浮動小数点数の値の間では、変換が正確に行われない場合があります。これは、文字型およびNUMBERでは10進精度で数値が示されるのに対し、浮動小数点数では2進精度が使用されているためです。

- CLOB値をVARCHAR2などの文字データ型に変換する場合、またはBLOBをRAWデータに変換する場合、変換するデータがターゲットのデータ型より大きいと、データベースはエラーを戻します。

- タイムスタンプ値からDATE値への変換では、タイムスタンプ値の秒の小数部は切り捨てられます。この動作は、タイムスタンプ値の秒の小数部が丸められていた、以前のリリースのOracle Databaseの動作とは異なります。

- BINARY_FLOATからBINARY_DOUBLEへの変換は正確に行われます。

- BINARY_DOUBLEの値がBINARY_FLOATでサポートされている精度のビット数よりも多いビット数を使用している場合、BINARY_DOUBLEからBINARY_FLOATへの変換は正確に行われません。

- DATEの値と文字の値を比較する場合、Oracleは文字データをDATEに変換します。

- SQLファンクションまたは演算子に不当なデータ型の引数を指定して使用する場合、Oracleはその引数を正当なデータ型に変換します。

- 代入を実行する場合、Oracleは等号(=)の右側の値を左側の代入ターゲットのデータ型に変換します。

- 連結中に、Oracleは非文字データ型をCHARまたはNCHARに変換します。

- 文字データ型と非文字データ型に対する演算処理および比較中に、Oracleはすべての文字データ型を数値、日付またはROWIDのいずれかの適切なデータ型に変換します。CHAR/VARCHAR2とNCHAR/NVARCHAR2の演算処理では、OracleはNUMBERに変換します。

- ほとんどのSQL文字ファンクションは、CLOBをパラメータとして指定できます。また、OracleはCLOBと文字型間で暗黙的な変換を実行します。このため、CLOBを使用できないファンクションは、暗黙的な変換を使用してCLOBを受け入れます。このような場合、Oracleはファンクションが起動される前にCLOBをCHARまたはVARCHAR2に変換します。CLOBが4000バイトより大きい場合、Oracleは最初の4000バイトのみをCHARに変換します。

- RAWまたはLONGRAWデータを文字データとの間で変換する場合、バイナリ・データは16進形式で表され、16進文字1文字ごとに4ビットのRAWデータを表します。詳細は、「RAWデータ型とLONG RAWデータ型」を参照してください。

- CHARとVARCHAR2、NCHARとNVARCHAR2の比較では、異なるキャラクタ・セットが必要な場合があります。このような場合のデフォルトの変換の方向は、データベース・キャラクタ・セットから各国語キャラクタ・セットです。表2-11に、異なるキャラクタ・タイプ間での暗黙的な変換の方向を示します。

表2-11 異なるキャラクタ・タイプの変換方向

CHARへ

VARCHAR2へ

NCHARへ

NVARCHAR2へ

CHARから

--

VARCHAR2

NCHAR

NVARCHAR2

VARCHAR2から

VARCHAR2

--

NVARCHAR2

NVARCHAR2

NCHARから

NCHAR

NCHAR

--

NVARCHAR2

NVARCHAR2から

NVARCHAR2

NVARCHAR2

NVARCHAR2

--

コレクションなどのユーザー定義型は暗黙的に変換できないため、CAST ... MULTISETを使用して明示的に変換する必要があります。

暗黙的なデータ変換の例

テキスト・リテラルの例 テキスト・リテラル'10'はCHARデータ型です。次の文のように数式で使用すると暗黙的にNUMBERデータ型に変換されます。

SELECT salary + '10'
FROM employees;

文字値および数値の例 条件で文字値とNUMBER型の値を比較する場合、NUMBER型の値は文字値に変換されず、文字値が暗黙的にNUMBER型の値に変換されます。次の文では、'200'が暗黙的に200に変換されます。

SELECT last_name
FROM employees
WHERE employee_id = '200';

日付の例 次の文では、Oracleがデフォルトの日付書式'DD-MON-YY'を使用して、'24-JUN-06'をDATE値に暗黙的に変換します。

SELECT last_name
FROM employees
WHERE hire_date = '24-JUN-06';

明示的なデータ変換

SQL変換ファンクションを使用すると、データ型の変換を明示的に指定できます。表2-12に、値をあるデータ型から別のデータ型に明示的に変換するSQLファンクションを示します。

Oracleが暗黙的なデータ型変換を行うことができる場合には、LONGおよびLONG RAWの値を指定できません。たとえば、ファンクションや演算子を含む式では、LONGとLONG RAWの値を使用できません。LONGデータ型およびLONG RAWデータ型の制限については、「LONGデータ型」を参照してください。

表2-12 明示的な型の変換

CHAR、VARCHAR2、NCHAR、NVARCHAR2へ

NUMBERへ

Datetime/Intervalへ

RAWへ

ROWIDへ

LONG、LONG RAWへ

CLOB、NCLOB、BLOBへ

BINARY_FLOATへ

BINARY_DOUBLEへ

CHAR、VARCHAR2、NCHAR、NVARCHAR2から

TO_CHAR(文字)

TO_NCHAR(文字)

TO_NUMBER

TO_DATE

TO_TIMESTAMP

TO_TIMESTAMP_TZ

TO_YMINTERVAL

TO_DSINTERVAL

HEXTORAW

CHARTO=ROWID

--

TO_CLOB

TO_NCLOB

TO_BINARY_FLOAT

TO_BINARY_DOUBLE

NUMBERから

TO_CHAR(数値)

TO_NCHAR(数値)

--

TO_DATE

NUMTOYM- INTERVAL

NUMTODS- INTERVAL

--

--

--

--

TO_BINARY_FLOAT

TO_BINARY_DOUBLE

Datetime Intervalから

TO_CHAR(日付)

TO_NCHAR (日時)

--

--

--

--

--

--

--

--

RAWから

RAWTOHEX

RAWTONHEX

--

--

--

--

--

TO_BLOB

--

--

ROWIDから

ROWIDTOCHAR

--

--

--

--

--

--

--

--

LONG/LONG RAWから

--

--

--

--

--

--

TO_LOB

--

--

CLOB、NCLOB、BLOBから

TO_CHAR

TO_NCHAR

--

--

--

--

--

TO_CLOB

TO_NCLOB

--

--

CLOB、NCLOB、BLOBから

TO_CHAR

TO_NCHAR

--

--

--

--

--

TO_CLOB

TO_NCLOB

--

--

BINARY_FLOATから

TO_CHAR(文字)

TO_NCHAR(文字)

TO_NUMBER

--

--

--

--

--

TO_BINARY_FLOAT

TO_BINARY_DOUBLE

BINARY_DOUBLEから

TO_CHAR(文字)

TO_NCHAR(文字)

TO_NUMBER

--

--

--

--

--

TO_BINARY_FLOAT

TO_BINARY_DOUBLE

関連項目:
すべての明示的な変換ファンクションの詳細は、「変換ファンクション」を参照してください。

データ変換のセキュリティ上の考慮事項

暗黙的な変換、または書式モデルを指定しない明示的な変換のいずれかによって日時値がテキストに変換される場合、書式モデルはグローバリゼーション・セッション・パラメータの1つによって定義されます。ソースのデータ型に応じて、パラメータ名はNLS_DATE_FORMAT、NLS_TIMESTAMP_FORMATまたはNLS_TIMESTAMP_TZ_FORMATです。これらのパラメータの値は、クライアント環境で、またはALTER SESSION文で指定できます。

書式モデルがセッション・パラメータに依存している場合、明示的な書式モデルが指定されていない変換が動的SQL文のテキストに連結される日時値に適用されると、データベースのセキュリティに悪影響を及ぼす可能性があります。動的SQL文は、実行のためにデータベースに渡される前にそのテキストがフラグメントから連結される文です。動的SQLは、組込みPL/SQLパッケージDBMS_SQLまたはPL/SQL文EXECUTE IMMEDIATEに関連付けられる場合が多いですが、動的に構成されたSQLテキストを引数として渡すことができる場所はこれらのみではありません。次に例を示します。

EXECUTE IMMEDIATE
'SELECT last_name FROM employees WHERE hire_date > ''' || start_date || '''';

start_dateのデータ型はDATEです。

前述の例では、start_dateの値はセッション・パラメータNLS_DATE_FORMATで指定された書式モデルを使用してテキストに変換されます。結果は、連結されてSQLテキストになります。日時書式モデルは、単純に二重引用符で囲んだリテラル・テキストで構成できます。したがって、セッションのグローバリゼーション・パラメータを明示的に設定できるすべてのユーザーが、前述の変換で生成されるテキストを決定できます。SQL文がPL/SQLプロシージャによって実行される場合、そのプロシージャはセッション・パラメータによるSQLインジェクションに対して脆弱になります。セッション自体より強い権限である定義者の権限でプロシージャが実行されると、ユーザーは機密データに不正にアクセスすることができます。

関連項目:
他の例およびこのセキュリティ・リスクを回避する場合の推奨事項については、『Oracle Database PL/SQL言語リファレンス』を参照してください。

注意:
このセキュリティ・リスクは、データベースまたはOCI日時ファンクションによってテキストに変換された日時値からSQLテキストを構成する中間層アプリケーションにも該当します。セッションのグローバリゼーション・パラメータがユーザー・プリファレンスから取得される場合、それらのアプリケーションは脆弱になります。

数値の暗黙的および明示的な変換でも、変換結果がセッション・パラメータNLS_NUMERIC_CHARACTERSに依存する場合があるため、類似した問題が発生する可能性があります。このパラメータは、小数点区切り文字および桁区切り文字を定義します。小数点区切りを一重引用符または二重引用符と定義すると、SQLインジェクションが発生する可能性があります。

関連項目:

- セッションのグローバリゼーション・パラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

- 書式モデルの詳細は、「書式モデル」を参照してください。

リテラル

リテラルと定数値という用語の意味は同じで、固定データ値のことです。たとえば、'JACK'、'BLUE ISLAND'および'101'はすべて文字リテラルです。5001は数値リテラルです。文字リテラルは、一重引用符で囲みます。一重引用符を付けることで、Oracleは文字リテラルとスキーマ・オブジェクト名を区別します。

この項では、次の内容を説明します。

- テキスト・リテラル

- 数値リテラル

- 日時リテラル

- 期間リテラル

多くのSQL文とファンクションでは、文字リテラルと数値リテラルを指定する必要があります。式と条件の一部として、リテラルを指定できます。文字リテラルは'text'の表記法を、各国文字リテラルはN'text'の表記法を、数値リテラルはリテラルのコンテキストに応じてintegerまたはnumberの表記法を使用して指定できます。これらの表記法の構文については、次の項で説明します。

Datetime(日時)またはInterval(期間)のデータ型をリテラルとして指定する場合は、データ型に含まれているオプションの精度を考慮する必要があります。Datetime(日時)およびInterval(期間)のデータ型をリテラルとして指定する場合の例は、「データ型」の関連する項を参照してください。

テキスト・リテラル

このマニュアルの他の箇所で、式、条件、SQLファンクションおよびSQL文の各構文に示されているstringに値を指定するときには、必ずこのテキスト・リテラルの表記法を使用してください。このマニュアルでは、テキスト・リテラル、文字リテラルおよび文字列は同じ用語として使用しています。テキスト、文字、文字列リテラルは必ず一重引用符で囲まれています。構文にcharが使用されている場合、テキスト・リテラルを指定するか、または文字データに変換する他の式(たとえば、hr.employees表のlast_name列)を指定します。構文にcharがある場合、一重引用符で囲む必要はありません。

テキスト・リテラルまたは文字列の構文は次のとおりです。

string::=

ここで、Nまたはnは、各国語キャラクタ・セット(NCHARまたはNVARCHAR2データ)を使用してリテラルを指定します。デフォルトでは、この表記法を使用して入力したテキストは、サーバーで使用するときにデータベースのキャラクタ・セットによって各国語キャラクタ・セットに変換されます。テキスト・リテラルをデータベースのキャラクタ・セットに変換しているときにデータの消失を避けるためには、環境変数ORA_NCHAR_LITERAL_REPLACEにTRUEを設定してください。このように設定することで、n'を透過的に内部で置き換え、SQLの処理中にテキスト・リテラルを保持します。

関連項目:
N付き引用符で表されたリテラルの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

構文の上の方のブランチでは、次のようになります。

- cは、データベース・キャラクタ・セットの任意の要素です。リテラル内の一重引用符(')の前には、エスケープ文字を付ける必要があります。リテラル内で一重引用符を表すには、一重引用符を2つ使用します。

- ' 'は、テキスト・リテラルの始まりと終わりを示す2つの一重引用符です。

構文の下の方のブランチでは、次のようになります。

- Qまたはqは、代替引用メカニズムが使用されることを示します。このメカニズムを使用すると、様々なデリミタをテキスト文字列に使用できます。

- 一番外側の' 'は、開始のquote_delimiterの前と、終了のquote_delimiterの後に付ける2つの一重引用符です。

- cは、データベース・キャラクタ・セットの任意の要素です。cで構成されるテキスト・リテラル内に引用符(")を含めることができます。また、一重引用符が直後に付かないquote_delimiterも含めることができます。

- quote_delimiterは、空白、タブおよび改行文字を除く、任意のシングルバイト文字またはマルチバイト文字です。quote_delimiterには一重引用符も使用できます。ただし、quote_delimiterがテキスト・リテラル自体に使用されている場合は、一重引用符を直後に付けないようにしてください。
開始のquote_delimiterが[、{、<または(のいずれかである場合、終了のquote_delimiterも対応する]、}、>または)である必要があります。それ以外の場合は常に、開始および終了のquote_delimiterは同じ文字である必要があります。

テキスト・リテラルは、次のようにCHARデータ型とVARCHAR2データ型の両方のプロパティを持ちます。

- 式と条件の中のテキスト・リテラルは、OracleによってCHARデータ型として扱われ、空白埋め比較セマンティクスで比較されます。

- テキスト・リテラルの最大長は、初期化パラメータがMAX_STRING_SIZE = STANDARDの場合は4,000バイトになり、MAX_STRING_SIZE = EXTENDEDの場合は32,767になります。詳細は、「拡張データ型」を参照してください。

有効なテキスト・リテラルの例を次に示します。

'Hello'
'ORACLE.dbs'
'Jackie''s raincoat'
'09-MAR-98'
N'nchar literal'

代替引用メカニズムを使用した場合の、有効なテキスト・リテラルの例を次に示します。

q'!name LIKE '%DBMS_%%'!'
q'<'So,' she said, 'It's finished.'>'
q'{SELECT * FROM employees WHERE last_name = 'Smith';}'
nq'ï Ÿ1234 ï'
q'"name like '['"'

関連項目:
「空白埋め比較セマンティクスおよび非空白埋め比較セマンティクス」

数値リテラル

固定小数点数および浮動小数点数を指定するには、数値リテラルの表記法を使用します。

整数リテラル

このマニュアルの他の箇所で、式、条件、SQLファンクションおよびSQL文に示されているinteger(整数)に値を指定するときには、必ずこの表記法を使用してください。

integer(整数)の構文は次のとおりです。

integer::=

digitは、0、1、2、3、4、5、6、7、8、9のいずれかです。

整数は最大38桁の精度を記憶できます。

有効なinteger(整数)の例を次に示します。

7
+255

NUMBERおよび浮動小数点リテラル

このマニュアルの他の箇所で、式、条件、SQLファンクションおよびSQL文に示されているnumberまたはn(数)に値を指定するときには、必ずこれらの表記法を使用してください。

number(数)の構文は次のとおりです。

number::=

それぞれの意味は、次のとおりです。

- +または-は、正の値または負の値を示します。符号を指定しない場合、デフォルトは正の値です。

- digitは、0、1、2、3、4、5、6、7、8、9のいずれかです。

- eまたはEは、数が科学表記法で指定されることを示します。Eの後の数字が指数を示します。指数は-130から125の範囲で指定します。

- fまたはFは、数がBINARY_FLOAT型の32ビットの2進浮動小数点数であることを示します。

- dまたはDは、数がBINARY_DOUBLE型の64ビットの2進浮動小数点数であることを示します。
f(F)およびd(D)を省略すると、数はNUMBER型になります。

接尾辞f(F)およびd(D)は、浮動小数点数リテラルでのみサポートされます。文字列ではNUMBERに変換されるため、サポートされません。たとえば、OracleがNUMBERを想定している場合に、文字列'9'を使用すると、文字列は数字の9に変換されます。ただし、文字列'9f'を使用すると、変換は行われず、エラーが戻されます。

NUMBER型の数値は、最大38桁の精度を記憶できます。NUMBER、BINARY_FLOATまたはBINARY_DOUBLEで提供される精度以上の精度がリテラルに必要な場合、値は切り捨てられます。リテラルの範囲がNUMBER、BINARY_FLOATまたはBINARY_DOUBLEでサポートされる範囲を超える場合、エラーが発生します。

数値リテラルはSQL構文の要素であり、NLS設定には従いません。数値リテラルの小数点区切り文字は、常にピリオド(.)です。ただし、数値が必要な箇所でテキスト・リテラルが指定されている場合、テキスト・リテラルはNLSに従って暗黙的に数値に変換されます。テキスト・リテラルに含まれる小数点区切りは、初期化パラメータNLS_NUMERIC_CHARACTERSで設定されたものである必要があります。NLS環境に関係なく動作するように、SQLスクリプトでは数値リテラルを使用することが推奨されます。

次の例は、数値リテラルとテキスト・リテラルでの小数点区切りの動作を示しています。これらの例では、次の文で現在のセッションに、カンマ(,)がNLS小数点区切りとして設定されていると想定しています。

ALTER SESSION SET NLS_NUMERIC_CHARACTERS=',.';

前の文では、ピリオド(.)もNLSグループ・セパレータとして設定されていますが、それはこれらの例とは関係ありません。

この例では、数値リテラル1.23では必要な小数点区切り(.)が使用されており、テキスト・リテラル'2,34'では設定されたNLS小数点区切り(,)が使用されています。テキスト・リテラルは数値2.34に変換され、出力は小数点区切りのカンマを使用して表示されます。

SELECT 2 * 1.23, 3 * '2,34' FROM DUAL;

2*1.23   3*'2,34'
---------- ----------
2,46       7,02

次の例では、カンマは数値リテラルの一部として扱われていません。かわりに、カンマは2つの数式2*1と23のリストのデリミタとして扱われています。

SELECT 2 * 1,23 FROM DUAL;

2*1         23
---------- ----------
2         23

次の例は、テキストから数値への暗黙的な変換を成功させるには、テキスト・リテラルの小数点区切りとNLS小数点区切りが一致する必要があることを示しています。　次の文は、小数点区切り(.)が設定されたNLS小数点区切り(,)と一致しないため失敗します。

SELECT 3 * '2.34' FROM DUAL;
*
ERROR at line 1:
ORA-01722: invalid number

関連項目:
「ALTER SESSION」および『Oracle Databaseリファレンス』を参照してください。

有効なNUMBERリテラルの例を次に示します。

25
+6.34
0.5
25e-03
-1

有効な浮動小数点数リテラルの例を次に示します。

25f
+6.34F
0.5d
-1D

値を数値リテラルとして表現できない場合は、次の浮動小数点リテラルを使用することもできます。

リテラル

意味

例

binary_float_nan

IS NAN条件がtrueであるBINARY_FLOAT型の値

SELECT COUNT(*)
FROM employees
WHERE TO_BINARY_FLOAT(commission_pct)
!= BINARY_FLOAT_NAN;

binary_float_infinity

単精度の正の無限大

SELECT COUNT(*)
FROM employees
WHERE salary < BINARY_FLOAT_INFINITY;

binary_double_nan

IS NAN条件がtrueであるBINARY_DOUBLE型の値

SELECT COUNT(*)
FROM employees
WHERE TO_BINARY_FLOAT(commission_pct)
!= BINARY_FLOAT_NAN;

binary_double_infinity

倍精度の正の無限大

SELECT COUNT(*)
FROM employees
WHERE salary < BINARY_DOUBLE_INFINITY;

日時リテラル

Oracle Databaseは、DATE、TIMESTAMP、TIMESTAMP WITH TIME ZONEおよびTIMESTAMP WITH LOCAL TIME ZONEの4つの日時データ型をサポートしています。

日付リテラル DATE値を文字列リテラルに指定するか、文字値や数値をTO_DATEファンクションによって日付値に変換できます。Oracle Databaseが文字列リテラルのかわりにTO_DATE式を受け入れるのは、DATEリテラルの場合だけです。

DATE値をリテラルに指定する場合は、グレゴリオ暦を使用する必要があります。次の例に示すように、ANSIのリテラルを指定できます。

DATE '1998-12-25'

ANSIの日付リテラルには、時刻部分を含めず、書式'YYYY-MM-DD'で指定する必要があります。また、次のように、Oracleの日付値を指定できます。

TO_DATE('98-DEC-25 17:30','YY-MON-DD HH24:MI')

OracleのDATE値のデフォルトの日付書式は、初期化パラメータNLS_DATE_FORMATで指定します。この例は、日付としての2桁の数、月の名前の省略形、年の下2桁および24時間表記の時刻を含む日付書式です。

デフォルト日付書式の文字値が日付式で使用されると、Oracleは自動的にそれらを日付値に変換します。

日付値を指定する場合に時刻コンポーネントを指定しないと、デフォルト時刻の真夜中(24時間表記では00:00:00、12時間表記では12:00:00)が採用されます。日付値を指定する場合に日付を指定しないと、デフォルト日付である現在の月の最初の日が採用されます。

OracleのDATE列には、常に、日付フィールドと時刻フィールドが含まれます。したがって、DATE列を問い合せる場合は、問合せで時刻フィールドを指定するか、またはDATE列の時刻フィールドが真夜中に設定されていることを確認する必要があります。そうでない場合、Oracleは、正しい結果を戻さない場合があります。時刻フィールドを真夜中に設定するには、TRUNC日付ファンクションを使用します。また、問合せに、等価性や非等価性の条件のかわりに大/小条件を含めることもできます。

次の例では、数値列row_numおよびDATE列datecolを持つ表my_tableがあると想定します。

INSERT INTO my_table VALUES (1, SYSDATE);
INSERT INTO my_table VALUES (2, TRUNC(SYSDATE));

SELECT *
FROM my_table;

ROW_NUM DATECOL
---------- ---------
1 03-OCT-02
2 03-OCT-02

SELECT *
FROM my_table
WHERE datecol > TO_DATE('02-OCT-02', 'DD-MON-YY');

ROW_NUM DATECOL
---------- ---------
1 03-OCT-02
2 03-OCT-02

SELECT *
FROM my_table
WHERE datecol = TO_DATE('03-OCT-02','DD-MON-YY');

ROW_NUM DATECOL
---------- ---------
2 03-OCT-02

DATE列の時刻フィールドが真夜中に設定されている場合は、前述の例に示すように、DATE列に対して問い合せるか、DATEリテラルを使用して問い合せることができます。

SELECT *
FROM my_table
WHERE datecol = DATE '2002-10-03';

ROW_NUM DATECOL
---------- ---------
2 03-OCT-02

ただし、DATE列が真夜中以外の値を含む場合、正しい結果を得るためには、問合せで時刻フィールドを排除する必要があります。次に例を示します。

SELECT *
FROM my_table
WHERE TRUNC(datecol) = DATE '2002-10-03';

ROW_NUM DATECOL
---------- ---------
1 03-OCT-02
2 03-OCT-02

Oracleは、問合せの各行にTRUNCファンクションを適用します。これによって、データの時刻フィールドが真夜中である場合、パフォーマンスが向上します。時刻フィールドを真夜中に設定するには、挿入および更新時に次のいずれかの操作を行います。

- TO_DATEファンクションを使用して、時刻フィールドをマスクします。

INSERT INTO my_table
VALUES (3, TO_DATE('3-OCT-2002','DD-MON-YYYY'));

- DATEリテラルを使用します。

INSERT INTO my_table
VALUES (4, '03-OCT-02');

- TRUNCファンクションを使用します。

INSERT INTO my_table
VALUES (5, TRUNC(SYSDATE));

日付ファンクションSYSDATEは、現在のシステムの日付および時刻を戻します。CURRENT_DATEファンクションは、現在のセッションの日付を戻します。SYSDATE、TO_*日時ファンクションおよびデフォルト日付書式の詳細は、「日時ファンクション」を参照してください。

TIMESTAMPリテラル TIMESTAMPデータ型は、年、月、日、時、分、秒、および秒の小数部の値を格納します。TIMESTAMPをリテラルに指定する場合、fractional_seconds_precision値には最大9桁を指定できます。次に例を示します。

TIMESTAMP '1997-01-31 09:26:50.124'

TIMESTAMP WITH TIME ZONEリテラル TIMESTAMP WITH TIME ZONEデータ型は、タイムゾーン地域名またはタイムゾーン・オフセットを含むTIMESTAMPの変形です。TIMESTAMP WITH TIME ZONEをリテラルに指定する場合、fractional_seconds_precision値には最大9桁を指定できます。次に例を示します。

TIMESTAMP '1997-01-31 09:26:56.66 +02:00'

2つのTIMESTAMP WITH TIME ZONE値がUTCで同じ時刻を表す場合は、データに格納されたTIME ZONEオフセットにかかわらず、同一であるとみなされます。次に例を示します。

TIMESTAMP '1999-04-15 8:00:00 -8:00'

前述の例文は次の例文と同じです。

TIMESTAMP '1999-04-15 11:00:00 -5:00'

太平洋標準時の午前8時は、東部標準時の午前11時と同じです。

UTCオフセットをTZR(タイムゾーン地域名)書式要素に置換できます。次の例では、前述の例と同じ値を持ちます。

TIMESTAMP '1999-04-15 8:00:00 US/Pacific'

夏時間に切り替えられる境界のあいまいさを排除するには、TZRおよび対応するTZD書式要素の両方を使用します。次の例では、前述の例が確実に夏時間の値を戻します。

TIMESTAMP '1999-10-29 01:30:00 US/Pacific PDT'

タイムゾーン・オフセットは日時式を使用して表記することもできます。

SELECT TIMESTAMP '2009-10-29 01:30:00' AT TIME ZONE 'US/Pacific'
FROM DUAL;

関連項目:
詳細は、「日時式」を参照してください。

ERROR_ON_OVERLAP_TIMEセッション・パラメータをTRUEに設定しておくと、TZD書式要素を追加しなかったために日時値があいまいな場合、Oracleはエラーを戻します。パラメータをFALSEに設定しておくと、Oracleはあいまいな日時を、指定した地域の標準時刻として解析します。

TIMESTAMP WITH LOCAL TIME ZONEリテラル TIMESTAMP WITH LOCAL TIME ZONEデータ型は、TIMESTAMP WITH TIME ZONEとは異なり、データベースに格納されるデータはデータベースのタイムゾーンに正規化されます。タイムゾーン・オフセットは、列データの一部として格納されません。TIMESTAMP WITH LOCAL TIME ZONEにはリテラルはありません。他の有効な日時リテラルを使用してこのデータ型の値を示してください。次の表には、TIMESTAMP WITH LOCAL TIME ZONE列に値を挿入するときに使用できる一部の書式と、問合せによって戻される対応する値を示します。

INSERT文の中で指定する値

問合せによって戻される値

'19-FEB-2004'

19-FEB-2004.00.00.000000 AM

SYSTIMESTAMP

19-FEB-04 02.54.36.497659 PM

TO_TIMESTAMP('19-FEB-2004', 'DD-MON-YYYY')

19-FEB-04 12.00.00.000000 AM

SYSDATE

19-FEB-04 02.55.29.000000 PM

TO_DATE('19-FEB-2004', 'DD-MON-YYYY')

19-FEB-04 12.00.00.000000 AM

TIMESTAMP'2004-02-19 8:00:00 US/Pacific'

19-FEB-04 08.00.00.000000 AM

指定した値に時刻コンポーネントがない場合(明示的または暗黙的に)、デフォルトの午前0時の値が戻されます。

期間リテラル

期間リテラルは期間を指定します。年および月、または日付、時間、分および秒の違いを指定できます。Oracle Databaseは、YEAR TO MONTHおよびDAY TO SECONDの2種類の期間リテラルをサポートします。各リテラルは先行フィールドを含み、後続フィールドを含むこともあります。先行フィールドは、計測する日付または時刻の基本単位を定義します。後続フィールドは、考慮する基本単位の最小増分値を定義します。たとえば、YEAR TO MONTH期間では、最も近い月に対する年との期間が考慮されます。DAY TO MINUTE期間では、最も近い分に対する日との期間が考慮されます。

数値形式の日付データがある場合、NUMTOYMINTERVALまたはNUMTODSINTERVAL変換ファンクションを使用して、数値データを期間値へ変換できます。

期間リテラルは、主に分析ファンクションとともに使用します。

関連項目:
「分析ファンクション」、「NUMTODSINTERVAL」、「NUMTOYMINTERVAL」

INTERVAL YEAR TO MONTH

次の構文を使用して、YEAR TO MONTH期間リテラルを指定します。

interval_year_to_month::=

それぞれの意味は、次のとおりです。

- 'integer [-integer]'には、リテラルの先行フィールドおよびオプションの後続フィールドの整数値を指定します。先行フィールドがYEARで、後続フィールドがMONTHの場合、MONTHフィールドの整数値の範囲は0から11です。

- precisionは、先行フィールドの桁数です。先行フィールド精度の有効範囲は0から9で、デフォルトは2です。

先行フィールドの制限事項: 後続フィールドを指定する場合は、その桁数を先行フィールドの桁数より少なく設定する必要があります。たとえば、INTERVAL '0-1' MONTH TO YEARは無効です。

次のINTERVAL YEAR TO MONTHリテラルは、intervalが123年2か月であることを示しています。

INTERVAL '123-2' YEAR(3) TO MONTH

このリテラルの他の書式の例を次に示します。省略バージョンも含みます。

期間リテラルの書式

説明

INTERVAL '123-2' YEAR(3) TO MONTH

123年2か月のintervalを示します。先行フィールド精度がデフォルトの2桁より大きい場合、その精度を指定してください。

INTERVAL '123' YEAR(3)

123年0か月のintervalを示します。

INTERVAL '300' MONTH(3)

300か月のintervalを示します。

INTERVAL '4' YEAR

INTERVAL '4-0' YEAR TO MONTHへマップし、4年を示します。

INTERVAL '50' MONTH

INTERVAL '4-2' YEAR TO MONTHへマップし、50か月(4年2か月)を示します。

INTERVAL '123' YEAR

デフォルト精度は2ですが、123が3桁のため、エラーを戻します。

あるINTERVAL YEAR TO MONTHリテラルを別のリテラルに加算または減算して、新しいINTERVAL YEAR TO MONTHリテラルを作成できます。次に例を示します。

INTERVAL '5-3' YEAR TO MONTH + INTERVAL'20' MONTH =
INTERVAL '6-11' YEAR TO MONTH

INTERVAL DAY TO SECOND

次の構文を使用して、DAY TO SECOND期間リテラルを指定します。

interval_day_to_second::=

それぞれの意味は、次のとおりです。

- integerは日数を指定します。ここで指定した値の桁数が先行精度で指定した桁数より大きい場合、Oracleはエラーを戻します。

- time_exprには、HH[:MI[:SS[.n]]]、MI[:SS[.n]]またはSS[.n]の形式で時間を指定します(ここで、nは秒の小数部を指定します)。nの桁数が、fractional_seconds_precisionで指定した数より多い場合、nはfractional_seconds_precision値で指定した数に丸められます。先行フィールドがDAYの場合にのみ、1桁の整数および1つの空白の後にtime_exprを指定できます。

- leading_precisionは、先行フィールドの桁数です。有効範囲は0から9です。デフォルトは2です。

- fractional_seconds_precisionは、SECOND日時フィールドの小数部の桁数です。有効範囲は1から9です。デフォルトは6です。

先行フィールドの制限事項: 後続フィールドを指定する場合は、その桁数を先行フィールドの桁数より少なく設定する必要があります。たとえば、INTERVAL MINUTE TO DAYは無効です。このため、SECONDが先行フィールドの場合、期間リテラルは後続フィールドを持つことができません。

後続フィールドの有効範囲は次のとおりです。

- HOUR: 0から23

- MINUTE: 0から59

- SECOND: 0から59.999999999

様々なINTERVAL DAY TO SECONDリテラルの書式の例を次に示します。省略バージョンも含みます。

期間リテラルの書式

説明

INTERVAL '4 5:12:10.222' DAY TO SECOND(3)

4日5時間12分10.222秒を示します。

INTERVAL '4 5:12' DAY TO MINUTE

4日5時間12分を示します。

INTERVAL '400 5' DAY(3) TO HOUR

400日5時間を示します。

INTERVAL '400' DAY(3)

400日を示します。

INTERVAL '11:12:10.2222222' HOUR TO SECOND(7)

11時間12分10.2222222秒を示します。

INTERVAL '11:20' HOUR TO MINUTE

11時間20分を示します。

INTERVAL '10' HOUR

10時間を示します。

INTERVAL '10:22' MINUTE TO SECOND

10分22秒を示します。

INTERVAL '10' MINUTE

10分を示します。

INTERVAL '4' DAY

4日を示します。

INTERVAL '25' HOUR

25時間を示します。

INTERVAL '40' MINUTE

40分を示します。

INTERVAL '120' HOUR(3)

120時間を示します。

INTERVAL '30.12345' SECOND(2,4)

30.1235秒を示します。精度は4のため、秒の小数部'12345'は'1235'に丸められます。

DAY TO SECOND期間リテラルを別のDAY TO SECOND期間リテラルに加算または減算できます。次に例を示します。

INTERVAL'20' DAY - INTERVAL'240' HOUR = INTERVAL'10-0' DAY TO SECOND

書式モデル

書式モデルは、文字列に格納される日時データや数値データの書式を記述する文字リテラルです。書式モデルによってデータベース内に格納された値の内部表現は変更されません。文字列を日付または数値に変換する場合、書式モデルによって、Oracle Databaseによる文字列の変換方法が決まります。SQL文では、書式モデルをTO_CHARファンクションやTO_DATEファンクションの引数として使用して、次の書式を指定できます。

- Oracleがデータベースから値を戻す場合に使用する書式

- Oracleがデータベースに格納するために指定した値の書式

次に例を示します。

- '17:45:29'の日時書式モデルは、'HH24:MI:SS'です。

- '11-Nov-1999'の日時書式モデルは、'DD-Mon-YYYY'です。

- '$2,304.25'の数値書式モデルは、'$9,999.99'です。

日時および数値書式モデルの要素のリストは、表2-13「数値書式要素」および表2-15「日時書式要素」を参照してください。

いくつかの書式の値は、初期化パラメータの値によって決まります。これらの書式要素によって戻される文字は、初期化パラメータNLS_TERRITORYを使用して暗黙的に指定することもできます。デフォルト日付書式をセッションごとに変更するには、ALTER SESSION文を使用します。

関連項目:

- これらのパラメータの値の変更については、「ALTER SESSION」を参照してください。書式モデルの使用例は、「書式モデルの例」を参照してください。

- 「TO_CHAR(日時)」、「TO_CHAR(数値)」および「TO_DATE」を参照してください。

- これらのパラメータの詳細は、『Oracle Databaseリファレンス』および『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

この項の後半では、次の書式モデルの使用方法について説明します。

- 数値書式モデル

- 日時書式モデル

- 書式モデルの修飾子

数値書式モデル

次のファンクションで数値書式モデルを使用できます。

- NUMBER、BINARY_FLOATまたはBINARY_DOUBLEデータ型の値をVARCHAR2データ型の値に変換するTO_CHARファンクション

- CHARデータ型またはVARCHAR2データ型の値をNUMBERデータ型の値に変換するTO_NUMBERファンクション

- CHARおよびVARCHAR2式をBINARY_FLOATまたはBINARY_DOUBLEの値に変換するTO_BINARY_FLOATファンクションおよびTO_BINARY_DOUBLEファンクション

すべての数値書式モデルでは、数値が指定された有効桁数に丸められます。小数点左の有効桁数が書式で指定された桁数より多い場合、シャープ記号(#)が値のかわりに戻されます。通常、このイベントは、TO_CHARファンクションを制限的な数値書式文字列で使用して、丸め処理が行われた場合に発生します。

- 正のNUMBERの値が非常に大きく、指定の書式で表せない場合、無限大記号(~)が値のかわりに戻されます。同様に、負のNUMBERの値が非常に小さく、指定の書式で表せない場合、負の無限大記号(-~)が戻されます。

- BINARY_FLOATまたはBINARY_DOUBLEの値がCHARまたはNCHARに変換される場合、無限大またはNaN(非数値)のいずれかが入力されると、Oracleは常に値のかわりにシャープ記号を戻します。ただし、書式モデルを省略すると、OracleはInfまたはNanを文字列として戻します。

数値書式要素

数値書式モデルは、1つ以上の数値書式要素で構成されます。次の表に、数値書式モデルの要素とその例を示します。

数値書式モデルに書式要素MI、SまたはPRが指定されないかぎり、負の戻り値の先頭には自動的に負の符号が付けられ、正の戻り値の先頭には空白が付けられます。

表2-13 数値書式要素

要素

例

説明

,(カンマ)

9,999

指定した位置にカンマを戻します。1つの数値書式モデルに複数のカンマを指定できます。

制限事項:

- 数値書式モデルは、カンマ要素で始めることはできません。

- 数値書式モデルでは、カンマを小数点文字やピリオドの右側に指定できません。

. (ピリオド)

99.99

指定した位置に小数点(ピリオド(.))を戻します。

制限事項: 1つの数値書式モデルには1つのピリオドのみ指定できます。

$

$9999

値の前にドル記号を付けて戻します。

0

0999

9990

先行0(ゼロ)を戻します。

後続0(ゼロ)を戻します。

9

9999

指定された桁数の値を戻します。正の場合は先行空白が含まれ、負の場合は先行マイナスが含まれます。先行0(ゼロ)は空白ですが、0(ゼロ)値の場合は固定小数点数の整数部分に0(ゼロ)を戻します。

B

B9999

整数部が0(ゼロ)の場合、書式モデル内の0(ゼロ)にかかわらず、固定小数点数の整数部に対して空白を戻します。

C

C999

指定した位置にISO通貨記号(NLS_ISO_CURRENCYパラメータの現在の値)を戻します。

D

99D99

指定した位置に小数点文字(NLS_NUMERIC_CHARACTERパラメータの現在の値)を戻します。デフォルトはピリオド(.)です。

制限事項: 1つの数値書式モデルには1つの小数点文字のみ指定できます。

EEEE

9.9EEEE

科学表記法で値を戻します。

G

9G999

指定した位置に桁区切り(NLS_NUMERIC_CHARACTERパラメータの現在の値)を戻します。1つの数値書式モデルに複数の桁区切りを指定できます。

制限事項: 数値書式モデルにおいて、桁区切りは小数点文字やピリオドの右側に指定できません。

L

L999

指定した位置にローカル通貨記号(NLS_CURRENCYパラメータの現在の値)を戻します。

MI

9999MI

負の値の後に負の符号(-)を戻します。

正の値の後に空白を戻します。

制限事項: 書式要素MIは、数値書式モデルの最後の位置にのみ指定できます。

PR

9999PR

山カッコ<>の中に負の値を戻します。

正の値の前後に空白を付けて戻します。

制限事項: 書式要素PRは、数値書式モデルの最後の位置にのみ指定できます。

RN

rn

RN

rn

大文字のローマ数字で値を戻します。

小文字のローマ数字で値を戻します。

値は1から3999の整数となります。

S

S9999

9999S

負の値の前に負の符号(-)を戻します。

正の値の前に正の符号(+)を戻します。

負の値の後に負の符号(-)を戻します。

正の値の後に正の符号(+)を戻します。

制限事項: 書式要素Sは、数値書式モデルの最初または最後の位置にのみ指定できます。

TM

TM

テキストの最小数値書式モデルは、文字の最小数を(10進出力で)戻します。この要素の大文字と小文字は区別されません。

デフォルトはTM9で、出力が64文字を超えないかぎり、固定表記法で数値を戻します。戻り値が64文字を超える場合、Oracle Databaseは自動的に科学表記法で文字数を戻します。

制限事項:

- この要素の前に他の要素を指定することはできません。

- この要素の後には、9、E(1つ)またはe(1つ)のみを指定できます。次の文は、エラーを戻します。
SELECT TO_CHAR(1234, 'TM9e') FROM DUAL;

U

U9999

指定した位置にユーロ(または他の)第2通貨記号(NLS_DUAL_CURRENCYパラメータの現在の値によって決定される)を戻します。

V

999V99

値を10のn乗にして戻します(必要に応じて数値を丸めます)。ここで、nはVの後の9の数です。

X

XXXX

xxxx

指定の桁数の16進数値を戻します。指定した値が整数でない場合、Oracle Databaseはその値を整数に丸めます。

制限事項:

- この要素は、正の値または0(ゼロ)のみを受け入れます。負の値の場合、エラーを戻します。

- この要素の前には、0(先行0(ゼロ)を戻す)またはFMのみを指定できます。その他の要素の場合、エラーを戻します。0(ゼロ)またはFMをXと同時に指定しないと、戻り値の前に常に空白が1つ追加されます。詳細は、書式モデル修飾子「FM」を参照してください。

表2-14に、異なる値のnumberと'fmt'に対して次の問合せを行った場合の結果を示します。

SELECT TO_CHAR(number, 'fmt')
FROM DUAL;

表2-14 数値変換の結果

number

'fmt'

結果

-1234567890

9999999999S

'1234567890-'

0

99.99

' .00'

+0.1

99.99

' .10'

-0.2

99.99

' -.20'

0

90.99

' 0.00'

+0.1

90.99

' 0.10'

-0.2

90.99

' -0.20'

0

9999

' 0'

1

9999

' 1'

0

B9999

' '

1

B9999

' 1'

0

B90.99

' '

+123.456

999.999

' 123.456'

-123.456

999.999

'-123.456'

+123.456

FM999.009

'123.456'

+123.456

9.9EEEE

' 1.2E+02'

+1E+123

9.9EEEE

' 1.0E+123'

+123.456

FM9.9EEEE

'1.2E+02'

+123.45

FM999.009

'123.45'

+123.0

FM999.009

'123.00'

+123.45

L999.99

' $123.45'

+123.45

FML999.99

'$123.45'

+1234567890

9999999999S

'1234567890+'

日時書式モデル

次のファンクションで日時書式モデルを使用できます。

- デフォルト書式以外の書式の文字値を日時値に変換するTO_*日時ファンクション(TO_*日時ファンクションとは、TO_DATE、TO_TIMESTAMPおよびTO_TIMESTAMP_TZです。)

- デフォルト書式以外の書式の日時値を文字値に変換する(たとえば、アプリケーションから日付を出力する)TO_CHARファンクション

日時書式モデルの合計長は最大22文字です。

デフォルト日時書式は、NLSセッション・パラメータNLS_DATE_FORMAT、NLS_TIMESTAMP_FORMATおよびNLS_TIMESTAMP_TZ_FORMATで明示的に指定することも、NLSセッション・パラメータNLS_TERRITORYで暗黙的に指定することもできます。デフォルト日時書式をセッションごとに変更するには、ALTER SESSION文を使用します。

関連項目:
NLSパラメータの詳細は、「ALTER SESSION」および『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

日時書式要素

日時書式モデルは、表2-15「日時書式要素」に示す、1つ以上の日時書式要素で構成されます。

- 入力書式モデルの場合、同じ書式項目は2回指定できません。また、類似した情報を表す書式項目を組み合せることもできません。たとえば、'SYYYY'と'BC'を同一の書式文字列内で使用することはできません。

- 2番目の列は、書式要素がTO_*日付ファンクションで使用可能かどうかを示します。TO_CHARファンクションでは、すべての書式要素が使用できます。

- 日時書式要素FF、TZD、TZH、TZMおよびTZRは、タイムスタンプおよび期間書式モデルでは使用できますが、元のDATE書式モデルでは使用できません。

- 多くの場合、日時書式要素は一定の長さになるまで空白または先行0(ゼロ)が埋め込まれます。詳細は、書式モデル修飾子「FM」を参照してください。

注意:
年要素は、短いものではなく4桁のもの(YYYY)を使用することをお薦めしますが、その理由は次のとおりです。

- 4桁の年要素ならば、あいまいさが排除されます。

- 短い年要素は、問合せ最適化に影響を及ぼすことがあります(問合せコンパイルの時点では年が未知であり、実行時にならないと判明しないことがあるため)。

日付書式要素における大文字

戻される日付値では、その大文字と小文字は対応する書式要素の表記に従います。たとえば、日付書式モデル「DAY」は「MONDAY」、「Day」は「Monday」、「day」は「monday」を生成します。

日時書式モデルにおける句読点と文字リテラル

日付書式モデルでは、次の文字を指定できます。

- ハイフン、スラッシュ、カンマ、ピリオド、コロンなどの句読点

- 文字リテラル(二重引用符で囲みます)

これらの文字は、戻り値の中で書式モデルに指定された位置と同じ位置に現れます。

表2-15 日時書式要素

要素

TO_*日時ファンクションで指定できるか

説明

-
/
,
.
;
:
"text"

可

結果に取り込まれる句読点とテキスト。

AD
A.D.

可

ピリオド付き/なしで西暦を示します。

AM
A.M.

可

ピリオド付き/なしで子午線インジケータを示します。

BC
B.C.

可

ピリオド付き/なしで紀元前を示します。

CC
SCC

世紀。

- 4桁で表した年の下2桁が01から99(01および99を含む)の場合、世紀はその年の上2桁より1つ大きくなります。

- 4桁で表した年の下2桁が00の場合、世紀はその年の上2桁と同一になります。

たとえば、2002は21を戻し、2000は20を戻します。

D

可

曜日(1から7)。この要素はセッションのNLS地域に依存します。

DAY

可

曜日。

DD

可

月における日(1から31)。

DDD

可

年における日(1から366)。

DL

可

Oracle DatabaseのDATE書式の拡張である長い日付書式の値(NLS_DATE_FORMATパラメータの現在の値によって決定される)を戻します。日付コンポーネント(曜日、月番号など)は、NLS_TERRITORYおよびNLS_LANGUAGEパラメータに応じて表示されます。たとえば、AMERICAN_AMERICAロケールでは、これは書式'fmDay, Month dd, yyyy'を指定することと同じです。GERMAN_GERMANYロケールでは、'fmDay, dd. Month yyyy'形式で指定したのと同じです。

制限事項: この書式はTS要素とのみ指定できます。その場合は空白で区切ります。

DS

可

短い日付書式の値を戻します。日付コンポーネント(曜日、月番号など)は、NLS_TERRITORYおよびNLS_LANGUAGEパラメータに応じて表示されます。たとえば、AMERICAN_AMERICAロケールでは、これは書式'MM/DD/RRRR'を指定することと同じです。ENGLISH_UNITED_KINGDOMロケールでは、書式'DD/MM/RRRR'を指定することと同じです。

制限事項: この書式はTS要素とのみ指定できます。その場合は空白で区切ります。

DY

可

曜日の省略形。

E

可

時代名の略称(日本、台湾、タイ)。

EE

可

時代名の完全名称(日本、台湾、タイ)。

FF [1..9]

可

小数部。基数は出力されません。基数文字の追加には、X書式要素を使用します。FFの後に1から9の数字を設定して、戻される日時値のミリ秒部分の桁数を指定します。数字を指定しない場合は、日時データ型に指定された精度またはデータ型のデフォルトの精度が使用されます。タイムスタンプ書式および期間書式では有効ですが、DATE書式では有効ではありません。

例: 'HH:MI:SS.FF'

SELECT TO_CHAR(SYSTIMESTAMP, 'SS.FF3') from DUAL;

FM

可

前後に空白を付けずに値を戻します。

関連項目: FM

FX

可

文字データと書式モデルが完全に一致する必要があります。

関連項目: FX

HH
HH12

可

時間(1から12)。

HH24

可

時間(0から23)。

IW

ISO 8601標準で定義されている年の暦週(1-52または1-53)。

- 暦週は月曜日に始まります。

- 年の最初の暦集は、1月4日を含みます。

- 年の最初の暦集は、12月19、30、31日を含む場合があります。

- 年の最後の暦集は、1月1、2、3日を含む場合があります。

IYYY

ISO 8601標準で定義されている暦週を含む4桁で表される年。

IYY
IY
I

ISO 8601標準で定義されている暦週を含む、下3桁、2桁、1桁で表される年。

J

可

ユリウス日(紀元前4712年1月1日からの経過日数)。Jで指定する数字は、整数でなければならない。

MI

可

分(0から59)。

MM

可

月(01~12、1月 = 01)。

MON

可

月の名前の省略形。

MONTH

可

月の名前。

PM
P.M.

可

ピリオド付き/なしで子午線インジケータを示します。

Q

年の四半期(1、2、3、4。1月から3月=1)。

RM

可

ローマ数字で表した月(IからXII。1月=I)。

RR

可

2桁のみを使用して、21世紀に20世紀の日付を格納できます。

関連項目: 「RR日時書式要素」

RRRR

可

年を丸めます。4桁または2桁で入力できます。2桁の場合、RRの場合と同様の結果が戻ります。年を4桁で入力すると、この処理は行われません。

SS

可

秒(0から59)。

SSSSS

可

午前0時から経過した秒(0から86399)。

TS

可

短い時刻書式の値を戻します。時刻コンポーネント(時、分など)は、NLS_TERRITORYおよびNLS_LANGUAGE初期化パラメータに応じて表示されます。

制限事項: この書式はDL要素またはDS要素とのみ指定できます。その場合は空白で区切ります。

TZD

可

夏時間の情報。TZDの値は、夏時間の情報を持つタイムゾーン文字列の省略形です。TZRで指定した地域と対応している必要があります。タイムスタンプ書式および期間書式では有効ですが、DATE書式では有効ではありません。

例: PST(米国/太平洋標準時)、PDT(米国/太平洋夏時間)

TZH

可

タイムゾーンの時間。(TZM書式要素を参照。)タイムスタンプ書式および期間書式では有効ですが、DATE書式では有効ではありません。

例: 'HH:MI:SS.FFTZH:TZM'

TZM

可

タイムゾーンの分。(TZH書式要素を参照。)タイムスタンプ書式および期間書式では有効ですが、DATE書式では有効ではありません。

例: 'HH:MI:SS.FFTZH:TZM'

TZR

可

タイムゾーン地域の情報。値は、データベースでサポートされるタイムゾーン地域名である必要があります。タイムスタンプ書式および期間書式では有効ですが、DATE書式では有効ではありません。

例: US/Pacific

WW

年における週(1から53)。第1週はその年の1月1日で始まり、1月7日で終了します。

W

月における週(1から5)。第1週はその月の1日で始まり、7日で終了します。

X

可

ローカル基数文字。

例: 'HH:MI:SSXFF'

Y,YYY

可

指定した位置にカンマを付けた年。

YEAR
SYEAR

フルスペルで表した年。Sを指定すると紀元前の日付の先頭に負の符号(-)が付けられます。

YYYY
SYYYY

可

4桁で表した年。Sを指定すると紀元前の日付の先頭に負の符号(-)が付けられます。

YYY
YY
Y

可

それぞれ年の下3桁、2桁、1桁。

Oracle Databaseは、一定の柔軟性によって文字列を日付に変換します。たとえば、TO_DATEファンクションの使用時、句読点文字を含む書式モデルと、句読点文字がないか、一部を使用した入力文字列は同じになり、入力文字列の各数値要素に最大許容桁数が含まれます(たとえば、'MM'に2桁の'05'、'YYYY'に4桁の'2007')。次の文は、エラーを戻しません。

SELECT TO_CHAR(TO_DATE('0207','MM/YY'), 'MM/YY') FROM DUAL;

TO_CH
-----
02/07

次の書式文字列はエラーを戻しませんが、FX(厳密な書式一致)書式修飾子では、式および書式文字列が完全に一致する必要があります。

SELECT TO_CHAR(TO_DATE('0207', 'fxmm/yy'), 'mm/yy') FROM DUAL;
SELECT TO_CHAR(TO_DATE('0207', 'fxmm/yy'), 'mm/yy') FROM DUAL;
*
ERROR at line 1:
ORA-01861: literal does not match format string

この書式モデルでは、英数字以外の任意の1文字を句読点文字に一致させることができます。たとえば、次の文は、エラーを戻しません。

SELECT TO_CHAR (TO_DATE('02#07','MM/YY'), 'MM/YY') FROM DUAL;

TO_CH
-----
02/07

関連項目:
詳細は、「書式モデルの修飾子」および「文字列から日付への変換に関する規則」を参照してください。

日時書式要素およびグローバリゼーション・サポート

いくつかの日時書式要素の機能は、Oracle Databaseを使用している国および言語に依存します。たとえば、次の日時書式要素は、フルスペルで値が戻されます。

- MONTH

- MON

- DAY

- DY

- BC、AD、B.C.またはA.D.

- AM、PM、A.M.またはP.M.

これらの値を戻す言語は、初期化パラメータNLS_DATE_LANGUAGEによって明示的に指定することも、初期化パラメータNLS_LANGUAGEによって暗黙的に指定することもできます。日時書式要素YEARとSYEARによって戻される値は常に英語です。

日時書式要素Dは、曜日の数(1から7)を戻します。この数が1である曜日は、初期化パラメータNLS_TERRITORYによって暗黙的に指定されます。

関連項目:
グローバリゼーション・サポートの初期化パラメータの詳細は、『Oracle Databaseリファレンス』および『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

ISO標準日付書式要素

Oracleは、ISO規格に従った日時書式要素IYYY、IYY、IY、IおよびIWによって戻される値を計算します。これらの値と日時書式要素YYYY、YYY、YY、YおよびWWによって戻される値の相違点については、『Oracle Databaseグローバリゼーション・サポート・ガイド』の「グローバリゼーション・サポート」の章を参照してください。

RR日時書式要素

RR日時書式要素は、YY日時書式要素に似ていますが、20世紀以外の日付値を格納する場合の柔軟性が優れています。RR日時書式要素によって、現在が21世紀でも、年の下2桁を指定するだけで、20世紀の日付を格納できます。

YY日時書式要素でTO_DATEファンクションを使用した場合、日付値は常に現在の年と同じ上2桁で戻されます。そのかわりにRR日時書式要素を使用した場合、年に指定した2桁の数と現在の年の下2桁の数によって戻り値の世紀が変化します。

したがって、次のようになります。

- 指定された2桁の年が00から49の場合

- 現在の年の下2桁が00から49であれば、戻される年は、現在の年と同じ上2桁を持ちます。

- 現在の年の下2桁が50から99であれば、戻される年の上2桁は、現在の年の上2桁より1多くなります。

- 指定された2桁の年が50から99の場合

- 現在の年の下2桁が00から49であれば、戻される年の上2桁は、現在の年の上2桁より1少なくなります。

- 現在の年の下2桁が50から99であれば、戻される年は、現在の年と同じ上2桁を持ちます。

次に、RR日時書式要素の特長を具体的に説明します。

RR日時書式の例

次の問合せが、1950年から1999年の間に発行されるとします。

SELECT TO_CHAR(TO_DATE('27-OCT-98', 'DD-MON-RR'), 'YYYY') "Year" FROM DUAL;

Year
----
1998

SELECT TO_CHAR(TO_DATE('27-OCT-17', 'DD-MON-RR'), 'YYYY') "Year" FROM DUAL;

Year
----
2017

次の問合せが、2000年から2049年の間に発行されるとします。

SELECT TO_CHAR(TO_DATE('27-OCT-98', 'DD-MON-RR'), 'YYYY') "Year" FROM DUAL;

Year
----
1998

SELECT TO_CHAR(TO_DATE('27-OCT-17', 'DD-MON-RR'), 'YYYY') "Year" FROM DUAL;

Year
----
2017

発行される年(2000年の前後)にかかわらず、問合せが同じ値を戻していることに注目してください。RR日時書式要素によって、年の上2桁が異なっても同じ値を戻すSQL文を記述できます。

日時書式要素の接尾辞

表2-16に、日時書式要素に付加できる接尾辞を示します。

表2-16 日付書式要素の接尾辞

接尾辞

意味

要素の例

値の例

TH

序数

DDTH

4TH

SP

フルスペルで表した数

DDSP

FOUR

SPTHまたはTHSP

フルスペルで表した序数

DDSPTH

FOURTH

日時書式要素の接尾辞の注意事項:

- これらの接尾辞を1つでも日時書式要素に付加した場合、戻り値は常に英語です。

- 日時の接尾辞は出力書式設定にのみ有効です。データベースに日付を挿入するためには使用できません。

書式モデルの修飾子

TO_CHARファンクションの書式モデルで修飾子FMとFXを使用して、空白の埋め方および書式検査を制御できます。

同じ修飾子が1つの書式モデルに2回以上出現してもかまいません。その場合は、2回目以降の出現のたびにその修飾子の効果は逆になります。その効果は、モデルの中の最初の出現に続く部分に対しては有効になり、2番目の出現に続く部分に対しては無効になり、3番目の出現に続く部分に対しては再び有効になり、以降も同様です。

FM Fill mode(埋込みモード)です。書式要素が固定幅になるまで後続空白文字と先行0(ゼロ)が埋め込まれます。幅は、関連する書式モデルの最大要素の表示幅と等しくなります。

- 数値要素には、その要素に指定できる最大値の幅まで先行0(ゼロ)が埋め込まれます。たとえば、YYYY要素は4桁(9999の長さ)まで、HH24は2桁(23の長さ)まで、DDDは3桁(366の長さ)まで埋め込まれます。

- 文字要素MONTH、MON、DAYおよびDYには、NLS_DATE_LANGUAGEパラメータおよびNLS_CALENDARパラメータの値によって指定される有効な名前の中で、それぞれ最長のフルスペルの月名、最長の省略形の月名、最長のフルスペルの曜日または最長の省略形の曜日の幅まで、後続空白が埋め込まれます。たとえば、NLS_DATE_LANGUAGEがAMERICANでNLS_CALENDARがGREGORIAN(デフォルト)の場合、MONTHの最大要素はSEPTEMBERであるため、MONTH書式要素のすべての値は表示文字が9文字になるまで埋め込まれます。NLS_DATE_LANGUAGEパラメータおよびNLS_CALENDARパラメータの値は、TO_CHARおよびTO_*日時ファンクションの3番目の引数で指定されるか、または現行セッションのNLS環境から取得されます。

- 文字要素RMには、長さ4(viiiの長さ)まで後続空白が埋め込まれます。

- その他の文字要素とフルスペルで表した数(SP、SPTHおよびTHSP接尾辞)には埋め込まれません。

FM修飾子を使用すると、TO_CHARファンクションの戻り値で前述の埋込みは行われなくなります。

FX Format exact(厳密な書式一致)です。この修飾子は、TO_DATEファンクションの文字引数と日時書式モデルに対して、厳密な一致を指定します。

- 文字引数における句読点と引用符で囲まれたテキストは、書式モデルの対応する部分と(大/小文字の違いを除いて)厳密に一致する必要があります。

- 文字引数には余分な空白を含めることはできません。FXを指定していない場合、Oracleは余分な空白を無視します。

- 文字引数における数値データの桁数は、書式モデルの対応する要素と同じ桁数である必要があります。FXを指定していない場合、文字引数における数値によっては先行0(ゼロ)が省略されます。
FXが使用可能になっているとき、FM修飾子を指定して、この先行0(ゼロ)のチェックを使用禁止にできます。

文字引数の位置がこれらの条件に違反する場合、Oracleはエラー・メッセージを戻します。

書式モデルの例

次の文は、日付書式モデルを使用して文字式を戻します。

SELECT TO_CHAR(SYSDATE, 'fmDDTH') || ' of ' ||
TO_CHAR(SYSDATE, 'fmMonth') || ', ' ||
TO_CHAR(SYSDATE, 'YYYY') "Ides"
FROM DUAL;

Ides
------------------
3RD of April, 2008

この文はFM修飾子も使用していることに注目してください。FMを指定しないと、月は、次のように空白を埋め込んで9文字にして戻されます。

SELECT TO_CHAR(SYSDATE, 'DDTH') || ' of ' ||
TO_CHAR(SYSDATE, 'Month') || ', ' ||
TO_CHAR(SYSDATE, 'YYYY') "Ides"
FROM DUAL;

Ides
-----------------------
03RD of April    , 2008

次の文は、2つの連続した一重引用符を含む日付書式モデルを使用することによって、戻り値に一重引用符を含めます。

SELECT TO_CHAR(SYSDATE, 'fmDay') || '''s Special' "Menu"
FROM DUAL;

Menu
-----------------
Tuesday's Special

書式モデル内の文字リテラルにおいても、同じ目的で一重引用符を2つ連続して使用できます。

表2-17に、char値と'fmt'の様々な組合せに対し、次の文がFXを使用した一致条件を満たしているかどうかを示します(tableという名前の表にはDATEデータ型の列date_columnがあります)。

UPDATE table
SET date_column = TO_DATE(char, 'fmt');

表2-17 FX書式モデル修飾子による文字データと書式モデルの一致

char

'fmt'

一致とエラー

'15/ JAN /1998'

'DD-MON-YYYY'

一致

' 15! JAN % /1998'

'DD-MON-YYYY'

エラー

'15/JAN/1998'

'FXDD-MON-YYYY'

エラー

'15-JAN-1998'

'FXDD-MON-YYYY'

一致

'1-JAN-1998'

'FXDD-MON-YYYY'

エラー

'01-JAN-1998'

'FXDD-MON-YYYY'

一致

'1-JAN-1998'

'FXFMDD-MON-YYYY'

一致

戻り値の書式例 書式モデルを使用して、データベースから値を戻す場合にOracleが使用する書式を指定できます。

次の文は、部門80の従業員の給与を選択し、TO_CHARファンクションを使用して、その給与を数値書式モデル'$99,990.99'で指定した書式の文字値に変換します。

SELECT last_name employee, TO_CHAR(salary, '$99,990.99')
FROM employees
WHERE department_id = 80;

Oracleはこの書式モデルによって、ドル記号を先頭に付け、3桁ごとにカンマで区切り、小数点以下2桁を持つ給与を戻します。

次の文は、部門20の各従業員の入社した日付を選択し、TO_CHARファンクションを使用して、その日付を日付書式モデル'fmMonth DD, YYYY'で指定した書式の文字列に変換します。

SELECT last_name employee, TO_CHAR(hire_date,'fmMonth DD, YYYY') hiredate
FROM employees
WHERE department_id = 20;

Oracleはこの書式モデルによって、2桁の日、世紀も含めた4桁の年で示された入社日付(fmで指定)を空白で埋めないで戻します。

関連項目:
fm書式要素の説明については、「書式モデルの修飾子」を参照してください。

正しい書式モデルの付与例 列の値を挿入または更新する場合、指定する値のデータ型は列のデータ型と一致している必要があります。書式モデルを使用して、あるデータ型の値を列が必要とする別のデータ型の値に変換する書式を指定できます。

たとえば、DATE列に挿入する値は、DATEデータ型の値か、またはデフォルト日付書式の文字列値である必要があります(Oracleは、暗黙的にデフォルト日付書式の文字列をDATEデータ型に変換します)。値が別の書式で与えられる場合、TO_DATEファンクションを使用して値をDATEデータ型に変換する必要があります。また、文字列の書式を指定する場合にも、書式モデルを使用する必要があります。

次の文は、TO_DATEファンクションを使用してHunoldの入社日を更新します。文字列'2008 05 20'をDATE値に変換するために、書式マスク'YYYY MM DD'を指定します。

UPDATE employees
SET hire_date = TO_DATE('2008 05 20','YYYY MM DD')
WHERE last_name = 'Hunold';

文字列から日付への変換に関する規則

次の追加の書式化規則は、文字列値を日付値に変換する場合に適用されます(ただし、書式モデルで修飾子FXまたはFXFMを使用して書式検査を制御した場合は適用できません)。

- 先行0(ゼロ)を含む数値書式要素の桁がすべて指定されている場合は、日付文字列から書式文字列に含まれる句読点を省略できます。たとえば、MM、DD、YYなどの2桁の書式要素については、2のかわりに02を指定した場合です。

- 日付文字列から、書式文字列の最後にある時刻フィールドを省略できます。

- 日付文字列では、英数字以外の任意の1文字を使用して、書式文字列の句読点記号に一致させることができます。

- 日時書式要素と日付文字列内の対応する文字の一致に失敗した場合、表2-18に示すとおり、元の書式要素のかわりに、別の書式要素の適用が試みられます。

表2-18 Oracleの書式一致

元の書式要素

元の書式要素のかわりに試行する書式要素

'MM'

'MON'および'MONTH'

'MON

'MONTH'

'MONTH'

'MON'

'YY'

'YYYY'

'RR'

'RRRR'

XML書式モデル

SYS_XMLAggファンクションとSYS_XMLGenファンクション(非推奨)は、XML文書を格納するXMLType型のインスタンスを返します。Oracleには、これらのファンクションの出力を書式設定できるXMLFormatオブジェクトが用意されています。

表2-19に、XMLFormatオブジェクトの属性を示します。表に示すように、ファンクションはこの型を実装します。

関連項目:

- SYS_XMLAggファンクションの詳細は、「SYS_XMLAGG」を参照してください。

- SYS_XMLGenファンクションの詳細は、「SYS_XMLGEN」を参照してください。

- XMLFormatオブジェクトの実装およびその使用の詳細は、『Oracle XML Developer's Kitプログラマーズ・ガイド』を参照してください。

表2-19 XMLFormatオブジェクトの属性

属性

データ型

用途

enclTag

VARCHAR2(4000)またはVARCHAR2(32767)脚注 1

SYS_XMLAggファンクションまたはSYS_XMLGenファンクション(非推奨)の結果の囲みタグの名前です。

SYS_XMLAgg: デフォルトはROWSETです。

SYS_XMLGen: ファンクションへの入力が列名の場合、その列名がデフォルトになります。それ以外の場合、デフォルトはROWです。schemaTypeをUSE_GIVEN_SCHEMAに設定すると、この属性によってXMLスキーマの要素名を指定することもできます。

schemaType

VARCHAR2(100)

出力された文書のスキーマ生成の型です。有効な値は、'NO_SCHEMA'および'USE_GIVEN_SCHEMA'です。デフォルトは、'NO_SCHEMA'です。

schemaName

VARCHAR2(4000)またはVARCHAR2(32767)脚注 1

schemaTypeの値が'USE_GIVEN_SCHEMA'のときに、Oracleが使用するターゲット・スキーマの名前です。schemaNameを指定すると、囲みタグが要素名として使用されます。

targetNameSpace

VARCHAR2(4000)またはVARCHAR2(32767)脚注 1

スキーマが指定されている場合(つまり、schemaTypeがGEN_SCHEMA_*またはUSE_GIVEN_SCHEMAの場合)のターゲット・ネームスペースです。

dburlPrefix

VARCHAR2(4000)またはVARCHAR2(32767)脚注 1

WITH_SCHEMAが指定されている場合に使用するデータベースのURLです。この属性が指定されていない場合、Oracleはその型へのURLを相対URL参照として宣言します。

processingIns

VARCHAR2(4000)またはVARCHAR2(32767)脚注 1

ファンクションの出力の最上位に、要素の前に追加されるユーザーの処理命令です。

脚注 1 この属性のデータ型は、初期化パラメータがMAX_STRING_SIZE = STANDARDの場合はVARCHAR2(4000)になり、MAX_STRING_SIZE = EXTENDEDの場合はVARCHAR2(32767)になります。詳細は、「拡張データ型」を参照してください。

XMLFormatオブジェクトを実装するファンクションは、次のとおりです。

STATIC FUNCTION createFormat(
enclTag IN varchar2 := 'ROWSET',
schemaType IN varchar2 := 'NO_SCHEMA',
schemaName IN varchar2 := null,
targetNameSpace IN varchar2 := null,
dburlPrefix IN varchar2 := null,
processingIns IN varchar2 := null) RETURN XMLGenFormatType
deterministic parallel_enable,
MEMBER PROCEDURE genSchema (spec IN varchar2),
MEMBER PROCEDURE setSchemaName(schemaName IN varchar2),
MEMBER PROCEDURE setTargetNameSpace(targetNameSpace IN varchar2),
MEMBER PROCEDURE setEnclosingElementName(enclTag IN varchar2),
MEMBER PROCEDURE setDbUrlPrefix(prefix IN varchar2),
MEMBER PROCEDURE setProcessingIns(pi IN varchar2),
CONSTRUCTOR FUNCTION XMLGenFormatType (
enclTag IN varchar2 := 'ROWSET',
schemaType IN varchar2 := 'NO_SCHEMA',
schemaName IN varchar2 := null,
targetNameSpace IN varchar2 := null,
dbUrlPrefix IN varchar2 := null,
processingIns IN varchar2 := null) RETURN SELF AS RESULT
deterministic parallel_enable,
STATIC function createFormat2(
enclTag in varchar2 := 'ROWSET',
flags in raw) return sys.xmlgenformattype
deterministic parallel_enable
);

NULL

行のある列の値がない場合、その列はNULLである、またはNULLを含むといいます。NOT NULL整合性制約またはPRIMARY KEY整合性制約によって制限されていない列の場合は、どのデータ型の列でもNULLを含むことができます。実際のデータ値が不定または値に意味がない場合に、NULLを使用してください。

Oracle Databaseは、長さが0(ゼロ)の文字値をNULLとして処理します。ただし、NULLは値0(ゼロ)と同じではないため、0(ゼロ)の数値を表すためにNULL値を使用しないでください。

注意:
Oracle Databaseは現在、長さが0(ゼロ)の文字値をNULLとして処理します。ただし、この処理はOracleの今後のバージョンでも継続されるとはかぎらないため、空の文字列をNULLとして処理しないことをお薦めします。

NULLを含む算術式は、必ずNULLに評価されます。たとえば、NULLに10を加算しても結果はNULLです。実際、オペランドにNULLを指定した場合、(連結演算子を除く)すべての演算子はNULLを戻します。

SQLファンクションでのNULL

SQLファンクションでのNULL処理の詳細は、「SQLファンクションでのNULL」を参照してください。

比較条件でのNULL

NULLを検査するには、比較条件IS NULLおよびIS NOT NULLのみを使用します。NULLを他の条件で使用して、その結果がNULLの値に依存する場合、結果はUNKNOWNになります。NULLはデータの欠落を表すため、任意の値や別のNULLとの関係で等号や不等号は成り立ちません。ただし、OracleはDECODEファンクションを評価するときに2つのNULLを等しい値とみなします。構文および追加情報については、「DECODE」を参照してください。

コンポジット・キーの場合、2つのNULLは等しいと判断されます。NULLを含む2つのコンポジット・キーは、そのキーのNULL以外のコンポーネントのすべてが等しい場合、同一であると判断されます。

条件でのNULL

UNKNOWNとして評価される条件は、FALSEと評価される場合とほとんど同じ働きをします。たとえば、UNKNOWNと評価される条件をWHERE句に持つSELECT文からは、行が戻されません。ただし、UNKNOWNと評価される条件はFALSE条件とは異なり、UNKNOWN条件をさらに評価してもUNKNOWNと評価されます。したがって、NOT FALSEはTRUEと評価されますが、NOT UNKNOWNはUNKNOWNと評価されます。

表2-20は、条件にNULLを含む評価の例です。SELECT文のWHERE句でUNKNOWNと評価される条件が使用された場合、その問合せに対して行は戻されません。

表2-20 NULLを含む条件

条件

aの値

評価

a IS NULL

10

FALSE

a IS NOT NULL

10

TRUE

a IS NULL

NULL

TRUE

a IS NOT NULL

NULL

FALSE

a = NULL

10

UNKNOWN

a != NULL

10

UNKNOWN

a = NULL

NULL

UNKNOWN

a != NULL

NULL

UNKNOWN

a = 10

NULL

UNKNOWN

a != 10

NULL

UNKNOWN

NULLを含む論理条件の結果を示した真理値表は、表6-5、表6-6、および表6-7を参照してください。

コメント

次の2種類のコメントを作成できます。

- SQL文中のコメントは、SQL文を実行するアプリケーション・コードの一部として格納されます。

- 個別のスキーマ・オブジェクトまたは非スキーマ・オブジェクトに付けたコメントは、オブジェクト自体のメタデータとともにデータ・ディクショナリに格納されます。

SQL文中のコメント

コメントは、アプリケーションを読みやすく、メンテナンスしやすくします。たとえば、文にはアプリケーションでのその文の目的を記述したコメントを含めることができます。SQL文中のコメントは文の実行には影響しませんが、ヒントは例外です。この特殊なコメント形式を使用する場合の詳細は、「ヒント」を参照してください。

コメントは、文中のキーワード、パラメータまたは句読点の間に入れることができます。次のいずれかの方法を使用します。

- スラッシュとアスタリスク(/*)を使用してコメントを開始します。コメントのテキストを続けます。このテキストは複数行にまたがってもかまいません。アスタリスクとスラッシュ(*/)を使用してコメントを終了します。開始文字と終了文字は、空白や改行によってテキストから切り離す必要はありません。

- --(ハイフン2個)を使用してコメントを開始します。コメントのテキストを続けます。このテキストは複数行にまたがることはできません。改行によってコメントを終了します。

SQLの入力に使用するツール製品には、追加の制限事項があるものもあります。たとえば、SQL*Plusを使用している場合、デフォルトでは複数行のコメント内に空白行を入れることはできません。詳細は、データベースのインタフェースとして使用するツール製品のドキュメントを参照してください。

SQL文の中に両方のスタイルのコメントが複数あってもかまいません。コメントのテキストには、使用しているデータベース・キャラクタ・セットの印字可能文字を含めることができます。

例 次の文には多くのコメントが含まれています。

SELECT last_name, employee_id, salary + NVL(commission_pct, 0),
job_id, e.department_id
/* Select all employees whose compensation is
greater than that of Pataballa.*/
FROM employees e, departments d
/*The DEPARTMENTS table is used to get the department name.*/
WHERE e.department_id = d.department_id
AND salary + NVL(commission_pct,0) >   /* Subquery:       */
(SELECT salary + NVL(commission_pct,0)
/* total compensation is salary + commission_pct */
FROM employees
WHERE last_name = 'Pataballa')
ORDER BY last_name, employee_id;

SELECT last_name,                                   -- select the name
employee_id                                  -- employee id
salary + NVL(commission_pct, 0),             -- total compensation
job_id,                                      -- job
e.department_id                              -- and department
FROM employees e,                                 -- of all employees
departments d
WHERE e.department_id = d.department_id
AND salary + NVL(commission_pct, 0) >           -- whose compensation
-- is greater than
(SELECT salary + NVL(commission_pct,0)      -- the compensation
FROM employees
WHERE last_name = 'Pataballa')            -- of Pataballa
ORDER BY last_name                                -- and order by last name
employee_id                              -- and employee id.
;

スキーマ・オブジェクトおよび非スキーマ・オブジェクトに関するコメント

COMMENTコマンドを使用して、スキーマ・オブジェクト(表、ビュー、マテリアライズド・ビュー、演算子、索引タイプ、マイニング・モデル)または非スキーマ・オブジェクト(エディション)にCOMMENTコマンドでコメントを付けることができます。表スキーマ・オブジェクトの一部である列にもコメントを作成できます。スキーマ・オブジェクトおよび非スキーマ・オブジェクトに付けたコメントは、データ・ディクショナリに格納されます。このコメントの形式の詳細は、「COMMENT」を参照してください。

ヒント

ヒントとは、Oracle Databaseのオプティマイザに指示を与えるためにSQL文中に記述するコメントのことです。オプティマイザは、オプティマイザの動作を阻止する条件が存在しないかぎり、これらのヒントを使用して文の実行計画を選択します。

ヒントが導入されたのはOracle7からですが、当時は、オプティマイザによって生成された計画が最善ではない場合にユーザーが取れる手段はほとんどありませんでした。現在では、オプティマイザでは解決されないパフォーマンスの問題の解決に役立つように、OracleはSQLチューニング・アドバイザ、SQL計画管理、SQLパフォーマンス・アナライザをはじめとする多数のツールを提供しています。ヒントではなく、これらのツールを使用することをお薦めします。これらのツールはヒントに比べてはるかに優れていますが、その理由は、これらのツールを継続的に使用すれば、データやデータベース環境の変化に合せた最新の解決策が得られるからです。

ヒントの多用は避けるとともに、使用する場合は必ず事前に、関係する表の統計情報を収集して、ヒントなしのオプティマイザ計画をEXPLAIN PLAN文を使用して評価してください。データベースの状態の変化や以降のリリースにおける問合せパフォーマンスの向上によって、コード内のヒントがパフォーマンスに及ぼす影響が大きく変化することもあります。

この後は、使用頻度の高い一部のヒントについて説明します。他の高度なチューニング・ツールではなくヒントを使用する場合は、ヒントの使用によって短期的な効果が得られても、長期にわたるパフォーマンスの向上にはつながらない場合があることに注意してください。

ヒントの使用方法

文ブロックには、ヒントを含むコメントは1つのみ指定できます。このコメントは、SELECT、UPDATE、INSERT、MERGEまたはDELETEのいずれかのキーワードの後でのみ指定できます。

次の構文図は、Oracleが文ブロック内でサポートする両方のスタイルのコメントに含まれるヒントの構文です。ヒント構文は、文ブロックを開始するINSERT、UPDATE、DELETE、SELECTまたはMERGEのいずれかのキーワードの直後でのみ指定できます。

hint::=

それぞれの意味は、次のとおりです。

- +(プラス記号)は、コメントをヒントのリストとして、Oracleに解析させます。プラス記号は、コメント・デリミタの直後に置く必要があります。空白を入れてはいけません。

- hintは、この項で説明するヒントの1つです。プラス記号とヒントの間の空白は入れても入れなくてもかまいません。コメントに複数のヒントが含まれている場合は、1つ以上の空白で区切る必要があります。

- stringは、ヒントに含めることができるその他のコメント・テキストです。

--+構文では、コメント全体を単一行で指定する必要があります。

Oracle Databaseは、次の状況ではヒントを無視し、エラーを戻しません。

- ヒントにスペルの誤りまたは構文エラーがある場合。ただし、データベースは、同一コメント内に正しく指定された他のヒントがある場合はそれを採用します。

- ヒントを含むコメントが、DELETE、INSERT、MERGE、SELECTまたはUPDATEのいずれかのキーワードの後で指定していない場合。

- ヒントの組合せが互いに競合している場合。ただし、データベースは、同一コメント内に他のヒントがあればそれを採用します。

- データベース環境が、Formsバージョン3トリガー、Oracle Forms 4.5、Oracle Reports 2.5など、PL/SQLバージョン1を使用している場合。

- 1つのグローバル・ヒントが複数の問合せブロックを参照している場合。詳細は、「1つのグローバル・ヒントでの複数問合せブロックの指定」を参照してください。

ヒントでの問合せブロックの指定

多くのヒントでオプションの問合せブロック名を指定して、ヒントが適用される問合せブロックを指定できます。この構文によって、インライン・ビューに適用されるヒントを外部問合せ内で指定できます。

問合せブロックの引数の構文は、@queryblockの形式になります。ここでqueryblockは問合せ内の問合せブロックを指定する識別子です。queryblock識別子は、システムで生成されたものでも、ユーザーが指定したものでもかまいません。ヒントを、そのヒントが適用される問合せブロック自体の中で指定するときは、@queryblock構文を省略してください。

- システム生成の識別子は、問合せに対するEXPLAIN PLAN文を使用して取得できます。変換前の問合せブロック名は、NO_QUERY_TRANSFORMATIONヒントを使用している問合せに対してEXPLAIN PLANを実行することで調べることができます。「NO_QUERY_TRANSFORMATIONヒント」を参照してください。

- ユーザー指定の名前はQB_NAMEヒントで指定できます。「QB_NAMEヒント」を参照してください。

グローバル・ヒントの指定

多くのヒントは、特定の表や索引に適用することも、ビュー内の表や、索引の一部である列によりグローバルに適用することもできます。このようなグローバル・ヒントは、構文要素tablespecおよびindexspecによって定義します。

tablespec::=

アクセスする表は、文で示されるとおり正確に指定する必要があります。文が表の別名を使用している場合は、ヒントでも表名を使用せずに別名を使用します。ただし、文でスキーマ名を指定している場合でも、ヒント内ではスキーマ名を表名に含めないでください。

注意:
解析時にオプティマイザが追加のビューを生成するため、tablespec句を使用したグローバル・ヒントの指定は、ANSI結合を使用する問合せに対しては無効です。かわりに、@queryblockを指定してヒントが適用される問合せブロックを指定してください。

indexspec::=

ヒントの指定の中で、tablespecの後にindexspecがある場合は、表名と索引名を区切るカンマを使用できますが、このカンマは必須ではありません。indexspecが複数回出現するときも、区切るためのカンマを使用できますが、必須ではありません。

1つのグローバル・ヒントでの複数問合せブロックの指定 Oracle Databaseは、複数問合せブロックを参照するグローバル・ヒントは無視します。この問題を回避するために、ヒントの中ではtablespecとindexspecを使用するかわりにオブジェクト別名を指定することをお薦めします。

たとえば、次のビューvと表tがあるとします。

CREATE VIEW v AS
SELECT e.last_name, e.department_id, d.location_id
FROM employees e, departments d
WHERE e.department_id = d.department_id;

CREATE TABLE t AS
SELECT * from employees
WHERE employee_id < 200;

注意:
次に示す例ではEXPLAIN PLAN文が使用されており、これによって実行計画が表示されるので、ヒントが遵守されているか無視されているかがわかります。詳細は、「EXPLAIN PLAN」を参照してください。

次の問合せのLEADINGヒントは無視されますが、これは複数の問合せブロック(表tが含まれるメイン問合せブロックと、ビュー問合せブロックv)を参照しているためです。

EXPLAIN PLAN
SET STATEMENT_ID = 'Test 1'
INTO plan_table FOR
(SELECT /*+ LEADING(v.e v.d t) */ *
FROM t, v
WHERE t.department_id = v.department_id);

次のSELECT文を実行すると実行計画が戻され、これを見るとLEADINGヒントが無視されたことがわかります。

SELECT id, LPAD(' ',2*(LEVEL-1))||operation operation, options, object_name,  object_alias
FROM plan_table
START WITH id = 0 AND statement_id = 'Test 1'
CONNECT BY PRIOR id = parent_id AND statement_id = 'Test 1'
ORDER BY id;

ID OPERATION            OPTIONS    OBJECT_NAME   OBJECT_ALIAS
--- -------------------- ---------- ------------- --------------------
0 SELECT STATEMENT
1   HASH JOIN
2     HASH JOIN
3       TABLE ACCESS   FULL       DEPARTMENTS   D@SEL$2
4       TABLE ACCESS   FULL       EMPLOYEES     E@SEL$2
5     TABLE ACCESS     FULL       T             T@SEL$1

次の問合せのLEADINGヒントは遵守されますが、これはオブジェクト別名を参照しているからであり、このことは前の問合せで戻された実行計画に現れています。

EXPLAIN PLAN
SET STATEMENT_ID = 'Test 2'
INTO plan_table FOR
(SELECT /*+ LEADING(E@SEL$2 D@SEL$2 T@SEL$1) */ *
FROM t, v
WHERE t.department_id = v.department_id);

次のSELECT文から戻される実行計画は、LEADINGヒントが遵守されたことを示しています。

SELECT id, LPAD(' ',2*(LEVEL-1))||operation operation, options,
object_name, object_alias
FROM plan_table
START WITH id = 0 AND statement_id = 'Test 2'
CONNECT BY PRIOR id = parent_id AND statement_id = 'Test 2'
ORDER BY id;

ID OPERATION            OPTIONS    OBJECT_NAME   OBJECT_ALIAS
--- -------------------- ---------- ------------- --------------------
0 SELECT STATEMENT
1   HASH JOIN
2     HASH JOIN
3       TABLE ACCESS   FULL       EMPLOYEES     E@SEL$2
4       TABLE ACCESS   FULL       DEPARTMENTS   D@SEL$2
5     TABLE ACCESS     FULL       T             T@SEL$1

関連項目:
EXPLAIN PLANを使用してオプティマイザが問合せをどのように実行しているかを知る方法の詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。

機能のカテゴリに分類したヒント

表2-21に、機能のカテゴリに分類したヒントと、各ヒントの構文とセマンティクスの参照先を示します。表の後には、ヒントをアルファベット順に説明します。

表2-21 機能のカテゴリに分類したヒント

ヒント

構文とセマンティクスの参照先

最適化目標と方法

ALL_ROWSヒント

FIRST_ROWSヒント

アクセス・パスのヒント

CLUSTERヒント

--

CLUSTERINGヒント

NO_CLUSTERINGヒント

--

FULLヒント

--

HASHヒント

--

INDEXヒント

NO_INDEXヒント

--

INDEX_ASCヒント

INDEX_DESCヒント

--

INDEX_COMBINEヒント

--

INDEX_JOINヒント

--

INDEX_FFSヒント

--

INDEX_SSヒント

--

INDEX_SS_ASCヒント

--

INDEX_SS_DESCヒント

--

NATIVE_FULL_OUTER_JOINヒント

NO_NATIVE_FULL_OUTER_JOINヒント

--

NO_INDEX_FFSヒント

--

NO_INDEX_SSヒント

--

NO_ZONEMAPヒント

インメモリー列ストアヒント

INMEMORYヒント

NO_INMEMORYヒント

--

INMEMORY_PRUNINGヒント

NO_INMEMORY_PRUNINGヒント

結合順序のヒント

ORDEREDヒント

--

LEADINGヒント

結合操作のヒント

USE_CUBEヒント

NO_USE_CUBEヒント

--

USE_HASHヒント

NO_USE_HASHヒント

--

USE_MERGEヒント

NO_USE_MERGEヒント

--

USE_NLヒント

USE_NL_WITH_INDEXヒント

NO_USE_NLヒント

パラレル実行のヒント

ENABLE_PARALLEL_DMLヒント

DISABLE_PARALLEL_DMLヒント

--

PARALLELヒント

NO_PARALLELヒント

--

PARALLEL_INDEXヒント

NO_PARALLEL_INDEXヒント

--

PQ_CONCURRENT_UNIONヒント

NO_PQ_CONCURRENT_UNIONヒント

--

PQ_DISTRIBUTEヒント

--

PQ_FILTERヒント

--

PQ_SKEWヒント

NO_PQ_SKEWヒント

オンライン・アプリケーション・アップグレードのヒント

CHANGE_DUPKEY_ERROR_INDEXヒント

--

IGNORE_ROW_ON_DUPKEY_INDEXヒント

--

RETRY_ON_ROW_CHANGEヒント

問合せ変換のヒント

FACTヒント

NO_FACTヒント

--

MERGEヒント

NO_MERGEヒント

--

NO_EXPANDヒント

USE_CONCATヒント

--

REWRITEヒント

NO_REWRITEヒント

--

UNNESTヒント

NO_UNNESTヒント

--

STAR_TRANSFORMATIONヒント

NO_STAR_TRANSFORMATIONヒント

--

NO_QUERY_TRANSFORMATIONヒント

XMLのヒント

NO_XMLINDEX_REWRITEヒント

--

NO_XML_QUERY_REWRITEヒント

その他のヒント

APPENDヒント

APPEND_VALUESヒント

NOAPPENDヒント

--

CACHEヒント

NOCACHEヒント

--

CURSOR_SHARING_EXACTヒント

--

DRIVING_SITEヒント

--

DYNAMIC_SAMPLINGヒント

--

GATHER_OPTIMIZER_STATISTICSヒント

NO_GATHER_OPTIMIZER_STATISTICSヒント

--

MODEL_MIN_ANALYSISヒント

--

MONITORヒント

--

NO_MONITORヒント

--

OPT_PARAMヒント

--

PUSH_PREDヒント

NO_PUSH_PREDヒント

--

PUSH_SUBQヒント

NO_PUSH_SUBQヒント

--

PX_JOIN_FILTERヒント

NO_PX_JOIN_FILTERヒント

--

QB_NAMEヒント

--

RESULT_CACHEヒント

NO_RESULT_CACHEヒント

ヒントのリスト(アルファベット順)

この項では、すべてのヒントの構文とセマンティクスをアルファベット順に説明します。

ALL_ROWSヒント

ALL_ROWSヒントは、文ブロックが最高のスループットになるよう(リソースの消費が最小になるよう)、オプティマイザに最適化の指示をします。たとえば、オプティマイザは問合せの最適化アプローチを使用して、この文を最高のスループットに最適化します。

SELECT /*+ ALL_ROWS */ employee_id, last_name, salary, job_id
FROM employees
WHERE employee_id = 107;

ALL_ROWSまたはFIRST_ROWSヒントのいずれかをSQL文で指定する場合に、この文でアクセスする表の統計情報がデータ・ディクショナリにないと、オプティマイザは該当する表に割り当てられている記憶域など、デフォルトの統計値を使用して欠落している統計値を推定し、実行計画を選択します。このような推定値は、DBMS_STATSパッケージで収集した値ほど正確でない場合があるため、統計情報の収集にはDBMS_STATSパッケージを使用する必要があります。

アクセス・パスまたは結合操作のヒントをALL_ROWSまたはFIRST_ROWSヒントとともに指定する場合、オプティマイザでは、ヒントで指定されたアクセス・パスまたは結合操作が優先されます。

APPENDヒント

APPENDヒントは、INSERT文の副問合せ構文とともにダイレクト・パスINSERT文を使用するようオプティマイザに指示します。

- 従来型のINSERTはシリアル・モードでのデフォルトです。シリアル・モードでは、ダイレクト・パスはAPPENDヒントを指定する場合にのみ使用できます。

- ダイレクト・パスINSERTはパラレル・モードでのデフォルトです。パラレル・モードでは、従来型INSERTはNOAPPENDヒントを指定する場合にのみ使用できます。

INSERTをパラレルにするかどうかの決定は、APPENDヒントとは関係ありません。

ダイレクト・パスINSERTでは、データは現在表に割り当てられている既存の空き領域を使用せず、表の最後に追加されます。その結果、ダイレクト・パスINSERTは、従来型INSERTよりも高速に処理されます。

APPENDヒントは、INSERT文の副問合せ構文でのみサポートされています。VALUES句ではサポートされていません。APPENDヒントをVALUES句とともに指定した場合、ヒントは無視され、従来型INSERTが使用されます。VALUES句とともにダイレクト・パスINSERTを使用する方法については、「APPEND_VALUESヒント」.を参照してください。

関連項目:
NOAPPENDヒントの詳細は、「NOAPPENDヒント」を参照してください。ダイレクト・パス・インサートの詳細は、『Oracle Database管理者ガイド』を参照してください。

APPEND_VALUESヒント

APPEND_VALUESヒントは、VALUES句とともにダイレクト・パスINSERTを使用するようオプティマイザに指示します。このヒントを指定しない場合、従来型INSERTが使用されます。

ダイレクト・パスINSERTでは、データは現在表に割り当てられている既存の空き領域を使用せず、表の最後に追加されます。その結果、ダイレクト・パスINSERTは、従来型INSERTよりも高速に処理されます。

APPEND_VALUESヒントを使用すると、パフォーマンスを大幅に向上できます。次に使用方法の例を示します。

- Oracle Call Interface(OCI)を使用するプログラムで、大規模な配列バインドまたは行コールバックを伴う配列バインドを使用する場合

- PL/SQLで、VALUES句とともにINSERT文を使用するFORALLループを伴う多くの行をロードする場合

APPEND_VALUESヒントは、INSERT文のVALUES句でのみサポートされています。APPEND_VALUESヒントをINSERT文の副問合せ構文とともに指定した場合、ヒントは無視され、従来型INSERTが使用されます。副問合せとともにダイレクト・パスINSERTを使用する方法については、「APPENDヒント」を参照してください。

関連項目:
ダイレクト・パス・インサートの詳細は、『Oracle Database管理者ガイド』を参照してください。

CACHEヒント

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

CACHEヒントは、全表スキャンの実行時に、この表に対して取り出されたブロックを、バッファ・キャッシュ内のLRUリストの最高使用頻度側に入れるようオプティマイザに指定します。このヒントは、小規模な参照表で有効です。

次の例では、CACHEヒントが表のデフォルト・キャッシュ仕様を上書きします。

SELECT /*+ FULL (hr_emp) CACHE(hr_emp) */ last_name
FROM employees hr_emp;

CACHEおよびNOCACHEヒントは、V$SYSSTATデータ・ディクショナリ・ビューで示すように、システム統計情報table scans (long tables)およびtable scans (short tables)に影響を与えます。

CHANGE_DUPKEY_ERROR_INDEXヒント

注意:
CHANGE_DUPKEY_ERROR_INDEXヒント、IGNORE_ROW_ON_DUPKEY_INDEXヒントおよびRETRY_ON_ROW_CHANGEヒントは、セマンティクスに影響を与えるという点で他のヒントとは異なります。これら3つのヒントには、「ヒント」で説明されている一般的な原則は当てはまりません。

CHANGE_DUPKEY_ERROR_INDEXヒントは、指定した列セットまたは指定した索引に対する一意キー違反を明確に識別するメカニズムを提供します。指定した索引に対して一意キー違反が発生すると、ORA-001のかわりにORA-38911エラーが報告されます。

このヒントは、INSERT操作およびUPDATE操作に適用されます。索引を指定する場合は、その索引が存在するとともに一意であることが必要です。索引のかわりに列リストを指定する場合は、列の数と順序が列リストのものと一致する一意索引が存在する必要があります。

特定の規則に違反した場合、このヒントの使用によってエラー・メッセージが戻されます。詳細は、「IGNORE_ROW_ON_DUPKEY_INDEXヒント」を参照してください。

注意:
このヒントを使用すると、APPENDモードおよびパラレルDMLの両方が無効になります。

CLUSTERヒント

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

CLUSTERヒントは、クラスタ・スキャンを使用して、指定した表にアクセスするようオプティマイザに指示します。このヒントは、索引クラスタ内の表にのみ適用されます。

CLUSTERINGヒント

注意:
CLUSTERINGヒントは、Oracle Database 12cリリース1(12.1.0.2)から使用可能です。

このヒントは、属性クラスタリングに対して有効な表のINSERTおよびMERGE操作にのみ有効です。CLUSTERINGヒントは、ダイレクト・パス・インサート(シリアルまたはパラレル)の属性クラスタリングを有効化します。これにより、部分的にクラスタリングされるデータになります。つまり、挿入またはマージ操作ごとにデータがクラスタリングされます。このヒントは、表を作成または変更したDDLのNO ON LOAD設定をオーバーライドします。このヒントは、属性クラスタリングに有効化されていない表には影響しません。

関連項目:

- NO ON LOAD設定の詳細は、CREATE TABLEのclustering_when句を参照してください。

- 「NO_CLUSTERINGヒント」

CURSOR_SHARING_EXACTヒント

Oracleでは、置換しても安全な場合には、SQL文内のリテラルをバインド変数に置き換えることができます。この置換処理は、CURSOR_SHARING初期化パラメータを使用して制御します。CURSOR_SHARING_EXACTヒントは、この動作を行わないようオプティマイザに指示します。このヒントを指定すると、Oracleは、リテラルのバインド変数への置換を試行せずにSQL文を実行します。

DISABLE_PARALLEL_DMLヒント

DISABLE_PARALLEL_DMLヒントは、DELETE、INSERT、MERGEおよびUPDATE文のパラレルDMLを無効化します。ALTER SESSION ENABLE PARALLEL DML文を使用したセッションでパラレルDMLが有効化されている場合、このヒントを使用して、個別の文のパラレルDMLを無効化できます。

DRIVING_SITEヒント

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

DRIVING_SITEヒントは、データベースによって選択されたサイトとは異なるサイトで問合せを実行するようオプティマイザに指示します。このヒントは、分散化された問合せの最適化を使用している場合に有効です。

次に例を示します。

SELECT /*+ DRIVING_SITE(departments) */ *
FROM employees, departments@rsite
WHERE employees.department_id = departments.department_id;

この問合せがヒントなしで実行されている場合、departmentsからの行がローカル・サイトに送信され、そこで結合が実行されます。このヒントを使用している場合、employeesからの行がリモート・サイトに送信され、そこで問合せが実行されて結果セットがローカル・サイトに戻されます。

DYNAMIC_SAMPLINGヒント

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

DYNAMIC_SAMPLINGヒントは、動的なサンプリングを制御する方法をオプティマイザに指示し、より正確な述語の選択性と表および索引に対する統計情報を調べることでサーバーのパフォーマンスを改善します。

DYNAMIC_SAMPLINGの値は、0から10の範囲で設定できます。このレベルが高いほど、コンパイラは多くのリソースを動的なサンプリングに費やし、その適用範囲も広がります。tablespecを指定しない場合、サンプリングのデフォルトは、カーソルのレベルになります。

integerの値は0から10となり、サンプリングの度合いを示します。

カーディナリティ統計情報が表にすでに存在する場合、オプティマイザはその情報を使用します。存在しない場合、オプティマイザは動的なサンプリングによってカーディナリティ統計情報を推定します。

tablespecを指定しており、カーディナリティ統計情報がすでに存在している場合は、次のようになります。

- 単一表述語(1つの表のみを評価するWHERE句)がない場合、オプティマイザは既存の統計情報を信頼し、このヒントを無視します。たとえば、employeesが分析される場合、次の問合せは動的なサンプリングにはなりません。

SELECT /*+ DYNAMIC_SAMPLING(e 1) */ count(*)
FROM employees e;

- 単一表述語がある場合、オプティマイザは既存のカーディナリティ統計情報を使用し、この既存の統計情報を使用して述語の選択性を推定します。

動的なサンプリングを特定の表に適用するには、次の形式のヒントを使用します。

SELECT /*+ DYNAMIC_SAMPLING(employees 1) */ *
FROM employees
WHERE ...

関連項目:
動的なサンプリングおよび設定可能なサンプリング・レベルの詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。

ENABLE_PARALLEL_DMLヒント

ENABLE_PARALLEL_DMLヒントは、DELETE、INSERT、MERGEおよびUPDATE文のパラレルDMLを有効化します。ALTER SESSION ENABLE PARALLEL DML文を使用したセッションでパラレルDMLが有効化されている場合、このヒントを使用して、個別の文のパラレルDMLを有効化できます。

関連項目:
パラレルDMLの有効化およびパラレルDMLの制限詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照

FACTヒント

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

FACTヒントは、スター型変換のコンテキストで使用されます。これは、tablespecで指定された表をファクト表とみなすようオプティマイザに指示するためのものです。

FIRST_ROWSヒント

FIRST_ROWSヒントは、最初のn行を最も効率的に戻す計画を選択し、個々のSQL文を最適化して応答時間を速くするようOracleに指示します。integerには、戻される行数を指定します。

たとえば、オプティマイザは問合せの最適化アプローチを使用して、次の文を最善の応答時間に最適化します。

SELECT /*+ FIRST_ROWS(10) */ employee_id, last_name, salary, job_id
FROM employees
WHERE department_id = 20;

この例では、各部門に多数の従業員がいます。ユーザーは、部門20の最初の10人の従業員を迅速に表示する必要があります。

オプティマイザは、DELETEおよびUPDATEの文ブロック、およびソートまたはグループ化などのブロッキング操作を含むSELECT文ブロックではこのヒントを無視します。Oracle Databaseでは最初の行を戻す前に、この文でアクセスされるすべての行を取り出す必要があるため、このような文は最善の応答時間に最適化することができません。このヒントをこのような文で指定する場合は、データベースを最善のスループットに最適化します。

関連項目:
FIRST_ROWSヒントと統計情報の詳細は、「ALL_ROWSヒント」を参照してください。

FULLヒント

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

FULLヒントは、指定した表に対して全表スキャンを実行するようオプティマイザに指示します。次に例を示します。

SELECT /*+ FULL(e) */ employee_id, last_name
FROM hr.employees e
WHERE last_name LIKE :b1;

Oracle Databaseは、WHERE句内の条件によって使用可能になるlast_name列に索引がある場合でも、employees表に対して全表スキャンを実行し、この文を実行します。

employees表は、FROM句の中に別名eを持つため、ヒントは表名ではなく別名で表を参照する必要があります。スキーマ名がFROM句の中で指定されている場合でも、ヒントではスキーマ名を指定しないでください。

GATHER_OPTIMIZER_STATISTICSヒント

の説明
GATHER_OPTIMIZER_STATISTICSヒントは、次のタイプのバルク・ロード操作中に統計収集を有効にするようオプティマイザに指示します。

- CREATE TABLE ... AS SELECT

- ダイレクト・パス・インサートを使用した、空の表へのINSERT INTO ... SELECT

関連項目:
バルク・ロードに関する統計収集の詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。

HASHヒント

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

HASHヒントは、ハッシュ・スキャンを使用して、指定した表にアクセスするようオプティマイザに指示します。このヒントは、ハッシュ・クラスタ内の表にのみ適用されます。

IGNORE_ROW_ON_DUPKEY_INDEXヒント

注意:
CHANGE_DUPKEY_ERROR_INDEXヒント、IGNORE_ROW_ON_DUPKEY_INDEXヒントおよびRETRY_ON_ROW_CHANGEヒントは、セマンティクスに影響を与えるという点で他のヒントとは異なります。これら3つのヒントには、「ヒント」で説明されている一般的な原則は当てはまりません。

IGNORE_ROW_ON_DUPKEY_INDEXヒントが適用されるのは、単一表INSERT操作のみです。UPDATE、DELETE、MERGEおよびマルチテーブル・インサート操作に対してはサポートされません。IGNORE_ROW_ON_DUPKEY_INDEXを指定すると、その文では、指定の列セットまたは指定の索引に対する一意キー違反が無視されます。一意キー違反が発生したときは、行レベルのロールバックが行われ、実行は次の入力行から再開します。データを挿入するときにこのヒントを指定した場合は、DMLエラー・ロギングが有効になっていても、一意キー違反はログに記録されず、文は終了しません。

特定の規則に違反した場合、このヒントによるセマンティクスへの影響によってエラー・メッセージが戻されます。

- 索引を指定する場合は、その索引が存在するとともに一意であることが必要です。そうでない場合は、ORA-38913が発生します。

- 索引は、1つのみ指定する必要があります。索引を指定しなかった場合、ORA-38912が発生します。複数の索引を指定した場合、ORA-38915が発生します。

- INSERT文にCHANGE_DUPKEY_ERROR_INDEXまたはIGNORE_ROW_ON_DUPKEY_INDEXのいずれかのヒントを指定できますが、両方を指定することはできません。両方を指定した場合、ORA-38915が発生します。

すべてのヒントと同様に、ヒント内の構文エラーは特に警告もなく無視されます。その結果、ヒントを使用しなかった場合と同じように、ORA-00001が発生します。

注意:
このヒントを使用すると、APPENDモードおよびパラレルDMLの両方が無効になります。

関連項目:
CHANGE_DUPKEY_ERROR_INDEXヒント

INDEXヒント

(「ヒントでの問合せブロックの指定」、tablespec::=、indexspec::=を参照)

INDEXヒントは、指定した表について索引スキャンを使用するようオプティマイザに指示します。ファンクション索引、ドメイン索引、Bツリー索引、ビットマップ索引およびビットマップ結合索引について、INDEXヒントを使用できます。

ヒントの動作は、indexspecの仕様によって異なります。

- INDEXヒントが使用可能な単一の索引を指定すると、データベースはこの索引でスキャンを実行します。オプティマイザは、全表スキャンおよび表上の別の索引のスキャンを考慮しません。

- 複数の索引の組合せに対してヒントを指定する場合は、INDEXではなく、より多目的なヒントであるINDEX_COMBINEを使用することをお薦めします。INDEXヒントで索引のリストが指定されている場合は、オプティマイザはこのリスト内の各索引のスキャンのコストを計算してから、コストが最低である索引スキャンを実行します。あるいは、このリストの複数の索引をスキャンしてその結果をマージするというアクセス・パスが選択されることもあります(そのようなアクセス・パスのコストが最低になる場合)。全表スキャンや、ヒントで指定されていない索引のスキャンが検討されることはありません。

- INDEXヒントが索引を指定しない場合、オプティマイザは、表にある使用可能な各索引でのスキャンのコストを検討し、最低のコストで索引スキャンを実行します。アクセス・パスのコストが最低となる場合、データベースは複数の索引をスキャンするように選択し、結果をマージすることもあります。オプティマイザは全表スキャンを検討しません。

次に例を示します。

SELECT /*+ INDEX (employees emp_department_ix)*/ employee_id, department_id
FROM employees
WHERE department_id > 50;

INDEX_ASCヒント

(「ヒントでの問合せブロックの指定」、tablespec::=、indexspec::=を参照)

INDEX_ASCヒントは、指定した表について索引スキャンを使用するようオプティマイザに指示します。文で索引レンジ・スキャンを使用する場合、Oracle Databaseは索引付きの値の昇順で索引エントリをスキャンします。各パラメータは、「INDEXヒント」と同じ目的で使用されます。

レンジ・スキャンのデフォルトの動作は、索引エントリを索引値の昇順で(降順索引の場合は降順で)スキャンするというものです。このヒントを指定しても、索引のデフォルトの順序が変わることはなく、したがってINDEXヒントを指定したのと同じことになります。ただし、INDEX_ASCヒントを使用すると、デフォルトの動作が変更された場合に昇順レンジ・スキャンを明示的に指定できます。

INDEX_COMBINEヒント

(「ヒントでの問合せブロックの指定」、tablespec::=、indexspec::=を参照)

INDEX_COMBINEヒントは、表へのビットマップ・アクセス・パスを使用するようオプティマイザに指示します。indexspecがINDEX_COMBINEヒントから省略されている場合、オプティマイザは、表のスキャンにかかるコスト効率が最大になる索引のブールの組合せを使用します。indexspecを指定すると、オプティマイザは、指定した索引のブールのいくつかの組合せの使用を試行します。各パラメータは、「INDEXヒント」と同じ目的で使用されます。次に例を示します。

SELECT /*+ INDEX_COMBINE(e emp_manager_ix emp_department_ix) */ *
FROM employees e
WHERE manager_id = 108
OR department_id = 110;

INDEX_DESCヒント

(「ヒントでの問合せブロックの指定」、tablespec::=、indexspec::=を参照)

INDEX_DESCヒントは、指定した表に降順索引スキャンを使用するようオプティマイザに指示します。文で索引レンジ・スキャンを使用しており、索引が昇順の場合、Oracleは索引付きの値の降順で索引エントリをスキャンします。パーティション索引では、結果は各パーティション内で降順になります。降順索引の場合、このヒントは降順を効果的に取り消すため、索引エントリは昇順でスキャンされます。各パラメータは、「INDEXヒント」と同じ目的で使用されます。次に例を示します。

SELECT /*+ INDEX_DESC(e emp_name_ix) */ *
FROM employees e;

関連項目:
全体スキャンの詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。

INDEX_FFSヒント

(「ヒントでの問合せブロックの指定」、tablespec::=、indexspec::=を参照)

INDEX_FFSヒントは、全表スキャンではなく高速全索引スキャンを実行するようオプティマイザに指示します。

各パラメータは、「INDEXヒント」と同じ目的で使用されます。次に例を示します。

SELECT /*+ INDEX_FFS(e emp_name_ix) */ first_name
FROM employees e;

INDEX_JOINヒント

(「ヒントでの問合せブロックの指定」、tablespec::=、indexspec::=を参照)

INDEX_JOINヒントは、アクセス・パスとして索引結合を使用するようオプティマイザに指示します。ヒントが正しく機能するためには、問合せの解決に必要なすべての列を含む索引が最小限の数だけ存在している必要があります。

各パラメータは、「INDEXヒント」と同じ目的で使用されます。たとえば、次に示す問合せでは索引結合を使用してmanager_id列とdepartment_id列にアクセスしています(どちらの列もemployees表内で索引が付けられています)。

SELECT /*+ INDEX_JOIN(e emp_manager_ix emp_department_ix) */ department_id
FROM employees e
WHERE manager_id < 110
AND department_id < 50;

INDEX_SSヒント

(「ヒントでの問合せブロックの指定」、tablespec::=、indexspec::=を参照)

INDEX_SSヒントは、指定した表について索引スキップ・スキャンを実行するようオプティマイザに指示します。文で索引レンジ・スキャンを使用する場合、Oracleは索引付きの値の昇順で索引エントリをスキャンします。パーティション索引では、結果は各パーティション内で昇順になります。

各パラメータは、「INDEXヒント」と同じ目的で使用されます。次に例を示します。

SELECT /*+ INDEX_SS(e emp_name_ix) */ last_name
FROM employees e
WHERE first_name = 'Steven';

関連項目:
索引スキップ・スキャンの詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。

INDEX_SS_ASCヒント

(「ヒントでの問合せブロックの指定」、tablespec::=、indexspec::=を参照)

INDEX_SS_ASCヒントは、指定した表について索引スキップ・スキャンを実行するようオプティマイザに指示します。文で索引レンジ・スキャンを使用する場合、Oracle Databaseは索引付きの値の昇順で索引エントリをスキャンします。パーティション索引では、結果は各パーティション内で昇順になります。各パラメータは、「INDEXヒント」と同じ目的で使用されます。

レンジ・スキャンのデフォルトの動作は、索引エントリを索引値の昇順で(降順索引の場合は降順で)スキャンするというものです。このヒントを指定しても、索引のデフォルトの順序が変わることはなく、したがってINDEX_SSヒントを指定したのと同じことになります。ただし、INDEX_SS_ASCヒントを使用すると、デフォルトの動作が変更された場合に昇順レンジ・スキャンを明示的に指定できます。

関連項目:
索引スキップ・スキャンの詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。

INDEX_SS_DESCヒント

(「ヒントでの問合せブロックの指定」、tablespec::=、indexspec::=を参照)

INDEX_SS_DESCヒントは、指定した表について索引スキップ・スキャンを実行するようオプティマイザに指示します。文で索引レンジ・スキャンを使用しており、索引が昇順の場合、Oracleは索引付きの値の降順で索引エントリをスキャンします。パーティション索引では、結果は各パーティション内で降順になります。降順索引の場合、このヒントは降順を効果的に取り消すため、索引エントリは昇順でスキャンされます。

各パラメータは、「INDEXヒント」と同じ目的で使用されます。次に例を示します。

SELECT /*+ INDEX_SS_DESC(e emp_name_ix) */ last_name
FROM employees e
WHERE first_name = 'Steven';

関連項目:
索引スキップ・スキャンの詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。

INMEMORYヒント

注意:
INMEMORYヒントは、Oracle Database 12cリリース1(12.1.0.2)から使用可能です。

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

INMEMORYヒントは、インメモリー問合せを有効化します。

このヒントは、オプティマイザに全表スキャンを実行するようには指示しません。全表スキャンが必要な場合は、「FULLヒント」も指定してください。

INMEMORY_PRUNINGヒント

注意:
INMEMORY_PRUNINGヒントは、Oracle Database 12cリリース1(12.1.0.2)から使用可能です。

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

INMEMORY_PRUNINGヒントは、インメモリー問合せのプルーニングを有効化します。

LEADINGヒント

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

LEADINGヒントは、実行計画において、指定した一連の表を接頭辞として使用するようオプティマイザに指示します。このヒントは、ORDEREDヒントより多目的なヒントです。次に例を示します。

SELECT /*+ LEADING(e j) */ *
FROM employees e, departments d, job_history j
WHERE e.department_id = d.department_id
AND e.hire_date = j.start_date;

図形結合の依存性により、指定の表を指定の順序の最初に結合できない場合、LEADINGヒントは無視されます。2つ以上の競合するLEADINGヒントを指定すると、指定したすべてのヒントが無視されます。ORDEREDヒントを指定すると、このヒントがすべてのLEADINGヒントに優先します。

MERGEヒント

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

MERGEヒントを使用すると、問合せ内のビューをマージできます。

ビューの問合せブロックにGROUP BY句、またはSELECTリスト内のDISTINCT演算子が含まれている場合、複雑なビューのマージが可能であれば、オプティマイザはビューをアクセス文のみにマージできます。複雑なマージは、副問合せに相関関係がない場合、IN副問合せをアクセス文にマージする際に使用することもできます。

次に例を示します。

SELECT /*+ MERGE(v) */ e1.last_name, e1.salary, v.avg_salary
FROM employees e1,
(SELECT department_id, avg(salary) avg_salary
FROM employees e2
GROUP BY department_id) v
WHERE e1.department_id = v.department_id
AND e1.salary > v.avg_salary
ORDER BY e1.last_name;

引数なしでMERGEヒントを使用する場合、ビューの問合せブロック内に配置する必要があります。ビュー名を引数としてMERGEヒントを使用する場合、周囲の問合せに挿入する必要があります。

MODEL_MIN_ANALYSISヒント

MODEL_MIN_ANALYSISヒントは、スプレッドシート・ルールのコンパイル時間の最適化(主に、詳細な依存グラフ分析)を省略するようオプティマイザに指示します。スプレッドシートのアクセス構造に選択的に移入するためのフィルタの作成や制限されたルールのプルーニングなど、他のスプレッドシートの最適化は、引き続きオプティマイザによって使用されます。

スプレッドシート・ルールの数が数百を超えると、スプレッドシート分析に長い時間がかかることがあるため、このヒントによってコンパイル時間を減らします。

MONITORヒント

MONITORヒントは、文の実行時間が長くない場合でも、問合せのリアルタイムのSQL監視を強制します。このヒントは、パラメータCONTROL_MANAGEMENT_PACK_ACCESSがDIAGNOSTIC+TUNINGに設定されている場合にのみ有効です。

関連項目:
リアルタイムのSQL監視の詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。

NATIVE_FULL_OUTER_JOINヒント

NATIVE_FULL_OUTER_JOINヒントは、ネイティブ完全外部結合を使用するようオプティマイザに指示します。ネイティブ完全外部結合は、ハッシュ結合に基づくネイティブ実行メソッドです。

関連項目:

- NO_NATIVE_FULL_OUTER_JOINヒント

- ネイティブ完全外部結合の詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。

NOAPPENDヒント

NOAPPENDヒントは、INSERT文が有効な間、パラレル・モードを無効にして従来型のINSERTを使用するようにオプティマイザに指示します。従来型のINSERTはシリアル・モードでのデフォルトです。また、ダイレクト・パスINSERTはパラレル・モードでのデフォルトです。

NOCACHEヒント

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

NOCACHEヒントは、全表スキャンの実行時に、この表に対して取り出されたブロックを、バッファ・キャッシュ内のLRUリストの最低使用頻度側に入れるようオプティマイザに指定します。これは、バッファ・キャッシュ内のブロックの通常動作です。次に例を示します。

SELECT /*+ FULL(hr_emp) NOCACHE(hr_emp) */ last_name
FROM employees hr_emp;

CACHEおよびNOCACHEヒントは、V$SYSSTATビューで示すように、システム統計情報table scans(long tables)およびtable scans(short tables)に影響を与えます。

NO_CLUSTERINGヒント

注意:
NO_CLUSTERINGヒントは、Oracle Database 12cリリース1(12.1.0.2)から使用可能です。

このヒントは、属性クラスタリングに対して有効な表のINSERTおよびMERGE操作にのみ有効です。NO_CLUSTERINGヒントは、ダイレクト・パス・インサート(シリアルまたはパラレル)の属性クラスタリングを無効化します。このヒントは、表を作成または変更したDDLのYES ON LOAD設定をオーバーライドします。このヒントは、属性クラスタリングに有効化されていない表には影響しません。

関連項目:

- YES ON LOAD設定の詳細は、CREATE TABLEのclustering_when句を参照してください。

- 「CLUSTERINGヒント」

NO_EXPANDヒント

(「ヒントでの問合せブロックの指定」を参照)

NO_EXPANDヒントは、OR条件を持つ問合せ用のOR拡張、またはWHERE句内にあるINリストを検討しないようオプティマイザに指示します。通常、オプティマイザは、OR拡張を使用しない場合よりもコストが低減できると判断すると、OR拡張の使用を検討します。次に例を示します。

SELECT /*+ NO_EXPAND */ *
FROM employees e, departments d
WHERE e.manager_id = 108
OR d.department_id = 110;

関連項目:
「USE_CONCATヒント」を参照してください(このヒントの反対の機能です)。

NO_FACTヒント

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

NO_FACTヒントは、スター型変換のコンテキストで使用されます。これは、問合せ対象の表をファクト表とみなさないようオプティマイザに指示するためのものです。

NO_GATHER_OPTIMIZER_STATISTICSヒント

NO_GATHER_OPTIMIZER_STATISTICSヒントは、次のタイプのバルク・ロード操作中に統計収集を無効にするようオプティマイザに指示します。

- CREATE TABLE AS SELECT

- ダイレクト・パス・インサートを使用した、空の表へのINSERT INTO ... SELECT

関連項目:
バルク・ロードに関する統計収集の詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。

NO_INDEXヒント

(「ヒントでの問合せブロックの指定」、tablespec::=、indexspec::=を参照)

NO_INDEXヒントは、指定した表について1つ以上の索引を使用しないようオプティマイザに指示します。次に例を示します。

SELECT /*+ NO_INDEX(employees emp_empid) */ employee_id
FROM employees
WHERE employee_id > 200;

各パラメータは「INDEXヒント」と同じ目的で使用されますが、次の変更が加えられています。

- このヒントが使用可能な単一の索引を指定すると、オプティマイザはこの索引でのスキャンを検討しません。その他の指定されていない索引については、スキャンを検討します。

- このヒントが使用可能な索引のリストを指定すると、オプティマイザは指定された索引でのスキャンを検討しません。リスト内に指定されていないその他の索引については、スキャンを検討します。

- このヒントが索引を指定しない場合、オプティマイザは表のいずれの索引でのスキャンを考慮しません。この動作は、表について使用可能なすべての索引のリストを指定するNO_INDEXヒントと同様になります。

NO_INDEXヒントは、ファンクション索引、Bツリー索引、ビットマップ索引、クラスタ索引およびドメイン索引に適用されます。NO_INDEXヒントと索引ヒント(INDEX、INDEX_ASC、INDEX_DESC、INDEX_COMBINEまたはINDEX_FFS)の両方が同じ索引を指定する場合、データベースは、NO_INDEXヒントと、指定した索引の索引ヒントの両方を無視し、これらの索引を文の実行中に使用することを検討します。

NO_INDEX_FFSヒント

(「ヒントでの問合せブロックの指定」、tablespec::=、indexspec::=を参照)

NO_INDEX_FFSヒントは、指定された表の指定された索引の高速全索引スキャンを除外するようオプティマイザに指示します。各パラメータの目的は、「NO_INDEXヒント」と同じです。次に例を示します。

SELECT /*+ NO_INDEX_FFS(items item_order_ix) */ order_id
FROM order_items items;

NO_INDEX_SSヒント

(「ヒントでの問合せブロックの指定」、tablespec::=、indexspec::=を参照)

NO_INDEX_SSヒントは、指定された表の指定された索引のスキップ・スキャンを除外するようオプティマイザに指示します。各パラメータの目的は、「NO_INDEXヒント」と同じです。

関連項目:
索引スキップ・スキャンの詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。

NO_INMEMORYヒント

注意:
NO_INMEMORYヒントは、Oracle Database 12cリリース1(12.1.0.2)から使用可能です。

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

NO_INMEMORYヒントは、インメモリー問合せを無効化します。

NO_INMEMORY_PRUNINGヒント

注意:
NO_INMEMORY_PRUNINGヒントは、Oracle Database 12cリリース1(12.1.0.2)から使用可能です。

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

NO_INMEMORY_PRUNINGヒントは、インメモリー問合せのプルーニングを無効化します。

NO_MERGEヒント

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

NO_MERGEヒントは、外部問合せとインライン・ビュー問合せを結合して単一の問合せにしないようオプティマイザに指示します。

このヒントを使用すると、ビューへのアクセス方法に強い影響を与えることができます。たとえば、次の文は、ビューseattle_deptがマージされないようにします。

SELECT /*+ NO_MERGE(seattle_dept) */ e1.last_name, seattle_dept.department_name
FROM employees e1,
(SELECT location_id, department_id, department_name
FROM departments
WHERE location_id = 1700) seattle_dept
WHERE e1.department_id = seattle_dept.department_id;

ビューの問合せブロック内でNO_MERGEヒントを使用する場合は、引数なしで指定します。また、周囲の問合せでNO_MERGEを指定する場合には、ビュー名を引数として指定します。

NO_MONITORヒント

NO_MONITORヒントは、問合せの実行時間が長い場合でも、問合せのSQLのリアルタイム監視を無効にします。

NO_NATIVE_FULL_OUTER_JOINヒント

NO_NATIVE_FULL_OUTER_JOINヒントは、指定された各表を結合する場合にネイティブ実行メソッドを除外するようオプティマイザに指示します。かわりに、完全外部結合は、左側外部結合とアンチ結合の論理和として実行されます。

関連項目:
NATIVE_FULL_OUTER_JOINヒント

NO_PARALLELヒント

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

NO_PARALLELヒントは、文をシリアルで実行するようにオプティマイザに指示します。このヒントは、PARALLEL_DEGREE_POLICY初期化パラメータの値をオーバーライドします。また、表を作成するか変更したDDL内のPARALLELパラメータを上書きします。たとえば、次のSELECT文はシリアルで実行されます。

ALTER TABLE employees PARALLEL 8;
SELECT /*+ NO_PARALLEL(hr_emp) */ last_name
FROM employees hr_emp;

関連項目:

- パラレル・ヒントの詳細は、「パラレル・ヒントの注意事項」を参照してください。

- PARALLEL_DEGREE_POLICY初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

NOPARALLELヒント

NOPARALLELヒントは現在非推奨になっています。NO_PARALLELヒントをかわりに使用します。

NO_PARALLEL_INDEXヒント

(「ヒントでの問合せブロックの指定」、tablespec::=、indexspec::=を参照)

NO_PARALLEL_INDEXヒントは、索引を作成するか変更したDDL内のPARALLELパラメータを上書きし、パラレル索引スキャン操作を防止します。

関連項目:
パラレル・ヒントの詳細は、「パラレル・ヒントの注意事項」を参照してください。

NOPARALLEL_INDEXヒント

NOPARALLEL_INDEXヒントは現在非推奨になっています。NO_PARALLEL_INDEXヒントをかわりに使用します。

NO_PQ_CONCURRENT_UNIONヒント

(「ヒントでの問合せブロックの指定」を参照)

NO_PQ_CONCURRENT_UNIONヒントは、UNION操作とUNION ALL操作の同時処理を無効にするようオプティマイザに指示します。

関連項目:

- 「PQ_CONCURRENT_UNIONヒント」

- このヒントの使用方法の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

NO_PQ_SKEWヒント

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

NO_PQ_SKEWヒントは、パラレル結合の結合キーの値の分散が偏っていない(つまり、同じ結合キー値を持つ行の割合が大きくない)ことをオプティマイザに知らせます。tablespecで指定される表は、ハッシュ結合のプローブ表です。

NO_PUSH_PREDヒント

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

NO_PUSH_PREDヒントは、結合述語をビューにプッシュしないようオプティマイザに指示します。次に例を示します。

SELECT /*+ NO_MERGE(v) NO_PUSH_PRED(v) */ *
FROM employees e,
(SELECT manager_id
FROM employees) v
WHERE e.manager_id = v.manager_id(+)
AND e.employee_id = 100;

NO_PUSH_SUBQヒント

(「ヒントでの問合せブロックの指定」を参照)

NO_PUSH_SUBQヒントは、実行計画における最後の手順として、マージされていない副問合せを評価するようオプティマイザに指示します。これにより、副問合せのコストが比較的高い場合や、副問合せによって行数が大幅に減少しない場合に、パフォーマンスが向上する場合があります。

NO_PX_JOIN_FILTERヒント

このヒントは、オプティマイザがパラレル結合のビットマップ・フィルタ処理を使用するのを防ぎます。

NO_QUERY_TRANSFORMATIONヒント

NO_QUERY_TRANSFORMATIONヒントは、すべての問合せ変換(OR拡張、ビュー・マージ、副問合せのネスト解除、スター型変換、マテリアライズド・ビュー・リライトなど)をスキップするようオプティマイザに指示するためのものです。次に例を示します。

SELECT /*+ NO_QUERY_TRANSFORMATION */ employee_id, last_name
FROM (SELECT * FROM employees e) v
WHERE v.last_name = 'Smith';

NO_RESULT_CACHEヒント

RESULT_CACHE_MODE初期化パラメータがFORCEに設定されていると、オプティマイザは、問合せ結果を結果キャッシュにキャッシュします。この場合、NO_RESULT_CACHEヒントにより、このような現行の問合せのキャッシュが無効になります。

問合せがOCIクライアントから実行され、OCIクライアントの結果キャッシュが有効になっている場合、NO_RESULT_CACHEヒントにより現行の問合せキャッシュが無効になります。

NO_REWRITEヒント

(「ヒントでの問合せブロックの指定」を参照)

NO_REWRITEヒントは、パラメータQUERY_REWRITE_ENABLEDの設定を上書きして、問合せブロック用のクエリー・リライトを無効にするようオプティマイザに指示します。次に例を示します。

SELECT /*+ NO_REWRITE */ sum(s.amount_sold) AS dollars
FROM sales s, times t
WHERE s.time_id = t.time_id
GROUP BY t.calendar_month_desc;

NOREWRITEヒント

NOREWRITEヒントは現在非推奨になっています。NO_REWRITEヒントをかわりに使用します。

NO_STAR_TRANSFORMATIONヒント

(「ヒントでの問合せブロックの指定」を参照)

NO_STAR_TRANSFORMATIONヒントは、問合せのスター型問合せ変換を実行しないようオプティマイザに指示します。

NO_STATEMENT_QUEUINGヒント

NO_STATEMENT_QUEUINGヒントは、パラレル文のキューイングによって文がキューに入れられるかどうかに影響します。

PARALLEL_DEGREE_POLICYがAUTOに設定されている場合、このヒントにより文がパラレル文キューをバイパスできるようになります。ただし、キューを回避した文が原因となって、PARALLEL_SERVERS_TARGET初期化パラメータの値で定義されたパラレル実行サーバーの最大数をシステムが超過する可能性があります(この初期化パラメータで定義された制限値を超えるとパラレル文のキューイングが開始されます)。

パラレル文キューを回避した文が要求どおりの数のパラレル実行サーバーを受け取れる保証はありません。割当てが可能なのは、システム上で使用可能なパラレル実行サーバーのみであり、その数は最大でPARALLEL_MAX_SERVERS初期化パラメータの値までです。

次に例を示します。

SELECT /*+ NO_STATEMENT_QUEUING */ emp.last_name, dpt.department_name
FROM employees emp, departments dpt
WHERE emp.department_id = dpt.department_id;

関連項目:
「STATEMENT_QUEUINGヒント」

NO_UNNESTヒント

(「ヒントでの問合せブロックの指定」を参照)

NO_UNNESTヒントを使用するとネスト解除をオフに切り替えます。

NO_USE_CUBEヒント

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

NO_USE_CUBEヒントは、指定された表を内部表として使用して、指定された各表を別の行のソースに結合する際にキューブ結合を除外するようオプティマイザに指示します。

NO_USE_HASHヒント

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

NO_USE_HASHヒントは、指定された表を内部表として使用して、指定された各表を別の行のソースに結合する際にハッシュ結合を除外するようオプティマイザに指示します。次に例を示します。

SELECT /*+ NO_USE_HASH(e d) */ *
FROM employees e, departments d
WHERE e.department_id = d.department_id;

NO_USE_MERGEヒント

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

NO_USE_MERGEヒントは、指定された表を内部表として使用して、指定された各表を別の行のソースに結合する際にソート/マージ結合を除外するようオプティマイザに指示します。次に例を示します。

SELECT /*+ NO_USE_MERGE(e d) */ *
FROM employees e, departments d
WHERE e.department_id = d.department_id
ORDER BY d.department_id;

NO_USE_NLヒント

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

NO_USE_NLヒントは、指定された表を内部表として使用して、指定された各表を別の行のソースに結合する際に、ネストしたループ結合を除外するようオプティマイザに指示します。次に例を示します。

SELECT /*+ NO_USE_NL(l h) */ *
FROM orders h, order_items l
WHERE l.order_id = h.order_id
AND l.order_id > 2400;

このヒントを指定すると、指定された表についてハッシュ結合とソート/マージ結合のみが検討されます。ただし、ネストしたループのみを使用して表を結合する場合もあります。この場合、オプティマイザは、それらの表に関するヒントを無視します。

NO_XML_QUERY_REWRITEヒント

NO_XML_QUERY_REWRITEヒントは、SQL文のXPath式のリライトを禁止するようオプティマイザに指示します。このヒントは、XPath式のリライトを禁止することで、現行の問合せでのXMLIndex索引の使用も禁止します。次に例を示します。

SELECT /*+NO_XML_QUERY_REWRITE*/ XMLQUERY('<A/>' RETURNING CONTENT)
FROM DUAL;

関連項目:
「NO_XMLINDEX_REWRITEヒント」

NO_XMLINDEX_REWRITEヒント

NO_XMLINDEX_REWRITEヒントは、現行の問合せにXMLIndex索引を使用しないようにオプティマイザに指示します。次に例を示します。

SELECT /*+NO_XMLINDEX_REWRITE*/ count(*)
FROM warehouses
WHERE existsNode(warehouse_spec, '/Warehouse/Building') = 1;

関連項目:
XMLIndexの使用を無効にするもう1つの方法については、「NO_XML_QUERY_REWRITEヒント」を参照してください。

NO_ZONEMAPヒント

注意:
NO_ZONEMAPヒントは、Oracle Database 12cリリース1(12.1.0.2)から使用可能です。

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

NO_ZONEMAPヒントは、異なるタイプのプルーニングのゾーン・マップの使用を無効化します。このヒントは、ゾーン・マップを作成または変更したDDLのENABLE PRUNING設定をオーバーライドします。

次のいずれかのオプションを指定します。

- SCAN - スキャン・プルーニングのゾーン・マップの使用を無効化します。

- JOIN - 結合プルーニングのゾーン・マップの使用を無効化します。

- PARTITION - パーティション・プルーニングのゾーン・マップの使用を無効化します。

関連項目:

- CREATE MATERIALIZED ZONEMAPのENABLE | DISABLE PRUNING句

- ゾーン・マップのプルーニングに関する一般的な情報については、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

OPT_PARAMヒント

OPT_PARAMヒントを使用すると、現行の問合せ中にのみ初期化パラメータを設定できます。このヒントは、パラメータOPTIMIZER_DYNAMIC_SAMPLING、OPTIMIZER_INDEX_CACHING、OPTIMIZER_INDEX_COST_ADJ、OPTIMIZER_SECURE_VIEW_MERGINGおよびSTAR_TRANSFORMATION_ENABLEDに対してのみ有効です。たとえば、次のヒントは、ヒントを追加した文のパラメータSTAR_TRANSFORMATION_ENABLEDをTRUEに設定します。

SELECT /*+ OPT_PARAM('star_transformation_enabled' 'true') */ *
FROM ... ;

文字列のパラメータ値は、一重引用符で囲まれます。数値のパラメータ値は、一重引用符で囲まずに指定されます。

ORDEREDヒント

ORDEREDヒントは、FROM句に現れる順序で表を結合するようOracleに指示します。ORDEREDヒントより多目的なLEADINGヒントを使用することをお薦めします。

結合を要求するSQL文からORDEREDヒントを削除すると、オプティマイザが表の結合順序を選択します。各表から選択した行数をオプティマイザが把握していないと考えられる場合、ORDEREDヒントを使用して結合順序を指定することがあります。この情報を使用すると、オプティマイザによる選択よりも効率良く内部表と外部表を選択できます。

次の問合せは、ORDEREDヒントの使用例です。

SELECT  /*+ ORDERED */ o.order_id, c.customer_id, l.unit_price * l.quantity
FROM customers c, order_items l, orders o
WHERE c.cust_last_name = 'Taylor'
AND o.customer_id = c.customer_id
AND o.order_id = l.order_id;

PARALLELヒント

パラレル・ヒントの注意事項 Oracle Database 11gリリース2以降では、PARALLELヒントとNO_PARALLELヒントは文レベルのヒントであり、以前のオブジェクト・レベルのPARALLEL_INDEXヒントとNO_PARALLEL_INDEXヒント、および以前に指定したPARALLELヒントとNO_PARALLELヒントより優先されます。PARALLELでintegerを指定すると、並列度は文に対して使用されます。integerを指定しない場合は、データベースで並列度が計算されます。パラレル化を使用できるすべてのアクセス・パスで、指定した並列度または計算された並列度が使用されます。

次の構文図で、parallel_hint_statementは文レベルのヒントの構文を示し、parallel_hint_objectはオブジェクト・レベルのヒントの構文を示します。オブジェクト・レベルのヒントは下位互換性のためにサポートされており、文レベルのヒントの方が優先されます。

parallel_hint_statement::=

parallel_hint_object::=

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

PARALLELヒントは、指定された数の同時サーバーをパラレル操作に使用するようオプティマイザに指示します。このヒントは、PARALLEL_DEGREE_POLICY初期化パラメータの値をオーバーライドします。このヒントは、文のSELECT、INSERT、MERGE、UPDATEおよびDELETE部分と表のスキャン部分に適用されます。パラレル制限に違反すると、ヒントは無視されます。

注意:
ソート操作またはグループ操作も実行する場合、使用可能なサーバー数はPARALLELヒントの値の2倍となります。

文レベルのPARALLELヒントでは、次のように動作します。

- PARALLEL: 文は常にパラレルで実行され、データベースは並列度(2以上)を計算します。

- PARALLEL (DEFAULT): オプティマイザは並列度を計算します。並列度は、すべての関係するインスタンスで使用可能なCPUの数に、初期化パラメータPARALLEL_THREADS_PER_CPUの値を掛けたものです。

- PARALLEL (AUTO): データベースは並列度を計算します(結果は1以上になります)。計算された並列度が1の場合、文はシリアルで実行されます。

- PARALLEL (MANUAL): オプティマイザは強制的に、文の中のオブジェクトのパラレル設定を使用します。

- PARALLEL (integer): オプティマイザは、integerに指定された並列度を使用します。

次の例では、オプティマイザは並列度を計算します。文は常にパラレルで実行されます。

SELECT /*+ PARALLEL */ last_name
FROM employees;

次の例では、オプティマイザは並列度を計算しますが、並列度は1の場合があります。その場合、文はシリアルで実行されます。

SELECT /*+ PARALLEL (AUTO) */ last_name
FROM employees;

次の例では、PARALLELヒントは、表自体に現在適用されている並列度(5)を使用するようオプティマイザに指示します。

CREATE TABLE parallel_table (col1 number, col2 VARCHAR2(10)) PARALLEL 5;

SELECT /*+ PARALLEL (MANUAL) */ col2
FROM parallel_table;

オブジェクト・レベルのPARALLELヒントでは、次のように動作します。

- PARALLEL: 問合せコーディネータはデフォルトの並列度を決定するために初期化パラメータの設定を検証する必要があります。

- PARALLEL (integer): オプティマイザは、integerに指定された並列度を使用します。

- PARALLEL (DEFAULT): オプティマイザは並列度を計算します。並列度は、すべての関係するインスタンスで使用可能なCPUの数に、初期化パラメータPARALLEL_THREADS_PER_CPUの値を掛けたものです。

次の例では、PARALLELヒントが、employees表定義内で指定された並列度を上書きします。

SELECT /*+ FULL(hr_emp) PARALLEL(hr_emp, 5) */ last_name
FROM employees hr_emp;

次の例では、PARALLELヒントが、employees表定義内で指定された並列度を上書きし、並列度を計算するようにオプティマイザに指示します。並列度は、すべての関係するインスタンスで使用可能なCPUの数に初期化パラメータPARALLEL_THREADS_PER_CPUの値を掛けたものです。

SELECT /*+ FULL(hr_emp) PARALLEL(hr_emp, DEFAULT) */ last_name
FROM employees hr_emp;

パラレル実行の詳細は、「CREATE TABLE」および『Oracle Database概要』を参照してください。

関連項目:

- パラレル実行の詳細は、「CREATE TABLE」および『Oracle Database概要』を参照してください。

- DBMS_PARALLEL_EXECUTEパッケージ(行のチャンクの変更を表に適用するメソッドを含むパッケージ)の詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。エラーがない場合は、各チャンクに対する変更が個別にコミットされます。

- PARALLEL_DEGREE_POLICY初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

- NO_PARALLELヒント

PARALLEL_INDEXヒント

(「ヒントでの問合せブロックの指定」、tablespec::=、indexspec::=を参照)

PARALLEL_INDEXヒントは、パーティション索引について索引レンジ・スキャン、全体スキャンおよび高速全体スキャンをパラレル化するために、指定された数の同時サーバーを使用するようオプティマイザに指示します。

integer値は、指定された索引の並列度を示します。DEFAULTを指定するか、いかなる値も指定しない場合、問合せコーディネータはデフォルトの並列度を決定するために初期化パラメータの設定を検証する必要があります。たとえば、次のヒントは、3つのパラレル実行プロセスが使用されることを示します。

SELECT /*+ PARALLEL_INDEX(table1, index1, 3) */

関連項目:
パラレル・ヒントの詳細は、「パラレル・ヒントの注意事項」を参照してください。

PQ_CONCURRENT_UNIONヒント

(「ヒントでの問合せブロックの指定」を参照)

PQ_CONCURRENT_UNIONヒントは、UNION操作とUNION ALL操作の同時処理を有効にするようオプティマイザに指示します。

関連項目:

- 「NO_PQ_CONCURRENT_UNIONヒント」

- このヒントの使用方法の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

PQ_DISTRIBUTEヒント

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

PQ_DISTRIBUTEヒントは、プロデューサおよびコンシューマ問合せサーバーに行を分散させる方法をオプティマイザに指示します。結合またはロードのいずれかで行の分散を制御できます。

ロードでの分散の制御 パラレルINSERT ... SELECT文およびパラレルCREATE TABLE ... AS SELECT文で行の分散を制御し、プロデューサ(問合せ)およびコンシューマ(ロード)サーバー間で行を分散する方法を指示できます。構文の上位ブランチを使用するには、1つの分散方法を指定します。表2-22に、分散方法の値とそのセマンティクスを示します。

表2-22 ロードでの分散処理の値

分散

説明

NONE

分散処理なし。したがって、問合せおよびロード操作は、問合せサーバーごとに組み合されます。すべてのサーバーがすべてのパーティションをロードします。分散を行わないことで、偏りがない場合に行の分散によって発生するオーバーヘッドを避けることができます。偏りは、空のセグメントによって発生したり、文の条件で問合せによって評価されるすべての行が排除される場合に発生することがあります。この方法を使用することで偏りが発生する場合、かわりにRANDOMまたはRANDOM_LOCALのいずれかの分散を使用します。

注意: この分散方法は、慎重に使用してください。ロードされる各パーティションに対し、プロセスごとに512 KB以上のPGAメモリーが必要です。圧縮も同時に使用している場合、サーバーごとに約1.5 MBのPGAメモリーが消費されます。

PARTITION

この方法は、tablespecのパーティション情報を使用して、問合せサーバーからロード・サーバーへ行を分散します。この分散方法は、問合せおよびロード操作を組み合せることができない(または望ましくない)場合、すなわち、ロードされるパーティションの数がロード・サーバーの数以上で、ロードされるパーティション間で入力データが均等に分散される(偏りがない)場合に使用します。

RANDOM

この方法は、プロデューサの行をラウンドロビン法でコンシューマに分散します。この分散方法は、入力データの偏りが大きい場合に使用します。

RANDOM_LOCAL

この方法は、特定のパーティションの集合を保持する役割を果たすサーバーの集合に対して、プロデューサの行を分散します。2つ以上のサーバーが同じパーティションをロードする可能性はありますが、すべてのパーティションをロードするサーバーは存在しません。この分散方法は、入力データが偏っており、メモリーの制約によって問合せおよびロード操作を組み合せることができない場合に使用します。

たとえば、次のダイレクト・パス・インサート操作の問合せおよびロード部分は、問合せサーバーごとに組み合されます。

INSERT /*+ APPEND PARALLEL(target_table, 16) PQ_DISTRIBUTE(target_table, NONE) */
INTO target_table
SELECT * FROM source_table;

次の表を作成する例では、オプティマイザは、target_tableのパーティション化を使用して行を分散します。

CREATE /*+ PQ_DISTRIBUTE(target_table, PARTITION) */ TABLE target_table
NOLOGGING PARALLEL 16
PARTITION BY HASH (l_orderkey) PARTITIONS 512
AS SELECT * FROM source_table;

結合での分散の制御 構文図の下位ブランチに示すように、2つの分散方法(外部表への分散処理と内部表への分散処理)を指定することで、結合での分散方法を制御できます。

- outer_distributionは、外部表への分散処理です。

- inner_distributionは、内部表への分散処理です。

分散の値は、HASH、BROADCAST、PARTITIONおよびNONEです。表2-23で説明するとおり、6つの組合せの表分散のみが有効です。

表2-23 結合での分散処理の値

分散

説明

HASH、HASH

各表の行は、結合キーにハッシュ関数を使用して、コンシューマ問合せサーバーにマップされます。マッピングが完了すると、各問合せサーバーは、結果として生成されるパーティションの組で結合を実行します。この分散は、表のサイズがほぼ等しく、結合操作がハッシュ結合またはソート/マージ結合で実施される場合にお薦めします。

BROADCAST、NONE

外部表のすべての行が各問合せサーバーにブロードキャストされます。内部表の行は、ランダムにパーティション化されます。この分散は、外部表のサイズが内部表よりもきわめて小さい場合にお薦めします。一般的に、内部表のサイズに問合せサーバーの数を乗じた数値が外部表のサイズよりも大きい場合、この分散を使用します。

NONE、BROADCAST

内部表のすべての行が各コンシューマ問合せサーバーにブロードキャストされます。外部表の行は、ランダムにパーティション化されます。この分散は、内部表のサイズが外部表よりもきわめて小さい場合にお薦めします。一般的に、内部表のサイズに問合せサーバーの数を乗じた数値が外部表のサイズより小さい場合、この分散を使用します。

PARTITION、NONE

外部表の行は、内部表のパーティション化を使用してマップされます。内部表は、結合キーでパーティション化されている必要があります。この分散は、外部表のパーティションの数が問合せサーバーの数と等しいかほぼ等しい(たとえば、パーティション数が14で問合せサーバー数が15)場合にお薦めします。

注意: オプティマイザは、内部表がパーティション化されていないか、パーティション化キーと等価結合関係にない場合、このヒントを無視します。

NONE、PARTITION

内部表の行は、外部表のパーティション化を使用してマップされます。外部表は、結合キーでパーティション化されている必要があります。この分散は、外部表のパーティションの数が問合せサーバーの数と等しいかほぼ等しい(たとえば、パーティション数が14で問合せサーバー数が15)場合にお薦めします。

注意: オプティマイザは、外部表がパーティション化されていないか、パーティション化キーと等価結合関係にない場合、このヒントを無視します。

NONE、NONE

各問合せサーバーは、各表から抽出した一致パーティションの組で結合操作を実行します。両方の表は、結合キーに基づいて同一レベルでパーティション化されている必要があります。

たとえば、rとsという2つの表がハッシュ結合によって結合されている場合、次の問合せには、ハッシュ分散を使用するためのヒントが含まれます。

SELECT /*+ORDERED PQ_DISTRIBUTE(s HASH, HASH) USE_HASH (s)*/ column_list
FROM r,s
WHERE r.c=s.c;

外部表rをブロードキャストするための問合せは、次のとおりです。

SELECT /*+ORDERED PQ_DISTRIBUTE(s BROADCAST, NONE) USE_HASH (s) */ column_list
FROM r,s
WHERE r.c=s.c;

PQ_FILTERヒント

PQ_FILTERヒントは、相関副問合せをフィルタリングするときの行の処理方法についてオプティマイザに指示します。

- SERIAL: フィルタの左側と右側で行を逐次処理します。このオプションは、問合せにとってパラレル化のオーバーヘッドが大きすぎる場合(たとえば左側の行が非常に少ない場合など)に使用します。

- NONE: フィルタの左側と右側で行をパラレル処理します。このオプションは、フィルタの左側でデータの分散に偏りがなく、左側の分散を回避する(たとえば左側のサイズが大きいため)場合に使用します。

- HASH: フィルタの左側でハッシュ分散を使用して行をパラレル処理します。フィルタの右側では行を逐次処理します。このオプションは、フィルタの左側でデータの分散に偏りがない場合に使用します。

- RANDOM: フィルタの左側でランダム分散を使用して行をパラレル処理します。フィルタの右側では行を逐次処理します。このオプションは、フィルタの左側でデータの分散に偏りがある場合に使用します。

PQ_SKEWヒント

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

PQ_SKEWヒントは、パラレル結合の結合キーの値の分散が著しく偏っている(つまり、同じ結合キー値を持つ行の割合が大きい)ことをオプティマイザに知らせます。tablespecで指定される表は、ハッシュ結合のプローブ表です。

PUSH_PREDヒント

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

PUSH_PREDヒントは、結合述語をビューにプッシュするようオプティマイザに指示します。次に例を示します。

SELECT /*+ NO_MERGE(v) PUSH_PRED(v) */ *
FROM employees e,
(SELECT manager_id
FROM employees) v
WHERE e.manager_id = v.manager_id(+)
AND e.employee_id = 100;

PUSH_SUBQヒント

(「ヒントでの問合せブロックの指定」を参照)

PUSH_SUBQヒントは、実行計画の初期段階で実行可能な手順で、マージされていない副問合せを評価するようオプティマイザに指示します。通常、マージされていない副問合せは、実行計画の最終手順で実行されます。副問合せのコストが比較的低く、副問合せによって行数が大幅に減少する場合、副問合せの早期評価によってパフォーマンスが向上する可能性があります。

このヒントは、副問合せがリモート表か、マージ結合によって結合されている表に適用される場合には効果がありません。

PX_JOIN_FILTERヒント

このヒントは、パラレル結合のビットマップ・フィルタ処理の使用をオプティマイザに強制します。

QB_NAMEヒント

(「ヒントでの問合せブロックの指定」を参照)

QB_NAMEヒントを使用すると、問合せブロックの名前を定義できます。この名前は外部問合せ内のヒントまたはインライン・ビュー内のヒントで使用でき、名前が付けられた問合せブロックにある表で実行する問合せに影響をおよぼします。

2つ以上の問合せブロックに同じ名前が付いている場合や、同じ問合せブロックに対して2回、それぞれ異なる名前でヒントが適用されている場合は、オプティマイザはすべての名前を無視し、その問合せブロックを参照しているヒントも無視します。このヒントを使用して名前が付けられてはいない問合せブロックには、システムによって生成された一意の名前が付けられます。この名前は計画表に表示できます。また、問合せブロック内のヒントや問合せブロック・ヒントでも使用できます。次に例を示します。

SELECT /*+ QB_NAME(qb) FULL(@qb e) */ employee_id, last_name
FROM employees e
WHERE last_name = 'Smith';

RESULT_CACHEヒント

RESULT_CACHEヒントは、メモリー内の現行の問合せまたは問合せのフラグメントの結果をキャッシュし、今後の問合せまたは問合せのフラグメントの実行時にキャッシュした結果を使用するようデータベースに指示します。このヒントは、トップレベル問合せ、subquery_factoring_clauseまたはFROM句のインライン・ビューで認識されます。キャッシュ結果は、共有プールの結果のキャッシュ・メモリー部分に保存されます。

作成に使用されたデータベース・オブジェクトが正常に修正されると、キャッシュ結果は自動的に無効化されます。このヒントは、RESULT_CACHE_MODE初期化パラメータの設定よりも優先されます。

問合せが結果キャッシュに使用できるのは、問合せで必要とされるすべてのファンクション(たとえば、組込みファンクション、ユーザー定義ファンクションまたは仮想列)が決定的である場合にかぎられます。

問合せがOCIクライアントから実行され、OCIクライアントの結果キャッシュが有効になっている場合、RESULT_CACHEヒントにより現行の問合せのクライアントのキャッシュが有効になります。

関連項目:
このヒントの使用方法については『Oracle Databaseパフォーマンス・チューニング・ガイド』、RESULT_CACHE_MODE初期化パラメータの詳細は『Oracle Databaseリファレンス』、OCI結果キャッシュの詳細および使用のガイドラインについては『Oracle Call Interfaceプログラマーズ・ガイド』を参照してください。

RETRY_ON_ROW_CHANGEヒント

注意:
CHANGE_DUPKEY_ERROR_INDEXヒント、IGNORE_ROW_ON_DUPKEY_INDEXヒントおよびRETRY_ON_ROW_CHANGEヒントは、セマンティクスに影響を与えるという点で他のヒントとは異なります。これら3つのヒントには、「ヒント」で説明されている一般的な原則は当てはまりません。

このヒントが有効になるのは、UPDATE操作およびDELETE操作に対してのみです。INSERT操作およびMERGE操作に対してはサポートされません。このヒントを指定すると、変更対象の行セットが決定された時点から、ブロックが実際に変更される時点までの間に、セット内の1つ以上の行のORA_ROWSCNが変更された場合に、操作が再試行されます。

関連項目:
「IGNORE_ROW_ON_DUPKEY_INDEXヒント」および「CHANGE_DUPKEY_ERROR_INDEXヒント」

REWRITEヒント

(「ヒントでの問合せブロックの指定」を参照)

REWRITEヒントは、可能な場合、コストを考慮することなく、マテリアライズド・ビューに関する問合せをリライトするようオプティマイザに指示します。REWRITEヒントは、ビュー・リストとともに、またはビュー・リストなしで使用します。ビュー・リストとともにREWRITEを使用し、リストに適切なマテリアライズド・ビューが含まれている場合、Oracleはコストを考慮せずにそのビューを使用します。

Oracleでは、リスト外のビューを検討しません。ビュー・リストを指定しない場合、Oracleは適切なマテリアライズド・ビューを検索し、最終計画のコストを考慮することなく常にそのビューを使用します。

関連項目:

- マテリアライズド・ビューの詳細は、『Oracle Database概要』および『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

- マテリアライズド・ビューでREWRITEを使用する場合の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

STAR_TRANSFORMATIONヒント

(「ヒントでの問合せブロックの指定」を参照)

STAR_TRANSFORMATIONヒントは、変換を行う際に最適な計画を使用するようオプティマイザに指示します。このヒントを使用しない場合、オプティマイザは、変換された問合せ用の最適な計画のかわりに、変換なしで生成された最適な計画を使用するという、問合せの最適化に関する決定を行う場合があります。次に例を示します。

SELECT /*+ STAR_TRANSFORMATION */ s.time_id, s.prod_id, s.channel_id
FROM sales s, times t, products p, channels c
WHERE s.time_id = t.time_id
AND s.prod_id = p.prod_id
AND s.channel_id = c.channel_id
AND c.channel_desc = 'Tele Sales';

ヒントが指定された場合でも、変換が実行される保証はありません。オプティマイザは、妥当と考えられる場合にかぎって副問合せを生成します。副問合せが生成されない場合には、変換された問合せが存在しないため、ヒントに関係なく、未変換の問合せに関する最適な計画が使用されます。

関連項目:

- スター型変換の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

- STAR_TRANSFORMATION_ENABLED初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

STATEMENT_QUEUINGヒント

NO_STATEMENT_QUEUINGヒントは、パラレル文のキューイングによって文がキューに入れられるかどうかに影響します。

PARALLEL_DEGREE_POLICYをAUTOに設定しない場合は、このヒントによって文がパラレル文キューイング用として認識され、リクエストされたDOPで十分なパラレル処理が可能な場合にのみ実行できるようにします。キューイングが有効にされる前の時点で使用可能なパラレル実行サーバーの数は、PARALLEL_SERVERS_TARGET初期化パラメータで定義されたシステム内で許可されるパラレル実行サーバーの最大数と使用中のパラレル実行サーバーの数との差です。

次に例を示します。

SELECT /*+ STATEMENT_QUEUING */ emp.last_name, dpt.department_name
FROM employees emp, departments dpt
WHERE emp.department_id = dpt.department_id;

関連項目:
「NO_STATEMENT_QUEUINGヒント」

UNNESTヒント

(「ヒントでの問合せブロックの指定」を参照)

UNNESTヒントは、副問合せの本体のネストを解除し、その副問合せを含む問合せブロック本体にマージするようオプティマイザに指示します。これによって、アクセス・パスおよび結合の評価時に、オプティマイザが副問合せと問合せブロックを総合して考慮できるようになります。

副問合せのネストを解除する前に、オプティマイザは、文が有効かどうかをまず検討します。文は、経験則に基づくテストと問合せ最適化テストに合格する必要があります。UNNESTヒントは、副問合せブロックの有効性のみをチェックするようオプティマイザに指示します。副問合せブロックが有効な場合、経験則またはコストをチェックすることなく副問合せのネストを解除できます。

関連項目:

- ネスト化された副問合せのネスト解除、および副問合せブロックが有効となる条件については、「コレクションのネスト解除例:」を参照してください。

- 副問合せのネスト解除の詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。

USE_CONCATヒント

(「ヒントでの問合せブロックの指定」を参照)

USE_CONCATヒントは、問合せのWHERE句内で組み合されたOR条件を、集合演算子UNION ALLを使用して複合問合せに変換するようオプティマイザに指示します。このヒントを使用しない場合、この変換は、連結を使用した問合せのコストが、使用しない場合よりも低い場合にのみ実行されます。USE_CONCATヒントは、コストより優先します。次に例を示します。

SELECT /*+ USE_CONCAT */ *
FROM employees e
WHERE manager_id = 108
OR department_id = 110;

関連項目:
「NO_EXPANDヒント」を参照してください(このヒントの反対の機能です)。

USE_CUBEヒント

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

結合の右側がキューブの場合、USE_CUBEヒントは、指定された各表を、キューブ結合を使用して別の行のソースに結合するようにオプティマイザに指示します。オプティマイザが統計分析に基づいてキューブ結合を使用しないことを決定したときには、USE_CUBEを使用するとオプティマイザの決定を無視できます。

USE_HASHヒント

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

USE_HASHヒントは、指定された各表を、ハッシュ結合を使用して別の行のソースに結合するようオプティマイザに指示します。次に例を示します。

SELECT /*+ USE_HASH(l h) */ *
FROM orders h, order_items l
WHERE l.order_id = h.order_id
AND l.order_id > 2400;

USE_MERGEヒント

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

USE_MERGEヒントは、指定された各表を、ソート/マージ結合を使用して別の行のソースに結合するようオプティマイザに指示します。次に例を示します。

SELECT /*+ USE_MERGE(employees departments) */ *
FROM employees, departments
WHERE employees.department_id = departments.department_id;

LEADINGおよびORDEREDヒントとともに、USE_NLおよびUSE_MERGEヒントを使用することをお薦めします。オプティマイザは、参照表を結合の内部表にする必要がある場合に、これらのヒントを使用します。参照表が外部表の場合、ヒントは無視されます。

USE_NLヒント

USE_NLヒントは、指定された表を内部表として使用し、指定された各表をネストしたループ結合とともに別の行のソースに結合するようオプティマイザに指示します。

(「ヒントでの問合せブロックの指定」、tablespec::=を参照)

USE_NLヒントは、指定された表を内部表として使用し、指定された各表をネストしたループ結合とともに別の行のソースに結合するようオプティマイザに指示します。

LEADINGおよびORDEREDヒントとともに、USE_NLおよびUSE_MERGEヒントを使用することをお薦めします。オプティマイザは、参照表を結合の内部表にする必要がある場合に、これらのヒントを使用します。参照表が外部表の場合、ヒントは無視されます。

次の例では、ネストしたループがヒントによって強制される場合、全表スキャンを介してordersがアクセスされ、各行にフィルタ条件l.order_id = h.order_idが適用されます。フィルタ条件を満たす各行については、索引order_idを介してorder_itemsがアクセスされます。

SELECT /*+ USE_NL(l h) */ h.customer_id, l.unit_price * l.quantity
FROM orders h, order_items l
WHERE l.order_id = h.order_id;

INDEXヒントを問合せに追加すると、ordersの全表スキャンを回避し、より大規模なシステムで使用される実行計画と同様の実行計画を生成できる場合があります。ただし、ここでは特に効果的ではない場合があります。

USE_NL_WITH_INDEXヒント

(「ヒントでの問合せブロックの指定」、tablespec::=、indexspec::=を参照)

USE_NL_WITH_INDEXヒントは、指定された表を内部表として使用し、指定された表をネストしたループ結合とともに別の行のソースに結合するようオプティマイザに指示します。次に例を示します。

SELECT /*+ USE_NL_WITH_INDEX(l item_product_ix) */ *
FROM orders h, order_items l
WHERE l.order_id = h.order_id
AND l.order_id > 2400;

次の条件が適用されます。

- 索引を指定しない場合、オプティマイザは、1つ以上の結合述語とともに、索引キーとして一部の索引を使用できる必要があります。

- 索引を指定する場合、オプティマイザは、1つ以上の結合述語とともに、索引キーとしてその索引を使用できる必要があります。

データベース・オブジェクト

次の項で説明するとおり、Oracle Databaseは、特定のスキーマに対応付けられたオブジェクトと、特定のスキーマに対応付けられていないオブジェクトを認識します。

スキーマ・オブジェクト

スキーマとは、データの論理構造(スキーマ・オブジェクト)の集まりです。スキーマはデータベース・ユーザーによって所有され、そのユーザーと同じ名前を持ちます。ユーザーはそれぞれ1つのスキーマを所有します。スキーマ・オブジェクトの作成と操作はSQLで行うことができ、オブジェクトのタイプには次のものがあります。

クラスタ
制約
データベース・リンク
データベース・トリガー
ディメンション
外部プロシージャ・ライブラリ
索引構成表
索引
索引タイプ
Javaクラス、Javaリソース、Javaソース
マテリアライズド・ビュー
マテリアライズド・ビュー・ログ
マイニング・モデル
オブジェクト表
オブジェクト型
オブジェクト・ビュー
演算子
パッケージ
順序
ストアド・ファンクション、ストアド・プロシージャ
シノニム
表
ビュー

非スキーマ・オブジェクト

次のタイプのオブジェクトもデータベースに格納され、SQLで作成および操作されますが、スキーマには含まれません。

コンテキスト
ディレクトリ
エディション
リストア・ポイント
ロール
ロールバック・セグメント
表領域
ユーザー

各タイプのオブジェクトは、このマニュアルの第10章から第19章のデータベース・オブジェクトを作成する文の項で説明されています。これらの文は、キーワードCREATEで始まります。たとえば、クラスタの定義については、「CREATE CLUSTER」を参照してください。

関連項目:
データベース・オブジェクトの概要については、『Oracle Database概要』を参照してください。

ほとんどのデータベース・オブジェクトでは、作成時に名前を指定する必要があります。名前は、この後の項に示す規則に従って付けてください。

データベース・オブジェクト名および修飾子

データベース・オブジェクトの中には、複数のコンポーネントから構成されていて、各コンポーネントに名前を付けることが可能または必須のものがあります(たとえば、表またはビュー内の列、索引および表のパーティションとサブパーティション、表の整合性制約、パッケージ内に格納されるオブジェクト(プロシージャやストアド・ファンクションなど))。この項の内容は次のとおりです。

- データベース・オブジェクトとデータベース・オブジェクトの位置修飾子のネーミング規則

- データベース・オブジェクトと修飾子のネーミングのガイドライン

注意:
Oracleでは、暗黙的に生成されるデータベース・オブジェクトとサブオブジェクトには「SYS_」で始まるシステム生成名を使用し、Oracleが提供する一部のオブジェクトには、「ORA_」で始まる名前を使用します。名前解決での競合を避けるため、これらの接頭辞は明示的に指定するデータベース・オブジェクト名やサブオブジェクト名では使用しないでください。

データベース・オブジェクトのネーミング規則

すべてのデータベース・オブジェクトには、名前があります。SQL文では、引用識別子または非引用識別子を使用して、オブジェクトの名前を表します。

- 引用識別子は、二重引用符(")で囲みます。引用識別子を使用してスキーマ・オブジェクトを指定した場合、そのオブジェクトを参照するときは、必ず二重引用符を使用します。

- 非引用識別子の前後に句読点は付けません。

データベース・オブジェクトを指定する場合、引用識別子または非引用識別子を使用できます。データベース名、グローバル・データベース名およびデータベース・リンク名では大/小文字は区別されませんが、大文字として保存されます。このような名前を引用識別子として指定する場合、引用符は特に警告もなく無視されます。ユーザー名とパスワードのネーミング規則の詳細は、「CREATE USER」を参照してください。

注意:
データベース・オブジェクト名には引用識別子を使用しないことをお薦めします。SQL*Plusではこのような引用識別子は許可されていますが、データベース・オブジェクトを管理する他のツールでは有効でない場合があります。

特に指定がないかぎり、次の規則は、引用識別子と非引用識別子の両方に適用されます。

1. 名前は、1から30バイトの長さで指定する必要があります。ただし、次の2つは例外です。

- データベースの名前は、8バイトまでに制限されています。

- データベース・リンクの名前は、128バイトまで指定できます。

識別子にピリオドで区切られた複数の部分が含まれる場合、各属性の長さは最大30バイトにできます。セパレータのそれぞれのピリオド、および取り囲んでいる二重引用符は1バイトとしてカウントされます。たとえば、次のように列を識別するとします。

"schema"."table"."column"

スキーマ名、表名、列名の長さはそれぞれ30バイトです。各引用符やピリオドはシングルバイト文字のため、この例での識別子の総バイト長は、最大98バイトになります。

2. 非引用識別子にOracle SQLの予約語は使用できません。引用識別子には、予約語を使用できますが、お薦めしません。
名前は、データベース・オブジェクトにアクセスするために使用するOracle製品固有のその他の予約語によって、さらに制限されることもあります。

注意:
予約語ROWIDは、この規則の例外です。大文字のROWIDは、引用符の有無にかかわらず、列名としては使用できません。ただし、大文字の単語は列名以外の引用識別子として使用でき、小文字が含まれる単語(たとえば"Rowid"や"rowid")は、列名をはじめとする任意の引用識別子として使用できます。

関連項目:

- Oracle SQLの予約語のすべてのリストは、「Oracle SQLの予約語」を参照してください。

- 製品の予約語のリストについては、『Oracle Database PL/SQL言語リファレンス』などの各製品のマニュアルを参照してください。

3. OracleのSQL言語には、特別な意味を持つ文字が含まれています。これらの文字には、データ型、スキーマ名、ファンクション名、ダミーのシステム表DUALおよびキーワード(DIMENSION、SEGMENT、ALLOCATE、DISABLEなど、SQL文中の大文字の単語)が含まれます。これらの文字は予約語ではありません。ただし、Oracleは固有の方法でこれらの文字を内部的に使用します。したがって、これらの文字をオブジェクトおよびオブジェクトの部分の名前として使用した場合、使用しているSQL文が読みにくくなり、予期しない結果になることがあります。

特に、SYS_またはORA_で始まる文字をスキーマ・オブジェクト名として使用しないでください。また、SQL組込みファンクションの名前を、スキーマ・オブジェクトまたはユーザー定義ファンクションの名前として使用しないでください。

関連項目:

- キーワードのリストを取得する方法は、「Oracle SQLキーワード」を参照してください。

- 「データ型」、「SQLファンクション」および「DUAL表からの選択」を参照してください。

4. 異なるプラットフォームおよびオペレーティング・システム間では、ASCIIレパートリからの文字を使用することで最適な互換性を得ることができます。データベース名、グローバル・データベース名、データベース・リンク名には、これらの文字を使用してください。マルチテナント・コンテナ・データベース(CDB)内の共通ユーザーと共通ロールの名前には、ASCIIレパートリにある文字のみを使用してください。

5. パスワードにマルチバイト文字を含めることができます。

6. 非引用識別子は、データベース・キャラクタ・セットのアルファベット文字で開始する必要があります。引用識別子の開始文字には、任意の文字を使用できます。

7. 非引用識別子には、データベース・キャラクタ・セットの英数字、アンダースコア(_)、ドル記号($)およびシャープ記号(#)のみ含めることができます。データベース・リンクの名前には、ピリオド(.)とアットマーク(@)を含めることもできます。
引用識別子には、すべての文字、句読点および空白を使用できます。ただし、引用識別子と非引用識別子のいずれにも、二重引用符またはNULL文字(たとえば\0)は使用できません。

8. ネームスペース内では、2つのオブジェクトに同じ名前を付けることはできません。

次のスキーマ・オブジェクトは、1つのネームスペースを共有します。

- パッケージ

- プライベート・シノニム

- 順序

- スタンドアロン・プロシージャ

- スタンドアロン・ストアド・ファンクション

- 表

- ユーザー定義演算子

- ユーザー定義型

- ビュー

次の各スキーマ・オブジェクトは、固有のネームスペースを持ちます。

- クラスタ

- 制約

- データベース・トリガー

- ディメンション

- 索引

- マテリアライズド・ビュー(マテリアライズド・ビューを作成すると、データベースで同じ名前の内部表が作成されます。この表は、スキーマ内の他の表と同じネームスペースを持ちます。このため、スキーマに同じ名前の表とマテリアライズド・ビューを含めることはできません。)

- プライベート・データベース・リンク

表および順序が同じネームスペースにあるため、同じスキーマの表および順序が同じ名前を持つことはできません。ただし、表と索引は異なるネームスペースに存在します。このため、同じスキーマ内の表と索引には、同じ名前を付けることができます。

データベース内の各スキーマには、その中のオブジェクトのために固有のネームスペースがあります。たとえば、異なるスキーマ内の2つの表は異なるネームスペースに存在し、同じ名前を付けることができます。

次の各非スキーマ・オブジェクトは、固有のネームスペースを持ちます。

- エディション

- パラメータ・ファイル(PFILE)およびサーバー・パラメータ・ファイル(SPFILE)

- プロファイル

- パブリック・データベース・リンク

- パブリック・シノニム

- 表領域

- ユーザー・ロール

これらのネームスペース内のオブジェクトはスキーマに含まれないため、これらのネームスペースはデータベース全体で使用されます。

9. 引用符のない識別子は、大/小文字が区別されません。引用符のない識別子は大文字として解析されます。引用識別子では、大文字と小文字が区別されます。

名前を二重引用符で囲むことによって、同じネームスペース内の異なるオブジェクトに対して次の名前を指定できます。

"employees"
"Employees"
"EMPLOYEES"

ただし、Oracleは次の名前を同じ名前として解析するため、同じネームスペース内の異なるオブジェクトには、次の名前を使用できません。

employees
EMPLOYEES
"EMPLOYEES"

10. Oracleが識別子を大文字で格納または比較する場合、識別子の各文字の大文字形式は、データベース・キャラクタ・セットの大文字化規則を適用することによって決定されます。セッション設定NLS_SORTによって決定される言語固有の規則は考慮されません。この動作は、ファンクションNLS_UPPERではなく、SQLファンクションUPPERを識別子に適用することに対応しています。
データベース・キャラクタ・セットの大文字化規則によって、特定の自然言語としては不適切な結果となる場合があります。たとえば、データベース・キャラクタ・セットの大文字化規則に従うと、ドイツ語で使用される小文字のシャープs("ß")に大文字形式はありません。この文字は、識別子が大文字に変換されても変更されませんが、期待されるドイツ語での大文字形式は、2つの大文字のSの連続("SS")です。同様に、小文字iの大文字形式は、データベース・キャラクタ・セットの大文字化規則に従うと大文字Iです。ただし、トルコ語およびアゼルバイジャン語で予期される大文字形式は、上に点が付いた大文字Iです。

データベース・キャラクタ・セットの大文字化規則では、識別子はセッションのすべての言語構成で同様に解釈されます。識別子が特定の自然言語で正しく表示されるようにする場合は、引用符で囲んで小文字形式を保持するか、またはその識別子を使用するときは常に言語的に正しい大文字形式を使用することができます。

11. 同じ表やビューでは、複数の列に同じ名前を付けることはできません。ただし、異なる表やビューでは、複数の列に同じ名前を付けることができます。

12. 引数の数およびデータ型が異なる場合、同じパッケージに含まれるプロシージャやファンクションに同じ名前を付けることができます。異なる引数を持ち、同じ名前のプロシージャやファンクションを同じパッケージ内に複数作成することを、オーバーロードといいます。

スキーマ・オブジェクトのネーミング例

次に、有効なスキーマ・オブジェクト名の例を示します。

last_name
horse
hr.hire_date
"EVEN THIS & THAT!"
a_very_long_and_valid_name

これらのすべての例は、「データベース・オブジェクトのネーミング規則」に示す規則に従っています。次の例は、30文字を超えているため、無効となります。

a_very_very_long_and_not_valid_name

列別名、表別名、ユーザー名およびパスワードは、オブジェクトまたはオブジェクトの部分ではありませんが、特に指定がないかぎり、同様にこれらのネーミング規則に従う必要があります。

スキーマ・オブジェクトのネーミングのガイドライン

オブジェクトとその部分に名前を付ける場合に有効なガイドラインを次に示します。

- わかりやすい名前(またはよく知られている省略形)を使用します。

- 一貫したネーミング規則を使用します。

- 複数の表にまたがる同一のエンティティや属性を記述するためには、同一の名前を使用します。

オブジェクトに名前を付けるときは、名前を短く、使いやすくするという目標と、できるだけわかりやすい名前にするという目標のバランスをとる必要があります。迷ったときは、よりわかりやすい名前を選んでください(データベース内のオブジェクトは、長年の間に多数の人に使用される可能性があるため)。表の列に、payment_due_dateではなくpmddのような名前を付けると、10年後のデータベース管理者が見たときに理解できない可能性があります。

一貫したネーミング規則を使用すると、アプリケーション上の各表の働きが理解しやすくなります。そのような規則の例として、FINANCEアプリケーションに属している表の名前をすべてfin_で始めるような場合が考えられます。

同一のエンティティや属性に対しては、複数の表にまたがっていても同じ名前を使用してください。たとえば、employeesサンプル表とdepartmentsサンプル表の部門番号列には、どちらにもdepartment_idという名前を付けます。

スキーマ・オブジェクトの構文およびSQL文の構成要素

SQL文のコンテキストでスキーマ・オブジェクトとそれらの部分を参照する方法について説明します。次の項目について説明します。

- オブジェクトを参照するための一般的な構文

- Oracleがオブジェクトへの参照を変換する方法

- 自分のスキーマ以外のスキーマ内のオブジェクトを参照する方法

- リモート・データベース内のオブジェクトを参照する方法

- 表と索引のパーティションおよびサブパーティションを参照する方法

次に、オブジェクトやそれらの部分を参照するための一般的な構文を示します。

database_object_or_part::=

(dblink::=を参照)

それぞれの意味は、次のとおりです。

- objectは、オブジェクトの名前です。

- schemaは、オブジェクトを含むスキーマです。この修飾子を指定することによって、自分のスキーマ以外のスキーマ内のオブジェクトを参照できます。その場合には、自分のスキーマ以外のスキーマ内のオブジェクトを参照するための権限が必要です。この修飾子を指定しないと、自分自身のスキーマ内のオブジェクトを参照するものとみなされます。
スキーマ・オブジェクトのみがschemaで修飾できます。スキーマ・オブジェクトについては、規則8を参照してください。規則8に示す非スキーマ・オブジェクトはスキーマ・オブジェクトではないため、schemaでは修飾できません。ただし、パブリック・シノニムは例外で、「PUBLIC」で修飾できます。この場合、引用符が必要です。

- partは、オブジェクトの部分です。この識別子によって、スキーマ・オブジェクトの部分(たとえば、表の列またはパーティション)を参照できます。なお、すべてのタイプのオブジェクトが部分を持っているとはかぎりません。

- dblinkは、Oracle Databaseの分散オプションを使用している場合にのみ適用されます。オブジェクトを含むデータベースの名前です。この修飾子dblinkを指定することによって、ローカル・データベース以外のデータベース内のオブジェクトを参照できます。このdblinkを指定しないと、自分自身のローカル・データベース内のオブジェクトを参照するものとみなされます。なお、すべてのSQL文でリモート・データベースのオブジェクトにアクセスできるとはかぎりません。

オブジェクトを参照する際のコンポーネントを区切っているピリオドの前後には、空白を入れることができます。ただし、通常は入れません。

Oracle Databaseによるスキーマ・オブジェクト参照の変換方法

SQL文内のオブジェクトが参照される場合、OracleはそのSQL文のコンテキストを検討して、該当するネームスペース内でそのオブジェクトの位置を確認します。そのオブジェクトの位置を確認してから、そのオブジェクトに対して文が指定する操作を実行します。指定した名前のオブジェクトが適切なネームスペース内に存在しない場合、Oracleはエラーを戻します。

次の例で、OracleがSQL文内のオブジェクト参照を変換する方法について説明します。名前departmentsで識別される表にデータ行を追加する次の文を考えます。

INSERT INTO departments
VALUES (280, 'ENTERTAINMENT_CLERK', 206, 1700);

文のコンテキストに基づいて、Oracleは、departmentsが次のようなオブジェクトであると判断します。

- 自分のスキーマ内の表

- 自分のスキーマ内のビュー

- 表またはビューに対するプライベート・シノニム

- パブリック・シノニム

Oracleは、文を発行したユーザーのスキーマ外のネームスペースを考慮する前に、そのユーザーのスキーマ内のネームスペースからオブジェクト参照を変換しようとします。この例では、Oracleは次の方法で名前departmentsを変換しようとします。

1. Oracleは、最初に、表、ビューおよびプライベート・シノニムを含む文を発行したユーザーのスキーマ内のネームスペースで、オブジェクトの位置を確認しようとします。そのオブジェクトがプライベート・シノニムである場合は、Oracleはそのシノニムが表すオブジェクトの位置を確認します。このオブジェクトは、ユーザーのスキーマに存在することもあれば、別のスキーマまたは別のデータベースに存在することもあります。このオブジェクトが別のシノニムである場合もあります。その場合、Oracleはそのシノニムが表すオブジェクトの位置を確認します。

2. オブジェクトがネームスペース内に存在する場合、Oracleはそのオブジェクトに対して文を実行しようとします。この例では、Oracleはデータ行をdepartmentsに追加しようとします。オブジェクトがその処理にとって正しい型でない場合、Oracleはエラーを戻します。この場合、departmentsは、表またはビュー、あるいは表またはビューとなるプライベート・シノニムである必要があります。departmentsが順序である場合、Oracleはエラーを戻します。

3. 前述の処理で検索されたネームスペースにオブジェクトが存在しない場合、Oracleはパブリック・シノニムを含むネームスペースを検索します。オブジェクトがそのネームスペースに存在する場合、Oracleはそのオブジェクトに対して文を実行しようとします。オブジェクトがその処理にとって正しい型でない場合、Oracleはエラーを戻します。この例では、departmentsが順序のパブリック・シノニムである場合、Oracleはエラーを戻します。

パブリック・シノニムに、依存表またはユーザー定義型がある場合は、依存オブジェクトと同じスキーマに、シノニムと同じ名前でオブジェクトを作成することはできません。

シノニムに、依存表またはユーザー定義型がない場合は、依存オブジェクトと同じスキーマに、依存オブジェクトと同じ名前で、オブジェクトを作成できます。すべての依存オブジェクトが無効になり、次のアクセス時に妥当性チェックが再実行されます。

関連項目:
PL/SQLの識別子名の解決については、『Oracle Database PL/SQL言語リファレンス』を参照してください。

他のスキーマ内のオブジェクトの参照

自分が所有するスキーマ以外のスキーマ内のオブジェクトを参照するには、次のように、オブジェクト名の前にスキーマ名を付けます。

schema.object

たとえば、次の文は、サンプル・スキーマhr内のemployees表を削除します。

DROP TABLE hr.employees;

リモート・データベース内のオブジェクトの参照

ローカル・データベース以外のデータベース内のオブジェクトを参照するには、オブジェクト名の後に、そのデータベースへのデータベース・リンクの名前を続けます。データベース・リンクはスキーマ・オブジェクトであり、これによってOracleがリモート・データベースに接続され、そこにあるオブジェクトにアクセスします。この項では、次の項目について説明します。

- データベース・リンクを作成する方法

- SQL文でデータベース・リンクを使用する方法

データベース・リンクの作成

「CREATE DATABASE LINK」を使用して、データベース・リンクを作成します。この文では、データベース・リンクに関する次の情報を指定できます。

- データベース・リンク名

- リモート・データベースにアクセスするためのデータベース接続文字列

- リモート・データベースに接続するためのユーザー名およびパスワード

これらの情報はデータ・ディクショナリに格納されます。

データベース・リンク名

データベース・リンクを作成するとき、データベース・リンク名を指定する必要があります。データベース・リンク名は、他のオブジェクト型の名前とは異なります。データベース・リンク名は128バイト以内の長さで指定し、ピリオド(.)とアットマーク(@)を使用できます。

データベース・リンクに付ける名前は、データベース・リンクが参照するデータベースの名前、およびデータベース名の階層内のそのデータベースの位置に一致している必要があります。次に、データベース・リンク名の書式を示します。

dblink::=

それぞれの意味は、次のとおりです。

- databaseには、データベース・リンクの接続先であるリモート・データベースのグローバル名のうち、nameの部分を指定します。このグローバル名は、リモート・データベースのデータ・ディクショナリに格納されます。この名前は、GLOBAL_NAMEデータ・ディクショナリ・ビューで確認できます。

- domainには、データベース・リンクの接続先であるリモート・データベースのグローバル名のうち、domainの部分を指定します。データベース・リンクの名前にdomainを指定しないと、Oracleは、現在、データ・ディクショナリに存在しているローカル・データベースのドメインに、データベース・リンク名を付加します。

- connection_qualifierによって、データベース・リンクをさらに修飾できます。接続修飾子を使用する場合、同じデータベースに複数のデータベース・リンクを作成できます。たとえば、接続修飾子を使用して、同じデータベースにアクセスするOracle Real Application Clustersの異なるインスタンスに、複数のデータベース・リンクを作成できます。

関連項目:
接続修飾子の詳細は、『Oracle Database管理者ガイド』および『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

database.domainの組合せは、サービス名と呼ばれることもあります。

関連項目:
『Oracle Database Net Services管理者ガイド』

ユーザー名およびパスワード

リモート・データベースに接続するために、ユーザー名およびパスワードを使用します。データベース・リンクでは、ユーザー名およびパスワードはオプションです。

データベース接続文字列

データベース接続文字列は、Oracle Netがリモート・データベースにアクセスするために使用する仕様です。データベース接続文字列の記述方法については、使用しているネットワーク・プロトコル用のOracle Netのドキュメントを参照してください。データベース・リンクのデータベース接続文字列はオプションです。

データベース・リンクの参照

データベース・リンクは、分散オプションを指定してOracleを使用している場合にのみ利用できます。データベース・リンクを含むSQL文の発行時に、次のいずれかの方法でデータベース・リンク名を指定します。

- データ・ディクショナリ内に格納される、database、domain、およびオプションのconnection_qualifierコンポーネントを含む完全なデータベース・リンク名を指定します。

- databaseとオプションのconnection_qualifierが含まれ、domainは含まれない、部分的データベース・リンク名を指定します。

Oracleは、リモート・データベースに接続する前に次のタスクを実行します。

1. 文中に指定されているデータベース・リンク名が部分指定の場合、Oracleは、データ・ディクショナリ内に格納されているグローバル・データベース名に見られるとおり、そのリンク名にローカル・データベースのドメイン名を付加します。現在のグローバル・データベース名は、GLOBAL_NAMEデータ・ディクショナリ・ビューで見ることができます。

2. Oracleは、最初に、文を発行したユーザーのスキーマ内で、文の中のデータベース・リンクと同じ名前を持つプライベート・データベース・リンクを検索します。必要に応じて、同じ名前を持つパブリック・データベース・リンクを検索します。

- Oracleは、必ず最初に一致したデータベース・リンク(プライベートまたはパブリック)のユーザー名およびパスワードを採用します。最初に一致したデータベース・リンクに対応付けられているユーザー名およびパスワードがあると、Oracleはそれを使用します。対応付けられているユーザー名およびパスワードがない場合、Oracleは、現在のユーザー名およびパスワードを使用します。

- 最初に一致したデータベース・リンクに対応付けられているデータベース文字列が存在する場合、Oracleは、そのデータベース文字列を使用します。データベース文字列がない場合、Oracleは一致する次の(パブリック)データベース・リンクを検索します。一致するデータベース・リンクが存在しない場合、または一致するリンクに対応付けられているデータベース文字列が存在しない場合、Oracleはエラーを戻します。

3. Oracleは、リモート・データベースにアクセスするためにデータベース文字列を使用します。リモート・データベースにアクセスした後で、GLOBAL_NAMESパラメータの値がtrueの場合は、Oracleは、データベース・リンク名のdatabase.domain部分がリモート・データベースの完全なグローバル名に一致しているかどうかを確認します。この条件が満たされている場合、Oracleは手順2で選択したユーザー名とパスワードを使用して接続を続行します。それ以外の場合、Oracleはエラーを戻します。

4. データベース文字列、ユーザー名およびパスワードを使用した接続が成功した場合、Oracleは、リモート・データベース上の指定されたオブジェクトにアクセスしようとします。このとき、この項の前半で説明した、オブジェクト参照を変換するための規則、および他のスキーマ内のオブジェクトを参照するための規則が使用されます。

リモート・データベースの完全なグローバル名が、データベース・リンクのdatabase.domain部分と一致する必要があるという要件を無効にするには、初期化パラメータGLOBAL_NAMESか、ALTER SYSTEMまたはALTER SESSION文のGLOBAL_NAMESパラメータにFALSEを設定します。

関連項目:
リモート・データベースの名前の変換の詳細は、『Oracle Database管理者ガイド』を参照してください。

パーティション表と索引の参照

表および索引はパーティション化できます。パーティション化されたスキーマ・オブジェクトは、パーティションと呼ばれる多数の部分で構成され、各パーティションのすべての論理属性は同じです。たとえば、表のパーティションはすべて同じ列定義と制約定義を共有し、索引のパーティションはすべて同じ索引列を共有します。

拡張パーティション名および拡張サブパーティション名を使用すると、パーティション・レベルやサブパーティション・レベルの操作(たとえば特定のパーティションまたはサブパーティションのすべての行の削除)を、1つのパーティションまたはサブパーティションのみに対して実行できます。拡張名を使用しないでそのような操作を実行する場合は、述語(WHERE句)の指定が必要になります。レンジ/リスト・パーティション表の場合は、パーティション・レベルの操作を述語で表現しようとすると、非常に複雑になることがあります(特に、レンジ・パーティション・キーで複数の列が使用されているとき)。ハッシュ・パーティション/サブパーティションの場合は、述語を使用するとさらに複雑になります(このようなパーティション/サブパーティションはシステム定義のハッシュ・ファンクションに基づいているため)。

拡張パーティション名を使用すると、パーティションを表と同じように扱うことができます。この方法の利点(レンジ・パーティション表に対して最も有益)は、これらのビューに対する権限を他のユーザーやロールに付与する(または権限を取り消す)ことによってパーティション・レベルのアクセス制御メカニズムを構築できることです。パーティションを表として使用するには、1つのパーティションからデータを選択してビューを作成し、このビューを表として使用します。

構文  構文にpartition_extended_name要素またはsubpartition_extended_name要素が指定されているSQL文には、拡張パーティション表名および拡張サブパーティション表名を指定できます。

partition_extended_name::=

subpartition_extended_name::=

DML文INSERT、UPDATE、DELETE、およびANALYZE文では、パーティション名またはサブパーティション名をカッコで囲む必要があります。細かな違いですが、partition_extension_clauseに影響します。

partition_extension_clause::=

partition_extended_name、subpartition_extended_nameおよびpartition_extension_clauseでは、PARTITION FOR句およびSUBPARTITION FOR句を使用すると、名前がなくてもパーティションを参照できます。これらの句は、すべてのタイプのパーティション化に有効であり、特に時間隔パーティションで役立ちます。データが表に挿入されると、必要に応じて時間隔パーティションが自動的に作成されます。

partition_key_valueおよびsubpartition_key_valueには、パーティション化キー列1つにつき1つの値を指定します。複数列のパーティション化キーの場合は、パーティション化キーごとに1つの値を指定します。コンポジット・パーティションの場合は、パーティション化キーごとに1つの値を指定し、その後にサブパーティション化キーごとに1つの値を指定します。パーティション化キーの値はすべて、カンマで区切ります。時間隔パーティションには、1つのpartition_key_valueのみを指定できます。この値は、有効なNUMBERまたは日時値にする必要があります。指定した値が格納されているパーティションまたはサブパーティションが、SQL文による操作の対象となります。

関連項目:
時間隔パーティションの詳細は、「CREATE TABLE」の「INTERVAL句」を参照してください。

拡張表名の制限事項: 現在、拡張パーティション表名および拡張サブパーティション表名を使用するときには、次の制限があります。

- リモート表は使用できません。拡張パーティション表名または拡張サブパーティション表名には、データベース・リンク(dblink)、またはdblinkを使用して表に変換するシノニムを含めることはできません。リモートのパーティションやサブパーティションを使用するには、リモート・サイトで拡張表名の構文を使用してビューを作成し、そのリモート・ビューを参照します。

- シノニムは使用できません。拡張パーティションまたは拡張サブパーティションは、実表を使用して指定する必要があります。シノニムやビューなど、他のオブジェクトは使用できません。

- PARTITION FOR句およびSUBPARTITION FOR句は、ビューでのDDL操作に対しては無効になります。

- PARTITION FOR句およびSUBPARTITION FOR句では、キーワードDEFAULTまたはMAXVALUE、あるいはpartition_key_valueまたはsubpartition_key_valueのバインド変数を指定できません。

- PARTITIONおよびSUBPARTITION句では、パーティション名またはサブパーティション名にバインド変数を指定できません。

例 次の文のsalesは、パーティションsales_q1_2000を持つパーティション表です。単一パーティションsales_q1_2000のビューを作成でき、それを表のように使用できます。この例では、パーティションから行が削除されます。

CREATE VIEW Q1_2000_sales AS
SELECT *
FROM sales PARTITION (SALES_Q1_2000);

DELETE FROM Q1_2000_sales
WHERE amount_sold < 0;

オブジェクト型の属性とメソッドの参照

SQL文のオブジェクト型の属性とメソッドを参照するには、参照を表の別名で完全に修飾する必要があります。次の例では、cust_address_typ型、およびcust_address_typに基づくcust_address列を持つ表customersを含むサンプル・スキーマoeについて考えます。

CREATE TYPE cust_address_typ
OID '82A4AF6A4CD1656DE034080020E0EE3D'
AS OBJECT
(street_address    VARCHAR2(40),
postal_code       VARCHAR2(10),
city              VARCHAR2(30),
state_province    VARCHAR2(10),
country_id        CHAR(2));
/
CREATE TABLE customers
(customer_id        NUMBER(6),
cust_first_name    VARCHAR2(20) CONSTRAINT cust_fname_nn NOT NULL,
cust_last_name     VARCHAR2(20) CONSTRAINT cust_lname_nn NOT NULL,
cust_address       cust_address_typ,
. . .

次に示すとおり、SQL文では、postal_code属性への参照は表別名を使用して完全に修飾する必要があります。

SELECT c.cust_address.postal_code
FROM customers c;

UPDATE customers c
SET c.cust_address.postal_code = '14621-2604'
WHERE c.cust_address.city = 'Rochester'
AND c.cust_address.state_province = 'NY';

引数を取らないメンバー・メソッドを参照する場合は、空のカッコを付ける必要があります。たとえば、サンプル・スキーマoeには、メンバー・ファンクションgetCatalogNameを含むcatalog_typに基づくオブジェクト表categories_tabが含まれます。SQL文でこのメソッドをコールするには、次の例のように、空のカッコを付ける必要があります。

SELECT TREAT(VALUE(c) AS catalog_typ).getCatalogName() "Catalog Type"
FROM categories_tab c
WHERE category_id = 90;

Catalog Type
------------------------------------
online catalog

3 疑似列

疑似列は表の列のように使用できますが、実際に表に格納されているわけではありません。疑似列から値を選択できますが、疑似列に対して値の挿入、更新、削除はできません。疑似列は、引数を指定しないファンクションとも似ています(詳細は第7章「ファンクション」を参照してください)。ただし、引数を指定しないファンクションは、通常、結果セット内の各行に対して同じ値を戻しますが、疑似列では各行に対して異なる値を戻します。

この章では、次の内容を説明します。

- 階層問合せ疑似列

- 順序疑似列

- バージョン問合せ疑似列

- COLUMN_VALUE疑似列

- OBJECT_ID疑似列

- OBJECT_VALUE疑似列

- ORA_ROWSCN疑似列

- ROWID疑似列

- ROWNUM疑似列

- XMLDATA疑似列

階層問合せ疑似列

階層問合せ疑似列は、階層問合せでのみ有効です。階層問合せ疑似列には、次のものがあります。

- CONNECT_BY_ISCYCLE疑似列

- CONNECT_BY_ISLEAF疑似列

- LEVEL疑似列

問合せの中で階層型の関連を定義するには、CONNECT BY句を使用する必要があります。

CONNECT_BY_ISCYCLE疑似列

CONNECT_BY_ISCYCLE疑似列は、現在の行に自身の祖先でもある子がある場合に1を戻します。それ以外の場合は、0(ゼロ)を戻します。

CONNECT BY句のNOCYCLEパラメータを指定した場合のみ、CONNECT_BY_ISCYCLEを指定できます。NOCYCLEによって、Oracleは問合せの結果を戻すことができます。このパラメータを指定しないと、データ内のCONNECT BYループのため、問合せは失敗します。

関連項目:
NOCYCLEパラメータの詳細は、「階層問合せ」を参照してください。CONNECT_BY_ISCYCLE疑似列を使用する例については、「階層問合せの例」を参照してください。

CONNECT_BY_ISLEAF疑似列

CONNECT_BY_ISLEAF疑似列は、現在の行がCONNECT BY条件によって定義されるツリーのリーフである場合に1を戻します。それ以外の場合は、0(ゼロ)を戻します。この情報は、特定の行をさらに展開して階層の詳細を表示できるかどうかを示します。

CONNECT_BY_ISLEAFの例 次の例は、hr.employees表の最初の3レベルです。各行がリーフ行か(IsLeaf列が1)、子である行を持つか(IsLeaf列が0)を示しています。

SELECT last_name "Employee", CONNECT_BY_ISLEAF "IsLeaf",
LEVEL, SYS_CONNECT_BY_PATH(last_name, '/') "Path"
FROM employees
WHERE LEVEL <= 3 AND department_id = 80
START WITH employee_id = 100
CONNECT BY PRIOR employee_id = manager_id AND LEVEL <= 4
ORDER BY "Employee", "IsLeaf";

Employee                      IsLeaf      LEVEL Path
------------------------- ---------- ---------- -------------------------
Abel                               1          3 /King/Zlotkey/Abel
Ande                               1          3 /King/Errazuriz/Ande
Banda                              1          3 /King/Errazuriz/Banda
Bates                              1          3 /King/Cambrault/Bates
Bernstein                          1          3 /King/Russell/Bernstein
Bloom                              1          3 /King/Cambrault/Bloom
Cambrault                          0          2 /King/Cambrault
Cambrault                          1          3 /King/Russell/Cambrault
Doran                              1          3 /King/Partners/Doran
Errazuriz                          0          2 /King/Errazuriz
Fox                                1          3 /King/Cambrault/Fox
. . .

関連項目:
「階層問合せ」および「SYS_CONNECT_BY_PATH」を参照してください。

LEVEL疑似列

階層問合せによって戻される各行について、LEVEL疑似列は、ルート行に1を戻し、ルートの子には2を戻します(以降同様に続きます)。ルート行は逆ツリー構造の最上位行です。子である行は任意の非ルート行です。親である行は子を持つ任意の行です。リーフ行は子を持たない任意の行です。図3-1に、逆ツリーのノードとそれらのLEVEL値を示します。

図3-1 階層ツリー

関連項目:
階層問合せの概要については、「階層問合せ」を参照してください。LEVEL疑似列の使用に関する制限事項については、「IN条件」を参照してください。

順序疑似列

順序は、一意の連続値を生成できるスキーマ・オブジェクトです。これらの値は、主キーや一意のキーによく使用されます。次の疑似列を使用したSQL文で、順序値を参照できます。

- CURRVAL: 順序の現在の値を戻します。

- NEXTVAL: 順序を増加させて次の値を戻します。

CURRVALとNEXTVALは、順序の名前で修飾する必要があります。

sequence.CURRVAL
sequence.NEXTVAL

別のユーザーのスキーマ内での順序の現在の値または次の値を参照するには、その順序に対するSELECTオブジェクト権限またはSELECT ANY SEQUENCEシステム権限のどちらかが必要です。さらに、その順序は、次に示すとおり、順序を含むスキーマで修飾する必要があります。

schema.sequence.CURRVAL
schema.sequence.NEXTVAL

リモート・データベース上の順序の値を参照するには、次のように、データベース・リンクの完全な名前または部分的な名前で順序を修飾する必要があります。

schema.sequence.CURRVAL@dblink
schema.sequence.NEXTVAL@dblink

順序には、待機またはロックすることなく多数のユーザーが同時にアクセスできます。

関連項目:
データベース・リンクの参照方法の詳細は、「リモート・データベース内のオブジェクトの参照」を参照してください。

順序値の使用場所

次の場所でCURRVALとNEXTVALを使用できます。

- 副問合せ、マテリアライズド・ビューまたはビューに含まれていないSELECT文のSELECT構文のリスト

- INSERT文内の副問合せのSELECT構文のリスト

- INSERT文のVALUES句

- UPDATE文のSET句

順序値の制限事項: 次の構造体では、CURRVALおよびNEXTVALは使用できません。

- DELETE文、SELECT文またはUPDATE文内の副問合せ

- ビューの問合せ、またはマテリアライズド・ビューの問合せ

- DISTINCT演算子を持つSELECT文

- GROUP BY句またはORDER BY句を持つSELECT文

- 集合演算子UNION、INTERSECTまたはMINUSによって別のSELECT文と結合されているSELECT文

- SELECT文のWHERE句

- CHECK制約の条件

CURRVALまたはNEXTVALを使用する単一のSQL文では、参照されたLONG列、更新された表、ロックされた表がすべて同じデータベース上にある必要があります。

順序値の使用方法

順序を作成するときに、初期値と増分値を定義できます。NEXTVALの最初の参照によって、順序の初期値が戻されます。その後の参照によって、定義されたNEXTVAL増分値で順序が増加され、その新しい値が戻されます。CURRVALを参照すると、NEXTVALへの最後の参照で戻された値である、順序の現在の値が常に戻されます。

セッションの順序に対してCURRVALを使用する前に、まずNEXTVALで順序を初期化してください。順序の詳細は、「CREATE SEQUENCE」を参照してください。

NEXTVALへの参照が含まれる単一のSQL文の中では、Oracleは、次の各行につき1回順序を増加させます。

- SELECT文の外部問合せブロックによって戻される行。このような問合せブロックは、次の場所に指定できます。

- トップレベルのSELECT文

- INSERT ... SELECT文(単一表または複数表)。マルチテーブル・インサートの場合、NEXTVALへの参照がVALUES句内に存在する必要があり、マルチテーブル・インサートの複数のブランチでNEXTVALが参照される場合でも、副問合せによって戻される行ごとに、順序が1回更新されます。

- CREATE TABLE ... AS SELECT文

- CREATE MATERIALIZED VIEW ... AS SELECT文

- UPDATE文で更新される行

- VALUES句が含まれるINSERT文

- INSERT ... [ALL | FIRST]文(マルチテーブル・インサート)。マルチテーブル・インサートは、単一のSQL文とみなされます。このため、順序のNEXTVALへの参照では、文のSELECT部分からの各入力レコードに対して順序が1回のみ増加されます。INSERT ... [ALL | FIRST ]文のいずれかの部分でNEXTVALが複数回指定されている場合は、指定されたレコードが挿入される回数に関係なく、値はすべての挿入ブランチに対して同じになります。

- MERGE文でマージされる行。NEXTVALへの参照は、merge_insert_clauseまたはmerge_update_clauseあるいはその両方に指定できます。NEXTVALUE値は、更新操作または挿入操作に順序番号が使用されない場合でも、行が更新されるか挿入されるたびに増加されます。NEXTVALがこれらの場所のいずれかで複数回指定されている場合、順序は各行に対して1回増加され、その行のNEXTVALが検出されるたびにすべて同じ値を戻します。

- マルチテーブルINSERT ALL文の入力行。NEXTVALは、各行に対するinsert_into_clauseマップの回数に関係なく、副問合せによって戻される各行に対して1回のみ増加されます。

これらの場所のいずれかが、NEXTVALを複数回参照している場合、Oracleは1回のみ順序を増加させ、NEXTVALが検出されるたびにすべて同じ値を戻します。

これらの場所のいずれかが、CURRVALとNEXTVALの両方を参照している場合、OracleはCURRVALとNEXTVALの両方について順序を増加させ同じ値を戻します。

順序の次の値の検索例 次の例では、サンプル・スキーマhrの従業員順序の次の値を検索します。

SELECT employees_seq.nextval
FROM DUAL;

表への順序値の挿入例 次の例では、従業員順序を増加させ、サンプル表hr.employeesに挿入される新しい従業員のためにその値を使用します。

INSERT INTO employees
VALUES (employees_seq.nextval, 'John', 'Doe', 'jdoe', '555-1212',
TO_DATE(SYSDATE), 'PU_CLERK', 2500, null, null, 30);

順序の現在の値の再利用例 次の例では、次の注文番号を使用して新しい注文をマスター注文表に追加します。その後、この番号を使用して関連する注文をディテール注文表に追加します。

INSERT INTO orders (order_id, order_date, customer_id)
VALUES (orders_seq.nextval, TO_DATE(SYSDATE), 106);

INSERT INTO order_items (order_id, line_item_id, product_id)
VALUES (orders_seq.currval, 1, 2359);

INSERT INTO order_items (order_id, line_item_id, product_id)
VALUES (orders_seq.currval, 2, 3290);

INSERT INTO order_items (order_id, line_item_id, product_id)
VALUES (orders_seq.currval, 3, 2381);

バージョン問合せ疑似列

バージョン問合せ疑似列は、Oracleフラッシュバック問合せの一形態であるOracle Flashback Version Queryでのみ有効です。バージョン問合せ疑似列には、次のものがあります。

- VERSIONS_STARTSCNおよびVERSIONS_STARTTIME: 行バージョンが作成されたときの最初のシステム変更番号(SCN)またはTIMESTAMP。この疑似列は、データが行バージョンに反映された値を最初に持った時間を識別します。この疑似列を使用して、Oracle Flashback TableまたはOracleフラッシュバック問合せで対象となる過去の時間を識別できます。この疑似列がNULLの場合、行バージョンは開始前に作成されました。

- VERSIONS_ENDSCNおよびVERSIONS_ENDTIME: 行バージョンの期限が切れたときのSCNまたはTIMESTAMP。疑似列がNULLの場合、行バージョンが問合せの時点で現行のものであったか、行がDELETE操作に対応しているかのいずれかです。

- VERSIONS_XID: 行バージョンが作成されたトランザクションのID(RAW番号)。

- VERSIONS_OPERATION: トランザクションで実行された操作。挿入の場合はI、削除の場合はD、更新の場合はUです。バージョンは、挿入、削除または更新された行のバージョンです。つまり、INSERT操作後の行、DELETE操作前の行、またはUPDATE操作の影響を受ける行です。
索引キーのユーザー更新の場合、Oracle Flashback Version Queryでは、1回のUPDATE操作がDELETEおよびINSERTの2つの操作として処理される場合があります。これは、Dの後にIのVERSIONS_OPERATIONを持つ2つのバージョンの行として表されます。

関連項目:

- バージョン問合せの詳細は、「flashback_query_clause」を参照してください。

- Oracle Flashback Version Queryの詳細な使用方法については、『Oracle Database開発ガイド』を参照してください。

COLUMN_VALUE疑似列

COLUMNS句を指定せずにXMLTable構造体を参照する場合、またはTABLEコレクション式を使用して表の型をネストしたスカラーを参照する場合、データベースは単一列を持つ仮想表を戻します。この疑似列の名前は、COLUMN_VALUEです。

XMLTableのコンテキストでは、戻り値のデータ型はXMLTypeです。たとえば、次の2つの文は同等で、どちらの出力も戻される列の名前としてCOLUMN_VALUEを示します。

SELECT *
FROM XMLTABLE('<a>123</a>');

COLUMN_VALUE
---------------------------------------
<a>123</a>

SELECT COLUMN_VALUE
FROM (XMLTable('<a>123</a>'));

COLUMN_VALUE
----------------------------------------
<a>123</a>

TABLEコレクション式のコンテキストでは、戻り値はコレクション要素のデータ型になります。次の文では、2つのレベルにネストした表を作成します。このコンテキストでのCOLUMN_VALUEの使用方法は、「表の作成: マルチレベル・コレクションの例」を参照してください。

CREATE TYPE phone AS TABLE OF NUMBER;
/
CREATE TYPE phone_list AS TABLE OF phone;
/

次の文ではCOLUMN_VALUEを使用してphone型から選択します。

SELECT t.COLUMN_VALUE
FROM TABLE(phone(1,2,3)) t;

COLUMN_VALUE
------------
1
2
3

ネストした型では、SELECT構文のリストとTABLEコレクション式の両方でCOLUMN_VALUE疑似列を使用できます。

SELECT t.COLUMN_VALUE
FROM TABLE(phone_list(phone(1,2,3))) p, TABLE(p.COLUMN_VALUE) t;

COLUMN_VALUE
------------
1
2
3

次の例に示すように、キーワードCOLUMN_VALUEは、列または属性名を持たない内部のネストした表のスカラー値に対してOracle Databaseが生成する名前です。このコンテキストでは、COLUMN_VALUEは疑似列ではなく、実際の列の名前です。

CREATE TABLE my_customers (
cust_id       NUMBER,
name          VARCHAR2(25),
phone_numbers phone_list,
credit_limit  NUMBER)
NESTED TABLE phone_numbers STORE AS outer_ntab
(NESTED TABLE COLUMN_VALUE STORE AS inner_ntab);

関連項目:

- このファンクションの詳細は、「XMLTABLE」を参照してください。

- TABLEコレクション式の詳細は、table_collection_expression ::=を参照してください。

- ALTER TABLEの例は、「ネストした表の例:」を参照してください。

OBJECT_ID疑似列

OBJECT_ID疑似列は、オブジェクト表またはビューの列のオブジェクト識別子を戻します。Oracleはこの疑似列をオブジェクト表の主キーとして使用します。OBJECT_IDは、ビューのINSTEAD OFトリガーや、オブジェクト表の置換可能行のIDの識別に便利です。

注意:
以前のリリースでは、この疑似列はSYS_NC_OID$と呼ばれていました。下位互換性を保つため、この名称は引き続きサポートされます。ただし、より直感的な名前であるOBJECT_IDを使用することをお薦めします。

関連項目:
この疑似列の使用例については、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。

OBJECT_VALUE疑似列

OBJECT_VALUE疑似列は、オブジェクト表、XMLType表、オブジェクト・ビューまたはXMLTypeビューの列のシステム生成名を戻します。この疑似列は、オブジェクト表の置換可能行の値の識別や、WITH OBJECT IDENTIFIER句を使用したオブジェクト・ビューの作成に便利です。

注意:
以前のリリースでは、この疑似列はSYS_NC_ROWINFO$と呼ばれていました。下位互換性を保つため、この名称は引き続きサポートされます。ただし、より直感的な名前であるOBJECT_VALUEを使用することをお薦めします。

関連項目:

- この疑似列の使用方法の詳細は、「object_table」および「object_view_clause」を参照してください。

- この疑似列の使用例については、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。

ORA_ROWSCN疑似列

ORA_ROWSCNは、行へ最も新しい変更のシステム変更番号(SCN)を表します。この変更には、ブロック・レベル(粗密)で行われるものと、行レベル(ファイングレイン)で行われるものがあります。後者は行レベル依存の追跡によって行われます。行レベル依存の追跡の詳細は、「CREATE TABLE」の「NOROWDEPENDENCIES | ROWDEPENDENCIES」を参照してください。行レベル依存がない場合、ORA_ROWSCNにはブロック・レベルの依存が反映されます。

ブロック・レベルの場合も行レベルの場合も、ORA_ROWSCNはSCNそのものであると考えないでください。たとえば、トランザクションによってあるブロック内のRという行が変更され、SCN 10でコミットされた場合、その行のORA_ROWSCNが常に10を返すとはかぎりません。10未満の値が返されることはありませんが、10以上のあらゆる値が返される可能性があります。つまり、行のORA_ROWSCNは、必ずその行を最後に変更したトランザクションのコミットSCNであるという保証はありません。しかし、ファイングレインORA_ROWSCNで、2つのトランザクションT1とT2によって同じ行Rが順番に変更され、コミットされた場合、T1のコミット後に行RのORA_ROWSCNに関する問合せで返される値と、T2のコミット後に返されるこの値では、T1のコミット後に返される値の方が小さくなります。同じブロックに関する問合せが2回行われた場合、最初の問合せと2番目の問合せの間にその行が更新されていなくても、ORA_ROWSCNの値は問合せ間で変わる可能性があります。唯一確実なことは、両方の問合せ内のORA_ROWSCNの値は、その行を最後に変更したトランザクションのコミットSCNよりも大きくなるということです。

ORA_ROWSCN疑似列はビューへの問合せでは使用できません。ただし、この疑似列を使用して、ビューの作成時に基礎となる表を参照することは可能です。また、UPDATE文またはDELETE文のWHERE句でこの疑似列を使用することもできます。

ORA_ROWSCNはFlashback Queryではサポートされていません。かわりに、Flashback Queryのために明示的に提供されているバージョン問合せの疑似列を使用します。フラッシュバック問合せの詳細は、「SELECT」の「flashback_query_clause」を参照してください。バージョン問合せ疑似列の詳細は、「バージョン問合せ疑似列」を参照してください。

ORA_ROWSCNの制限事項: この疑似列は、外部表ではサポートされません。

例 次の最初の文では、ORA_ROWSCN疑似列を使用して、employees表に対する最後の操作のシステム変更番号を取得します。2番目の文では、この疑似列をSCN_TO_TIMESTAMPファンクションとともに使用して、操作のタイムスタンプを判別します。

SELECT ORA_ROWSCN, last_name
FROM employees
WHERE employee_id = 188;

SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN), last_name
FROM employees
WHERE employee_id = 188;

関連項目:
「SCN_TO_TIMESTAMP」

ROWID疑似列

ROWID疑似列は、データベース内の各行について、行のアドレスを戻します。Oracle DatabaseのROWID値には、行を検索するために必要な次の情報が含まれています。

- オブジェクトのデータ・オブジェクト番号。

- 行が存在するデータファイルのデータ・ブロック。

- データ・ブロック内での行の位置(最初の行は0)。

- 行が存在するデータファイル(最初のファイルは1)。ファイル番号は表領域に対して相対的です。

ほとんどの場合、ROWID値ではデータベース内の行は一意に識別されます。ただし、同じクラスタに格納されている異なる表の行は、同じROWIDを持つことができます。

ROWID疑似列の値はROWIDまたはUROWIDデータ型を持ちます。詳細は、「ROWIDデータ型」および「UROWIDデータ型」を参照してください。

ROWID値には、次の重要な用途があります。

- 単一の行に最も速くアクセスする方法です。

- 表の行が格納されている様子を示すことができます。

- 表の行に対する一意の識別子です。

表の主キーとしてROWIDを使用しないでください。たとえば、インポート・ユーティリティとエクスポート・ユーティリティで行を削除してから再挿入する場合、ROWIDが変わる場合があります。行を削除した場合、Oracleは、後から新しく挿入される行にそのROWIDを再度割り当てる可能性があります。

問合せのSELECT句とWHERE句でROWID疑似列を使用できますが、これらの疑似列の値が実際にデータベースに格納されるわけではありません。ROWID疑似列の値に対して挿入、更新および削除はできません。

例 次の文は、部門20の従業員のデータを含むすべての行のアドレスを選択します。

SELECT ROWID, last_name
FROM employees
WHERE department_id = 20;

ROWNUM疑似列

注意:

- ROW_NUMBER組込みSQLファンクションは、問合せの結果の順序付けを強力にサポートします。詳細は、「ROW_NUMBER」を参照してください。

- SELECT文のrow_limiting_clauseは、問合せから返される行数を制限するための強力なサポートを提供します。詳細は、「row_limiting_clause」を参照してください。

ROWNUM疑似列は、問合せによって戻される各行について、表や結合処理された行の集合からOracleが行を選択する順序を示す番号を戻します。つまり、選択される最初の行のROWNUMは1、2番目の行のROWNUMは2です(以降同様に続きます)。

次の例のように、ROWNUMを使用して問合せによって戻される行数を制限できます。

SELECT *
FROM employees
WHERE ROWNUM < 11;

同じ問合せでROWNUMにORDER BY句が続く場合、ORDER BY句によって行が再び順序付けられます。結果は、行がアクセスされる方法によって異なります。たとえば、ORDER BY句の指定によってOracleが索引を使用してデータにアクセスする場合、索引なしの場合とは異なる順序で行が取り出されることがあります。このため、次の文では、前述の例と同じ行が戻されるとはかぎりません。

SELECT *
FROM employees
WHERE ROWNUM < 11
ORDER BY last_name;

ORDER BY句を副問合せに埋め込んでROWNUM条件をトップレベル問合せに置いた場合、行の順序付けの後でROWNUM条件を強制的に適用させることができます。たとえば、次の問合せは、小さい順に10個の従業員番号を持つ従業員を戻します。これは、上位N番のレポートと呼ばれることがあります。

SELECT *
FROM (SELECT * FROM employees ORDER BY employee_id)
WHERE ROWNUM < 11;

前述の例では、ROWNUM値はトップレベルのSELECT文の値です。これらの値は、副問合せ内のemployee_idによって行が順序付けられた後で生成されます。

比較条件「ROWNUM値＞正の整数」は、常に偽となるため注意してください。たとえば、次の問合せでは行は戻されません。

SELECT *
FROM employees
WHERE ROWNUM > 1;

最初にフェッチされる行のROWNUMには1が割り当てられるため、条件は偽と判断されます。2番目にフェッチされる予定だった行は最初の行になるため、このROWNUMにも1が割り当てられ、条件も偽と判断されます。このように、後続するすべての行が条件を満たさないため、行は戻されません。

また、次の例のように、ROWNUMを使用して表の各行に一意の値を割り当てることもできます。

UPDATE my_table
SET column1 = ROWNUM;

行に一意の番号を割り当てる別の方法については、「ROW_NUMBER」を参照してください。

注意:
問合せでROWNUMを使用した場合、ビューの最適化に影響することがあります。

XMLDATA疑似列

Oracleは、XMLスキーマ情報およびSTORAGE句の指定方法に基づいて、XMLTypeデータをLOBまたはオブジェクト・リレーショナル列に格納します。XMLDATA疑似列を使用すると、基礎となるLOBまたはオブジェクト・リレーショナル列にアクセスし、追加のSTORAGE句のパラメータ、制約、索引などを指定できます。

例 次の文は、この疑似列の使用方法を示しています。たとえば、CLOB列を1つ含む単純なXMLTypeの表を作成するとします。

CREATE TABLE xml_lob_tab of XMLTYPE
XMLTYPE STORE AS CLOB;

基礎となるLOB列の記憶特性を変更する場合は、次の文を使用できます。

ALTER TABLE xml_lob_tab
MODIFY LOB (XMLDATA) (STORAGE (MAXSIZE 2G) CACHE);

「SQL文でのXMLの使用方法」で作成したxwarehouses表のようなXMLスキーマベースの表を作成したとします。その後、次の文に示すように、XMLDATA列を使用して、基礎となる列のプロパティを設定できます。

ALTER TABLE xwarehouses
ADD (UNIQUE(XMLDATA."WarehouseId"));

4 演算子

演算子は、データ項目を操作し、結果を戻すために使用します。構文では、演算子はオペランドの前後または2つのオペランドの間で使用します。

この章では、次の内容を説明します。

- SQL演算子

- 算術演算子

- 連結演算子

- 階層問合せ演算子

- 集合演算子

- MULTISET演算子

- ユーザー定義演算子

この章では、非論理(非ブール)演算子について説明します。これらの演算子は、問合せまたは副問合せ内でWHEREまたはHAVING句の条件として、単独では使用できません。条件として使用できる論理演算子の詳細は、第6章「条件」を参照してください。

SQL演算子

演算子は、オペランドまたは引数と呼ばれる個々のデータ項目を操作します。演算子は、特殊文字またはキーワードで表します。たとえば、乗算演算子は、アスタリスク(*)で表します。

Oracle Textがインストールされている場合は、Oracle Text問合せで、この製品に含まれるSCORE演算子を使用できます。また、CONTAINS、CATSEARCH、MATCHESなどの組込みText演算子を使用して条件を作成することもできます。Oracle Text要素の詳細は、『Oracle Textリファレンス』を参照してください。

注意:
NLS_COMPとNLS_SORTの設定を組み合せた値によって、文字をソートおよび比較するルールが決まります。ご使用のデータベースのNLS_COMPにLINGUISTICが設定されている場合、この章のエンティティはすべてNLS_SORTパラメータによって指定されるルールに従って解釈されます。NLS_COMPがLINGUISTICに設定されていない場合、ファンクションはNLS_SORTの設定に関係なく解釈されます。NLS_SORTは、明示的に設定できます。明示的に設定されていない場合は、NLS_LANGUAGEから導出されます。これらの設定の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

単項演算子およびバイナリ演算子

一般に、演算子には次の2つのクラスがあります。

- 単項: 単項演算子は、1つのみのオペランドについて操作します。単項演算子の書式は次のとおりです。

operator operand

- バイナリ: バイナリ演算子は、2つのオペランドについて操作します。バイナリ演算子の書式は次のとおりです。

operand1 operator operand2

この他、特別な書式を持ち、3つ以上のオペランドについて操作可能な演算子もあります。演算子のオペランドにNULLが指定された場合、結果は常にNULLになります。この規則に従わない唯一の演算子が連結演算子(||)です。

演算子の優先順位

優先順位とは、同じ式の中の異なる演算子をOracle Databaseが評価する順序を意味します。複数の演算子を含む式を評価するとき、Oracleは優先順位の高い演算子を評価した後で、優先順位の低い演算子を評価します。優先順位の等しい演算子は、式の中で左から右に評価されます。

表4-1に、SQL演算子を優先順位の高い方から順に示します。同じ行にリストされている演算子の優先順位は同じです。

表4-1 SQL演算子の優先順位

演算子

操作

+, -(単項演算子)、PRIOR、CONNECT_BY_ROOT

同一、否定、階層内の位置

*, /

乗算、除算

+, -(バイナリ演算子)、||

加算、減算、連結

SQL条件は、SQL演算子の後で評価されます。

「条件の優先順位」を参照してください。

優先順位の例 次の式では、乗算は加算よりも優先順位が高いため、2と3を掛けた結果に1が加算されます。

1+2*3

式の中でカッコを使用して演算子の優先順位を上書きできます。Oracleは、カッコの内側の式を評価した後で、外側の式を評価します。

SQLでは、集合演算子(UNION、UNION ALL、INTERSECTおよびMINUS)もサポートされます。集合演算子によって結合されるのは、問合せによって戻される行の集まりで、個々のデータ項目ではありません。集合演算子の優先順位はすべて同じです。

関連項目:
階層問合せのみで使用するPRIOR演算子については、「階層問合せ演算子」および「階層問合せ」を参照してください。

算術演算子

1つまたは2つの引数を持つ算術演算子を使用することによって、数値を否定(正負を反転)、加算、減算、乗算および除算できます。これらの演算子の中には、日時および時間隔の演算に使用されるものもあります。演算子の引数は、数値データ型、または数値データ型に暗黙的に変換可能な任意のデータ型に解決される必要があります。

単項算術演算子は、引数の数値データ型と同じデータ型を戻します。バイナリ算術演算子の場合、Oracleは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。表4-2に、算術演算子を示します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。数値の優先順位の詳細は、「数値の優先順位」を参照してください。また、「日時および期間の演算」を参照してください。

表4-2 算術演算子

演算子

用途

例

+ -

式の正負を示す場合、これらは単項演算子です。

SELECT *
FROM order_items
WHERE quantity = -1
ORDER BY order_id,
line_item_id, product_id;

SELECT *
FROM employees
WHERE -salary < 0
ORDER BY employee_id;

+ -

加算、減算を行う場合、これらはバイナリ演算子です。

SELECT hire_date
FROM employees
WHERE SYSDATE - hire_date > 365
ORDER BY hire_date;

* /

乗算、除算を行います。これらはバイナリ演算子です。

UPDATE employees
SET salary = salary * 1.1;

二重否定や負の数の減算を表現する場合に、算術式で、連続した負の符号(--)は使用しないでください。文字--は、SQL文ではコメントの開始を示す場合に使用します。連続した負の符号は、空白またはカッコで区切ってください。SQL文中のコメントの詳細は、「コメント」を参照してください。

連結演算子

連結演算子は、文字列およびCLOBデータを操作する場合に使用します。表4-3に、連結演算子を示します。

表4-3 連結演算子

演算子

用途

例

||

文字列およびCLOBデータを連結します。

SELECT 'Name is ' || last_name
FROM employees
ORDER BY last_name;

2つの文字列を連結した結果は別の文字列になります。両方の文字列がCHARデータ型の場合、結果はCHARデータ型の文字列になり、その最大文字数は2000です。両方の文字列のデータ型がVARCHAR2の場合、その結果のデータ型はVARCHAR2になります。このデータ型は、初期化パラメータがMAX_STRING_SIZE = EXTENDEDの場合は32,767文字に制限され、MAX_STRING_SIZE = STANDARDの場合は4,000文字に制限されます。詳細は、「拡張データ型」を参照してください。どちらかの引数がCLOBデータ型の場合、結果は、一時CLOBになります。データ型が文字列型かCLOB型かにかかわらず、後続空白は連結後も文字列に残ります。

多くのプラットフォームでは、連結演算子は、表4-3に示すとおり2本の実線垂直バーで表されます。ただし、IBM社のプラットフォームの中には、この演算子として破線垂直バーを使用するものもあります。異なるキャラクタ・セットを持つシステム間(たとえばASCIIとEBCDIC間)でSQLスクリプト・ファイルを移動する場合、垂直バーが、移動先のOracle Database環境で必要な垂直バーに変換されない場合があります。オペレーティング・システムまたはネットワーク・ユーティリティによる変換の制御が困難または不可能である場合に備えて、Oracleでは、垂直バー演算子にかわるものとしてCONCAT文字ファンクションが提供されています。異なるキャラクタ・セットを持つ環境間でアプリケーションを移動する場合は、この文字ファンクションを使用することをお薦めします。

Oracleは、長さが0(ゼロ)の文字列をNULLとして処理しますが、長さが0(ゼロ)の文字列を別のオペランドと連結すると、その結果は常にもう一方のオペランドになります。結果がNULLになるのは、2つのNULL文字列を連結したときのみです。ただし、この処理はOracle Databaseの今後のバージョンでも継続されるとはかぎりません。NULLになる可能性がある式を連結する場合は、NVLファンクションを使用して、その式を長さが0(ゼロ)の文字列に明示的に変換してください。

関連項目:

- CHARデータ型とVARCHAR2データ型の違いの詳細は、「文字データ型」を参照してください。

- CONCATファンクションおよびNVLファンクションを参照してください。

- CLOBの詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。

連結の例 次の例では、CHAR列およびVARCHAR2列を持つ表を作成し、後続空白のある値とない値を挿入してから、これらの値を選択し、連結します。なお、CHAR列およびVARCHAR2列では、ともに後続空白が保存されます。

CREATE TABLE tab1 (col1 VARCHAR2(6), col2 CHAR(6),
col3 VARCHAR2(6), col4 CHAR(6));

INSERT INTO tab1 (col1,  col2,     col3,     col4)
VALUES ('abc', 'def   ', 'ghi   ', 'jkl');

SELECT col1 || col2 || col3 || col4 "Concatenation"
FROM tab1;

Concatenation
------------------------
abcdef   ghi   jkl

階層問合せ演算子

PRIORおよびCONNECT_BY_ROOTの2つの演算子は、階層問合せでのみ有効です。

PRIOR

階層問合せでは、CONNECT BY condition内の1つの式をPRIOR演算子で修飾する必要があります。CONNECT BY conditionが複合条件の場合、1つの条件のみにPRIOR演算子が必要です(複数のPRIOR条件を使用することもできます)。PRIORは、階層問合せ内でカレント行の親である行の直後にある式を評価します。

PRIORは、等価演算子を使用して列の値を比較する場合によく使用されます。(PRIORキーワードは演算子のどちら側でもかまいません。)PRIORを指定すると、列の親である行の値が使用されます。等号(=)以外の演算子は、理論上はCONNECT BY句に指定できます。ただし、これらの他の演算子の組合せによっては、作成される条件は無限ループを発生させる場合があります。この場合、実行時にループが検出され、エラーが戻されます。この演算子の詳細および例については、「階層問合せ」を参照してください。

CONNECT_BY_ROOT

CONNECT_BY_ROOTは、階層問合せでのみ有効な単項演算子です。この演算子を使用して列を修飾すると、ルート行のデータを使用して列の値が戻されます。この演算子は、階層問合せのCONNECT BY [PRIOR]条件の機能を拡張します。

CONNECT_BY_ROOTに関する制限事項 この演算子は、START WITH条件またはCONNECT BY条件内で指定できません。

関連項目:
「CONNECT_BY_ROOTの例」

集合演算子

集合演算子は、2つのコンポーネントの問合せ結果を1つの結果にまとめます。集合演算子を含む問合せを複合問合せと呼びます。表4-4に、SQLの集合演算子を示します。これらの演算子の例や制限事項などの詳細は、「UNION [ALL]、INTERSECTおよびMINUS演算子」を参照してください。

表4-4 集合演算子

演算子

戻る結果

UNION

各問合せによって戻るすべての行(重複行は含まない)

UNION ALL

各問合せによって戻るすべての行(重複行を含む)

INTERSECT

両方の問合せによって戻るすべての行(重複行は含まない)

MINUS

最初の問合せによって戻る行で、2番目の問合せでは戻されない行(重複行は含まない)

MULTISET演算子

MULTISET演算子は、2つのネストした表の結果を1つのネストした表にまとめます。

MULTISET演算子に関する例では、次のように2つのネストした表を作成し、データをロードする必要があります。

まず、customers_demoという名前で、oe.customers表のコピーを作成します。

CREATE TABLE customers_demo AS
SELECT * FROM customers;

次に、cust_address_tab_typという表型を作成します。この型はネストした表の列を作成する際に使用します。

CREATE TYPE cust_address_tab_typ AS
TABLE OF cust_address_typ;
/

次に、customers_demo表に、ネストした表の列を2つ作成します。

ALTER TABLE customers_demo
ADD (cust_address_ntab cust_address_tab_typ,
cust_address2_ntab cust_address_tab_typ)
NESTED TABLE cust_address_ntab STORE AS cust_address_ntab_store
NESTED TABLE cust_address2_ntab STORE AS cust_address2_ntab_store;

最後に、oe.customers表のcust_address列のデータを使用して、2つの新しいネストした表の列にデータをロードします。

UPDATE customers_demo cd
SET cust_address_ntab =
CAST(MULTISET(SELECT cust_address
FROM customers c
WHERE c.customer_id =
cd.customer_id) as cust_address_tab_typ);

UPDATE customers_demo cd
SET cust_address2_ntab =
CAST(MULTISET(SELECT cust_address
FROM customers c
WHERE c.customer_id =
cd.customer_id) as cust_address_tab_typ);

MULTISET EXCEPT

MULTISET EXCEPTは、引数として2つのネストした表を取り、1つ目のネストした表に存在し、2つ目のネストした表に存在しない要素を持つネストした表を戻します。入力する2つのネストした表は同じ型である必要があり、戻されるネストした表も同じ型です。

- ALLキーワードは、nested_table2に存在せず、nested_table1に存在するすべての要素を戻します。たとえば、ある特定の要素がnested_table1でm回、nested_table2でn回出現すると想定します。結果には、この要素は、m >nの場合は(m-n)回、m<=nの場合は0(ゼロ)回出現します。ALLはデフォルトです。

- DISTINCTキーワードは、出現回数にかかわらず、nested_table1とnested_table2の両方に存在するすべての要素を排除します。

- ネストした表の要素型は比較可能なものである必要があります。スカラー型以外の型の比較の可能性は、「比較条件」を参照してください。

例

次の例では、2つのネストした表を比較し、1つ目のネストした表に存在し、2つ目のネストした表に存在しない要素を持つネストした表を戻します。

SELECT customer_id, cust_address_ntab
MULTISET EXCEPT DISTINCT cust_address2_ntab multiset_except
FROM customers_demo
ORDER BY customer_id;

CUSTOMER_ID MULTISET_EXCEPT(STREET_ADDRESS, POSTAL_CODE, CITY, STATE_PROVINCE, COUNTRY_ID)
----------- --------------------------------------------------------------------------------
101 CUST_ADDRESS_TAB_TYP()
102 CUST_ADDRESS_TAB_TYP()
103 CUST_ADDRESS_TAB_TYP()
104 CUST_ADDRESS_TAB_TYP()
105 CUST_ADDRESS_TAB_TYP()
. . .

この例では、表customers_demoと、データを含むネストした表の列が2つ必要です。この表およびネストした表の列を作成する方法については、「MULTISET演算子」を参照してください。

MULTISET INTERSECT

MULTISET INTERSECTは、引数として2つのネストした表を取り、入力する2つのネストした表に共通する値を持つネストした表を戻します。入力する2つのネストした表は同じ型である必要があり、戻されるネストした表も同じ型です。

- ALLキーワードは、入力する2つのネストした表に存在するすべての共通要素を戻します(重複する共通の値や、重複する共通のNULLも含まれます)。たとえば、ある特定の値がnested_table1でm回、nested_table2でn回出現する場合、結果には、この要素がmin(m,n)回出現します。ALLはデフォルトです。

- DISTINCTキーワードは、戻されるネストした表から重複を排除します(重複するNULLが存在する場合、これも排除されます)。

- ネストした表の要素型は比較可能なものである必要があります。スカラー型以外の型の比較の可能性は、「比較条件」を参照してください。

例

次の例では、2つのネストした表を比較し、入力する両方のネストした表に存在する要素を持つネストした表を戻します。

SELECT customer_id, cust_address_ntab
MULTISET INTERSECT DISTINCT cust_address2_ntab multiset_intersect
FROM customers_demo
ORDER BY customer_id;

CUSTOMER_ID MULTISET_INTERSECT(STREET_ADDRESS, POSTAL_CODE, CITY, STATE_PROVINCE, COUNTRY_ID
----------- -----------------------------------------------------------------------------------
101 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('514 W Superior St', '46901', 'Kokomo', 'IN', 'US'))
102 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('2515 Bloyd Ave', '46218', 'Indianapolis', 'IN', 'US'))
103 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('8768 N State Rd 37', '47404', 'Bloomington', 'IN', 'US'))
104 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('6445 Bay Harbor Ln', '46254', 'Indianapolis', 'IN', 'US'))
105 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('4019 W 3Rd St', '47404', 'Bloomington', 'IN', 'US'))
. . .

この例では、表customers_demoと、データを含むネストした表の列が2つ必要です。この表およびネストした表の列を作成する方法については、「MULTISET演算子」を参照してください。

MULTISET UNION

MULTISET UNIONは、引数として2つのネストした表を取り、入力する2つのネストした表に存在する値を持つネストした表を戻します。入力する2つのネストした表は同じ型である必要があり、戻されるネストした表も同じ型です。

- ALLキーワードは、入力する2つのネストした表に存在するすべての要素を戻します(重複する値や、重複するNULLも含まれます)。これはデフォルトです。

- DISTINCTキーワードは、戻されるネストした表から重複を排除します(重複するNULLが存在する場合、これも排除されます)。

- ネストした表の要素型は比較可能なものである必要があります。スカラー型以外の型の比較の可能性は、「比較条件」を参照してください。

例

次の例では、2つのネストした表を比較し、入力する両方のネストした表に存在する要素を持つネストした表を戻します。

SELECT customer_id, cust_address_ntab
MULTISET UNION cust_address2_ntab multiset_union
FROM customers_demo
ORDER BY customer_id;

CUSTOMER_ID MULTISET_UNION(STREET_ADDRESS, POSTAL_CODE, CITY, STATE_PROVINCE, COUNTRY_ID)
----------- -------------------------------------------------------------------------------
101 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('514 W Superior St', '46901', 'Kokomo', 'IN', 'US'),
CUST_ADDRESS_TYP('514 W Superior St', '46901', 'Kokomo', 'IN', 'US'))
102 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('2515 Bloyd Ave', '46218', 'Indianapolis', 'IN', 'US'),
CUST_ADDRESS_TYP('2515 Bloyd Ave', '46218', 'Indianapolis', 'IN','US'))
103 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('8768 N State Rd 37', '47404', 'Bloomington', 'IN', 'US'),
CUST_ADDRESS_TYP('8768 N State Rd 37', '47404', 'Bloomington', 'IN', 'US'))
104 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('6445 Bay Harbor Ln', '46254', 'Indianapolis', 'IN', 'US'),
CUST_ADDRESS_TYP('6445 Bay Harbor Ln', '46254', 'Indianapolis', 'IN', 'US'))
105 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('4019 W 3Rd St', '47404', 'Bloomington', 'IN', 'US'),
CUST_ADDRESS_TYP('4019 W 3Rd St', '47404', 'Bloomington', 'IN', 'US'))
. . .

この例では、表customers_demoと、データを含むネストした表の列が2つ必要です。この表およびネストした表の列を作成する方法については、「MULTISET演算子」を参照してください。

ユーザー定義演算子

ユーザー定義演算子は、組込み演算子のように、一連のオペランドを入力として受け取り、結果を戻します。ユーザー定義演算子は、ユーザーがCREATE OPERATOR文で作成し、ユーザー定義の名前で識別されます。これらは、表、ビュー、型およびスタンドアロン・ファンクションと同じネームスペースに存在します。

新規の演算子を定義すると、他の組込み演算子のようにSQL文で使用できます。たとえば、SELECT文のSELECT構文のリスト、WHERE句の条件、ORDER BY句およびGROUP BY句でユーザー定義演算子を使用できます。ただし、これはユーザー定義オブジェクトであるため、演算子に対するEXECUTE権限が必要です。

関連項目:
演算子の作成例は、「CREATE OPERATOR」を、ユーザー定義演算子の詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。

5 式

この章では、値、演算子およびファンクションを式の中で組み合せて使用する方法について説明します。

この章では、次の内容を説明します。

- SQL式

- 単純式

- 複合式

- CASE式

- 列式

- CURSOR式

- 日時式

- ファンクション式

- 期間式

- JSONオブジェクト・アクセス式

- モデル式

- オブジェクト・アクセス式

- プレースホルダ式

- スカラー副問合せ式

- 型コンストラクタ式

- 式のリスト

SQL式

式は、1つ以上の値、演算子、および値に評価されるSQLファンクションの組合せです。一般に、式のデータ型は、そのコンポーネントのデータ型になります。

注意:
NLS_COMPとNLS_SORTの設定を組み合せた値によって、文字をソートおよび比較するルールが決まります。ご使用のデータベースのNLS_COMPにLINGUISTICが設定されている場合、この章のエンティティはすべてNLS_SORTパラメータによって指定されるルールに従って解釈されます。NLS_COMPがLINGUISTICに設定されていない場合、ファンクションはNLS_SORTの設定に関係なく解釈されます。NLS_SORTは、明示的に設定できます。明示的に設定されていない場合は、NLS_LANGUAGEから導出されます。これらの設定の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

次の単純式は、値が4になり、データ型はNUMBER(コンポーネントと同じデータ型)になります。

2*2

次の例は、ファンクションと演算子を使用した複雑な式です。この式は、現在の日付に7日を加算し、その合計から時間コンポーネントを削除し、結果をCHARデータ型に変換します。

TO_CHAR(TRUNC(SYSDATE+7))

次の場所で式を使用できます。

- SELECT文のSELECT構文のリスト

- WHERE句およびHAVING句の条件

- CONNECT BY句、START WITH句およびORDER BY句

- INSERT文のVALUES句

- UPDATE文のSET句

たとえば、次のUPDATE文のSET句で、引用符で囲まれた文字列'Smith'のかわりに式を使用することもできます。

SET last_name = 'Smith';

このSET句では、引用符で囲まれた文字列'Smith'のかわりに、INITCAP(last_name)を使用しています。

SET last_name = INITCAP(last_name);

次の構文に示すとおり、式にはいくつかの書式があります。

expr::=

Oracle Databaseは、すべてのSQL文のすべての部分で、式のすべての書式を受け入れるわけではありません。文に指定する式の制限については、第10章から第19章の個々のSQL文の説明を参照してください。

このマニュアルの他の箇所で、条件、SQLファンクションまたはSQL文にexprが示されている場合は、必ず適切な式の表記法を使用してください。次の項では、いくつかの例をあげて、様々な式の書式を説明します。

単純式

単純式は、列、疑似列、定数、順序番号またはNULLを指定します。

simple_expression::=

スキーマは各ユーザー用の他に、"PUBLIC"(二重引用符が必要)にもなり得ます。その場合、スキーマは表、ビューまたはマテリアライズド・ビューのパブリック・シノニムを修飾する必要があります。"PUBLIC"でのパブリック・シノニムの修飾は、データ操作言語(DML)文でのみサポートされています。データ定義言語(DDL)文ではサポートされていません。

ROWIDは、表でのみ使用でき、ビューまたはマテリアライズド・ビューでは使用できません。NCHARおよびNVARCHAR2は、有効な疑似列データ型ではありません。

関連項目:
疑似列の詳細は、第3章「疑似列」を参照してください。query_nameの詳細は、「subquery_factoring_clause」を参照してください。

有効な単純式の例を次に示します。

employees.last_name
'this is a text string'
10
N'this is an NCHAR string'

複合式

複合式は、その他の式の組合せを指定します。

compound_expression::=

組込みファンクションを式として使用できます(「ファンクション式」を参照してください)。ただし、複合式では、ファンクションの組合せによっては、適切でないものや拒否されるものもあります。たとえば、LENGTHファンクションは集計ファンクション内では使用できません。

PRIOR演算子は、階層問合せのCONNECT BY句で使用されます。

関連項目:
「演算子の優先順位」および「階層問合せ」を参照してください。

有効な複合式の例を次に示します。

('CLARK' || 'SMITH')
LENGTH('MOOSE') * 57
SQRT(144) + 72
my_fun(TO_CHAR(sysdate,'DD-MMM-YY'))

CASE式

CASE式を使用すると、プロシージャを起動せずに、SQL文でIF ... THEN ... ELSE論理を使用できます。構文は次のとおりです。

simple_case_expression::=

searched_case_expression::=

else_clause::=

単純CASE式では、Oracle Databaseは、exprとcomparison_exprが一致する最初のWHEN ... THENの組合せを検索し、return_exprを戻します。WHEN ... THENの組合せが条件に一致せず、ELSE句が存在する場合、Oracleはelse_exprを戻します。それ以外の場合、OracleはNULLを戻します。

検索CASE式では、Oracleは、conditionが真である項目を左から右へ検索し、return_exprを戻します。真であるconditionがなく、ELSE句が存在する場合、Oracleはelse_exprを戻します。それ以外の場合、OracleはNULLを戻します。

Oracle Databaseでは、短絡評価を使用します。単純CASE式では、データベースは、comparison_expr値のいずれかとexprを比較する前にすべてのcomparison_expr値を評価するのではなく、各comparison_expr値とexprを比較する前にのみ、各comparison_expr値を評価します。その結果、exprと等しいcomparison_exprが見つかると、Oracleはその後のcomparison_exprを評価しません。検索CASE式の場合、データベースは各conditionを評価してこれが真であるかどうかを判断します。ただし、あるconditionが真の場合は、次のconditionを評価しません。

単純CASE式では、exprおよびすべてのcomparison_expr値は、同じデータ型(CHAR、VARCHAR2、NCHAR、NVARCHAR2、NUMBER、BINARY_FLOATまたはBINARY_DOUBLE)であるか、またはすべて数値データ型である必要があります。すべての式が数値データ型の場合、Oracleは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。

単純および検索CASE式では、すべてのreturn_exprは、同じデータ型(CHAR、VARCHAR2、NCHAR、NVARCHAR2、NUMBER、BINARY_FLOATまたはBINARY_DOUBLE)であるか、またはすべて数値データ型である必要があります。すべての戻り式が数値データ型の場合、Oracleは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。

1つのCASE式では、引数の最大数は65535です。単純CASE式の初期式やオプションのELSE式を含むすべての式が、この上限の対象となります。WHEN ... THENの各組は、2つの引数としてカウントします。この上限を超えないように、CASE式をネストし、return_expr自体がCASE式となるようにすることができます。

関連項目:

- 暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

- 数値の優先順位の詳細は、「数値の優先順位」を参照してください。

- その他のCASE式の書式については、「COALESCE」および「NULLIF」を参照してください。

- CASE式の様々な書式を使用した例は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

単純CASE式の例 次の文は、サンプル表oe.customersのそれぞれの顧客について、クレジット利用限度額を、$100の場合は「Low」、$5000の場合は「High」、それ以外の場合は「Medium」で表示します。

SELECT cust_last_name,
CASE credit_limit WHEN 100 THEN 'Low'
WHEN 5000 THEN 'High'
ELSE 'Medium' END AS credit
FROM customers
ORDER BY cust_last_name, credit;

CUST_LAST_NAME       CREDIT
-------------------- ------
Adjani               Medium
Adjani               Medium
Alexander            Medium
Alexander            Medium
Altman               High
Altman               Medium
. . .

検索CASE式の例 次の文は、$2000を最少額の給与として、サンプル表oe.employeesの従業員の給与の平均を検出します。

SELECT AVG(CASE WHEN e.salary > 2000 THEN e.salary
ELSE 2000 END) "Average Salary" FROM employees e;

Average Salary
--------------
6461.68224

列式

後述の構文図でcolumn_expressionで示される列式は、exprの書式の一部です。列式は単純式、複合式、ファンクション式または式リストにできますが、列式に含めることができるのは、次の書式の式にかぎられます。

- 対象とする表(作成、変更または索引作成される表)の列

- 定数(文字列または数値)

- DETERMINISTICファンクション: SQL組込みファンクションまたはユーザー定義ファンクションのいずれか

これ以外に、この章で説明されている書式で使用できるものはありません。また、PRIORキーワードを使用した複合式および集計ファンクションはサポートされません。

列式は、次の目的で使用できます。

- ファンクション索引を作成する場合。

- 明示的または暗黙的に仮想列を定義する場合。仮想列を定義する際、column_expressionの定義では、現行の文または以前の文ですでに定義されている対象の表の列のみを参照する必要があります。

列式を組み合せた要素は、決定的である必要があります。つまり、同じ入力値のセットによって、同じ出力値のセットが戻される必要があります。

関連項目:
これらのexprの書式の詳細は、「単純式」、「複合式」、「ファンクション式」および「式のリスト」を参照してください。

CURSOR式

CURSOR式は、ネステッド・カーソルを戻します。この式の書式は、PL/SQLのREF CURSORと同じで、REF CURSOR引数としてファンクションに渡すことができます。

カーソル式が評価されるときに、ネステッド・カーソルは暗黙的にオープンされます。たとえば、カーソル式がSELECT構文のリストにある場合、問合せによってフェッチされた各行に対して、ネステッド・カーソルがオープンされます。ネステッド・カーソルは、次の場合にのみクローズされます。

- ユーザーによって明示的にクローズされたとき

- 親カーソルが再実行されたとき

- 親カーソルがクローズされたとき

- 親カーソルが取り消されたとき

- 親カーソルの1つでのフェッチ時にエラーが発生したとき(クリーンアップの一部としてクローズされる)

CURSOR式の制限事項: CURSOR式には、次の制限事項があります。

- 囲まれる文がSELECT文以外の文である場合、ネステッド・カーソルは、プロシージャのREF CURSOR引数としてのみ表示されます。

- 囲まれる文がSELECT文である場合、ネステッド・カーソルは、問合せ指定の一番外側のSELECT構文のリスト、または別のネステッド・カーソルの一番外側のSELECT構文のリストに表示されます。

- ネステッド・カーソルはビューに表示できません。

- ネステッド・カーソルに対して、BIND操作およびEXECUTE操作は実行できません。

例 問合せのSELECT構文のリストでのCURSOR式の使用方法について、次に例を示します。

SELECT department_name, CURSOR(SELECT salary, commission_pct
FROM employees e
WHERE e.department_id = d.department_id)
FROM departments d
ORDER BY department_name;

ファンクションの引数としてのCURSORの使用方法について、次に例を示します。例では、まず、サンプル・スキーマOEにREF CURSOR引数を受け入れるファンクションを作成します。(イタリック体は、PL/SQLファンクションの本体です。)

CREATE FUNCTION f(cur SYS_REFCURSOR, mgr_hiredate DATE)
RETURN NUMBER IS
emp_hiredate DATE;
before number :=0;
after number:=0;
begin
loop
fetch cur into emp_hiredate;
exit when cur%NOTFOUND;
if emp_hiredate > mgr_hiredate then
after:=after+1;
else
before:=before+1;
end if;
end loop;
close cur;
if before > after then
return 1;
else
return 0;
end if;
end;
/

ファンクションには、カーソルおよび日付を指定できます。ファンクションは、カーソルが日付セットを戻す問合せであることを想定します。次の問合せでは、ファンクションを使用して、サンプル表employeesから、ほとんどの従業員がマネージャよりも前に雇用されているマネージャを検索します。

SELECT e1.last_name FROM employees e1
WHERE f(
CURSOR(SELECT e2.hire_date FROM employees e2
WHERE e1.employee_id = e2.manager_id),
e1.hire_date) = 1
ORDER BY last_name;

LAST_NAME
-------------------------
Cambrault
Higgins
Hunold
Kochhar
Mourgos
Zlotkey

日時式

日時式は、日時データ型の値を戻します。

datetime_expression::=

初期のexprは、データ型TIMESTAMP、TIMESTAMP WITH TIME ZONEまたはTIMESTAMP WITH LOCAL TIME ZONEの値に評価される任意の式(スカラー副問合せ式を除く)です。DATEデータ型はサポートされません。このexpr自体がdatetime_expressionである場合は、カッコで囲む必要があります。

表2-5で定義される規則に従って、日時および期間を組み合せることができます。日時の値を戻す3つの組合せは、日時式で有効です。

AT LOCALを指定すると、Oracleは現行のセッションのタイムゾーンを使用します。

AT TIME ZONEの設定は、次のように解析されます。

- 文字列'[+|-]hh:mi 'は、タイムゾーンをUTCからのオフセットとして指定します。hhには時間数を指定します。miには分数を指定します。

- DBTIMEZONE: Oracleは、データベースの作成中に(明示的またはデフォルトで)構築されたデータベース・タイムゾーンを使用します。

- SESSIONTIMEZONE: Oracleは、デフォルトで構築されたセッション・タイムゾーン、または最新のALTER SESSION文で構築されたセッション・タイムゾーンを使用します。

- time_zone_name: Oracleは、time_zone_nameで指定されたタイムゾーンのdatetime_value_exprを戻します。有効なタイムゾーン地域名を表示するには、V$TIMEZONE_NAMES動的パフォーマンス・ビューに問合せを実行してください。

注意:
夏時間機能には、タイムゾーン地域名が必要です。この名前は、大小2つのタイムゾーン・ファイルに格納されます。これらのファイルのうち、使用する環境および使用するOracle Databaseのリリースに応じて、いずれか一方がデフォルトのファイルになります。タイムゾーン・ファイルおよびタイムゾーン名の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

関連項目:

- 両方のファイル内のすべてのタイムゾーン地域名のリストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

- 動的パフォーマンス・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

- expr: exprが有効なタイムゾーン書式で文字列を戻す場合、Oracleは、そのタイムゾーンで入力を戻します。そうでない場合は、エラーが戻ります。

例 次の例は、タイムゾーンの日時の値を別のタイムゾーンに変換します。

SELECT FROM_TZ(CAST(TO_DATE('1999-12-01 11:00:00',
'YYYY-MM-DD HH:MI:SS') AS TIMESTAMP), 'America/New_York')
AT TIME ZONE 'America/Los_Angeles' "West Coast Time"
FROM DUAL;

West Coast Time
------------------------------------------------
01-DEC-99 08.00.00.000000 AM AMERICA/LOS_ANGELES

ファンクション式

組込みSQLファンクションまたはユーザー定義ファンクションを式として使用できます。有効な組込みファンクション式の例を次に示します。

LENGTH('BLAKE')
ROUND(1234.567*43)
SYSDATE

関連項目:
組込みファンクションの詳細は、「SQLファンクション」および「集計ファンクション」を参照してください。

ユーザー定義ファンクション式は、次のものへのコールを指定します。

- オラクル社が提供するパッケージにあるファンクション(『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照)

- ユーザー定義パッケージにあるファンクションまたはスタンドアロン・ユーザー定義ファンクション(「ユーザー定義ファンクション」を参照)

- ユーザー定義ファンクションまたは演算子(「CREATE OPERATOR」、「CREATE FUNCTION」および『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照)

有効なユーザー定義ファンクション式の例を次に示します。

circle_area(radius)
payroll.tax_rate(empno)
hr.employees.comm_pct@remote(dependents, empno)
DBMS_LOB.getlength(column_name)
my_function(a_column)

式として使用されるユーザー定義ファンクションでは、位置表記法、名前付き表記法および複合表記法がサポートされています。たとえば、次の表記はすべて正しい表記です。

CALL my_function(arg1 => 3, arg2 => 4) ...

CALL my_function(3, 4) ...

CALL my_function(3, arg2 => 4) ...

ユーザー定義ファンクション式の制限事項: オブジェクト型またはXMLTypeの引数をリモート・ファンクションおよびリモート・プロシージャに渡すことはできません。

期間式

期間式は、INTERVAL YEAR TO MONTHまたはINTERVAL DAY TO SECONDの値を戻します。

interval_expression::=

式expr1およびexpr2は、データ型DATE、TIMESTAMP、TIMESTAMP WITH TIME ZONEまたはTIMESTAMP WITH LOCAL TIME ZONEの値に評価される任意の式にすることができます。

表2-5で定義される規則に従って、日時および期間を組み合せることができます。期間の値を戻す6つの組合せは、期間式で有効です。

leading_field_precisionおよびfractional_second_precisionは、0から9の任意の整数です。DAYまたはYEARのいずれかでleading_field_precisionを省略すると、Oracle Databaseはデフォルト値である2を使用します。秒でfractional_second_precisionを省略すると、データベースはデフォルト値である6を使用します。問合せで戻された値にデフォルトの精度を超える桁数が含まれる場合、Oracle Databaseはエラーを戻します。したがって、問合せで戻されるとわかっている値以上の精度を指定することをお薦めします。

たとえば、次の文は、システム・タイムスタンプ(日時の値)からサンプル表ordersのorder_date列の値(別の日時の値)を減算して、期間値の式を戻します。一番古い注文が発注されたのが何日前かわからないため、DAYの先行フィールド精度に最大値である9を指定します。

SELECT (SYSTIMESTAMP - order_date) DAY(9) TO SECOND FROM orders
WHERE order_id = 2458;

JSONオブジェクト・アクセス式

JavaScript Object Notation (JSON)データの列を問い合せる場合のみ、JSONオブジェクト・アクセス式を使用できます。式は、そのデータ内の1つ以上のJSON値を含む文字列を戻します。このタイプの式の構文は、ドット表記法構文と呼ばれることがあります。

JSON_object_access_expr::=

- table_aliasでは、JSONデータの列を含む表の別名を指定します。この表の別名が必要であり、SQL文で表に割り当てる必要があります。

- JSON_columnでは、JSONデータの列の名前を指定します。列のデータ型はVARCHAR2、CLOBまたはBLOBである必要があり、IS JSON CHECK制約を列に定義する必要があります。

- 1つ以上のJSONオブジェクト・キーをオプションで指定できます。オブジェクト・キーによって、JSONデータの特定のJSON値を特定できます。最初のJSON_object_keyは、JSONデータのトップレベルのオブジェクト・メンバーのキー(プロパティ)名と大/小文字を区別して一致する必要があります。オブジェクト・メンバーの値が別のJSONオブジェクトである場合、オブジェクトのメンバーのキー名と一致する2番目のJSON_object_keyを指定でき、以降も同様です。これらの反復中にJSON配列が検出された場合、配列が暗黙的にアンラップされ、配列の要素がJSON_object_keyを使用して評価されます。
この式は、次のようなターゲットJSON値を含むデータ型VARCHAR2(4000)の文字列を戻します。

- 単一のターゲット値の場合、文字列には、JSONスカラー値、オブジェクト、配列に関係なくその値が含まれます。

- 複数のターゲット値の場合、文字列には、要素がそれらの値であるJSON配列が含まれます。

JSON_object_keyを省略すると、この式は全体のJSONデータを含む文字列を戻します。この場合、文字列は、問い合せるJSONデータの列と同じデータ型です。

JSONオブジェクト・アクセス式は、4KBを超える値を返せません。値がこの制限を超えると、式はnullを返します。実際の値を取得するには、かわりにJSON_QUERY関数またはJSON_VALUE関数を使用して、RETURNING句に適切な戻り型を指定します。

例 次の例では、「JSONドキュメントを含む表の作成: 例」で作成されるj_purchaseorder表を使用します。この表には、po_documentと呼ばれるJSONデータの列が含まれます。これらの例では、列po_documentからJSON値を戻します。

次の文は、キー名PONumberを使用したプロパティの値を戻します。

SELECT po.po_document.PONumber
FROM j_purchaseorder po;

PONumber
--------
1600

次の文は、値がJSONオブジェクトであるキー名ShippingInstructionsを使用したプロパティを最初に対象とします。この文は、そのオブジェクト内のキー名Phoneを使用したプロパティを対象とします。この文は、JSON配列であるPhoneの値を戻します。

SELECT po.po_document.ShippingInstructions.Phone
FROM j_purchaseorder po;

SHIPPINGINSTRUCTIONS
-------------------------------------------------------------------------------------
[{"type":"Office","number":"909-555-7307"},{"type":"Mobile","number":"415-555-1234"}]

次の文は、値がJSON配列であるキー名LineItemsを使用したプロパティを最初に対象とします。この式は配列を暗黙的にアンラップし、JSONオブジェクトである要素を評価します。次に、この文は、アンラップされたオブジェクト内のキー名Partを使用したプロパティを対象とし、2つのオブジェクトを確認します。この文は、それらのオブジェクト内のキー名Descriptionを使用したプロパティを対象とし、文字列値を確認します。複数の値が戻されるため、値はJSON配列の要素として戻されます。

SELECT po.po_document.LineItems.Part.Description
FROM j_purchaseorder po;

LINEITEMS
-----------------------------------
[One Magic Christmas,Lethal Weapon]

関連項目:
ドット表記法構文を使用したJSONデータの問合せの詳細は、『Oracle XML DB開発者ガイド』を参照してください。

モデル式

モデル式は、SELECT文のmodel_clauseでのみ、さらにモデル・ルールの右側でのみ使用されます。モデル式は、model_clauseで事前定義されたメジャー列のセルに値を戻します。詳細は、「model_clause」を参照してください。

model_expression::=

モデル式でメジャー列を指定する場合、指定する任意の条件と式は単一の値に変換される必要があります。

モデル式で集計ファンクションを指定する場合、ファンクションの引数はmodel_clauseで事前定義したメジャー列です。集計ファンクションは、モデル・ルールの右側でのみ使用できます。

モデル・ルールの右側で分析ファンクションを指定すると、model_clauseに複雑な計算を直接表記することができます。モデル式で分析ファンクションを使用するときには、次の制限事項が適用されます。

- 分析ファンクションは、UPDATEルールのみで使用できます。

- モデル・ルールの左側にFORループまたはORDER BY句が含まれている場合は、モデル・ルールの右側で分析ファンクションを指定できません。

- 分析ファンクションのOVER句の引数に集計を含めることはできません。

- 分析ファンクションのOVER句の前の引数にセル参照を含めることはできません。

関連項目:
モデル・ルールの右側で分析ファンクションを使用する例は、「MODEL句の例:」を参照してください。

expr自体がモデル式である場合、ネストしたセル参照と呼ばれます。ネストしたセル参照には、次の制限事項が適用されます。

- ネストは1レベルのみ可能です。

- ネストしたセル参照は、単一セル参照である必要があります。

- model_rules_clauseにAUTOMATIC ORDERが指定されているとき、ネストしたセル参照で使用されるメジャーが静的なままの場合のみ、ネストしたセル参照をモデル・ルールの左側で使用できます。

後述するモデル式は、次に示すSELECT文のmodel_clauseに基づいています。

SELECT country,prod,year,s
FROM sales_view_ref
MODEL
PARTITION BY (country)
DIMENSION BY (prod, year)
MEASURES (sale s)
IGNORE NAV
UNIQUE DIMENSION
RULES UPSERT SEQUENTIAL ORDER
(
s[prod='Mouse Pad', year=2000] =
s['Mouse Pad', 1998] + s['Mouse Pad', 1999],
s['Standard Mouse', 2001] = s['Standard Mouse', 2000]
)
ORDER BY country, prod, year;

次のモデル式は、記号表記法を使用して単一セル参照を表しています。この式は、2000年のマウス・パッドの売上を示します。

s[prod='Mouse Pad',year=2000]

次のモデル式は、CVファンクションを使用して、位置表記法を使用する複数セル参照を表しています。この式は、prodディメンション列の現在値の2001年における売上を示します。

s[CV(prod), 2001]

次のモデル式は、集計ファンクションを表しています。この式は、yearディメンション列の現在の値-2からyearディメンション列の現在の値-1までの年のマウス・パッドの売上合計を示します。

SUM(s)['Mouse Pad',year BETWEEN CV()-2 AND CV()-1]

関連項目:
「CV」および「model_clause」を参照してください。

オブジェクト・アクセス式

オブジェクト・アクセス式は、属性の参照およびメソッドの起動を指定します。

object_access_expression::=

columnパラメータはオブジェクトまたはREF列です。exprを指定する場合、オブジェクト型に変換する必要があります。

ある型のメンバー・ファンクションがSQL文のコンテキストでコールされると、SELF引数がNULLの場合に、OracleはNULLを戻し、ファンクションは起動されません。

例 次の例では、サンプル・オブジェクト型oe.order_item_typに基づく表を作成し、オブジェクト列属性から更新および検索する方法を示します。

CREATE TABLE short_orders (
sales_rep VARCHAR2(25), item order_item_typ);

UPDATE short_orders s SET sales_rep = 'Unassigned';

SELECT o.item.line_item_id, o.item.quantity FROM short_orders o;

プレースホルダ式

プレースホルダ式は、SQL文における位置を指定します。この位置に対して、第三世代言語のバインド変数によって値が指定されます。プレースホルダ式には、オプションで標識変数を指定できます。この書式の式は、埋込みSQL文またはOracle Call Interface(OCI)プログラムで処理されるSQL文のみで指定できます。

placeholder_expression::=

有効なプレースホルダ式の例を次に示します。

:employee_name INDICATOR :employee_name_indicator_var
:department_location

スカラー副問合せ式

スカラー副問合せ式は、1つの行から1つの列値のみを戻す副問合せです。スカラー副問合せ式の値は、副問合せのSELECT構文リスト項目の値です。副問合せが0行を戻す場合、スカラー副問合せ式の値はNULLです。副問合せが2つ以上の行を戻す場合、Oracleはエラーを戻します。

スカラー副問合せ式は、式(expr)をコールするほとんどの構文で使用できます。すべての場合、スカラー副問合せは、その構文の場所がすでにカッコ内であっても(組込みファンクションの引数として使用されている場合など)、独自のカッコで囲む必要があります。

スカラー副問合せは、次の場所では無効です。

- 列のデフォルト値

- クラスタのハッシュ式

- DML文RETURNING句

- ファンクション索引の基礎

- CHECK制約

- GROUP BY句

- CREATE PROFILEなどの問合せに関連しない文

型コンストラクタ式

型コンストラクタ式は、コンストラクタ・メソッドへのコールを指定します。型コンストラクタの引数は、任意の式です。型コンストラクタは、ファンクションが起動されるすべての場所で起動できます。

type_constructor_expression::=

NEWキーワードは、コレクション型ではなくオブジェクト型のコンストラクタに適用されます。これによって、適切なコンストラクタを起動して新しいオブジェクトを作成するようにOracleに指示します。NEWキーワードはオプションですが、指定することをお薦めします。

type_nameがオブジェクト型の場合、最初の引数の値の型がオブジェクト型の最初の属性と一致する値を取り、2番目の引数の値の型がオブジェクト型の2番目の属性と一致するというように、式は順序付けられたリストになっている必要があります。コンストラクタの引数の合計数は、オブジェクト型の属性の合計数と一致する必要があります。

type_nameがVARRAY型またはネストした表型の場合、式のリストには0個以上の引数を含めることができます。引数が0個の場合は、空コレクションの構造であることを示します。それ以外の場合は、各引数が、型がコレクション型の要素型である要素値に対応します。

型コンストラクタの起動の制限事項: 型コンストラクタ・メソッドの起動では、オブジェクト型に1000以上の属性がある場合でも、指定できるパラメータの数(expr)は最大で999です。この制限は、コンストラクタがSQLからコールされる場合にのみ適用されます。PL/SQLからコールされる場合には、PL/SQLの制限が適用されます。

関連項目:
コンストラクタ・メソッドの詳細は、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。型コンストラクタへのコールに関するPL/SQLの制限の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

式の例 次の例では、サンプル・スキーマoeのcust_address_typ型を使用して、コンストラクタ・メソッドへのコールに含まれる式の使用方法を示します(PL/SQLはイタリック体で示しています)。

CREATE TYPE address_book_t AS TABLE OF cust_address_typ;
DECLARE
myaddr cust_address_typ := cust_address_typ(
'500 Oracle Parkway', 94065, 'Redwood Shores', 'CA','USA');
alladdr address_book_t := address_book_t();
BEGIN
INSERT INTO customers VALUES (
666999, 'Joe', 'Smith', myaddr, NULL, NULL, NULL, NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL);
END;
/

副問合せ例 次の例では、サンプル・スキーマoeのwarehouse_typ型を使用して、コンストラクタ・メソッドへのコールに含まれる副問合せの使用方法を示します。

CREATE TABLE warehouse_tab OF warehouse_typ;

INSERT INTO warehouse_tab
VALUES (warehouse_typ(101, 'new_wh', 201));

CREATE TYPE facility_typ AS OBJECT (
facility_id NUMBER,
warehouse_ref REF warehouse_typ);

CREATE TABLE buildings (b_id NUMBER, building facility_typ);

INSERT INTO buildings VALUES (10, facility_typ(102,
(SELECT REF(w) FROM warehouse_tab w
WHERE warehouse_name = 'new_wh')));

SELECT b.b_id, b.building.facility_id "FAC_ID",
DEREF(b.building.warehouse_ref) "WH" FROM buildings b;

B_ID     FAC_ID WH(WAREHOUSE_ID, WAREHOUSE_NAME, LOCATION_ID)
---------- ---------- ---------------------------------------------
10        102 WAREHOUSE_TYP(101, 'new_wh', 201)

式のリスト

式のリストは、その他の式の組合せです。

expression_list::=

式のリストは、比較条件、メンバーシップ条件、および問合せと副問合せのGROUP BY句に指定できます。比較条件またはメンバーシップ条件内の式のリストは、行値コンストラクタまたは行コンストラクタと呼ばれる場合があります。

比較条件およびメンバーシップ条件は、WHERE句の条件として指定します。これらの条件には、カンマで区切られた1つ以上の式、または1つ以上の式の集合(各集合には、カンマで区切られた式が1つ以上含まれる)を含めることができます。式の集合が複数存在する場合は、次のように指定します。

- 各集合をカッコで区切ります。

- 各集合に含まれる式の数を同じにします。

- 各集合内の式の数を、比較条件の演算子の前またはメンバーシップ条件のINキーワードの前にある式の数と同じにします。

カンマで区切られた式のリストには、最大1000個の式を指定できます。カンマで区切られた式の集合のリストには、任意数の式の集合を含めることができますが、各集合に指定できる式は最大1000個です。

次に、条件に含める有効な式のリストを示します。

(10, 20, 40)
('SCOTT', 'BLAKE', 'TAYLOR')
( ('Guy', 'Himuro', 'GHIMURO'),('Karen', 'Colmenares', 'KCOLMENA') )

3番目の例の場合、各集合の式の数は、条件の最初の部分の式の数と同じである必要があります。次に例を示します。

SELECT * FROM employees
WHERE (first_name, last_name, email) IN
(('Guy', 'Himuro', 'GHIMURO'),('Karen', 'Colmenares', 'KCOLMENA'))

関連項目:
「比較条件」および「IN条件」を参照してください。

単純なGROUP BY句では、式のリストの書式として、次のいずれかを使用できます。

SELECT department_id, MIN(salary) min, MAX(salary) max FROM employees
GROUP BY department_id, salary
ORDER BY department_id, min, max;

SELECT department_id, MIN(salary) min, MAX(salary) max FROM employees
GROUP BY (department_id, salary)
ORDER BY department_id, min, max;

ROLLUP、CUBE、およびGROUP BY句のGROUPING SETS句では、個々の式と同じリストにある式の集合を組み合せることができます。次に、1つのSQL文に含まれている有効なグルーピング・セットと式のリストを示します。

SELECT
prod_category, prod_subcategory, country_id, cust_city, count(*)
FROM  products, sales, customers
WHERE sales.prod_id = products.prod_id
AND sales.cust_id=customers.cust_id
AND sales.time_id = '01-oct-00'
AND customers.cust_year_of_birth BETWEEN 1960 and 1970
GROUP BY GROUPING SETS
(
(prod_category, prod_subcategory, country_id, cust_city),
(prod_category, prod_subcategory, country_id),
(prod_category, prod_subcategory),
country_id
)
ORDER BY prod_category, prod_subcategory, country_id, cust_city;

関連項目:
「SELECT」

6 条件

条件は、1つ以上の式と論理(ブール)演算子の組合せで指定し、TRUE、FALSEまたはUNKNOWNのいずれかの値を戻します。

この章では、次の内容を説明します。

- SQL条件

- 比較条件

- 浮動小数点条件

- 論理条件

- モデル条件

- 多重集合条件

- パターン一致条件

- NULL条件

- XML条件

- JSON条件

- 複合条件

- BETWEEN条件

- EXISTS条件

- IN条件

- IS OF type条件

SQL条件

条件には、次の構文で示すとおり、複数の書式があります。

condition::=

Oracle Textがインストールされている場合、CONTAINS、CATSEARCH、MATCHESなど、この製品に含まれる組込み演算子を使用して条件を作成できます。Oracle Text要素の詳細は、『Oracle Textリファレンス』を参照してください。

次の項では、様々な書式の条件を説明します。SQL文にconditionが含まれる場合は、適切な条件構文を使用する必要があります。

条件は、次の文のWHERE句で使用できます。

- DELETE

- SELECT

- UPDATE

また、SELECT文の次の句で使用することもできます。

- WHERE

- START WITH

- CONNECT BY

- HAVING

注意:
NLS_COMPとNLS_SORTの設定を組み合せた値によって、文字をソートおよび比較するルールが決まります。ご使用のデータベースのNLS_COMPにLINGUISTICが設定されている場合、この章のエンティティはすべてNLS_SORTパラメータによって指定されるルールに従って解釈されます。NLS_COMPがLINGUISTICに設定されていない場合、ファンクションはNLS_SORTの設定に関係なく解釈されます。NLS_SORTは、明示的に設定できます。明示的に設定されていない場合は、NLS_LANGUAGEから導出されます。これらの設定の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

条件は、論理データ型であるともいえます。ただし、Oracle Databaseで、正式にこのようなデータ型をサポートしているわけではありません。

次のような単純な条件は、常にTRUEに評価されます。

1 = 1

次のやや複雑な条件は、salaryの値をsalary*commission_pctの値に加算し(NULLは0で置き換える)、その合計が定数25000より大きいかどうかを判断します。

NVL(salary, 0) + NVL(salary + (salary*commission_pct, 0) > 25000)

論理条件を使用すると、複数の条件を単一の条件に結合できます。たとえば、次のようにAND条件を使用して2つの条件を結合できます。

(1 = 1) AND (5 < 7)

有効な条件の例を次に示します。

name = 'SMITH'
employees.department_id = departments.department_id
hire_date > '01-JAN-08'
job_id IN ('SA_MAN', 'SA_REP')
salary BETWEEN 5000 AND 10000
commission_pct IS NULL AND salary = 2100

関連項目:
文に指定する条件の制限については、第10章から第19章にある各文の説明を参照してください。

条件の優先順位

優先順位とは、同じ式の中の異なる条件をOracle Databaseが評価する順序を意味します。複数の条件を含む式を評価するとき、Oracleは優先順位の高い条件を評価した後で、優先順位の低い条件を評価します。優先順位の等しい条件は、式の中で左から右に評価されます。ただし、次の例外があります。

- ANDを使用して接続された複数の条件については、左から右への評価は保証されません。

- ORを使用して接続された複数の条件については、左から右への評価は保証されません。

表6-1に、SQL条件を優先順位の高い方から順に示します。同じ行に示されている条件の優先順位は同じです。表に示すとおり、Oracleは条件の前に演算子を評価します。

表6-1 SQL条件の優先順位

条件の種類

用途

SQL演算子は、SQL条件の前に評価されます。

「演算子の優先順位」を参照

=、!=、<、>、<=、>=

比較

IS [NOT] NULL、LIKE、[NOT] BETWEEN、[NOT] IN、EXISTS、IS OF type

比較

NOT

指数、論理否定

AND

論理積

OR

論理和

比較条件

比較条件は、2つの式を比較します。比較の結果は、TRUE、FALSEまたはUNKNOWNになります。

ラージ・オブジェクト(LOB)は、比較条件ではサポートされていません。ただし、CLOBデータの比較では、PL/SQLプログラムを使用できます。

数式を比較する場合、Oracleは数値の優先順位を使用して、その条件がNUMBER、BINARY_FLOATまたはBINARY_DOUBLEのうちどの値を比較するかを判断します。数値の優先順位の詳細は、「数値の優先順位」を参照してください。

文字式を比較する場合、Oracleは「データ型の比較規則」で説明されている規則を使用します。この規則では、比較の前の式のキャラクタ・セットの位置、バイナリ比較または言語比較(照合)の使用および空白埋め比較セマンティクスの使用が定義されます。

比較条件を使用して言語的に比較される場合、文字値は、最初に照合キーに変換されてからRAW値と同様に比較されます。照合キーは、NLSSORTファンクションによって戻されるものと同じ値であり、「NLSSORT」で説明されているものと同じ制限事項があります。これらの制限事項により、照合キーの生成に使用された接頭辞に違いがない場合、その他の値に違いがあるとしても、2つの式は言語的に等しいものとして比較されることがあります。

非スカラー型の2つのオブジェクトが比較可能なのは、これらが同じ名前付きの型であり、要素が1対1で対応している場合です。また、ユーザー定義オブジェクト型のネストした表では、要素が比較可能な場合も、等式やIN条件で使用するMAPメソッドが定義されている必要があります。

関連項目:
MAPメソッドを使用したオブジェクトの比較の詳細は、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。

表6-2に、比較条件を示します。

表6-2 比較条件

条件の種類

用途

例

=

等価性をテストします。

SELECT *
FROM employees
WHERE salary = 2500
ORDER BY employee_id;

!=

^=

<>

logical_negation_symbol= (注意1)

不等性をテストします。プラットフォームによっては、一部の不等号条件を使用できない場合もあります。

SELECT *
FROM employees
WHERE salary != 2500
ORDER BY employee_id;

>

<

大/小をテストします。

SELECT * FROM employees
WHERE salary > 2500
ORDER BY employee_id;
SELECT * FROM employees
WHERE salary < 2500
ORDER BY employee_id;

>=

<=

以上/以下をテストします。

SELECT * FROM employees
WHERE salary >= 2500
ORDER BY employee_id;
SELECT * FROM employees
WHERE salary <= 2500
ORDER BY employee_id;

ANY

SOME

リスト内の各値または問合せによって戻される各値と、ある値を比較します。=、!=、>、<、<=、>=のいずれかを先に指定する必要があります。1つ以上の値を戻す任意の式または副問合せを後に指定できます。

問合せによって行が戻されない場合には、FALSEと評価されます。

SELECT * FROM employees
WHERE salary = ANY
(SELECT salary
FROM employees
WHERE department_id = 30)
ORDER BY employee_id;

ALL

リスト内のすべての値または問合せによって戻されるすべての値と、ある値を比較します。=、!=、>、<、<=、>=のいずれかを先に指定する必要があります。1つ以上の値を戻す任意の式または副問合せを後に指定できます。

問合せによって行が戻されない場合には、TRUEと評価されます。

SELECT * FROM employees
WHERE salary >=
ALL (1400, 3000)
ORDER BY employee_id;

注意1: logical_negation_symbolはASCIIキャラクタで、10進値の170です。

単純比較条件

単純比較条件は、式または副問合せの結果の比較方法を指定します。

simple_comparison_condition::=

expression_list::=

この条件の下の方の書式(演算子の左辺に1つの式を指定する書式)を使用する場合は、expression_listの上または下の方の書式を使用できます。この条件の下の方の書式(演算子の左辺に複数の式を指定する書式)を使用する場合は、expression_listの下の方の書式を使用する必要があります。どちらの場合も、expression_listの式は、演算子の左辺にある式と同じ数とデータ型で構成されている必要があります。副問合せを指定する場合、副問合せから戻される値は、演算子の左辺にある式と同じ数とデータで構成されている必要があります。

関連項目:
式の組合せの詳細は、「式のリスト」を参照してください。副問合せの詳細は、「SELECT」を参照してください。

グループ比較条件

グループ比較条件は、リストまたは副問合せ内の任意またはすべてのメンバーの比較方法を指定します。

group_comparison_condition::=

expression_list::=

この条件の上の方の書式(演算子の左辺に1つの式を指定する書式)を使用する場合は、expression_listの上の方の書式を使用する必要があります。この条件の下の方の書式(演算子の左辺に複数の式を指定する書式)を使用する場合は、expression_listの下の方の書式を使用し、各expression_list内の式は、演算子の左辺にある式と同じ数とデータ型で構成されている必要があります。副問合せを指定する場合、副問合せから戻される値は、演算子の左辺にある式と同じ数とデータで構成されている必要があります。

関連項目:

- 「式のリスト」

- 「SELECT」

浮動小数点条件

浮動小数点条件では、式が無限か、または演算の未定義の結果(非数値(NaN))かを判断します。

floating_point_condition::=

どちらの浮動小数点条件でも、exprは、数値データ型、または数値データ型に暗黙的に変換可能な任意のデータ型に解決される必要があります。表6-3に、浮動小数点条件を示します。

表6-3 浮動小数点条件

条件の種類

操作

例

IS [NOT] NAN

NOTが指定されていないときは、exprが特殊な値であるNaNの場合にTRUEを戻します。NOTが指定されているときは、exprが特殊な値であるNaNではない場合にTRUEを戻します。

SELECT COUNT(*) FROM employees
WHERE commission_pct IS NOT NAN;

IS [NOT] INFINITE

NOTが指定されていないときは、exprが特殊な値である+INFまたは-INFの場合にTRUEを戻します。NOTが指定されているときは、exprが特殊な値である+INFでも-INFでもない場合にTRUEを戻します。

SELECT last_name FROM employees
WHERE salary IS NOT INFINITE;

関連項目:

- Oracleでの浮動小数点数の実装の詳細は、「浮動小数点数」を参照してください。

- Oracleでの浮動小数点データ型の変換方法の詳細は、「暗黙的なデータ変換」を参照してください。

論理条件

論理条件は、2つのコンポーネント条件の結果を組み合せ、それらに基づいて単一の結果を生成したり、単一の条件の結果を反転させます。表6-4に、論理条件を示します。

表6-4 論理条件

条件の種類

操作

例

NOT

後続する条件がFALSEの場合にTRUEを戻します。TRUEの場合にはFALSEを戻します。UNKNOWNの場合にはUNKNOWNを戻します。

SELECT *
FROM employees
WHERE NOT (job_id IS NULL)
ORDER BY employee_id;
SELECT *
FROM employees
WHERE NOT
(salary BETWEEN 1000 AND 2000)
ORDER BY employee_id;

AND

コンポーネントの条件が両方ともTRUEの場合にTRUEを戻します。どちらかがFALSEの場合にはFALSEを戻します。それ以外の場合はUNKNOWNを戻します。

SELECT *
FROM employees
WHERE job_id = 'PU_CLERK'
AND department_id = 30
ORDER BY employee_id;

OR

コンポーネントの条件のどちらかがTRUEの場合にTRUEを戻します。両方ともFALSEの場合はFALSEを戻します。それ以外の場合はUNKNOWNを戻します。

SELECT *
FROM employees
WHERE job_id = 'PU_CLERK'
OR department_id = 10
ORDER BY employee_id;

表6-5に、式にNOT条件を適用した結果を示します。

表6-5 NOT真理値表

--

TRUE

FALSE

UNKNOWN

NOT

FALSE

TRUE

UNKNOWN

表6-6に、2つの式にAND条件を組み合せた結果を示します。

表6-6 AND真理値表

AND

TRUE

FALSE

UNKNOWN

TRUE

TRUE

FALSE

UNKNOWN

FALSE

FALSE

FALSE

FALSE

UNKNOWN

UNKNOWN

FALSE

UNKNOWN

たとえば、次のSELECT文のWHERE句は、AND論理条件を使用して、2004年より前に入社し、給与が$2500を超える従業員のみを戻します。

SELECT * FROM employees
WHERE hire_date < TO_DATE('01-JAN-2004', 'DD-MON-YYYY')
AND salary > 2500
ORDER BY employee_id;

表6-7に、2つの式にORを適用した結果を示します。

表6-7 OR真理値表

OR

TRUE

FALSE

UNKNOWN

TRUE

TRUE

TRUE

TRUE

FALSE

TRUE

FALSE

UNKNOWN

UNKNOWN

TRUE

UNKNOWN

UNKNOWN

たとえば、次の問合せは、歩合率が40%または給与が$20,000を超える従業員を戻します。

SELECT employee_id FROM employees
WHERE commission_pct = .4 OR salary > 20000
ORDER BY employee_id;

モデル条件

モデル条件は、SELECT文のMODEL句でのみ使用できます。

IS ANY条件

IS ANY条件は、SELECT文のmodel_clauseでのみ使用できます。この条件を使用して、ディメンション列のすべての値(NULLを含む)を修飾します。

is_any_condition::=

この条件は、常にブール値のTRUEを戻し、列内のすべての値を修飾します。

関連項目:
詳細は、「model_clause」および「モデル式」を参照してください。

例

次の例は、2000年の各製品の売上を0(ゼロ)に設定します。

SELECT country, prod, year, s
FROM sales_view_ref
MODEL
PARTITION BY (country)
DIMENSION BY (prod, year)
MEASURES (sale s)
IGNORE NAV
UNIQUE DIMENSION
RULES UPSERT SEQUENTIAL ORDER
(
s[ANY, 2000] = 0
)
ORDER BY country, prod, year;

COUNTRY       PROD                                         YEAR           S
----------    -----------------------------------      --------   ---------
France        Mouse Pad                                    1998     2509.42
France        Mouse Pad                                    1999     3678.69
France        Mouse Pad                                    2000           0
France        Mouse Pad                                    2001     3269.09
France        Standard Mouse                               1998     2390.83
France        Standard Mouse                               1999     2280.45
France        Standard Mouse                               2000           0
France        Standard Mouse                               2001     2164.54
Germany       Mouse Pad                                    1998     5827.87
Germany       Mouse Pad                                    1999     8346.44
Germany       Mouse Pad                                    2000           0
Germany       Mouse Pad                                    2001     9535.08
Germany       Standard Mouse                               1998     7116.11
Germany       Standard Mouse                               1999     6263.14
Germany       Standard Mouse                               2000           0
Germany       Standard Mouse                               2001     6456.13

16 rows selected.

この例では、ビューsales_view_refが必要です。このビューを作成する方法については、「MODEL句の例:」を参照してください。

IS PRESENT条件

is_present_condition::=

IS PRESENT条件は、SELECT文のmodel_clauseでのみ使用できます。この条件を使用すると、model_clauseの実行前に、参照されるセルが存在するかどうかをテストできます。

この条件は、model_clauseの実行前にセルが存在する場合にTRUE、存在しない場合にFALSEを戻します。

関連項目:
詳細は、「model_clause」および「モデル式」を参照してください。

例

次の例では、1999年のマウス・パッドの売上が存在する場合、2000年のマウス・パッドの売上が1999年のマウス・パッドの売上に設定されます。1999年のマウス・パッドの売上が存在しない場合は、2000年のマウス・パッドの売上は0(ゼロ)に設定されます。

SELECT country, prod, year, s
FROM sales_view_ref
MODEL
PARTITION BY (country)
DIMENSION BY (prod, year)
MEASURES (sale s)
IGNORE NAV
UNIQUE DIMENSION
RULES UPSERT SEQUENTIAL ORDER
(
s['Mouse Pad', 2000] =
CASE WHEN s['Mouse Pad', 1999] IS PRESENT
THEN s['Mouse Pad', 1999]
ELSE 0
END
)
ORDER BY country, prod, year;

COUNTRY       PROD                                         YEAR           S
----------    -----------------------------------      --------   ---------
France        Mouse Pad                                    1998     2509.42
France        Mouse Pad                                    1999     3678.69
France        Mouse Pad                                    2000     3678.69
France        Mouse Pad                                    2001     3269.09
France        Standard Mouse                               1998     2390.83
France        Standard Mouse                               1999     2280.45
France        Standard Mouse                               2000     1274.31
France        Standard Mouse                               2001     2164.54
Germany       Mouse Pad                                    1998     5827.87
Germany       Mouse Pad                                    1999     8346.44
Germany       Mouse Pad                                    2000     8346.44
Germany       Mouse Pad                                    2001     9535.08
Germany       Standard Mouse                               1998     7116.11
Germany       Standard Mouse                               1999     6263.14
Germany       Standard Mouse                               2000     2637.31
Germany       Standard Mouse                               2001     6456.13
16 rows selected.

この例では、ビューsales_view_refが必要です。このビューを作成する方法については、「MODEL句の例:」を参照してください。

多重集合条件

多重集合条件は、ネストした表を様々な側面からテストします。

IS A SET条件

IS A SET条件を使用すると、指定されたネストした表が一意の要素で構成されているかどうかをテストできます。この条件は、ネストした表がNULLの場合に、UNKNOWNを戻します。それ以外では、ネストした表がセットである場合(ネストした表の長さが0(ゼロ)の場合も含む)にTRUEを戻し、その他の場合はFALSEを戻します。

is_a_set_condition::=

例

次の例は、表customers_demoから、cust_address_ntabというネストした表の列に一意の要素が含まれる行を選択します。

SELECT customer_id, cust_address_ntab
FROM customers_demo
WHERE cust_address_ntab IS A SET
ORDER BY customer_id;

CUSTOMER_ID CUST_ADDRESS_NTAB(STREET_ADDRESS, POSTAL_CODE, CITY, STATE_PROVINCE, COUNTRY_ID)
----------------------------------------------------------------------------------------------
101 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('514 W Superior St', '46901', 'Kokomo', 'IN', 'US'))
102 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('2515 Bloyd Ave', '46218', 'Indianapolis', 'IN', 'US'))
103 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('8768 N State Rd 37', '47404', 'Bloomington', 'IN', 'US'))
104 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('6445 Bay Harbor Ln', '46254', 'Indianapolis', 'IN', 'US'))
105 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('4019 W 3Rd St', '47404', 'Bloomington', 'IN', 'US'))

この例では、表customers_demoと、データを含むネストした表の列が1つ必要です。この表およびネストした表の列を作成する方法については、「MULTISET演算子」を参照してください。

IS EMPTY条件

IS [NOT] EMPTY条件を使用すると、指定されたネストした表が空かどうかをテストできます。単一の値(NULL)で構成されたネストした表は、空のネストした表とはみなされません。

is_empty_condition::=

この条件は、コレクションが空の場合にIS EMPTY条件にブール値TRUEを戻し、コレクションが空でない場合にIS NOT EMPTY条件にブール値TRUEを戻します。ネストした表またはVARRAYにNULLを指定すると、結果はNULLになります。

例

次の例は、サンプル表pm.print_mediaから、ad_textdocs_ntabというネストした表の列が空ではない行を選択します。

SELECT product_id, TO_CHAR(ad_finaltext) AS text
FROM print_media
WHERE ad_textdocs_ntab IS NOT EMPTY
ORDER BY product_id, text;

MEMBER条件

member_condition::=

member_conditionは、要素がネストした表のメンバーかどうかをテストするメンバーシップ条件です。exprが指定されたネストした表またはVARRAYのメンバーと等しい場合、TRUEが戻されます。exprがNULLまたはネストした表が空の場合、NULLが戻されます。

- exprの型は、ネストした表の要素型と同じである必要があります。

- OFキーワードはオプションであり、条件の動作に影響しません。

- NOTキーワードはブール出力を逆にします。exprが指定されたネストした表のメンバーである場合、FALSEが戻されます。

- ネストした表の要素の型は、比較可能な型である必要があります。スカラー型以外の型の比較の可能性は、「比較条件」を参照してください。

例

次の例は、表customers_demoから、cust_address_ntabというネストした表の列に、WHERE句で指定された値が含まれる行を選択します。

SELECT customer_id, cust_address_ntab
FROM customers_demo
WHERE cust_address_typ('8768 N State Rd 37', 47404,
'Bloomington', 'IN', 'US')
MEMBER OF cust_address_ntab
ORDER BY customer_id;

CUSTOMER_ID CUST_ADDRESS_NTAB(STREET_ADDRESS, POSTAL_CODE, CITY, STATE_PROVINCE, COUNTRY_ID)
------------ ---------------------------------------------------------------------------------
103 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('8768 N State Rd 37', '47404', 'Bloomington', 'IN', 'US'))

この例では、表customers_demoと、データを含むネストした表の列が1つ必要です。この表およびネストした表の列を作成する方法については、「MULTISET演算子」を参照してください。

SUBMULTISET条件

SUBMULTISET条件は、指定されたネストした表が他の指定されたネストした表のサブ多重集合かどうかをテストします。

この演算子はブール値を戻します。nested_table1がnested_table2のサブ多重集合である場合、TRUEが戻されます。次の条件のいずれかが発生する場合、nested_table1はnested_table2のサブ多重集合となります。

- nested_table1がNULLでなく、また行を含まない場合。空の多重集合はnested_table2に対してNULL以外の値を示すサブ多重集合であるため、nested_table2がNULLの場合でも、TRUEが戻されます。

- nested_table1とnested_table2がともにNULLでなく、nested_table1にNULL要素が含まれず、またnested_table1内の各要素がnested_table2内の等しい要素と1対1でマップされている場合。

次の条件のいずれかが発生する場合、NULLが戻されます。

- nested_table1がNULLの場合。

- nested_table2がNULLで、またnested_table1がNULLでもなく空でもない場合。

- nested_table1およびnested_table2の各NULL要素をNULL以外の値に変更し、nested_table1内の各要素と等しいnested_table2内の要素の1対1マッピングを有効にすることで、nested_table1がnested_table2のサブ多重集合となっている場合。

前述の条件のいずれも発生していない場合は、FALSEが戻されます。

submultiset_condition::=

- OFキーワードはオプションであり、演算子の動作に影響しません。

- NOTキーワードはブール出力を逆にします。nested_table1がnested_table2のサブセットである場合、FALSEが戻されます。

- ネストした表の要素の型は、比較可能な型である必要があります。スカラー型以外の型の比較の可能性は、「比較条件」を参照してください。

例

次の例は、customers_demo表から、cust_address_ntabというネストした表がcust_address2_ntabというネストした表のサブ多重集合である行を選択します。

SELECT customer_id, cust_address_ntab
FROM customers_demo
WHERE cust_address_ntab SUBMULTISET OF cust_address2_ntab
ORDER BY customer_id;

この例では、表customers_demoと、データを含むネストした表の列が2つ必要です。この表およびネストした表の列を作成する方法については、「MULTISET演算子」を参照してください。

パターン一致条件

パターン一致条件は文字データを比較します。

LIKE条件

LIKE条件は、パターン一致を含むかどうかをテストします。等号演算子(=)は、ある文字値を別の文字値と一致させますが、LIKE条件は、ある文字値の一部を別の文字値と一致させます(ある値が指定したパターンの検索を、もう一方の値に対して行います)。LIKEは、入力キャラクタ・セットによって定義された文字を使用して、文字列を算出します。LIKECは、完全なUnicodeキャラクタを使用します。LIKE2は、UCS2コードポイントを使用します。LIKE4は、UCS4コードポイントを使用します。

like_condition::=

この構文は、次の特長があります。

- char1は、キャラクタ列などの文字式で、検索値と呼ばれます。

- char2は、通常はリテラルの文字式で、パターンと呼ばれます。

- esc_charは、通常はリテラルの文字式で、エスケープ文字と呼ばれます。

LIKE条件は、ほぼすべての場合において最適な選択です。次のガイドラインを使用して、ご使用の環境に有効な例を判断してください。

- LIKE2を使用して、UCS-2セマンティクスで文字列を処理します。LIKE2は、Unicode補助文字を2文字として扱います。

- LIKE4を使用して、UCS-4セマンティクスで文字列を処理します。LIKE4は、Unicode補助文字を1文字として扱います。

- LIKECを使用して、完全なUnicodeキャラクタ・セマンティクスで文字列を処理します。LIKECは、複合文字を1文字として扱います。

esc_charが指定されていない場合、デフォルトのエスケープ文字はありません。char1、char2またはesc_charのいずれかがNULLである場合、結果は不明になります。それ以外の場合は、エスケープ文字(指定されている場合)は、長さが1の文字列です。

すべての文字式(char1、char2およびesc_char)は、CHAR、VARCHAR2、NCHARまたはNVARCHAR2データ型です。文字式のデータ型が異なる場合、Oracleはすべての文字式をchar1のデータ型に変換します。

パターンは、特殊パターン一致文字を含むことができます。

- パターン中のアンダースコア(_)は、値の中の1文字(マルチバイトのキャラクタ・セットでの1バイトとは異なる)に置き換えることができます。

- パターン中のパーセント記号(%)は、値の中の0(ゼロ)を含む任意の数の文字(マルチバイトのキャラクタ・セットでの1バイトとは異なる)に置き換えることができます。ただし、パターン「%」は、NULLに置き換えることはできません。

エスケープ文字を識別するESCAPE句を使用すると、パターン中に%または_を実際の文字として含めることができます。エスケープ文字がパターンの中で文字%または_の前に指定されている場合、Oracleは、この文字を特殊パターン一致文字としてではなく、リテラル文字として解析します。また、エスケープ文字自体を検索する場合は、その文字を続けて入力してください。たとえば、アットマーク(@)がエスケープ文字である場合、@@を使用してアットマーク(@)を検索できます。

注意:
ASCII表記のアンダースコア(_)およびパーセント(%)文字のみが、パターン一致文字として認識されます。東アジア・キャラクタ・セットおよびUnicodeで表示される全角文字は、通常の文字として扱われます。

表6-8に、LIKE条件を示します。

表6-8 LIKE条件

条件の種類

操作

例

x [NOT] LIKE y
[ESCAPE 'z']

xがパターンyに一致する場合(NOTを指定すると一致しない場合)はTRUEと評価されます。y内で、文字%は0以上のNULL以外の文字を含む文字列と一致します。文字_は、任意の1文字に一致します。パーセント(%)およびアンダースコア(_)を除く任意の文字をESCAPEの後に指定できます。ワイルド・カード文字は、エスケープ文字が前に付いている場合はリテラルとして扱われます。

SELECT last_name
FROM employees
WHERE last_name
LIKE '%A\_B%' ESCAPE '\'
ORDER BY last_name;

LIKE条件を処理するために、Oracleは、パターンを1つまたは2つの文字で構成されるサブパターンに分割します。2文字のサブパターンは、エスケープ文字で始まり、もう1つの文字はパーセント(%)、アンダースコア(_)またはエスケープ文字です。

P_1、P_2、...、Pnを、このようなサブパターンと想定します。1からnのすべてのiにおいて、次の条件を満たすように検索値を部分文字列S_1、S_2、...、Snに分割できる場合、LIKE条件はTRUEです。

- Piがアンダースコア(_)の場合、Siは単一文字である。

- Piがパーセント(%)の場合、Siは任意の文字列である。

- Piがエスケープ文字で始まる2文字の場合、SiはPiの2番目の文字である。

- それ以外の場合、PiとSiは一致する。

LIKE条件では、値を定数ではなくパターンと比較できます。必ずLIKEキーワードの直後に、パターンを指定してください。たとえば、次の問合せを発行することによって、名前がRで始まるすべての従業員の給与を検索できます。

SELECT salary
FROM employees
WHERE last_name LIKE 'R%'
ORDER BY salary;

次の問合せは、LIKE条件ではなく=演算子を使用しているため、名前が「R%」のすべての従業員の給与が検索されます。

SELECT salary
FROM employees
WHERE last_name = 'R%'
ORDER BY salary;

次の問合せでは、名前が「SM%」のすべての従業員の給与が検索されます。この場合、'SM%'がLIKEキーワードの前にあるため、Oracleは、'SM%'をパターンとしてではなく、テキスト・リテラルとして解析します。

SELECT salary
FROM employees
WHERE 'SM%' LIKE last_name
ORDER BY salary;

英語の大/小文字の区別

LIKE条件および等号(=)演算子を使用する文字式を比較するすべての条件において、大/小文字は区別されます。大/小文字の区別、アクセント記号の有無の区別をせずにLIKE検索をするには、NLS_SORTおよびNLS_COMPのセッション・パラメータを設定します。

関連項目:
大/小文字およびアクセント記号の有無を区別しない言語ソートの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

索引列でのパターン一致

LIKEを使用して索引列をパターン検索する場合、パターンの先頭文字が%または_でなければ、Oracleは索引を利用して問合せのパフォーマンスを向上させることができます。この場合、Oracleはこの先頭文字によって索引をスキャンできます。パターンの先頭文字が%または_の場合、Oracleは索引をスキャンできないため、パフォーマンスは向上しません。

LIKE条件: 一般的な例

次の条件は、「Ma」で始まるすべてのlast_name値についてTRUE(真)となります。

last_name LIKE 'Ma%'

次のlast_name値はすべて、条件をTRUE(真)にします。

Mallin, Markle, Marlow, Marvins, Mavris, Matos

大/小文字は区別されるため、MA、maおよびmAで始まるlast_name値では条件がFALSE(偽)になります。

次の条件を考えます。

last_name LIKE 'SMITH_'

この条件は、次のlast_name値についてTRUE(真)となります。

SMITHE, SMITHY, SMITHS

特殊文字であるアンダースコア(_)は、last_name値の1つの文字に置き換えることができるため、この条件は「SMITH」についてFALSE(偽)となります。

ESCAPE句の例 次の例は、名前の中に文字列A_Bを持つ従業員を検索します。

SELECT last_name
FROM employees
WHERE last_name LIKE '%A\_B%' ESCAPE '\'
ORDER BY last_name;

ESCAPE句は、エスケープ文字としてバックスラッシュ(\)を識別します。パターンの中でエスケープ文字はアンダースコア(_)に先行します。これによって、Oracleは、アンダースコアを特殊なパターン一致文字としてではなく、リテラルとして解析します。

パーセント(%)なしのパターンの例 パターンに文字%が含まれていない場合、両方のオペランドの長さが同じ場合にのみ、条件がTRUE(真)になります。次の表の定義および挿入される値について考えます。

CREATE TABLE ducks (f CHAR(6), v VARCHAR2(6));
INSERT INTO ducks VALUES ('DUCK', 'DUCK');
SELECT '*'||f||'*' "char",
'*'||v||'*' "varchar"
FROM ducks;

char     varchar
-------- --------
*DUCK  * *DUCK*

Oracleは、CHAR値に空白埋めを行うため、fの値は空白埋めによって6バイトになります。vの値は空白埋めされず、4文字長のままです。

REGEXP_LIKE条件

REGEXP_LIKEはLIKE条件と似ています。ただし、REGEXP_LIKEは、単純なパターン一致を実行するLIKEとは異なり、正規表現一致を実行します。この条件は、入力キャラクタ・セットによって定義された文字を使用して、文字列を評価します。

この条件は、POSIX正規表現規格およびUnicode Regular Expression Guidelinesに準拠します。詳細は、付録D「Oracleの正規表現のサポート」を参照してください。

regexp_like_condition::=

- source_charは、検索値として使用される文字式です。通常は文字列であり、データ型はCHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBのいずれかです。

- patternは正規表現です。通常はテキスト・リテラルであり、データ型はCHAR、VARCHAR2、NCHARまたはNVARCHAR2のいずれかになります。ここには、 512バイトまで入力できます。patternのデータ型がsource_charのデータ型と異なる場合、Oracleはpatternをsource_charのデータ型に変換します。patternで指定できる演算子のリストは、付録D「Oracleの正規表現のサポート」を参照してください。

- match_parameterは、ファンクションのデフォルトの検索動作を変更するためのテキスト・リテラルです。match_parameterには次の値を1つ以上指定できます。

- 'i': 大/小文字を区別せずに検索します。

- 'c': 大/小文字を区別して検索します。

- 'n': ピリオド(.)の使用を許可します。ピリオドは、改行文字を含む任意の文字と一致するワイルド・カード文字です。このパラメータを指定しない場合、ピリオドは改行文字には一致しません。

- 'm': ソース文字列を複数行として処理します。Oracleは、^および$を、それぞれ、ソース文字列全体の開始または終了としてのみではなく、ソース文字列内の任意の場所にある任意の行の開始または終了としてとして解釈します。このパラメータを指定しない場合、Oracleはソース文字列を単一行として処理します。

- 'x'は空白文字を無視します。デフォルトでは、空白文字は空白文字として一致します。

複数の矛盾する値を指定すると、最後の値が使用されます。たとえば、'ic'を指定すると、大/小文字を区別する検索が行われます。前述以外の文字を指定すると、エラーが戻されます。

match_parameterを指定しない場合、次のようになります。

- 大/小文字を区別するかどうかのデフォルトは、NLS_SORTパラメータの値によって決まります。

- ピリオド(.)は改行文字に一致しません。

- ソース文字列は単一行として処理されます。

関連項目:

- 「LIKE条件」

- 正規表現をサポートするファンクションについては、「REGEXP_INSTR」、「REGEXP_REPLACE」および「REGEXP_SUBSTR」を参照してください。

例

次の問合せは、名前がStevenまたはStephenである(first_nameがSteで始まってenで終わり、間がvまたはphがある)従業員の姓と名を戻します。

SELECT first_name, last_name
FROM employees
WHERE REGEXP_LIKE (first_name, '^Ste(v|ph)en$')
ORDER BY first_name, last_name;

FIRST_NAME           LAST_NAME
-------------------- -------------------------
Steven               King
Steven               Markle
Stephen              Stiles

次の問合せは、姓に母音を2つ含む(大文字か小文字にかかわらず、last_nameでa、e、i、oまたはuのいずれかが2つ連続している)従業員の姓を戻します。

SELECT last_name
FROM employees
WHERE REGEXP_LIKE (last_name, '([aeiou])\1', 'i')
ORDER BY last_name;

LAST_NAME
-------------------------
De Haan
Greenberg
Khoo
Gee
Greene
Lee
Bloom
Feeney

NULL条件

NULL条件は、NULLかどうかをテストします。NULLのテストに使用する必要がある唯一の条件です。

null_condition::=

表6-9に、NULL条件を示します。

表6-9 NULL条件

条件の種類

操作

例

IS [NOT] NULL

NULLをテストします。

参照: 「NULL」

SELECT last_name
FROM employees
WHERE commission_pct
IS NULL
ORDER BY last_name;

XML条件

XML条件は、指定したXMLリソースが、指定されたパスにあるかどうかを判断します。

EQUALS_PATH条件

EQUALS_PATH条件は、Oracle XMLデータベース内のリソースが、指定されたパスのデータベースにあるかどうかを判断します。

この条件は、RESOURCE_VIEWおよびPATH_VIEWの問合せで使用します。これらのパブリック・ビューは、XMLデータベース・リポジトリ内に格納されているデータに対してSQLでアクセスするためのメカニズムを提供します。RESOURCE_VIEWには、リポジトリ内のリソースごとに行が1行あり、PATH_VIEWには、リポジトリ内の一意パスごとに行が1行あります。

equals_path_condition::=

この条件は、指定どおりパスにのみ適用されます。この条件は、UNDER_PATHと似ていますが、制限は多くなります。

path_stringには、変換する(絶対)パス名を指定します。これには、ハード・リソース・リンクまたはウィーク・リソース・リンクである構成要素を含めることができます。

オプションのcorrelation_integer引数は、EQUALS_PATH条件を補助ファンクションDEPTHおよびPATHと関連付けます。

関連項目:
「UNDER_PATH条件」、「DEPTH」および「PATH」を参照してください。

例

ビューRESOURCE_VIEWは、データベース・リポジトリ内の(res列にある)すべてのXMLリソースへの(any_path列にある)パスを計算します。次の例は、RESOURCE_VIEWビューに問い合せて、サンプル・スキーマoeにあるリソースへのパスを検索します。EQUALS_PATH条件によって、問合せは指定されたパスのみを戻します。

SELECT ANY_PATH FROM RESOURCE_VIEW
WHERE EQUALS_PATH(res, '/sys/schemas/OE/www.example.com')=1;

ANY_PATH
-----------------------------------------------
/sys/schemas/OE/www.example.com

この例と、「UNDER_PATH条件」の例を比較してください。

UNDER_PATH条件

UNDER_PATH条件は、列で指定されたリソースが、Oracle XMLデータベース・リポジトリのpath_stringで指定された特定のパスにあるかどうかを判断します。パス情報は、この条件を使用する場合に問い合せるRESOURCE_VIEWビューによって計算されます。

この条件は、RESOURCE_VIEWおよびPATH_VIEWの問合せで使用します。これらのパブリック・ビューは、XMLデータベース・リポジトリ内に格納されているデータに対してSQLでアクセスするためのメカニズムを提供します。RESOURCE_VIEWには、リポジトリ内のリソースごとに行が1行あり、PATH_VIEWには、リポジトリ内の一意パスごとに行が1行あります。

under_path_condition::=

オプションのlevels引数は、検索対象となるpath_string以下のレベル数を示します。levelsには負ではない整数を指定します。

オプションのcorrelation_integer引数は、UNDER_PATH条件を補助ファンクションPATHおよびDEPTHと関連付けます。

関連項目:
関連する条件については、「EQUALS_PATH条件」を参照してください。補助ファンクションについては、「DEPTH」および「PATH」を参照してください。

例

ビューRESOURCE_VIEWは、データベース・リポジトリ内の(res列にある)すべてのXMLリソースへの(any_path列にある)パスを計算します。次の例は、RESOURCE_VIEWビューに問い合せて、サンプル・スキーマoeにあるリソースへのパスを検索します。この問合せは、「XMLType表の例:」で作成されたXMLスキーマのパスを戻します。

SELECT ANY_PATH FROM RESOURCE_VIEW
WHERE UNDER_PATH(res, '/sys/schemas/OE/www.example.com')=1;

ANY_PATH
----------------------------------------------
/sys/schemas/OE/www.example.com/xwarehouses.xsd

JSON条件

JavaScript Object Notation(JSON)条件によって、次のようにJSONデータをテストできます。

- IS JSON条件によって、式が構文的に正しいJSONデータかどうかをテストできます。

- JSON_EXISTS条件によって、指定されたJSON値がJSONデータにあるかどうかをテストできます。

- JSON_TEXTCONTAINS条件によって、指定された文字列がJSONプロパティ値にあるかどうかをテストできます。

JSON_condition::=

注意:
Oracle Database 12cリリース1(12.1.0.2)以降、JSON条件を使用できます。

IS JSON条件

この条件を使用して、式が構文的に正しい整形式のJSONデータかどうかをテストします。

- IS JSONを指定すると、この条件は式が整形式のJSONデータである場合にTRUEを戻し、式が整形式のJSONデータでない場合にFALSEを戻します。

- IS NOT JSONを指定すると、この条件は式が整形式のJSONデータでない場合にTRUEを戻し、式が整形式のJSONデータである場合にFALSEを戻します。

is_JSON_condition::=

- exprは、評価の対象となるJSONデータを指定するために使用します。テキスト・リテラルを評価する式を指定します。exprが列である場合、列のデータ型はVARCHAR2、CLOBまたはBLOBのいずれかである必要があります。exprがnullまたは長さゼロのテキスト・リテラルを評価する場合、この条件はUNKNOWNを戻します。

- exprがデータ・タイプBLOBの列の場合、FORMAT JSONを指定する必要があります。

- STRICTを指定すると、この条件は厳密なJSON構文のみを整形式のJSONデータとみなします。LAXを指定すると、この条件は緩いJSON構文のみを整形式のJSONデータとみなします。デフォルトはLAXです。厳密なJSON構文および緩いJSON構文の詳細は、『Oracle XML DB開発者ガイド』を参照してください。

- WITH UNIQUE KEYSを指定すると、キー名が各オブジェクト内で一意である場合のみ、この条件は整形式のJSONデータとみなします。WITHOUT UNIQUE KEYSを指定すると、キー名がオブジェクト内で重複する場合、この条件は整形式のJSONデータとみなします。WITHOUT UNIQUE KEYSテストは、WITH UNIQUE KEYSテストより高速に実行されます。デフォルトはWITHOUT UNIQUE KEYSです。

例

STRICTまたはLAX JSON構文のテスト: 例 次の文は、列col1を使用した表tを作成します。

CREATE TABLE t (col1 VARCHAR2(100));

次の文は、値を表tの列col1に挿入します。

INSERT INTO t VALUES ( '[ "LIT192", "CS141", "HIS160" ]' );
INSERT INTO t VALUES ( '{ "Name": "John" }' );
INSERT INTO t VALUES ( '{ "Grade Values" : { A : 4.0, B : 3.0, C : 2.0 } }');
INSERT INTO t VALUES ( '{ "isEnrolled" : true }' );
INSERT INTO t VALUES ( '{ "isMatriculated" : False }' );
INSERT INTO t VALUES (NULL);
INSERT INTO t VALUES ('This is not well-formed JSON data');

次の文は、表tを問い合せて、整形式のJSONデータであるcol1値を戻します。STRICTおよびLAXキーワードが指定されていないため、この例はデフォルトのLAX設定を使用します。このため、この問合せは、厳密なJSON構文または緩いJSON構文を使用する値を戻します。

SELECT col1
FROM t
WHERE col1 IS JSON;

COL1
--------------------------------------------------
[ "LIT192", "CS141", "HIS160" ]
{ "Name": "John" }
{ "Grade Values" : { A : 4.0, B : 3.0, C : 2.0 } }
{ "isEnrolled" : true }
{ "isMatriculated" : False }

次の文は、表tを問い合せて、整形式のJSONデータであるcol1値を戻します。この例は、STRICT設定を指定します。このため、この問合せは、厳密なJSON構文を使用する値のみ戻します。

SELECT col1
FROM t
WHERE col1 IS JSON STRICT;

COL1
--------------------------------------------------
[ "LIT192", "CS141", "HIS160" ]
{ "Name": "John" }
{ "isEnrolled" : true }

次の文は表tを問い合せて緩いJSON構文を使用するcol1値を戻しますが、厳密なJSON構文を使用するcol1値を省略します。このため、この問合せは、緩いJSON構文で使用できる例外を含む値のみ戻します。

SELECT col1
FROM t
WHERE col1 IS NOT JSON STRICT AND col1 IS JSON LAX;

COL1
--------------------------------------------------
{ "Grade Values" : { A : 4.0, B : 3.0, C : 2.0 } }
{ "isMatriculated" : False }

一意のキーのテスト 次の文は、列col1を使用した表tを作成します。

CREATE TABLE t (col1 VARCHAR2(100));

次の文は、値を表tの列col1に挿入します。

INSERT INTO t VALUES ('{a:100, b:200, c:300}');
INSERT INTO t VALUES ('{a:100, a:200, b:300}');
INSERT INTO t VALUES ('{a:100, b : {a:100, c:300}}');

次の文は、表tを問い合せて各オブジェクト内に一意のキー名を持つ整形式のJSONデータであるcol1値を戻します。

SELECT col1 FROM t
WHERE col1 IS JSON WITH UNIQUE KEYS;

COL1
---------------------------
{a:100, b:200, c:300}
{a:100, b : {a:100, c:300}}

キー名aが2回表示され、2つの異なるオブジェクトにあるため、2番目の行が戻されます。

次の文は、表tを問い合せて、各オブジェクト内に一意のキー名があるかどうかに関係なく整形式のJSONデータであるcol1値を戻します。

SELECT col1 FROM t
WHERE col1 IS JSON WITHOUT UNIQUE KEYS;

COL1
---------------------------
{a:100, b:200, c:300}
{a:100, a:200, b:300}
{a:100, b : {a:100, c:300}}

CHECK制約としてIS JSONを使用: 例 次の文は、列po_documentにJSONデータを格納する表j_purchaseorderを作成します。この文は、CHECK制約としてIS JSON条件を使用し、整形式のJSONのみ列po_documentに格納します。

CREATE TABLE j_purchaseorder
(id RAW (16) NOT NULL,
date_loaded TIMESTAMP(6) WITH TIME ZONE,
po_document CLOB CONSTRAINT ensure_json CHECK (po_document IS JSON));

JSON_EXISTS条件

JSON_EXISTS条件を使用して、指定されたJSON値がJSONデータにあるかどうかをテストします。この条件は、JSON値が存在する場合にTRUEを戻し、JSON値が存在しない場合にFALSEを戻します。

JSON_exists_condition::=

JSON_path_expression::=

object_step::=

array_step::=

JSON_exists_on_error_clause::=

expr

この句は、評価の対象となるJSONデータを指定するために使用します。exprでは、テキスト・リテラルを評価する式を指定します。exprが列である場合、列のデータ型はVARCHAR2、CLOBまたはBLOBのいずれかである必要があります。exprがnullまたは長さゼロのテキスト・リテラルを評価する場合、この条件はUNKNOWNを戻します。

exprが厳密なまたは緩い構文を使用した整形式のJSONデータのテキスト・リテラルでない場合、この条件はデフォルトでFALSEを戻します。JSON_exists_on_error_clauseを使用して、このデフォルトの動作をオーバーライドできます。JSON_exists_on_error_clauseを参照してください。

FORMAT JSON

exprがデータ・タイプBLOBの列の場合、FORMAT JSONを指定する必要があります。

JSON_path_expression

この句を使用して、JSONパス式を指定します。この条件はパス式を使用してexprを評価し、パス式と一致する(パス式を満たす)JSON値があるかどうかを判断します。パス式はテキスト・リテラルである必要があります。

パス式は、exprで指定される式であるコンテキスト項目を表すドル記号($)から始める必要があります。ドル記号の後、オブジェクト・ステップや配列ステップの可能性があるゼロ以上のステップが続きます。この条件は、コンテキスト項目に対するパス式の最初のステップと一致するかどうかを試行します。最初のステップが一致した場合、この条件は最初のステップと一致したJSON値に対して2番目のステップと一致するかどうかを試行します。2番目のステップが一致した場合、この条件は2番目のステップと一致したJSON値に対して3番目のステップと一致するかどうかを試行し、以降も同様に続きます。最後のステップが一致した場合、この条件はTRUEを戻します。パス式のいずれかのステップが一致しなかった場合、この条件はFALSEを戻します。ドル記号とゼロのステップで構成されるパス式('$')は、全体のコンテキスト項目と一致します。

object_step この句を使用して、オブジェクト・ステップを指定します。

- simple_nameまたはcomplex_nameを使用して、プロパティ名を指定します。このプロパティ名のメンバーが評価されるJSONオブジェクトにある場合、そのメンバーのプロパティ値が一致するオブジェクト・ステップになります。それ以外の場合、一致しないオブジェクト・ステップになります。両方のタイプの名前は大/小文字を区別します。このため、アルファベットの大/小文字がオブジェクト・ステップおよびJSONデータで一致する場合のみ、一致の結果になります。
simple_nameは、英数字のみで構成され、最初の文字はアルファベット文字にする必要があります。complex_nameは、英数字のみで構成され、最初の文字は英数字にする必要があります。complex_nameは、二重引用符で囲む必要があります。

- ワイルド・カード記号であるアスタリスク(*)を使用して、すべてのプロパティ名を指定します。評価されるJSONオブジェクトに少なくとも1つのメンバーが含まれる場合、オブジェクト・ステップはすべてのメンバーの値と一致する結果になります。それ以外の場合、一致しないオブジェクト・ステップになります。

オブジェクト・ステップをJSON配列に適用すると、配列が暗黙的にアンラップされ、配列の要素がオブジェクト・ステップを使用して評価されます。これは、JSONパス式解除といいます。詳細は、『Oracle XML DB開発者ガイド』を参照してください。

評価されるJSON値がJSONオブジェクトでない場合、オブジェクト・ステップは一致しません。

array_step この句を使用して、配列ステップを指定します。

- integerを使用して、JSON配列の索引integerの要素を指定します。integer TO integerを使用して、2つのinteger索引値の間(これらの値を含む)の要素の範囲を指定します。指定された要素が評価されるJSON配列にある場合、配列ステップはそれらの要素と一致する結果になります。それ以外の場合、一致しない配列ステップになります。JSON配列の最初の要素は索引0です。

- ワイルド・カード記号であるアスタリスク(*)を使用して、JSON配列のすべての要素を指定します。評価されるJSON配列に少なくとも1つの要素が含まれる場合、JSON配列のすべての要素が一致する配列ステップになります。それ以外の場合、一致しない配列ステップになります。

評価されるJSONデータがJSON配列でない場合、データが暗黙的に配列にラップされ、配列ステップを使用して評価されます。これは、JSONパス式解除といいます。詳細は、『Oracle XML DB開発者ガイド』を参照してください。

JSON_exists_on_error_clause

この句を使用して、exprが整形式のJSONデータでない場合にこの条件で戻される値を指定します。

次の句を指定できます。

- ERROR ON ERROR - exprが整形式のJSONデータでない場合、適切なOracleエラーを戻します。

- TRUE ON ERROR - exprが整形式のJSONデータでない場合にTRUEを戻します。

- FALSE ON ERROR - exprが整形式のJSONデータでない場合にFALSEを戻します。これはデフォルトです。

例

次の文は、name列を使用した表tを作成します。

CREATE TABLE t (name VARCHAR2(100));

次の文は、値を表tの列nameに挿入します。

INSERT INTO t VALUES ('[{first:"John"}, {middle:"Mark"}, {last:"Smith"}]');
INSERT INTO t VALUES ('[{first:"Mary"}, {last:"Jones"}]');
INSERT INTO t VALUES ('[{first:"Jeff"}, {last:"Williams"}]');
INSERT INTO t VALUES ('[{first:"Jean"}, {middle:"Anne"}, {last:"Brown"}]');
INSERT INTO t VALUES (NULL);
INSERT INTO t VALUES ('This is not well-formed JSON data');

次の文は表tの列nameを問い合せて、最初の要素がプロパティ名firstのオブジェクトである配列で構成されるJSONデータを戻します。ON ERROR句は指定されません。このため、JSON_EXISTS条件は、整形式のJSONデータでない値に対してFALSEを戻します。

SELECT name FROM t
WHERE JSON_EXISTS(name, '$[0].first');

NAME
--------------------------------------------------
[{first:"John"}, {middle:"Mark"}, {last:"Smith"}]
[{first:"Mary"}, {last:"Jones"}]
[{first:"Jeff"}, {last:"Williams"}]
[{first:"Jean"}, {middle:"Anne"}, {last:"Brown"}]

次の文は表tの列nameを問い合せて、2番目の要素がプロパティ名middleのオブジェクトである配列で構成されるJSONデータを戻します。ON ERROR句は指定されません。このため、JSON_EXISTS条件は、整形式のJSONデータでない値に対してFALSEを戻します。

SELECT name FROM t
WHERE JSON_EXISTS(name, '$[1].middle');

NAME
--------------------------------------------------------------------------------
[{first:"John"}, {middle:"Mark"}, {last:"Smith"}]
[{first:"Jean"}, {middle:"Anne"}, {last:"Brown"}]

次の文は前の文と似ていますが、TRUE ON ERROR句が指定されている点が異なります。このため、JSON_EXISTS条件は、整形式のJSONデータでない値に対してTRUEを戻します。

SELECT name FROM t
WHERE JSON_EXISTS(name, '$[1].middle' TRUE ON ERROR);

NAME
--------------------------------------------------------------------------------
[{first:"John"}, {middle:"Mark"}, {last:"Smith"}]
[{first:"Jean"}, {middle:"Anne"}, {last:"Brown"}]
This is not well-formed JSON data

次の文は表tの列nameを問い合せて、プロパティ名lastのオブジェクトである要素を含む配列で構成されるJSONデータを戻します。ワイルドカード記号(*)が配列索引に指定されます。このため、配列の索引番号に関係なく、問合せは、そのようなオブジェクトを含む配列を戻します。

SELECT name FROM t
WHERE JSON_EXISTS(name, '$[*].last');

NAME
--------------------------------------------------
[{first:"John"}, {middle:"Mark"}, {last:"Smith"}]
[{first:"Mary"}, {last:"Jones"}]
[{first:"Jeff"}, {last:"Williams"}]
[{first:"Jean"}, {middle:"Anne"}, {last:"Brown"}]

JSON_TEXTCONTAINS条件

JSON_TEXTCONTAINS条件を使用して、指定された文字列がJSONプロパティ値にあるかどうかをテストします。この条件を使用して、特定のワードまたは数値でJSONデータをフィルタ処理できます。

この条件では次の引数を使用します。

- JSONデータを含む表またはビューの列。JSONデータでの使用に特化して設計されているOracle TextデータであるJSON検索索引を列に定義する必要があります。列のJSONデータの各行は、JSONドキュメントといいます。

- JSONパス式。ドキュメント内の特定のJSONオブジェクトと一致するかどうかの試行で、パス式が各JSONドキュメントに適用されます。パス式にはJSONオブジェクト・ステップのみ含むことができ、JSON配列ステップを含むことはできません。

- 文字列。この条件は、配列値を含む一致したJSONオブジェクトのすべての文字列および数値のプロパティ値内の文字列を検索します。文字列は、プロパティ値の個別のワードとして存在する必要があります。たとえば、'beth'を検索すると、文字列のプロパティ値"beth smith"と一致しますが、"elizabeth smith"とは一致しません。'10'を検索すると、数値のプロパティ値10または文字列のプロパティ値"10 main street"と一致しますが、数値のプロパティ値110または文字列のプロパティ値"102 main street"とは一致しません。

この条件は、一致する場合にTRUEを戻し、一致しない場合にFALSEを戻します。

JSON_textcontains_condition::=

JSON_path_expression::=

(JSON_TEXTCONTAINSはarray_stepをサポートしていません)

object_step::=

column

テストするJSONデータを含む表またはビューの列の名前を指定します。列のデータ型はVARCHAR2、CLOBまたはBLOBである必要があります。JSONデータでの使用に特化して設計されているOracle TextデータであるJSON検索索引を列に定義する必要があります。列の値がnullまたは長さゼロのテキスト・リテラルである場合、この条件はUNKNOWNを戻します。

列の値が厳密な構文または緩い構文を使用した整形式のJSONデータのテキスト・リテラルでない場合、この条件はFALSEを戻します。

JSON_path_expression

この句を使用して、JSONパス式を指定します。この条件はパス式を使用してcolumnを評価し、パス式と一致する(パス式を満たす)JSON値があるかどうかを判断します。パス式はテキスト・リテラルである必要があります。

パス式は、columnであるコンテキスト項目を表すドル記号($)から始める必要があります。ドル記号の後、ゼロ以上のオブジェクト・ステップが続きます。

この条件は、コンテキスト項目に対するパス式の最初のステップと一致するかどうかを試行します。最初のステップが一致した場合、この条件は最初のステップと一致したJSON値に対して2番目のステップと一致するかどうかを試行します。2番目のステップが一致した場合、この条件は2番目のステップと一致したJSON値に対して3番目のステップと一致するかどうかを試行し、以降も同様に続きます。パス式のいずれかのステップが一致しなかった場合、この条件はFALSEを戻します。最後のステップが一致し、一致した値にstringが含まれる場合、この条件はTRUEを戻します。それ以外の場合、この条件はFALSEを戻します。

ドル記号とゼロのオブジェクト・ステップで構成されるパス式('$')は、全体のコンテキスト項目と一致します。

object_step この句を使用して、オブジェクト・ステップを指定します。

- simple_nameまたはcomplex_nameを使用して、プロパティ名を指定します。このプロパティ名のメンバーが評価されるJSONオブジェクトにある場合、そのメンバーのプロパティ値が一致するオブジェクト・ステップになります。それ以外の場合、一致しないオブジェクト・ステップになります。両方のタイプの名前は大/小文字を区別します。このため、アルファベットの大/小文字がオブジェクト・ステップおよびJSONデータで一致する場合のみ、一致の結果になります。
simple_nameは、英数字のみで構成され、最初の文字はアルファベット文字にする必要があります。complex_nameは、英数字のみで構成され、最初の文字は英数字にする必要があります。complex_nameは、二重引用符で囲む必要があります。

- ワイルド・カード記号であるアスタリスク(*)を使用して、すべてのプロパティ名を指定します。評価されるJSONオブジェクトに少なくとも1つのメンバーが含まれる場合、オブジェクト・ステップはすべてのメンバーの値と一致する結果になります。それ以外の場合、一致しないオブジェクト・ステップになります。

オブジェクト・ステップをJSON配列に適用すると、配列が暗黙的にアンラップされ、配列の要素がオブジェクト・ステップを使用して評価されます。これは、JSONパス式解除といいます。詳細は、『Oracle XML DB開発者ガイド』を参照してください。

評価されるJSON値がJSONオブジェクトでない場合、オブジェクト・ステップは一致しません。

string

この条件は、stringで指定された文字列を検索します。文字列は一重引用符で囲みます。

例

次の文は、family_doc列を使用した表familiesを作成します。

CREATE TABLE families (family_doc VARCHAR2(200));

次の文は、列family_docのJSON検索索引を作成します。

CREATE INDEX ix
ON families(family_doc)
INDEXTYPE IS CTXSYS.CONTEXT
PARAMETERS ('SECTION GROUP CTXSYS.JSON_SECTION_GROUP SYNC (ON COMMIT)');

次の文は、ファミリを示すJSONドキュメントを列family_docに挿入します。

INSERT INTO families
VALUES ('{family : {id:10, ages:[40,38,12], address : {street : "10 Main Street"}}}');

INSERT INTO families
VALUES ('{family : {id:11, ages:[42,40,10,5], address : {street : "200 East Street", apt : 20}}}');

INSERT INTO families
VALUES ('{family : {id:12, ages:[25,23], address : {street : "300 Oak Street", apt : 10}}}');

次の文は、トランザクションをコミットします。

COMMIT;

次の問合せは、ドキュメントのプロパティ値に10を含むJSONドキュメントを戻します。

SELECT family_doc FROM families
WHERE JSON_TEXTCONTAINS(family_doc, '$', '10');

FAMILY_DOC
--------------------------------------------------------------------------------
{family : {id:10, ages:[40,38,12], address : {street : "10 Main Street"}}}
{family : {id:11, ages:[42,40,10,5], address : {street : "200 East Street", apt : 20}}}
{family : {id:12, ages:[25,23], address : {street : "300 Oak Street", apt : 10}}}

次の問合せは、idのプロパティ値に10を含むJSONドキュメントを戻します。

SELECT family_doc FROM families
where json_textcontains(family_doc, '$.family.id', '10');

FAMILY_DOC
--------------------------------------------------------------------------------
{family : {id:10, ages:[40,38,12], address : {street : "10 Main Street"}}}

次の問合せは、agesプロパティの値の配列に10を含むJSONドキュメントを戻します。

SELECT family_doc FROM families
WHERE JSON_TEXTCONTAINS(family_doc, '$.family.ages', '10');

FAMILY_DOC
--------------------------------------------------------------------------------
{family : {id:11, ages:[42,40,10,5], address : {street : "200 East Street", apt : 20}}}

次の問合せは、addressプロパティ値に10を含むJSONドキュメントを戻します。

SELECT family_doc FROM families
WHERE JSON_TEXTCONTAINS(family_doc, '$.family.address', '10');

FAMILY_DOC
--------------------------------------------------------------------------------
{family : {id:10, ages:[40,38,12], address : {street : "10 Main Street"}}}
{family : {id:12, ages:[25,23], address : {street : "300 Oak Street", apt : 10}}}

次の問合せは、aptプロパティ値に10を含むJSONドキュメントを戻します。

SELECT family_doc FROM families
WHERE JSON_TEXTCONTAINS(family_doc, '$.family.address.apt', '10');

FAMILY_DOC
--------------------------------------------------------------------------------
{family : {id:12, ages:[25,23], address : {street : "300 Oak Street", apt : 10}}}

複合条件

複合条件は、異なる条件の組合せを指定します。

compound_condition::=

関連項目:
NOT、ANDおよびOR条件の詳細は、「論理条件」を参照してください。

BETWEEN条件

BETWEEN条件は、1つの式の値が、他の2つの式によって定義された期間内に存在するかどうかを決定します。

between_condition::=

3つのすべての式は、数式、文字式または日時式である必要があります。SQLでは、expr1を複数回評価できます。BETWEEN式がPL/SQLで使用されている場合、expr1は1回のみ評価されることが保証されます。すべての式が同じデータ型ではない場合、式は共通のデータ型に暗黙的に変換されます。それが不可能な場合は、エラーが戻されます。

関連項目:
SQLのデータ型変換の詳細は、「暗黙的なデータ変換」を参照してください。

次の式の値について考えてみます。

expr1 NOT BETWEEN expr2 AND expr3

この式の値は次の式の値と同じです。

NOT (expr1 BETWEEN expr2 AND expr3)

さらに次の式の値について考えてみます。

expr1 BETWEEN expr2 AND expr3

この式の値は次のブール式の値と同じです。

expr2 <= expr1 AND expr1 <= expr3

expr3 < expr2の場合、この期間は空です。expr1がNULLの場合、結果はNULLとなります。expr1がNULLではない場合、値は通常はFALSEであり、キーワードNOTが使用された場合はTRUEとなります。

ブール演算子ANDを使用すると、予期しない結果となる場合があります。特に、式x AND yでは、条件x IS NULLは式の値を決定するのに十分ではありません。2番目のオペランドも評価する必要があります。2番目のオペランドの値がFALSEの場合、結果はFALSEであり、そうではない場合はNULLとなります。ANDの詳細は、「論理条件」を参照してください。

表6-10 BETWEEN条件

条件の種類

操作

例

[NOT] BETWEEN x AND y

[NOT](expr2がexpr1以下かつexpr1がexpr3以下)

SELECT * FROM employees
WHERE salary
BETWEEN 2000 AND 3000
ORDER BY employee_id;

EXISTS条件

EXISTS条件は、副問合せに行が存在するかどうかをテストします。

表6-11に、EXISTS条件を示します。

表6-11 EXISTS条件

条件の種類

操作

例

EXISTS

副問合せによって行が1行以上戻される場合には、TRUEと評価されます。

SELECT department_id
FROM departments d
WHERE EXISTS
(SELECT * FROM employees e
WHERE d.department_id
= e.department_id)
ORDER BY department_id;

IN条件

in_conditionはメンバーシップ条件です。メンバーシップ条件は、値のリストまたは副問合せ内のメンバーシップをテストします。

in_condition::=

expression_list::=

in_condition条件の上の方の書式(演算子の左辺に1つの式を指定する書式)を使用する場合は、expression_listの上の方の書式を使用する必要があります。この条件の下の方の書式(演算子の左辺に複数の式を指定する書式)を使用する場合は、expression_listの下の方の書式を使用し、各expression_list内の式は、演算子の左辺にある式と同じ数とデータ型で構成されている必要があります。expression_listには、最大1000個の式を指定できます。

expression_listの式は、INリスト内の順序で評価されるとはかぎりません。ただし、副問合せのSELECT構文のリストにある式は、指定された順序で評価されます。

関連項目:
「式のリスト」

表6-12に、IN条件の書式を示します。

表6-12 IN条件

条件の種類

操作

例

IN

メンバーとの等価性をテストします。=ANYと同じです。

SELECT * FROM employees
WHERE job_id IN
('PU_CLERK','SH_CLERK')
ORDER BY employee_id;
SELECT * FROM employees
WHERE salary IN
(SELECT salary
FROM employees
WHERE department_id =30)
ORDER BY employee_id;

NOT IN

!=ALLと同じです。メンバーのいずれかがNULLの場合には、FALSEと評価されます。

SELECT * FROM employees
WHERE salary NOT IN
(SELECT salary
FROM employees
WHERE department_id = 30)
ORDER BY employee_id;
SELECT * FROM employees
WHERE job_id NOT IN
('PU_CLERK', 'SH_CLERK')
ORDER BY employee_id;

NOT IN演算子に続くリストの中のいずれかの項目がNULLの場合は、すべての行はFALSEまたは不明(UNKNOWN)と評価されます(行は戻されません)。たとえば、次の文ではそれぞれの行に対して文字列'True'が戻されます。

SELECT 'True' FROM employees
WHERE department_id NOT IN (10, 20);

ただし、次の文では行は戻されません。

SELECT 'True' FROM employees
WHERE department_id NOT IN (10, 20, NULL);

この例で行が戻されないのは、WHERE句の条件が次のように評価されるためです。

department_id != 10 AND department_id != 20 AND department_id != null

3番目の条件でdepartment_idとNULLの比較が行われるため、この条件の結果がUNKNOWNとなり、式全体の結果がFALSE(department_idを持つ行が10または20と等しいため)となります。特に、NOT IN演算子が副問合せを参照するときは、このような動作を見逃してしまう可能性があることに注意してください。

また、NOT IN条件が、行を戻さない副問合せを参照する場合は、次のように、すべての行が戻されます。

SELECT 'True' FROM employees
WHERE department_id NOT IN (SELECT 0 FROM DUAL WHERE 1=2);

WHERE句のLEVELの制限事項: WHERE句の[NOT] IN条件の右辺が副問合せになっている場合、条件の左辺でLEVELは使用できません。ただし、FROM句の副問合せでLEVELを指定すると、同じ結果が得られます。たとえば、次の文は無効です。

SELECT employee_id, last_name FROM employees
WHERE (employee_id, LEVEL)
IN (SELECT employee_id, 2 FROM employees)
START WITH employee_id = 2
CONNECT BY PRIOR employee_id = manager_id;

ただし、次の文は、LEVEL情報を含む問合せをFROM句にカプセル化するため有効です。

SELECT v.employee_id, v.last_name, v.lev FROM
(SELECT employee_id, last_name, LEVEL lev
FROM employees v
START WITH employee_id = 100
CONNECT BY PRIOR employee_id = manager_id) v
WHERE (v.employee_id, v.lev) IN
(SELECT employee_id, 2 FROM employees);

IS OF type条件

IS OF type条件を使用すると、固有の型情報に基づくオブジェクト・インスタンスをテストできます。

is_of_type_condition::=

typeによって参照されるすべての型に対するEXECUTE権限が必要です。また、すべてのtypeは、同じ型ファミリに属している必要があります。

exprがNULLである場合、この条件はNULLと評価されます。exprがNULLでない場合、次に示す環境では、この条件はTRUE(NOTキーワードを指定した場合はFALSE)と評価されます。

- exprの型が、typeリストで指定された型のサブタイプであり、ONLYを指定していない場合

- exprの型がtypeリストで明示的に指定されている場合。

exprは、相関変数を伴うVALUEファンクションの書式をとる場合があります。

次の例では、「置換可能な表および列のサンプル:」の型階層に基づいて作成されたサンプル表oe.personsを使用します。この例は、IS OF type条件を使用して、問合せを特定のサブタイプに制限します。

SELECT * FROM persons p
WHERE VALUE(p) IS OF TYPE (employee_t);

NAME                     SSN
----------------------------
Joe                    32456
Tim                     5678

SELECT * FROM persons p
WHERE VALUE(p) IS OF (ONLY part_time_emp_t);

NAME                     SSN
----------------------------
Tim                     5678

7 ファンクション

ファンクションは、データ項目を操作し、結果を戻すという点で演算子に似ています。ファンクションと演算子は引数を指定する書式が異なります。次の書式によって、ファンクションでは0(ゼロ)以上の引数を操作できます。

function(argument, argument, ...)

引数を指定しないファンクションは疑似列に似ています(第3章「疑似列」を参照)。ただし、疑似列は、通常、結果セット内の各行に対して異なる値を戻しますが、引数を指定しないファンクションは、各行に対して同じ値を戻します。

この章では、次の内容を説明します。

- SQLファンクション

- 単一行ファンクション

- 数値ファンクション

- 文字値を戻す文字ファンクション

- 数値を戻す文字ファンクション

- キャラクタ・セット・ファンクション

- 日時ファンクション

- 一般的な比較ファンクション

- 変換ファンクション

- ラージ・オブジェクト・ファンクション

- 収集ファンクション

- 階層ファンクション

- データ・マイニング・ファンクション

- XMLファンクション

- JSONファンクション

- エンコーディング・ファンクションおよびデコーディング・ファンクション

- NULL関連ファンクション

- 環境ファンクションおよび識別子ファンクション

- 集計ファンクション

- 分析ファンクション

- オブジェクト参照ファンクション

- モデル・ファンクション

- OLAPファンクション

- データ・カートリッジ・ファンクション

- ユーザー定義ファンクション

SQLファンクション

SQLファンクションは、Oracle Databaseに組み込まれており、適切なSQL文で使用できます。SQLファンクションと、PL/SQLで記述されたユーザー定義ファンクションを混同しないでください。

SQLファンクションが戻す値のデータ型以外のデータ型の引数でSQLファンクションをコールすると、OracleはSQLファンクションを実行する前に、その引数を必要なデータ型に変換します。

関連項目:
ユーザー・ファンクションの詳細は、「ユーザー定義ファンクション」を参照してください。データ型の暗黙的な変換の詳細は、「データ変換」を参照してください。

SQLファンクションのNULL ほとんどのスカラー・ファンクションは、NULL引数を指定するとNULLを返します。NVLファンクションを使用した場合、NULLが発生したときに値を戻すことができます。たとえば、式NVL(commission_pct,0)は、commission_pctがNULLの場合は0(ゼロ)を戻し、commission_pctがNULLでなければその値を戻します。

集計ファンクションによるNULLの処理の詳細は、「集計ファンクション」を参照してください。

SQLファンクションの構文 SQLファンクションの構文図では、データ型とともに引数が示されています。SQL構文にパラメータfunctionが指定されている場合は、この項で説明するファンクションの1つに置き換えます。ファンクションは、引数のデータ型および戻り値によってグループ化されています。

注意:
LOB列にSQLファンクションを適用すると、Oracle Databaseは、SQLおよびPL/SQLの処理中に一時LOBを作成します。ご使用のアプリケーションの一時LOBを格納するために、十分な一時表領域が割り当てられていることを確認してください。

注意:
NLS_COMPとNLS_SORTの設定を組み合せた値によって、文字をソートおよび比較するルールが決まります。ご使用のデータベースのNLS_COMPにLINGUISTICが設定されている場合、この章のエンティティはすべてNLS_SORTパラメータによって指定されるルールに従って解釈されます。NLS_COMPがLINGUISTICに設定されていない場合、ファンクションはNLS_SORTの設定に関係なく解釈されます。NLS_SORTは、明示的に設定できます。明示的に設定されていない場合は、NLS_LANGUAGEから導出されます。これらの設定の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

次に、ファンクションのカテゴリを表す構文を示します。

function::=

single_row_function::=

次の項に、前述の図のユーザー定義ファンクション以外の各グループにおける組込みSQLファンクションを示します。すべての組込みSQLファンクションを、アルファベット順に説明します。

関連項目:
「ユーザー定義ファンクション」および「CREATE FUNCTION」を参照してください。

単一行ファンクション

単一行ファンクションは、問合せ対象の表またはビューの各行に対して1つの結果行を戻します。これらのファンクションは、SELECT構文のリスト、WHERE句、START WITH句、CONNECT BY句およびHAVING句に指定できます。

数値ファンクション

数値ファンクションは入力として数値を受け取り、結果として数値を戻します。数値ファンクションのほとんどは、38桁(10進)のNUMBER値を戻します。超越関数(COS、COSH、EXP、LN、LOG、SIN、SINH、SQRT、TANおよびTANH)は、36桁(10進)の値を戻します。超越関数のACOS、ASIN、ATAN、ATAN2は、30桁(10進)の値を戻します。数値ファンクションを次に示します。

ABS
ACOS
ASIN
ATAN
ATAN2
BITAND
CEIL
COS
COSH
EXP
FLOOR
LN
LOG
MOD
NANVL
POWER
REMAINDER
ROUND(数値)
SIGN
SIN
SINH
SQRT
TAN
TANH
TRUNC(数値)
WIDTH_BUCKET

文字値を戻す文字ファンクション

文字値を戻す文字ファンクションは、特に指定がないかぎり、次のデータ型の値を戻します。

- 入力引数がCHARまたはVARCHAR2の場合、戻される値はVARCHAR2になります。

- 入力引数がNCHARまたはNVARCHAR2の場合、戻される値はNVARCHAR2になります。

ファンクションによって戻される値の長さは、戻されるデータ型の最大長によって制限されます。

- CHARまたはVARCHAR2型の値を戻すファンクションの戻り値の長さが制限を超えた場合、Oracle Databaseは戻り値から制限を超えた部分を切り捨てて、エラー・メッセージを表示せずにその結果を戻します。

- CLOB型の値を戻すファンクションの戻り値の長さが制限を超えた場合、Oracleはエラーを表示し、データを戻しません。

文字値を戻す文字ファンクションを次に示します。

CHR
CONCAT
INITCAP
LOWER
LPAD
LTRIM
NCHR
NLS_INITCAP
NLS_LOWER
NLS_UPPER
NLSSORT
REGEXP_REPLACE
REGEXP_SUBSTR
REPLACE
RPAD
RTRIM
SOUNDEX
SUBSTR
TRANSLATE
TRANSLATE ... USING
TRIM
UPPER

数値を戻す文字ファンクション

数値を戻す文字ファンクションの引数には、すべての文字データ型を指定できます。数値を戻す文字ファンクションを次に示します。

ASCII
INSTR
LENGTH
REGEXP_COUNT
REGEXP_INSTR

キャラクタ・セット・ファンクション

キャラクタ・セット・ファンクションは、キャラクタ・セットの情報を戻します。キャラクタ・セット・ファンクションを次に示します。

NLS_CHARSET_DECL_LEN
NLS_CHARSET_ID
NLS_CHARSET_NAME

日時ファンクション

日時ファンクションは、日付(DATE)、タイムスタンプ(TIMESTAMP、TIMESTAMP WITH TIME ZONE、TIMESTAMP WITH LOCAL TIME ZONE)および期間(INTERVAL DAY TO SECOND、INTERVAL YEAR TO MONTH)の値を操作します。

一部の日付ファンクションは、OracleのDATEデータ型(ADD_MONTHS、CURRENT_DATE、LAST_DAY、NEW_TIMEおよびNEXT_DAY)用に設計されています。これらのファンクションの引数にタイムスタンプ値を指定すると、Oracle Databaseは入力された型をDATE値に内部的に変換し、DATE値を戻します。ただし、MONTHS_BETWEENファンクションは数値を戻し、ROUNDおよびTRUNCファンクションはタイムスタンプ値または期間値を受け入れません。

その他の日時ファンクションは、3種類のすべてのデータ型(日付、タイムスタンプ、期間)を受け入れ、それらのいずれかのデータ型の値を戻すように設計されています。

SYSDATE、SYSTIMESTAMP、CURRENT_TIMESTAMPなどの、現在のシステム日時情報を戻す日時ファンクションはすべて、SQL文で参照される回数に関係なく、SQL文ごとに1回評価されます。

日時ファンクションを次に示します。

ADD_MONTHS
CURRENT_DATE
CURRENT_TIMESTAMP
DBTIMEZONE
EXTRACT(日時)
FROM_TZ
LAST_DAY
LOCALTIMESTAMP
MONTHS_BETWEEN
NEW_TIME
NEXT_DAY
NUMTODSINTERVAL
NUMTOYMINTERVAL
ORA_DST_AFFECTED
ORA_DST_CONVERT
ORA_DST_ERROR
ROUND(日付)
SESSIONTIMEZONE
SYS_EXTRACT_UTC
SYSDATE
SYSTIMESTAMP
TO_CHAR(日時)
TO_DSINTERVAL
TO_TIMESTAMP
TO_TIMESTAMP_TZ
TO_YMINTERVAL
TRUNC(日付)
TZ_OFFSET

一般的な比較ファンクション

一般的な比較ファンクションは、値の集合から最大値または最小値(あるいはその両方)を決定します。一般的な比較ファンクションを次に示します。

GREATEST
LEAST

変換ファンクション

変換ファンクションは、あるデータ型から他のデータ型に値を変換します。一般に、ファンクション名はdatatype TO datatypeの書式で指定されます。最初のデータ型は入力データ型です。2番目のデータ型は出力データ型です。SQL変換ファンクションを次に示します。

ASCIISTR
BIN_TO_NUM
CAST
CHARTOROWID
COMPOSE
CONVERT
DECOMPOSE
HEXTORAW
NUMTODSINTERVAL
NUMTOYMINTERVAL
RAWTOHEX
RAWTONHEX
ROWIDTOCHAR
ROWIDTONCHAR
SCN_TO_TIMESTAMP
TIMESTAMP_TO_SCN
TO_BINARY_DOUBLE
TO_BINARY_FLOAT
TO_BLOB
TO_CHAR(文字)
TO_CHAR(日時)
TO_CHAR(数値)
TO_CLOB
TO_DATE
TO_DSINTERVAL
TO_LOB
TO_MULTI_BYTE
TO_NCHAR(文字)
TO_NCHAR(日時)
TO_NCHAR(数値)
TO_NCLOB
TO_NUMBER
TO_SINGLE_BYTE
TO_TIMESTAMP
TO_TIMESTAMP_TZ
TO_YMINTERVAL
TREAT
UNISTR

ラージ・オブジェクト・ファンクション

ラージ・オブジェクト・ファンクションは、LOBを操作します。ラージ・オブジェクト・ファンクションを次に示します。

BFILENAME
EMPTY_BLOB、EMPTY_CLOB

収集ファンクション

収集ファンクションは、ネストした表およびVARRAYを操作します。SQL収集ファンクションを次に示します。

CARDINALITY
COLLECT
POWERMULTISET
POWERMULTISET_BY_CARDINALITY
SET

階層ファンクション

階層ファンクションは、階層パス情報を結果セットに適用します。階層ファンクションを次に示します。

SYS_CONNECT_BY_PATH

データ・マイニング・ファンクション

データ・マイニング・ファンクションは、Oracle Data Miningを使用してデータにスコアを付けます。このファンクションでは、マイニング・モデル・スキーマ・オブジェクトをデータに適用できます。また、分析句を実行することで、動的にデータをマイニングすることもできます。

データ・マイニング・ファンクションを次に示します。

CLUSTER_DETAILS
CLUSTER_DISTANCE
CLUSTER_ID
CLUSTER_PROBABILITY
CLUSTER_SET
FEATURE_DETAILS
FEATURE_ID
FEATURE_SET
FEATURE_VALUE
PREDICTION
PREDICTION_BOUNDS
PREDICTION_COST
PREDICTION_DETAILS
PREDICTION_PROBABILITY
PREDICTION_SET

関連項目:

- スコアリングの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

- Oracle Data Miningについては、『Oracle Data Mining概要』を参照してください。

XMLファンクション

XMLファンクションは、XML文書またはフラグメントを操作または戻します。これらのファンクションで使用する引数はANSI/ISO/IEC SQL規格の中には定義されていませんが、World Wide Web Consortium(W3C)標準の中に定義されています。ファンクションで実行される処理および操作は、該当するW3C標準で定義されています。次の表に、これらのXML関連の各引数に適用されるルールとガイドラインについて、W3C標準の該当する項へのリンクを示します。これらのXMLファンクションのいずれかをSQL文で使用する場合、該当するW3Cの構文に準拠していない引数を使用するとエラーになります。データベース列の値として使用できる文字が、XMLでも有効であるとはかぎらないことに注意してください。

構文要素

W3C標準のURL

value_expr

http://www.w3.org/TR/2006/REC-xml-20060816

Xpath_string

http://www.w3.org/TR/1999/REC-xpath-19991116

XQuery_string

http://www.w3.org/TR/2007/REC-xquery-semantics-20070123/
http://www.w3.org/TR/xquery-update-10/

namespace_string

http://www.w3.org/TR/2006/REC-xml-names-20060816/

identifier

http://www.w3.org/TR/2006/REC-xml-20060816/#NT-Nmtoken

出力の書式設定など、これらのファンクションを使用したXMLデータの選択および問合せの詳細は、『Oracle XML DB開発者ガイド』を参照してください。

SQL XMLファンクションを次に示します。

APPENDCHILDXML
DELETEXML
DEPTH
EXISTSNODE
EXTRACT(XML)
EXTRACTVALUE
INSERTCHILDXML
INSERTCHILDXMLAFTER
INSERTCHILDXMLBEFORE
INSERTXMLAFTER
INSERTXMLBEFORE
PATH
SYS_DBURIGEN
SYS_XMLAGG
SYS_XMLGEN
UPDATEXML
XMLAGG
XMLCAST
XMLCDATA
XMLCOLATTVAL
XMLCOMMENT
XMLCONCAT
XMLDIFF
XMLELEMENT
XMLEXISTS
XMLFOREST
XMLISVALID
XMLPARSE
XMLPATCH
XMLPI
XMLQUERY
XMLROOT
XMLSEQUENCE
XMLSERIALIZE
XMLTABLE
XMLTRANSFORM

JSONファンクション

JavaScript Object Notation(JSON)ファンクションは、JSONデータから値を戻します。JSONファンクションは次のとおりです。

JSON_QUERY
JSON_TABLE
JSON_VALUE

エンコーディング・ファンクションおよびデコーディング・ファンクション

エンコーディング・ファンクションおよびデコーディング・ファンクションでは、データベース内のデータを調査およびデコードできます。エンコーディング・ファンクションおよびデコーディング・ファンクションを次に示します。

DECODE
DUMP
ORA_HASH
STANDARD_HASH
VSIZE

NULL関連ファンクション

NULL関連ファンクションは、NULL処理を簡単にします。NULL関連ファンクションを次に示します。

COALESCE
LNNVL
NANVL
NULLIF
NVL
NVL2

環境ファンクションおよび識別子ファンクション

環境ファンクションおよび識別子ファンクションは、インスタンスとセッションの情報を提供します。環境ファンクションおよび識別子ファンクションを次に示します。

CON_DBID_TO_ID
CON_GUID_TO_ID
CON_NAME_TO_ID
CON_UID_TO_ID
ORA_INVOKING_USER
ORA_INVOKING_USERID
SYS_CONTEXT
SYS_GUID
SYS_TYPEID
UID
USER
USERENV

集計ファンクション

集計ファンクションは、単一行に基づく結果行を戻すのではなく、行のグループに基づく単一結果行を戻します。集計ファンクションは、SELECT構文のリスト、ORDER BYおよびHAVING句に指定できます。集計ファンクションは、通常、SELECT文のGROUP BY句で使用され、この句の中で問合せ対象の表またはビューの行がグループ化されます。GROUP BY句を含む問合せでは、SELECT構文のリストの要素は、集計ファンクション、GROUP BY式、定数またはこれらのいずれかを含む式になります。Oracleは、集計ファンクションを行の各グループに適用し、各グループに単一の結果行を戻します。

GROUP BY句を指定しないと、SELECT構文のリスト内の集計ファンクションは、問合せ対象の表またはビューのすべての行に適用されます。HAVING句で集計ファンクションを使用して、グループを出力しないこともできます。このとき、出力は、問合せ対象の表またはビューの各行の値ではなく、集計ファンクションの結果に基づきます。

関連項目:
問合せおよび副問合せにおけるGROUP BY句およびHAVING句の詳細は、「GROUP BY句の使用例:」および「HAVING句」を参照してください。

単一の引数を指定する多くの集計ファンクションには、次の句があります。

- DISTINCT句およびUNIQUE句(これらは同義)を指定すると、集計ファンクションは引数式の重複行を排除した値のみを考慮します。簡単に説明するために、この章の集計ファンクションの構文図ではキーワードDISTINCTを使用しています。

- ALL句を指定すると、集計ファンクションは重複行を含むすべての値を考慮します。

たとえば、1、1、1、3の平均値はDISTINCTでは2となります。ALLでの平均値は1.5となります。どの句も指定しない場合、デフォルトでALLが使用されます。

集計ファンクションには、分析ファンクションの構文の一部であるwindowing_clauseを使用できるものがあります。この句の詳細は、「windowing_clause」を参照してください。この項の最後に示す集計ファンクションのリストでは、windowing_clauseを使用できるファンクションにアスタリスク(*)が付いています。

COUNT(*)、GROUPING、およびGROUPING_IDを除くすべての集計ファンクションは、NULLを無視します。集計ファンクションに対する引数にNVLファンクションを使用して、NULLをある値で置き換えることができます。COUNTおよびREGR_COUNTはNULLを戻しません。数字または0(ゼロ)を戻します。その他の集計ファンクションでは、データ・セットに行がない場合、または集計ファンクションに対する引数としてNULLを持つ行のみがある場合はNULLを戻します。

集計ファンクションMIN、MAX、SUM、AVG、COUNT、VARIANCEおよびSTDDEVの後に、KEEPキーワードを指定すると、FIRSTまたはLASTファンクションと組み合せて使用することができ、与えられたソート指定に対して、FIRSTまたはLASTとしてランク付けされた一連の行の一連の値を操作できます。詳細は、「FIRST」を参照してください。

集計ファンクションはネストできます。たとえば、次の例では、サンプル・スキーマhrのすべての部門における最高額の給与の平均を計算します。

SELECT AVG(MAX(salary))
FROM employees
GROUP BY department_id;

AVG(MAX(SALARY))
----------------
10926.3333

この計算では、GROUP BY句(department_id)で定義されているグループごとの内部集計(MAX(salary))を評価し、その結果をもう一度集計しています。

次に示す集計ファンクションのリストでは、windowing_clauseを使用できるファンクションにはアスタリスク(*)が付いています。

APPROX_COUNT_DISTINCT
AVG
COLLECT
CORR
CORR_*
COUNT
COVAR_POP
COVAR_SAMP
CUME_DIST
DENSE_RANK
FIRST
GROUP_ID
GROUPING
GROUPING_ID
LAST
LISTAGG
MAX
MEDIAN
MIN
PERCENT_RANK
PERCENTILE_CONT
PERCENTILE_DISC
RANK
REGR_ (Linear Regression) Functions
STATS_BINOMIAL_TEST
STATS_CROSSTAB
STATS_F_TEST
STATS_KS_TEST
STATS_MODE
STATS_MW_TEST
STATS_ONE_WAY_ANOVA
STATS_T_TEST_*
STATS_WSR_TEST
STDDEV
STDDEV_POP
STDDEV_SAMP
SUM
SYS_OP_ZONE_ID
SYS_XMLAGG
VAR_POP
VAR_SAMP
VARIANCE
XMLAGG

分析ファンクション

分析ファンクションは、行のグループに基づいて集計値を計算します。各グループに対して複数の行を戻す点で、集計ファンクションと異なります。行のグループをウィンドウといい、analytic_clauseで定義されます。各行に対して、行のスライディング・ウィンドウが定義されます。このウィンドウによって、カレント行の計算に使用される行の範囲が決定されます。ウィンドウの大きさは、行の物理数値または時間などのロジカル・インターバルに基づきます。

分析ファンクションは、問合せで最後に実行される演算(最後のORDER BY句を除く)の集合です。すべての結合およびすべてのWHERE、GROUP BYおよびHAVING句は、分析ファンクションが処理される前に実行されます。そのため、分析ファンクションは、SELECT構文のリストまたはORDER BY句のみに指定できます。

通常、分析ファンクションは、累積集計、移動集計、センター集計およびレポート集計の実行に使用されます。

analytic_function::=

analytic_clause::=

query_partition_clause::=

order_by_clause::=

windowing_clause ::=

次に、この構文のセマンティクスを示します。

analytic_function

分析ファンクションの名前を指定します(セマンティクスの説明の後に示す分析ファンクションのリストを参照)。

引数

分析ファンクションには引数を0から3個指定します。引数には、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を指定できます。Oracleは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換します。個々のファンクションに特に指定がないかぎり、戻り型もその引数のデータ型となります。

関連項目:
数値の優先順位の詳細は、「数値の優先順位」を参照してください。暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

analytic_clause

OVER analytic_clause句は、ファンクションが問合せ結果セットを操作することを示します。この句は、FROM、WHERE、GROUP BYおよびHAVING句の後に計算されます。SELECT構文のリストのこの句またはORDER BY句に分析ファンクションを指定できます。分析ファンクションに基づいて、問合せの結果をフィルタするには、これらのファンクションを親問合せ内でネストした後、ネストされた副問合せの結果をフィルタします。

analytic_clauseの注意事項: analytic_clauseには、次の注意事項があります。

- analytic_clauseのどの部分にも、分析ファンクションを指定して分析ファンクションをネストできません。ただし、副問合せで分析ファンクションを指定して、別の分析ファンクションを計算することはできます。

- OVER analytic_clauseには、組込み分析ファンクションと同様に、ユーザー定義の分析ファンクションを指定できます。「CREATE FUNCTION」を参照してください。

query_partition_clause

PARTITION BY句を使用すると、1つ以上のvalue_exprに基づいて、問合せ結果セットをグループに分割できます。この句を省略すると、ファンクションは問合せ結果セットのすべての行を単一のグループとして扱います。

分析ファンクションでquery_partition_clauseを使用するには、構文の上位ブランチ(カッコなし)を使用します。この句をモデルの問合せ(model_column_clauses内)またはパーティション化された外部結合(outer_join_clause内)で使用するには、構文の下位ブランチ(カッコ付き)を使用します。

同じまたは異なるPARTITION BYキーで、同じ問合せに複数の分析ファンクションを指定できます。

問い合せているオブジェクトにパラレル属性があり、query_partition_clauseで分析ファンクションを指定する場合は、ファンクションの計算もパラレル化されます。

有効な値のvalue_exprは、定数、列、非分析ファンクション、ファンクション式、またはこれらのいずれかを含む式です。

order_by_clause

order_by_clauseを使用すると、パーティション内でのデータの順序付け方法を指定できます。すべての分析ファンクションに対して、各キーがvalue_exprで定義され、順番付け順序で修飾された複数キーのパーティション内での値を順番付けできます。

各ファンクションには、複数の順序式を指定できます。これは、2番目の式が最初の式にある同一値との間の関連性を変換できるため、値をランク付けするファンクションを使用する場合に特に有効です。

order_by_clauseの結果が複数行に対して同一値になる場合は常に、ファンクションは次のように動作します。

- CUME_DIST、DENSE_RANK、NTILE、PERCENT_RANKおよびRANKは、各行に対して同じ結果を戻します。

- ROW_NUMBERは、order_by_clauseに基づいた同順位がある場合でも、各行に異なる値を割り当てます。この値は行が処理される順序に基づくため、ORDER BYによって全体的な順序が保証されていない場合には非決定的になることがあります。

- 他のすべての分析ファンクションでは、ウィンドウの指定によって結果が異なります。RANGEキーワードを使用して論理ウィンドウを指定する場合、ファンクションは各行に同じ結果を戻します。ROWSキーワードを使用して物理ウィンドウを指定する場合、結果は非決定的になります。

ORDER BY句の制限事項: ORDER BY句には次の制限事項があります。

- order_by_clauseを分析ファンクションで使用する場合、式(expr)が必要です。SIBLINGSキーワードは無効です(これは、階層問合せでのみ有効です)。位置(position)および列別名(c_alias)も無効です。それ以外で使用する場合、このorder_by_clauseは、問合せまたは副問合せ全体を順序付ける場合に使用するものと同じです。

- RANGEキーワードを使用する分析ファンクションでは、次のいずれかのウィンドウを指定する場合に、ORDER BY句で複数のソート・キーを使用できます。

- RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW。この短縮形は、RANGE UNBOUNDED PRECEDINGです。

- RANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWING。

- RANGE BETWEEN CURRENT ROW AND CURRENT ROW。

- RANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING。

この4つ以外のウィンドウ境界では、分析ファンクションのORDER BY句でソート・キーを1つしか持てません。この制限事項は、ROWキーワードで指定したウィンドウ境界には適用されません。

ASC | DESC 順番付け順序(昇順または降順)を指定します。デフォルトはASCです。

NULLS FIRST | NULLS LAST NULL値を含む戻された行が順序の最初にくるか、最後にくるかを指定します。

NULLS LASTは昇順のデフォルトで、NULLS FIRSTは降順のデフォルトです。

分析ファンクションは、常に、ファンクションのorder_by_clauseで指定された順序で行を操作します。ただし、ファンクションのorder_by_clauseは結果の順序を保証しません。最終結果の順序を保証するには、問合せのorder_by_clauseを使用してください。

関連項目:
この句の詳細は、「SELECT」の「order_by_clause」を参照してください。

windowing_clause

一部の分析ファンクションでは、windowing_clauseを使用できます。7-16ページに示す分析ファンクションのリストでは、windowing_clauseを使用できるファンクションにアスタリスク(*)が付いています。

ROWS | RANGE これらのキーワードは、各行に対して、ファンクションの結果の計算に使用されるウィンドウ(行の物理集合または論理集合)を定義します。ファンクションは、ウィンドウのすべての行に適用されます。ウィンドウは、問合せ結果セット内またはパーティションの上から下まで移動します。

- ROWSは、物理単位(行)でウィンドウを指定します。

- RANGEは、論理オフセットとしてウィンドウを指定します。

order_by_clauseを指定しないと、この句を指定できません。RANGE句で定義したウィンドウ境界には、order_by_clauseで指定できる式が1つのみのものもあります。「ORDER BY句の制限事項:」を参照してください。

分析ファンクションが論理オフセットで戻す値は、常に決定的なものです。ただし、分析ファンクションが物理オフセットで戻す値は、順序式の結果が一意の順序にならないかぎり、非決定的な結果を生成することがあります。order_by_clauseに複数の列を指定して、結果の順序を一意にする必要があります。

BETWEEN ... AND BETWEEN ... AND句を使用すると、ウィンドウにスタート・ポイントおよびエンド・ポイントを指定できます。最初の式(ANDの前)はスタート・ポイントを定義し、2番目の式(ANDの後)はエンド・ポイントを定義します。

BETWEENを省略してエンド・ポイントを1つのみ指定すると、Oracleはそれをスタート・ポイントとみなし、デフォルトでカレント行をエンド・ポイントに指定します。

UNBOUNDED PRECEDING UNBOUNDED PRECEDINGを指定すると、パーティションの最初の行で、ウィンドウが開始します。これはスタート・ポイントの指定で、エンド・ポイントの指定としては使用できません。

UNBOUNDED FOLLOWING UNBOUNDED FOLLOWINGを指定すると、パーティションの最後の行で、ウィンドウが終了します。これはエンド・ポイントの指定で、スタート・ポイントの指定としては使用できません。

CURRENT ROW スタート・ポイントとして、CURRENT ROWでウィンドウがカレント行または値(それぞれROWまたはRANGEを指定したかどうかに基づく)で開始することを指定します。この場合、value_expr PRECEDINGをエンド・ポイントにできません。

エンド・ポイントとして、CURRENT ROWでウィンドウがカレント行または値(それぞれROWまたはRANGEを指定したかどうかに基づく)で終了することを指定します。この場合、value_expr FOLLOWINGをスタート・ポイントにできません。

value_expr PRECEDINGまたはvalue_expr FOLLOWING RANGEまたはROWに対して、次のことがいえます。

- value_expr FOLLOWINGがスタート・ポイントの場合、エンド・ポイントはvalue_expr FOLLOWINGである必要があります。

- value_expr PRECEDINGがエンド・ポイントの場合、スタート・ポイントはvalue_expr PRECEDINGである必要があります。

数値形式の時間間隔で定義されている論理ウィンドウを定義する場合、変換ファンクションを使用する必要があります。

関連項目:
数値時間から間隔への変換の詳細は、「NUMTOYMINTERVAL」および「NUMTODSINTERVAL」を参照してください。

ROWSを指定した場合、次のことがいえます。

- value_exprは物理オフセットになります。これは定数または式であり、正数値に評価する必要があります。

- value_exprがスタート・ポイントの一部の場合、エンド・ポイントの前にある行に評価する必要があります。

RANGEを指定した場合、次のことがいえます。

- value_exprは論理オフセットになります。これは、正数値または期間リテラルに評価する定数または式である必要があります。期間リテラルの詳細は、「リテラル」を参照してください。

- order_by_clauseには、式を1つのみ指定できます。

- value_exprが数値に対して評価を行う場合、ORDER BY exprは数値データ型またはDATEデータ型である必要があります。

- value_exprが間隔値に対して評価を行う場合、ORDER BY exprはDATEデータ型である必要があります。

windowing_clauseを完全に省略した場合、デフォルトでRANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROWになります。

分析ファンクションは、通常、データ・ウェアハウス環境で使用されます。次に示す分析ファンクションのリストでは、windowing_clauseを含む完全な構文を使用できるファンクションには、アスタリスク(*)が付いています。

AVG *
CLUSTER_DETAILS
CLUSTER_DISTANCE
CLUSTER_ID
CLUSTER_PROBABILITY
CLUSTER_SET
CORR *
COUNT *
COVAR_POP *
COVAR_SAMP *
CUME_DIST
DENSE_RANK
FEATURE_DETAILS
FEATURE_ID
FEATURE_SET
FEATURE_VALUE
FIRST
FIRST_VALUE *
LAG
LAST
LAST_VALUE *
LEAD
LISTAGG
MAX *
MEDIAN
MIN *
NTH_VALUE *
NTILE
PERCENT_RANK
PERCENTILE_CONT
PERCENTILE_DISC
PREDICTION
PREDICTION_COST
PREDICTION_DETAILS
PREDICTION_PROBABILITY
PREDICTION_SET
RANK
RATIO_TO_REPORT
REGR_ (Linear Regression) Functions *
ROW_NUMBER
STDDEV *
STDDEV_POP *
STDDEV_SAMP *
SUM *
VAR_POP *
VAR_SAMP *
VARIANCE *

関連項目:
これらのファンクションおよびその使用方法の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

オブジェクト参照ファンクション

オブジェクト参照ファンクションは、指定されたオブジェクト型のオブジェクトへの参照となるREF値を操作します。オブジェクト参照ファンクションを次に示します。

DEREF
MAKE_REF
REF
REFTOHEX
VALUE

関連項目:
REFデータ型の詳細は、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。

モデル・ファンクション

モデル・ファンクションは、SELECT文のmodel_clauseでのみ使用できます。新しいモデル・ファンクションを次に示します。

CV
ITERATION_NUMBER
PRESENTNNV
PRESENTV
PREVIOUS

OLAPファンクション

OLAPファンクションは、ディメンション・オブジェクトからのデータを2次元のリレーショナル形式で戻します。OLAPファンクションを次に示します。

CUBE_TABLE

データ・カートリッジ・ファンクション

データ・カートリッジ・ファンクションは、データ・カートリッジ開発者にとって有用なものです。データ・カートリッジ・ファンクションを次に示します。

DATAOBJ_TO_MAT_PARTITION
DATAOBJ_TO_PARTITION

「次へ」をクリックして、最初のSQLファンクションに進みます。

ABS

構文

用途

ABSは、nの絶対値を戻します。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

例

次の例では、-15の絶対値を戻します。

SELECT ABS(-15) "Absolute"
FROM DUAL;

Absolute
----------
15

ACOS

構文

用途

ACOSは、nのアーク・コサインを戻します。引数nは-1から1の範囲で、ファンクションによって戻される値は0からπ(ラジアン)の範囲です。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。引数がBINARY_FLOATの場合、このファンクションはBINARY_DOUBLEを戻します。それ以外の場合、引数と同じ数値データ型を戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

例

次の例では、.3のアーク・コサインを戻します。

SELECT ACOS(.3)"Arc_Cosine"
FROM DUAL;

Arc_Cosine
----------
1.26610367

ADD_MONTHS

構文

用途

ADD_MONTHSは、日付dateに月数integerを加えて戻します。月は、セッション・パラメータNLS_CALENDARによって定義されます。引数dateには、日時値、または暗黙的にDATEに変換可能な任意の値を指定できます。引数integerには、整数、または暗黙的に整数に変換可能な任意の値を指定できます。戻り型は、dateのデータ型に関係なく常にDATEです。dateが月の最終日の場合、または結果の月の日数がdateの日付コンポーネントよりも少ない場合、戻される値は結果の月の最終日となります。それ以外の場合、結果にはdateと同じ日付コンポーネントが含まれます。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

例

次の例では、サンプル表employeesのhire_date後の月を戻します。

SELECT TO_CHAR(ADD_MONTHS(hire_date, 1), 'DD-MON-YYYY') "Next month"
FROM employees
WHERE last_name = 'Baer';

Next Month
-----------
07-JUL-2002

APPENDCHILDXML

注意:
APPENDCHILDXMLファンクションは、非推奨です。これは、下位互換性を保つためにのみサポートされています。そのかわりに、XQuery Updateを使用してください。詳細は、『Oracle XML DB開発者ガイド』を参照してください。

構文

用途

APPENDCHILDXMLは、ユーザー指定の値を、XPath式で指定したノードの子としてターゲットXMLに追加します。

- XMLType_instanceは、XMLTypeのインスタンスです。

- XPath_stringは、1つ以上の子ノードが追加されるノードを1つ以上指定するXPath式です。先頭にスラッシュを付けて絶対XPath_stringを指定したり、先頭のスラッシュを省略して相対XPath_stringを指定できます。先頭のスラッシュを省略した場合、相対パスのコンテキストは、デフォルトでルート・ノードに設定されます。

- value_exprは、XMLTypeの1つ以上のノードを指定します。これは文字列に変換する必要があります。

- オプションのnamespace_stringは、XPath_stringのネームスペース情報を提供します。このパラメータは、VARCHAR2型である必要があります。

関連項目:
このファンクションの詳細は、『Oracle XML DB開発者ガイド』を参照してください。

例

次の例では、/Buildingノードの値が「Rented」の場合に、/Ownerノードをoe.warehouses表のwarehouse_specの/Warehouse/Buildingノードに追加します。

UPDATE warehouses
SET warehouse_spec = APPENDCHILDXML(warehouse_spec, 'Warehouse/Building',
XMLType('<Owner>Grandco</Owner>'))
WHERE EXTRACTVALUE(warehouse_spec, '/Warehouse/Building') = 'Rented';

SELECT warehouse_id,
warehouse_name,
EXTRACTVALUE(warehouse_spec, '/Warehouse/Building/Owner') "Prop.Owner"
FROM warehouses
WHERE EXISTSNODE(warehouse_spec, '/Warehouse/Building/Owner') = 1;

WAREHOUSE_ID WAREHOUSE_NAME  Prop.Owner
------------ --------------- ----------
2 San Francisco   Grandco
3 New Jersey      Grandco

APPROX_COUNT_DISTINCT

注意:
APPROX_COUNT_DISTINCTファンクションは、Oracle Database 12cリリース1(12.1.0.2)から使用可能です。

構文

用途

APPROX_COUNT_DISTINCTは、exprの異なる値を含む適切な数の行を戻します。

このファンクションは、exprの異なる値を含む正確な数の行を戻すCOUNT (DISTINCT expr)ファンクションの代替機能を提供します。APPROX_COUNT_DISTINCTは、正確な結果とわずかに誤差がありますが、COUNTよりはるかに高速に大量のデータを処理します。

exprでは、BFILE、BLOB、CLOB、LONG、LONG RAWまたはNCLOB以外のスカラー・データ型の列を指定できます。

APPROX_COUNT_DISTINCTは、exprのnull値を含む行を無視します。このファンクションは、NUMBERを戻します。

例

次の文は、manager_idの異なる値を使用した適切な数の行を戻します。

SELECT APPROX_COUNT_DISTINCT(manager_id) AS "Active Managers"
FROM employees;

Active Managers
---------------
18

次の文は、各製品の適切な数の異なる顧客を戻します。

SELECT prod_id, APPROX_COUNT_DISTINCT(cust_id) AS "Number of Customers"
FROM sales
GROUP BY prod_id
ORDER BY prod_id;

PROD_ID Number of Customers
---------- -------------------
13                2516
14                2030
15                2105
16                2367
17                2093
18                2975
19                2630
20                3791
. . .

ASCII

構文

用途

ASCIIは、charの最初の文字の、データベース・キャラクタ・セットでの10進表記を戻します。

charのデータ型は、CHAR、VARCHAR2、NCHARまたはNVARCHAR2です。戻り値のデータ型はNUMBERです。データベース・キャラクタ・セットが7ビットのASCIIの場合、このファンクションはASCII値を戻します。データベース・キャラクタ・セットがEBCDICコードの場合、このファンクションはEBCDIC値を戻します。このファンクションと一致するEBCDIC文字ファンクションは存在しません。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。

関連項目:
詳細は、「データ型の比較規則」を参照してください。

例

次の例では、姓が文字「L」で始まり、ASCII表記が76の従業員を戻します。

SELECT last_name
FROM employees
WHERE ASCII(SUBSTR(last_name, 1, 1)) = 76
ORDER BY last_name;

LAST_NAME
-------------------------
Ladwig
Landry
Lee
Livingston
Lorentz

ASCIISTR

構文

用途

ASCIISTRは、任意のキャラクタ・セットの文字列、または文字列に変換する式を引数として取り、データベース・キャラクタ・セットのASCII文字列を戻します。ASCII文字以外は、\xxxxという書式に変換されます。xxxxは、UTF-16のコード単位です。

関連項目:
Unicodeキャラクタ・セットおよびキャラクタ・セマンティクスの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

例

次の例では、テキスト文字列「ABÄCDE」をASCII文字列で戻します。

SELECT ASCIISTR('ABÄCDE')
FROM DUAL;

ASCIISTR('
----------
AB\00C4CDE

ASIN

構文

用途

ASINは、nのアーク・サインを戻します。引数nは-1から1の範囲で、ファンクションによって戻される値は-π/2からπ/2(ラジアン)の範囲です。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。引数がBINARY_FLOATの場合、このファンクションはBINARY_DOUBLEを戻します。それ以外の場合、引数と同じ数値データ型を戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

例

次の例では、.3のアーク・サインを戻します。

SELECT ASIN(.3) "Arc_Sine"
FROM DUAL;

Arc_Sine
----------
.304692654

ATAN

構文

用途

ATANは、nのアーク・タンジェントを戻します。引数nの範囲に制限はなく、ファンクションによって戻される値は-π/2からπ/2(ラジアン)の範囲です。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。引数がBINARY_FLOATの場合、このファンクションはBINARY_DOUBLEを戻します。それ以外の場合、引数と同じ数値データ型を戻します。

関連項目:
ATAN2ファンクションの詳細は、「ATAN2」を参照してください。暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

例

次の例では、.3のアーク・タンジェントを戻します。

SELECT ATAN(.3) "Arc_Tangent"
FROM DUAL;

Arc_Tangent
----------
.291456794

ATAN2

構文

用途

ATAN2は、n1およびn2のアーク・タンジェントを戻します。引数n1の範囲に制限はなく、n1とn2の符号により、ファンクションによって戻される値は-πからπ(ラジアン)の範囲です。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。いずれかの引数がBINARY_FLOATまたはBINARY_DOUBLEの場合、このファンクションはBINARY_DOUBLEを戻します。それ以外の場合、NUMBERを戻します。

関連項目:
ATANファンクションの詳細は、「ATAN」を参照してください。暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

例

次の例では、.3および.2のアーク・タンジェントを戻します。

SELECT ATAN2(.3, .2) "Arc_Tangent2"
FROM DUAL;

Arc_Tangent2
------------
.982793723

AVG

構文

関連項目:
構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

AVGは、exprの平均値を戻します。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

DISTINCTを指定する場合は、analytic_clauseのquery_partition_clauseのみ指定できます。order_by_clauseおよびwindowing_clauseは指定できません。

関連項目:
exprの書式の詳細は、「SQL式」を参照してください。「集計ファンクション」も参照してください。

集計の例

次の例では、hr.employees表にあるすべての従業員の平均給与を計算します。

SELECT AVG(salary) "Average"
FROM employees;

Average
--------------
6461.83178

分析の例

次の例では、employees表の各従業員について、ある期間内に雇用された従業員の平均給与を所属別に計算します。

SELECT manager_id, last_name, hire_date, salary,
AVG(salary) OVER (PARTITION BY manager_id ORDER BY hire_date
ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS c_mavg
FROM employees
ORDER BY manager_id, hire_date, salary;

MANAGER_ID LAST_NAME                 HIRE_DATE     SALARY     C_MAVG
---------- ------------------------- --------- ---------- ----------
100 De Haan                   13-JAN-01      17000      14000
100 Raphaely                  07-DEC-02      11000 11966.6667
100 Kaufling                  01-MAY-03       7900 10633.3333
100 Hartstein                 17-FEB-04      13000 9633.33333
100 Weiss                     18-JUL-04       8000 11666.6667
100 Russell                   01-OCT-04      14000 11833.3333
100 Partners                  05-JAN-05      13500 13166.6667
100 Errazuriz                 10-MAR-05      12000 11233.3333
. . .

BFILENAME

構文

用途

BFILENAMEは、サーバーのファイル・システムの物理LOBバイナリ・ファイルに対応付けられているBFILEロケータを戻します。

- 'directory'は、実際にファイルが存在するサーバーのファイル・システム上のフルパス名に対する別名となるデータベース・オブジェクトです。

- 'filename'は、サーバーのファイル・システムにあるファイルの名前です。

SQL文、PL/SQL文、DBMS_LOBパッケージまたはOCIの操作で、これらをBFILENAMEへの引数として使用するには、まずディレクトリ・オブジェクトを作成し、BFILE値を物理ファイルと対応付ける必要があります。

次の2つの方法で、このファンクションを使用できます。

- DML文でBFILE列を初期化する場合

- プログラム・インタフェースで、BFILEロケータに値を割り当てることによってBFILEデータにアクセスする場合

ディレクトリの引数の大/小文字は区別されます。データ・ディクショナリ内に存在する名前と同じ名前でディレクトリ・オブジェクト名を指定しているかを確認する必要があります。たとえば、CREATE DIRECTORY文で、大/小文字を組み合せた識別子を引用符で囲んで使用してAdminディレクトリ・オブジェクトを作成すると、BFILENAMEファンクションを使用する場合、ディレクトリ・オブジェクトを'Admin'として指定する必要があります。filename引数は、ご使用のオペレーティング・システムの大/小文字および記号の表記規則に従って指定する必要があります。

関連項目:

- LOBの詳細およびBFILEデータの検出例については、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』および『Oracle Call Interfaceプログラマーズ・ガイド』を参照してください。

- 「CREATE DIRECTORY」

例

次の例では、サンプル表pm.print_mediaに行を挿入します。BFILENAMEファンクションを使用して、/demo/schema/product_mediaディレクトリにある、サーバーのファイル・システムのバイナリ・ファイルを識別します。次の例では、PMスキーマでのディレクトリのデータベース・オブジェクトmedia_dirの作成方法を示します。

CREATE DIRECTORY media_dir AS '/demo/schema/product_media';

INSERT INTO print_media (product_id, ad_id, ad_graphic)
VALUES (3000, 31001, BFILENAME('MEDIA_DIR', 'modem_comp_ad.gif'));

BIN_TO_NUM

構文

用途

BIN_TO_NUMは、ビット・ベクトルを同等の数値に変換します。このファンクションの各引数は、ビット・ベクトルのビットを表します。このファンクションは、引数として、任意の数値データ型、または暗黙的にNUMBERに変換可能な数値以外のデータ型を取ります。各exprは、0または1に評価される必要があります。このファンクションはOracleのNUMBER値を戻します。

BIN_TO_NUMは、データ・ウェアハウスのアプリケーションで、グルーピング・セットを使用して、マテリアライズド・ビューから対象グループを検索する場合に有効です。

関連項目:

- GROUPING SETS構文の詳細は、「group_by_clause」を参照してください。

- 暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

- データ集計の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

例

次の例では、バイナリの値を数値に変換します。

SELECT BIN_TO_NUM(1,0,1,0)
FROM DUAL;

BIN_TO_NUM(1,0,1,0)
-------------------
10

次の例では、3つの値を1つのバイナリの値に変換し、BIN_TO_NUMを使用してこのバイナリを数値に変換します。この例では、PL/SQL宣言を使用して元の値を指定します。これらの値は、通常は実際のデータソースから導出されます。

SELECT order_status
FROM orders
WHERE order_id = 2441;

ORDER_STATUS
------------
5
DECLARE
warehouse NUMBER := 1;
ground    NUMBER := 1;
insured   NUMBER := 1;
result    NUMBER;
BEGIN
SELECT BIN_TO_NUM(warehouse, ground, insured) INTO result FROM DUAL;
UPDATE orders SET order_status = result WHERE order_id = 2441;
END;
/
PL/SQL procedure successfully completed.

SELECT order_status
FROM orders
WHERE order_id = 2441;

ORDER_STATUS
------------
7

この逆の(1つの列値から複数の値を抽出する)プロセスの詳細は、「BITAND」の例を参照してください。

BITAND

構文

用途

BITANDファンクションは、その入力と出力をビットのベクトルとして扱います。出力は、入力のビット単位ANDになります。

expr1およびexpr2の型はNUMBERであり、結果はNUMBER型になります。BITANDのいずれかの引数がNULLの場合、結果はNULLになります。

引数は、-(2(n-1)) .. ((2(n-1))-1)の範囲にする必要があります。引数をこの範囲外にすると、結果は未定義になります。

結果は、いくつかのステップで計算されます。まず、それぞれの引数Aが値SIGN(A)*FLOOR(ABS(A))に置き換えられます。この変換では、各引数の小数点以下が切り捨てられます。次に、整数値となったそれぞれの引数Aが、nビットの2の補数のバイナリ整数値に変換されます。ビット単位AND演算を使用して、2つのビット値が組み合せられます。最後に、生成されたnビットの2の補数値がNUMBERに変換されます。

BITANDファンクションの注意事項

- BITANDの現行の実装では、n = 128が定義されています。

- PL/SQLは、入力と結果の型がすべてBINARY_INTEGERで、n = 32のBITANDのオーバーロードをサポートしています。

例

次の例では、数値6(バイナリ1,1,0)と数値3(バイナリ0,1,1)にAND演算を実行します。

SELECT BITAND(6,3)
FROM DUAL;

BITAND(6,3)
-----------
2

これは、6と3のバイナリの値を示す次の例と同じです。BITANDファンクションは、バイナリの値の有効桁のみで演算を実行します。

SELECT BITAND(
BIN_TO_NUM(1,1,0),
BIN_TO_NUM(0,1,1)) "Binary"
FROM DUAL;

Binary
----------
2

単一の列値における複数の値のエンコードの詳細は、「BIN_TO_NUM」の例を参照してください。

次の例では、サンプル表oe.ordersのorder_status列で複数の選択項目を1つの数値内の個別のビットとしてエンコードします。たとえば、まだ倉庫にある発注は、バイナリの値001(10進値1)で表されます。陸上輸送で発送される発注は、バイナリの値010(10進値2)で表されます。保険がかけられた荷物は、バイナリの値100(10進値4)で表されます。この例では、DECODEファンクションを使用して、order_status値の3つのビットのそれぞれに2つの値(ビットがオンの場合の値とビットがオフの場合の値)が示されています。

SELECT order_id, customer_id, order_status,
DECODE(BITAND(order_status, 1), 1, 'Warehouse', 'PostOffice') "Location",
DECODE(BITAND(order_status, 2), 2, 'Ground', 'Air') "Method",
DECODE(BITAND(order_status, 4), 4, 'Insured', 'Certified') "Receipt"
FROM orders
WHERE sales_rep_id = 160
ORDER BY order_id;

ORDER_ID CUSTOMER_ID ORDER_STATUS Location   Method Receipt
---------- ----------- ------------ ---------- ------ ---------
2416         104            6 PostOffice Ground Insured
2419         107            3 Warehouse  Ground Certified
2420         108            2 PostOffice Ground Certified
2423         145            3 Warehouse  Ground Certified
2441         106            5 Warehouse  Air    Insured
2455         145            7 Warehouse  Ground Insured

Location列では、まずBITANDによってorder_statusと1(バイナリ001)が比較されます。比較されるのは重要なビット値のみです。したがって、右端のビットが1であるバイナリの値(奇数)は正と評価され、1が戻されます。偶数の場合は0(ゼロ)が戻されます。DECODEファンクションでは、BITANDによって戻された値と1が比較されます。両方とも1の場合、場所はWarehouse(倉庫)になります。これらの値が異なる場合、場所はPostOffice(郵便局)になります。

Method列とReceipt列は、同様に計算されます。Methodでは、BITANDによってorder_statusと2(バイナリ010)にAND演算が実行されます。Receiptでは、BITANDによってorder_statusと4(バイナリ100)にAND演算が実行されます。

CARDINALITY

構文

用途

CARDINALITYは、ネストした表内の要素数を戻します。戻り型は、NUMBERです。ネストした表が空であるかNULLの集合である場合、CARDINALITYはNULLを戻します。

例

次の例では、pm.print_mediaサンプル表のネストした表の列ad_textdocs_ntab内の要素数を示します。

SELECT product_id, CARDINALITY(ad_textdocs_ntab) cardinality
FROM print_media
ORDER BY product_id;

PRODUCT_ID CARDINALITY
---------- -----------
2056           3
2268           3
3060           3
3106           3

CAST

構文

用途

CASTは、ある組込みデータ型またはコレクション型の値を、別の組込みデータ型またはコレクション型の値に変換します。

CASTを使用すると、ある組込みデータ型またはコレクション型の値を、別の組込みデータ型またはコレクション型に変換できます。名前のないオペランド(日付や副問合せの結果セットなど)または名前付きのコレクション(VARRAYやネストした表など)を型互換のデータ型または名前付きコレクションにキャストできます。type_nameは、組込みデータ型またはコレクション型の名前である必要があり、オペランドは、組込みデータ型であるか、またはその値がコレクション値である必要があります。

オペランドでは、exprは組込みデータ型、コレクション型またはANYDATA型のインスタンスのいずれかです。exprがANYDATA型のインスタンスである場合、CASTはANYDATAインスタンスの値を抽出し、その値がキャスト対象の型と一致する場合はその値を戻し、一致しない場合はNULLを戻します。MULTISETは、副問合せの結果セットを取り、コレクション値を戻すようにOracle Databaseに通知します。表7-1に、どの組込みデータ型が、どの組込みデータ型にキャストできるかを示します。(CASTは、LONG型、LONG RAW型、またはOracleが提供する型をサポートしていません。)

CASTは、LOBデータ型のいずれも直接的にサポートしていません。CASTを使用して、CLOB値を文字データ型に変換するか、BLOB値をRAWデータ型に変換すると、データベースは暗黙的にLOB値を文字またはRAWデータに変換し、結果値を明示的にターゲットのデータ型にキャストします。結果の値がターゲットのデータ型よりも大きい場合、データベースからエラーが返されます。

CAST ... MULTISETを使用してコレクション値を取得すると、CASTファンクションに渡される問合せ内のSELECT構文のリストのアイテムは、ターゲットのコレクション要素型に対応する属性型に変換されます。

表7-1 組込みデータ型のキャスト

BINARY_FLOAT、BINARY_DOUBLEから

CHAR、VARCHAR2から

NUMBERから

DATETIME/INTERVALから(注1)

RAWから

ROWID、UROWIDから(注2)

NCHAR、NVARCHAR2から

BINARY_FLOAT、BINARY_DOUBLEへ

X

X

X

--

--

--

X

CHAR、VARCHAR2へ

X

X

X

X

X

X

--

NUMBERへ

X

X

X

--

--

--

X

DATE、TIMESTAMP、INTERVALへ

--

X

--

X

--

--

--

RAWへ

--

X

--

--

X

--

--

ROWID、UROWIDへ

--

X

--

--

--

X

--

NCHAR、NVARCHAR2へ

X

--

X

X

X

X

X

注1: Datetime/Intervalには、DATE、TIMESTAMP、TIMESTAMP WITH TIMEZONE、INTERVAL DAY TO SECONDおよびINTERVAL YEAR TO MONTHが含まれます。

注2: UROWIDが索引構成表のROWIDの値を含んでいる場合、UROWIDをROWIDにキャストすることはできません。

名前付きコレクション型を別の名前付きコレクション型にキャストするには、両方のコレクションの要素が同じ型である必要があります。

関連項目:
Oracle Databaseで暗黙的にコレクション型データを文字データに変換する方法については、「暗黙的なデータ変換」および「データ変換のセキュリティ上の考慮事項」を参照してください。

副問合せの結果セットが複数行に評価される可能性がある場合は、MULTISETキーワードを指定する必要があります。副問合せの結果である行は、それらの行がキャストされたコレクション値の要素を形成します。MULTISETキーワードを省略すると、副問合せはスカラー副問合せとして処理されます。

組込みデータ型の例

次の例では、CASTファンクションをスカラー・データ型とともに使用します。最初の例は、セッション・パラメータNLS_TIMESTAMP_FORMATに指定された書式モデルを使用して、テキストをタイムスタンプ値に変換します。このNLSパラメータに依存しないようにする場合は、2番目の例のようにTO_DATEを使用できます。

SELECT CAST('22-OCT-1997'
AS TIMESTAMP WITH LOCAL TIME ZONE)
FROM DUAL;

SELECT CAST(TO_DATE('22-Oct-1997', 'DD-Mon-YYYY')
AS TIMESTAMP WITH LOCAL TIME ZONE)
FROM DUAL;

前述の例では、TO_DATEでテキストをDATEに変換し、CASTでDATEをTIMESTAMP WITH LOCAL TIME ZONEに変換して、セッション・タイムゾーン(SESSIONTIMEZONE)の日付を求めています。

SELECT product_id, CAST(ad_sourcetext AS VARCHAR2(30)) text
FROM print_media
ORDER BY product_id;

コレクションの例

後に続くCASTの例は、サンプルの注文入力スキーマoeで使用されているcust_address_typに基づいています。

CREATE TYPE address_book_t AS TABLE OF cust_address_typ;
/
CREATE TYPE address_array_t AS VARRAY(3) OF cust_address_typ;
/
CREATE TABLE cust_address (
custno            NUMBER,
street_address    VARCHAR2(40),
postal_code       VARCHAR2(10),
city              VARCHAR2(30),
state_province    VARCHAR2(10),
country_id        CHAR(2));

CREATE TABLE cust_short (custno NUMBER, name VARCHAR2(31));

CREATE TABLE states (state_id NUMBER, addresses address_array_t);

次の例では、副問合せをキャストします。

SELECT s.custno, s.name,
CAST(MULTISET(SELECT ca.street_address,
ca.postal_code,
ca.city,
ca.state_province,
ca.country_id
FROM cust_address ca
WHERE s.custno = ca.custno)
AS address_book_t)
FROM cust_short s
ORDER BY s.custno;

CASTでは、VARRAY型の列をネストした表に変換します。

SELECT CAST(s.addresses AS address_book_t)
FROM states s
WHERE s.state_id = 111;

次の例では、この後に示す例で使用するオブジェクトを作成します。

CREATE TABLE projects
(employee_id NUMBER, project_name VARCHAR2(10));

CREATE TABLE emps_short
(employee_id NUMBER, last_name VARCHAR2(10));

CREATE TYPE project_table_typ AS TABLE OF VARCHAR2(10);
/

次のMULTISET式の例は、前述のオブジェクトを使用します。

SELECT e.last_name,
CAST(MULTISET(SELECT p.project_name
FROM projects p
WHERE p.employee_id = e.employee_id
ORDER BY p.project_name)
AS project_table_typ)
FROM emps_short e
ORDER BY e.last_name;

CEIL

構文

用途

CEILは、n以上の最も小さい整数を戻します。数値nは常に、0 <= f < 1とn = k - fなどのように、整数kと正の小数部fの差として記述できます。CEILの値は整数kです。したがって、CEILの値がnそのものになるのは、nが小数部を持たない整数である場合にかぎられます。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。「FLOOR」も参照してください。

例

次の例では、指定した注文の合計以上である最小の整数を戻します。

SELECT order_total, CEIL(order_total)
FROM orders
WHERE order_id = 2434;

ORDER_TOTAL CEIL(ORDER_TOTAL)
----------- -----------------
268651.8            268652

CHARTOROWID

構文

用途

CHARTOROWIDは、CHAR、VARCHAR2、NCHARまたはNVARCHAR2データ型の値をROWIDデータ型に変換します。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。

関連項目:
詳細は、「データ型の比較規則」を参照してください。

例

次の例では、文字表記のROWIDをROWIDに変換します。(実際のROWIDは、各データベース・インスタンスによって異なります。)

SELECT last_name
FROM employees
WHERE ROWID = CHARTOROWID('AAAFd1AAFAAAABSAA/');

LAST_NAME
-------------------------
Greene

CHR

構文

用途

CHRは、データベース・キャラクタ・セットまたは各国語キャラクタ・セット(USING NCHAR_CSを指定している場合)の中のnに等しい2進数を持つ文字を、VARCHAR2値として戻します。

シングルバイト・キャラクタ・セットの場合、Oracle Databaseは、n > 256に対してn mod 256に等しい2進数を戻します。マルチバイト・キャラクタ・セットの場合、nは1つのコードポイント全体として解決される必要があります。無効なコード・ポイントは検証されず、無効なコード・ポイントを指定した場合の結果はそのコード・ポイントによって異なります。

このファンクションは、引数として、NUMBER値、または暗黙的にNUMBER型に変換可能な任意の値を取り、文字を戻します。

注意:
(オプションのUSING NCHAR_CS句の有無にかかわらず)CHRファンクションを使用すると、ASCIIおよびEBCDICベースのマシン・アーキテクチャ間で移植不可能なコードが戻されます。

関連項目:
暗黙的な変換の詳細は、「NCHR」および表2-10「暗黙的な型変換のマトリックス」を参照してください。

例

次の例は、データベース・キャラクタ・セットがWE8ISO8859P1と定義されているASCIIベースのマシンで実行されています。

SELECT CHR(67)||CHR(65)||CHR(84) "Dog"
FROM DUAL;

Dog
---
CAT

キャラクタ・セットがWE8EBCDIC1047のEBCDICベースのマシンでも同じ結果を戻すには、前述の例を次のように修正する必要があります。

SELECT CHR(195)||CHR(193)||CHR(227) "Dog"
FROM DUAL;

Dog
---
CAT

マルチバイト・キャラクタ・セットの場合、このように連結しても異なる結果となります。たとえば、a1a2(a1は1つ目のバイト、a2は2つ目のバイト)という16進数の値を持つマルチバイト文字の場合、nに対して「a1a2」に等しい10進数、つまり41378を指定する必要があります。

SELECT CHR(41378)
FROM DUAL;

次の例のように、a1に等しい10進数とa2に等しい10進数を連結させて指定することはできません。

SELECT CHR(161)||CHR(162)
FROM DUAL;

ただし、次の例のように、マルチバイト文字を連結するマルチバイトのコードポイント全体を連結することは可能です。この例では、a1a2とa1a3の16進数を持つマルチバイト文字を連結しています。

SELECT CHR(41378)||CHR(41379)
FROM DUAL;

次の例では、各国語キャラクタ・セットがUTF16であると仮定します。

SELECT CHR (196 USING NCHAR_CS)
FROM DUAL;

CH
--
Ä

CLUSTER_DETAILS

構文

cluster_details::=

分析の構文

cluster_details_analytic::=

mining_attribute_clause::=

mining_analytic_clause::=

関連項目:
mining_analytic_clauseの構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

CLUSTER_DETAILSは、選択内に含まれる各行のクラスタ詳細を返します。戻り値は、最も高確率のクラスタまたは指定されたcluster_idの属性について記述したXML文字列です。

topN

topNに値を指定すると、このファンクションはクラスタ割当てに最も影響力のあるN個の属性(スコア)を返します。topNを指定しないと、このファンクションは最も影響力のある5つの属性を返します。

DESC、ASC、またはABS

返される属性が重みで順序付けされます。属性の重みは、その属性がクラスタ割当てに与える正の影響または負の影響を表します。正の重みは、割当ての可能性が増加することを示します。負の重みは、割当ての可能性が減少することを示します。

デフォルトでは、CLUSTER_DETAILSは、最大の正の重みを持つ属性を返します(DESC)。ASCを指定すると、最大の負の重みを持つ属性が返されます。ABSを指定すると、正負を問わずに、最大の重みを持つ属性が返されます。結果は、絶対値が高いほうから低いほうに順序付けされています。重みがゼロの属性は、出力に含まれません。

構文の選択

CLUSTER_DETAILSは、2つの方法のどちらかでデータにスコアを付けます。1つ目の方法では、データにマイニング・モデル・オブジェクトを適用します。もう1つの方法では、1つ以上の一時マイニング・モデルを作成してから適用する分析句を実行して、動的にデータをマイニングします。構文または分析構文を選択します。

- 構文 — 事前に定義されたモデルでデータにスコアを付ける場合は、最初の構文を使用します。クラスタリング・モデルの名前を指定します。

- 分析構文 — 事前定義されたモデルなしで、データにスコアを付ける場合は、分析構文を使用します。INTO n (nは、計算するクラスタの数)と、mining_analytic_clause (複数のモデル構築のためにデータをパーティション化する必要がある場合に指定します)を含めます。mining_analytic_clauseは、query_partition_clauseと、order_by_clauseをサポートします。("analytic_clause::="を参照。)

mining_attribute_clause

mining_attribute_clauseは、スコアの予測子として使用する列の属性を特定します。このファンクションが分析構文で起動された場合は、これらの予測子が一時モデルの構築にも使用されます。mining_attribute_clauseは、PREDICTIONファンクションと同様に動作します。("mining_attribute_clause::="を参照。)

関連項目:

- スコアリングの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

- クラスタリングの詳細は、『Oracle Data Mining概要』を参照してください。

例について:
次に示す例は、Data Miningのサンプル・プログラムからの抜粋です。サンプル・プログラムの詳細は、Oracle Data Miningユーザーズ・ガイドの「付録A」を参照してください。

例

この例では、顧客ID 100955のクラスタ割当てに対して、最大の影響が(20%以上の確率で)ある属性が一覧表示されます。この問合せは、CLUSTER_DETAILSファンクションとCLUSTER_SETファンクションを起動します。これにより、クラスタリング・モデルem_sh_clus_sampleを適用します。

SELECT S.cluster_id, probability prob,
CLUSTER_DETAILS(em_sh_clus_sample, S.cluster_id, 5 USING T.*) det
FROM
(SELECT v.*, CLUSTER_SET(em_sh_clus_sample, NULL, 0.2 USING *) pset
FROM mining_data_apply_v v
WHERE cust_id = 100955) T,
TABLE(T.pset) S
ORDER BY 2 DESC;

CLUSTER_ID  PROB DET
---------- ----- ---------------------------------------------------------------------------------
14 .6761 <Details algorithm="Expectation Maximization" cluster="14">
<Attribute name="AGE" actualValue="51" weight=".676" rank="1"/>
<Attribute name="HOME_THEATER_PACKAGE" actualValue="1" weight=".557" rank="2"/>
<Attribute name="FLAT_PANEL_MONITOR" actualValue="0" weight=".412" rank="3"/>
<Attribute name="Y_BOX_GAMES" actualValue="0" weight=".171" rank="4"/>
<Attribute name="BOOKKEEPING_APPLICATION" actualValue="1" weight="-.003"rank="5"/>
</Details>

3 .3227 <Details algorithm="Expectation Maximization" cluster="3">
<Attribute name="YRS_RESIDENCE" actualValue="3" weight=".323" rank="1"/>
<Attribute name="BULK_PACK_DISKETTES" actualValue="1" weight=".265" rank="2"/>
<Attribute name="EDUCATION" actualValue="HS-grad" weight=".172" rank="3"/>
<Attribute name="AFFINITY_CARD" actualValue="0" weight=".125" rank="4"/>
<Attribute name="OCCUPATION" actualValue="Crafts" weight=".055" rank="5"/>
</Details>

分析の例

この例では、共通の特徴に基づいて、顧客のデータベースを4つのセグメントに分割します。このクラスタリングのファンクションは、事前に定義されたクラスタリング・モデルなしでクラスタを計算してスコアを返します。

SELECT * FROM (
SELECT cust_id,
CLUSTER_ID(INTO 4 USING *) OVER () cls,
CLUSTER_DETAILS(INTO 4 USING *) OVER () cls_details
FROM mining_data_apply_v)
WHERE cust_id <= 100003
ORDER BY 1;

CUST_ID CLS CLS_DETAILS
------- --- -----------------------------------------------------------------------------------
100001   5 <Details algorithm="K-Means Clustering" cluster="5">
<Attribute name="FLAT_PANEL_MONITOR" actualValue="0" weight=".349" rank="1"/>
<Attribute name="BULK_PACK_DISKETTES" actualValue="0" weight=".33" rank="2"/>
<Attribute name="CUST_INCOME_LEVEL" actualValue="G: 130\,000 - 149\,999" weight=".291"
rank="3"/>
<Attribute name="HOME_THEATER_PACKAGE" actualValue="1" weight=".268" rank="4"/>
<Attribute name="Y_BOX_GAMES" actualValue="0" weight=".179" rank="5"/>
</Details>

100002   6 <Details algorithm="K-Means Clustering" cluster="6">
<Attribute name="CUST_GENDER" actualValue="F" weight=".945" rank="1"/>
<Attribute name="CUST_MARITAL_STATUS" actualValue="NeverM" weight=".856" rank="2"/>
<Attribute name="HOUSEHOLD_SIZE" actualValue="2" weight=".468" rank="3"/>
<Attribute name="AFFINITY_CARD" actualValue="0" weight=".012" rank="4"/>
<Attribute name="CUST_INCOME_LEVEL" actualValue="L: 300\,000 and above" weight=".009"
rank="5"/>
</Details>

100003   7 <Details algorithm="K-Means Clustering" cluster="7">
<Attribute name="CUST_MARITAL_STATUS" actualValue="NeverM" weight=".862" rank="1"/>
<Attribute name="HOUSEHOLD_SIZE" actualValue="2" weight=".423" rank="2"/>
<Attribute name="HOME_THEATER_PACKAGE" actualValue="0" weight=".113" rank="3"/>
<Attribute name="AFFINITY_CARD" actualValue="0" weight=".007" rank="4"/>
<Attribute name="CUST_ID" actualValue="100003" weight=".006" rank="5"/>
</Details>

CLUSTER_DISTANCE

構文

cluster_distance::=

分析の構文

cluster_distance_analytic::=

mining_attribute_clause::=

mining_analytic_clause::=

関連項目:
mining_analytic_clauseの構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

CLUSTER_DISTANCEは、選択内に含まれる各行のクラスタ距離を返します。クラスタ距離は、最も高確率のクラスタまたは指定されたcluster_idの行と重心との間の距離です。この距離は、BINARY_DOUBLEとして返されます。

構文の選択

CLUSTER_DISTANCEは、2つの方法のどちらかでデータにスコアを付けます。1つ目の方法では、データにマイニング・モデル・オブジェクトを適用します。もう1つの方法では、1つ以上の一時マイニング・モデルを作成してから適用する分析句を実行して、動的にデータをマイニングします。構文または分析構文を選択します。

- 構文 — 事前に定義されたモデルでデータにスコアを付ける場合は、最初の構文を使用します。クラスタリング・モデルの名前を指定します。

- 分析構文 — 事前定義されたモデルなしで、データにスコアを付ける場合は、分析構文を使用します。INTO n (nは、計算するクラスタの数)と、mining_analytic_clause (複数のモデル構築のためにデータをパーティション化する必要がある場合に指定します)を含めます。mining_analytic_clauseは、query_partition_clauseと、order_by_clauseをサポートします。("analytic_clause::="を参照。)

mining_attribute_clause

mining_attribute_clauseは、スコアの予測子として使用する列の属性を特定します。分析構文でファンクションが起動されると、このデータは一時モデルの構築にも使用されます。mining_attribute_clauseは、PREDICTIONファンクションと同様に動作します。("mining_attribute_clause::="を参照。)

関連項目:

- スコアリングの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

- クラスタリングの詳細は、『Oracle Data Mining概要』を参照してください。

例について:
次に示す例は、Data Miningのサンプル・プログラムからの抜粋です。サンプル・プログラムの詳細は、Oracle Data Miningユーザーズ・ガイドの「付録A」を参照してください。

例

この例では、最近接のクラスタの重心からの距離で測定される、最も特異な10行の行を検出します。

SELECT cust_id
FROM (
SELECT cust_id,
rank() over
(order by CLUSTER_DISTANCE(km_sh_clus_sample USING *) desc) rnk
FROM mining_data_apply_v)
WHERE rnk <= 11
ORDER BY rnk;

CUST_ID
----------
100579
100050
100329
100962
101251
100179
100382
100713
100629
100787
101478

CLUSTER_ID

構文

cluster_id::=

分析の構文

cluster_id_analytic::=

mining_attribute_clause::=

mining_analytic_clause::=

関連項目:
mining_analytic_clauseの構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

CLUSTER_IDは、選択内に含まれる各行の最も高確率のクラスタの識別子(ID)を返します。このクラスタIDは、Oracle NUMBERとして返されます。

構文の選択

CLUSTER_IDは、2つの方法のどちらかでデータにスコアを付けます。1つの方法では、データにマイニング・モデル・オブジェクトを適用します。もう1つの方法では、1つ以上の一時マイニング・モデルを作成して適用する分析句を実行して動的にデータをマイニングします。構文または分析構文を選択します。

- 構文 — 事前に定義されたモデルでデータにスコアを付ける場合は、最初の構文を使用します。クラスタリング・モデルの名前を指定します。

- 分析構文 — 事前定義されたモデルなしで、データにスコアを付ける場合は、分析構文を使用します。INTO n (nは、計算するクラスタの数)と、mining_analytic_clause (複数のモデル構築のためにデータをパーティション化する必要がある場合に指定します)を含めます。mining_analytic_clauseは、query_partition_clauseと、order_by_clauseをサポートします。("analytic_clause::="を参照。)

mining_attribute_clause

mining_attribute_clauseは、スコアの予測子として使用する列の属性を特定します。このファンクションが分析構文で起動された場合は、これらの予測子が一時モデルの構築にも使用されます。mining_attribute_clauseは、PREDICTIONファンクションと同様に動作します。("mining_attribute_clause::="を参照。)

関連項目:

- スコアリングの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

- クラスタリングの詳細は、『Oracle Data Mining概要』を参照してください。

例について:
次に示す例は、Data Miningのサンプル・プログラムからの抜粋です。サンプル・プログラムの詳細は、Oracle Data Miningユーザーズ・ガイドの「付録A」を参照してください。

例

次の例では、mining_data_apply_v内の顧客がグループ化されているクラスタを一覧表示します。

SELECT CLUSTER_ID(km_sh_clus_sample USING *) AS clus, COUNT(*) AS cnt
FROM mining_data_apply_v
GROUP BY CLUSTER_ID(km_sh_clus_sample USING *)
ORDER BY cnt DESC;

CLUS        CNT
---------- ----------
2        580
10        216
6        186
8        115
19        110
12        101
18         81
16         39
17         38
14         34

分析の例

この例では、共通の特徴に基づいて、顧客のデータベースを4つのセグメントに分割します。このクラスタリングのファンクションは、事前に定義されたクラスタリング・モデルなしでクラスタを計算してスコアを返します。

SELECT * FROM (
SELECT cust_id,
CLUSTER_ID(INTO 4 USING *) OVER () cls,
CLUSTER_DETAILS(INTO 4 USING *) OVER () cls_details
FROM mining_data_apply_v)
WHERE cust_id <= 100003
ORDER BY 1;

CUST_ID CLS CLS_DETAILS
------- --- -----------------------------------------------------------------------------
100001   5 <Details algorithm="K-Means Clustering" cluster="5">
<Attribute name="FLAT_PANEL_MONITOR" actualValue="0" weight=".349" rank="1"/>
<Attribute name="BULK_PACK_DISKETTES" actualValue="0" weight=".33" rank="2"/>
<Attribute name="CUST_INCOME_LEVEL" actualValue="G: 130\,000 - 149\,999"
weight=".291" rank="3"/>
<Attribute name="HOME_THEATER_PACKAGE" actualValue="1" weight=".268" rank="4"/>
<Attribute name="Y_BOX_GAMES" actualValue="0" weight=".179" rank="5"/>
</Details>

100002   6 <Details algorithm="K-Means Clustering" cluster="6">
<Attribute name="CUST_GENDER" actualValue="F" weight=".945" rank="1"/>
<Attribute name="CUST_MARITAL_STATUS" actualValue="NeverM" weight=".856" rank="2"/>
<Attribute name="HOUSEHOLD_SIZE" actualValue="2" weight=".468" rank="3"/>
<Attribute name="AFFINITY_CARD" actualValue="0" weight=".012" rank="4"/>
<Attribute name="CUST_INCOME_LEVEL" actualValue="L: 300\,000 and above"
weight=".009" rank="5"/>
</Details>

100003   7 <Details algorithm="K-Means Clustering" cluster="7">
<Attribute name="CUST_MARITAL_STATUS" actualValue="NeverM" weight=".862" rank="1"/>
<Attribute name="HOUSEHOLD_SIZE" actualValue="2" weight=".423" rank="2"/>
<Attribute name="HOME_THEATER_PACKAGE" actualValue="0" weight=".113" rank="3"/>
<Attribute name="AFFINITY_CARD" actualValue="0" weight=".007" rank="4"/>
<Attribute name="CUST_ID" actualValue="100003" weight=".006" rank="5"/>
</Details>

CLUSTER_PROBABILITY

構文

cluster_probability::=

分析の構文

cluster_prob_analytic::=

mining_attribute_clause::=

mining_analytic_clause::=

関連項目:
mining_analytic_clauseの構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

CLUSTER_PROBABILITYは、選択内に含まれる各行の確率を返します。確率は、最も高確率のクラスタまたは指定されたcluster_idを参照します。クラスタの確率は、BINARY_DOUBLEとして返されます。

構文の選択

CLUSTER_PROBABILITYは、2つの方法のどちらかでデータにスコアを付けます。1つの方法では、データにマイニング・モデル・オブジェクトを適用します。もう1つの方法では、1つ以上の一時マイニング・モデルを作成して適用する分析句を実行して動的にデータをマイニングします。構文または分析構文を選択します。

- 構文 — 事前に定義されたモデルでデータにスコアを付ける場合は、最初の構文を使用します。クラスタリング・モデルの名前を指定します。

- 分析構文 — 事前定義されたモデルなしで、データにスコアを付ける場合は、分析構文を使用します。INTO n (nは、計算するクラスタの数)と、mining_analytic_clause (複数のモデル構築のためにデータをパーティション化する必要がある場合に指定します)を含めます。mining_analytic_clauseは、query_partition_clauseと、order_by_clauseをサポートします。("analytic_clause::="を参照。)

mining_attribute_clause

mining_attribute_clauseは、スコアの予測子として使用する列の属性を特定します。このファンクションが分析構文で起動された場合は、これらの予測子が一時モデルの構築にも使用されます。mining_attribute_clauseは、PREDICTIONファンクションと同様に動作します。("mining_attribute_clause::="を参照。)

関連項目:

- スコアリングの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

- クラスタリングの詳細は、『Oracle Data Mining概要』を参照してください。

例について:
次に示す例は、Data Miningのサンプル・プログラムからの抜粋です。サンプル・プログラムの詳細は、Oracle Data Miningユーザーズ・ガイドの「付録A」を参照してください。

例

次の例では、可能性に基づいて、クラスタ2で最も代表的な顧客を10人一覧表示します。

SELECT cust_id
FROM (SELECT cust_id, rank() OVER (ORDER BY prob DESC, cust_id) rnk_clus2
FROM (SELECT cust_id, CLUSTER_PROBABILITY(km_sh_clus_sample, 2 USING *) prob
FROM mining_data_apply_v))
WHERE rnk_clus2 <= 10
ORDER BY rnk_clus2;

CUST_ID
----------
100256
100988
100889
101086
101215
100390
100985
101026
100601
100672

CLUSTER_SET

構文

cluster_set::=

分析の構文

cluster_set_analytic::=

mining_attribute_clause::=

mining_analytic_clause::=

関連項目:
mining_analytic_clauseの構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

CLUSTER_SETは、選択内に含まれる各行のクラスタIDと確率の組で構成されるセットを返します。戻り値は、フィールド名がCLUSTER_IDおよびPROBABILITYのオブジェクトのVARRAYです。クラスタIDはOracle NUMBERで、確率はBINARY_DOUBLEです。

topNおよびcutoff

topNとcutoffを指定すると、このファンクションから返されるクラスタの数を制限できます。デフォルトでは、topNおよびcutoffがnullであり、すべてのクラスタが戻されます。

- topNは、最も可能性の高いN個のクラスタになります。N番目の確率を持つクラスタが複数ある場合でも、ファンクションが選択するのはそのうち1つのみです。

- cutoffは、確率しきい値です。cutoff以上の確率を持つクラスタのみが返されます。cutoffのみでフィルタ処理するには、topNにNULLを指定します。

cutoff以上の最も高確率のクラスタを最大N個まで返すには、topNとcutoffの両方を指定します。

構文の選択

CLUSTER_SETは、2つの方法のどちらかでデータにスコアを付けます。1つの方法では、データにマイニング・モデル・オブジェクトを適用します。もう1つの方法では、1つ以上の一時マイニング・モデルを作成して適用する分析句を実行して動的にデータをマイニングします。構文または分析構文を選択します。

- 構文 — 事前に定義されたモデルでデータにスコアを付ける場合は、最初の構文を使用します。クラスタリング・モデルの名前を指定します。

- 分析構文 — 事前定義されたモデルなしで、データにスコアを付ける場合は、分析構文を使用します。INTO n (nは、計算するクラスタの数)と、mining_analytic_clause (複数のモデル構築のためにデータをパーティション化する必要がある場合に指定します)を含めます。mining_analytic_clauseは、query_partition_clauseと、order_by_clauseをサポートします。("analytic_clause::="を参照。)

mining_attribute_clause

mining_attribute_clauseは、スコアの予測子として使用する列の属性を特定します。このファンクションが分析構文で起動された場合は、これらの予測子が一時モデルの構築にも使用されます。mining_attribute_clauseは、PREDICTIONファンクションと同様に動作します。("mining_attribute_clause::="を参照。)

関連項目:

- スコアリングの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

- クラスタリングの詳細は、『Oracle Data Mining概要』を参照してください。

例について:
次に示す例は、Data Miningのサンプル・プログラムからの抜粋です。サンプル・プログラムの詳細は、Oracle Data Miningユーザーズ・ガイドの「付録A」を参照してください。

例

この例では、顧客ID 100955のクラスタ割当てに対して、最大の影響が(20%以上の確率で)ある属性が一覧表示されます。この問合せは、CLUSTER_DETAILSファンクションとCLUSTER_SETファンクションを起動します。これにより、クラスタリング・モデルem_sh_clus_sampleを適用します。

SELECT S.cluster_id, probability prob,
CLUSTER_DETAILS(em_sh_clus_sample, S.cluster_id, 5 USING T.*) det
FROM
(SELECT v.*, CLUSTER_SET(em_sh_clus_sample, NULL, 0.2 USING *) pset
FROM mining_data_apply_v v
WHERE cust_id = 100955) T,
TABLE(T.pset) S
ORDER BY 2 DESC;

CLUSTER_ID  PROB DET
---------- ----- ------------------------------------------------------------------------------
14 .6761 <Details algorithm="Expectation Maximization" cluster="14">
<Attribute name="AGE" actualValue="51" weight=".676" rank="1"/>
<Attribute name="HOME_THEATER_PACKAGE" actualValue="1" weight=".557" rank="2"/>
<Attribute name="FLAT_PANEL_MONITOR" actualValue="0" weight=".412" rank="3"/>
<Attribute name="Y_BOX_GAMES" actualValue="0" weight=".171" rank="4"/>
<Attribute name="BOOKKEEPING_APPLICATION" actualValue="1" weight="-.003"rank="5"/>
</Details>

3 .3227 <Details algorithm="Expectation Maximization" cluster="3">
<Attribute name="YRS_RESIDENCE" actualValue="3" weight=".323" rank="1"/>
<Attribute name="BULK_PACK_DISKETTES" actualValue="1" weight=".265" rank="2"/>
<Attribute name="EDUCATION" actualValue="HS-grad" weight=".172" rank="3"/>
<Attribute name="AFFINITY_CARD" actualValue="0" weight=".125" rank="4"/>
<Attribute name="OCCUPATION" actualValue="Crafts" weight=".055" rank="5"/>
</Details>

COALESCE

構文

用途

COALESCEは、式のリストの最初のNULLでないexprを戻します。2つ以上の式を指定する必要があります。すべてのexprがNULLと評価された場合、このファンクションはNULLを戻します。

Oracle Databaseでは、短絡評価を使用します。データベースは、NULLかどうかを判断する前にexpr値のすべてを評価するのではなく、各expr値を評価して、NULLかどうかを判断します。

すべてのexprが数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型である場合、Oracle Databaseは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。数値の優先順位の詳細は、「数値の優先順位」を参照してください。

このファンクションはNVLファンクションを一般化したファンクションです。

COALESCEは、CASE式の変形として使用できます。次に例を示します。

COALESCE(expr1, expr2)

これは、次のものと等価です。

CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END

次の例も同様です。

COALESCE(expr1, expr2, ..., exprn)

n >= 3で、次と同じです。

CASE WHEN expr1 IS NOT NULL THEN expr1
ELSE COALESCE (expr2, ..., exprn) END

関連項目:
「NVL」および「CASE式」を参照してください。

例

次の例では、サンプル表oe.product_informationを使用して、製品のクリアランス・セールを企画します。製品の表示価格から10%値引きします。表示価格がない場合は、最小価格はセール価格となります。最小価格がない場合、セール価格は5となります。

SELECT product_id, list_price, min_price,
COALESCE(0.9*list_price, min_price, 5) "Sale"
FROM product_information
WHERE supplier_id = 102050
ORDER BY product_id;

PRODUCT_ID LIST_PRICE  MIN_PRICE       Sale
---------- ---------- ---------- ----------
1769         48                  43.2
1770                    73         73
2378        305        247      274.5
2382        850        731        765
3355                                5

COLLECT

構文

用途

COLLECTは、任意の型の列を引数に取り、選択された行から、入力された型のネストした表を作成する集計ファンクションです。このファンクションから正確な結果を取得するには、このファンクションをCASTファンクション内で使用する必要があります。

column自体がコレクションである場合、COLLECTの出力はコレクションのネストした表になります。columnがユーザー定義型である場合は、オプションのDISTINCT、UNIQUEおよびORDER BY句を使用できるように、columnにMAPまたはORDERメソッドが定義されている必要があります。

関連項目:
「CAST」および「集計ファンクション」を参照してください。

例

次の例では、oe.customersサンプル表の電話番号のVARRAY列からネストした表を作成します。ネストした表には、収入水準がL: 300,000 and aboveである顧客の電話番号のみが含まれます。

CREATE TYPE phone_book_t AS TABLE OF phone_list_typ;
/

SELECT CAST(COLLECT(phone_numbers) AS phone_book_t) "Income Level L Phone Book"
FROM customers
WHERE income_level = 'L: 300,000 and above';

Income Level L Phone Book
--------------------------------------------------------------------------------
PHONE_BOOK_T(PHONE_LIST_TYP('+1 414 123 4307'), PHONE_LIST_TYP('+1 608 123 4344'
), PHONE_LIST_TYP('+1 814 123 4696'), PHONE_LIST_TYP('+1 215 123 4721'), PHONE_L
IST_TYP('+1 814 123 4755'), PHONE_LIST_TYP('+91 11 012 4817', '+91 11 083 4817')
, PHONE_LIST_TYP('+91 172 012 4837'), PHONE_LIST_TYP('+41 31 012 3569', '+41 31
083 3569'))

次の例では、サンプル表oe.warehousesの倉庫名の列からネストした表を作成します。ORDER BYを使用して、倉庫名を順序付けます。

CREATE TYPE warehouse_name_t AS TABLE OF VARCHAR2(35);
/

SELECT CAST(COLLECT(warehouse_name ORDER BY warehouse_name)
AS warehouse_name_t) "Warehouses"
FROM warehouses;

Warehouses
--------------------------------------------------------------------------------
WAREHOUSE_NAME_TYP('Beijing', 'Bombay', 'Mexico City', 'New Jersey', 'San Franci
sco', 'Seattle, Washington', 'Southlake, Texas', 'Sydney', 'Toronto')

COMPOSE

構文

用途

COMPOSEは、引数として任意のデータ型の文字列または文字列に変換する式を取り、入力されたものと同じキャラクタ・セットでUnicode文字列を戻します。charのデータ型は、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBです。たとえば、ウムラウト・コード・ポイントで修飾されたoのコード・ポイントは、oウムラウト・コード・ポイントとして戻されます。

COMPOSEは、NFC正規形の文字列を戻します。より排他的な設定の場合は、まずCANONICAL設定を使用してDECOMPOSEをコールし、次にCOMPOSEをコールすることができます。この組合せによって、NFKC正規形の文字列が戻されます。

暗黙的な変換を使用して、CLOBおよびNCLOBの値がサポートされます。charが文字のLOB値の場合、COMPOSE演算の前にVARCHAR値に変換されます。特定の開発環境で、LOB値のサイズがVARCHARのサポートする長さを超える場合、この演算は失敗します。

関連項目:

- Unicodeキャラクタ・セットおよびキャラクタ・セマンティクスの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

- 「DECOMPOSE」

例

次の例は、oウムラウトのコードポイントを戻します。

SELECT COMPOSE( 'o' || UNISTR('\0308') )
FROM DUAL;

CO
--
ö

関連項目:
「UNISTR」

CON_DBID_TO_ID

構文

用途

CON_DBID_TO_IDは、コンテナDBIDを引数に取り、コンテナIDを返します。container_dbidには、NUMBERまたは暗黙的にNUMBERに変換可能な任意の値を指定します。戻り値はNUMBERです。

この関数は、マルチテナント・コンテナ・データベース(CDB)で有益です。CDB以外でこの関数を使用すると、0が返されます。

例

次の問合せでは、CDBのすべてのコンテナのIDおよびDBIDが表示されます。この例での出力例を示します。

SELECT CON_ID, DBID
FROM V$CONTAINERS;

CON_ID       DBID
---------- ----------
1 1930093401
2 4054529501
4 2256797992

次の文は、DBIDが2256797992のコンテナのIDを返します。

SELECT CON_DBID_TO_ID(2256797992) "Container ID"
FROM DUAL;

Container ID
------------
4

CON_GUID_TO_ID

構文

用途

CON_GUID_TO_IDは、コンテナGUID(グローバル一意識別子)を引数に取り、コンテナIDを返します。container_guidには、RAW値を指定します。戻り値はNUMBERです。

この関数は、マルチテナント・コンテナ・データベース(CDB)で有益です。CDB以外でこの関数を使用すると、0が返されます。

例

次の問合せでは、CDBのすべてのコンテナのIDおよびGUIDが表示されます。GUIDは、16バイトのRAW値としてV$CONTAINERSビューに格納されます。この問合せは、32文字の16進表現のGUIDを返します。この例での出力例を示します。

SELECT CON_ID, GUID
FROM V$CONTAINERS;

CON_ID GUID
---------- --------------------------------
1 DB0A9F33DF99567FE04305B4F00A667D
2 D990C280C309591EE04305B4F00A593E
4 D990F4BD938865C1E04305B4F00ACA18

次の文は、GUIDが16進数の値D990F4BD938865C1E04305B4F00ACA18で表現されたコンテナのIDを返します。HEXTORAW関数は、GUIDの16進表現をRAW値に変換します。

SELECT CON_GUID_TO_ID(HEXTORAW('D990F4BD938865C1E04305B4F00ACA18')) "Container ID"
FROM DUAL;

Container ID
------------
4

CON_NAME_TO_ID

構文

用途

CON_NAME_TO_IDは、コンテナ名を引数に取り、コンテナIDを返します。container_nameには、任意のデータ型の文字列、または文字列に変換する式を指定します。戻り値はNUMBERです。

この関数は、マルチテナント・コンテナ・データベース(CDB)で有益です。CDB以外でこの関数を使用すると、0が返されます。

例

次の問合せでは、CDBのすべてのコンテナのIDおよび名前が表示されます。この例での出力例を示します。

SELECT CON_ID, NAME
FROM V$CONTAINERS;

CON_ID NAME
---------- ----------
1 CDB$ROOT
2 PDB$SEED
4 SALESPDB

次の文は、名前がSALESPDBのコンテナのIDを返します。

SELECT CON_NAME_TO_ID('SALESPDB') "Container ID"
FROM DUAL;

Container ID
------------
4

CON_UID_TO_ID

構文

用途

CON_UID_TO_IDは、コンテナUID(一意識別子)を引数に取り、コンテナIDを返します。container_uidには、NUMBERまたは暗黙的にNUMBERに変換可能な任意の値を指定します。戻り値はNUMBERです。

この関数は、マルチテナント・コンテナ・データベース(CDB)で有益です。CDB以外でこの関数を使用すると、0が返されます。

例

次の問合せでは、CDBのすべてのコンテナのIDおよびUIDが表示されます。この例での出力例を示します。

SELECT CON_ID, CON_UID
FROM V$CONTAINERS;

CON_ID    CON_UID
---------- ----------
1          1
2 4054529501
4 2256797992

次の問合せは、UIDが2256797992のコンテナのIDを返します。

SELECT CON_UID_TO_ID(2256797992) "Container ID"
FROM DUAL;

Container ID
------------
4

CONCAT

構文

用途

CONCATは、char2に連結されているchar1を戻します。char1およびchar2は、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBデータ型です。char1と同じキャラクタ・セットの文字列が戻されます。そのデータ型は、引数のデータ型によって決まります。

2つの異なるデータ型を連結すると、可逆式変換となるデータ型が戻されます。したがって、引数の1つがLOBの場合、戻り値はLOBとなります。引数の1つが各国語データ型の場合は、戻り値は各国語データ型となります。次に例を示します。

- CONCAT(CLOB, NCLOB)はNCLOBを戻します。

- CONCAT(NCLOB, NCHAR)はNCLOBを戻します。

- CONCAT(NCLOB, CHAR)はNCLOBを戻します。

- CONCAT(NCHAR, CLOB)はNCLOBを戻します。

このファンクションは、連結演算子(||)と同等です。

関連項目:
CONCAT演算子の詳細は、「連結演算子」を参照してください。

例

次の例では、ネストを使用して3つの文字列を連結します。

SELECT CONCAT(CONCAT(last_name, '''s job category is '), job_id) "Job"
FROM employees
WHERE employee_id = 152;

Job
------------------------------------------------------
Hall's job category is SA_REP

CONVERT

構文

用途

CONVERTは、文字列を、あるキャラクタ・セットから別のキャラクタ・セットに変換します。

- 引数charは変換する値です。charは、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBデータ型です。

- 引数dest_char_setは、charが変換されるキャラクタ・セットの名前です。

- 引数source_char_setは、charをデータベースに格納しているキャラクタ・セットの名前です。デフォルト値はデータベース・キャラクタ・セットです。

CHARとVARCHAR2の戻り値は、VARCHAR2です。NCHARとNVARCHAR2の戻り値は、NVARCHAR2です。CLOBの戻り値はCLOB、NCLOBの戻り値はNCLOBです。

変換先キャラクタ・セットと変換元キャラクタ・セットの引数として、リテラルまたはキャラクタ・セットの名前を含んでいる列を指定できます。

完全に文字を変換するには、変換先キャラクタ・セットが変換元キャラクタ・セットで定義されているすべての文字を表現できる必要があります。文字が変換先キャラクタ・セットに存在しないと、置換文字が使用されます。置換文字は、キャラクタ・セット定義の一部として定義できます。

注意:
Oracle Databaseの現行のリリースでは、CONVERTファンクションを使用しないことをお薦めします。CONVERTの戻り値は文字データ型であるため、そのデータ型に応じてデータベース・キャラクタ・セットまたは各国語キャラクタ・セットのいずれかになります。この2つのキャラクタ・セットのどちらでもないdest_char_setは、サポートされません。char引数とsource_char_setの要件は同じです。このため、ファンクションの実用的な用途は、誤ったキャラクタ・セットで格納されているデータの修正にかぎられます。
データベース・キャラクタ・セットと各国語キャラクタ・セットのどちらでもない値は、RAWまたはBLOBとして処理して格納する必要があります。PL/SQLパッケージUTL_RAWおよびUTL_I18Nのプロシージャ(たとえば、UTL_RAW.CONVERT)では、このような値の限定的な処理が可能です。パッケージUTL_FILE、UTL_TCP、UTL_HTTPおよびUTL_SMTP内でRAW引数を受け入れるプロシージャを使用すると、処理されたデータを出力できます。

例

次の例では、Latin-1文字列をASCIIに変換するキャラクタ・セットの変換を示します。これは、同じ文字列をWE8ISO8859P1データベースからUS7ASCIIデータベースへインポートした場合と同じ結果が得られます。

SELECT CONVERT('Ä Ê Í Õ Ø A B C D E ', 'US7ASCII', 'WE8ISO8859P1')
FROM DUAL;

CONVERT('ÄÊÍÕØABCDE'
---------------------
A E I ? ? A B C D E ?

次のようにV$NLS_VALID_VALUESビューを問い合せて、有効なキャラクタ・セットのリストを取得できます。

SELECT * FROM V$NLS_VALID_VALUES WHERE parameter = 'CHARACTERSET';

関連項目:
Oracle Databaseでサポートされているキャラクタ・セットの一覧は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。V$NLS_VALID_VALUESビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

CORR

構文

関連項目:
構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

CORRは、数値の組の集合に対する相関係数を戻します。これは、集計ファンクションまたは分析ファンクションとして使用できます。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。Oracleは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。数値の優先順位の詳細は、「数値の優先順位」を参照してください。

Oracle Databaseは、expr1またはexpr2がNULLである組を排除した後、このファンクションを(expr1, expr2)の集合に適用します。その後、Oracleは次の計算を行います。

COVAR_POP(expr1, expr2) / (STDDEV_POP(expr1) * STDDEV_POP(expr2))

ファンクションは、NUMBER型の値を戻します。ファンクションが空の集合に適用されると、NULLを戻します。

注意:
CORRファンクションは、ピアソンの相関係数を計算します。この計算を行うには、数式を引数として指定する必要があります。Oracleは、ノンパラメトリックまたは順位相関をサポートするためのCORR_S(スピアマンのロー係数)およびCORR_K(ケンドールのタウb係数)ファンクションも提供します。

関連項目:
exprの有効な書式の詳細は、「集計ファンクション」および「SQL式」を参照してください。CORR_SおよびCORR_Kファンクションの詳細は、「CORR_*」を参照してください。

集計の例

次の例では、oe.product_informationサンプル表の重さクラスごとの製品の表示価格と最小価格の相関係数を計算します。

SELECT weight_class, CORR(list_price, min_price) "Correlation"
FROM product_information
GROUP BY weight_class
ORDER BY weight_class, "Correlation";

WEIGHT_CLASS Correlation
------------ -----------
1  .999149795
2  .999022941
3  .998484472
4  .999359909
5  .999536087

分析の例

次の例では、会社での勤務年数と給与の相関を従業員の役職別に示します。結果セットでは、指定した業務の従業員ごとに同じ相関を示します。

SELECT employee_id, job_id,
TO_CHAR((SYSDATE - hire_date) YEAR TO MONTH ) "Yrs-Mns",     salary,
CORR(SYSDATE-hire_date, salary)
OVER(PARTITION BY job_id) AS "Correlation"
FROM employees
WHERE department_id in (50, 80)
ORDER BY job_id, employee_id;

EMPLOYEE_ID JOB_ID     Yrs-Mns     SALARY Correlation
----------- ---------- ------- ---------- -----------
145 SA_MAN     +04-09       14000  .912385598
146 SA_MAN     +04-06       13500  .912385598
147 SA_MAN     +04-04       12000  .912385598
148 SA_MAN     +01-08       11000  .912385598
149 SA_MAN     +01-05       10500  .912385598
150 SA_REP     +04-05       10000   .80436755
151 SA_REP     +04-03        9500   .80436755
152 SA_REP     +03-10        9000   .80436755
153 SA_REP     +03-03        8000   .80436755
154 SA_REP     +02-07        7500   .80436755
155 SA_REP     +01-07        7000   .80436755
. . .

CORR_*

CORR_*ファンクションを次に示します。

- CORR_S

- CORR_K

構文

correlation::=

用途

CORRファンクション(「CORR」を参照)は、ピアソンの相関係数を計算し、入力として数式を必要とします。CORR_*ファンクションは、ノンパラメトリックまたは順位相関をサポートします。これらのファンクションを使用すると、式間の相関を順序尺度化して求めることができます(値の順序付けが可能な場合)。相関係数は-1から1の範囲の値となります。1は完全な正相関、-1は完全な逆相関(一方の変数が減少すると他方の変数が増加する)、および0(ゼロ)に近い値は無相関を表します。

これらのファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。Oracle Databaseは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、計算を実行してNUMBERを戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。数値の優先順位の詳細は、「数値の優先順位」を参照してください。

expr1およびexpr2は、分析対象の2つの変数です。3つ目の引数はVARCHAR2型の戻り値です。3つ目の引数を指定しない場合、デフォルトでCOEFFICIENTが戻り値になります。戻り値の意味を次の表に示します。

表7-2 CORR_*の戻り値

戻り値

意味

COEFFICIENT

相関の係数

ONE_SIDED_SIG

相関の正の片側有意

ONE_SIDED_SIG_POS

ONE_SIDED_SIGに同じ

ONE_SIDED_SIG_NEG

相関の負の片側有意

TWO_SIDED_SIG

相関の両側有意

CORR_S

CORR_Sは、スピアマンの順位相関係数(ロー)を計算します。入力式は、観測値の組(xi, yi)の集合である必要があります。このファンクションは、最初に各値を順位に置き換えます。各xiの値は、標本内の他のすべてのxi中での順位に置き換えられ、各yiの値は、他のすべてのyi中での順位に置き換えられます。したがって、各xiおよび各yiは1からnの値となります。ここでnは、値の組の合計数です。同順位の場合は、値がわずかに異なっていた場合に付けられる順位の平均が割り当てられます。その後このファンクションは、順位の線形相関係数を計算します。

CORR_Sの例 次の例では、スピアマンのロー相関係数を使用して、salaryとcommission_pct、salaryとemployee_idの2つの異なる比較ごとに相関係数を導出します。

SELECT COUNT(*) count,
CORR_S(salary, commission_pct) commission,
CORR_S(salary, employee_id) empid
FROM employees;

COUNT COMMISSION      EMPID
---------- ---------- ----------
107 .735837022 -.04473016

CORR_K

CORR_Kは、ケンドールの順位相関係数(タウb)を計算します。CORR_Sと同様に、入力式は観測値の組(xi, yi)の集合です。係数を計算するために、このファンクションは一致した組と一致しない組の数をカウントします。xとyの値がいずれも大きい観測値の組は一致しています。xの値が大きくyの値が小さい観測値の組は一致していません。

タウbでの有意性は、タウbによって示される相関が偶然の結果である確率です(0から1の値)。この値が小さい場合、タウbが正の値であれば有意な相関が存在します(タウbが負の値の場合は逆相関)。

CORR_Kの例 次の例では、ケンドールのタウb相関係数を使用して、従業員の給与と歩合の割合(パーセント)間に相関があるかどうかを判断します。

SELECT CORR_K(salary, commission_pct, 'COEFFICIENT') coefficient,
CORR_K(salary, commission_pct, 'TWO_SIDED_SIG') two_sided_p_value
FROM employees;

COEFFICIENT TWO_SIDED_P_VALUE
----------- -----------------
.603079768        3.4702E-07

COS

構文

用途

COSは、n(ラジアンで表された角度)のコサインを戻します。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。引数がBINARY_FLOATの場合、このファンクションはBINARY_DOUBLEを戻します。それ以外の場合、引数と同じ数値データ型を戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

例

次の例では、180度のコサインを戻します。

SELECT COS(180 * 3.14159265359/180) "Cosine of 180 degrees"
FROM DUAL;

Cosine of 180 degrees
---------------------
-1

COSH

構文

用途

COSHは、nの双曲線コサインを戻します。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。引数がBINARY_FLOATの場合、このファンクションはBINARY_DOUBLEを戻します。それ以外の場合、引数と同じ数値データ型を戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

例

次の例では、0の双曲線コサインを戻します。

SELECT COSH(0) "Hyperbolic cosine of 0"
FROM DUAL;

Hyperbolic cosine of 0
----------------------
1

COUNT

構文

関連項目:
構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

COUNTは、問合せによって戻された行の数を戻します。これは、集計ファンクションまたは分析ファンクションとして使用できます。

DISTINCTを指定する場合は、analytic_clauseのquery_partition_clauseのみ指定できます。order_by_clauseおよびwindowing_clauseは指定できません。

exprを指定すると、COUNTはexprがNULLでない行数を戻します。exprのすべての行を数えるか、または異なる値のみを数えることができます。

アスタリスク(*)を指定すると、このファンクションは重複値およびNULL値を含むすべての行を戻します。COUNTはNULLを戻しません。

関連項目:
exprの書式の詳細は、「SQL式」を参照してください。「集計ファンクション」も参照してください。

集計の例

次の例では、COUNTを集計ファンクションとして使用します。

SELECT COUNT(*) "Total"
FROM employees;

Total
----------
107

SELECT COUNT(*) "Allstars"
FROM employees
WHERE commission_pct > 0;

Allstars
---------
35

SELECT COUNT(commission_pct) "Count"
FROM employees;

Count
----------
35

SELECT COUNT(DISTINCT manager_id) "Managers"
FROM employees;

Managers
----------
18

分析の例

次の例では、employees表の各従業員について、その従業員の給与より50ドル少ない金額から150ドル多い金額の範囲の給与を得ている従業員の数を計算します。

SELECT last_name, salary,
COUNT(*) OVER (ORDER BY salary RANGE BETWEEN 50 PRECEDING AND
150 FOLLOWING) AS mov_count
FROM employees
ORDER BY salary, last_name;

LAST_NAME                     SALARY  MOV_COUNT
------------------------- ---------- ----------
Olson                           2100          3
Markle                          2200          2
Philtanker                      2200          2
Gee                             2400          8
Landry                          2400          8
Colmenares                      2500         10
Marlow                          2500         10
Patel                           2500         10
. . .

COVAR_POP

構文

関連項目:
構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

COVAR_POPは、数値の組の集合に対する母集団共分散を戻します。これは、集計ファンクションまたは分析ファンクションとして使用できます。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。Oracleは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。数値の優先順位の詳細は、「数値の優先順位」を参照してください。

Oracle Databaseは、expr1またはexpr2がNULLであるすべての組を排除した後、このファンクションを(expr1, expr2)の組の集合に適用します。その後、Oracleは次の計算を行います。

(SUM(expr1 * expr2) - SUM(expr2) * SUM(expr1) / n) / n

ここで、nは(expr1, expr2)の組の数です(ただし、expr1およびexpr2の両方がNULLではない場合です)。

ファンクションは、NUMBER型の値を戻します。ファンクションが空の集合に適用されると、NULLを戻します。

関連項目:
exprの書式の詳細は、「SQL式」を参照してください。「集計ファンクション」も参照してください。

集計の例

次の例では、サンプル表hr.employeesを使用して、勤務時間(SYSDATE - hire_date)と給与の母集団共分散と標本共分散を計算します。

SELECT job_id,
COVAR_POP(SYSDATE-hire_date, salary) AS covar_pop,
COVAR_SAMP(SYSDATE-hire_date, salary) AS covar_samp
FROM employees
WHERE department_id in (50, 80)
GROUP BY job_id
ORDER BY job_id, covar_pop, covar_samp;

JOB_ID       COVAR_POP  COVAR_SAMP
---------- ----------- -----------
SA_MAN          660700      825875
SA_REP      579988.466   600702.34
SH_CLERK      212432.5  223613.158
ST_CLERK     176577.25  185870.789
ST_MAN          436092      545115

分析の例

次の例では、デモ・スキーマoeの製品の表示価格および最小価格の累積標本共分散を計算します。

SELECT product_id, supplier_id,
COVAR_POP(list_price, min_price)
OVER (ORDER BY product_id, supplier_id)
AS CUM_COVP,
COVAR_SAMP(list_price, min_price)
OVER (ORDER BY product_id, supplier_id)
AS CUM_COVS
FROM product_information p
WHERE category_id = 29
ORDER BY product_id, supplier_id;

PRODUCT_ID SUPPLIER_ID   CUM_COVP   CUM_COVS
---------- ----------- ---------- ----------
1774      103088          0
1775      103087    1473.25     2946.5
1794      103096 1702.77778 2554.16667
1825      103093    1926.25 2568.33333
2004      103086     1591.4    1989.25
2005      103086     1512.5       1815
2416      103088 1475.97959 1721.97619
. . .

COVAR_SAMP

構文

関連項目:
構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

COVAR_SAMPは、数値の組の集合の標本共分散を戻します。これは、集計ファンクションまたは分析ファンクションとして使用できます。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。Oracleは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。数値の優先順位の詳細は、「数値の優先順位」を参照してください。

Oracle Databaseは、expr1またはexpr2がNULLであるすべての組を排除した後、このファンクションを(expr1, expr2)の組の集合に適用します。その後、Oracleは次の計算を行います。

(SUM(expr1 * expr2) - SUM(expr1) * SUM(expr2) / n) / (n-1)

ここで、nは(expr1, expr2)の組の数です(ただし、expr1およびexpr2の両方がNULLではない場合です)。

ファンクションは、NUMBER型の値を戻します。ファンクションが空の集合に適用されると、NULLを戻します。

関連項目:
exprの書式の詳細は、「SQL式」を参照してください。「集計ファンクション」も参照してください。

集計の例

「COVAR_POP」の集計の例を参照してください。

分析の例

「COVAR_POP」の分析の例を参照してください。

CUBE_TABLE

構文

用途

CUBE_TABLEは、キューブまたはディメンションのデータを抽出し、SQLベースのアプリケーションで使用可能な2次元形式のリレーショナル表に戻します。

このファンクションは、1つのVARCHAR2引数を取ります。オプションのHIERARCHY句を使用すると、ディメンション階層を指定できます。キューブでは複数のHIERARCHY句(ディメンションごとに1つ)を使用できます。

次の様々なタイプの表を生成できます。

- キューブ表には、各ディメンションのキー列およびキューブ内の各メジャーと計算されたメジャーの列が含まれています。キューブ表を作成するには、キューブを指定します。キューブのHIERARCHY句は、使用することも使用しないこともできます。複数の階層のあるディメンションの場合は、この句によって戻り値を指定された階層内のディメンション・メンバーとレベルに制限します。HIERARCHY句を使用しない場合は、すべてのディメンション・メンバーとすべてのレベルが含められます。

- ディメンション表には、キー列、および各レベルと各属性の列が含まれています。次のいずれかのコードによりメンバーを識別するMEMBER_TYPE列も含まれます。

- L - 表、ビュー、またはシノニムからロードされています。

- A - ロードされたメンバーおよびディメンション内の全階層の単一ルート、つまりすべての集計メンバーです。

- C - 計算済メンバーです。

この表には、すべてのディメンション・メンバーとすべてのレベルが含められます。ディメンション表を作成するには、ディメンションのHIERARCHY句を使用しないでディメンションを指定します。

- 階層表には、ディメンション表のすべての列に加えて、親メンバーの列と各ソース・レベルの列が含まれています。ディメンション表と同様のMEMBER_TYPE列も含まれます。指定された階層に含まれないディメンション・メンバーとレベルはすべて、表から除外されます。階層表を作成する場合は、ディメンションのHIERARCHY句を使用してディメンションを指定します。

CUBE_TABLEは表ファンクションであり、SELECT文のコンテキストで常に次の構文で使用されます。

SELECT ... FROM TABLE(CUBE_TABLE('arg'));

関連項目:
ディメンション・オブジェクトの詳細およびCUBE_TABLEで生成される表の詳細は、『Oracle OLAPユーザーズ・ガイド』を参照してください。

例

次の例では、OLAPオプションが指定されたOracle DatabaseおよびGLOBALサンプル・スキーマが必要です。GLOBALサンプル・スキーマのダウンロードおよびインストールの詳細は、『Oracle OLAPユーザーズ・ガイド』を参照してください。

次のSELECT文は、GLOBALスキーマのCHANNELのディメンション表を生成します。

SELECT dim_key, level_name, long_description, channel_total_id tot_id,
channel_channel_id chan_id, channel_long_description chan_desc,
total_long_description tot_desc
FROM TABLE(CUBE_TABLE('global.channel'));

DIM_KEY      LEVEL_NAME LONG_DESCRIPTION TOT_ID CHAN_ID CHAN_DESC    TOT_DESC
-----------  ---------- ---------------- ------ ------- ------------ -------------
CHANNEL_CAT  CHANNEL    Catalog          TOTAL  CAT     Catalog      Total Channel
CHANNEL_DIR  CHANNEL    Direct Sales     TOTAL  DIR     Direct Sales Total Channel
CHANNEL_INT  CHANNEL    Internet         TOTAL  INT     Internet     Total Channel
TOTAL_TOTAL  TOTAL      Total Channel    TOTAL                       Total Channel

次の文は、UNITS_CUBEのキューブ表を生成します。この文は、表をMARKET階層およびCALENDAR階層に制限します。

SELECT sales, units, cost, time, customer, product, channel
FROM TABLE(CUBE_TABLE('global.units_cube HIERARCHY customer market HIERARCHY time calendar'))
WHERE rownum < 20;

SALES      UNITS       COST TIME                       CUSTOMER       PRODUCT     CHANNEL
---------- ---------- ---------- -------------------------- -------------- ----------- -----------
24538587.9      61109 22840853.7 CALENDAR_QUARTER_CY1998.Q1 TOTAL_TOTAL    TOTAL_TOTAL TOTAL_TOTAL
24993273.3      61320   23147171 CALENDAR_QUARTER_CY1998.Q2 TOTAL_TOTAL    TOTAL_TOTAL TOTAL_TOTAL
25080541.4      65265 23242535.4 CALENDAR_QUARTER_CY1998.Q3 TOTAL_TOTAL    TOTAL_TOTAL TOTAL_TOTAL
26258474      66122 24391020.6 CALENDAR_QUARTER_CY1998.Q4 TOTAL_TOTAL    TOTAL_TOTAL TOTAL_TOTAL
32785170      77589 30607218.1 CALENDAR_QUARTER_CY1999.Q1 TOTAL_TOTAL    TOTAL_TOTAL TOTAL_TOTAL
. . .

CUME_DIST

集計の構文

cume_dist_aggregate::=

分析の構文

cume_dist_analytic::=

関連項目:
構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

CUME_DISTは、値のグループにある値の累積分布値を計算します。CUME_DISTが戻す値の範囲は、0より大きく1以下です。連結値は、常に同じ累積分布値に対して評価を行います。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。Oracle Databaseは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、計算を実行してNUMBERを戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。数値の優先順位の詳細は、「数値の優先順位」を参照してください。

- 集計ファンクションとしてのCUME_DISTは、ファンクションの引数および対応するソート指定によって識別される不確定な行rに対して、集計グループ内の行の中での行rの相対位置を計算します。Oracleは、不確定な行rを集計される行のグループに挿入するように計算します。このファンクションの引数は、各集計グループ内の1つの不確定行を識別します。このため、すべての引数は、集計グループ内で定数式と評価される必要があります。定数引数式および集計のORDER BY句の式の位置は、一致します。このため、引数の数は同じであり、その型は互換性がある必要があります。

- 分析ファンクションとしてのCUME_DISTは、値のグループにある特定の値の相対位置を計算します。行rについて、昇順で順序付けられているとします。rのCUME_DISTは、rの値以下の値の行数を、評価される行の数(問合せ結果セットまたはパーティション)で割った数です。

集計の例

次の例では、サンプル表oe.employeesの従業員の中から、給与が$15,500であり、歩合が5%の不確定な従業員の累積分布を計算します。

SELECT CUME_DIST(15500, .05) WITHIN GROUP
(ORDER BY salary, commission_pct) "Cume-Dist of 15500"
FROM employees;

Cume-Dist of 15500
------------------
.972222222

分析の例

次の例では、購買部門の各従業員の給与のパーセンタイルを計算します。たとえば、事務員の40%が、Himuroの給与以下の給与を得ていることがわかります。

SELECT job_id, last_name, salary, CUME_DIST()
OVER (PARTITION BY job_id ORDER BY salary) AS cume_dist
FROM employees
WHERE job_id LIKE 'PU%'
ORDER BY job_id, last_name, salary, cume_dist;

JOB_ID     LAST_NAME                     SALARY  CUME_DIST
---------- ------------------------- ---------- ----------
PU_CLERK   Baida                           2900         .8
PU_CLERK   Colmenares                      2500         .2
PU_CLERK   Himuro                          2600         .4
PU_CLERK   Khoo                            3100          1
PU_CLERK   Tobias                          2800         .6
PU_MAN     Raphaely                       11000          1

CURRENT_DATE

構文

用途

CURRENT_DATEは、セッション・タイムゾーンの現在の日付をDATEデータ型のグレゴリオ暦の値で戻します。

例

次の例では、CURRENT_DATEがセッション・タイムゾーンによって異なることを示します。

ALTER SESSION SET TIME_ZONE = '-5:0';
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS';
SELECT SESSIONTIMEZONE, CURRENT_DATE FROM DUAL;

SESSIONTIMEZONE CURRENT_DATE
--------------- --------------------
-05:00          29-MAY-2000 13:14:03

ALTER SESSION SET TIME_ZONE = '-8:0';
SELECT SESSIONTIMEZONE, CURRENT_DATE FROM DUAL;

SESSIONTIMEZONE CURRENT_DATE
--------------- --------------------
-08:00          29-MAY-2000 10:14:33

CURRENT_TIMESTAMP

構文

用途

CURRENT_TIMESTAMPは、セッション・タイムゾーンの現在の日付および時刻をTIMESTAMP WITH TIME ZONEデータ型の値で戻します。タイムゾーン・オフセットは、SQLセッションの現在のローカル時刻を反映します。精度の指定を省略した場合のデフォルトは6です。このファンクションとLOCALTIMESTAMPとの違いは、CURRENT_TIMESTAMPは、TIMESTAMP WITH TIME ZONEの値を戻し、LOCALTIMESTAMPはTIMESTAMPの値を戻す点です。

オプションの引数では、precisionは、戻される時刻の値の小数秒の精度を指定します。

関連項目:
「LOCALTIMESTAMP」

例

次の例では、CURRENT_TIMESTAMPがセッション・タイムゾーンによって異なることを示します。

ALTER SESSION SET TIME_ZONE = '-5:0';
ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS';
SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP FROM DUAL;

SESSIONTIMEZONE CURRENT_TIMESTAMP
--------------- ---------------------------------------------------
-05:00          04-APR-00 01.17.56.917550 PM -05:00

ALTER SESSION SET TIME_ZONE = '-8:0';
SELECT SESSIONTIMEZONE, CURRENT_TIMESTAMP FROM DUAL;

SESSIONTIMEZONE CURRENT_TIMESTAMP
--------------- ----------------------------------------------------
-08:00          04-APR-00 10.18.21.366065 AM -08:00

CURRENT_TIMESTAMPで書式マスクを使用する場合は、ファンクションが戻す値と書式マスクを一致させてください。たとえば、次の表の場合を考えます。

CREATE TABLE current_test (col1 TIMESTAMP WITH TIME ZONE);

ファンクションが戻す型のTIME ZONEの部分がマスクに含まれていないため、次の文は正常に実行されません。

INSERT INTO current_test VALUES
(TO_TIMESTAMP_TZ(CURRENT_TIMESTAMP, 'DD-MON-RR HH.MI.SSXFF PM'));

次の文では、CURRENT_TIMESTAMPの戻り値の型と一致する正しい書式マスクが使用されています。

INSERT INTO current_test VALUES
(TO_TIMESTAMP_TZ(CURRENT_TIMESTAMP, 'DD-MON-RR HH.MI.SSXFF PM TZH:TZM'));

CV

構文

用途

CVファンクションは、SELECT文のmodel_clauseでのみ、かつモデル・ルールの右側でのみ使用できます。戻り値は、ルールの左側から右側に送られたディメンション列またはパーティション列の現在の値です。このファンクションをmodel_clauseで使用するとディメンション列に対する相対索引を作成できます。戻り型は、ディメンション列のデータ型です。引数を指定しない場合、セル参照内のファンクションの相対位置に対応付けられたディメンション列がデフォルトで使用されます。

CVファンクションは、セル参照外でも使用できます。その場合は、dimension_columnが必要です。

関連項目:
構文およびセマンティクスの詳細は、「model_clause」および「モデル式」を参照してください。

例

次の例では、ディメンション列(マウス・パッドまたはスタンダード・マウス)の1999年および2000年の現在の値が表す製品の売上の合計を、その製品の2001年の売上に割り当てます。

SELECT country, prod, year, s
FROM sales_view_ref
MODEL
PARTITION BY (country)
DIMENSION BY (prod, year)
MEASURES (sale s)
IGNORE NAV
UNIQUE DIMENSION
RULES UPSERT SEQUENTIAL ORDER
(
s[FOR prod IN ('Mouse Pad', 'Standard Mouse'), 2001] =
s[CV( ), 1999] + s[CV( ), 2000]
)
ORDER BY country, prod, year;

COUNTRY       PROD                                         YEAR           S
----------    -----------------------------------      --------   ---------
France        Mouse Pad                                    1998     2509.42
France        Mouse Pad                                    1999     3678.69
France        Mouse Pad                                    2000     3000.72
France        Mouse Pad                                    2001     6679.41
France        Standard Mouse                               1998     2390.83
France        Standard Mouse                               1999     2280.45
France        Standard Mouse                               2000     1274.31
France        Standard Mouse                               2001     3554.76
Germany       Mouse Pad                                    1998     5827.87
Germany       Mouse Pad                                    1999     8346.44
Germany       Mouse Pad                                    2000     7375.46
Germany       Mouse Pad                                    2001     15721.9
Germany       Standard Mouse                               1998     7116.11
Germany       Standard Mouse                               1999     6263.14
Germany       Standard Mouse                               2000     2637.31
Germany       Standard Mouse                               2001     8900.45

16 rows selected.

この例では、ビューsales_view_refが必要です。このビューを作成する方法については、「MODEL句の例:」を参照してください。

DATAOBJ_TO_MAT_PARTITION

構文

用途

DATAOBJ_TO_MAT_PARTITIONは、ドメイン索引データの格納に使用するシステム・パーティション表でデータ・メンテナンスまたは問合せ操作を実行するデータ・カートリッジ開発者にのみ役立ちます。DML操作や問合せ操作は、ドメイン索引の実表での対応する操作によってトリガーされます。

このファンクションは、引数として実表の名前と実表のパーティションのパーティションIDを取ります。これらはともに、適切なODCIIndexメソッドによってファンクションに渡されます。ファンクションは、対応するシステム・パーティション表のマテリアライズド・パーティション番号を戻します。この番号は、システム・パーティション表の該当パーティションで操作(DMLまたは問合せ)を実行する際に使用できます。

実表が時間隔パーティション表の場合、DATAOBJ_TO_PARTITION関数のかわりにこの関数を使用することをお薦めします。DATAOBJ_TO_PARTITION関数は、物理識別子を使用して絶対パーティション番号を判断します。ただし、実表が時間隔パーティション表の場合、対応する非マテリアライズド・パーティションのパーティション番号にホールがある可能性があります。これは、システム・パーティション表がマテリアライズド・パーティションのみを持ち、実表のパーティションと基礎となるシステム・パーティション索引の記憶域表のパーティションとの間で、DATAOBJ_TO_PARTITION番号で不一致が発生する場合があるためです。DATAOBJ_TO_MAT_PARTITION関数は、マテリアライズド・パーティション番号(絶対パーティション番号ではなく)を返し、2つの表が同期し続けるのを助けます。この関数を使用するには、時間隔パーティション表上のローカル・ドメイン索引をサポートする予定の索引型を移行する必要があります。

関連項目:

- DATAOBJ_TO_PARTITION

- DATAOBJ_TO_MAT_PARTITIONファンクションの使用の詳細および例は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください

DATAOBJ_TO_PARTITION

構文

用途

DATAOBJ_TO_PARTITIONは、ドメイン索引データの格納に使用するシステム・パーティション表でデータ・メンテナンスまたは問合せ操作を実行するデータ・カートリッジ開発者にのみ役立ちます。DML操作や問合せ操作は、ドメイン索引の実表での対応する操作によってトリガーされます。

このファンクションは、引数として実表の名前と実表のパーティションのパーティションIDを取ります。これらはともに、適切なODCIIndexメソッドによってファンクションに渡されます。ファンクションは、対応するシステム・パーティション表の絶対パーティション番号を戻します。この番号は、システム・パーティション表の該当パーティションで操作(DMLまたは問合せ)を実行する際に使用できます。

注意:
実表が時間隔パーティション表の場合、かわりにDATAOBJ_TO_MAT_PARTITION関数を使用することをお薦めします。詳細は、DATAOBJ_TO_MAT_PARTITIONを参照してください。

関連項目:
DATAOBJ_TO_PARTITIONファンクションの使用の詳細および例は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください

DBTIMEZONE

構文

用途

DBTIMEZONEは、データベースのタイムゾーンの値を戻します。戻り型は、タイムゾーン・オフセット('[+|-]TZH:TZM'という書式の文字列型)またはタイムゾーン地域名です。これは、最近のCREATE DATABASEまたはALTER DATABASE文でユーザーが指定したデータベース・タイムゾーンの値によって異なります。

例

次の例では、データベース・タイムゾーンがUTCタイムゾーンに設定されていると想定します。

SELECT DBTIMEZONE
FROM DUAL;

DBTIME
------
+00:00

DECODE

構文

用途

DECODEは、exprを各search値と1つずつ比較します。exprがsearchと等しい場合、Oracle Databaseは対応するresultを戻します。一致する値が見つからない場合は、defaultを戻します。defaultが省略されている場合は、NULLを戻します。

引数は、任意の数値型(NUMBER、BINARY_FLOAT、BINARY_DOUBLE)または文字列型です。

- exprおよびsearchが文字データである場合、Oracleは、非空白埋め比較セマンティクスを使用してそれらを比較します。expr、searchおよびresultのデータ型は、CHAR、VARCHAR2、NCHARまたはNVARCHAR2です。戻される文字列は、VARCHAR2データ型で、最初のresultパラメータと同じキャラクタ・セットの文字列です。

- 最初のsearch-resultの組が数値である場合、Oracleはすべてのsearch-resultの式と最初のexprを比較して、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。

search、resultおよびdefaultの値は、式から導出できます。Oracle Databaseでは、短絡評価を使用します。データベースは、search値のいずれかとexprを比較する前にすべてのsearch値を評価するのではなく、各search値とexprを比較する前にのみ、各search値を評価します。その結果、exprと等しいsearchが見つかると、Oracleはその後のsearchを評価しません。

比較する前に、Oracleはexprと各search値を、最初のsearch値のデータ型に自動的に変換します。Oracleは、戻り値を最初のresultと同じデータ型に自動的に変換します。最初のresultのデータ型がCHARの場合、または最初のresultがNULLの場合、Oracleは戻り値をVARCHAR2データ型の値に変換します。

DECODEファンクションでは、Oracleは2つのNULLを同等とみなします。exprがNULLの場合、Oracleは最初のsearch値のresultもNULLとして戻します。

DECODEファンクションのコンポーネントの最大数は、expr、search、result、defaultを含めて255です。

関連項目:

- 比較セマンティクスについては、「データ型の比較規則」を参照してください。

- データ型変換については、「データ変換」を参照してください。

- 浮動小数点の比較セマンティクスについては、「浮動小数点数」を参照してください。

- 暗黙的な変換のデメリットについては、「暗黙的なデータ変換と明示的なデータ変換」を参照してください。

- 「COALESCE」および「CASE式」を参照してください。これらは、DECODEと同様の機能を提供します。

例

この例では、warehouse_idの値をデコードします。warehouse_idが1の場合「Southlake」を、warehouse_idが2の場合は「San Francisco」を戻します。warehouse_idが1、2、3、4のいずれでもない場合、ファンクションは「Non domestic」を戻します。

SELECT product_id,
DECODE (warehouse_id, 1, 'Southlake',
2, 'San Francisco',
3, 'New Jersey',
4, 'Seattle',
'Non domestic') "Location"
FROM inventories
WHERE product_id < 1775
ORDER BY product_id, "Location";

DECOMPOSE

構文

用途

DECOMPOSEは、Unicodeキャラクタに対してのみ有効です。DECOMPOSEは、任意のデータ型の文字列を引数として取り、入力と同じキャラクタ・セットで分解されたUnicodeの文字列を戻します。たとえば、oウムラウト・コードポイントは、ウムラウト・コードポイントが続く「o」コードポイントとして戻されます。

- stringは、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBデータ型です。

- CANONICALを使用すると標準的な分解が行われ、(たとえば、COMPOSEファンクションを使用して)元の文字列への再構成が可能になります。これはデフォルトであり、NFD正規形の文字列が戻されます。

- COMPATIBILITYを使用すると互換モードで分解が行われます。このモードでは、再構成はできません。このモードは、半角および全角のカタカナ文字を分解する場合など、外的な書式またはスタイル情報なしに再構成を行うことが望ましくない場合に有効です。このモードでは、NFKD正規形の文字列が戻されます。

暗黙的な変換を使用して、CLOBおよびNCLOBの値がサポートされます。charが文字のLOB値の場合、COMPOSE演算の前にVARCHAR値に変換されます。特定の開発環境で、LOB値のサイズがVARCHARのサポートする長さを超える場合、この演算は失敗します。

関連項目:

- Unicodeキャラクタ・セットおよびキャラクタ・セマンティクスの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

- 「COMPOSE」

例

次の例では、文字列「Châteaux」をその要素のコードポイントに分解します。

SELECT DECOMPOSE ('Châteaux')
FROM DUAL;

DECOMPOSE
---------
Cha^teaux

注意:
この例の結果は、ご使用のオペレーティング・システムのキャラクタ・セットによって異なる場合があります。

DELETEXML

注意:
DELETEXMLファンクションは、非推奨です。これは、下位互換性を保つためにのみサポートされています。そのかわりに、XQuery Updateを使用してください。詳細は、『Oracle XML DB開発者ガイド』を参照してください。

構文

用途

DELETEXMLは、ターゲットXMLのXPath式で一致する単一または複数のノードを削除します。

- XMLType_instanceは、XMLTypeのインスタンスです。

- XPath_stringは、削除するノードを1つ以上指定するXPath式です。先頭にスラッシュを付けて絶対XPath_stringを指定したり、先頭のスラッシュを省略して相対XPath_stringを指定できます。先頭のスラッシュを省略した場合、相対パスのコンテキストは、デフォルトでルート・ノードに設定されます。XPath_stringで指定したノードの子ノードも削除されます。

- オプションのnamespace_stringは、XPath_stringのネームスペース情報を提供します。このパラメータは、VARCHAR2型である必要があります。

関連項目:
このファンクションの詳細は、『Oracle XML DB開発者ガイド』を参照してください。

例

次の例では、「APPENDCHILDXML」の例で変更したウェアハウスの1つのwarehouse_specから/Ownerノードを削除します。

UPDATE warehouses
SET warehouse_spec = DELETEXML(warehouse_spec, '/Warehouse/Building/Owner')
WHERE warehouse_id = 2;

SELECT warehouse_id, warehouse_spec
FROM warehouses  WHERE warehouse_id in (2,3);

ID WAREHOUSE_SPEC
---------- -----------------------------------
2 <?xml version="1.0"?>
<Warehouse>
<Building>Rented</Building>
<Area>50000</Area>
<Docks>1</Docks>
<DockType>Side load</DockType>
<WaterAccess>Y</WaterAccess>
<RailAccess>N</RailAccess>
<Parking>Lot</Parking>
<VClearance>12 ft</VClearance>
</Warehouse>

3 <?xml version="1.0"?>
<Warehouse>
<Building>Rented<Owner>Grandco</Owner>
</Building>
<Area>85700</Area>
<DockType/>
<WaterAccess>N</WaterAccess>
<RailAccess>N</RailAccess>
<Parking>Street</Parking>
<VClearance>11.5 ft</VClearance>
</Warehouse>

DENSE_RANK

集計の構文

dense_rank_aggregate::=

分析の構文

dense_rank_analytic::=

関連項目:
構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

DENSE_RANKは、順序付けされた行のグループ内の行のランクを計算し、そのランクをNUMBERとして戻します。ランクは1から始まる連続した整数です。ランクの最大値は、問合せが戻す一意の数値です。同ランクの場合、ランクの値はスキップされません。そのランク付け基準に関して同じ値を持つ行は、同じランクになります。このファンクションは、上位N番および下位N番のレポートに有効です。

このファンクションは、引数に任意の数値データ型を受け入れ、NUMBERを戻します。

- 集計ファンクションとして使用するDENSE_RANKは、ファンクションの引数によって識別される不確定な行の稠密ランクを、与えられたソート指定で計算します。ファンクションの引数は、各集計グループの単一行を識別するため、すべての引数は各集計グループ内で定数式に評価される必要があります。定数引数式および集計のorder_by_clauseの式の位置は、一致します。このため、引数の数は同じであり、型は互換性がある必要があります。

- 分析ファンクションとして使用するDENSE_RANKは、他の行について、問合せで戻される各行のランクを計算します。この計算は、order_by_clauseにあるvalue_exprsの値に基づいて行われます。

集計の例

次の例では、サンプル表oe.employeesから、給与が$15,500であり、歩合が5%の仮想の従業員のランクを計算します。

SELECT DENSE_RANK(15500, .05) WITHIN GROUP
(ORDER BY salary DESC, commission_pct) "Dense Rank"
FROM employees;

Dense Rank
----------
3

分析の例

次の文は、サンプル・スキーマhrの部門60の従業員を、その給与に基づいてランク付けします。給与の値が等しい従業員のランクは同じになります。ただし、ランクの値がスキップされることはありません。この例と、「RANK」の分析の例を比較してください。

SELECT department_id, last_name, salary,
DENSE_RANK() OVER (PARTITION BY department_id ORDER BY salary) DENSE_RANK
FROM employees WHERE department_id = 60
ORDER BY DENSE_RANK, last_name;

DEPARTMENT_ID LAST_NAME                     SALARY DENSE_RANK
------------- ------------------------- ---------- ----------
60 Lorentz                         4200          1
60 Austin                          4800          2
60 Pataballa                       4800          2
60 Ernst                           6000          3
60 Hunold                          9000          4

DEPTH

構文

用途

DEPTHは、UNDER_PATHおよびEQUALS_PATH条件でのみ使用される補助ファンクションです。このファンクションは、同じ相関変数を持つUNDER_PATH条件によって指定されるパスのレベル数を戻します。

correlation_integerは任意のNUMBER整数です。文に複数の一次条件が含まれている場合に、この補助ファンクションをその一次条件と関連付けるために使用します。1未満の値は1として扱われます。

関連項目:
「EQUALS_PATH条件」および「UNDER_PATH条件」を参照してください。関連するファンクションについては、「PATH」を参照してください。

例

EQUALS_PATHおよびUNDER_PATH条件は、2つの補助ファンクションDEPTHおよびPATHを取ることができます。次に、その2つの補助ファンクションの使用方法を示します。この例では、XMLスキーマであるwarehouses.xsd(「SQL文でのXMLの使用方法」で作成)が存在することを前提としています。

SELECT PATH(1), DEPTH(2)
FROM RESOURCE_VIEW
WHERE UNDER_PATH(res, '/sys/schemas/OE', 1)=1
AND UNDER_PATH(res, '/sys/schemas/OE', 2)=1;

PATH(1)                          DEPTH(2)
-------------------------------- --------
. . .
www.example.com                         1
www.example.com/xwarehouses.xsd         2
. . .

DEREF

構文

用途

DEREFは、引数exprのオブジェクト参照を戻します。この場合、exprはオブジェクトにREFを戻す必要があります。問合せでこのファンクションを使用しない場合、次の例で示すとおり、かわりにREFのオブジェクトIDを戻します。

関連項目:
「MAKE_REF」

例

サンプル・スキーマoeには、cust_address_typというオブジェクト型が含まれます。「REF制約の例」では、類似する型cust_address_typ_new、およびその型へのREFである1つの列を含む表を作成します。次の例では、その列に挿入を行う方法、およびDEREFを使用して列から情報を抽出する方法を示します。

INSERT INTO address_table VALUES
('1 First', 'G45 EU8', 'Paris', 'CA', 'US');

INSERT INTO customer_addresses
SELECT 999, REF(a) FROM address_table a;

SELECT address
FROM customer_addresses
ORDER BY address;

ADDRESS
--------------------------------------------------------------------------------
000022020876B2245DBE325C5FE03400400B40DCB176B2245DBE305C5FE03400400B40DCB1

SELECT DEREF(address)
FROM customer_addresses;

DEREF(ADDRESS)(STREET_ADDRESS, POSTAL_CODE, CITY, STATE_PROVINCE, COUNTRY_ID)
--------------------------------------------------------------------------------
CUST_ADDRESS_TYP_NEW('1 First', 'G45 EU8', 'Paris', 'CA', 'US')

DUMP

構文

用途

DUMPは、exprのデータ型コード、長さ(バイト単位)および内部表現を含むVARCHAR2値を戻します。戻される結果は、常にデータベース・キャラクタ・セットの文字です。各コードに対応するデータ型については、表2-1「組込みデータ型の概要」を参照してください。

引数return_fmtには戻り値の書式として、次の値のいずれかを指定します。

- 8は、結果を8進表記で戻します。

- 10は、結果を10進表記で戻します。

- 16は、結果を16進表記で戻します。

- 17は、各バイトがコンパイラのキャラクタ・セット内の出力可能な文字(通常はASCIIまたはEBCDIC)として解釈される場合にのみ、文字として出力された各バイトを戻します。一部のASCII制御文字は、^X形式で出力される場合もあります。それ以外の場合、文字は16進表記で出力されます。NLSパラメータはすべて無視されます。return_fmt 17を指定したDUMPの場合、特定の出力書式には依存しないでください。

デフォルトでは、戻り値にキャラクタ・セット情報が含まれません。exprのキャラクタ・セット名を取り出すには、前述の書式のいずれかの値に1000を加えます。たとえば、return_fmtに1008を指定すると、8進表記で結果が戻り、さらにexprのキャラクタ・セット名が得られます。

引数start_positionとlengthを組み合せて、内部表現の戻す部分を指定します。デフォルトでは、10進表記で全体の内部表現が戻されます。

exprがNULLの場合はNULLを戻します。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。

関連項目:
詳細は、「データ型の比較規則」を参照してください。

例

次の例では、文字列式および列からダンプ情報を抽出する方法を示します。

SELECT DUMP('abc', 1016)
FROM DUAL;

DUMP('ABC',1016)
------------------------------------------
Typ=96 Len=3 CharacterSet=WE8DEC: 61,62,63

SELECT DUMP(last_name, 8, 3, 2) "OCTAL"
FROM employees
WHERE last_name = 'Hunold'
ORDER BY employee_id;

OCTAL
-------------------------------------------------------------------
Typ=1 Len=6: 156,157

SELECT DUMP(last_name, 10, 3, 2) "ASCII"
FROM employees
WHERE last_name = 'Hunold'
ORDER BY employee_id;

ASCII
--------------------------------------------------------------------
Typ=1 Len=6: 110,111

EMPTY_BLOB、EMPTY_CLOB

構文

empty_LOB::=

用途

EMPTY_BLOBおよびEMPTY_CLOBは、LOB変数を初期化したり、INSERTまたはUPDATE文でLOB列または属性をEMPTYに初期化できる空のLOBロケータを戻します。EMPTYとは、LOBは初期化されていても、データが移入されていない状態をいいます。

注意:
空のLOBと、NULLのLOBは、同じではありません。また、空のCLOBと、長さが0(ゼロ)の文字列を含むLOBは、同じではありません。詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。

LOBロケータの制限 このファンクションから戻されるロケータは、DBMS_LOBパッケージまたはOCIへのパラメータとして使用することはできません。

例

次の例では、サンプル表pm.print_mediaのad_photo列をEMPTYに初期化します。

UPDATE print_media
SET ad_photo = EMPTY_BLOB();

EXISTSNODE

注意:
EXISTSNODEファンクションは非推奨です。これは、下位互換性を保つためにのみサポートされています。ただし、かわりにXMLEXISTSファンクションを使用することをお薦めします。詳細は、「XMLEXISTS」を参照してください。

構文

用途

EXISTSNODEは、指定されたパスを使用するXML文書のトラバースが任意のノードとなるかどうかを決定します。このファンクションは、XML文書を含むXMLTypeインスタンスとパスを指定するVARCHAR2のXPath文字列を、引数として受け取ります。オプションのnamespace_stringは、接頭辞のデフォルト・マッピングまたはネームスペース・マッピング(Oracle DatabaseがXPath式を評価する場合に使用)を指定するVARCHAR2値に解決される必要があります。

namespace_string引数のデフォルトは、ルート要素のネームスペースになります。Xpath_stringのサブ要素を参照する場合は、namespace_stringを指定する必要があります。また、これらの引数の両方にwho接頭辞を指定する必要があります。

関連項目:
namespace_stringの指定例およびwho接頭辞の使用例については、「SQL文でのXMLの使用方法」を参照してください。

戻り値は、NUMBERです。

- ドキュメントにXPathトラバースを適用した後にノードが存在しない場合は、0(ゼロ)が戻ります。

- ノードが存在する場合は、1が戻ります。

例

次の例では、サンプル表oe.warehousesのwarehouse_spec列のXMLパスに/Warehouse/Dockノードが存在するかを判断します。

SELECT warehouse_id, warehouse_name
FROM warehouses
WHERE EXISTSNODE(warehouse_spec, '/Warehouse/Docks') = 1
ORDER BY warehouse_id;

WAREHOUSE_ID WAREHOUSE_NAME
------------ -----------------------------------
1 Southlake, Texas
2 San Francisco
4 Seattle, Washington

EXP

構文

用途

EXPは、eのn乗を返します(e = 2.71828183...)。このファンクションは、引数と同じ型の値を戻します。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。引数がBINARY_FLOATの場合、このファンクションはBINARY_DOUBLEを戻します。それ以外の場合、引数と同じ数値データ型を戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

例

次の例では、eを4乗した値を戻します。

SELECT EXP(4) "e to the 4th power"
FROM DUAL;

e to the 4th power
------------------
54.59815

EXTRACT(日時)

構文

extract_datetime::=

用途

EXTRACTは、日時式または期間式から、指定された日時フィールドの値を抽出して戻します。exprには、要求されたフィールドと互換性のある日時または期間データ型に評価される任意の式を指定できます。

- YEARまたはMONTHが要求された場合、exprはデータ型DATE、TIMESTAMP、TIMESTAMP WITH TIME ZONE、TIMESTAMP WITH LOCAL TIME ZONEまたはINTERVAL YEAR TO MONTHの式に評価される必要があります。

- DAYが要求された場合、exprはデータ型DATE、TIMESTAMP、TIMESTAMP WITH TIME ZONE、TIMESTAMP WITH LOCAL TIME ZONEまたはINTERVAL DAY TO SECONDの式に評価される必要があります。

- HOUR、MINUTEまたはSECONDが要求された場合、exprはデータ型TIMESTAMP、TIMESTAMP WITH TIME ZONE、TIMESTAMP WITH LOCAL TIME ZONEまたはINTERVAL DAY TO SECONDの式に評価される必要があります。DATEは、Oracle Databaseによって時刻フィールドを持たないANSI DATEデータ型として処理されるため、ここでは有効ではありません。

- TIMEZONE_HOUR、TIMEZONE_MINUTE、TIMEZONE_ABBR、TIMEZONE_REGIONまたはTIMEZONE_OFFSETが要求された場合、exprはデータ型TIMESTAMP WITH TIME ZONEまたはTIMESTAMP WITH LOCAL TIME ZONEの式に評価される必要があります。

EXTRACTは、exprをANSI日時データ型として解釈します。たとえば、EXTRACTはDATEをレガシーOracle DATEではなく、時刻要素を持たないANSI DATEとして処理します。したがって、DATE値からは、YEAR、MONTHおよびDAYのみを抽出できます。同様に、TIMESTAMP WITH TIME ZONEデータ型からは、TIMEZONE_HOURおよびTIMEZONE_MINUTEのみを抽出できます。

TIMEZONE_REGIONまたはTIMEZONE_ABBR(略称)を指定する場合、戻り値は、適切なタイムゾーン地域名または略称を含むVARCHAR2文字列です。その他の日時フィールドを指定する場合、戻り値は、グレゴリオ暦での日時値を表すNUMBERデータ型の整数値です。タイムゾーン値を持つ日時から抽出する場合は、UTC形式の値が返されます。有効なタイムゾーン地域名およびそれに対する略称を表示するには、V$TIMEZONE_NAMES動的パフォーマンス・ビューに問合せを実行してください。

このファンクションは、次に示す最初の例のように、非常に大規模な表の日時フィールド値を操作する場合に特に有効です。

注意:
夏時間機能には、タイムゾーン地域名が必要です。この名前は、大小2つのタイムゾーン・ファイルに格納されます。これらのファイルのうち、使用する環境および使用するOracle Databaseのリリースに応じて、いずれか一方がデフォルトのファイルになります。タイムゾーン・ファイルおよびタイムゾーン名の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

日時フィールドと日時または期間値の式を組み合せると、あいまいな結果になる場合があります。この場合、Oracle Databaseは、UNKNOWNを戻します(詳細は、次の例を参照してください)。

関連項目:

- 両方のファイル内のすべてのタイムゾーン地域名のリストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

- datetime_value_exprおよびinterval_value_exprの詳細は、「日時および期間の演算」を参照してください。

- 動的パフォーマンス・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

例

次の例では、oe.orders表から、各月の注文数を戻します。

SELECT EXTRACT(month FROM order_date) "Month", COUNT(order_date) "No. of Orders"
FROM orders
GROUP BY EXTRACT(month FROM order_date)
ORDER BY "No. of Orders" DESC, "Month";

Month No. of Orders
---------- -------------
11            15
6            14
7            14
3            11
5            10
2             9
9             9
8             7
10             6
1             5
12             4
4             1

12 rows selected.

次の例では、1998年を戻します。

SELECT EXTRACT(YEAR FROM DATE '1998-03-07')
FROM DUAL;

EXTRACT(YEARFROMDATE'1998-03-07')
---------------------------------
1998

次の例では、サンプル表hr.employeesから、2007以降に雇用されたすべての従業員を選択します。

SELECT last_name, employee_id, hire_date
FROM employees
WHERE EXTRACT(YEAR FROM TO_DATE(hire_date, 'DD-MON-RR')) > 2007
ORDER BY hire_date;

LAST_NAME                 EMPLOYEE_ID HIRE_DATE
------------------------- ----------- ---------
Johnson                           179 04-JAN-08
Grant                             199 13-JAN-08
Marvins                           164 24-JAN-08
. . .

次の例では、結果があいまいになるため、OracleはUNKNOWNを戻します。

SELECT EXTRACT(TIMEZONE_REGION FROM TIMESTAMP '1999-01-01 10:00:00 -08:00')
FROM DUAL;

EXTRACT(TIMEZONE_REGIONFROMTIMESTAMP'1999-01-0110:00:00-08:00')
----------------------------------------------------------------
UNKNOWN

タイムゾーン数値オフセットが式に指定され、その数値オフセットが複数のタイムゾーン地域名をマップする場合、結果があいまいになります。

EXTRACT (XML)

注意:
EXTRACT(XML)ファンクションは非推奨です。これは、下位互換性を保つためにのみサポートされています。ただし、かわりにXMLQUERYファンクションを使用することをお薦めします。詳細は、「XMLQUERY」を参照してください。

構文

extract_xml::=

用途

EXTRACT(XML)は、EXISTSNODEファンクションに似ています。このファンクションは、VARCHAR2のXPath文字列に適用され、XMLの断片を含むXMLTypeインスタンスを戻します。先頭にスラッシュを付けて絶対XPath_stringを指定したり、先頭のスラッシュを省略して相対XPath_stringを指定できます。先頭のスラッシュを省略した場合、相対パスのコンテキストは、デフォルトでルート・ノードに設定されます。処理しているXMLでネームスペース接頭辞が使用される場合、オプションのnamespace_stringが必要です。この引数は、接頭辞のデフォルト・マッピングまたはネームスペース・マッピング(Oracle DatabaseがXPath式を評価する場合に使用)を指定するVARCHAR2値に解決される必要があります。

例

次の例では、サンプル表oe.warehousesのwarehouse_spec列のXMLパスの/Warehouse/Dockノードの値を抽出します。

SELECT warehouse_name,
EXTRACT(warehouse_spec, '/Warehouse/Docks') "Number of Docks"
FROM warehouses
WHERE warehouse_spec IS NOT NULL
ORDER BY warehouse_name;

WAREHOUSE_NAME            Number of Docks
------------------------- -------------------------
New Jersey
San Francisco             <Docks>1</Docks>
Seattle, Washington       <Docks>3</Docks>
Southlake, Texas          <Docks>2</Docks>

この例と、XMLのフラグメントのスカラー値を戻す、「EXTRACTVALUE」の例を比較してみてください。

EXTRACTVALUE

注意:
EXTRACTVALUEファンクションは非推奨です。これは、下位互換性を保つためにのみサポートされています。ただし、かわりに、XMLTABLEファンクション、またはXMLCASTおよびXMLQUERYファンクションを使用することをお薦めします。詳細は、「XMLTABLE」、「XMLCAST」および「XMLQUERY」を参照してください。

構文

EXTRACTVALUEは、引数としてXMLTypeインスタンスとXPath式を取り、結果として得られるノードのスカラー値を戻します。結果はシングルノードであり、テキスト・ノード、属性または要素のいずれかである必要があります。結果が要素である場合、その要素はシングル・テキスト・ノードを子ノードとして持つ必要があり、このファンクションが戻す値は、その子ノードの値になります。先頭にスラッシュを付けて絶対XPath_stringを指定したり、先頭のスラッシュを省略して相対XPath_stringを指定できます。先頭のスラッシュを省略した場合、相対パスのコンテキストは、デフォルトでルート・ノードに設定されます。

指定されたXPathが複数の子ノードを持つノードを指す場合、または指されたノードが非テキスト・ノードの子を持つ場合は、エラーが戻されます。オプションのnamespace_stringは、接頭辞のデフォルト・マッピングまたはネームスペース・マッピング(OracleがXPath式を評価する場合に使用)を指定するVARCHAR2値に解決される必要があります。

XMLスキーマに基づくドキュメントで戻り値の型が推測できる場合は、適切な型のスカラー値が戻ります。その他の場合は、VARCHAR2型の結果が戻ります。XMLスキーマに基づかないドキュメントの場合、戻り値は常にVARCHAR2です。

例

次の例では、入力として、「EXTRACT(XML)」の例と同じ引数を取ります。このファンクションは、EXTRACTファンクションとは異なり、XMLのフラグメントを戻すのではなく、XMLのフラグメントのスカラー値を戻します。

SELECT warehouse_name, EXTRACTVALUE(e.warehouse_spec, '/Warehouse/Docks') "Docks"
FROM warehouses e
WHERE warehouse_spec IS NOT NULL
ORDER BY warehouse_name;

WAREHOUSE_NAME       Docks
-------------------- ------------
New Jersey
San Francisco        1
Seattle, Washington  3
Southlake, Texas     2

FEATURE_DETAILS

構文

feature_details::=

分析の構文

feature_details_analytic::=

mining_attribute_clause::=

mining_analytic_clause::=

関連項目:
mining_analytic_clauseの構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

FEATURE_DETAILSは、選択内に含まれる各行の特徴の詳細を返します。戻り値は、最も値が大きい特徴または指定されたfeature_idの属性について記述したXML文字列です。

topN

topNに値を指定すると、このファンクションは特徴の値に最も影響力のあるN個の属性を返します。topNを指定しないと、このファンクションは最も影響力のある5つの属性を返します。

DESC、ASC、またはABS

返される属性が重みで順序付けされます。属性の重みは、その属性が特徴値に与える正の影響または負の影響を表します。正の重みは、特徴の値が大きくなることを示します。負の重みは、特徴の値が小さくなることを示します。

デフォルトでは、FEATURE_DETAILSは、最大の正の重みを持つ属性を返します(DESC)。ASCを指定すると、最大の負の重みを持つ属性が返されます。ABSを指定すると、正負を問わずに、最大の重みを持つ属性が返されます。結果は、絶対値が高いほうから低いほうに順序付けされています。重みがゼロの属性は、出力に含まれません。

構文の選択

FEATURE_DETAILSは、2つの方法のどちらかでデータにスコアを付けます。1つの方法では、データにマイニング・モデル・オブジェクトを適用します。もう1つの方法では、1つ以上の一時マイニング・モデルを作成して適用する分析句を実行して動的にデータをマイニングします。構文または分析構文を選択します。

- 構文 — 事前に定義されたモデルでデータにスコアを付ける場合は、最初の構文を使用します。特徴抽出モデルの名前を指定します。

- 分析構文 — 事前定義されたモデルなしで、データにスコアを付ける場合は、分析構文を使用します。INTO n (nは、抽出する特徴の数)と、mining_analytic_clause (複数のモデル構築のためにデータをパーティション化する必要がある場合に指定します)を含めます。mining_analytic_clauseは、query_partition_clauseと、order_by_clauseをサポートします。("analytic_clause::="を参照。)

mining_attribute_clause

mining_attribute_clauseは、スコアの予測子として使用する列の属性を特定します。このファンクションが分析構文で起動された場合は、これらの予測子が一時モデルの構築にも使用されます。mining_attribute_clauseは、PREDICTIONファンクションと同様に動作します。("mining_attribute_clause::="を参照。)

関連項目:

- スコアリングの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

- 特徴抽出の詳細は、『Oracle Data Mining概要』を参照してください。

例について:
次に示す例は、Data Miningのサンプル・プログラムからの抜粋です。サンプル・プログラムの詳細は、Oracle Data Miningユーザーズ・ガイドの「付録A」を参照してください。

例

この例では、特徴抽出モデルnmf_sh_sampleを使用して、データにスコアを付けます。この問合せは、顧客100002を代表する3つの特徴と、それらの特徴に最も影響を与える属性を返します。

SELECT S.feature_id fid, value val,
FEATURE_DETAILS(nmf_sh_sample, S.feature_id, 5 using T.*) det
FROM
(SELECT v.*, FEATURE_SET(nmf_sh_sample, 3 USING *) fset
FROM mining_data_apply_v v
WHERE cust_id = 100002) T,
TABLE(T.fset) S
ORDER BY 2 DESC;

FID    VAL  DET
---- ------  ------------------------------------------------------------------------------------
5  3.492  <Details algorithm="Non-Negative Matrix Factorization" feature="5">
<Attribute name="BULK_PACK_DISKETTES" actualValue="1" weight=".077" rank="1"/>
<Attribute name="OCCUPATION" actualValue="Prof." weight=".062" rank="2"/>
<Attribute name="BOOKKEEPING_APPLICATION" actualValue="1" weight=".001" rank="3"/>
<Attribute name="OS_DOC_SET_KANJI" actualValue="0" weight="0" rank="4"/>
<Attribute name="YRS_RESIDENCE" actualValue="4" weight="0" rank="5"/>
</Details>
3  1.928  <Details algorithm="Non-Negative Matrix Factorization" feature="3">
<Attribute name="HOUSEHOLD_SIZE" actualValue="2" weight=".239" rank="1"/>
<Attribute name="CUST_INCOME_LEVEL" actualValue="L: 300\,000 and above"
weight=".051" rank="2"/>
<Attribute name="FLAT_PANEL_MONITOR" actualValue="1" weight=".02" rank="3"/>
<Attribute name="HOME_THEATER_PACKAGE" actualValue="1" weight=".006" rank="4"/>
<Attribute name="AGE" actualValue="41" weight=".004" rank="5"/>
</Details>
8   .816  <Details algorithm="Non-Negative Matrix Factorization" feature="8">
<Attribute name="EDUCATION" actualValue="Bach." weight=".211" rank="1"/>
<Attribute name="CUST_MARITAL_STATUS" actualValue="NeverM" weight=".143" rank="2"/>
<Attribute name="FLAT_PANEL_MONITOR" actualValue="1" weight=".137" rank="3"/>
<Attribute name="CUST_GENDER" actualValue="F" weight=".044" rank="4"/>
<Attribute name="BULK_PACK_DISKETTES" actualValue="1" weight=".032" rank="5"/>
</Details>

分析の例

この例では、顧客の属性を6つの特徴に動的にマップして、顧客100001の特徴マッピングを返します。

SELECT feature_id, value
FROM (
SELECT cust_id, feature_set(INTO 6 USING *) OVER () fset
FROM mining_data_apply_v),
TABLE (fset)
WHERE cust_id = 100001
ORDER BY feature_id;

FEATURE_ID    VALUE
---------- --------
1    2.670
2     .000
3    1.792
4     .000
5     .000
6    3.379

FEATURE_ID

構文

feature_id::=

分析の構文

feature_id_analytic::=

mining_attribute_clause::=

mining_analytic_clause::=

関連項目:
mining_analytic_clauseの構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

FEATURE_IDは、選択内に含まれる各行の最も値が大きい特徴の識別子(ID)を返します。この特徴IDは、Oracle NUMBERとして返されます。

構文の選択

FEATURE_IDは、2つの方法のどちらかでデータにスコアを付けます。1つの方法では、データにマイニング・モデル・オブジェクトを適用します。もう1つの方法では、1つ以上の一時マイニング・モデルを作成して適用する分析句を実行して動的にデータをマイニングします。構文または分析構文を選択します。

- 構文 — 事前に定義されたモデルでデータにスコアを付ける場合は、最初の構文を使用します。特徴抽出モデルの名前を指定します。

- 分析構文 — 事前定義されたモデルなしで、データにスコアを付ける場合は、分析構文を使用します。INTO n (nは、抽出する特徴の数)と、mining_analytic_clause (複数のモデル構築のためにデータをパーティション化する必要がある場合に指定します)を含めます。mining_analytic_clauseは、query_partition_clauseと、order_by_clauseをサポートします。("analytic_clause::="を参照。)

mining_attribute_clause

mining_attribute_clauseは、スコアの予測子として使用する列の属性を特定します。このファンクションが分析構文で起動された場合は、これらの予測子が一時モデルの構築にも使用されます。mining_attribute_clauseは、PREDICTIONファンクションと同様に動作します。("mining_attribute_clause::="を参照。)

関連項目:

- スコアリングの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

- 特徴抽出の詳細は、『Oracle Data Mining概要』を参照してください。

例について:
次に示す例は、Data Miningのサンプル・プログラムからの抜粋です。サンプル・プログラムの詳細は、Oracle Data Miningユーザーズ・ガイドの「付録A」を参照してください。

例

この例では、データ・セット内の特徴と、それに対応する顧客の件数を示します。

SELECT FEATURE_ID(nmf_sh_sample USING *) AS feat, COUNT(*) AS cnt
FROM nmf_sh_sample_apply_prepared
GROUP BY FEATURE_ID(nmf_sh_sample USING *)
ORDER BY cnt DESC, feat DESC;

FEAT        CNT
---------- ----------
7       1443
2         49
3          6
6          1
1          1

FEATURE_SET

構文

feature_set::=

分析の構文

feature_set_analytic::=

mining_attribute_clause::=

mining_analytic_clause::=

関連項目:
mining_analytic_clauseの構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

FEATURE_SETは、選択内に含まれる各行の特徴IDと特徴値の組で構成されるセットを返します。戻り値は、フィールド名がFEATURE_IDおよびVALUEのオブジェクトのVARRAYです。どちらのフィールドのデータ型もNUMBERです。

topNおよびcutoff

topNとcutoffを指定すると、このファンクションから返される特徴の数を制限できます。デフォルトでは、topNおよびcutoffがnullであり、すべての特徴が戻されます。

- topNは、最も値が大きいほうからN個の特徴値です。N番目の値を持つ特徴が複数ある場合でも、ファンクションが選択するのはそのうち1つのみです。

- cutoffは、値のしきい値です。cutoff以上の特徴のみが返されます。cutoffのみでフィルタ処理するには、topNにNULLを指定します。

cutoff以上の特徴をN個まで返すようにするには、topNとcutoffの両方を指定します。

構文の選択

FEATURE_SETは、2つの方法のどちらかでデータにスコアを付けます。1つの方法では、データにマイニング・モデル・オブジェクトを適用します。もう1つの方法では、1つ以上の一時マイニング・モデルを作成して適用する分析句を実行して動的にデータをマイニングします。構文または分析構文を選択します。

- 構文 — 事前に定義されたモデルでデータにスコアを付ける場合は、最初の構文を使用します。特徴抽出モデルの名前を指定します。

- 分析構文 — 事前定義されたモデルなしで、データにスコアを付ける場合は、分析構文を使用します。INTO n (nは、抽出する特徴の数)と、mining_analytic_clause (複数のモデル構築のためにデータをパーティション化する必要がある場合に指定します)を含めます。mining_analytic_clauseは、query_partition_clauseと、order_by_clauseをサポートします。("analytic_clause::="を参照。)

mining_attribute_clause

mining_attribute_clauseは、スコアの予測子として使用する列の属性を特定します。このファンクションが分析構文で起動された場合は、これらの予測子が一時モデルの構築にも使用されます。mining_attribute_clauseは、PREDICTIONファンクションと同様に動作します。("mining_attribute_clause::="を参照。)

関連項目:

- スコアリングの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

- 特徴抽出の詳細は、『Oracle Data Mining概要』を参照してください。

例について:
次に示す例は、Data Miningのサンプル・プログラムからの抜粋です。サンプル・プログラムの詳細は、Oracle Data Miningユーザーズ・ガイドの「付録A」を参照してください。

例

この例では、特定の顧客レコードに対応する上位の特徴を示し、各特徴の上位の属性を(0.25を超える係数を基準にして)決定します。

WITH
feat_tab AS (
SELECT F.feature_id fid,
A.attribute_name attr,
TO_CHAR(A.attribute_value) val,
A.coefficient coeff
FROM TABLE(DBMS_DATA_MINING.GET_MODEL_DETAILS_NMF('nmf_sh_sample')) F,
TABLE(F.attribute_set) A
WHERE A.coefficient > 0.25
),
feat AS (
SELECT fid,
CAST(COLLECT(Featattr(attr, val, coeff))
AS Featattrs) f_attrs
FROM feat_tab
GROUP BY fid
),
cust_10_features AS (
SELECT T.cust_id, S.feature_id, S.value
FROM (SELECT cust_id, FEATURE_SET(nmf_sh_sample, 10 USING *) pset
FROM nmf_sh_sample_apply_prepared
WHERE cust_id = 100002) T,
TABLE(T.pset) S
)
SELECT A.value, A.feature_id fid,
B.attr, B.val, B.coeff
FROM cust_10_features A,
(SELECT T.fid, F.*
FROM feat T,
TABLE(T.f_attrs) F) B
WHERE A.feature_id = B.fid
ORDER BY A.value DESC, A.feature_id ASC, coeff DESC, attr ASC, val ASC;

VALUE  FID ATTR                      VAL                        COEFF
-------- ---- ------------------------- ------------------------ -------
6.8409    7 YRS_RESIDENCE                                       1.3879
6.8409    7 BOOKKEEPING_APPLICATION                              .4388
6.8409    7 CUST_GENDER               M                          .2956
6.8409    7 COUNTRY_NAME              United States of America   .2848
6.4975    3 YRS_RESIDENCE                                       1.2668
6.4975    3 BOOKKEEPING_APPLICATION                              .3465
6.4975    3 COUNTRY_NAME              United States of America   .2927
6.4886    2 YRS_RESIDENCE                                       1.3285
6.4886    2 CUST_GENDER               M                          .2819
6.4886    2 PRINTER_SUPPLIES                                     .2704
6.3953    4 YRS_RESIDENCE                                       1.2931
5.9640    6 YRS_RESIDENCE                                       1.1585
5.9640    6 HOME_THEATER_PACKAGE                                 .2576
5.2424    5 YRS_RESIDENCE                                       1.0067
2.4714    8 YRS_RESIDENCE                                        .3297
2.3559    1 YRS_RESIDENCE                                        .2768
2.3559    1 FLAT_PANEL_MONITOR                                   .2593

FEATURE_VALUE

構文

feature_value::=

分析の構文

feature_value_analytic::=

mining_attribute_clause:=

mining_analytic_clause::=

関連項目:
mining_analytic_clauseの構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

FEATURE_VALUEは、選択内に含まれる各行の特徴の値を返します。この値は、最も値が大きい特徴または指定されたfeature_idを参照します。特徴の値は、BINARY_DOUBLEとして返されます。

構文の選択

FEATURE_VALUEは、2つの方法のどちらかでデータにスコアを付けます。1つの方法では、データにマイニング・モデル・オブジェクトを適用します。もう1つの方法では、1つ以上の一時マイニング・モデルを作成して適用する分析句を実行して動的にデータをマイニングします。構文または分析構文を選択します。

- 構文 — 事前に定義されたモデルでデータにスコアを付ける場合は、最初の構文を使用します。特徴抽出モデルの名前を指定します。

- 分析構文 — 事前定義されたモデルなしで、データにスコアを付ける場合は、分析構文を使用します。INTO n (nは、抽出する特徴の数)と、mining_analytic_clause (複数のモデル構築のためにデータをパーティション化する必要がある場合に指定します)を含めます。mining_analytic_clauseは、query_partition_clauseと、order_by_clauseをサポートします。("analytic_clause::="を参照。)

mining_attribute_clause

mining_attribute_clauseは、スコアの予測子として使用する列の属性を特定します。分析構文でファンクションが起動されると、このデータは一時モデルの構築にも使用されます。mining_attribute_clauseは、PREDICTIONファンクションと同様に動作します。("mining_attribute_clause::="を参照。)

関連項目:

- スコアリングの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

- 特徴抽出の詳細は、『Oracle Data Mining概要』を参照してください。

例について:
次に示す例は、Data Miningのサンプル・プログラムからの抜粋です。サンプル・プログラムの詳細は、Oracle Data Miningユーザーズ・ガイドの「付録A」を参照してください。

例

次の例では、特徴3に対応する顧客を、一致する品質の順序で示します。

SELECT *
FROM (SELECT cust_id, FEATURE_VALUE(nmf_sh_sample, 3 USING *) match_quality
FROM nmf_sh_sample_apply_prepared
ORDER BY match_quality DESC)
WHERE ROWNUM < 11;

CUST_ID MATCH_QUALITY
---------- -------------
100210    19.4101627
100962    15.2482251
101151    14.5685197
101499    14.4186292
100363    14.4037396
100372    14.3335148
100982    14.1716545
101039    14.1079914
100759    14.0913761
100953    14.0799737

FIRST

構文

first::=

関連項目:
ORDER BY句およびOVER句の構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

FIRSTファンクションとLASTファンクションは類似しています。両方のファンクションとも、与えられたソート指定に対して、FIRSTまたはLASTとしてランク付けされた一連の行の一連の値を操作する集計ファンクションおよび分析ファンクションです。1つの行のみがFIRSTまたはLASTとしてランク付けされている場合、集計は、1つの要素のみを持つセットを操作します。

OVER句を省略すると、FIRSTファンクションおよびLASTファンクションは集計ファンクションとして処理されます。OVER句を指定すると、これらのファンクションを分析ファンクションとして使用できます。OVER句のうち、query_partition_clauseの部分のみがこれらのファンクションで有効です。OVER句を指定してquery_partition_clauseを省略すると、このファンクションは分析ファンクションとして処理されますが、分析対象のウィンドウは表全体になります。

これらのファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を戻します。

ソートされたグループの最初または最後の行の値が必要であり、その値がソート・キーでない場合、FIRSTおよびLASTファンクションは、自己結合またはビューの必要性を排除し、パフォーマンスを向上させます。

- aggregate_function引数は、MIN、MAX、SUM、AVG、COUNT、VARIANCEまたはSTDDEVファンクションのいずれかです。FIRSTまたはLASTのいずれかにランク付けされた行の値を操作します。1つの行のみがFIRSTまたはLASTとしてランク付けされている場合、集計は、単一(集計ではない)のセットを操作します。

- KEEPキーワードはセマンティクスを明確にするためのものです。これはaggregate_functionを修飾し、戻されるaggregate_functionの値がFIRSTまたはLASTのみであることを示します。

- DENSE_RANK FIRSTまたはDENSE_RANK LASTは、最小(FIRST)または最大(LAST)稠密ランク(「オリンピック・ランク」)を持つ行のみを集計することを示します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。「LAST」も参照してください。

集計の例

次の例では、サンプル表hr.employeesの各部門で、歩合が最低である従業員の中での最低給与、および歩合が最高の従業員の中での最高給与を戻します。

SELECT department_id,
MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct) "Worst",
MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct) "Best"
FROM employees
GROUP BY department_id
ORDER BY department_id;

DEPARTMENT_ID      Worst       Best
------------- ---------- ----------
10       4400       4400
20       6000      13000
30       2500      11000
40       6500       6500
50       2100       8200
60       4200       9000
70      10000      10000
80       6100      14000
90      17000      24000
100       6900      12008
110       8300      12008
7000       7000

分析の例

次の例では、前述の例と同じ計算をしますが、当該部門の各従業員の結果を戻します。

SELECT last_name, department_id, salary,
MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct)
OVER (PARTITION BY department_id) "Worst",
MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct)
OVER (PARTITION BY department_id) "Best"
FROM employees
ORDER BY department_id, salary, last_name;

LAST_NAME           DEPARTMENT_ID     SALARY      Worst       Best
------------------- ------------- ---------- ---------- ----------
Whalen                         10       4400       4400       4400
Fay                            20       6000       6000      13000
Hartstein                      20      13000       6000      13000
. . .
Gietz                         110       8300       8300      12008
Higgins                       110      12008       8300      12008
Grant                                   7000       7000       7000

FIRST_VALUE

構文

関連項目:
構文、セマンティクス、制限事項、およびexprの書式の詳細は、「分析ファンクション」を参照してください。

用途

FIRST_VALUEは分析ファンクションです。これは、順序付けられた値の集合にある最初の値を戻します。集合内の最初の値がNULLの場合、IGNORE NULLSを指定していないかぎり、ファンクションはNULLを戻します。この設定は、データの稠密化に役立ちます。

注意:
この構文の2つの書式は、同じ動作になります。上のブランチはANSI形式です。ANSIとの互換性を維持するために、こちらを使用することをお薦めします。

{RESPECT | IGNORE} NULLSは、exprのNULL値を計算に含めるか除外するかを指定します。デフォルトはRESPECT NULLSです。IGNORE NULLSを指定すると、FIRST_VALUEは集合内の最初のNULLではない値を戻します。すべての値がNULLの場合はNULLを戻します。データの稠密化の例は、「パーティション化された外部結合の使用例:」を参照してください。

exprには、FIRST_VALUEまたは他の分析ファンクションを使用して分析ファンクションをネストできません。ただし、他の組込みファンクション式をexprで使用できます。exprの書式の詳細は、「SQL式」を参照してください。

例

次の例では、部門90の各従業員について、その部門で給与が一番少ない従業員の名前を選択します。

SELECT employee_id, last_name, salary, hire_date,
FIRST_VALUE(last_name)
OVER (ORDER BY salary ASC ROWS UNBOUNDED PRECEDING) AS fv
FROM (SELECT * FROM employees
WHERE department_id = 90
ORDER BY hire_date);

EMPLOYEE_ID LAST_NAME                     SALARY HIRE_DATE FV
----------- ------------------------- ---------- --------- -------
102 De Haan                        17000 13-JAN-01 De Haan
101 Kochhar                        17000 21-SEP-05 De Haan
100 King                           24000 17-JUN-03 De Haan

例では、FIRST_VALUEファンクションの非決定的な性質が示されています。KochharとDe Haanの給与は同じであるため、Kochharの次の行にDe Haanがあります。Kochharが最初に表示されているのは、副問合せが戻す行がhire_dateで順序付けられているためです。ただし、副問合せが戻す行がhire_dateで降順に順序付けられている場合は、次の例に示すとおり、ファンクションは異なる値を戻します。

SELECT employee_id, last_name, salary, hire_date,
FIRST_VALUE(last_name)
OVER (ORDER BY salary ASC ROWS UNBOUNDED PRECEDING) AS fv
FROM (SELECT * FROM employees
WHERE department_id = 90
ORDER by hire_date DESC);

EMPLOYEE_ID LAST_NAME                     SALARY HIRE_DATE FV
----------- ------------------------- ---------- --------- -------
101 Kochhar                        17000 21-SEP-05 Kochhar
102 De Haan                        17000 13-JAN-01 Kochhar
100 King                           24000 17-JUN-03 Kochhar

次の2つの例では、一意キーで順序付けることによって、FIRST_VALUEファンクションを決定的にする方法を示しています。給与と一意キーemployee_idの両方でファンクション内を順序付けると、副問合せの順序付けにかかわらず、同じ結果が戻されます。

SELECT employee_id, last_name, salary, hire_date,
FIRST_VALUE(last_name)
OVER (ORDER BY salary ASC, employee_id ROWS UNBOUNDED PRECEDING) AS fv
FROM (SELECT * FROM employees
WHERE department_id = 90
ORDER BY hire_date);

EMPLOYEE_ID LAST_NAME                     SALARY HIRE_DATE FV
----------- ------------------------- ---------- --------- -------
101 Kochhar                        17000 21-SEP-05 Kochhar
102 De Haan                        17000 13-JAN-01 Kochhar
100 King                           24000 17-JUN-03 Kochhar

SELECT employee_id, last_name, salary, hire_date,
FIRST_VALUE(last_name)
OVER (ORDER BY salary ASC, employee_id ROWS UNBOUNDED PRECEDING) AS fv
FROM (SELECT * FROM employees
WHERE department_id = 90
ORDER BY hire_date DESC);

EMPLOYEE_ID LAST_NAME                     SALARY HIRE_DATE FV
----------- ------------------------- ---------- --------- -------
101 Kochhar                        17000 21-SEP-05 Kochhar
102 De Haan                        17000 13-JAN-01 Kochhar
100 King                           24000 17-JUN-03 Kochhar

次の2つの例では、論理オフセット(ROWSのかわりにRANGE)を使用すると、FIRST_VALUEファンクションが決定的になることを示しています。ORDER BY式に重複値がある場合は、FIRST_VALUEがexprの最小値になります。

SELECT employee_id, last_name, salary, hire_date,
FIRST_VALUE(last_name)
OVER (ORDER BY salary ASC RANGE UNBOUNDED PRECEDING) AS fv
FROM (SELECT * FROM employees
WHERE department_id = 90
ORDER BY hire_date);

EMPLOYEE_ID LAST_NAME                     SALARY HIRE_DATE FV
----------- ------------------------- ---------- --------- -------
102 De Haan                        17000 13-JAN-01 De Haan
101 Kochhar                        17000 21-SEP-05 De Haan
100 King                           24000 17-JUN-03 De Haan

SELECT employee_id, last_name, salary, hire_date,
FIRST_VALUE(last_name)
OVER (ORDER BY salary ASC RANGE UNBOUNDED PRECEDING) AS fv
FROM (SELECT * FROM employees
WHERE department_id = 90
ORDER BY hire_date DESC);

EMPLOYEE_ID LAST_NAME                     SALARY HIRE_DATE FV
----------- ------------------------- ---------- --------- -------
102 De Haan                        17000 13-JAN-01 De Haan
101 Kochhar                        17000 21-SEP-05 De Haan
100 King                           24000 17-JUN-03 De Haan

FLOOR

構文

用途

FLOORはn以下の最大整数を戻します。数値nは常に、0 <= f < 1とn = k + fなどのように、整数kと正の小数部fの合計として記述できます。FLOORの値は整数kです。したがって、FLOORの値がnそのものになるのはnが小数部を持たない整数である場合にかぎられます。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を返します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。「CEIL」も参照してください。

例

次の例では、15.7以下である最大の整数を戻します。

SELECT FLOOR(15.7) "Floor"
FROM DUAL;

Floor
----------
15

FROM_TZ

構文

用途

FROM_TZファンクションは、タイムスタンプ値およびタイムゾーンをTIMESTAMP WITH TIME ZONE値に変換します。time_zone_valueは、'TZH:TZM'書式の文字列、またはオプションのTZD書式を持つTZR書式で文字列を戻す文字式です。

例

次の例では、タイムスタンプ値をTIMESTAMP WITH TIME ZONEに戻します。

SELECT FROM_TZ(TIMESTAMP '2000-03-28 08:00:00', '3:00')
FROM DUAL;

FROM_TZ(TIMESTAMP'2000-03-2808:00:00','3:00')
---------------------------------------------------------------
28-MAR-00 08.00.000000000 AM +03:00

GREATEST

構文

用途

GREATESTは、1つ以上の式のリストの最大値を戻します。Oracle Databaseは、最初のexprを使用して戻り型を判断します。最初のexprが数値である場合、Oracleは、数値の優先順位が最も高い引数を判断し、比較の前に残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。最初のexprが数値ではない場合、比較の前に、2番目以降の各exprが最初のexprのデータ型に暗黙的に変換されます。

Oracle Databaseは、非空白埋め比較セマンティクスを使用して各exprを比較します。比較では、デフォルトの場合はバイナリが使用され、NLS_COMPパラメータがLINGUISTICに設定され、NLS_SORTパラメータにBINARY以外の設定がある場合は言語が使用されます。文字の比較は、データベース・キャラクタ・セットの文字の数値コードに基づいて行われます。また、文字ごとではなく、一連のバイトとして扱われる文字列全体で行われます。このファンクションによって戻される値が文字データの場合、そのデータ型は、最初のexprが文字データ型の場合はVARCHAR2、最初のexprが各国語キャラクタ・データ型の場合はNVARCHAR2になります。

関連項目:

- 文字の比較の詳細は、「データ型の比較規則」を参照してください。

- 暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。2進浮動小数点の比較セマンティクスの詳細は、「浮動小数点数」を参照してください。

- 「LEAST」を参照してください(LEASTは1つ以上の式のリストの最小値を戻します)。

例

次の文では、最大値を持つ文字列を検索します。

SELECT GREATEST('HARRY', 'HARRIOT', 'HAROLD') "Greatest"
FROM DUAL;

Greatest
--------
HARRY

次の文では、最初の引数は数字です。Oracle Databaseは、数値の優先順位が最も高い引数は2番目の引数であると判断し、残りの引数を2番目の引数のデータ型に変換して、そのデータ型で最大値を戻します。

SELECT GREATEST (1, '3.925', '2.4') "Greatest"
FROM DUAL;

Greatest
--------
3.925

GROUP_ID

構文

用途

GROUP_IDは、GROUP BY指定の結果から、重複するグループを識別します。このファンクションは、問合せ結果から重複グループを除外する場合に有効です。このファンクションは、重複グループを一意に識別するために、OracleのNUMBER値を戻します。このファンクションは、1つのGROUP BY句を含むSELECT文のみに適用できます。

特定のグループ化でn個の重複が存在する場合、GROUP_IDは0からn-1の範囲の数値を戻します。

例

次の例では、サンプル表sh.countriesおよびsh.salesの問合せの結果、重複するco.country_regionグループ化に値1を割り当てます。

SELECT co.country_region, co.country_subregion,
SUM(s.amount_sold) "Revenue", GROUP_ID() g
FROM sales s, customers c, countries co
WHERE s.cust_id = c.cust_id
AND c.country_id = co.country_id
AND s.time_id = '1-JAN-00'
AND co.country_region IN ('Americas', 'Europe')
GROUP BY GROUPING SETS ( (co.country_region, co.country_subregion),
(co.country_region, co.country_subregion) )
ORDER BY co.country_region, co.country_subregion, "Revenue", g;

COUNTRY_REGION       COUNTRY_SUBREGION                 Revenue          G
-------------------- ------------------------------ ---------- ----------
Americas             Northern America                    944.6          0
Americas             Northern America                    944.6          1
Europe               Western Europe                     566.39          0
Europe               Western Europe                     566.39          1

GROUP_IDが1より小さい行のみを戻すには、文の最後に次のHAVING句を追加します。

HAVING GROUP_ID() < 1

GROUPING

構文

用途

GROUPINGは、通常のグループ化された行と超集合行を区別します。ROLLUPやCUBEなどのGROUP BYの拡張機能は、すべての値の集合がNULLで表される超集合行を生成します。GROUPINGファンクションを使用すると、通常の行に含まれるNULLと超集合行ですべての値の集合を表すNULLを区別できます。

GROUPINGファンクションのexprは、GROUP BY句の式のいずれかと一致する必要があります。行のexprの値がすべての値の集合を表すNULLの場合、このファンクションは1の値を戻します。それ以外の場合は、0(ゼロ)を戻します。GROUPINGファンクションは、OracleのNUMBERデータ型の値を戻します。これらの用語の詳細は、「SELECT」の「group_by_clause」を参照してください。

例

次の例では、サンプル表hr.departmentsおよびhr.employeesで、GROUPINGファンクションが1(表の通常の行ではなく超集合行)を戻す場合、それ以外の場合に表示されるNULLのかわりに、文字列「All Jobs」が「JOB」列に表示されます。

SELECT
DECODE(GROUPING(department_name), 1, 'ALL DEPARTMENTS', department_name)
AS department,
DECODE(GROUPING(job_id), 1, 'All Jobs', job_id) AS job,
COUNT(*) "Total Empl",
AVG(salary) * 12 "Average Sal"
FROM employees e, departments d
WHERE d.department_id = e.department_id
GROUP BY ROLLUP (department_name, job_id)
ORDER BY department, job;

DEPARTMENT                     JOB        Total Empl Average Sal
------------------------------ ---------- ---------- -----------
ALL DEPARTMENTS                All Jobs          106  77481.0566
Accounting                     AC_ACCOUNT          1       99600
Accounting                     AC_MGR              1      144096
Accounting                     All Jobs            2      121848
Administration                 AD_ASST             1       52800
Administration                 All Jobs            1       52800
Executive                      AD_PRES             1      288000
Executive                      AD_VP               2      204000
Executive                      All Jobs            3      232000
Finance                        All Jobs            6      103216
Finance                        FI_ACCOUNT          5       95040
. . .

GROUPING_ID

構文

用途

GROUPING_IDは、行に関連するGROUPINGビット・ベクトルに対応する数値を戻します。GROUPING_IDは、ROLLUPやCUBEなど、GROUP BYの拡張機能およびGROUPINGファンクションを含むSELECT文にのみ適用できます。多くのGROUP BY式を含む問合せでは、多くのGROUPINGファンクションを必要とする特定の行のGROUP BYレベルを指定するため、非常に複雑なSQLになります。GROUPING_IDは、このような場合に有効です。

GROUPING_IDは、複数のGROUPINGファンクションの結果をビット・ベクトル(1と0を組み合せた文字列)に連結したものと同じです。GROUPING_IDを使用すると、複数のGROUPINGファンクションを使用する必要がなくなり、行のフィルタ条件の表記が簡単になります。GROUPING_IDを使用すると、要求する行が単一の条件(GROUPING_ID = n)によって識別されるため、行のフィルタ処理が簡単になります。このファンクションは、1つの表に複数のレベルの集計を格納する場合に、特に有効です。

例

次の例では、サンプル表sh.salesの問合せからグループ化IDを抽出する方法を示します。

SELECT channel_id, promo_id, sum(amount_sold) s_sales,
GROUPING(channel_id) gc,
GROUPING(promo_id) gp,
GROUPING_ID(channel_id, promo_id) gcp,
GROUPING_ID(promo_id, channel_id) gpc
FROM sales
WHERE promo_id > 496
GROUP BY CUBE(channel_id, promo_id)
ORDER BY channel_id, promo_id, s_sales, gc;

CHANNEL_ID   PROMO_ID    S_SALES         GC         GP        GCP        GPC
---------- ---------- ---------- ---------- ---------- ---------- ----------
2        999 25797563.2          0          0          0          0
2            25797563.2          0          1          1          2
3        999 55336945.1          0          0          0          0
3            55336945.1          0          1          1          2
4        999 13370012.5          0          0          0          0
4            13370012.5          0          1          1          2
999 94504520.8          1          0          2          1
94504520.8          1          1          3          3

HEXTORAW

構文

用途

HEXTORAWは、CHAR、VARCHAR2、NCHARまたはNVARCHAR2データ型で16進数を含むcharをRAW値に変換します。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。

関連項目:
詳細は、「データ型の比較規則」を参照してください。

例

次の例では、RAW列を含む簡単な表を作成し、RAWに変換された16進数値を挿入します。

CREATE TABLE test (raw_col RAW(10));

INSERT INTO test VALUES (HEXTORAW('7D'));

次の例では、16進数をRAW値に変換し、そのRAW値をVARCHAR2にキャストします。

SELECT UTL_RAW.CAST_TO_VARCHAR2(HEXTORAW('4041424344'))
FROM DUAL;

UTL_RAW.CAST_TO_VARCHAR2(HEXTORAW('4041424344'))
------------------------------------------------
@ABCD

関連項目:
「RAWデータ型とLONG RAWデータ型」および「RAWTOHEX」を参照してください。

INITCAP

構文

用途

INITCAPは、各単語の最初の文字を大文字、残りの文字を小文字にしてcharを戻します。各単語は空白または英数字以外の文字で区切られます。

charは、CHAR、VARCHAR2、NCHARまたはNVARCHAR2データ型です。戻り値は、charと同じデータ型です。データベースは、基礎となるキャラクタ・セットに対して定義したバイナリ・マッピングに基づいて先頭文字の形式を設定します。大文字と小文字の区別については、「NLS_INITCAP」を参照してください。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。

関連項目:
詳細は、「データ型の比較規則」を参照してください。

例

次の例では、文字列にある各単語の最初の文字を大文字にします。

SELECT INITCAP('the soap') "Capitals"
FROM DUAL;

Capitals
---------
The Soap

INSERTCHILDXML

注意:
INSERTCHILDXMLファンクションは、非推奨です。これは、下位互換性を保つためにのみサポートされています。そのかわりに、XQuery Updateを使用してください。詳細は、『Oracle XML DB開発者ガイド』を参照してください。

構文

用途

INSERTCHILDXMLは、ユーザー指定の値を、XPath式で指定したノードのターゲットXMLに挿入します。このファンクションと「INSERTXMLBEFORE」を比較してください。

- XMLType_instanceは、XMLTypeのインスタンスです。

- XPath_stringは、1つ以上の子ノードが挿入されるノードを1つ以上示すXPath式です。先頭にスラッシュを付けて絶対XPath_stringを指定したり、先頭のスラッシュを省略して相対XPath_stringを指定できます。先頭のスラッシュを省略した場合、相対パスのコンテキストは、デフォルトでルート・ノードに設定されます。

- child_exprは、挿入する要素または属性のノードを1つ以上指定します。

- value_exprは、挿入されるノードを1つ以上指定するXMLTypeのフラグメントです。これは文字列に変換する必要があります。

- オプションのnamespace_stringは、XPath_stringのネームスペース情報を提供します。このパラメータは、VARCHAR2型である必要があります。

関連項目:
このファンクションの詳細は、『Oracle XML DB開発者ガイド』を参照してください。

例

次の例では、2番目の/Ownerノードを、「APPENDCHILDXML」の例で更新したウェアハウスの1つのwarehouse_specに追加します。

UPDATE warehouses
SET warehouse_spec = INSERTCHILDXML(warehouse_spec, '/Warehouse/Building',
'Owner', XMLType('<Owner>LesserCo</Owner>'))
WHERE warehouse_id = 3;

SELECT warehouse_spec
FROM warehouses  WHERE warehouse_id = 3;

WAREHOUSE_SPEC
----------------------------------------------------------------------------
<?xml version="1.0"?>
<Warehouse>
<Building>Rented
<Owner>Grandco</Owner>
<Owner>LesserCo</Owner>
</Building>
<Area>85700</Area>
<DockType/>
<WaterAccess>N</WaterAccess>
<RailAccess>N</RailAccess>
<Parking>Street</Parking>
<VClearance>11.5 ft</VClearance>
</Warehouse>

INSERTCHILDXMLAFTER

注意:
INSERTCHILDXMLAFTERファンクションは、非推奨です。これは、下位互換性を保つためにのみサポートされています。そのかわりに、XQuery Updateを使用してください。詳細は、『Oracle XML DB開発者ガイド』を参照してください。

構文

用途

INSERTXMLCHILDAFTERは、1つ以上のコレクション要素をターゲット親要素の子として挿入します。各ターゲットは、指定された既存のコレクション要素の直後に挿入されます。挿入のターゲットである既存のXML文書は、XML Schemaに基づく文書でも、XML Schemaに基づかない文書でもかまいません。

- XMLType_instanceは、挿入の対象となるXMLデータを識別します。

- XPath_stringは、対象データ内の親要素の位置を特定します。子データは、それぞれの親要素の下に挿入されます。

- child_exprは、挿入される子データの前に配置される既存の子の位置を指定する相対XPath 1.0式です。この式は、親XPathによって示された要素の子要素を指定する必要があります。また、条件を含むこともできます。

- value_exprは、挿入するXMLType子要素データです。この引数の各トップレベル要素のノードは、child_exprによって示された要素と同じデータ型である必要があります。

- オプションのnamespace_stringは、親要素、既存の子要素および挿入される子要素XMLデータの名前空間を指定します。

関連項目:
このファンクションの詳細は、『Oracle XML DB開発者ガイド』を参照してください。

例

次の例は、INSERTCHILDXMLの例と似ていますが、この例では、INSERTCHILDXMLの例で追加された/Ownerノードの後に、3番目の/Ownerノードが追加されています。問合せの出力は読み取りやすいように整えられています。

UPDATE warehouses
SET warehouse_spec = INSERTCHILDXMLAFTER(warehouse_spec, '/Warehouse/Building',
'Owner[2]', XMLType('<Owner>ThirdOwner</Owner>'))
WHERE warehouse_id = 3;

SELECT warehouse_name,
EXTRACT(warehouse_spec, '/Warehouse/Building/Owner') "Owners"
FROM warehouses
WHERE warehouse_id = 3;

WAREHOUSE_NAME                      Owners
----------------------------------- ------------------------------
New Jersey                          <Owner>GrandCo</Owner>
<Owner>LesserCo</Owner>
<Owner>ThirdOwner</Owner>

INSERTCHILDXMLBEFORE

注意:
INSERTCHILDXMLBEFOREファンクションは、非推奨です。これは、下位互換性を保つためにのみサポートされています。そのかわりに、XQuery Updateを使用してください。詳細は、『Oracle XML DB開発者ガイド』を参照してください。

構文

用途

INSERTXMLCHILDBEFOREは、1つ以上のコレクション要素をターゲット親要素の子として挿入します。各ターゲットは、指定された既存のコレクション要素の直前に挿入されます。挿入のターゲットである既存のXML文書は、XML Schemaに基づく文書でも、XML Schemaに基づかない文書でもかまいません。

- XMLType_instanceは、挿入の対象となるXMLデータを識別します。

- XPath_stringは、対象データ内の親要素の位置を特定します。子データは、それぞれの親要素の下に挿入されます。

- child_exprは、挿入される子データの後に配置される既存の子の位置を指定する相対XPath 1.0式です。この式は、親XPathによって示された要素の子要素を指定する必要があります。また、条件を含むこともできます。

- value_exprは、挿入するXMLType子要素データです。この引数の各トップレベル要素のノードは、child_exprによって示された要素と同じデータ型である必要があります。

- オプションのnamespace_stringは、親要素、既存の子要素および挿入される子要素XMLデータの名前空間を指定します。

関連項目:
このファンクションの詳細は、『Oracle XML DB開発者ガイド』を参照してください。

例

次の例は、INSERTCHILDXMLの例と似ていますが、この例では、INSERTCHILDXMLの例で追加された/Ownerノードの前に、3番目の/Ownerノードが追加されています。問合せの出力は読み取りやすいように整えられています。

UPDATE warehouses
SET warehouse_spec = INSERTCHILDXMLBEFORE(warehouse_spec, '/Warehouse/Building',
'Owner[2]', XMLType('<Owner>ThirdOwner</Owner>'))
WHERE warehouse_id = 3;

SELECT warehouse_name,
EXTRACT(warehouse_spec, '/Warehouse/Building/Owner') "Owners"
FROM warehouses
WHERE warehouse_id = 3;

WAREHOUSE_NAME                      Owners
----------------------------------- ------------------------------
New Jersey                          <Owner>GrandCo</Owner>
<Owner>ThirdOwner</Owner>
<Owner>LesserCo</Owner>

INSERTXMLAFTER

注意:
INSERTXMLAFTERファンクションは、非推奨です。これは、下位互換性を保つためにのみサポートされています。そのかわりに、XQuery Updateを使用してください。詳細は、『Oracle XML DB開発者ガイド』を参照してください。

構文

用途

INSERTXMLAFTERは、属性のノードではないターゲット・ノードの直後に任意の種類の1つ以上のノードを挿入します。挿入のターゲットであるXML文書は、XML Schemaに基づく文書でも、XML Schemaに基づかない文書でもかまいません。このファンクションはinsertXMLbeforeと似ていますが、ターゲット・ノードの前ではなく後に挿入します。

- XMLType_instanceは、挿入のターゲット・ノードを指定します。

- XPath_stringは、属性のノードを除く任意の0個以上のノードの位置をターゲット・ノード内で指定するXPath 1.0式です。XMLデータは、これらの各ノードの直後に挿入されます。つまり、指定された各ノードは、value_exprで指定されたノードの前に配置される兄弟ノードとなります。

- value_exprは、挿入されるXMLデータです。任意の種類の1つ以上のノードを指定できます。ノードの順序は、挿入後も保持されます。

- オプションのnamespace_stringは、ターゲット・ノードの名前空間です。

関連項目:
このファンクションの詳細は、『Oracle XML DB開発者ガイド』を参照してください。

例

次の例は、INSERTCHILDXMLの例と似ていますが、この例では、INSERTCHILDXMLの例で追加された/Ownerノードの後に、3番目の/Ownerノードが追加されています。問合せの出力は読み取りやすいように整えられています。

UPDATE warehouses
SET warehouse_spec = INSERTXMLAFTER(warehouse_spec,
'/Warehouse/Building/Owner[1]', XMLType('<Owner>SecondOwner</Owner>'))
WHERE warehouse_id = 3;

SELECT warehouse_name,
EXTRACT(warehouse_spec, '/Warehouse/Building/Owner') "Owners"
FROM warehouses
WHERE warehouse_id = 3;

WAREHOUSE_NAME                      Owners
----------------------------------- ------------------------------
New Jersey                          <Owner>GrandCo</Owner>
<Owner>SecondOwner</Owner>
<Owner>LesserCo</Owner>

INSERTXMLBEFORE

注意:
INSERTXMLBEFOREファンクションは、非推奨です。これは、下位互換性を保つためにのみサポートされています。そのかわりに、XQuery Updateを使用してください。詳細は、『Oracle XML DB開発者ガイド』を参照してください。

構文

用途

INSERTXMLBEFOREは、ユーザー指定の値を、XPath式で指定したノードの前のターゲットXMLに挿入します。このファンクションはINSERTXMLAFTERと似ていますが、ターゲット・ノードの後ではなく前に挿入します。このファンクションと「INSERTCHILDXML」を比較してください。

- XMLType_instanceは、XMLTypeのインスタンスです。

- XPath_stringは、1つ以上の子ノードが挿入されるノードを1つ以上示すXPath式です。先頭にスラッシュを付けて絶対XPath_stringを指定したり、先頭のスラッシュを省略して相対XPath_stringを指定できます。先頭のスラッシュを省略した場合、相対パスのコンテキストは、デフォルトでルート・ノードに設定されます。

- value_exprは、挿入される1つ以上のノードと親ノード内での位置を定義するXMLTypeのフラグメントです。これは文字列に変換する必要があります。

- オプションのnamespace_stringは、XPath_stringのネームスペース情報を提供します。このパラメータは、VARCHAR2型である必要があります。

関連項目:
このファンクションの詳細は、『Oracle XML DB開発者ガイド』を参照してください。

例

次の例は、INSERTCHILDXMLの例と似ていますが、この例では、INSERTCHILDXMLの例で追加された/Ownerノードの前に、3番目の/Ownerノードが追加されています。問合せの出力は読み取りやすいように整えられています。

UPDATE warehouses
SET warehouse_spec = INSERTXMLBEFORE(warehouse_spec,
'/Warehouse/Building/Owner[2]', XMLType('<Owner>ThirdOwner</Owner>'))
WHERE warehouse_id = 3;

SELECT warehouse_name,
EXTRACT(warehouse_spec, '/Warehouse/Building/Owner') "Owners"
FROM warehouses
WHERE warehouse_id = 3;

WAREHOUSE_NAME                      Owners
----------------------------------- ------------------------------
New Jersey                          <Owner>GrandCo</Owner>
<Owner>ThirdOwner</Owner>
<Owner>LesserCo</Owner>

INSTR

構文

用途

INSTRファンクションは、stringのsubstringを検索します。検索操作では、一致する値が見つかるか、または検索するサブストリングがなくなるまで、substring引数と、stringに含まれる同じ長さのサブストリングを比較して等しいものを検索します。stringの中で逐次比較される各サブストリングは、その前に比較したサブストリングの最初の文字の1つ右(順方向検索)または左(逆方向検索)から始まります。substringと等しいサブストリングが見つかった場合は、そのサブストリングの先頭文字の位置を示す整数が戻されます。該当するサブストリングが見つからない場合は0(ゼロ)が戻されます。

- positionは、Oracle Databaseが検索を開始するstringの文字の位置を示す0(ゼロ)以外の整数です。つまり、substringと比較する最初のサブストリングの先頭文字の位置です。positionが負の場合、Oracleはstringの終わりから逆方向にカウントし、結果位置から逆方向に検索します。

- occurrenceは、stringの中で何番目に現れるsubstringを検索するかを示す整数です。occurrenceの値は正である必要があります。occurrenceが1より大きい場合は最初の一致では位置を戻さずに、occurrence番目の一致が見つかるまで、前述した方法でstringに含まれるサブストリングの逐次比較を続行します。

INSTRは、文字列の先頭文字の位置を1として、入力キャラクタ・セットによって定義された文字の位置を受け入れ、それに該当する位置を戻します。INSTRBには、文字でなくバイトを使用します。INSTRCは、完全なUnicodeキャラクタを使用します。INSTR2は、UCS2コードポイントを使用します。INSTR4には、UCS4コード・ポイントを使用します。

stringは、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBデータ型です。例外は、INSTRC、INSTR2およびINSTR4であり、これらでは、stringをCLOBおよびNCLOBのいずれにもできません。

substringは、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBデータ型です。

戻り値のデータ型はNUMBERです。

positionおよびoccurrenceは、NUMBERデータ型か、または暗黙的にNUMBERに変換可能な任意のデータ型で、整数に変換されるものである必要があります。positionおよびoccurrenceのデフォルト値は1です。この場合、Oracleはstringの最初の文字から検索を開始します。検索対象はsubstringが最初に現れる位置です。戻り値は、positionの値にかかわらず、stringの先頭を基準にします。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

例

次の例では、文字列CORPORATE FLOORで文字列ORの検索を3番目の文字から開始します。文字列CORPORATE FLOORで2回目に現れるORの開始位置を戻します。

SELECT INSTR('CORPORATE FLOOR','OR', 3, 2) "Instring"
FROM DUAL;

Instring
----------
14

次の例では、最後の文字から、最後から3番目の文字まで、つまりFLOORの最初のOまで逆方向にカウントします。次に、2回目に現れる「OR」を逆方向に検索し、2回目に現れるこの文字列が、検索文字列の2番目の文字で始まることを認識します。

SELECT INSTR('CORPORATE FLOOR','OR', -3, 2) "Reversed Instring"
FROM DUAL;

Reversed Instring
-----------------
2

次の例では、データベース・キャラクタ・セットがダブルバイトの場合を想定しています。

SELECT INSTRB('CORPORATE FLOOR','OR',5,2) "Instring in bytes"
FROM DUAL;

Instring in bytes
-----------------
27

ITERATION_NUMBER

構文

用途

ITERATION_NUMBERファンクションは、SELECT文のmodel_clauseにのみ指定でき、model_rules_clauseにITERATE(number)が指定されている場合にのみ使用できます。このファンクションは、モデル・ルールに従って完了した反復を示す整数を戻します。ITERATION_NUMBERファンクションは、最初の反復では0(ゼロ)を戻します。2回目以降の各反復では、ITERATION_NUMBERファンクションは、iteration_numberに1を足した整数を戻します。

関連項目:
構文およびセマンティクスの詳細は、「model_clause」および「モデル式」を参照してください。

例

次の例では、1998年および1999年のマウス・パッドの売上を、それぞれ2001年および2002年のマウス・パッドの売上に割り当てます。

SELECT country, prod, year, s
FROM sales_view_ref
MODEL
PARTITION BY (country)
DIMENSION BY (prod, year)
MEASURES (sale s)
IGNORE NAV
UNIQUE DIMENSION
RULES UPSERT SEQUENTIAL ORDER ITERATE(2)
(
s['Mouse Pad', 2001 + ITERATION_NUMBER] =
s['Mouse Pad', 1998 + ITERATION_NUMBER]
)
ORDER BY country, prod, year;

COUNTRY       PROD                                         YEAR           S
----------    -----------------------------------      --------   ---------
France        Mouse Pad                                    1998     2509.42
France        Mouse Pad                                    1999     3678.69
France        Mouse Pad                                    2000     3000.72
France        Mouse Pad                                    2001     2509.42
France        Mouse Pad                                    2002     3678.69
France        Standard Mouse                               1998     2390.83
France        Standard Mouse                               1999     2280.45
France        Standard Mouse                               2000     1274.31
France        Standard Mouse                               2001     2164.54
Germany       Mouse Pad                                    1998     5827.87
Germany       Mouse Pad                                    1999     8346.44
Germany       Mouse Pad                                    2000     7375.46
Germany       Mouse Pad                                    2001     5827.87
Germany       Mouse Pad                                    2002     8346.44
Germany       Standard Mouse                               1998     7116.11
Germany       Standard Mouse                               1999     6263.14
Germany       Standard Mouse                               2000     2637.31
Germany       Standard Mouse                               2001     6456.13

18 rows selected.

この例では、ビューsales_view_refが必要です。このビューを作成する方法については、「MODEL句の例:」を参照してください。

JSON_QUERY

注意:
JSON_QUERYファンクションは、Oracle Database 12cリリース1(12.1.0.2)から使用可能です。

構文

JSON_path_expression::=

object_step::=

array_step::=

JSON_query_returning_clause::=

JSON_query_return_type::=

JSON_query_wrapper_clause::=

JSON_query_on_error_clause::=

用途

JSON_QUERYは、JSONデータの1つ以上の指定されたJSON値を確認し、文字列の値を戻します。

expr

この句は、評価の対象となるJSONデータを指定するために使用します。exprでは、テキスト・リテラルを評価する式を指定します。exprが列である場合、列のデータ型はVARCHAR2、CLOBまたはBLOBのいずれかである必要があります。exprがNULLの場合はNULLを戻します。

exprが厳密なまたは緩い構文を使用した整形式のJSONデータのテキスト・リテラルでない場合、このファンクションはデフォルトでnullを戻します。JSON_query_on_error_clauseを使用して、このデフォルトの動作をオーバーライドできます。JSON_query_on_error_clauseを参照してください。

FORMAT JSON

exprがデータ・タイプBLOBの列の場合、FORMAT JSONを指定する必要があります。

JSON_path_expression

この句を使用して、JSONパス式を指定します。このファンクションはパス式を使用してexprを評価し、パス式と一致する(パス式を満たす)1つ以上のJSON値を確認します。パス式はテキスト・リテラルである必要があります。

パス式は、exprで指定される式であるコンテキスト項目を表すドル記号($)から始める必要があります。ドル記号の後、オブジェクト・ステップや配列ステップの可能性があるゼロ以上のステップが続きます。

このファンクションは、コンテキスト項目に対するパス式の最初のステップと一致するかどうかを試行します。最初のステップが一致した場合、このファンクションは最初のステップと一致したJSON値に対して2番目のステップと一致するかどうかを試行します。2番目のステップが一致した場合、このファンクションは2番目のステップと一致したJSON値に対して3番目のステップと一致するかどうかを試行し、以降も同様に続きます。このファンクションは、文字列のカンマ区切りのシーケンス値と一致する値を戻します。シーケンスの順序は非決定的です。元のJSONデータが厳密なまたは緩いJSON構文を使用しているかどうかに関係なく、すべての値が厳密なJSON構文を使用して戻されます。ドル記号とゼロのステップで構成されるパス式('$')は、全体のコンテキスト項目と一致します。

JSON_query_returning_clauseを指定して、戻り文字列のデータ型および書式を制御できます。JSON_query_returning_clauseを参照してください。

複数の値がパス式と一致するか、1つのスカラー値がパス式と一致する場合のみ、配列ラッパーの値をラップする必要があります。JSON_query_wrapper_clauseを参照してください。

パス式のいずれかのステップが一致しなかった場合、このファンクションはデフォルトでnullを戻します。JSON_query_on_error_clauseを使用して、このデフォルトの動作をオーバーライドできます。JSON_query_on_error_clauseを参照してください。

object_step この句を使用して、オブジェクト・ステップを指定します。

- simple_nameまたはcomplex_nameを使用して、プロパティ名を指定します。このプロパティ名のメンバーが評価されるJSONオブジェクトにある場合、そのメンバーのプロパティ値が一致するオブジェクト・ステップになります。それ以外の場合、一致しないオブジェクト・ステップになります。両方のタイプの名前は大/小文字を区別します。このため、アルファベットの大/小文字がオブジェクト・ステップおよびJSONデータで一致する場合のみ、一致の結果になります。
simple_nameは、英数字のみで構成され、最初の文字はアルファベット文字にする必要があります。complex_nameは、英数字のみで構成され、最初の文字は英数字にする必要があります。complex_nameは、二重引用符で囲む必要があります。

- ワイルド・カード記号であるアスタリスク(*)を使用して、すべてのプロパティ名を指定します。評価されるJSONオブジェクトに少なくとも1つのメンバーが含まれる場合、オブジェクト・ステップはすべてのメンバーの値と一致する結果になります。それ以外の場合、一致しないオブジェクト・ステップになります。

オブジェクト・ステップをJSON配列に適用すると、配列が暗黙的にアンラップされ、配列の要素がオブジェクト・ステップを使用して評価されます。これは、JSONパス式解除といいます。詳細は、『Oracle XML DB開発者ガイド』を参照してください。

評価されるJSONデータがJSONオブジェクトでない場合、オブジェクト・ステップは一致しません。

array_step この句を使用して、配列ステップを指定します。

- integerを使用して、JSON配列の索引integerの要素を指定します。integer TO integerを使用して、2つのinteger索引値の間(これらの値を含む)の要素の範囲を指定します。指定された要素が評価されるJSON配列にある場合、配列ステップはそれらの要素と一致する結果になります。それ以外の場合、一致しない配列ステップになります。JSON配列の最初の要素は索引0です。

- ワイルド・カード記号であるアスタリスク(*)を使用して、JSON配列のすべての要素を指定します。評価されるJSON配列に少なくとも1つの要素が含まれる場合、JSON配列のすべての要素が一致する配列ステップになります。それ以外の場合、一致しない配列ステップになります。

評価されるJSONデータがJSON配列でない場合、データが暗黙的に配列にラップされ、配列ステップを使用して評価されます。これは、JSONパス式解除といいます。詳細は、『Oracle XML DB開発者ガイド』を参照してください。

JSON_query_returning_clause

この句を使用して、このファンクションで戻される文字列のデータ型および書式を指定します。

RETURNING RETURNING句を使用して、文字列のデータ型を指定します。この句を省略すると、JSON_QUERYはVARCHAR2(4000)型の文字列を戻します。

JSON_return_type_clauseを使用して、次のデータ型を指定できます。

- VARCHAR2[(size [BYTE,CHAR])]
SQLでVARCHAR2データ型を指定する場合、サイズを指定する必要があります。ただし、この句はサイズを省略できます。この場合、JSON_QUERYはVARCHAR2(4000)型の文字列を戻します。

詳細は、「VARCHAR2データ型」を参照してください。

データ型が戻り文字列を保持できる十分な大きさでない場合、このファンクションはデフォルトでnullを戻します。JSON_query_on_error_clauseを使用して、このデフォルトの動作をオーバーライドできます。JSON_query_on_error_clauseを参照してください。

PRETTY 改行文字とインデントを挿入して戻り文字列を出力整形するには、PRETTYを指定します。

ASCII 標準のASCII Unicodeエスケープ・シーケンスを使用して戻り文字列の非ASCII Unicode文字を自動的にエスケープするには、ASCIIを指定します。

JSON_query_wrapper_clause

この句を使用して、このファンクションが配列ラッパーのパス式と一致する値をラップするかどうか、つまり大カッコ([])で値のシーケンスを囲むかどうかを制御します。

- WITHOUT WRAPPERを指定して、配列ラッパーを省略します。パス式が単一のJSONオブジェクトまたはJSON配列と一致する場合のみ、この句を指定できます。これはデフォルトです。

- WITH WRAPPERを指定して、配列ラッパーを含めます。パス式が単一のスカラー値(JSONオブジェクトまたはJSON配列でない値)または任意の型の複数の値と一致する場合、この句を指定する必要があります。

- WITH UNCONDITIONAL WRAPPER句の指定は、WITH WRAPPER句の指定と同じです。UNCONDITIONALキーワードはセマンティクスを明確にするためのものです。

- パス式が単一のスカラー値または任意の型の複数の値と一致する場合のみ配列ラッパーに含めるには、WITH CONDITIONAL WRAPPERを指定します。パス式が単一のJSONオブジェクトまたはJSON配列と一致する場合、配列ラッパーが省略されます。

ARRAYキーワードはオプションで、意味を明確化するために使用されます。

ファンクションが単一のスカラー値または任意の型の複数の値を戻し、WITH [UNCONDITIONAL | CONDITIONAL] WRAPPERを指定しない場合、ファンクションはデフォルトでnullを戻します。JSON_query_on_error_clauseを使用して、このデフォルトの動作をオーバーライドできます。JSON_query_on_error_clauseを参照してください。

JSON_query_on_error_clause

この句を使用して、次のいずれかのエラーが発生した場合にこのファンクションで戻される値を指定します。

- exprが厳密なまたは緩いJSON構文を使用した整形式のJSONデータではありません。

- JSONデータがJSONパス式を使用して評価される場合に一致が見つかりません。

- 戻り値のデータ型が戻り文字列を保持する十分な大きさではありません。

- ファンクションが単一のスカラー値または任意の型の複数の値と一致し、WITH [UNCONDITIONAL | CONDITIONAL] WRAPPER句が指定されていません。

次の句を指定できます。

- NULL ON ERROR - エラーが発生した場合にnullを戻します。これはデフォルトです。

- ERROR ON ERROR - エラーが発生した場合に適切なOracleエラーを戻します。

- EMPTY ON ERROR - エラーが発生した場合に空のJSON配列('[]')を戻します。

例

次の問合せは、JSONデータの指定された文字列であるコンテキスト項目を戻します。パス式は、配列ラッパーを必要としない単一のJSONオブジェクトと一致します。JSONデータは戻り値で厳密なJSON構文に変換されません。つまり、オブジェクト・プロパティ名が二重引用符で囲まれます。

SELECT JSON_QUERY('{a:100, b:200, c:300}', '$') AS value
FROM DUAL;

VALUE
--------------------------------------------------------------------------------
{"a":100,"b":200,"c":300}

次の問合せは、プロパティ名aのメンバーの値を戻します。パス式は、配列ラッパーで囲む必要があるスカラー値と一致します。このため、WITH WRAPPER句が指定されます。

SELECT JSON_QUERY('{a:100, b:200, c:300}', '$.a' WITH WRAPPER) AS value
FROM DUAL;

VALUE
--------------------------------------------------------------------------------
[100]

次の問合せは、すべてのオブジェクト・メンバーの値を戻します。パス式は、配列ラッパーで囲む必要がある複数の値と一致します。このため、WITH WRAPPER句が指定されます。

SELECT JSON_QUERY('{a:100, b:200, c:300}', '$.*' WITH WRAPPER) AS value
FROM DUAL;

VALUE
--------------------------------------------------------------------------------
[100,200,300]

次の問合せは、JSONデータの指定された文字列であるコンテキスト項目を戻します。パス式は、配列ラッパーを必要としない単一のJSON配列と一致します。

SELECT JSON_QUERY('[0,1,2,3,4]', '$') AS value
FROM DUAL;

VALUE
--------------------------------------------------------------------------------
[0,1,2,3,4]

WITH WRAPPER句が指定されている点を除いて、次の問合せは前の問合せと似ています。このため、JSON配列が配列ラッパーでラップされます。

SELECT JSON_QUERY('[0,1,2,3,4]', '$' WITH WRAPPER) AS value
FROM DUAL;

VALUE
--------------------------------------------------------------------------------
[[0,1,2,3,4]]

次の問合せは、JSON配列のすべての要素を戻します。パス式は、配列ラッパーで囲む必要がある複数の値と一致します。このため、WITH WRAPPER句が指定されます。

SELECT JSON_QUERY('[0,1,2,3,4]', '$[*]' WITH WRAPPER) AS value
FROM DUAL;

VALUE
--------------------------------------------------------------------------------
[0,1,2,3,4]

次の問合せは、JSON配列の索引0、3から5、7の要素を戻します。パス式は、配列ラッパーで囲む必要がある複数の値と一致します。このため、WITH WRAPPER句が指定されます。

SELECT JSON_QUERY('[0,1,2,3,4,5,6,7,8]', '$[0, 3 TO 5, 7]' WITH WRAPPER) AS value
FROM DUAL;

VALUE
--------------------------------------------------------------------------------
[0,3,4,5,7]

次の問合せは、JSON配列の4番目の要素を戻します。パス式は、配列ラッパーで囲む必要があるスカラー値と一致します。このため、WITH WRAPPER句が指定されます。

SELECT JSON_QUERY('[0,1,2,3,4]', '$[3]' WITH WRAPPER) AS value
FROM DUAL;

VALUE
--------------------------------------------------------------------------------
[3]

次の問合せは、JSON配列の最初の要素を戻します。WITH CONDITIONAL WRAPPER句が指定され、パス式が単一のJSONオブジェクトと一致します。このため、戻される値は配列でラップされます。JSONデータは戻り値で厳密なJSON構文に変換されません。つまり、オブジェクト・プロパティ名が二重引用符で囲まれます。

SELECT JSON_QUERY('[{a:100},{b:200},{c:300}]', '$[0]'
WITH CONDITIONAL WRAPPER) AS value
FROM DUAL;

VALUE
--------------------------------------------------------------------------------
{"a":100}

次の問合せは、JSON配列のすべての要素を戻します。WITH CONDITIONAL WRAPPER句が指定され、パス式が複数のJSONオブジェクトと一致します。このため、戻される値は配列でラップされます。

SELECT JSON_QUERY('[{"a":100},{"b":200},{"c":300}]', '$[*]'
WITH CONDITIONAL WRAPPER) AS value
FROM DUAL;

VALUE
--------------------------------------------------------------------------------
[{"a":100},{"b":200},{"c":300}]

戻される値のデータ型がVARCHAR2(100)である点を除いて、次の問合せは前の問合せと似ています。

SELECT JSON_QUERY('[{"a":100},{"b":200},{"c":300}]', '$[*]'
RETURNING VARCHAR2(100) WITH CONDITIONAL WRAPPER) AS value
FROM DUAL;

VALUE
--------------------------------------------------------------------------------
[{"a":100},{"b":200},{"c":300}]

次の問合せは、JSON配列の4番目の要素を戻します。ただし、指定されたJSON配列に結果としてエラーとなる4番目の要素は含まれません。EMPTY ON ERROR句が指定されます。このため、問合せは空のJSON配列を戻します。

SELECT JSON_QUERY('[{"a":100},{"b":200},{"c":300}]', '$[3]'
EMPTY ON ERROR) AS value
FROM DUAL;

VALUE
--------------------------------------------------------------------------------
[]

JSON_TABLE

注意:
JSON_TABLEファンクションは、Oracle Database 12cリリース1(12.1.0.2)から使用可能です。

構文

(JSON_path_expression::=、JSON_table_on_error_clause::=、JSON_columns_clause::=)

JSON_path_expression::=

object_step::=

array_step::=

JSON_table_on_error_clause::=

JSON_columns_clause::=

JSON_column_definition::=

JSON_exists_column::=

(これらの句の構文およびセマンティクスは、JSON_EXISTSおよびJSON_VALUEドキュメントに記載されています: JSON_value_return_type::=、JSON_path_expression::=、JSON_exists_on_error_clause::=)

JSON_query_column::=

(これらの句の構文およびセマンティクスは、JSON_QUERYドキュメントに記載されています: JSON_query_return_type::=、JSON_query_wrapper_clause::=、JSON_path_expression::=、JSON_query_on_error_clause::=)

JSON_value_column::=

(これらの句の構文およびセマンティクスは、JSON_VALUEドキュメントに記載されています: JSON_value_return_type::=、JSON_path_expression::=、JSON_value_on_error_clause::=)

JSON_nested_path::=

(JSON_path_expression::=、JSON_columns_clause::=)

ordinality_column::=

用途

JSON_TABLEは、JSONデータのリレーショナル・ビューを作成します。JSONデータの評価結果をリレーショナル行および列にマップします。SQLを使用して、このファンクションで戻される結果を仮想リレーショナル表として問い合せることができます。JSON_TABLEの主な目的は、JSON配列内の各オブジェクトのリレーショナル・データの行を作成し、個々のSQL列値としてそのオブジェクト内からJSON値を出力することです。

SELECT文のFROM句にのみ、JSON_TABLEを指定できます。ファンクションは、最初に行パス式と呼ばれるJSONパス式を指定されたJSONデータに適用します。行パス式と一致するJSON値は、リレーショナル・データの行を生成するので行ソースと呼ばれます。COLUMNS句は行ソースを評価し、行ソース内の特定のJSON値を確認し、リレーショナル・データの行の個々の列のSQL値としてそれらのJSON値を戻します。

COLUMNS句によって、次の句を使用して別の方法でJSON値を検索できます。

- JSON_exists_column - JSON_EXISTS条件と同じ方法でJSONデータを評価します。つまり、指定されたJSONデータが存在するかどうかを確認し、値'true'または'false'のVARCHAR2列あるいは値1または0のNUMBER列を戻します。

- JSON_query_column - JSON_QUERYファンクションと同じ方法でJSONデータを評価します。つまり、1つ以上の指定されたJSON値を確認し、それらのJSON値を含む文字列の列を戻します。

- JSON_value_column - JSON_VALUEファンクションと同じ方法でJSONデータを評価します。つまり、指定されたスカラーJSON値を確認し、SQL値としてそれらのJSON値の列を戻します。

- JSON_nested_path - ネストされたJSONオブジェクトまたはJSON配列のJSON値を親のオブジェクトまたは配列のJSON値とともに単一の行の個々の列にフラット化できます。この句を再帰的に使用して、ネストされたオブジェクトまたは配列の複数のレイヤーから単一の行にデータを投影できます。

- ordinality_column - 生成された行番号の列を戻します。

列定義句を使用すると、戻されるデータの列ごとに名前を指定できます。SELECTリストやWHERE句などのSELECT文でこれらの列名を参照できます。

expr

この句は、評価の対象となるJSONデータを指定するために使用します。exprでは、テキスト・リテラルを評価する式を指定します。exprが列である場合、列のデータ型はVARCHAR2、CLOBまたはBLOBのいずれかである必要があります。exprがNULLの場合はNULLを戻します。

exprが厳密なまたは緩い構文を使用した整形式のJSONデータのテキスト・リテラルでない場合、このファンクションはデフォルトでnullを戻します。JSON_table_on_error_clauseを使用して、このデフォルトの動作をオーバーライドできます。JSON_table_on_error_clauseを参照してください。

FORMAT JSON

exprがデータ・タイプBLOBの列の場合、FORMAT JSONを指定する必要があります。

JSON_path_expression

この句を使用して、行パス式を指定します。ファンクションは、行パス式を使用してexprを評価し、パス式と一致する(パス式を満たす)行ソースと呼ばれるJSON値を確認します。この行ソースは、COLUMNS句によって評価されます。パス式はテキスト・リテラルである必要があります。

JSON_path_expression句は、JSON_TABLEおよびJSON_QUERYに対して同じセマンティクスを持ちます。この句の完全なセマンティクスは、JSON_QUERYのドキュメントのJSON_path_expressionを参照してください。

JSON_table_on_error_clause

この句を使用して、次のエラーが発生した場合にこのファンクションで戻される値を指定します。

- exprが厳密なまたは緩いJSON構文を使用した整形式のJSONデータではありません。

- JSONデータが行パス式を使用して評価される場合に一致が見つかりません。

次の句を指定できます。

- NULL ON ERROR - エラーが発生した場合にnullを戻します。これはデフォルトです。

- ERROR ON ERROR - エラーが発生した場合に適切なOracleエラーを戻します。

- DEFAULT literal ON ERROR - エラーが発生した場合にliteralを戻します。このファンクションで戻される値のデータ型がVARCHAR2である場合、テキスト・リテラルを指定する必要があります。データ型がNUMBERである場合、数値リテラルを指定する必要があります。

JSON_columns_clause

COLUMNS句を使用して、JSON_TABLEファンクションで戻される仮想リレーショナル表の列を定義します。

JSON_exists_column この句は、JSON_EXISTS条件と同じ方法でJSONデータを評価します。つまり、指定されたJSON値が存在するかどうかを判断します。値'true'または'false'のVARCHAR2列あるいは値1または0のNUMBER列を戻します。'true'または1の値はJSON値があることを示し、'false'または0の値はJSON値がないことを示します。

JSON_value_return_type句を使用して、戻される列のデータ型を制御できます。この句を省略すると、データ型はVARCHAR2(4000)です。column_nameを使用して、戻される列の名前を指定します。JSON_exists_columnの残りの句は、JSON_EXISTS条件と同じセマンティクスを持ちます。これらの句の詳細は、「JSON_EXISTS Condition」を参照してください。「JSON_exists_columnの使用: 例」の例も参照してください。

JSON_query_column この句は、JSON_QUERYファンクションと同じ方法でJSONデータを評価します。つまり、1つ以上の指定されたJSON値を確認し、それらのJSON値を含む文字列の列を戻します。

column_nameを使用して、戻される列の名前を指定します。JSON_query_columnの残りの句は、JSON_QUERYファンクションと同じセマンティクスを持ちます。これらの句の詳細は、JSON_QUERYを参照してください。「JSON_query_columnの使用: 例」の例も参照してください。

JSON_value_column この句は、JSON_VALUEファンクションと同じ方法でJSONデータを評価します。つまり、指定されたスカラーJSON値を確認し、SQL値としてそれらのJSON値の列を戻します。

column_nameを使用して、戻される列の名前を指定します。JSON_value_columnの残りの句は、JSON_VALUEファンクションと同じセマンティクスを持ちます。これらの句の詳細は、JSON_VALUEを参照してください。「JSON_value_columnの使用: 例」の例も参照してください。

JSON_nested_path この句を使用して、ネストされたJSONオブジェクトまたはJSON配列のJSON値を親のオブジェクトまたは配列のJSON値とともに単一の行の個々の列にフラット化できます。この句を再帰的に使用して、ネストされたオブジェクトまたは配列の複数のレイヤーから単一の行にデータを投影できます。

JSON_path_expression句を指定して、ネストされたオブジェクトまたは配列と照合します。このパス式は、JSON_TABLEファンクションで指定された行パス式に相対的になります。

COLUMNS句を使用して、戻されるネストされたオブジェクトまたは配列の列を定義します。この句は再帰的です。つまり、別のJSON_nested_path句内にJSON_nested_path句を指定できます。「JSON_nested_pathの使用: 例」の例も参照してください。

ordinality_column この句は、データ型NUMBERの生成された行番号の列を戻します。1つのordinality_columnのみ指定できます。ordinality_column句を使用した例は、「JSON_value_columnの使用: 例」も参照してください。

例

JSONドキュメントを含む表の作成: 例 この例は、このセクションの残りのJSON_TABLE例で使用される表j_purchaseorderの作成方法および移入方法を示します。

次の文は、表j_purchaseorderを作成します。列po_documentはJSONデータを格納するために使用され、整形式のJSONのみを列に格納するためにIS JSON CHECK制約があります。

CREATE TABLE j_purchaseorder
(id RAW (16) NOT NULL,
date_loaded TIMESTAMP(6) WITH TIME ZONE,
po_document CLOB CONSTRAINT ensure_json CHECK (po_document IS JSON));

次の文は、1つの行または1つのJSONドキュメントを表j_purchaseorderに挿入します。

INSERT INTO j_purchaseorder
VALUES (
SYS_GUID(),
SYSTIMESTAMP,
'{"PONumber"              : 1600,
"Reference"             : "ABULL-20140421",
"Requestor"            : "Alexis Bull",
"User"                 : "ABULL",
"CostCenter"           : "A50",
"ShippingInstructions" : {"name"   : "Alexis Bull",
"Address": {"street"   : "200 Sporting Green",
"city"    : "South San Francisco",
"state"   : "CA",
"zipCode" : 99236,
"country" : "United States of America"},
"Phone" : [{"type" : "Office", "number" : "909-555-7307"},
{"type" : "Mobile", "number" : "415-555-1234"}]},
"Special Instructions" : null,
"AllowPartialShipment" : true,
"LineItems" : [{"ItemNumber" : 1,
"Part" : {"Description" : "One Magic Christmas",
"UnitPrice"   : 19.95,
"UPCCode"     : 13131092899},
"Quantity" : 9.0},
{"ItemNumber" : 2,
"Part" : {"Description" : "Lethal Weapon",
"UnitPrice"   : 19.95,
"UPCCode"     : 85391628927},
"Quantity" : 5.0}]}');

JSON_query_columnの使用: 例 この例の文は、JSON_query_column句を使用して特定のJSONプロパティのJSONデータを問い合せて、列のプロパティ値を戻します。

この文は、最初に行パス式を列po_documentに適用し、これによってShippingInstructionsプロパティと一致します。COLUMNS句はJSON_query_column句を使用して、VARCHAR2(100)列のPhoneプロパティ値を戻します。

SELECT jt.phones
FROM j_purchaseorder,
JSON_TABLE(po_document, '$.ShippingInstructions'
COLUMNS
(phones VARCHAR2(100) FORMAT JSON PATH '$.Phone')) AS jt;

PHONES
-------------------------------------------------------------------------------------
[{"type":"Office","number":"909-555-7307"},{"type":"Mobile","number":"415-555-1234"}]

JSON_value_columnの使用: 例 この例の文は、JSON_value_column句を使用して特定のJSON値のJSONデータを問い合せて前の例の文を改良し、リレーショナル行および列のSQL値としてJSON値を戻します。

この文は、最初に行パス式を列po_documentに適用し、これによってJSON配列Phoneの要素と一致します。これらの要素は、typeとnumberの2つのメンバーを含むJSONオブジェクトです。この文は、COLUMNS句を使用して、phone_typeと呼ばれるVARCHAR2(10)列の各オブジェクトのtype値およびphone_numと呼ばれるVARCHAR2(20)列の各オブジェクトのnumber値を戻します。この文は、row_numberと呼ばれる順序列も戻します。

SELECT jt.*
FROM j_purchaseorder,
JSON_TABLE(po_document, '$.ShippingInstructions.Phone[*]'
COLUMNS (row_number FOR ORDINALITY,
phone_type VARCHAR2(10) PATH '$.type',
phone_num VARCHAR2(20) PATH '$.number'))
AS jt;

ROW_NUMBER PHONE_TYPE PHONE_NUM
---------- ---------- --------------------
1 Office     909-555-7307
2 Mobile     415-555-1234

JSON_exists_columnの使用: 例 この例の文は、JSON_exists_column句を使用してJSON値がJSONデータにあるかどうかをテストします。最初の例は、列の'true'または'false'値としてテストの結果を戻します。2番目の例は、WHERE句のテストの結果を使用します。

次の文は、最初に行パス式を列po_documentに適用し、これによってコンテキスト項目全体またはJSONドキュメントと一致します。次に、COLUMNS句を使用して、リクエスタの名前およびリクエスタのJSONデータに郵便番号が含まれるかどうかを示す'true'または'false'の文字列値を戻します。COLUMNS句は最初にJSON_value_column句を使用して、requestorと呼ばれるVARCHAR2(32)列のRequestor値を戻します。次に、JSON_exists_column句を使用して、zipCodeオブジェクトがあるかどうかを判断し、has_zipと呼ばれるVARCHAR2(5)列の結果を戻します。

SELECT requestor, has_zip
FROM j_purchaseorder,
JSON_TABLE(po_document, '$'
COLUMNS
(requestor VARCHAR2(32) PATH '$.Requestor',
has_zip VARCHAR2(5) EXISTS PATH '$.ShippingInstructions.Address.zipCode'));

REQUESTOR                        HAS_ZIP
-------------------------------- -------
Alexis Bull                      true

次の文は、WHERE句のhas_zipの値を使用してRequestor値を戻すかどうかを判断している点を除いて、前の文と似ています。

SELECT requestor
FROM j_purchaseorder,
JSON_TABLE(po_document, '$'
COLUMNS
(requestor VARCHAR2(32) PATH '$.Requestor',
has_zip VARCHAR2(5) EXISTS PATH '$.ShippingInstructions.Address.zipCode'))
WHERE (has_zip = 'true');

REQUESTOR
--------------------------------
Alexis Bull

JSON_nested_pathの使用: 例 次の2つの簡単な文は、JSON_nested_path句の機能を示します。3つの要素を含む簡単なJSON配列を操作します。最初の2つの要素は数値です。3つ目の要素は、2つの文字列値要素を含むネストされたJSON配列です。

次の文は、JSON_nested_path句を使用しません。単一の行の配列の3つの要素を戻します。ネストされた配列はすべて戻します。

SELECT *
FROM JSON_TABLE('[1,2,["a","b"]]', '$'
COLUMNS (outer_value_0 NUMBER PATH '$[0]',
outer_value_1 NUMBER PATH '$[1]',
outer_value_2 VARCHAR2(20) FORMAT JSON PATH '$[2]'));

OUTER_VALUE_0 OUTER_VALUE_1 OUTER_VALUE_2
------------- ------------- --------------------
1             2 ["a","b"]

JSON_nested_path句を使用して親の配列要素とともに単一の行の個々の列にネストされた配列の個々の要素を戻しているため、次の文は前の文と異なります。

SELECT *
FROM JSON_TABLE('[1,2,["a","b"]]', '$'
COLUMNS (outer_value_0 NUMBER PATH '$[0]',
outer_value_1 NUMBER PATH '$[1]',
NESTED PATH '$[2]'
COLUMNS (nested_value_0 VARCHAR2(1) PATH '$[0]',
nested_value_1 VARCHAR2(1) PATH '$[1]')));

OUTER_VALUE_0 OUTER_VALUE_1 NESTED_VALUE_0 NESTED_VALUE_1
------------- ------------- -------------- --------------
1             2 a              b

前の例は、ネストされたJSON配列によるJSON_nested_pathの使用方法を示します。次の文は、親オブジェクト要素とともに単一の行の個々の列にネストされたオブジェクトの個々の要素を戻してネストされたJSONオブジェクトとともにJSON_nested_path句を使用する方法を示します。

SELECT *
FROM JSON_TABLE('{a:100, b:200, c:{d:300, e:400}}', '$'
COLUMNS (outer_value_0 NUMBER PATH '$.a',
outer_value_1 NUMBER PATH '$.b',
NESTED PATH '$.c'
COLUMNS (nested_value_0 NUMBER PATH '$.d',
nested_value_1 NUMBER PATH '$.e')));

OUTER_VALUE_0 OUTER_VALUE_1 NESTED_VALUE_0 NESTED_VALUE_1
------------- ------------- -------------- --------------
100           200            300            400

次の文は、j_purchaseorder表の問合せ時にJSON_nested_path句を使用します。最初に行パス式を列po_documentに適用し、これによってコンテキスト項目全体またはJSONドキュメントと一致します。COLUMNS句を使用して、requestorと呼ばれるVARCHAR2(32)列のRequestor値を戻します。その後、JSON_nested_path句を使用して、ネストされたPhone配列の各メンバーの個々のオブジェクトのプロパティ値を戻します。行がネストされた配列の各メンバーに生成され、各行に対応するRequestor値が含まれます。

SELECT jt.*
FROM j_purchaseorder,
JSON_TABLE(po_document, '$'
COLUMNS
(requestor VARCHAR2(32) PATH '$.Requestor',
NESTED PATH '$.ShippingInstructions.Phone[*]'
COLUMNS (phone_type VARCHAR2(32) PATH '$.type',
phone_num VARCHAR2(20) PATH '$.number')))
AS jt;

REQUESTOR            PHONE_TYPE           PHONE_NUM
-------------------- -------------------- ---------------
Alexis Bull          Office               909-555-7307
Alexis Bull          Mobile               415-555-1234

JSON_VALUE

注意:
JSON_VALUEファンクションは、Oracle Database 12cリリース1(12.1.0.2)から使用可能です。

構文

JSON_path_expression::=

object_step::=

array_step::=

JSON_value_returning_clause::=

JSON_value_return_type::=

JSON_value_on_error_clause::=

用途

JSON_VALUEは、JSONデータの指定されたスカラーJSON値を確認し、SQL値として戻します。

expr

この句は、評価の対象となるJSONデータを指定するために使用します。exprでは、テキスト・リテラルを評価する式を指定します。exprが列である場合、列のデータ型はVARCHAR2、CLOBまたはBLOBのいずれかである必要があります。exprがNULLの場合はNULLを戻します。

exprが厳密なまたは緩い構文を使用した整形式のJSONデータのテキスト・リテラルでない場合、このファンクションはデフォルトでnullを戻します。JSON_value_on_error_clauseを使用して、このデフォルトの動作をオーバーライドできます。JSON_value_on_error_clauseを参照してください。

FORMAT JSON

exprがデータ・タイプBLOBの列の場合、FORMAT JSONを指定する必要があります。

JSON_path_expression

この句を使用して、JSONパス式を指定します。このファンクションはパス式を使用してexprを評価し、パス式と一致する(パス式を満たす)スカラーJSON値を確認します。パス式はテキスト・リテラルである必要があります。

パス式は、exprで指定される式であるコンテキスト項目を表すドル記号($)から始める必要があります。ドル記号の後、オブジェクト・ステップや配列ステップの可能性があるゼロ以上のステップが続きます。

このファンクションは、コンテキスト項目に対するパス式の最初のステップと一致するかどうかを試行します。最初のステップが一致した場合、このファンクションは最初のステップと一致したJSON値に対して2番目のステップと一致するかどうかを試行します。2番目のステップが一致した場合、このファンクションは2番目のステップと一致したJSON値に対して3番目のステップと一致するかどうかを試行し、以降も同様に続きます。最後のステップがスカラーJSON値と一致する場合、このファンクションはSQL値としてその値を戻します。ドル記号とゼロのステップで構成されるパス式('$')は、全体のコンテキスト項目と一致します。

JSON_value_returning_clauseを指定して、戻りSQL値のデータ型および書式を制御できます。JSON_value_returning_clauseを参照してください。

パス式の任意のステップが一致しない場合または最後のステップがスカラー値以外と一致する場合、このファンクションはデフォルトでnullを戻します。JSON_value_on_error_clauseを使用して、このデフォルトの動作をオーバーライドできます。JSON_value_on_error_clauseを参照してください。

object_step この句を使用して、オブジェクト・ステップを指定します。

- simple_nameまたはcomplex_nameを使用して、プロパティ名を指定します。このプロパティ名のメンバーが評価されるJSONオブジェクトにある場合、そのメンバーのプロパティ値が一致するオブジェクト・ステップになります。それ以外の場合、一致しないオブジェクト・ステップになります。両方のタイプの名前は大/小文字を区別します。このため、アルファベットの大/小文字がオブジェクト・ステップおよびJSONデータで一致する場合のみ、一致の結果になります。
simple_nameは、英数字のみで構成され、最初の文字はアルファベット文字にする必要があります。complex_nameは、英数字のみで構成され、最初の文字は英数字にする必要があります。complex_nameは、二重引用符で囲む必要があります。

- ワイルド・カード記号であるアスタリスク(*)を使用して、すべてのプロパティ名を指定します。評価されるJSONオブジェクトに少なくとも1つのメンバーが含まれる場合、オブジェクト・ステップはすべてのメンバーの値と一致する結果になります。それ以外の場合、一致しないオブジェクト・ステップになります。

オブジェクト・ステップをJSON配列に適用すると、配列が暗黙的にアンラップされ、配列の要素がオブジェクト・ステップを使用して評価されます。これは、JSONパス式解除といいます。詳細は、『Oracle XML DB開発者ガイド』を参照してください。

評価されるJSON値がJSONオブジェクトでない場合、オブジェクト・ステップは一致しません。

array_step この句を使用して、配列ステップを指定します。

- integerを使用して、JSON配列の索引integerの要素を指定します。integer TO integerを使用して、2つのinteger索引値の間(これらの値を含む)の要素の範囲を指定します。指定された要素が評価されるJSON配列にある場合、配列ステップはそれらの要素と一致する結果になります。それ以外の場合、一致しない配列ステップになります。JSON配列の最初の要素は索引0です。

- ワイルド・カード記号であるアスタリスク(*)を使用して、JSON配列のすべての要素を指定します。評価されるJSON配列に少なくとも1つの要素が含まれる場合、JSON配列のすべての要素が一致する配列ステップになります。それ以外の場合、一致しない配列ステップになります。

評価されるJSONデータがJSON配列でない場合、データが暗黙的に配列にラップされ、配列ステップを使用して評価されます。これは、JSONパス式解除といいます。詳細は、『Oracle XML DB開発者ガイド』を参照してください。

JSON_value_returning_clause

この句を使用して、このファンクションで戻される値のデータ型および書式を指定します。

RETURNING RETURNING句を使用して、戻り値のデータ型を指定します。この句を省略すると、JSON_VALUEはVARCHAR2(4000)型の値を戻します。

JSON_value_return_typeを使用して、次のデータ型を指定できます。

- VARCHAR2[(size [BYTE,CHAR])]
このデータ型を指定すると、このファンクションで戻されるスカラー値は文字または数値になります。数値は暗黙的にVARCHAR2に変換されます。SQLでVARCHAR2データ型を指定する場合、サイズを指定する必要があります。ただし、この句はサイズを省略できます。この場合、JSON_VALUEはVARCHAR2(4000)型の値を戻します。

詳細は、「VARCHAR2データ型」を参照してください。

- NUMBER[(precision [, scale])]
このデータ型を指定すると、このファンクションで戻されるスカラー値は数値になります。

詳細は、「NUMBERデータ型」を参照してください。

データ型が戻り値を保持できる十分な大きさでない場合、このファンクションはデフォルトでnullを戻します。JSON_value_on_error_clauseを使用して、このデフォルトの動作をオーバーライドできます。JSON_value_on_error_clauseを参照してください。

ASCII 標準のASCII Unicodeエスケープ・シーケンスを使用して戻り値の非ASCII Unicode文字を自動的にエスケープするには、ASCIIを指定します。

JSON_value_on_error_clause

この句を使用して、次のいずれかのエラーが発生した場合にこのファンクションで戻される値を指定します。

- exprが厳密なまたは緩いJSON構文を使用した整形式のJSONデータではありません。

- JSONデータがJSONパス式を使用して評価される場合にスカラー値または一致が見つかりません。

- 戻り値のデータ型が戻り値を保持する十分な大きさではありません。

次の句を指定できます。

- NULL ON ERROR - エラーが発生した場合にnullを戻します。これはデフォルトです。

- ERROR ON ERROR - エラーが発生した場合に適切なOracleエラーを戻します。

- DEFAULT literal ON ERROR - エラーが発生した場合にliteralを戻します。このファンクションで戻される値のデータ型がVARCHAR2である場合、テキスト・リテラルを指定する必要があります。データ型がNUMBERである場合、数値リテラルを指定する必要があります。

例

次の問合せは、プロパティ名aのメンバーの値を戻します。RETURNING句が指定されていないため、値がVARCHAR2(4000)データ型として戻されます。

SELECT JSON_VALUE('{a:100}', '$.a') AS value
FROM DUAL;

VALUE
-----
100

次の問合せは、プロパティ名aのメンバーの値を戻します。RETURNING NUMBER句が指定されているため、値がNUMBERデータ型として戻されます。

SELECT JSON_VALUE('{a:100}', '$.a' RETURNING NUMBER) AS value
FROM DUAL;

VALUE
----------
100

次の問合せは、プロパティ名aを使用したメンバーの値にあるプロパティ名bを使用したメンバーの値を戻します。

SELECT JSON_VALUE('{a:{b:100}}', '$.a.b') AS value
FROM DUAL;

VALUE
-----
100

次の問合せは、任意のオブジェクトのプロパティ名dのメンバーの値を戻します。

SELECT JSON_VALUE('{a:{b:100}, c:{d:200}, e:{f:300}}', '$.*.d') AS value
FROM DUAL;

VALUE
-----
200

次の問合せは、配列の最初の要素の値を戻します。

SELECT JSON_VALUE('[0, 1, 2, 3]', '$[0]') AS value
FROM DUAL;

VALUE
-----
0

次の問合せは、配列の3番目の要素の値を戻します。配列は、プロパティ名aのメンバーの値です。

SELECT JSON_VALUE('{a:[5, 10, 15, 20]}', '$.a[2]') AS value
FROM DUAL;

VALUE
-----
15

次の問合せは、配列の2番目のオブジェクトのプロパティ名aのメンバーの値を戻します。

SELECT JSON_VALUE('[{a:100}, {a:200}, {a:300}]', '$[1].a') AS value
FROM DUAL;

VALUE
-----
200

次の問合せは、配列の任意のオブジェクトのプロパティ名cのメンバーの値を戻します。

SELECT JSON_VALUE('[{a:100}, {b:200}, {c:300}]', '$[*].c') AS value
FROM DUAL;

VALUE
-----
300

次の問合せは、プロパティ名lastnameのメンバーの値を戻そうとします。ただし、そのメンバーは指定されたJSONデータに存在しないため、一致は見つかりません。ON ERROR句が指定されていないため、この文はデフォルトのNULL ON ERRORを使用し、nullを戻します。

SELECT JSON_VALUE('{firstname:"John"}', '$.lastname') AS "Last Name"
FROM DUAL;

Last Name
---------

指定されたJSONに存在しないプロパティ名lastnameのメンバーの値を戻そうとするため、次の問合せはエラーになります。ON ERROR句が指定されているため、この文は指定されたテキスト・リテラルを戻します。

SELECT JSON_VALUE('{firstname:"John"}', '$.lastname'
DEFAULT 'No last name found' ON ERROR) AS "Last Name"
FROM DUAL;

Last Name
---------
No last name found

LAG

構文

関連項目:
構文、セマンティクス、制限事項、およびvalue_exprの書式の詳細は、「分析ファンクション」を参照してください。

用途

LAGは分析ファンクションです。これは、自己結合せずに、表の2つ以上の行へ同時アクセスを行います。問合せから戻される一連の行およびカーソル位置を指定すると、LAGは、その位置より前にある指定された物理オフセットにある行へアクセスします。

オプションのoffset引数には、0(ゼロ)より大きい整数を指定します。offsetを指定しない場合、デフォルト値は1です。オフセットがウィンドウの有効範囲を超えた場合、オプションのdefault値が戻されます。defaultを指定しない場合、デフォルトはNULLです。

{RESPECT | IGNORE} NULLSは、value_exprのNULL値を計算に含めるか除外するかを指定します。デフォルトはRESPECT NULLSです。

value_exprには、LAGまたは他の分析ファンクションを使用して分析ファンクションをネストできません。ただし、他の組込みファンクション式をvalue_exprで使用できます。

関連項目:
exprの書式の詳細は、「SQL式」を参照してください。「LEAD」も参照してください。

例

次の例では、employees表の各購買係について、その購買係の直前に雇用された従業員の給与を示します。

SELECT hire_date, last_name, salary,
LAG(salary, 1, 0) OVER (ORDER BY hire_date) AS prev_sal
FROM employees
WHERE job_id = 'PU_CLERK'
ORDER BY hire_date;

HIRE_DATE LAST_NAME                     SALARY   PREV_SAL
--------- ------------------------- ---------- ----------
18-MAY-03 Khoo                            3100          0
24-JUL-05 Tobias                          2800       3100
24-DEC-05 Baida                           2900       2800
15-NOV-06 Himuro                          2600       2900
10-AUG-07 Colmenares                      2500       2600

LAST

構文

last::=

関連項目:
query_partitioning_clauseの構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

FIRSTファンクションとLASTファンクションは類似しています。両方のファンクションとも、与えられたソート指定に対して、FIRSTまたはLASTとしてランク付けされた一連の行の一連の値を操作する集計ファンクションおよび分析ファンクションです。1つの行のみがFIRSTまたはLASTとしてランク付けされている場合、集計は、1つの要素のみを持つセットを操作します。

このファンクションの詳細および使用例は、「FIRST」を参照してください。

LAST_DAY

構文

用途

LAST_DAYは、dateを含む月の最終日の日付を戻します。月の最終日は、セッション・パラメータNLS_CALENDARによって定義されます。戻り型は、dateのデータ型に関係なく常にDATEです。

例

次の文は、現在の月の残りの日数を確認します。

SELECT SYSDATE,
LAST_DAY(SYSDATE) "Last",
LAST_DAY(SYSDATE) - SYSDATE "Days Left"
FROM DUAL;

SYSDATE   Last       Days Left
--------- --------- ----------
30-MAY-09 31-MAY-09          1

次の例では、各従業員の雇用開始日に5か月を加えて、評価日付を戻します。

SELECT last_name, hire_date,
TO_CHAR(ADD_MONTHS(LAST_DAY(hire_date), 5)) "Eval Date"
FROM employees
ORDER BY last_name, hire_date;

LAST_NAME                 HIRE_DATE Eval Date
------------------------- --------- ---------
Abel                      11-MAY-04 31-OCT-04
Ande                      24-MAR-08 31-AUG-08
Atkinson                  30-OCT-05 31-MAR-06
Austin                    25-JUN-05 30-NOV-05
Baer                      07-JUN-02 30-NOV-02
Baida                     24-DEC-05 31-MAY-06
Banda                     21-APR-08 30-SEP-08
Bates                     24-MAR-07 31-AUG-07
. . .

LAST_VALUE

構文

関連項目:
構文、セマンティクス、制限事項、およびexprの書式の詳細は、「分析ファンクション」を参照してください。

用途

LAST_VALUEはデータの稠密化に役立つ分析ファンクションです。これは、順序付けられた値の集合にある最後の値を戻します。

注意:
この構文の2つの書式は、同じ動作になります。上のブランチはANSI形式です。ANSIとの互換性を維持するために、こちらを使用することをお薦めします。

{RESPECT | IGNORE} NULLSは、exprのNULL値を計算に含めるか除外するかを指定します。デフォルトはRESPECT NULLSです。集合内の最後の値がNULLの場合、IGNORE NULLSを指定していないかぎり、ファンクションはNULLを戻します。IGNORE NULLSを指定すると、LAST_VALUEは集合内の最後のNULLではない値を戻します。すべての値がNULLの場合はNULLを戻します。データの稠密化の例は、「パーティション化された外部結合の使用例:」を参照してください。

exprには、LAST_VALUEまたは他の分析ファンクションを使用して分析ファンクションをネストできません。ただし、他の組込みファンクション式をexprで使用できます。exprの書式の詳細は、「SQL式」を参照してください。

analytic_clauseのwindowing_clauseを省略した場合、デフォルトでRANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROWになります。ウィンドウの最後の値はウィンドウの終端にあり、固定されていないため、このデフォルトは予期しない値を戻す場合があります。これは、現行の行が変化するに伴って変化します。正しい結果を得るには、windowing_clauseをRANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWINGとして指定します。または、windowing_clauseをRANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWINGとして指定することもできます。

例

次の例では、給与が最も低い従業員の雇用開始日を各行に戻します。

SELECT employee_id, last_name, salary, hire_date,
LAST_VALUE(hire_date)
OVER (ORDER BY salary DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED
FOLLOWING) AS lv
FROM (SELECT * FROM employees
WHERE department_id = 90
ORDER BY hire_date);

EMPLOYEE_ID LAST_NAME                     SALARY HIRE_DATE LV
----------- ------------------------- ---------- --------- ---------
100 King                           24000 17-JUN-03 13-JAN-01
101 Kochhar                        17000 21-SEP-05 13-JAN-01
102 De Haan                        17000 13-JAN-01 13-JAN-01

この例では、LAST_VALUEファンクションの非決定的な性質を示しています。KochharとDe Haanの給与は同じであるため、Kochharの次の行にDe Haanがあります。Kochharが最初に表示されているのは、副問合せの行がhire_dateで順序付けられているためです。ただし、行がhire_dateで降順に順序付けられている場合は、次の例に示すとおり、ファンクションは異なる値を戻します。

SELECT employee_id, last_name, salary, hire_date,
LAST_VALUE(hire_date)
OVER (ORDER BY salary DESC ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED
FOLLOWING) AS lv
FROM (SELECT * FROM employees
WHERE department_id = 90
ORDER BY hire_date DESC);

EMPLOYEE_ID LAST_NAME                     SALARY HIRE_DATE LV
----------- ------------------------- ---------- --------- ---------
100 King                           24000 17-JUN-03 21-SEP-05
102 De Haan                        17000 13-JAN-01 21-SEP-05
101 Kochhar                        17000 21-SEP-05 21-SEP-05

次の2つの例では、一意キーで順序付けることによって、LAST_VALUEファンクションを決定的にする方法を示しています。salaryと一意キーemployee_idの両方でファンクション内を順序付けると、副問合せの順序付けにかかわらず、同じ結果が戻されます。

SELECT employee_id, last_name, salary, hire_date,
LAST_VALUE(hire_date)
OVER (ORDER BY salary DESC, employee_id ROWS BETWEEN UNBOUNDED PRECEDING
AND UNBOUNDED FOLLOWING) AS lv
FROM (SELECT * FROM employees
WHERE department_id = 90
ORDER BY hire_date);

EMPLOYEE_ID LAST_NAME                     SALARY HIRE_DATE LV
----------- ------------------------- ---------- --------- ---------
100 King                           24000 17-JUN-03 13-JAN-01
101 Kochhar                        17000 21-SEP-05 13-JAN-01
102 De Haan                        17000 13-JAN-01 13-JAN-01

SELECT employee_id, last_name, salary, hire_date,
LAST_VALUE(hire_date)
OVER (ORDER BY salary DESC, employee_id ROWS BETWEEN UNBOUNDED PRECEDING
AND UNBOUNDED FOLLOWING) AS lv
FROM (SELECT * FROM employees
WHERE department_id = 90
ORDER BY hire_date DESC);

EMPLOYEE_ID LAST_NAME                     SALARY HIRE_DATE LV
----------- ------------------------- ---------- --------- ---------
100 King                           24000 17-JUN-03 13-JAN-01
101 Kochhar                        17000 21-SEP-05 13-JAN-01
102 De Haan                        17000 13-JAN-01 13-JAN-01

次の2つの例では、論理オフセット(ROWSのかわりにRANGE)を使用すると、LAST_VALUEファンクションが決定的になることを示しています。ORDER BY式に重複値がある場合は、LAST_VALUEがexprの最大値になります。

SELECT employee_id, last_name, salary, hire_date,
LAST_VALUE(hire_date)
OVER (ORDER BY salary DESC RANGE BETWEEN UNBOUNDED PRECEDING AND
UNBOUNDED FOLLOWING) AS lv
FROM (SELECT * FROM employees
WHERE department_id = 90
ORDER BY hire_date);

EMPLOYEE_ID LAST_NAME                     SALARY HIRE_DATE LV
----------- ------------------------- ---------- --------- ---------
100 King                           24000 17-JUN-03 21-SEP-05
102 De Haan                        17000 13-JAN-01 21-SEP-05
101 Kochhar                        17000 21-SEP-05 21-SEP-05

SELECT employee_id, last_name, salary, hire_date,
LAST_VALUE(hire_date)
OVER (ORDER BY salary DESC RANGE BETWEEN UNBOUNDED PRECEDING AND
UNBOUNDED FOLLOWING) AS lv
FROM (SELECT * FROM employees
WHERE department_id = 90
ORDER BY hire_date DESC);

EMPLOYEE_ID LAST_NAME                     SALARY HIRE_DATE LV
----------- ------------------------- ---------- --------- ---------
100 King                           24000 17-JUN-03 21-SEP-05
102 De Haan                        17000 13-JAN-01 21-SEP-05
101 Kochhar                        17000 21-SEP-05 21-SEP-05

LEAD

構文

関連項目:
構文、セマンティクス、制限事項、およびvalue_exprの書式の詳細は、「分析ファンクション」を参照してください。

用途

LEADは分析ファンクションです。これは、自己結合せずに、表の2つ以上の行へ同時アクセスを行います。問合せから戻される一連の行およびカーソル位置を指定すると、LEADは、その位置より後にある指定された物理オフセットの行へアクセスします。

offsetを指定しない場合、デフォルト値は1です。オフセットが表の有効範囲を超えた場合、オプションのdefault値が戻されます。defaultを指定しない場合、デフォルト値はNULLです。

{RESPECT | IGNORE} NULLSは、value_exprのNULL値を計算に含めるか除外するかを指定します。デフォルトはRESPECT NULLSです。

value_exprには、LEADまたは他の分析ファンクションを使用して分析ファンクションをネストできません。ただし、他の組込みファンクション式をvalue_exprで使用できます。

関連項目:
exprの書式の詳細は、「SQL式」を参照してください。「LAG」も参照してください。

例

次の例では、employees表の部門30の各従業員について、その従業員の直後に雇用された従業員の雇用開始日を示します。

SELECT hire_date, last_name,
LEAD(hire_date, 1) OVER (ORDER BY hire_date) AS "NextHired"
FROM employees
WHERE department_id = 30
ORDER BY hire_date;

HIRE_DATE LAST_NAME                 Next Hired
--------- ------------------------- ----------
07-DEC-02 Raphaely                  18-MAY-03
18-MAY-03 Khoo                      24-JUL-05
24-JUL-05 Tobias                    24-DEC-05
24-DEC-05 Baida                     15-NOV-06
15-NOV-06 Himuro                    10-AUG-07
10-AUG-07 Colmenares

LEAST

構文

用途

LEASTは、1つ以上の式のリストの最小値を戻します。Oracle Databaseは、最初のexprを使用して戻り型を判断します。最初のexprが数値である場合、Oracleは、数値の優先順位が最も高い引数を判断し、比較の前に残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。最初のexprが数値ではない場合、比較の前に、2番目以降の各exprが最初のexprのデータ型に暗黙的に変換されます。

Oracle Databaseは、非空白埋め比較セマンティクスを使用して各exprを比較します。比較では、デフォルトの場合はバイナリが使用され、NLS_COMPパラメータがLINGUISTICに設定され、NLS_SORTパラメータにBINARY以外の設定がある場合は言語が使用されます。文字の比較は、データベース・キャラクタ・セットの文字の数値コードに基づいて行われます。また、文字ごとではなく、一連のバイトとして扱われる文字列全体で行われます。このファンクションによって戻される値が文字データの場合、そのデータ型は、最初のexprが文字データ型の場合はVARCHAR2、最初のexprが各国語キャラクタ・データ型の場合はNVARCHAR2になります。

関連項目:

- 文字の比較の詳細は、「データ型の比較規則」を参照してください。

- 暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。2進浮動小数点の比較セマンティクスの詳細は、「浮動小数点数」を参照してください。

- 「GREATEST」を参照してください(GREATESTは1つ以上の式のリストの最大値を戻します)。

例

次の文では、最小値を持つ文字列を検索します。

SELECT LEAST('HARRY','HARRIOT','HAROLD') "Least"
FROM DUAL;

Least
------
HAROLD

次の文では、最初の引数は数字です。Oracle Databaseは、数値の優先順位が最も高い引数は3番目の引数であると判断し、残りの引数を3番目の引数のデータ型に変換して、そのデータ型で最小値を戻します。

SELECT LEAST (1, '2.1', '.000832') "Least"
FROM DUAL;

Least
-------
.000832

LENGTH

構文

length::=

用途

LENGTHの各ファンクションは、charの長さを戻します。LENGTHは、入力キャラクタ・セットによって定義された文字を使用して、長さを算出します。LENGTHBは、文字のかわりにバイトを使用します。LENGTHCは、完全なUnicodeキャラクタを使用します。LENGTH2は、UCS2コードポイントを使用します。LENGTH4には、UCS4コード・ポイントを使用します。

charのデータ型は、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBです。例外は、LENGTHC、LENGTH2およびLENGTH4であり、これらでは、charをCLOBおよびNCLOBのいずれにもできません。戻り値のデータ型はNUMBERです。charのデータ型がCHARの場合、その長さにはすべての後続空白が含まれます。charがNULLの場合、このファンクションはNULLを戻します。

LENGTHBの制限事項 LENGTHBファンクションは、シングルバイトのLOBでのみサポートされます。このファンクションは、マルチバイトのキャラクタ・セットのCLOBとNCLOBデータでは使用できません。

例

次の例では、シングルバイトおよびマルチバイトのデータベース・キャラクタ・セットを使用するLENGTHファンクションを使用します。

SELECT LENGTH('CANDIDE') "Length in characters"
FROM DUAL;

Length in characters
--------------------
7

次の例では、データベース・キャラクタ・セットがダブルバイトの場合を想定しています。

SELECT LENGTHB ('CANDIDE') "Length in bytes"
FROM DUAL;

Length in bytes
---------------
14

LISTAGG

構文

関連項目:
ORDER BY句およびOVER句の構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

LISTAGGは、指定されたメジャーについて、ORDER BY句に指定された各グループ内でデータを順序付け、メジャー列の値を結合します。

- 単一セットの集計ファンクションとして使用すると、LISTAGGはすべての行に対して操作を行い、1つの出力行を戻します。

- グループ・セットの集計に使用すると、このファンクションはGROUP BY句に定義されたグループごとに操作を行い、そのグループごとに1つの出力行を戻します。

- 分析ファンクションとして使用すると、LISTAGGはquery_partition_clauseに指定された1つ以上の式に基づくグループに、問合せの結果セットを分割します。

ファンクションの引数には、次の規則があります。

- measure_exprには、任意の式を指定できます。メジャー列のNULL値は無視されます。

- delimiter_exprには、メジャー値の区切りに使用する文字列を指定します。この句はオプションであり、デフォルトはNULLです。

- order_by_clauseには、結合した値を戻す順序を指定します。このファンクションが決定的となるのは、ORDER BYの列リストの順序が一意になった場合のみです。

メジャー列がRAWの場合は、RAWデータ型が戻されます。それ以外の場合は、戻り値がVARCHAR2になります。

集計の例

次の単一セットの集計例は、hr.employees表に含まれる部門30の全従業員を、雇用開始日と姓の順にリストします。

SELECT LISTAGG(last_name, '; ')
WITHIN GROUP (ORDER BY hire_date, last_name) "Emp_list",
MIN(hire_date) "Earliest"
FROM employees
WHERE department_id = 30;

Emp_list                                                     Earliest
------------------------------------------------------------ ---------
Raphaely; Khoo; Tobias; Baida; Himuro; Colmenares            07-DEC-02

次のグループ・セットの集計例は、hr.employees表の部門IDごとに、各部門の従業員を雇用開始日の順にリストします。

SELECT department_id "Dept.",
LISTAGG(last_name, '; ') WITHIN GROUP (ORDER BY hire_date) "Employees"
FROM employees
GROUP BY department_id
ORDER BY department_id;

Dept. Employees
------ ------------------------------------------------------------
10 Whalen
20 Hartstein; Fay
30 Raphaely; Khoo; Tobias; Baida; Himuro; Colmenares
40 Mavris
50 Kaufling; Ladwig; Rajs; Sarchand; Bell; Mallin; Weiss; Davie
s; Marlow; Bull; Everett; Fripp; Chung; Nayer; Dilly; Bissot
; Vollman; Stiles; Atkinson; Taylor; Seo; Fleaur; Matos; Pat
el; Walsh; Feeney; Dellinger; McCain; Vargas; Gates; Rogers;
Mikkilineni; Landry; Cabrio; Jones; Olson; OConnell; Sulliv
an; Mourgos; Gee; Perkins; Grant; Geoni; Philtanker; Markle
60 Austin; Hunold; Pataballa; Lorentz; Ernst
70 Baer
. . .

分析の例

次の分析例は、2003年9月1日より前に雇用された各従業員について、所属部門、雇用開始日、および同じ部門で2003年9月1日より前に雇用された他の全従業員を表示します。

SELECT department_id "Dept", hire_date "Date", last_name "Name",
LISTAGG(last_name, '; ') WITHIN GROUP (ORDER BY hire_date, last_name)
OVER (PARTITION BY department_id) as "Emp_list"
FROM employees
WHERE hire_date < '01-SEP-2003'
ORDER BY "Dept", "Date", "Name";

Dept Date      Name            Emp_list
----- --------- --------------- ---------------------------------------------
30 07-DEC-02 Raphaely        Raphaely; Khoo
30 18-MAY-03 Khoo            Raphaely; Khoo
40 07-JUN-02 Mavris          Mavris
50 01-MAY-03 Kaufling        Kaufling; Ladwig
50 14-JUL-03 Ladwig          Kaufling; Ladwig
70 07-JUN-02 Baer            Baer
90 13-JAN-01 De Haan         De Haan; King
90 17-JUN-03 King            De Haan; King
100 16-AUG-02 Faviet          Faviet; Greenberg
100 17-AUG-02 Greenberg       Faviet; Greenberg
110 07-JUN-02 Gietz           Gietz; Higgins
110 07-JUN-02 Higgins         Gietz; Higgins

LN

構文

用途

LNは、nの自然対数を戻します(nは正の数)。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。引数がBINARY_FLOATの場合、このファンクションはBINARY_DOUBLEを戻します。それ以外の場合、引数と同じ数値データ型を戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

例

次の例では、95の自然対数を戻します。

SELECT LN(95) "Natural log of 95"
FROM DUAL;

Natural log of 95
-----------------
4.55387689

LNNVL

構文

用途

LNNVLは、条件のオペランドの1つまたは両方がNULLの可能性がある場合にその条件を簡単に評価する方法を提供します。このファンクションは問合せのWHERE句で、またはWHEN条件として検索CASE式で使用できます。このファンクションは、引数として条件を取り、その条件がFALSEまたはUNKNOWNの場合はTRUEを戻し、TRUEの場合はFALSEを戻します。LNNVLは、スカラー式を指定できる場所であればどこでも指定でき、有効ではないが、発生する可能性があるNULLを評価するためにIS [NOT] NULL、ANDまたはOR条件が必要であるようなコンテキストでも指定できます。

Oracle Databaseは、LNNVLファンクションをこの方法で内部的に使用して、NOT IN条件をNOT EXISTS条件として書き換える場合があります。この場合、EXPLAIN PLANからの出力によって、この操作がPLAN TABLEに出力されます。conditionでは、どのようなスカラー値でも評価できますが、AND、ORまたはBETWEENを含む複合条件は指定できません。

a = 2およびb=NULLの場合のLNNVLからの戻り値を次の表に示します。

条件

条件の真偽

LNNVLの戻り値

a = 1

FALSE

TRUE

a = 2

TRUE

FALSE

a IS NULL

FALSE

TRUE

b = 1

UNKNOWN

TRUE

b IS NULL

TRUE

FALSE

a = b

UNKNOWN

TRUE

例

歩合を受け取らない従業員を含めて、歩合率が20%未満の従業員数を調べるとします。次の問合せは、20%未満の歩合を実際に受け取る従業員のみを戻します。

SELECT COUNT(*)
FROM employees
WHERE commission_pct < .2;

COUNT(*)
----------
11

歩合を受け取らない72人の従業員も含めるには、LNNVLファンクションを次のように使用して、この問合せを書き換えます。

SELECT COUNT(*)
FROM employees
WHERE LNNVL(commission_pct >= .2);

COUNT(*)
----------
83

LOCALTIMESTAMP

構文

用途

LOCALTIMESTAMPは、セッションのタイムゾーンの現在の日付および時刻をTIMESTAMPデータ型の値で戻します。このファンクションとCURRENT_TIMESTAMPとの違いは、CURRENT_TIMESTAMPは、TIMESTAMP WITH TIME ZONEの値を戻し、LOCALTIMESTAMPはTIMESTAMPの値を戻す点です。

オプションの引数timestamp_precisionには、戻される時刻値の秒の小数部の精度を指定します。

関連項目:
「CURRENT_TIMESTAMP」、「TIMESTAMPデータ型」および「TIMESTAMP WITH TIME ZONEデータ型」を参照してください。

例

次の例では、LOCALTIMESTAMPとCURRENT_TIMESTAMPの相違を示します。

ALTER SESSION SET TIME_ZONE = '-5:00';
SELECT CURRENT_TIMESTAMP, LOCALTIMESTAMP FROM DUAL;

CURRENT_TIMESTAMP                    LOCALTIMESTAMP
-------------------------------------------------------------------
04-APR-00 01.27.18.999220 PM -05:00  04-APR-00 01.27.19 PM

ALTER SESSION SET TIME_ZONE = '-8:00';
SELECT CURRENT_TIMESTAMP, LOCALTIMESTAMP FROM DUAL;

CURRENT_TIMESTAMP                    LOCALTIMESTAMP
-----------------------------------  ------------------------------
04-APR-00 10.27.45.132474 AM -08:00  04-APR-00 10.27.451 AM

LOCALTIMESTAMPで書式マスクを使用する場合は、ファンクションが戻す値と書式マスクを一致させてください。たとえば、次の表の場合を考えます。

CREATE TABLE local_test (col1 TIMESTAMP WITH LOCAL TIME ZONE);

ファンクションが戻す型のTIME ZONEの部分がマスクに含まれていないため、次の文は正常に実行されません。

INSERT INTO local_test
VALUES (TO_TIMESTAMP(LOCALTIMESTAMP, 'DD-MON-RR HH.MI.SSXFF'));

次の文では、LOCALTIMESTAMPの戻り値の型と一致する正しい書式マスクが使用されています。

INSERT INTO local_test
VALUES (TO_TIMESTAMP(LOCALTIMESTAMP, 'DD-MON-RR HH.MI.SSXFF PM'));

LOG

構文

用途

LOGは、n2を底とするn1の対数を戻します。底n2は0(ゼロ)または1以外の任意の正の値で、n1は任意の正の値です。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。いずれかの引数がBINARY_FLOATまたはBINARY_DOUBLEの場合、このファンクションはBINARY_DOUBLEを戻します。それ以外の場合、NUMBERを戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

例

次の例では、100の対数を戻します。

SELECT LOG(10,100) "Log base 10 of 100"
FROM DUAL;

Log base 10 of 100
------------------
2

LOWER

構文

用途

LOWERは、すべての文字を小文字にしてcharを戻します。charは、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBデータ型です。戻り値は、charと同じデータ型です。データベースは、基礎となるキャラクタ・セットに対して定義されているバイナリ・マッピングに基づいて文字の大/小文字を設定します。小文字の区別については、「NLS_LOWER」を参照してください。

例

次の例では、文字列を小文字にして戻します。

SELECT LOWER('MR. SCOTT MCMILLAN') "Lowercase"
FROM DUAL;

Lowercase
--------------------
mr. scott mcmillan

LPAD

構文

用途

LPADは、expr1の左側にexpr2に指定した文字を連続的に埋め込んでn桁にして戻します。この関数は、問合せの出力を書式設定する場合に役立ちます。

expr1およびexpr2は、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBデータ型です。戻される文字列は、expr1が文字データ型の場合はVARCHAR2データ型、expr1が各国語キャラクタ・データ型の場合はNVARCHAR2データ型、expr1がLOBデータ型の場合はLOBデータ型になります。expr1と同じキャラクタ・セットの文字列が戻されます。引数nは、NUMBER型の整数か、またはNUMBER型の整数に暗黙的に変換可能な値である必要があります。

expr2を指定しない場合、デフォルトで空白1個が指定されます。expr1がnより長い場合、このファンクションはnに収まるexpr1の一部を戻します。

引数nは、戻り値が画面に表示される場合の全体の長さです。ほとんどのキャラクタ・セットでは、戻り値の文字数です。ただし、一部のマルチバイト・キャラクタ・セットでは、文字列の表示長はその文字列の文字数と異なることがあります。

例

次の例では、文字列の左側にアスタリスクとピリオド(*.)を埋め込みます。

SELECT LPAD('Page 1',15,'*.') "LPAD example"
FROM DUAL;

LPAD example
---------------
*.*.*.*.*Page 1

LTRIM

構文

用途

LTRIMは、charの左端から、setに指定されたすべての文字を削除します。setを指定しない場合、デフォルトで空白1個が指定されます。Oracle Databaseはcharの先頭文字からスキャンし始め、setに指定された文字をすべて削除します。setに指定された文字以外の文字が見つかった時点で結果を戻します。

charおよびsetは、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBデータ型です。戻される文字列は、charが文字データ型の場合はVARCHAR2データ型、charが各国語キャラクタ・データ型の場合はNVARCHAR2データ型、charがLOBデータ型の場合はLOBデータ型になります。

関連項目:
「RTRIM」

例

次の例では、文字列の左端にあるすべての小なり記号(<)、大なり記号(>)および等号(=)を文字列から削除します。

SELECT LTRIM('<=====>BROWNING<=====>', '<>=') "LTRIM Example"
FROM DUAL;

LTRIM Example
---------------
BROWNING<=====>

MAKE_REF

構文

用途

MAKE_REFは、オブジェクト識別子が主キーに基づいている、オブジェクト・ビューの行またはオブジェクト表の行に対するREFを作成します。このファンクションは、オブジェクト・ビューを作成する場合などに有効です。

関連項目:
オブジェクト・ビューの詳細は、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。「DEREF」も参照してください。

例

サンプル・スキーマoeには、inventory_typに基づくオブジェクト・ビューoc_inventoriesが格納されています。オブジェクト識別子はproduct_idです。次の例では、3003というproduct_idを含むオブジェクト・ビューoc_inventoriesにある行へのREFを作成します。

SELECT MAKE_REF (oc_inventories, 3003)
FROM DUAL;

MAKE_REF(OC_INVENTORIES,3003)
------------------------------------------------------------------
00004A038A0046857C14617141109EE03408002082543600000014260100010001
00290090606002A00078401FE0000000B03C21F040000000000000000000000000
0000000000

MAX

構文

関連項目:
構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

MAXはexprの最大値を戻します。これは、集計ファンクションまたは分析ファンクションとして使用できます。

関連項目:
exprの書式の詳細は、「SQL式」を参照してください。2進浮動小数点の比較セマンティクスの詳細は、「浮動小数点数」を参照してください。「集計ファンクション」も参照してください。

集計の例

次の例では、hr.employees表の最高給与を検索します。

SELECT MAX(salary) "Maximum"
FROM employees;

Maximum
----------
24000

分析の例

次の例では、各従業員について、その従業員と所属が同じ従業員のうち、一番高い給与を計算します。

SELECT manager_id, last_name, salary,
MAX(salary) OVER (PARTITION BY manager_id) AS mgr_max
FROM employees
ORDER BY manager_id, last_name, salary;

MANAGER_ID LAST_NAME                     SALARY    MGR_MAX
---------- ------------------------- ---------- ----------
100 Cambrault                      11000      17000
100 De Haan                        17000      17000
100 Errazuriz                      12000      17000
100 Fripp                           8200      17000
100 Hartstein                      13000      17000
100 Kaufling                        7900      17000
100 Kochhar                        17000      17000
. . .

この問合せを述語のある親問合せで囲むと、各部門で給与の一番高い従業員がわかります。

SELECT manager_id, last_name, salary
FROM (SELECT manager_id, last_name, salary,
MAX(salary) OVER (PARTITION BY manager_id) AS rmax_sal
FROM employees)
WHERE salary = rmax_sal
ORDER BY manager_id, last_name, salary;

MANAGER_ID LAST_NAME                     SALARY
---------- ------------------------- ----------
100 De Haan                        17000
100 Kochhar                        17000
101 Greenberg                      12008
101 Higgins                        12008
102 Hunold                          9000
103 Ernst                           6000
108 Faviet                          9000
114 Khoo                            3100
120 Nayer                           3200
120 Taylor                          3200
121 Sarchand                        4200
122 Chung                           3800
123 Bell                            4000
124 Rajs                            3500
145 Tucker                         10000
146 King                           10000
147 Vishney                        10500
148 Ozer                           11500
149 Abel                           11000
201 Fay                             6000
205 Gietz                           8300
King                           24000

22 rows selected.

MEDIAN

構文

関連項目:
構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

MEDIANは、連続分散モデルを想定する逆分散関数です。このファンクションは、数値または日時値を取り、その中央値、または値のソート後に中央値となる補間された値を戻します。計算では、NULLは無視されます。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。exprのみを指定した場合、このファンクションは、引数の数値データ型と同じデータ型を戻します。OVER句を指定した場合、Oracle Databaseは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。数値の優先順位の詳細は、「数値の優先順位」を参照してください。

MEDIANの結果の計算では、まず行が順序付けされます。グループ内の行数としてNが使用され、対象の行番号(RN)がRN = (1 + (0.5×(N-1))という式で計算されます。集計ファンクションの最終結果は、行番号がCRN = CEILING(RN)およびFRN = FLOOR(RN)の行の値間の直線補間によって計算されます。

最終結果は次のとおりです。

if (CRN = FRN = RN) then
(value of expression from row at RN)
else
(CRN - RN) * (value of expression for row at FRN) +
(RN - FRN) * (value of expression for row at CRN)

MEDIANは、分析ファンクションとして使用できます。その場合、OVER句には、query_partition_clauseのみを指定できます。各行に対して、各パーティション内の一連の値の中央値に該当する値が戻されます。

このファンクションと次のファンクションを比較してください。

- PERCENTILE_CONT: 指定したパーセンタイルに一致するように補間された値が戻されます。MEDIANは、パーセンタイル値がデフォルトで0.5に指定される特別なPERCENTILE_CONTです。

- PERCENTILE_DISC: 指定したパーセンタイルに一致する値を補間なしで検索する場合に役立ちます。

集計の例

次の問合せは、hr.employees表内の部門ごとに給与の中央値を戻します。

SELECT department_id, MEDIAN(salary)
FROM employees
GROUP BY department_id
ORDER BY department_id;

DEPARTMENT_ID MEDIAN(SALARY)
------------- --------------
10           4400
20           9500
30           2850
40           6500
50           3100
60           4800
70          10000
80           8900
90          17000
100           8000
110          10154
7000

分析の例

次の問合せは、hr.employees表内の部門のサブセットのマネージャごとに給与の中央値を戻します。

SELECT manager_id, employee_id, salary,
MEDIAN(salary) OVER (PARTITION BY manager_id) "Median by Mgr"
FROM employees
WHERE department_id > 60
ORDER BY manager_id, employee_id;

MANAGER_ID EMPLOYEE_ID     SALARY Median by Mgr
---------- ----------- ---------- -------------
100         101      17000         13500
100         102      17000         13500
100         145      14000         13500
100         146      13500         13500
100         147      12000         13500
100         148      11000         13500
100         149      10500         13500
101         108      12008         12008
101         204      10000         12008
101         205      12008         12008
108         109       9000          7800
108         110       8200          7800
108         111       7700          7800
108         112       7800          7800
108         113       6900          7800
145         150      10000          8500
145         151       9500          8500
145         152       9000          8500
. . .

MIN

構文

関連項目:
構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

MINは、exprの最小値を戻します。これは、集計ファンクションまたは分析ファンクションとして使用できます。

関連項目:
exprの書式の詳細は、「SQL式」を参照してください。2進浮動小数点の比較セマンティクスの詳細は、「浮動小数点数」を参照してください。「集計ファンクション」も参照してください。

集計の例

次の例では、hr.employees表の最初の雇用開始日を戻します。

SELECT MIN(hire_date) "Earliest"
FROM employees;

Earliest
---------
13-JAN-01

分析の例

次の例では、各従業員について、その従業員が雇用された日以前に雇用された従業員を検索します。その従業員と所属が同じ従業員のサブセットを決定し、そのサブセット内で一番低い給与を戻します。

SELECT manager_id, last_name, hire_date, salary,
MIN(salary) OVER(PARTITION BY manager_id ORDER BY hire_date
RANGE UNBOUNDED PRECEDING) AS p_cmin
FROM employees
ORDER BY manager_id, last_name, hire_date, salary;

MANAGER_ID LAST_NAME                 HIRE_DATE     SALARY     P_CMIN
---------- ------------------------- --------- ---------- ----------
100 Cambrault                 15-OCT-07      11000       6500
100 De Haan                   13-JAN-01      17000      17000
100 Errazuriz                 10-MAR-05      12000       7900
100 Fripp                     10-APR-05       8200       7900
100 Hartstein                 17-FEB-04      13000       7900
100 Kaufling                  01-MAY-03       7900       7900
100 Kochhar                   21-SEP-05      17000       7900
100 Mourgos                   16-NOV-07       5800       5800
100 Partners                  05-JAN-05      13500       7900
100 Raphaely                  07-DEC-02      11000      11000
100 Russell                   01-OCT-04      14000       7900

. . .

MOD

構文

用途

MODはn2をn1で割った余りを戻します。n1が0の場合は、n2を戻します。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。Oracleは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。数値の優先順位の詳細は、「数値の優先順位」を参照してください。

例

次の例では、11を4で割ったときの余りを戻します。

SELECT MOD(11,4) "Modulus"
FROM DUAL;

Modulus
----------
3

このファンクションは、mが負の場合には古典数学のモジュール・ファンクションとは異なる動作をします。古典数学のモジュール・ファンクションは、次の公式を使用したMODファンクションで表すことができます。

n2 - n1 * FLOOR(n2/n1)

次の表に、MODファンクションと古典数学のモジュール・ファンクションの相違を示します。

n2

n1

MOD(n2,n1)

古典数学のモジュール・ファンクション

11

4

3

3

11

-4

3

-1

-11

4

-3

1

-11

-4

-3

-3

関連項目:
「FLOOR」および「REMAINDER」を参照してください。REMAINDERはMODと似ていますが、FLOORではなくROUNDを式に使用します。

MONTHS_BETWEEN

構文

用途

MONTHS_BETWEENは、日付date1とdate2の間の月数を戻します。月および月の最終日は、パラメータNLS_CALENDARによって定義されます。date1がdate2より後の日付の場合、結果は正の値になります。date1がdate2より前の日付の場合、結果は負の値になります。date1およびdate2が、月の同じ日または月の最終日の場合、結果は常に整数になります。それ以外の場合、Oracle Databaseは結果の小数部を1か月31日として計算し、date1とdate2の差を割り出します。

例

次の例では、2つの日付間の月数を計算します。

SELECT MONTHS_BETWEEN
(TO_DATE('02-02-1995','MM-DD-YYYY'),
TO_DATE('01-01-1995','MM-DD-YYYY') ) "Months"
FROM DUAL;

Months
----------
1.03225806

NANVL

構文

用途

NANVLファンクションは、浮動小数点数のタイプがBINARY_FLOATまたはBINARY_DOUBLEの場合にのみ便利です。このファンクションは、入力値n2がNaN(非数値)の場合は代替値n1を戻すようにOracle Databaseに指示します。n2がNaNでない場合、Oracleはn2を戻します。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。Oracleは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。2進浮動小数点の比較セマンティクスの詳細は、「浮動小数点数」を参照してください。数値の優先順位の詳細は、「数値の優先順位」を参照してください。

例

「TO_BINARY_DOUBLE」で作成した表float_point_demoを使用して、表に2つ目のエントリを挿入します。

INSERT INTO float_point_demo
VALUES (0,'NaN','NaN');

SELECT *
FROM float_point_demo;

DEC_NUM BIN_DOUBLE  BIN_FLOAT
---------- ---------- ----------
1234.56 1.235E+003 1.235E+003
0        Nan        Nan

次の例では、数値の場合はbin_floatを戻します。それ以外の場合は、0が戻されます。

SELECT bin_float, NANVL(bin_float,0)
FROM float_point_demo;

BIN_FLOAT NANVL(BIN_FLOAT,0)
---------- ------------------
1.235E+003         1.235E+003
Nan                  0

NCHR

構文

用途

NCHRは、各国語キャラクタ・セットのnumberと同等のバイナリを持つ文字を戻します。戻り値は常にNVARCHAR2です。このファンクションは、CHRファンクションにUSING NCHAR_CS句を指定して使用した場合と同じ結果を戻します。

このファンクションは、引数として、NUMBER値、または暗黙的にNUMBER型に変換可能な任意の値を取り、文字を戻します。

関連項目:
「CHR」

例

次の例では、NCHAR文字187を戻します。

SELECT NCHR(187)
FROM DUAL;

N
-
>

SELECT CHR(187 USING NCHAR_CS)
FROM DUAL;

C
-
>

NEW_TIME

構文

用途

NEW_TIMEは、タイムゾーンtimezone1の日時がdateの時点のタイムゾーンtimezone2の日時を戻します。このファンクションを使用する前に、24時間で表示されるように、NLS_DATE_FORMATパラメータを設定する必要があります。戻り型は、dateのデータ型に関係なく常にDATEです。

注意:
このファンクションが入力として取ることのできるタイムゾーンの数には制限があります。FROM_TZ関数と日時式を組み合せるほうが、はるかに多数のタイム・ゾーンにアクセスできます。「FROM_TZ」および「日時式」の例を参照してください。

引数timezone1およびtimezone2には、次のテキスト文字列のいずれかを指定できます。

- AST、ADT: 大西洋標準時および大西洋夏時間

- BST、BDT: ベーリング標準時およびベーリング夏時間

- CST、CDT: 中央標準時および中央夏時間

- EST、EDT: 東部標準時および東部夏時間

- GMT: グリニッジ標準時

- HST、HDT: アラスカ-ハワイ標準時およびアラスカ-ハワイ夏時間。

- MST、MDT: 山岳部標準時および山岳部夏時間

- NST: ニューファンドランド標準時

- PST、PDT: 太平洋標準時および太平洋夏時間

- YST、YDT: ユーコン標準時およびユーコン夏時間

例

次の例では、指定された太平洋標準時と同等の大西洋標準時を戻します。

ALTER SESSION SET NLS_DATE_FORMAT = 'DD-MON-YYYY HH24:MI:SS';

SELECT NEW_TIME(TO_DATE('11-10-09 01:23:45', 'MM-DD-YY HH24:MI:SS'), 'AST', 'PST')
"New Date and Time"
FROM DUAL;

New Date and Time
--------------------
09-NOV-2009 21:23:45

NEXT_DAY

構文

用途

NEXT_DAYは、charで指定した曜日で、日付dateより後の最初の日付を戻します。戻り型は、dateのデータ型に関係なく常にDATEです。引数charは、セッションの日付言語での曜日である必要があります(フルネームでも省略形でも可)。必要最小限の文字数は、省略形の文字数です。有効な省略形の後に続けて文字が入力されていても、それらの文字は無視されます。戻り値は、引数dateと同じ時、分および秒のコンポーネントを持っています。

例

次の例では、2009年10月15日以降の最初の火曜日の日付を戻します。

SELECT NEXT_DAY('15-OCT-2009','TUESDAY') "NEXT DAY"
FROM DUAL;

NEXT DAY
--------------------
20-OCT-2009 00:00:00

NLS_CHARSET_DECL_LEN

構文

用途

NLS_CHARSET_DECL_LENは、NCHAR列の宣言の長さを(文字数で)戻します。byte_count引数は、列の幅です。char_set_id引数は、列のキャラクタ・セットIDです。

例

次の例では、マルチバイト・キャラクタ・セットを使用している場合に、列の幅が200バイトである文字の数を戻します。

SELECT NLS_CHARSET_DECL_LEN(200, nls_charset_id('ja16eucfixed'))
FROM DUAL;

NLS_CHARSET_DECL_LEN(200,NLS_CHARSET_ID('JA16EUCFIXED'))
--------------------------------------------------------
100

NLS_CHARSET_ID

構文

用途

NLS_CHARSET_IDは、キャラクタ・セット名stringに対応するキャラクタ・セットのID番号を戻します。引数stringは、実行時のVARCHAR2値です。string値'CHAR_CS'は、サーバーのデータベース・キャラクタ・セットのID番号を戻します。string値'NCHAR_CS'は、サーバーの各国語キャラクタ・セットのID番号を戻します。

無効なキャラクタ・セット名を指定すると、NULLが戻されます。

例

次の例では、キャラクタ・セットのIDを戻します。

SELECT NLS_CHARSET_ID('ja16euc')
FROM DUAL;

NLS_CHARSET_ID('JA16EUC')
-------------------------
830

関連項目:
キャラクタ・セットのリストについては、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

NLS_CHARSET_NAME

構文

用途

NLS_CHARSET_NAMEは、ID番号numberに対応するキャラクタ・セット名を戻します。キャラクタ・セット名は、データベース・キャラクタ・セットのVARCHAR2値として戻されます。

numberが有効なキャラクタ・セットIDとして認識されない場合は、このファンクションはNULLを戻します。

例

次の例では、キャラクタ・セットのID番号2に対応するキャラクタ・セットを戻します。

SELECT NLS_CHARSET_NAME(2)
FROM DUAL;

NLS_CH
------
WE8DEC

NLS_INITCAP

構文

用途

NLS_INITCAPは、各単語の最初の文字を大文字、残りの文字を小文字にしてcharを戻します。各単語は空白または英数字以外の文字で区切られます。

charおよび'nlsparam'は、CHAR、VARCHAR2、NCHARまたはNVARCHAR2データ型です。戻される文字列は、VARCHAR2データ型であり、charと同じキャラクタ・セットです。

'nlsparam'の値は次の書式で指定します。

'NLS_SORT = sort'

sortは、言語ソート基準またはBINARYのいずれかです。言語ソート基準は、大文字と小文字の変換のために特別な言語要件を処理します。これらの要件によって、charと異なる長さの値が戻される場合があります。'nlsparam'を省略すると、このファンクションはセッションに対してデフォルトのソート基準を使用します。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。

関連項目:
詳細は、「データ型の比較規則」を参照してください。

例

次に、ファンクションによって言語ソート基準がどのように異なる値を戻すかを示します。

SELECT NLS_INITCAP('ijsland') "InitCap"
FROM DUAL;

InitCap
-------
Ijsland

SELECT NLS_INITCAP('ijsland', 'NLS_SORT = XDutch') "InitCap"
FROM DUAL;

InitCap
-------
IJsland

関連項目:
ソート基準の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

NLS_LOWER

構文

用途

NLS_LOWERは、すべての文字を小文字にしてcharを戻します。

charおよび'nlsparam'は、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBデータ型です。戻される文字列は、charが文字データ型の場合はVARCHAR2データ型になり、charがLOBデータ型の場合はLOBになります。charと同じキャラクタ・セットの文字列が戻されます。

'nlsparam'の書式および用途は、NLS_INITCAPファンクションと同じです。

例

次の例では、XTurkish言語ソート順序を使用する文字列'NOKTASINDA'を小文字形式で戻します。トルコ語の大文字Iは、点のない小文字のiになります。

SELECT NLS_LOWER('NOKTASINDA', 'NLS_SORT = XTurkish') "Lowercase"
FROM DUAL;

NLS_UPPER

構文

用途

NLS_UPPERは、すべての文字を大文字にしてcharを戻します。

charおよび'nlsparam'は、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBデータ型です。戻される文字列は、charが文字データ型の場合はVARCHAR2データ型になり、charがLOBデータ型の場合はLOBになります。charと同じキャラクタ・セットの文字列が戻されます。

'nlsparam'の書式および用途は、NLS_INITCAPファンクションと同じです。

例

次の例では、すべての文字を大文字に変換して文字列を戻します。

SELECT NLS_UPPER('große') "Uppercase"
FROM DUAL;

Upper
-----
GROßE

SELECT NLS_UPPER('große', 'NLS_SORT = XGerman') "Uppercase"
FROM DUAL;

Upperc
------
GROSSE

関連項目:
「NLS_INITCAP」

NLSSORT

構文

用途

NLSSORTは、文字値charと明示的または暗黙的に指定された照合に対する照合キーを返します。照合キーは、指定された照合に従ってcharをソートするために使用されるバイト文字列です。照合キーのプロパティでは、特定の照合に対して生成された2つの照合キーをバイナリ順に従って比較したときのそれらのキーの相互順が、その特定の照合に従って比較したソース文字値の相互順と等しくなります。

charおよび'nlsparam'は、CHAR、VARCHAR2、NCHARまたはNVARCHAR2データ型です。

'nlsparam'の値は次の書式で指定する必要があります。

'NLS_SORT = collation'

collationは、言語照合の名前またはBINARYです。NLSSORTは、指定された照合を使用して照合キーを生成します。'nlsparam'を指定しないと、セッション・パラメータNLS_SORTで指定された、現行セッションのデフォルトの照合が使用されます。BINARYを指定すると、後述のようにRAWにキャストされて必要に応じて切り捨てられたchar値自体が返されます。

'nlsparam'を指定した場合、言語照合名に接尾辞_aiを追加してアクセント記号の有無を区別しない照合を行うか、または_ciを追加して大/小文字を区別しない照合を行うことができます。アクセント記号の有無および大/小文字を区別しないソートの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。ORDER BY問合せ句でアクセント記号の有無および大/小文字を区別しない照合を使用するとソート順が非決定的になるため、お薦めしません。

返される照合キーは、RAWデータ型です。特定の照合について特定のchar値から生成される照合キーの長さが、NLSSORTで返されるRAW値の最大長を超過することがあります。この場合、NLSSORTの動作は初期化パラメータMAX_STRING_SIZEの値に依存します。MAX_STRING_SIZE = EXTENDEDの場合、戻り値の最大長は32767バイトです。照合キーがこの制限を超えると、「ORA-12742: 照合キーを作成できません」エラーが発生してファンクションの実行が失敗します。入力文字列が短くても、その文字列に分解の比率が非常に高いUnicode文字が高い割合で含まれている場合には、このエラーが発生することがあります。

MAX_STRING_SIZE = STANDARDの場合、戻り値の最大長は2000バイトです。返される値がこの制限を超える場合、NLSSORTは、計算結果が最大長を超えないように、charの最長の接頭辞(先頭のサブストリング)についての照合キーを計算します。単一言語の照合(たとえばFRENCH)の場合、通常、接頭辞の長さは1000文字です。複数言語の照合(たとえばGENERIC_M)の場合、通常、接頭辞の長さは500文字です。Unicode照合アルゴリズム(UCA)に基づく照合(たとえばUCA0610_DUCET)の場合、通常、接頭辞の長さは285文字です。照合およびcharに含まれる文字によっては、正確な長さが短くなったり長くなる場合があります。

MAX_STRING_SIZE = STANDARDの場合の動作は、言語の順序付けを決定するためにその照合キー(NLSSORTの結果)が比較される2つの文字値が、正確な文字位置は異なっていても、接頭辞が同じである場合に、等しいとみなされることを意味します。NLSSORTファンクションは、比較条件、BETWEEN条件、IN条件、ORDER BY、GROUP BYおよびCOUNT(DISTINCT)での言語の順序付けを決定するために暗黙的に使用されるため、長い文字値に対しては、これらの操作でおよその結果のみが返される場合があります。これらの操作から確実に正確な結果を得るには、MAX_STRING_SIZE = EXTENDEDを使用するようにデータベースを移行します。

MAX_STRING_SIZE初期化パラメータの詳細は、「拡張データ型」を参照してください。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。

関連項目:
詳細は、「データ型の比較規則」を参照してください。

例

このファンクションを使用すると、文字列の2進値を基にしたソートおよび比較ではなく、言語ソート基準を基にしたソートおよび比較を指定できます。次の例では、2つの値を含むテスト表を作成し、戻される値がNLSSORTファンクションによってどのように順序付けられるかを示します。

CREATE TABLE test (name VARCHAR2(15));
INSERT INTO test VALUES ('Gaardiner');
INSERT INTO test VALUES ('Gaberd');
INSERT INTO test VALUES ('Gaasten');

SELECT *
FROM test
ORDER BY name;

NAME
---------------
Gaardiner
Gaasten
Gaberd

SELECT *
FROM test
ORDER BY NLSSORT(name, 'NLS_SORT = XDanish');

NAME
---------------
Gaberd
Gaardiner
Gaasten

次の例では、比較操作でのNLSSORTファンクションの使用方法を示します。

SELECT *
FROM test
WHERE name > 'Gaberd'
ORDER BY name;

no rows selected

SELECT *
FROM test
WHERE NLSSORT(name, 'NLS_SORT = XDanish') >
NLSSORT('Gaberd', 'NLS_SORT = XDanish')
ORDER BY name;

NAME
---------------
Gaardiner
Gaasten

同一の言語ソート基準を使用する比較操作で頻繁にNLSSORTを使用する場合、NLS_COMPパラメータ(データベース用か現行のセッション用のいずれか)にLINGUISTICを設定し、セッションのNLS_SORTパラメータに必要なソート基準を設定するとより効率的です。これによって、現行のセッション中のすべてのソート操作および比較操作において、デフォルトでそのソート基準が使用されるようになります。

ALTER SESSION SET NLS_COMP = 'LINGUISTIC';
ALTER SESSION SET NLS_SORT = 'XDanish';

SELECT *
FROM test
WHERE name > 'Gaberd'
ORDER BY name;

NAME
---------------
Gaardiner
Gaasten

関連項目:
ソート基準の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

NTH_VALUE

構文

関連項目:
analytic_clauseの構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

NTH_VALUEは、analytic_clauseに定義したウィンドウ内でn番目の行のmeasure_expr値を戻します。戻り値のデータ型はmeasure_exprです。

- {RESPECT | IGNORE} NULLSは、measure_exprのNULL値を計算に含めるか除外するかを指定します。デフォルトはRESPECT NULLSです。

- nは、n番目の行についてメジャー値を戻すことを示します。nに指定できるのは、定数、バインド変数、列、またはこれらを含む式です。ただし、式の場合は正の整数に解決される必要があります。データソース・ウィンドウに含まれる行がnより少ない場合は、NULLが戻されます。nがNULLの場合は、エラーが戻されます。

- FROM {FIRST | LAST}では、計算をウィンドウ内の最初の行から開始するか、または最後の行から開始するかを指定します。デフォルトはFROM FIRSTです。

analytic_clauseのwindowing_clauseを省略した場合、デフォルトでRANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROWになります。このデフォルトは、NTH_VALUE ... FROM LAST ... に対して予期しない値を返すことがあります。これは、ウィンドウの最後の値は、ウィンドウの終端になり、その終端が固定されていないためです。これは、現行の行が変化するに伴って変化します。正しい結果を得るには、windowing_clauseをRANGE BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWINGとして指定します。または、windowing_clauseをRANGE BETWEEN CURRENT ROW AND UNBOUNDED FOLLOWINGとして指定することもできます。

関連項目:
このファンクションの使用の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

例

次の例では、2番目のchannel_idに対するamount_soldの最小値を、prod_id13から16についてそれぞれ昇順で示します。

SELECT prod_id, channel_id, MIN(amount_sold),
NTH_VALUE(MIN(amount_sold), 2) OVER (PARTITION BY prod_id ORDER BY channel_id
ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) nv
FROM sales
WHERE prod_id BETWEEN 13 and 16
GROUP BY prod_id, channel_id;

PROD_ID CHANNEL_ID MIN(AMOUNT_SOLD)         NV
---------- ---------- ---------------- ----------
13          2           907.34      906.2
13          3            906.2      906.2
13          4           842.21      906.2
14          2          1015.94    1036.72
14          3          1036.72    1036.72
14          4           935.79    1036.72
15          2           871.19     871.19
15          3           871.19     871.19
15          4           871.19     871.19
16          2           266.84     266.84
16          3           266.84     266.84
16          4           266.84     266.84
16          9            11.99     266.84

13 rows selected.

NTILE

構文

関連項目:
構文、セマンティクス、制限事項、およびexprの書式の詳細は、「分析ファンクション」を参照してください。

用途

NTILEは分析ファンクションです。これは、順序付けられたデータセットをexprに指定した数のバケットに分割し、適切なバケット番号を各行に割り当てます。バケットには1からexprの番号が付けられます。expr値は、パーティションごとに、正の定数に変換される必要があります。Oracle Databaseではexprは整数とみなされるため、この値が整数ではない定数の場合は整数に切り捨てられます。戻り値はNUMBERです。

バケット内の行数は、最大で1異なります。残りの値(バケットで割った行数の余り)は、バケット1から順に、1行ずつ分割されます。

exprが行数より大きい場合、行数と等しい数のバケットに行が入れられ、余りのバケットは空になります。

exprには、NTILEまたは他の分析ファンクションを使用して分析ファンクションをネストできません。ただし、他の組込みファンクション式をexprで使用できます。

関連項目:
exprの書式の詳細は、「SQL式」を参照してください。暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

例

次の例では、部門100のoe.employees表のsalary列の値を4つのバケットに分割します。この部門のsalary列には6つの値が存在するため、2つの余分な値(6を4で割った余り)は、バケット1および2に割り当てられます。そのため、バケット1および2は、バケット3または4より値が1つ多くなります。

SELECT last_name, salary, NTILE(4) OVER (ORDER BY salary DESC) AS quartile
FROM employees
WHERE department_id = 100
ORDER BY last_name, salary, quartile;

LAST_NAME                     SALARY   QUARTILE
------------------------- ---------- ----------
Chen                            8200          2
Faviet                          9000          1
Greenberg                      12008          1
Popp                            6900          4
Sciarra                         7700          3
Urman                           7800          2

NULLIF

構文

用途

NULLIFは、expr1とexpr2を比較します。同じである場合は、NULLを戻します。異なる場合は、expr1を戻します。expr1には、リテラルNULLを指定できません。

両方の引数が数値データ型である場合、Oracle Databaseは、数値の優先順位が高い方の引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。2つの引数が数値ではない場合、それらのデータ型が同じである必要があります。データ型が異なる場合、Oracleはエラーを戻します。

NULLIFファンクションは、次のCASE式と論理的に同じです。

CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END

関連項目:
「CASE式」

例

次の例では、サンプル・スキーマhrから、雇用後に職種が変更した従業員を検索します。これは、employees表の現行のjob_idがjob_history表のjob_idと異なるかどうかによって識別されます。

SELECT e.last_name, NULLIF(j.job_id, e.job_id) "Old Job ID"
FROM employees e, job_history j
WHERE e.employee_id = j.employee_id
ORDER BY last_name, "Old Job ID";

LAST_NAME                 Old Job ID
------------------------- ----------
De Haan                   IT_PROG
Hartstein                 MK_REP
Kaufling                  ST_CLERK
Kochhar                   AC_ACCOUNT
Kochhar                   AC_MGR
Raphaely                  ST_CLERK
Taylor                    SA_MAN
Taylor
Whalen                    AC_ACCOUNT
Whalen

NUMTODSINTERVAL

構文

用途

NUMTODSINTERVALは、nをINTERVAL DAY TO SECONDリテラルに変換します。引数nには、任意のNUMBER値か、またはNUMBER値に暗黙的に変換可能な式を指定できます。引数interval_unitのデータ型は、CHAR、VARCHAR2、NCHARまたはNVARCHAR2です。interval_unitの値にはnの単位を指定します。この値は次の文字列値のいずれかである必要があります。

- 'DAY'

- 'HOUR'

- 'MINUTE'

- 'SECOND'

interval_unitでは、大/小文字は区別されません。カッコ内の前および後にある値は無視されます。デフォルトの場合、戻り値の精度は9です。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

例

次の例では、COUNT分析ファンクションにNUMTODSINTERVALを使用し、各従業員について、雇用開始日から過去100日以内に同じマネージャの部下として配属された従業員の人数を計算します。分析ファンクションの構文の詳細は、「分析ファンクション」を参照してください。

SELECT manager_id, last_name, hire_date,
COUNT(*) OVER (PARTITION BY manager_id ORDER BY hire_date
RANGE NUMTODSINTERVAL(100, 'day') PRECEDING) AS t_count
FROM employees
ORDER BY last_name, hire_date;

MANAGER_ID LAST_NAME                 HIRE_DATE    T_COUNT
---------- ------------------------- --------- ----------
149 Abel                      11-MAY-04          1
147 Ande                      24-MAR-08          3
121 Atkinson                  30-OCT-05          2
103 Austin                    25-JUN-05          1
. . .
124 Walsh                     24-APR-06          2
100 Weiss                     18-JUL-04          1
101 Whalen                    17-SEP-03          1
100 Zlotkey                   29-JAN-08          2

NUMTOYMINTERVAL

構文

用途

NUMTOYMINTERVALは、数値nをINTERVAL YEAR TO MONTHリテラルに変換します。引数nには、任意のNUMBER値か、またはNUMBER値に暗黙的に変換可能な式を指定できます。引数interval_unitのデータ型は、CHAR、VARCHAR2、NCHARまたはNVARCHAR2です。interval_unitの値にはnの単位を指定します。この値は次の文字列値のいずれかである必要があります。

- 'YEAR'

- 'MONTH'

interval_unitでは、大/小文字は区別されません。カッコ内の前および後にある値は無視されます。デフォルトの場合、戻り値の精度は9です。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

例

次の例では、SUM分析ファンクションにNUMTOYMINTERVALを使用し、各従業員について、その従業員の雇用日から過去1年の間に雇用された従業員の給与の合計を計算します。分析ファンクションの構文の詳細は、「分析ファンクション」を参照してください。

SELECT last_name, hire_date, salary,
SUM(salary) OVER (ORDER BY hire_date
RANGE NUMTOYMINTERVAL(1,'year') PRECEDING) AS t_sal
FROM employees
ORDER BY last_name, hire_date;

LAST_NAME                 HIRE_DATE     SALARY      T_SAL
------------------------- --------- ---------- ----------
Abel                      11-MAY-04      11000      90300
Ande                      24-MAR-08       6400     112500
Atkinson                  30-OCT-05       2800     177000
Austin                    25-JUN-05       4800     134700
. . .
Walsh                     24-APR-06       3100     186200
Weiss                     18-JUL-04       8000      70900
Whalen                    17-SEP-03       4400      54000
Zlotkey                   29-JAN-08      10500     119000

NVL

構文

用途

NVLを使用すると、NULL(空白として戻される)を文字列に置換して問合せの結果に含めることができます。expr1がnullの場合、NVLはexpr2を返します。expr1がnullでない場合、NVLはexpr1を返します。

引数expr1およびexpr2は、任意のデータ型を持つことができます。2つの引数のデータ型が異なる場合、一方のデータ型が他方のデータ型に暗黙的に変換されます。暗黙的に変換できない場合、データベースはエラーを戻します。この暗黙的な変換は次のように実装されます。

- expr1が文字データの場合、Oracle Databaseは2つの引数を比較する前にexpr2をexpr1のデータ型に変換し、expr1のキャラクタ・セットでVARCHAR2を戻します。

- expr1が数値である場合、Oracle Databaseは数値の優先順位が最も高い引数を判断し、その引数のデータ型に他方の引数を暗黙的に変換して、そのデータ型を戻します。

関連項目:

- 暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。数値の優先順位の詳細は、「数値の優先順位」を参照してください。

- 「COALESCE」および「CASE式」を参照してください。これらは、NVLと同様の機能を提供します。

例

次の例では、従業員の名前と歩合のリストを戻し、従業員が歩合を受け取らない場合には「Not Applicable」を表示します。

SELECT last_name, NVL(TO_CHAR(commission_pct), 'Not Applicable') commission
FROM employees
WHERE last_name LIKE 'B%'
ORDER BY last_name;

LAST_NAME                 COMMISSION
------------------------- ----------------------------------------
Baer                      Not Applicable
Baida                     Not Applicable
Banda                     .1
Bates                     .15
Bell                      Not Applicable
Bernstein                 .25
Bissot                    Not Applicable
Bloom                     .2
Bull                      Not Applicable

NVL2

構文

用途

NVL2を使用すると、指定された式がNULLかどうかに基づく問合せによって戻される値を判断できます。expr1がNULLでない場合、NVL2はexpr2を戻します。expr1がNULLの場合、NVL2はexpr3を戻します。

引数expr1は、任意のデータ型を持つことができます。引数expr2およびexpr3は、LONG以外の任意のデータ型を持つことができます。

expr2とexpr3のデータ型が異なる場合、一方のデータ型が他方のデータ型に暗黙的に変換されます。暗黙的に変換できない場合、データベースはエラーを戻します。expr2が文字または数値データの場合、暗黙的な変換は次のように実装されます。

- expr2が文字データの場合、Oracle Databaseは、expr3がNULLの定数ではないかぎり、値を戻す前にexpr3をexpr2のデータ型に変換します。その場合、データ型の変換は行われず、expr2のキャラクタ・セットでVARCHAR2が戻されます。

- expr2が数値データである場合、Oracle Databaseは数値の優先順位が最も高い引数を判断し、その引数のデータ型に他方の引数を暗黙的に変換して、そのデータ型を戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。数値の優先順位の詳細は、「数値の優先順位」を参照してください。

例

次の例では、employeesのcommission_pct列がNULLかどうかによって、従業員の収入が給与と歩合か、または給与のみかを示します。

SELECT last_name, salary,
NVL2(commission_pct, salary + (salary * commission_pct), salary) income
FROM employees
WHERE last_name like 'B%'
ORDER BY last_name;

LAST_NAME                     SALARY     INCOME
------------------------- ---------- ----------
Baer                           10000      10000
Baida                           2900       2900
Banda                           6200       6820
Bates                           7300       8395
Bell                            4000       4000
Bernstein                       9500      11875
Bissot                          3300       3300
Bloom                          10000      12000
Bull                            4100       4100

ORA_DST_AFFECTED

構文

用途

ORA_DST_AFFECTEDは、データベースのタイムゾーン・データファイルを変更するときに役立ちます。このファンクションは、引数として、TIMESTAMP WITH TIME ZONE値、またはTIMESTAMP WITH TIME ZONE値を含むVARRAYオブジェクトに解決される日時式を取ります。このファンクションは、新しいタイムゾーン・データを使用したときに、日時値が、存在しない時刻または重複時刻のエラーの影響を受けたり、いずれかのエラーになる場合は1を戻します。それ以外の場合は0を戻します。

このファンクションを発行できるのは、データベースのタイムゾーン・データファイルを変更してタイムゾーン・データ付きのタイムスタンプをアップグレードする場合のみです。さらに、DBMS_DST.BEGIN_PREPAREプロシージャを実行してからDBMS_DST.END_PREPAREプロシージャを実行するまでの間か、またはDBMS_DST.BEGIN_UPGRADEプロシージャを実行してからDBMS_DST.END_UPGRADEプロシージャを実行するまでの間にのみ発行できます。

関連項目:
タイムゾーン・データファイルの詳細およびOracle Databaseでの夏時間の処理方法は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。DBMS_DSTパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

ORA_DST_CONVERT

構文

用途

ORA_DST_CONVERTは、データベースのタイムゾーン・データファイルを変更するときに役立ちます。このファンクションでは、指定した日時式のエラー処理方法を指定できます。

- datetime_exprには、TIMESTAMP WITH TIME ZONE値、またはTIMESTAMP WITH TIME ZONE値を含むVARRAYオブジェクトに解決される日時式を指定します。

- オプションの2番目の引数には、重複時刻エラーの処理方法を指定します。元の日時値を戻し、エラーを発生させないようにする場合は、0(偽)を指定します。これはデフォルトです。重複時刻エラーを戻すようにする場合は、1(真)を指定します。

- オプションの3番目の引数には、存在しない時刻エラーの処理方法を指定します。元の日時値を戻し、エラーを発生させないようにする場合は、0(偽)を指定します。これはデフォルトです。存在しない時刻エラーを戻すようにする場合は、1(真)を指定します。

エラーが発生しない場合、このファンクションは、datetime_exprと同じデータ型の値(TIMESTAMP WITH TIME ZONE値、またはTIMESTAMP WITH TIME ZONE値を含むVARRAYオブジェクト)を戻します。新しいタイムゾーン・ファイルで解析された場合、戻される日時値は、古いタイムゾーン・ファイルで解析されたdatetime_exprに対応します。

このファンクションを発行できるのは、データベースのタイムゾーン・データファイルを変更してタイムゾーン・データ付きのタイムスタンプをアップグレードする場合のみです。さらに、DBMS_DST.BEGIN_UPGRADEプロシージャを実行してからDBMS_DST.END_UPGRADEプロシージャを実行するまでの間にのみ発行できます。

関連項目:
タイムゾーン・データファイルの詳細およびOracle Databaseでの夏時間の処理方法は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。DBMS_DSTパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

ORA_DST_ERROR

構文

用途

ORA_DST_ERRORは、データベースのタイムゾーン・データファイルを変更するときに役立ちます。このファンクションは、引数として、TIMESTAMP WITH TIME ZONE値、またはTIMESTAMP WITH TIME ZONE値を含むVARRAYオブジェクトに解決される日時式を取り、新しいタイムゾーン・データを使用したときに日時値がエラーになるかどうかを示します。戻り値は次のとおりです。

- 0: 新しいタイムゾーン・データを使用しても、日時値はエラーになりません。

- 1878: 日時値は存在しない時刻エラーになります。

- 1883: 日時値は重複時刻エラーになります。

このファンクションを発行できるのは、データベースのタイムゾーン・データファイルを変更してタイムゾーン・データ付きのタイムスタンプをアップグレードする場合のみです。さらに、DBMS_DST.BEGIN_PREPAREプロシージャを実行してからDBMS_DST.END_PREPAREプロシージャを実行するまでの間か、またはDBMS_DST.BEGIN_UPGRADEプロシージャを実行してからDBMS_DST.END_UPGRADEプロシージャを実行するまでの間にのみ発行できます。

関連項目:
タイムゾーン・データファイルの詳細およびOracle Databaseでの夏時間の処理方法は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。DBMS_DSTパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

ORA_HASH

構文

用途

ORA_HASHファンクションは、指定された式のハッシュ値を計算します。このファンクションは、データのサブセットの分析やランダム・サンプルの生成などの操作に役立ちます。

- expr引数には、Oracle Databaseでハッシュ値を計算するデータを指定します。exprに指定できるデータの長さに制限はありません。このデータは通常、列名です。exprは、LONG型またはLOB型にすることはできません。また、ネストした表型でない場合は、ユーザー定義オブジェクト型にすることはできません。ネストした表型のハッシュ値は、コレクション内の要素の順序に依存しません。その他のデータ型はすべて、exprでサポートされています。

- オプションのmax_bucket引数には、ハッシュ・ファンクションから戻される最大バケット値を指定します。0から4294967295の任意の値を指定できます。デフォルトは、4294967295です。

- オプションのseed_value引数を指定すると、同じデータ・セットに対して様々な結果を生成できます。Oracleは、ハッシュ・ファンクションをexprとseed_valueの組合せに適用します。0から4294967295の任意の値を指定できます。デフォルトは0です。

戻り値はNUMBERです。

例

次の例では、sh.sales表内の顧客IDと製品IDの各組合せに対してハッシュ値を作成し、そのハッシュ値を最大100個のバケットに分割して、最初のバケット(バケット0(ゼロ))でamount_sold値の合計を戻します。3つ目の引数(5)には、ハッシュ・ファンクションのシード値を指定しています。このシード値を変更すると、同じ問合せで異なるハッシュ結果を得ることができます。

SELECT SUM(amount_sold)
FROM sales
WHERE ORA_HASH(CONCAT(cust_id, prod_id), 99, 5) = 0;

SUM(AMOUNT_SOLD)
----------------
989431.14

ORA_INVOKING_USER

構文

用途

ORA_INVOKING_USERは、現在の文またはビューを起動したデータベース・ユーザーの名前を返します。このファンクションは、文で参照される中間ビューのBEQUEATHプロパティを考慮に入れます。このファンクションが定義者権限コンテキスト内で起動されたときには、その定義者権限オブジェクトの所有者名が返されます。このファンクションを起動したユーザーがReal Application Securityユーザーの場合は、ユーザーXS$NULLが返されます。

このファンクションは、VARCHAR2値を返します。

関連項目:

- CREATE VIEW文のBEQUEATH句

- ユーザーXS$NULLの詳細は、『Oracle Database 2日でセキュリティ・ガイド』を参照してください。

例

次の例では、文を起動したデータベース・ユーザーの名前が返されます。

SELECT ORA_INVOKING_USER FROM DUAL;

ORA_INVOKING_USERID

構文

用途

ORA_INVOKING_USERIDは、現在の文またはビューを起動したデータベース・ユーザーのIDを返します。このファンクションは、文で参照される中間ビューのBEQUEATHプロパティを考慮に入れます。

このファンクションは、NUMBER値を返します。

関連項目:

- 現在の文またはビューを起動したデータベース・ユーザーをOracle Databaseが判断する方法については、「ORA_INVOKING_USER」を参照してください。

- CREATE VIEW文のBEQUEATH句

例

次の例では、文を起動したデータベース・ユーザーのIDが返されます。

SELECT ORA_INVOKING_USERID FROM DUAL;

PATH

構文

用途

PATHは、UNDER_PATHおよびEQUALS_PATH条件でのみ使用される補助ファンクションです。PATHは、親条件で指定されたリソースへの相対パスを戻します。

correlation_integerはNUMBER型の任意の整数で、この補助ファンクションをその一次条件と関連付けるために使用します。1未満の値は1として扱われます。

関連項目:
「EQUALS_PATH条件」および「UNDER_PATH条件」を参照してください。

例

EQUALS_PATH条件およびUNDER_PATH条件でこの補助ファンクションを使用する例は、関連ファンクション「DEPTH」を参照してください。

PERCENT_RANK

集計の構文

percent_rank_aggregate::=

分析の構文

percent_rank_analytic::=

関連項目:
構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

PERCENT_RANKは、CUME_DIST(累積分布)ファンクションと似ています。PERCENT_RANKが戻す値の範囲は、0から1(0および1を含む)です。すべての集合の最初の行のPERCENT_RANKは0(ゼロ)になります。戻り値はNUMBERです。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

- 集計ファンクションとしてのPERCENT_RANKは、ファンクションの引数および対応するソート指定によって識別される不確定な行rを計算し、行rのランクから1を引いて、集計グループ内の行の数で割ります。不確定な行rをOracle Databaseが集計する行のグループに挿入するように計算します。
このファンクションの引数は、各集計グループ内の1つの不確定行を識別します。このため、すべての引数は、集計グループ内で定数式と評価される必要があります。定数引数式および集計のORDER BY句の式の位置は、一致します。このため、引数の数は同じであり、その型は互換性がある必要があります。

- 分析ファンクションとしてのPERCENT_RANKは、行rに対して、rのランクから1引いた数を評価される行数(問合せ結果セット全体またはパーティション)より1少ない数で割ります。

集計の例

次の例では、サンプル表hr.employeesから、給与が$15,500であり、歩合が5%である不確定な従業員のパーセント・ランクを計算します。

SELECT PERCENT_RANK(15000, .05) WITHIN GROUP
(ORDER BY salary, commission_pct) "Percent-Rank"
FROM employees;

Percent-Rank
------------
.971962617

分析の例

次の例では、従業員ごとに、部門内での給与のパーセント・ランクを計算します。

SELECT department_id, last_name, salary, PERCENT_RANK()
OVER (PARTITION BY department_id ORDER BY salary DESC) AS pr
FROM employees
ORDER BY pr, salary, last_name;

DEPARTMENT_ID LAST_NAME                     SALARY         PR
------------- ------------------------- ---------- ----------
10 Whalen                          4400          0
40 Mavris                          6500          0
Grant                           7000          0
. . .
80 Vishney                        10500 .181818182
80 Zlotkey                        10500 .181818182
30 Khoo                            3100         .2
. . .
50 Markle                          2200 .954545455
50 Philtanker                      2200 .954545455
50 Olson                           2100          1
. . .

PERCENTILE_CONT

構文

関連項目:
OVER句の構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

PERCENTILE_CONTは、連続分散モデルを想定する逆分散関数です。このファンクションは、パーセンタイル値およびソート指定を使用し、そのソート指定に従ってそのパーセンタイル値に該当する補間された値を戻します。計算では、NULLは無視されます。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

最初のexprは、パーセンタイル値であるため、0から1の数値で評価します。このexprは、各集計グループ内の定数である必要があります。ORDER BY句には、Oracleが補間を実行できる型である数値または日時値の単一式を指定します。

PERCENTILE_CONTの結果は、順序付けされた後の値間の直線補間によって計算されます。集計グループで、パーセンタイル値(P)および行数(N)を使用すると、ソート指定に従って行を順序付けた後の行数を計算できます。この行数(RN)は、計算式RN = (1+ (P*(N-1))に従って計算されます。集計ファンクションの最終結果は、行番号がCRN = CEILING(RN)およびFRN = FLOOR(RN)の行の値間の直線補間によって計算されます。

最終結果は次のとおりです。

If (CRN = FRN = RN) then the result is
(value of expression from row at RN)
Otherwise the result is
(CRN - RN) * (value of expression for row at FRN) +
(RN - FRN) * (value of expression for row at CRN)

PERCENTILE_CONTファンクションは、分析ファンクションとしても使用できます。その場合、OVER句には、query_partitioning_clauseのみを指定できます。各行に対して、各パーティション内の一連の値から、指定されたパーセンタイルに該当する値を戻します。

MEDIANファンクションは、パーセンタイル値がデフォルトで0.5に指定される特別なPERCENTILE_CONTです。詳細は、「MEDIAN」を参照してください。

集計の例

次の例では、各部門の給与の中央値を計算します。

SELECT department_id,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY salary DESC) "Median cont",
PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY salary DESC) "Median disc"
FROM employees
GROUP BY department_id
ORDER BY department_id;

DEPARTMENT_ID Median cont Median disc
------------- ----------- -----------
10        4400        4400
20        9500       13000
30        2850        2900
40        6500        6500
50        3100        3100
60        4800        4800
70       10000       10000
80        8900        9000
90       17000       17000
100        8000        8200
110       10154       12008
7000        7000

PERCENTILE_CONTおよびPERCENTILE_DISCは、異なる結果を戻す場合があります。PERCENTILE_CONTは、直線補間後の計算結果を戻します。PERCENTILE_DISCは、集計された一連の値から値のみを戻します。この例に示すように、パーセンタイル値が0.5の場合、PERCENTILE_CONTは、偶数の要素を持つグループの中間の2つの値の平均を戻します。それに対して、PERCENTILE_DISCは、中間の2つの値の最初の値を戻します。奇数の要素を持つ集計グループの場合は、どちらの関数も中間要素の値を戻します。

分析の例

次の例では、0.5のパーセンタイル(Percent_Rank)に対応する部門60の中央値は4800です。部門30の給与にパーセンタイル0.5がないため、2900(パーセンタイル0.4)から2800(パーセンタイル0.6)の範囲で2850に評価される中央値が補間される必要があります。

SELECT last_name, salary, department_id,
PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY salary DESC)
OVER (PARTITION BY department_id) "Percentile_Cont",
PERCENT_RANK()
OVER (PARTITION BY department_id ORDER BY salary DESC) "Percent_Rank"
FROM employees
WHERE department_id IN (30, 60)
ORDER BY last_name, salary, department_id;

LAST_NAME                     SALARY DEPARTMENT_ID Percentile_Cont Percent_Rank
------------------------- ---------- ------------- --------------- ------------
Austin                          4800            60            4800           .5
Baida                           2900            30            2850           .4
Colmenares                      2500            30            2850            1
Ernst                           6000            60            4800          .25
Himuro                          2600            30            2850           .8
Hunold                          9000            60            4800            0
Khoo                            3100            30            2850           .2
Lorentz                         4200            60            4800            1
Pataballa                       4800            60            4800           .5
Raphaely                       11000            30            2850            0
Tobias                          2800            30            2850           .6

PERCENTILE_DISC

構文

関連項目:
OVER句の構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

PERCENTILE_DISCは、不連続分散モデルを想定する逆分散関数です。このファンクションでは、パーセンタイル値およびソート指定を指定し、そのセットから要素を戻します。計算では、NULLは無視されます。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を返します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

最初のexprは、パーセンタイル値であるため、0から1の数値で評価します。この式は、各集計グループ内の定数である必要があります。ORDER BY句には、ソート可能な型の単一式を指定します。

指定されたパーセンタイル値Pに対して、PERCENTILE_DISCは、ORDER BY句の式の値をソートし、P以上である(同じソート指定に従う)最小CUME_DIST値を持つ値を戻します。

集計の例

「PERCENTILE_CONT」の集計の例を参照してください。

分析の例

次の例では、サンプル表hr.employeesの各従業員の給与の中央値不連続パーセンタイルを計算します。

SELECT last_name, salary, department_id,
PERCENTILE_DISC(0.5) WITHIN GROUP (ORDER BY salary DESC)
OVER (PARTITION BY department_id) "Percentile_Disc",
CUME_DIST() OVER (PARTITION BY department_id
ORDER BY salary DESC) "Cume_Dist"
FROM employees
WHERE department_id in (30, 60)
ORDER BY last_name, salary, department_id;

LAST_NAME                     SALARY DEPARTMENT_ID Percentile_Disc  Cume_Dist
------------------------- ---------- ------------- --------------- ----------
Austin                          4800            60            4800         .8
Baida                           2900            30            2900         .5
Colmenares                      2500            30            2900          1
Ernst                           6000            60            4800         .4
Himuro                          2600            30            2900 .833333333
Hunold                          9000            60            4800         .2
Khoo                            3100            30            2900 .333333333
Lorentz                         4200            60            4800          1
Pataballa                       4800            60            4800         .8
Raphaely                       11000            30            2900 .166666667
Tobias                          2800            30            2900 .666666667

部門30の中央値の値は2900です。この値の対応するパーセンタイル(Cume_Dist)は、0.5以上の最小値です。部門60の中央値の値は4800です。この値の対応するパーセンタイルは、0.5以上の最小値です。

「POWER」

構文

用途

POWERは、n2をn1乗した値を戻します。底n2および指数n1は任意の数です。ただし、n2が負の場合、n1は整数である必要があります。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。いずれかの引数がBINARY_FLOATまたはBINARY_DOUBLEの場合、このファンクションはBINARY_DOUBLEを戻します。それ以外の場合、NUMBERを戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

例

次の例では、3の2乗を戻します。

SELECT POWER(3,2) "Raised"
FROM DUAL;

Raised
----------
9

POWERMULTISET

構文

用途

POWERMULTISETは、入力としてネストした表を取り、入力されたネストした表のすべての空でないサブセットを含む、ネストした表のネストした表(サブ多重集合という)を戻します。

- exprには、ネストした表に評価される任意の式を指定できます。

- exprがNULLである場合、Oracle DatabaseはNULLを戻します。

- exprが空のネストした表である場合、Oracleはエラーを戻します。

- ネストした表の要素の型は、比較可能な型である必要があります。スカラー型以外の型の比較の可能性は、「比較条件」を参照してください。

注意:
このファンクションは、PL/SQLではサポートされていません。

例

まず、cust_address_tab_typeデータ型のネストした表であるデータ型を作成します。

CREATE TYPE cust_address_tab_tab_typ
AS TABLE OF cust_address_tab_typ;
/

次に、POWERMULTISETファンクションを使用して、customers_demo表から、ネストした表の列cust_address_ntabを選択します。

SELECT CAST(POWERMULTISET(cust_address_ntab) AS cust_address_tab_tab_typ)
FROM customers_demo;

CAST(POWERMULTISET(CUST_ADDRESS_NTAB) AS CUST_ADDRESS_TAB_TAB_TYP)
(STREET_ADDRESS, POSTAL_CODE, CITY, STATE_PROVINCE, COUNTRY_ID)
------------------------------------------------------------------
CUST_ADDRESS_TAB_TAB_TYP(CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP
('514 W Superior St', '46901', 'Kokomo', 'IN', 'US')))
CUST_ADDRESS_TAB_TAB_TYP(CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP
('2515 Bloyd Ave', '46218', 'Indianapolis', 'IN', 'US')))
CUST_ADDRESS_TAB_TAB_TYP(CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP
('8768 N State Rd 37', '47404', 'Bloomington', 'IN', 'US')))
CUST_ADDRESS_TAB_TAB_TYP(CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP
('6445 Bay Harbor Ln', '46254', 'Indianapolis', 'IN', 'US')))
. . .

前述の例では、customers_demo表、およびデータを含むネストした表の列が必要です。この表およびネストした表の列を作成する方法については、「MULTISET演算子」を参照してください。

POWERMULTISET_BY_CARDINALITY

構文

用途

POWERMULTISET_BY_CARDINALITYは、入力としてネストした表およびカーディナリティを取り、指定されたカーディナリティを持つネストした表のすべての空でないサブセットを含む、ネストした表のネストした表(サブ多重集合という)を戻します。

- exprには、ネストした表に評価される任意の式を指定できます。

- cardinalityには、任意の正の整数を指定できます。

- exprがNULLである場合、Oracle DatabaseはNULLを戻します。

- exprが空のネストした表である場合、Oracleはエラーを戻します。

- ネストした表の要素の型は、比較可能な型である必要があります。スカラー型以外の型の比較の可能性は、「比較条件」を参照してください。

注意:
このファンクションは、PL/SQLではサポートされていません。

例

まず、cust_address_tab_typeデータ型のネストした表であるデータ型を作成します。

CREATE TYPE cust_address_tab_tab_typ
AS TABLE OF cust_address_tab_typ;
/

次に、ネストした表のすべての行内の要素を複製し、ネストした表の行のカーディナリティを2に増やします。

UPDATE customers_demo
SET cust_address_ntab = cust_address_ntab MULTISET UNION cust_address_ntab;

次に、POWERMULTISET_BY_CARDINALITYファンクションを使用して、customers_demo表から、ネストした表の列cust_address_ntabを選択します。

SELECT CAST(POWERMULTISET_BY_CARDINALITY(cust_address_ntab, 2)
AS cust_address_tab_tab_typ)
FROM customers_demo;

CAST(POWERMULTISET_BY_CARDINALITY(CUST_ADDRESS_NTAB,2) AS CUST_ADDRESS_TAB_TAB_TYP)
(STREET_ADDRESS, POSTAL_CODE, CITY, STATE_PROVINCE, COUNTRY_ID)
----------------------------------------------------------------------------------------
CUST_ADDRESS_TAB_TAB_TYP(CUST_ADDRESS_TAB_TYP
(CUST_ADDRESS_TYP('514 W Superior St', '46901', 'Kokomo', 'IN', 'US'),
CUST_ADDRESS_TYP('514 W Superior St', '46901', 'Kokomo', 'IN', 'US')))
CUST_ADDRESS_TAB_TAB_TYP(CUST_ADDRESS_TAB_TYP
(CUST_ADDRESS_TYP('2515 Bloyd Ave', '46218', 'Indianapolis', 'IN', 'US'),
CUST_ADDRESS_TYP('2515 Bloyd Ave', '46218', 'Indianapolis', 'IN', 'US')))
CUST_ADDRESS_TAB_TAB_TYP(CUST_ADDRESS_TAB_TYP
(CUST_ADDRESS_TYP('8768 N State Rd 37', '47404', 'Bloomington', 'IN', 'US'),
CUST_ADDRESS_TYP('8768 N State Rd 37', '47404', 'Bloomington', 'IN', 'US')))
. . .

前述の例では、customers_demo表、およびデータを含むネストした表の列が必要です。この表およびネストした表の列を作成する方法については、「MULTISET演算子」を参照してください。

PREDICTION

構文

prediction::=

分析の構文

prediction_analytic::=

cost_matrix_clause::=

mining_attribute_clause::=

mining_analytic_clause::=

関連項目:
mining_analytic_clauseの構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

PREDICTIONは、選択内に含まれる各行の予測を返します。返される予測のデータ型は、ファンクションが回帰、分類、異常検出のいずれを実行するかによって異なります。

- 回帰 — 各行の予測されるターゲット値を返します。戻り値のデータ型は、ターゲットのデータ型になります。

- 分類 — 各行の最も確率の高いターゲット・クラス(または、コストが指定された場合は最もコストの低いターゲット・クラス)を返します。戻り値のデータ型は、ターゲットのデータ型になります。

- 異常検出 — 各行について1または0を返します。通常の行は1に分類されます。残りのデータと著しく異なる行は0に分類されます。

cost_matrix_clause

コストは、最も悪影響を及ぼす誤分類を最小化するためのバイアス係数です。分類または異常検出には、cost_matrix_clauseを指定できます。コストは、回帰には適していません。cost_matrix_clauseは、「PREDICTION_COST」で説明されているように動作します。

構文の選択

PREDICTIONは、2つの方法のどちらかでデータにスコアを付けます。1つの方法では、データにマイニング・モデル・オブジェクトを適用します。もう1つの方法では、1つ以上の一時マイニング・モデルを作成して適用する分析句を実行して動的にデータにスコアを付けます。構文または分析構文を選択します。

- 構文 — 事前に定義されたモデルでデータにスコアを付ける場合は、最初の構文を使用します。分類、回帰、または異常検出を実行するモデルの名前を指定します。

- 分析構文 — 事前定義されたモデルなしで、データにスコアを付ける場合は、分析構文を使用します。分析構文は、mining_analytic_clauseを使用します。これは、複数のモデル構築のためにデータをパーティション化する必要がある場合に指定します。mining_analytic_clauseは、query_partition_clauseとorder_by_clauseをサポートします。("analytic_clause::="を参照。)

- 回帰の場合は、FOR exprを指定します。exprは、数値データ型のターゲット列を特定する式です。

- 分類の場合は、FOR exprを指定します。exprは、文字データ型のターゲット列を特定する式です。

- 異常検出の場合は、キーワードOF ANOMALYを指定します。

mining_attribute_clause

mining_attribute_clauseは、スコアの予測子として使用する列の属性を特定します。

- USING *を指定すると、入力行に存在するすべての関連属性が使用されます。

- このファンクションを解析構文で起動すると、一時モデルの作成とスコアリングの両方にmining_attribute_clauseが使用されます。

- 事前に定義されたモデルを指定してこのファンクションを起動するときには、そのモデルの作成に使用したすべて(または一部)の属性をmining_attribute_clauseに含める必要があります。次の条件が適用されます。

- mining_attribute_clauseに含まれている属性がモデルの作成に使用した属性と同じ名前でデータ型が異なる場合、そのデータ型はモデルが期待するデータ型に変換されます。

- モデルの作成に使用した属性よりも多くの属性をスコアリングに指定すると、余分な属性は無視されます(エラーや警告は表示されません)。

- モデルの作成に使用した属性よりも少ない属性を指定すると、最善の方法でスコアリングが実行されます。

関連項目:

- スコアリングの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

- 予測データ・マイニングの詳細は、『Oracle Data Mining概要』を参照してください。

例について:
次に示す例は、Data Miningのサンプル・プログラムからの抜粋です。サンプル・プログラムの詳細は、Oracle Data Miningユーザーズ・ガイドの「付録A」を参照してください。

例

この例では、提携カードを使用することが最も多い顧客の性別と年齢を、モデルdt_sh_clas_sampleで予測します(ターゲット=1)。PREDICTIONファンクションは、コスト・マトリックスを考慮に入れ、婚姻区分、学歴、および世帯人数を予測子として使用します。

SELECT cust_gender, COUNT(*) AS cnt, ROUND(AVG(age)) AS avg_age
FROM mining_data_apply_v
WHERE PREDICTION(dt_sh_clas_sample COST MODEL
USING cust_marital_status, education, household_size) = 1
GROUP BY cust_gender
ORDER BY cust_gender;

CUST_GENDER         CNT    AVG_AGE
------------ ---------- ----------
F                   170         38
M                   685         42

モデルdt_sh_clas_sampleに関連付けられたコスト・マトリックスは、表dt_sh_sample_costsに保存されます。次のコスト・マトリックス表では、1に誤分類すると0に誤分類するよりも8倍コストがかかることを示しています。

SQL> select * from dt_sh_sample_cost;

ACTUAL_TARGET_VALUE PREDICTED_TARGET_VALUE         COST
------------------- ---------------------- ------------
0                      0   .000000000
0                      1  1.000000000
1                      0  8.000000000
1                      1   .000000000

分析の例

この例では、動的回帰を使用して、提携カードを使用する可能性がある顧客の年齢を予測します。この問合せは、予測された年齢が実際とは最も異なる3件の顧客を返します。この問合せには、予測に最も影響する予測子の情報が含まれています。

SELECT cust_id, age, pred_age, age-pred_age age_diff, pred_det FROM
(SELECT cust_id, age, pred_age, pred_det,
RANK() OVER (ORDER BY ABS(age-pred_age) desc) rnk FROM
(SELECT cust_id, age,
PREDICTION(FOR age USING *) OVER () pred_age,
PREDICTION_DETAILS(FOR age ABS USING *) OVER () pred_det
FROM mining_data_apply_v))
WHERE rnk <= 3;

CUST_ID  AGE PRED_AGE AGE_DIFF PRED_DET
------- ---- -------- -------- -------- ----------------------------------------------------------
100910   80    40.67    39.33 <Details algorithm="Support Vector Machines">
<Attribute name="HOME_THEATER_PACKAGE" actualValue="1" weight=".059"
rank="1"/>
<Attribute name="Y_BOX_GAMES" actualValue="0" weight=".059"
rank="2"/>
<Attribute name="AFFINITY_CARD" actualValue="0" weight=".059"
rank="3"/>
<Attribute name="FLAT_PANEL_MONITOR" actualValue="1" weight=".059"
rank="4"/>
<Attribute name="YRS_RESIDENCE" actualValue="4" weight=".059"
rank="5"/>
</Details>

101285    79   42.18    36.82 <Details algorithm="Support Vector Machines">
<Attribute name="HOME_THEATER_PACKAGE" actualValue="1" weight=".059"
rank="1"/>
<Attribute name="HOUSEHOLD_SIZE" actualValue="2" weight=".059"
rank="2"/>
<Attribute name="CUST_MARITAL_STATUS" actualValue="Mabsent"
weight=".059" rank="3"/>
<Attribute name="Y_BOX_GAMES" actualValue="0" weight=".059"
rank="4"/>
<Attribute name="OCCUPATION" actualValue="Prof." weight=".059"
rank="5"/>
</Details>

100694     77  41.04    35.96 <Details algorithm="Support Vector Machines">
<Attribute name="HOME_THEATER_PACKAGE" actualValue="1" weight=".059"
rank="1"/>
<Attribute name="EDUCATION" actualValue="&lt; Bach." weight=".059"
rank="2"/>
<Attribute name="Y_BOX_GAMES" actualValue="0" weight=".059"
rank="3"/>
<Attribute name="CUST_ID" actualValue="100694" weight=".059"
rank="4"/>
<Attribute name="COUNTRY_NAME" actualValue="United States of
America" weight=".059" rank="5"/>
</Details>

PREDICTION_BOUNDS

構文

mining_attribute_clause::=

用途

PREDICTION_BOUNDSは、一般化線形モデル(GLM)を適用して、選択内に含まれる各行のクラスまたは値を予測します。この関数は、オブジェクトのVARRAYに含まれる各予測の上限と下限を、それぞれUPPERフィールドとLOWERフィールドに返します。

GLMは、回帰または2項分類を実行できます。

- 回帰の上限と下限は、予測されたターゲット値を参照します。UPPERとLOWERのデータ型は、ターゲットのデータ型になります。

- 2項分類での上限と下限は、予測されたターゲット・クラスまたは指定されたclass_valueの確率を参照します。UPPERとLOWERのデータ型は、BINARY_DOUBLEです。

リッジ回帰を使用してモデルが構築された場合や、構築中に共分散マトリックスの異常が検出された場合、PREDICTION_BOUNDSは上限と下限の両方についてNULLを返します。

confidence_levelは、(0,1)の範囲内の数値です。デフォルト値は0.95です。confidence_levelにNULLを指定すると、デフォルトでconfidence_levelを残したままclass_valueを指定できます。

mining_attribute_clause

mining_attribute_clauseは、スコアの予測子として使用する列の属性を特定します。この句は、PREDICTIONファンクションの場合と同様に動作します。(分析構文への参照は適用されません。)"mining_attribute_clause::="を参照してください。

関連項目:

- スコアリングの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

- 一般化線形モデルの詳細は、『Oracle Data Mining概要』を参照してください。

例について:
次に示す例は、Data Miningのサンプル・プログラムからの抜粋です。サンプル・プログラムの詳細は、Oracle Data Miningユーザーズ・ガイドの「付録A」を参照してください。

例

次の例では、98%の確度で年齢が25才から45才と予測される顧客の分布を返します。

SELECT count(cust_id) cust_count, cust_marital_status
FROM (SELECT cust_id, cust_marital_status
FROM mining_data_apply_v
WHERE PREDICTION_BOUNDS(glmr_sh_regr_sample,0.98 USING *).LOWER > 24 AND
PREDICTION_BOUNDS(glmr_sh_regr_sample,0.98 USING *).UPPER < 46)
GROUP BY cust_marital_status;

CUST_COUNT CUST_MARITAL_STATUS
-------------- --------------------
46 NeverM
7 Mabsent
5 Separ.
35 Divorc.
72 Married

PREDICTION_COST

構文

prediction_cost::=

分析の構文

prediction_cost_analytic::=

cost_matrix_clause::=

mining_attribute_clause::=

mining_analytic_clause::=

関連項目:
mining_analytic_clauseの構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

PREDICTION_COSTは、選択内に含まれる各行のコストを返します。コストは、最もコストが低いクラスまたは指定されたclassを参照します。コストは、BINARY_DOUBLEとして返されます。

PREDICTION_COSTでは、分類または異常検出を実行できます。分類の場合、返されるコストは予測されたターゲット・クラスを参照します。異常検出の場合、返されるコストは分類1(通常の行)または0(異常な行)を参照します。

PREDICTION_COSTとPREDICTIONファンクションを組み合せて使用すると、予測とその予測のコストを取得できます。

cost_matrix_clause

コストは、最も悪影響を及ぼす誤分類を最小化するためのバイアス係数です。たとえば、偽陽性は、偽陰性よりもコストが高いとみなされることがあります。コストは、モデルに関連付けられるコスト・マトリックスで指定するか、VALUES句にインラインで定義します。すべての分類アルゴリズムは、スコアリングに影響するようにコストを使用できます。

コストを使用してモデルの作成に影響を与えられるアルゴリズムは、ディシジョン・ツリーのみです。ディシジョン・ツリー・モデルの作成に使用したコスト・マトリックスは、そのモデルに対するデフォルトのスコアリング・マトリックスにもなります。

次のコスト・マトリックス表では、1に誤分類すると、0に誤分類するよりもコストが5倍かかることを示しています。

ACTUAL_TARGET_VALUE PREDICTED_TARGET_VALUE       COST
------------------- ---------------------- ----------
0                      0          0
0                      1          1
1                      0          5
1                      1          0

cost_matrix_clauseの指定内容は、次のとおりです。

- COST MODELは、モデルに関連付けられたコスト・マトリックスを考慮して、スコアリングする必要があることを示します。コスト・マトリックスが存在しない場合、このファンクションはエラーを返します。

- COST MODEL AUTOは、コスト・マトリックスが存在するかどうか不明なことを示します。コスト・マトリックスが存在する場合、このファンクションはコスト・マトリックスを使用して、コストが最小の予測を返します。それ以外の場合、このファンクションは、最も高確率の予測を返します。

- VALUES句では、class_valueにインラインのコスト・マトリックスを指定します。たとえば、1に誤分類すると、0に誤分類するよりも5倍コストがかかることを、次のように指定できます。

PREDICTION (nb_model COST (0,1) VALUES ((0, 1),(1, 5)) USING *)

スコアリングのコスト・マトリックスがあるモデルを起動するときに、インラインのコスト・マトリックスを指定すると、インラインのコスト・マトリックスが使用されます。

関連項目:
コスト考慮型予測の詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

構文の選択

PREDICTION_COSTは、2つの方法のどちらかでデータにスコアを付けます。1つの方法では、データにマイニング・モデル・オブジェクトを適用します。もう1つの方法では、1つ以上の一時マイニング・モデルを作成して適用する分析句を実行して動的にデータをマイニングします。構文または分析構文を選択します。

- 構文 — 事前に定義されたモデルでデータにスコアを付ける場合は、最初の構文を使用します。分類または異常検出を実行するモデルの名前を指定します。

- 分析構文 — 事前定義されたモデルなしで、データにスコアを付ける場合は、分析構文を使用します。分析構文は、mining_analytic_clauseを使用します。これは、複数のモデル構築のためにデータをパーティション化する必要がある場合に指定します。mining_analytic_clauseは、query_partition_clauseとorder_by_clauseをサポートします。("analytic_clause::="を参照。)

- 分類の場合は、FOR exprを指定します。exprは、文字データ型のターゲット列を特定する式です。

- 異常検出の場合は、キーワードOF ANOMALYを指定します。

mining_attribute_clause

mining_attribute_clauseは、スコアの予測子として使用する列の属性を特定します。このファンクションが分析構文で起動された場合は、これらの予測子が一時モデルの構築にも使用されます。mining_attribute_clauseは、PREDICTIONファンクションと同様に動作します。("mining_attribute_clause::="を参照。)

関連項目:

- スコアリングの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

- コストによる分類については、『Oracle Data Mining概要』を参照してください。

例について:
次に示す例は、Data Miningのサンプル・プログラムからの抜粋です。サンプル・プログラムの詳細は、Oracle Data Miningユーザーズ・ガイドの「付録A」を参照してください。

例

この例では、最もコストの低い販売キャンペーン(提携カードの売込み)に反応する可能性があるイタリア在住の顧客を10人予測します。

SELECT cust_id
FROM (SELECT cust_id,rank()
OVER (ORDER BY PREDICTION_COST(DT_SH_Clas_sample, 1 COST MODEL USING *)
ASC, cust_id) rnk
FROM mining_data_apply_v
WHERE country_name = 'Italy')
WHERE rnk <= 10
ORDER BY rnk;

CUST_ID
----------
100081
100179
100185
100324
100344
100554
100662
100733
101250
101306

PREDICTION_DETAILS

構文

prediction_details::=

分析の構文

prediction_details_analytic::=

mining_attribute_clause::=

mining_analytic_clause::=

関連項目:
mining_analytic_clauseの構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

PREDICTION_DETAILSは、選択内に含まれる各行の予測の詳細を返します。戻り値は、予測の属性について記述したXML文字列です。

回帰の場合、返される詳細は予測されたターゲット値を参照します。分類と異常検出の場合、返される詳細は最も高確率のクラスまたは指定されたclass_valueを参照します。

topN

topNに値を指定すると、このファンクションは予測に最も影響力のあるN個の属性(スコア)を返します。topNを指定しないと、このファンクションは最も影響力のある5つの属性を返します。

DESC、ASC、またはABS

返される属性が重みで順序付けされます。属性の重みは、予測に対する正の影響または負の影響を表します。回帰の場合、正の重みは予測される値が大きくなることを示し、負の重みは予測される値が小さくなることを示します。分類と異常検出の場合、正の重みは予測の確率が高くなることを示し、負の重みは予測の確率が低くなることを示します。

デフォルトでは、PREDICTION_DETAILSは、最大の正の重みを持つ属性を返します(DESC)。ASCを指定すると、最大の負の重みを持つ属性が返されます。ABSを指定すると、正負を問わずに、最大の重みを持つ属性が返されます。結果は、絶対値が高いほうから低いほうに順序付けされています。重みがゼロの属性は、出力に含まれません。

構文の選択

PREDICTION_DETAILSは、2つの方法のどちらかでデータにスコアを付けます。1つの方法では、データにマイニング・モデル・オブジェクトを適用します。もう1つの方法では、1つ以上の一時マイニング・モデルを作成して適用する分析句を実行して動的にデータをマイニングします。構文または分析構文を選択します。

- 構文 — 事前に定義されたモデルでデータにスコアを付ける場合は、最初の構文を使用します。分類、回帰、または異常検出を実行するモデルの名前を指定します。

- 分析構文 — 事前定義されたモデルなしで、データにスコアを付ける場合は、分析構文を使用します。分析構文は、mining_analytic_clauseを使用します。これは、複数のモデル構築のためにデータをパーティション化する必要がある場合に指定します。mining_analytic_clauseは、query_partition_clauseとorder_by_clauseをサポートします。("analytic_clause::="を参照。)

- 分類の場合は、FOR exprを指定します。exprは、文字データ型のターゲット列を特定する式です。

- 回帰の場合は、FOR exprを指定します。exprは、数値データ型のターゲット列を特定する式です。

- 異常検出の場合は、キーワードOF ANOMALYを指定します。

mining_attribute_clause

mining_attribute_clauseは、スコアの予測子として使用する列の属性を特定します。このファンクションが分析構文で起動された場合は、これらの予測子が一時モデルの構築にも使用されます。mining_attribute_clauseは、PREDICTIONファンクションと同様に動作します。("mining_attribute_clause::="を参照。)

関連項目:

- スコアリングの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

- 予測データ・マイニングの詳細は、『Oracle Data Mining概要』を参照してください。

例について:
次に示す例は、Data Miningのサンプル・プログラムからの抜粋です。サンプル・プログラムの詳細は、Oracle Data Miningユーザーズ・ガイドの「付録A」を参照してください。

例

この例では、モデルsvmr_sh_regr_sampleを使用して、データにスコアを付けます。この問合せは、顧客の年齢の予測値が高くなるのに最も影響力がある3つの属性を返します。

SELECT PREDICTION_DETAILS(svmr_sh_regr_sample, null, 3 USING *) prediction_details
FROM mining_data_apply_v
WHERE cust_id = 100001;

PREDICTION_DETAILS
---------------------------------------------------------------------------------------
<Details algorithm="Support Vector Machines">
<Attribute name="CUST_MARITAL_STATUS" actualValue="Widowed" weight=".361" rank="1"/>
<Attribute name="CUST_GENDER" actualValue="F" weight=".14" rank="2"/>
<Attribute name="HOME_THEATER_PACKAGE" actualValue="1" weight=".135" rank="3"/>
</Details>

分析の構文

この例は、標準的ではない年齢の顧客を動的に特定します。この問合せは、予測される年齢や標準から逸脱した年齢の属性を返します。

SELECT cust_id, age, pred_age, age-pred_age age_diff, pred_det
FROM (SELECT cust_id, age, pred_age, pred_det,
RANK() OVER (ORDER BY ABS(age-pred_age) DESC) rnk
FROM (SELECT cust_id, age,
PREDICTION(FOR age USING *) OVER () pred_age,
PREDICTION_DETAILS(FOR age ABS USING *) OVER () pred_det
FROM mining_data_apply_v))
WHERE rnk <= 5;

CUST_ID AGE PRED_AGE AGE_DIFF  PRED_DET
------- --- -------- -------- ------------------------------------------------------------------
100910  80    40.67    39.33 <Details algorithm="Support Vector Machines">
<Attribute name="HOME_THEATER_PACKAGE" actualValue="1" weight=".059"
rank="1"/>
<Attribute name="Y_BOX_GAMES" actualValue="0" weight=".059"
rank="2"/>
<Attribute name="AFFINITY_CARD" actualValue="0" weight=".059"
rank="3"/>
<Attribute name="FLAT_PANEL_MONITOR" actualValue="1" weight=".059"
rank="4"/>
<Attribute name="YRS_RESIDENCE" actualValue="4" weight=".059"
rank="5"/>
</Details>

101285  79    42.18    36.82  <Details algorithm="Support Vector Machines">
<Attribute name="HOME_THEATER_PACKAGE" actualValue="1" weight=".059"
rank="1"/>
<Attribute name="HOUSEHOLD_SIZE" actualValue="2" weight=".059"
rank="2"/>
<Attribute name="CUST_MARITAL_STATUS" actualValue="Mabsent"
weight=".059" rank="3"/>
<Attribute name="Y_BOX_GAMES" actualValue="0" weight=".059"
rank="4"/>
<Attribute name="OCCUPATION" actualValue="Prof." weight=".059"
rank="5"/>
</Details>

100694   77    41.04    35.96  <Details algorithm="Support Vector Machines">
<Attribute name="HOME_THEATER_PACKAGE" actualValue="1"
weight=".059" rank="1"/>
<Attribute name="EDUCATION" actualValue="&lt; Bach." weight=".059"
rank="2"/>
<Attribute name="Y_BOX_GAMES" actualValue="0" weight=".059"
rank="3"/>
<Attribute name="CUST_ID" actualValue="100694" weight=".059"
rank="4"/>
<Attribute name="COUNTRY_NAME" actualValue="United States of
America" weight=".059" rank="5"/>
</Details>

100308  81    45.33    35.67  <Details algorithm="Support Vector Machines">
<Attribute name="HOME_THEATER_PACKAGE" actualValue="1" weight=".059"
rank="1"/>
<Attribute name="Y_BOX_GAMES" actualValue="0" weight=".059"
rank="2"/>
<Attribute name="HOUSEHOLD_SIZE" actualValue="2" weight=".059"
rank="3"/>
<Attribute name="FLAT_PANEL_MONITOR" actualValue="1" weight=".059"
rank="4"/>
<Attribute name="CUST_GENDER" actualValue="F" weight=".059"
rank="5"/>
</Details>

101256  90    54.39    35.61  <Details algorithm="Support Vector Machines">
<Attribute name="YRS_RESIDENCE" actualValue="9" weight=".059"
rank="1"/>
<Attribute name="HOME_THEATER_PACKAGE" actualValue="1" weight=".059"
rank="2"/>
<Attribute name="EDUCATION" actualValue="&lt; Bach." weight=".059"
rank="3"/>
<Attribute name="Y_BOX_GAMES" actualValue="0" weight=".059"
rank="4"/>
<Attribute name="COUNTRY_NAME" actualValue="United States of
America" weight=".059" rank="5"/>
</Details>

PREDICTION_PROBABILITY

構文

prediction_probability::=

分析の構文

prediction_prob_analytic::=

mining_attribute_clause::=

mining_analytic_clause::=

関連項目:
mining_analytic_clauseの構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

PREDICTION_PROBABILITYは、選択内に含まれる各行の確率を返します。確率は、最も高確率のクラスまたは指定されたclassを参照します。返される確率のデータ型は、BINARY_DOUBLEです。

PREDICTION_PROBABILITYでは、分類または異常検出を実行できます。分類の場合、返される確率は予測されたターゲット・クラスを参照します。異常検出の場合、返される確率は分類1(通常の行)または0(異常な行)を参照します。

PREDICTION_PROBABILITYとPREDICTIONファンクションを組み合せて使用すると、予測とその予測の確率を取得できます。

構文の選択

PREDICTION_PROBABILITYは、2つの方法のどちらかでデータにスコアを付けます。1つの方法では、データにマイニング・モデル・オブジェクトを適用します。もう1つの方法では、1つ以上の一時マイニング・モデルを作成して適用する分析句を実行して動的にデータをマイニングします。構文または分析構文を選択します。

- 構文 — 事前に定義されたモデルでデータにスコアを付ける場合は、最初の構文を使用します。分類または異常検出を実行するモデルの名前を指定します。

- 分析構文 — 事前定義されたモデルなしで、データにスコアを付ける場合は、分析構文を使用します。分析構文は、mining_analytic_clauseを使用します。これは、複数のモデル構築のためにデータをパーティション化する必要がある場合に指定します。mining_analytic_clauseは、query_partition_clauseとorder_by_clauseをサポートします。("analytic_clause::="を参照。)

- 分類の場合は、FOR exprを指定します。exprは、文字データ型のターゲット列を特定する式です。

- 異常検出の場合は、キーワードOF ANOMALYを指定します。

mining_attribute_clause

mining_attribute_clauseは、スコアの予測子として使用する列の属性を特定します。このファンクションが分析構文で起動された場合は、これらの予測子が一時モデルの構築にも使用されます。mining_attribute_clauseは、PREDICTIONファンクションと同様に動作します。("mining_attribute_clause::="を参照。)

関連項目:

- スコアリングの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

- 予測データ・マイニングの詳細は、『Oracle Data Mining概要』を参照してください。

例について:
次に示す例は、Data Miningのサンプル・プログラムからの抜粋です。サンプル・プログラムの詳細は、Oracle Data Miningユーザーズ・ガイドの「付録A」を参照してください。

例

次の例では、提携カードを使用している可能性が最も高いイタリア在住の顧客を10人戻します。

SELECT cust_id FROM (
SELECT cust_id
FROM mining_data_apply_v
WHERE country_name = 'Italy'
ORDER BY PREDICTION_PROBABILITY(DT_SH_Clas_sample, 1 USING *)
DESC, cust_id)
WHERE rownum < 11;

CUST_ID
----------
100081
100179
100185
100324
100344
100554
100662
100733
101250
101306

分析の例

この例では、mining_data_one_class_v内のデータで最も標準的でない行を特定します。婚姻区分の各種別が個別に考慮されるため、婚姻区分グループごとに最も異常な行が返されるようになります。

この問合せは、異常な行の判断に最も影響を与える属性を返します。PARTITION BY句により、婚姻区分ごとに構築され適用される個別のモデルが生成されます。区分がMabsentのレコードは1つのみであるため、そのパーティションに作成されるモデルはありません(詳細も表示されません)。

SELECT cust_id, cust_marital_status, rank_anom, anom_det FROM
(SELECT cust_id, cust_marital_status, anom_det,
rank() OVER (PARTITION BY CUST_MARITAL_STATUS
ORDER BY ANOM_PROB DESC,cust_id) rank_anom FROM
(SELECT cust_id, cust_marital_status,
PREDICTION_PROBABILITY(OF ANOMALY, 0 USING *)
OVER (PARTITION BY CUST_MARITAL_STATUS) anom_prob,
PREDICTION_DETAILS(OF ANOMALY, 0, 3 USING *)
OVER (PARTITION BY CUST_MARITAL_STATUS) anom_det
FROM mining_data_one_class_v
))
WHERE rank_anom < 3 order by 2, 3;

CUST_ID CUST_MARITAL_STATUS RANK_ANOM  ANOM_DET
------- ------------------- ---------- -----------------------------------------------------------
102366  Divorc.             1          <Details algorithm="Support Vector Machines" class="0">
<Attribute name="COUNTRY_NAME" actualValue="United Kingdom"
weight=".069" rank="1"/>
<Attribute name="AGE" actualValue="28" weight=".013"
rank="2"/>
<Attribute name="YRS_RESIDENCE" actualValue="4"
weight=".006" rank="3"/>
</Details>

101817  Divorc.             2          <Details algorithm="Support Vector Machines" class="0">
<Attribute name="YRS_RESIDENCE" actualValue="8"
weight=".018" rank="1"/>
<Attribute name="EDUCATION" actualValue="PhD" weight=".007"
rank="2"/>
<Attribute name="CUST_INCOME_LEVEL" actualValue="K:
250\,000 - 299\,999" weight=".006" rank="3"/>
</Details>

101713  Mabsent             1

101790  Married             1          <Details algorithm="Support Vector Machines" class="0">
<Attribute name="COUNTRY_NAME" actualValue="Canada"
weight=".063" rank="1"/>
<Attribute name="EDUCATION" actualValue="7th-8th"
weight=".011" rank="2"/>
<Attribute name="HOUSEHOLD_SIZE" actualValue="4-5"
weight=".011" rank="3"/>
</Details>
.
.
.
.

PREDICTION_SET

構文

prediction_set::=

分析の構文

prediction_set_analytic::=

cost_matrix_clause::=

mining_attribute_clause::=

mining_analytic_clause::-

関連項目:
mining_analytic_clauseの構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

PREDICTION_SETは、選択内に含まれる各行の確率またはコストとともに一連の予測を戻します。戻り値は、フィールド名がPREDICTION_IDおよびPROBABILITYまたはCOSTのオブジェクトのVARRAYです。予測識別子(ID)は、OracleのNUMBERです。確率とコストのフィールドは、BINARY_DOUBLEです。

PREDICTION_SETでは、分類または異常検出を実行できます。分類の場合、戻り値は予測されたターゲット・クラスを参照します。異常検出の場合、戻り値は分類1(通常の行)または0(異常な行)を参照します。

bestNおよびcutoff

bestNとcutoffを指定すると、このファンクションから返される予測の数を制限できます。デフォルトでは、bestNおよびcutoffがnullであり、すべての予測が戻されます。

- bestNは、最も確率が高いか、コストが低いN個の予測です。N番目の確率またはコストを持つ予測が複数ある場合でも、ファンクションが選択するのはそのうち1つのみです。

- cutoffは、値のしきい値です。cutoff以上の確率か、cutoff以下のコストの予測のみが返されます。cutoffのみでフィルタ処理するには、bestNにNULLを指定します。問合せに使用するcost_matrix_clauseにCOST MODEL AUTOを指定すると、cutoffは無視されます。

cutoffとともにbestNを指定して、cutoff以上の最も確率が高い最大N個の予測を戻すことができます。コストが使用される場合、cutoffとともにbestNを指定して、cutoff以下の最もコストが低い最大N個の予測を戻します。

cost_matrix_clause

最も悪影響を及ぼす誤分類を最小限に抑えるために、cost_matrix_clauseをバイアス係数として指定できます。cost_matrix_clauseは、「PREDICTION_COST」で説明されているように動作します。

構文の選択

PREDICTION_SETは、2つの方法のどちらかでデータにスコアを付けます。1つの方法では、データにマイニング・モデル・オブジェクトを適用します。もう1つの方法では、1つ以上の一時マイニング・モデルを作成して適用する分析句を実行して動的にデータをマイニングします。構文または分析構文を選択します。

- 構文 — 事前に定義されたモデルでデータにスコアを付ける場合は、最初の構文を使用します。分類または異常検出を実行するモデルの名前を指定します。

- 分析構文 — 事前定義されたモデルなしで、データにスコアを付ける場合は、分析構文を使用します。分析構文は、mining_analytic_clauseを使用します。これは、複数のモデル構築のためにデータをパーティション化する必要がある場合に指定します。mining_analytic_clauseは、query_partition_clauseとorder_by_clauseをサポートします。("analytic_clause::="を参照。)

- 分類の場合は、FOR exprを指定します。exprは、文字データ型のターゲット列を特定する式です。

- 異常検出の場合は、キーワードOF ANOMALYを指定します。

mining_attribute_clause

mining_attribute_clauseは、スコアの予測子として使用する列の属性を特定します。このファンクションが分析構文で起動された場合は、これらの予測子が一時モデルの構築にも使用されます。mining_attribute_clauseは、PREDICTIONファンクションと同様に動作します。("mining_attribute_clause::="を参照。)

関連項目:

- スコアリングの詳細は、Oracle Data Miningユーザーズ・ガイドを参照してください。

- 予測データ・マイニングの詳細は、『Oracle Data Mining概要』を参照してください。

例について:
次に示す例は、Data Miningのサンプル・プログラムからの抜粋です。サンプル・プログラムの詳細は、Oracle Data Miningユーザーズ・ガイドの「付録A」を参照してください。

例

この例では、100006より小さいIDを持つ顧客が提携カードを使用する予測とコストを示します。この例のターゲットはバイナリですが、このような問合せは低、中、高などの複数クラスの分類にも有効です。

SELECT T.cust_id, S.prediction, S.probability, S.cost
FROM (SELECT cust_id,
PREDICTION_SET(dt_sh_clas_sample COST MODEL USING *) pset
FROM mining_data_apply_v
WHERE cust_id < 100006) T,
TABLE(T.pset) S
ORDER BY cust_id, S.prediction;

CUST_ID PREDICTION  PROBABILITY         COST
---------- ---------- ------------ ------------
100001          0   .966183575   .270531401
100001          1   .033816425   .966183575
100002          0   .740384615  2.076923077
100002          1   .259615385   .740384615
100003          0   .909090909   .727272727
100003          1   .090909091   .909090909
100004          0   .909090909   .727272727
100004          1   .090909091   .909090909
100005          0   .272357724  5.821138211
100005          1   .727642276   .272357724

PRESENTNNV

構文

用途

PRESENTNNVファンクションは、SELECT文のmodel_clauseでのみ、およびモデル・ルールの右側でのみ使用できます。このファンクションは、cell_referenceがmodel_clauseの実行前に存在し、PRESENTNNVの評価時にNULLではない場合にexpr1を戻します。それ以外の場合はexpr2を戻します。このファンクションは、NVL2とは異なります。NVL2は、model_clauseの実行前の状態のデータを評価するのではなく、実行時のデータを評価します。

関連項目:

- 構文およびセマンティクスの詳細は、「model_clause」および「モデル式」を参照してください。

- 比較については、「NVL2」を参照してください。

例

次の例では、2002年のマウス・パッドの売上を含む行が存在し、その売上値がNULLではない場合、その売上値を変更しません。その行が存在し、売上値がNULLの場合、その売上値を10に設定します。その行が存在しない場合、売上値を10に設定して行を作成します。

SELECT country, prod, year, s
FROM sales_view_ref
MODEL
PARTITION BY (country)
DIMENSION BY (prod, year)
MEASURES (sale s)
IGNORE NAV
UNIQUE DIMENSION
RULES UPSERT SEQUENTIAL ORDER
( s['Mouse Pad', 2002] =
PRESENTNNV(s['Mouse Pad', 2002], s['Mouse Pad', 2002], 10)
)
ORDER BY country, prod, year;

COUNTRY       PROD                                         YEAR           S
----------    -----------------------------------      --------   ---------
France        Mouse Pad                                    1998     2509.42
France        Mouse Pad                                    1999     3678.69
France        Mouse Pad                                    2000     3000.72
France        Mouse Pad                                    2001     3269.09
France        Mouse Pad                                    2002          10
France        Standard Mouse                               1998     2390.83
France        Standard Mouse                               1999     2280.45
France        Standard Mouse                               2000     1274.31
France        Standard Mouse                               2001     2164.54
Germany       Mouse Pad                                    1998     5827.87
Germany       Mouse Pad                                    1999     8346.44
Germany       Mouse Pad                                    2000     7375.46
Germany       Mouse Pad                                    2001     9535.08
Germany       Mouse Pad                                    2002          10
Germany       Standard Mouse                               1998     7116.11
Germany       Standard Mouse                               1999     6263.14
Germany       Standard Mouse                               2000     2637.31
Germany       Standard Mouse                               2001     6456.13

18 rows selected.

この例では、ビューsales_view_refが必要です。このビューを作成する方法については、「例」を参照してください。

PRESENTV

構文

用途

PRESENTVファンクションは、SELECT文のmodel_clauseでのみ、およびモデル・ルールの右側でのみ使用できます。このファンクションは、cell_referenceが存在する場合、model_clauseを実行する前にexpr1を戻します。それ以外の場合はexpr2を戻します。

関連項目:
構文およびセマンティクスの詳細は、「model_clause」および「モデル式」を参照してください。

例

次の例では、2000年のマウス・パッドの売上を含む行が存在する場合、2001年のマウス・パッドの売上を2000年のマウス・パッドの売上値に設定します。その行が存在しない場合、2001年のマウス・パッドの売上値を0(ゼロ)に設定して行を作成します。

SELECT country, prod, year, s
FROM sales_view_ref
MODEL
PARTITION BY (country)
DIMENSION BY (prod, year)
MEASURES (sale s)
IGNORE NAV
UNIQUE DIMENSION
RULES UPSERT SEQUENTIAL ORDER
(
s['Mouse Pad', 2001] =
PRESENTV(s['Mouse Pad', 2000], s['Mouse Pad', 2000], 0)
)
ORDER BY country, prod, year;

COUNTRY       PROD                                         YEAR           S
----------    -----------------------------------      --------   ---------
France        Mouse Pad                                    1998     2509.42
France        Mouse Pad                                    1999     3678.69
France        Mouse Pad                                    2000     3000.72
France        Mouse Pad                                    2001     3000.72
France        Standard Mouse                               1998     2390.83
France        Standard Mouse                               1999     2280.45
France        Standard Mouse                               2000     1274.31
France        Standard Mouse                               2001     2164.54
Germany       Mouse Pad                                    1998     5827.87
Germany       Mouse Pad                                    1999     8346.44
Germany       Mouse Pad                                    2000     7375.46
Germany       Mouse Pad                                    2001     7375.46
Germany       Standard Mouse                               1998     7116.11
Germany       Standard Mouse                               1999     6263.14
Germany       Standard Mouse                               2000     2637.31
Germany       Standard Mouse                               2001     6456.13

16 rows selected.

この例では、ビューsales_view_refが必要です。このビューを作成する方法については、「MODEL句の例:」を参照してください。

PREVIOUS

構文

用途

PREVIOUSファンクションは、SELECT文のmodel_clauseでのみ、およびmodel_rules_clauseのITERATE ... [ UNTIL ]句でのみ使用できます。このファンクションは、各反復の最初にcell_referenceの値を戻します。

関連項目:
構文およびセマンティクスの詳細は、「model_clause」および「モデル式」を参照してください。

例

次の例では、反復の最初と最後にあるcur_valの値の差が1未満になるまで、最大1000回ルールを繰り返します。

SELECT dim_col, cur_val, num_of_iterations
FROM (SELECT 1 AS dim_col, 10 AS cur_val FROM dual)
MODEL
DIMENSION BY (dim_col)
MEASURES (cur_val, 0 num_of_iterations)
IGNORE NAV
UNIQUE DIMENSION
RULES ITERATE (1000) UNTIL (PREVIOUS(cur_val[1]) - cur_val[1] < 1)
(
cur_val[1] = cur_val[1]/2,
num_of_iterations[1] = num_of_iterations[1] + 1
);

DIM_COL    CUR_VAL NUM_OF_ITERATIONS
---------- ---------- -----------------
1       .625                 4

RANK

集計の構文

rank_aggregate::=

分析の構文

rank_analytic::=

関連項目:
構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

RANKは、一連の値における値のランクを計算します。戻り型は、NUMBERです。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。数値の優先順位の詳細は、「数値の優先順位」を参照してください。

ランク付け基準と同じ値を持つ行は、同じランクになります。Oracle Databaseは連結行の数を連結ランクに追加して、次のランクを計算します。そのため、ランクは連続した数値でない場合があります。このファンクションは、上位N番および下位N番のレポートに有効です。

- 集計ファンクションとして使用するRANKは、ファンクションの引数として識別される不確定な行のランクを、指定されたソート指定に従って計算します。ファンクションの引数は、各集計グループの単一行を識別するため、すべての引数は各集計グループ内で定数式に評価される必要があります。定数引数式および集計のORDER BY句の式の位置は、一致します。このため、引数の数は同じであり、その型は互換性がある必要があります。

- 分析ファンクションとして使用するRANKは、ある問合せが戻す他の行について、その問合せが戻す各行のランクを計算します。この計算は、order_by_clauseにあるvalue_exprsの値に基づいて行われます。

集計の例

次の例では、サンプル表hr.employeesから、給与が$15,500であり、歩合が5%である不確定な従業員のランクを計算します。

SELECT RANK(15500, .05) WITHIN GROUP
(ORDER BY salary, commission_pct) "Rank"
FROM employees;

Rank
----------
105

同様に、次の問合せは、従業員の給与から給与が$15,500のランクを戻します。

SELECT RANK(15500) WITHIN GROUP
(ORDER BY salary DESC) "Rank of 15500"
FROM employees;

Rank of 15500
--------------
4

分析の例

次の文は、サンプル・スキーマhrの部門60の従業員を、その給与に基づいてランク付けします。給与が同じ場合は同じランクになるため、連続しないランクになります。この例と、「DENSE_RANK」の分析の例を比較してください。

SELECT department_id, last_name, salary,
RANK() OVER (PARTITION BY department_id ORDER BY salary) RANK
FROM employees WHERE department_id = 60
ORDER BY RANK, last_name;

DEPARTMENT_ID LAST_NAME                     SALARY       RANK
------------- ------------------------- ---------- ----------
60 Lorentz                         4200          1
60 Austin                          4800          2
60 Pataballa                       4800          2
60 Ernst                           6000          4
60 Hunold                          9000          5

RATIO_TO_REPORT

構文

関連項目:
構文、セマンティクス、制限事項、およびexprの書式の詳細は、「分析ファンクション」を参照してください。

用途

RATIO_TO_REPORTは分析ファンクションです。このファンクションは、ある値の集合の合計に対する、その値の比率を計算します。exprがNULLの場合は、値もNULLになります。

値の集合は、query_partition_clauseによって決まります。この句を省略すると、比率は、問合せによって戻されるすべての行で計算されます。

exprには、RATIO_TO_REPORTまたは他の分析ファンクションを使用して分析ファンクションをネストできません。ただし、他の組込みファンクション式をexprで使用できます。exprの書式の詳細は、「SQL式」を参照してください。

例

次の例では、すべての事務員の給与の合計に対する各事務員の給与の割合の値を計算します。

SELECT last_name, salary, RATIO_TO_REPORT(salary) OVER () AS rr
FROM employees
WHERE job_id = 'PU_CLERK'
ORDER BY last_name, salary, rr;

LAST_NAME                     SALARY         RR
------------------------- ---------- ----------
Baida                           2900 .208633094
Colmenares                      2500 .179856115
Himuro                          2600  .18705036
Khoo                            3100 .223021583
Tobias                          2800 .201438849

RAWTOHEX

構文

用途

RAWTOHEXは、rawを16進表記で表した文字値に変換します。

SQL組込みファンクションとして使用される場合、RAWTOHEXは、LONG、LONG RAW、CLOB、NCLOB、BLOB, またはBFILE以外のすべてのスカラー・データ型の引数を取ります。引数がRAW以外のデータ型の場合、このファンクションは一定数のデータ・バイトを使用して表した引数値を同じ数のデータ・バイトのRAW値に変換します。データ自体は変更されませんが、データ型はRAWデータ型に再変換されます。

このファンクションは、rawの値を構成するバイトの16進表記でVARCHAR2値を戻します。各バイトは、2桁の16進数で表されます。

注意:
RAWTOHEXは、PL/SQL組込みファンクションとして使用される場合は異なる動作をします。詳細は、『Oracle Database開発ガイド』を参照してください。

例

次の例は、RAW列の値に等しい16進を戻します。

SELECT RAWTOHEX(raw_column) "Graphics"
FROM graphics;

Graphics
--------
7D

関連項目:
「RAWデータ型とLONG RAWデータ型」および「HEXTORAW」を参照してください。

RAWTONHEX

構文

用途

RAWTONHEXは、rawを16進表記で表した文字値に変換します。RAWTONHEX(raw)は、TO_NCHAR(RAWTOHEX(raw))と同じです。戻り値は、常に各国語キャラクタ・セットです。

注意:
RAWTONHEXは、PL/SQL組込みファンクションとして使用される場合は異なる動作をします。詳細は、『Oracle Database開発ガイド』を参照してください。

例

次の例は、RAW列の値に等しい16進を戻します。

SELECT RAWTONHEX(raw_column),
DUMP ( RAWTONHEX (raw_column) ) "DUMP"
FROM graphics;

RAWTONHEX(RA)           DUMP
----------------------- ------------------------------
7D                      Typ=1 Len=4: 0,55,0,68

REF

構文

用途

REFは、引数としてオブジェクト表またはオブジェクト・ビューの行に関連付けられた相関変数(表別名)を取ります。変数または行にバインドされたオブジェクト・インスタンスについてのREF値が戻ります。

例

サンプル・スキーマoeには、次のように定義されたcust_address_typという型が含まれます。

Attribute                                 Type
----------------------------- ----------------
STREET_ADDRESS                    VARCHAR2(40)
POSTAL_CODE                       VARCHAR2(10)
CITY                              VARCHAR2(30)
STATE_PROVINCE                    VARCHAR2(10)
COUNTRY_ID                             CHAR(2)

次の例では、サンプル型oe.cust_address_typに基づく表(addresses表)を作成した後、その表に行を挿入し、その表からその型のオブジェクト・インスタンスのREF値を取り出します。

CREATE TABLE addresses OF cust_address_typ;

INSERT INTO addresses VALUES (
'123 First Street', '4GF H1J', 'Our Town', 'Ourcounty', 'US');

SELECT REF(e) FROM addresses e;

REF(E)
-----------------------------------------------------------------------------------
00002802097CD1261E51925B60E0340800208254367CD1261E51905B60E034080020825436010101820000

関連項目:
REFの詳細は、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。

REFTOHEX

構文

用途

REFTOHEXは、引数exprを16進で表した文字値に変換します。exprは、REFを戻す必要があります。

例

サンプル・スキーマoeにはwarehouse_typが含まれています。次の例では、その型を基に、ある列のREF値をそれに等しい16進を含む文字値に変換する方法を示します。

CREATE TABLE warehouse_table OF warehouse_typ
(PRIMARY KEY (warehouse_id));

CREATE TABLE location_table
(location_number NUMBER, building REF warehouse_typ
SCOPE IS warehouse_table);

INSERT INTO warehouse_table VALUES (1, 'Downtown', 99);

INSERT INTO location_table SELECT 10, REF(w) FROM warehouse_table w;

SELECT REFTOHEX(building) FROM location_table;

REFTOHEX(BUILDING)
--------------------------------------------------------------------------
0000220208859B5E9255C31760E034080020825436859B5E9255C21760E034080020825436

REGEXP_COUNT

構文

用途

REGEXP_COUNTは、ソース文字列でパターンが発生した回数を戻すことによって、REGEXP_INSTRファンクションの機能を補完します。このファンクションでは、入力キャラクタ・セットによって定義された文字を使用して文字列を評価します。また、patternの発生回数を示す整数を戻します。一致する値が見つからない場合は0(ゼロ)を戻します。

- source_charは、検索値として使用される文字式です。通常は文字列であり、データ型はCHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBのいずれかです。

- patternは正規表現です。通常はテキスト・リテラルであり、データ型はCHAR、VARCHAR2、NCHARまたはNVARCHAR2のいずれかになります。ここには、 512バイトまで入力できます。patternのデータ型がsource_charのデータ型と異なる場合、Oracleはpatternをsource_charのデータ型に変換します。
REGEXP_COUNTは、pattern内の部分正規表現のカッコを無視します。たとえば、パターン'(123(45))'は、'12345'と同じです。patternで指定できる演算子のリストは、付録D「Oracleの正規表現のサポート」を参照してください。

- positionは、Oracleが検索を開始する文字source_charの位置を示す正の整数です。デフォルトは1で、source_charの最初の文字から検索が開始されます。1番目のpatternの出現が検出されると、その後に続く文字以降の2番目の出現が検索されます。

- match_paramは、ファンクションのデフォルトの検索動作を変更するためのテキスト・リテラルです。match_paramには次の値を1つ以上指定できます。

- 'i': 大/小文字を区別せずに検索します。

- 'c': 大/小文字を区別して検索します。

- 'n': 任意の文字に一致する文字であるピリオド(.)を、改行文字の一致に使用します。このパラメータを指定しない場合、ピリオドは改行文字には一致しません。

- 'm': ソース文字列を複数行として処理します。Oracleは、キャレット(^)およびドル記号($)を、それぞれ、ソース文字列全体の開始または終了としてのみではなく、ソース文字列内の任意の場所にある任意の行の開始または終了としても解釈します。このパラメータを指定しない場合、Oracleはソース文字列を単一行として処理します。

- 'x'は空白文字を無視します。デフォルトでは、空白文字は空白文字として一致します。

複数の矛盾する値を指定すると、最後の値が使用されます。たとえば、'ic'を指定すると、大/小文字を区別する検索が行われます。前述以外の文字を指定すると、エラーが戻されます。

match_paramを指定しない場合、次のようになります。

- 大/小文字を区別するかどうかのデフォルトは、NLS_SORTパラメータの値によって決まります。

- ピリオド(.)は改行文字に一致しません。

- ソース文字列は単一行として処理されます。

例

次の例では、pattern内の部分正規表現のカッコが無視されることを示します。

SELECT REGEXP_COUNT('123123123123123', '(12)3', 1, 'i') REGEXP_COUNT
FROM DUAL;

REGEXP_COUNT
------------
5

次の例では、ファンクションは3番目の文字でソース文字列の評価を開始するため、patternの最初の出現はスキップされます。

SELECT REGEXP_COUNT('123123123123', '123', 3, 'i') COUNT FROM DUAL;

COUNT
----------
3

REGEXP_INSTR

構文

用途

REGEXP_INSTRは、INSTRファンクションの機能を拡張するものであり、正規表現パターンの文字列を検索できます。このファンクションでは、入力キャラクタ・セットによって定義された文字を使用して文字列を評価します。また、return_option引数の値に基づいて、一致したサブストリングの開始位置または終了位置を示す整数を戻します。一致する値が見つからない場合は0(ゼロ)を戻します。

このファンクションは、POSIX正規表現規格およびUnicode Regular Expression Guidelinesに準拠しています。詳細は、付録D「Oracleの正規表現のサポート」を参照してください。

- source_charは、検索値として使用される文字式です。通常は文字列であり、データ型はCHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBのいずれかです。

- patternは正規表現です。通常はテキスト・リテラルであり、データ型はCHAR、VARCHAR2、NCHARまたはNVARCHAR2のいずれかになります。ここには、 512バイトまで入力できます。patternのデータ型がsource_charのデータ型と異なる場合、Oracleはpatternをsource_charのデータ型に変換します。patternで指定できる演算子のリストは、付録D「Oracleの正規表現のサポート」を参照してください。

- positionは、Oracleが検索を開始する文字source_charの位置を示す正の整数です。デフォルトは1で、source_charの最初の文字から検索が開始されます。

- occurrenceは、source_charに出現するpatternのうちのどれを検索するかを示す正の整数です。デフォルトは1で、最初に出現するpatternが検索されます。occurrenceが1より大きい場合、1番目のpatternが検出された後に続く1文字目から、2番目(以降)の出現を検索します。この動作は、最初の出現の2番目の文字から2番目の出現を検索するINSTRファンクションとは異なります。

- return_optionには、出現した文字と関連して戻すものを指定できます。

- 0(ゼロ)を指定すると、出現した文字の最初の文字の位置が戻されます。これはデフォルトです。

- 1を指定すると、出現した文字の次の文字の位置が戻されます。

- match_parameterは、ファンクションのデフォルトの検索動作を変更するためのテキスト・リテラルです。このパラメータの動作は、REGEXP_COUNTのこのファンクションの動作と同じです。詳細は、「REGEXP_COUNT」を参照してください。

- 部分正規表現のあるpatternの場合、subexprは、ファンクションのターゲットとなるpattern内の部分正規表現を示す0から9までの整数になります。subexprは、カッコで囲まれたpatternのフラグメントです。部分正規表現はネストできます。部分正規表現は、その左側のカッコがpatternに出現する順に番号付けされます。たとえば、次の正規表現を考えます。

0123(((abc)(de)f)ghi)45(678)

この正規表現には、abcdefghi、abcdef、abc、de、678の順に5つの部分正規表現があります。

subexprが0(ゼロ)の場合、patternに一致するサブストリング全体の位置が戻されます。subexprが0(ゼロ)より大きい場合、一致したサブストリング内の部分正規表現番号subexprに対応するサブストリング・フラグメントの位置が戻されます。patternにsubexprの部分正規表現が1つもない場合、このファンクションは0(ゼロ)を戻します。NULLのsubexpr値は、NULLを戻します。subexprのデフォルト値は0(ゼロ)です。

関連項目:

- 「INSTR」および「REGEXP_SUBSTR」を参照してください。

- 「REGEXP_REPLACE」および「REGEXP_LIKE条件」を参照してください。

例

次の例では、文字列を調べて、空白以外の文字を検索します。Oracleは、文字列の最初の文字から検索を開始し、空白以外の文字が6つ目に出現する開始位置(デフォルト)を戻します。

SELECT
REGEXP_INSTR('500 Oracle Parkway, Redwood Shores, CA',
'[^ ]+', 1, 6) "REGEXP_INSTR"
FROM DUAL;

REGEXP_INSTR
------------
37

次の例では、文字列を調べて、大/小文字を区別せずにs、rまたはpで始まり、任意の6つのアルファベット文字が続く単語を検索します。Oracleは、文字列の3つ目の文字から検索を開始し、大文字か小文字のs、rまたはpで始まる7文字の単語が2つ目に出現した後の文字の、文字列内の位置を戻します。

SELECT
REGEXP_INSTR('500 Oracle Parkway, Redwood Shores, CA',
'[s|r|p][[:alpha:]]{6}', 3, 2, 1, 'i') "REGEXP_INSTR"
FROM DUAL;

REGEXP_INSTR
------------
28

次の例では、subexpr引数を使用してpattern内の特定の部分正規表現を検索します。最初の文は、最初の部分正規表現にある最初の文字のソース文字列(123)の位置を戻します。

SELECT REGEXP_INSTR('1234567890', '(123)(4(56)(78))', 1, 1, 0, 'i', 1)
"REGEXP_INSTR" FROM DUAL;

REGEXP_INSTR
-------------------
1

次の文は、2番目の部分正規表現にある最初の文字のソース文字列(45678)の位置を戻します。

SELECT REGEXP_INSTR('1234567890', '(123)(4(56)(78))', 1, 1, 0, 'i', 2)
"REGEXP_INSTR" FROM DUAL;

REGEXP_INSTR
-------------------
4

次の文は、4番目の部分正規表現にある最初の文字のソース文字列(78)の位置を戻します。

SELECT REGEXP_INSTR('1234567890', '(123)(4(56)(78))', 1, 1, 0, 'i', 4)
"REGEXP_INSTR" FROM DUAL;

REGEXP_INSTR
-------------------
7

REGEXP_REPLACE

構文

用途

REGEXP_REPLACEは、正規表現パターンで文字列を検索できるようにREPLACEの機能を拡張したものです。デフォルトでは、このファンクションは、正規表現パターンに一致するすべての文字をreplace_stringに置き換えてsource_charを戻します。source_charと同じキャラクタ・セットの文字列が戻されます。このファンクションは、1つ目の引数がLOBではない場合はVARCHAR2を戻し、1つ目の引数がLOBの場合はCLOBを戻します。

このファンクションは、POSIX正規表現規格およびUnicode Regular Expression Guidelinesに準拠しています。詳細は、付録D「Oracleの正規表現のサポート」を参照してください。

- source_charは、検索値として使用される文字式です。一般的には文字の列であり、データ型はCHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB、NCLOBのいずれかになります。

- patternは正規表現です。通常はテキスト・リテラルであり、データ型はCHAR、VARCHAR2、NCHARまたはNVARCHAR2のいずれかになります。ここには、 512バイトまで入力できます。patternのデータ型がsource_charのデータ型と異なる場合、Oracleはpatternをsource_charのデータ型に変換します。patternで指定できる演算子のリストは、付録D「Oracleの正規表現のサポート」を参照してください。

- replace_stringは、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBデータ型です。replace_stringがCLOBまたはNCLOBの場合、replace_stringは32KBに切り捨てられます。replace_stringには、最大500個の部分正規表現への後方参照を\nという書式で指定できます。nは、1から9の数値です。replace_stringにバックスラッシュ(\)を含める場合、その前にエスケープ文字(これもバックスラッシュ)を付ける必要があります。たとえば、\2を置き換えるには、\\2を入力します。後方参照表現の詳細は、「Oracleの正規表現のサポート」の表D-1に示す説明を参照してください。

- positionは、Oracleが検索を開始する文字source_charの位置を示す正の整数です。デフォルトは1で、source_charの最初の文字から検索が開始されます。

- occurrenceは、置換操作の対象となる文字を示す、負ではない整数です。

- 0(ゼロ)を指定すると、一致したすべての文字が置換されます。

- 正の整数nを指定すると、n番目に一致した文字が置換されます。

occurrenceが1より大きい場合、1番目のpatternが検出された後に続く1文字目から、2番目(以降)の出現を検索します。この動作は、最初の出現の2番目の文字から2番目の出現を検索するINSTRファンクションとは異なります。

- match_parameterは、ファンクションのデフォルトの検索動作を変更するためのテキスト・リテラルです。このパラメータの動作は、REGEXP_COUNTのこのファンクションの動作と同じです。詳細は、「REGEXP_COUNT」を参照してください。

関連項目:

- 「REPLACE」

- 「REGEXP_INSTR」、「REGEXP_SUBSTR」および「REGEXP_LIKE条件」を参照してください。

例

次の例では、phone_numberを調べて、xxx.xxx.xxxxというパターンを検索します。その後、このパターンを(xxx) xxx-xxxxという書式に変更します。

SELECT
REGEXP_REPLACE(phone_number,
'([[:digit:]]{3})\.([[:digit:]]{3})\.([[:digit:]]{4})',
'(\1) \2-\3') "REGEXP_REPLACE"
FROM employees
ORDER BY "REGEXP_REPLACE";

REGEXP_REPLACE
--------------------------------------------------------------------------------
(515) 123-4444
(515) 123-4567
(515) 123-4568
(515) 123-4569
(515) 123-5555
. . .

次の例では、country_nameを調べます。文字列内のNULLでない各文字の後に空白を挿入します。

SELECT
REGEXP_REPLACE(country_name, '(.)', '\1 ') "REGEXP_REPLACE"
FROM countries;

REGEXP_REPLACE
--------------------------------------------------------------------------------
A r g e n t i n a
A u s t r a l i a
B e l g i u m
B r a z i l
C a n a d a
. . .

次の例では、文字列を調べて、2つ以上の空白を検索します。検索された2つ以上の空白を、それぞれ1つの空白に置換します。

SELECT
REGEXP_REPLACE('500   Oracle     Parkway,    Redwood  Shores, CA',
'( ){2,}', ' ') "REGEXP_REPLACE"
FROM DUAL;

REGEXP_REPLACE
--------------------------------------
500 Oracle Parkway, Redwood Shores, CA

REGEXP_SUBSTR

構文

用途

REGEXP_SUBSTRは、正規表現パターンで文字列を検索できるようにSUBSTRの機能を拡張したものです。REGEXP_INSTRと似ていますが、このファンクションはサブストリングの位置ではなくサブストリング自体を戻します。このファンクションは、一致文字列の内容のみが必要で、ソース文字列内での位置は必要ない場合に有効です。このファンクションは、文字列をVARCHAR2またはCLOBデータとして、source_charと同じキャラクタ・セットで戻します。

このファンクションは、POSIX正規表現規格およびUnicode Regular Expression Guidelinesに準拠しています。詳細は、付録D「Oracleの正規表現のサポート」を参照してください。

- source_charは、検索値として使用される文字式です。通常は文字列であり、データ型はCHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBのいずれかです。

- patternは正規表現です。通常はテキスト・リテラルであり、データ型はCHAR、VARCHAR2、NCHARまたはNVARCHAR2のいずれかになります。ここには、 512バイトまで入力できます。patternのデータ型がsource_charのデータ型と異なる場合、Oracleはpatternをsource_charのデータ型に変換します。patternで指定できる演算子のリストは、付録D「Oracleの正規表現のサポート」を参照してください。

- positionは、Oracleが検索を開始する文字source_charの位置を示す正の整数です。デフォルトは1で、source_charの最初の文字から検索が開始されます。

- occurrenceは、source_charに出現するpatternのうちのどれを検索するかを示す正の整数です。デフォルトは1で、最初に出現するpatternが検索されます。
occurrenceが1より大きい場合、1番目のpatternが検出された後に続く1文字目から、2番目(以降)の出現を検索します。この動作は、最初の出現の2番目の文字から2番目の出現を検索するSUBSTRファンクションとは異なります。

- match_parameterは、ファンクションのデフォルトの検索動作を変更するためのテキスト・リテラルです。このパラメータの動作は、REGEXP_COUNTのこのファンクションの動作と同じです。詳細は、「REGEXP_COUNT」を参照してください。

- 部分正規表現のあるpatternの場合、subexprは、ファンクションによって戻されるpattern内の部分正規表現を示す0から9までの負でない整数になります。このパラメータは、REGEXP_INSTRファンクションの場合と同じセマンティクスを持ちます。詳細は、「REGEXP_INSTR」を参照してください。

関連項目:

- 「SUBSTR」および「REGEXP_INSTR」を参照してください。

- 「REGEXP_REPLACE」および「REGEXP_LIKE条件」を参照してください。

例

次の例では、文字列を調べて、カンマで区切られた最初のサブストリングを検索します。Oracle Databaseは、後にカンマが付いているカンマでない1つ以上の文字の前にあるカンマを検索します。該当するサブストリングが、前後のカンマを含めて戻されます。

SELECT
REGEXP_SUBSTR('500 Oracle Parkway, Redwood Shores, CA',
',[^,]+,') "REGEXPR_SUBSTR"
FROM DUAL;

REGEXPR_SUBSTR
-----------------
, Redwood Shores,

次の例では、文字列を調べて、1つ以上の英数字を含むサブストリング、および任意でピリオド(.)が続くhttp://を検索します。Oracleは、http://と、スラッシュ(/)または文字列の末尾のいずれかとの間で、3つから4つのこのサブストリングを検索します。

SELECT
REGEXP_SUBSTR('http://www.example.com/products',
'http://([[:alnum:]]+\.?){3,4}/?') "REGEXP_SUBSTR"
FROM DUAL;

REGEXP_SUBSTR
----------------------
http://www.example.com/

次の2つの例では、subexpr引数を使用してpattern内の特定の部分正規表現を戻します。最初の文は、pattern内の最初の部分正規表現を戻します。

SELECT REGEXP_SUBSTR('1234567890', '(123)(4(56)(78))', 1, 1, 'i', 1)
"REGEXP_SUBSTR" FROM DUAL;

REGEXP_SUBSTR
-------------------
123

次の文は、pattern内の4番目の部分正規表現を戻します。

SELECT REGEXP_SUBSTR('1234567890', '(123)(4(56)(78))', 1, 1, 'i', 4)
"REGEXP_SUBSTR" FROM DUAL;

REGEXP_SUBSTR
-------------------
78

REGR_(線形回帰)ファンクション

線形回帰ファンクションは次のとおりです。

- REGR_SLOPE

- REGR_INTERCEPT

- REGR_COUNT

- REGR_R2

- REGR_AVGX

- REGR_AVGY

- REGR_SXX

- REGR_SYY

- REGR_SXY

構文

linear_regr::=

関連項目:
構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

線形回帰ファンクションは、微分最小2乗法で求めた回帰直線を数値の組の集合に対応付けます。これは、集計ファンクションまたは分析ファンクションとして使用できます。

関連項目:
exprの書式の詳細は、「集計ファンクション」および「SQL式」を参照してください。

これらのファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。Oracleは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。数値の優先順位の詳細は、「数値の優先順位」を参照してください。

Oracleは、expr1またはexpr2がNULLであるすべての組を排除した後、このファンクションを(expr1, expr2)の組の集合に適用します。Oracleは、データでの引渡し中、同時にすべての回帰ファンクションを計算します。

expr1は、従属変数の値(y値)として解析されます。expr2は、独立変数の値(x値)として解析されます。

- REGR_SLOPEは、直線の傾きを戻します。戻り値は数値データ型で、NULLになる場合もあります。NULL (expr1, expr2)の組を排除した後、このファンクションは次の計算を行います。

COVAR_POP(expr1, expr2) / VAR_POP(expr2)

- REGR_INTERCEPTは、回帰直線のy切片を戻します。戻り値は数値データ型で、NULLになる場合もあります。NULL (expr1, expr2)の組を排除した後、このファンクションは次の計算を行います。

AVG(expr1) - REGR_SLOPE(expr1, expr2) * AVG(expr2)

- REGR_COUNTは整数を戻します。この整数は、回帰直線に適応させるために使用されるNULLでない数値の組です。

- REGR_R2は、回帰に対する決定係数(Rの2乗または適合度とも呼ぶ)を戻します。戻り値は数値データ型で、NULLになる場合もあります。VAR_POP (expr1)およびVAR_POP (expr2)は、NULLの組が排除された後に評価されます。戻り値は次のとおりです。

NULL if VAR_POP(expr2)  = 0

1 if VAR_POP(expr1)  = 0 and
VAR_POP(expr2) != 0

POWER(CORR(expr1,expr),2) if VAR_POP(expr1)  > 0 and
VAR_POP(expr2  != 0

これ以外のすべての回帰ファンクションの戻り値は数値データ型で、NULLになる場合もあります。

- REGR_AVGXは、回帰直線の独立変数(expr2)の平均を求めます。NULL(expr1, expr2)の組を排除した後、このファンクションは次の計算を行います。

AVG(expr2)

- REGR_AVGYは、回帰直線の従属変数(expr1)の平均を求めます。NULL(expr1, expr2)の組を排除した後、このファンクションは次の計算を行います。

AVG(expr1)

REGR_SXY、REGR_SXX、REGR_SYYは補助ファンクションです。これらは、様々な診断統計の計算に使用されます。

- NULL (expr1, expr2)の組を排除した後、REGR_SXXは次の計算を行います。

REGR_COUNT(expr1, expr2) * VAR_POP(expr2)

- NULL (expr1, expr2)の組を排除した後、REGR_SYYは次の計算を行います。

REGR_COUNT(expr1, expr2) * VAR_POP(expr1)

- NULL (expr1, expr2)の組を排除した後、REGR_SXYは次の計算を行います。

REGR_COUNT(expr1, expr2) * COVAR_POP(expr1, expr2)

次の例は、サンプル表sh.salesおよびsh.productsに基づいています。

一般的な線形回帰の例

次の例では、分析書式で使用される様々な線形回帰ファンクションを比較します。これらのファンクションの分析書式は、モデル別で従業員ごとに予測される給与の検索などの計算で、回帰統計を使用する場合に有効です。次の個々の線形回帰ファンクションについての項では、これらのファンクションの集計書式の例を示します。

SELECT job_id, employee_id ID, salary,
REGR_SLOPE(SYSDATE-hire_date, salary)
OVER (PARTITION BY job_id) slope,
REGR_INTERCEPT(SYSDATE-hire_date, salary)
OVER (PARTITION BY job_id) intcpt,
REGR_R2(SYSDATE-hire_date, salary)
OVER (PARTITION BY job_id) rsqr,
REGR_COUNT(SYSDATE-hire_date, salary)
OVER (PARTITION BY job_id) count,
REGR_AVGX(SYSDATE-hire_date, salary)
OVER (PARTITION BY job_id) avgx,
REGR_AVGY(SYSDATE-hire_date, salary)
OVER (PARTITION BY job_id) avgy
FROM employees
WHERE department_id in (50, 80)
ORDER BY job_id, employee_id;

JOB_ID        ID     SALARY SLOPE    INTCPT  RSQR  COUNT       AVGX      AVGY
---------- ----- ---------- ----- --------- ----- ------ ---------- ---------
SA_MAN       145      14000  .355 -1707.035  .832      5  12200.000  2626.589
SA_MAN       146      13500  .355 -1707.035  .832      5  12200.000  2626.589
SA_MAN       147      12000  .355 -1707.035  .832      5  12200.000  2626.589
SA_MAN       148      11000  .355 -1707.035  .832      5  12200.000  2626.589
SA_MAN       149      10500  .355 -1707.035  .832      5  12200.000  2626.589
SA_REP       150      10000  .257   404.763  .647     29   8396.552  2561.244
SA_REP       151       9500  .257   404.763  .647     29   8396.552  2561.244
SA_REP       152       9000  .257   404.763  .647     29   8396.552  2561.244
SA_REP       153       8000  .257   404.763  .647     29   8396.552  2561.244
SA_REP       154       7500  .257   404.763  .647     29   8396.552  2561.244
SA_REP       155       7000  .257   404.763  .647     29   8396.552  2561.244
SA_REP       156      10000  .257   404.763  .647     29   8396.552  2561.244
. . .

REGR_SLOPEおよびREGR_INTERCEPTの例

次の例では、サンプル表hr.employeesを使用して、勤務時間(SYSDATE - hire_date)と給与に関する線形回帰モデルの傾きと回帰を計算します。結果はjob_id別にグループ化されます。

SELECT job_id,
REGR_SLOPE(SYSDATE-hire_date, salary) slope,
REGR_INTERCEPT(SYSDATE-hire_date, salary) intercept
FROM employees
WHERE department_id in (50,80)
GROUP BY job_id
ORDER BY job_id;

JOB_ID     SLOPE    INTERCEPT
---------- ----- ------------
SA_MAN      .355 -1707.030762
SA_REP      .257   404.767151
SH_CLERK    .745   159.015293
ST_CLERK    .904   134.409050
ST_MAN      .479  -570.077291

REGR_COUNTの例

次の例では、サンプル表hr.employeesを使用して、勤務時間(SYSDATE - hire_date)と給与について、job_id別の数を計算します。結果はjob_id別にグループ化されます。

SELECT job_id,
REGR_COUNT(SYSDATE-hire_date, salary) count
FROM employees
WHERE department_id in (30, 50)
GROUP BY job_id
ORDER BY job_id, count;

JOB_ID          COUNT
---------- ----------
PU_CLERK            5
PU_MAN              1
SH_CLERK           20
ST_CLERK           20
ST_MAN              5

REGR_R2の例

次の例では、サンプル表hr.employeesを使用して、勤務時間(SYSDATE - hire_date)と給与の線形回帰に対する決定係数を計算します。

SELECT job_id,
REGR_R2(SYSDATE-hire_date, salary) Regr_R2
FROM employees
WHERE department_id in (80, 50)
GROUP by job_id
ORDER BY job_id, Regr_R2;

JOB_ID        REGR_R2
---------- ----------
SA_MAN      .83244748
SA_REP     .647007156
SH_CLERK   .879799698
ST_CLERK   .742808493
ST_MAN      .69418508

REGR_AVGYおよびREGR_AVGXの例

次の例では、サンプル表hr.employeesを使用して、勤務時間(SYSDATE - hire_date)と給与の平均値を計算します。結果はjob_id別にグループ化されます。

SELECT job_id,
REGR_AVGY(SYSDATE-hire_date, salary) avgy,
REGR_AVGX(SYSDATE-hire_date, salary) avgx
FROM employees
WHERE department_id in (30,50)
GROUP BY job_id
ORDER BY job_id, avgy, avgx;

JOB_ID           AVGY       AVGX
---------- ---------- ----------
PU_CLERK    2950.3778       2780
PU_MAN      4026.5778      11000
SH_CLERK    2773.0778       3215
ST_CLERK    2872.7278       2785
ST_MAN      3140.1778       7280

REGR_SXY、REGR_SXXおよびREGR_SYYの例

次の例では、サンプル表hr.employeesを使用して、勤務時間(SYSDATE - hire_date)と給与の線形回帰について、3種類の診断統計を計算します。

SELECT job_id,
REGR_SXY(SYSDATE-hire_date, salary) regr_sxy,
REGR_SXX(SYSDATE-hire_date, salary) regr_sxx,
REGR_SYY(SYSDATE-hire_date, salary) regr_syy
FROM employees
WHERE department_id in (80, 50)
GROUP BY job_id
ORDER BY job_id;

JOB_ID       REGR_SXY    REGR_SXX   REGR_SYY
---------- ---------- ----------- ----------
SA_MAN        3303500   9300000.0    1409642
SA_REP     16819665.5  65489655.2 6676562.55
SH_CLERK      4248650   5705500.0    3596039
ST_CLERK      3531545   3905500.0 4299084.55
ST_MAN        2180460   4548000.0  1505915.2

REMAINDER

構文

用途

REMAINDERはn2をn1で割った余りを戻します。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。Oracleは、数値の優先順位が最も高い引数を判断し、残りの引数をそのデータ型に暗黙的に変換して、そのデータ型を戻します。

MODファンクションはREMAINDERと似ていますが、MODの式ではFLOORを使用します。これに対してREMAINDERではROUNDを使用します。詳細は、「MOD」を参照してください。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。数値の優先順位の詳細は、「数値の優先順位」を参照してください。

- n1が0(ゼロ)であるか、またはn2が無限大の場合、Oracleが返す内容は次のとおりです。

- 両方の引数がNUMBER型の場合はエラー

- 両方の引数がBINARY_FLOATまたはBINARY_DOUBLEの場合はNaN。

- n1が0ではない場合、余りはn2 - (n1*N)となります。Nは、n2/n1に最も近い整数です。n2/n1がx.5と等しい場合、Nは最も近い偶数の整数です。

- n2が浮動小数点数で、余りが0(ゼロ)の場合、余りの符号はn2の符合になります。NUMBER値の場合、0の余りには符号は付きません。

例

次の例では、TO_BINARY_DOUBLEの「例」で作成されたfloat_point_demo表を使用して、2つの浮動小数点数を割り、算出された余りを戻します。

SELECT bin_float, bin_double, REMAINDER(bin_float, bin_double)
FROM float_point_demo;

BIN_FLOAT BIN_DOUBLE REMAINDER(BIN_FLOAT,BIN_DOUBLE)
---------- ---------- -------------------------------
1.235E+003 1.235E+003                      5.859E-005

REPLACE

構文

用途

REPLACEは、replacement_stringですべてのsearch_stringを変換してcharを戻します。replacement_stringを指定しない場合またはNULLの場合、すべてのsearch_stringが削除されます。search_stringがNULLの場合、charが戻されます。

charと同様に、search_stringおよびreplacement_stringは、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBデータ型です。charと同じキャラクタ・セットの文字列が戻されます。このファンクションは、1つ目の引数がLOBではない場合はVARCHAR2を戻し、1つ目の引数がLOBの場合はCLOBを戻します。

REPLACEは、TRANSLATEファンクションに関連する機能を提供します。TRANSLATEは、単一文字を1対1で置き換えます。REPLACEファンクションでは、1つの文字列の置換および複数の文字列の削除を実行できます。

関連項目:
「TRANSLATE」

例

次の例では、JをBLに置換します。

SELECT REPLACE('JACK and JUE','J','BL') "Changes"
FROM DUAL;

Changes
--------------
BLACK and BLUE

ROUND(日付)

構文

round_date::=

用途

ROUNDは、dateを書式モデルfmtで指定した単位に丸めた結果を戻します。このファンクションは、NLS_CALENDARセッション・パラメータの影響を受けません。このファンクションはグレゴリオ暦の規則に従って動作します。戻される値は、dateに異なる日時データ型を指定した場合でも、常にDATEデータ型です。fmtを省略すると、dateは最も近い日に丸められます。date式は、DATE値に変換される必要があります。

関連項目:
fmtで使用できる書式モデルについては、「ROUNDおよびTRUNC日付ファンクション」を参照してください。

例

次の例では、次の年の最も近い日に丸めます。

SELECT ROUND (TO_DATE ('27-OCT-00'),'YEAR')
"New Year" FROM DUAL;

New Year
---------
01-JAN-01

ROUND(数値)

構文

round_number::=

用途

ROUNDは、nを小数点以下integer桁に丸めた値を戻します。integerを指定しない場合、nは小数点以下が丸められます。integerが負の場合、nは小数点の左側に丸められます。

nには、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を指定できます。integerを指定しない場合、このファンクションは、nの数値データ型と同じデータ型で値ROUND(n, 0)を戻します。integerを指定すると、このファンクションはNUMBERを戻します。

ROUNDは、次の規則を使用して実行されます。

1. nが0の場合、ROUNDはintegerに関係なく常に0を戻します。

2. nが負の場合、ROUND(n, integer)は、-ROUND(-n, integer)を戻します。

3. nが正の場合は、次のとおりです。

ROUND(n, integer) = FLOOR(n * POWER(10, integer) + 0.5) * POWER(10, -integer)

NUMBER値に適用されたROUNDが、浮動小数点で表現された同じ値に適用されたROUNDと少し異なる場合があります。この結果の相違は、NUMBERと浮動小数点値の内部表現の違いから発生します。相違が発生した場合、その相違は丸められた桁で1になります。

関連項目:

- 暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

- Oracle DatabaseによるBINARY_FLOAT値およびBINARY_DOUBLE値の処理方法の詳細は、「浮動小数点数」を参照してください。

- 関連する操作を実行するファンクションの詳細は、「FLOOR」、「CEIL」、「TRUNC(数値)」および「MOD」を参照してください。

例

次の例では、数値を小数点以下1桁に丸めます。

SELECT ROUND(15.193,1) "Round" FROM DUAL;

Round
----------
15.2

次の例では、数値の小数点の左1桁を丸めます。

SELECT ROUND(15.193,-1) "Round" FROM DUAL;

Round
----------
20

ROW_NUMBER

構文

関連項目:
構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

ROW_NUMBERは分析ファンクションです。このファンクションは、order_by_clauseに指定された行の、1から始まる順番順序で、このファンクションが適用される各行(パーティションの各行、または問合せが戻す各行)に一意の数値を割り当てます。

指定された範囲のROW_NUMBER値を取得する問合せ内に、ROW_NUMBERを使用した副問合せをネストすることで、内側の問合せの結果から正確な行のサブセットを得ることができます。この方法でこのファンクションを使用すると、上位N番、下位N番および内部N番のレポートを実行できます。一貫した結果を戻すには、問合せで決定的なソート順序を使用する必要があります。

例

次の例では、hr.employees表で各部門の最も支給額の高い上位3人の従業員を検索します。従業員が3人未満の部門については、3行未満の行が戻されます。

SELECT department_id, first_name, last_name, salary
FROM
(
SELECT
department_id, first_name, last_name, salary,
ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY salary desc) rn
FROM employees
)
WHERE rn <= 3
ORDER BY department_id, salary DESC, last_name;

次の例は、sh.sales表の結合問合せです。1999年の売上高が上位5つの製品について2000年の売上高を検索し、2000年と1999年の差を比較します。各販売チャネルにおいて売上高上位の10製品が計算されます。

SELECT sales_2000.channel_desc, sales_2000.prod_name,
sales_2000.amt amt_2000,  top_5_prods_1999_year.amt amt_1999,
sales_2000.amt  - top_5_prods_1999_year.amt amt_diff
FROM
/* The first subquery finds the 5 top-selling products per channel in year 1999. */
(SELECT channel_desc, prod_name, amt
FROM
(
SELECT channel_desc, prod_name, sum(amount_sold) amt,
ROW_NUMBER () OVER (PARTITION BY channel_desc
ORDER BY SUM(amount_sold) DESC) rn
FROM sales, times, channels, products
WHERE sales.time_id = times.time_id
AND times.calendar_year = 1999
AND channels.channel_id = sales.channel_id
AND products.prod_id = sales.prod_id
GROUP BY channel_desc, prod_name
)
WHERE rn <= 5
) top_5_prods_1999_year,
/* The next subquery finds sales per product and per channel in 2000. */
(SELECT channel_desc, prod_name, sum(amount_sold) amt
FROM sales, times, channels, products
WHERE sales.time_id = times.time_id
AND times.calendar_year = 2000
AND channels.channel_id = sales.channel_id
AND products.prod_id = sales.prod_id
GROUP BY channel_desc, prod_name
) sales_2000
WHERE sales_2000.channel_desc = top_5_prods_1999_year.channel_desc
AND sales_2000.prod_name = top_5_prods_1999_year.prod_name
ORDER BY sales_2000.channel_desc, sales_2000.prod_name
;
CHANNEL_DESC    PROD_NAME                                          AMT_2000   AMT_1999   AMT_DIFF
--------------- --------------==-------------------------------- ---------- ---------- ----------
Direct Sales     17" LCD w/built-in HDTV Tuner                     628855.7 1163645.78 -534790.08
Direct Sales     Envoy 256MB - 40GB                               502938.54  843377.88 -340439.34
Direct Sales     Envoy Ambassador                                2259566.96 1770349.25  489217.71
Direct Sales     Home Theatre Package with DVD-Audio/Video Play  1235674.15 1260791.44  -25117.29
Direct Sales     Mini DV Camcorder with 3.5" Swivel LCD           775851.87 1326302.51 -550450.64
Internet         17" LCD w/built-in HDTV Tuner                     31707.48   160974.7 -129267.22
Internet         8.3 Minitower Speaker                            404090.32  155235.25  248855.07
Internet         Envoy 256MB - 40GB                                28293.87  154072.02 -125778.15
Internet         Home Theatre Package with DVD-Audio/Video Play   155405.54  153175.04     2230.5
Internet         Mini DV Camcorder with 3.5" Swivel LCD            39726.23  189921.97 -150195.74
Partners         17" LCD w/built-in HDTV Tuner                    269973.97  325504.75  -55530.78
Partners         Envoy Ambassador                                1213063.59  614857.93  598205.66
Partners         Home Theatre Package with DVD-Audio/Video Play   700266.58  520166.26  180100.32
Partners         Mini DV Camcorder with 3.5" Swivel LCD           404265.85  520544.11 -116278.26
Partners         Unix/Windows 1-user pack                         374002.51  340123.02   33879.49

15 rows selected.

ROWIDTOCHAR

構文

用途

ROWIDTOCHARは、ROWIDの値をVARCHAR2データ型に変換します。この変換の結果は常に18文字です。

例

次の例では、employees表のROWID値を文字値に変換します。(結果はサンプル・データベースのビルドごとに異なります。)

SELECT ROWID FROM employees
WHERE ROWIDTOCHAR(ROWID) LIKE '%JAAB%'
ORDER BY ROWID;

ROWID
------------------
AAAFfIAAFAAAABSAAb

ROWIDTONCHAR

構文

用途

ROWIDTONCHARは、ROWID値をNVARCHAR2データ型に変換します。この変換の結果は常に各国語のキャラクタ・セットで、18文字の長さになります。

例

次の例では、ROWID値をNVARCHAR2文字列に変換します。

SELECT LENGTHB( ROWIDTONCHAR(ROWID) ) Length, ROWIDTONCHAR(ROWID)
FROM employees
ORDER BY length;

LENGTH ROWIDTONCHAR(ROWID
---------- ------------------
36 AAAL52AAFAAAABSABD
36 AAAL52AAFAAAABSABV
. . .

RPAD

構文

用途

RPADは、expr1の右にexpr2で指定した文字を必要に応じて連続的に埋め込み、長さnにして戻します。この関数は、問合せの出力を書式設定する場合に役立ちます。

expr1およびexpr2は、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBデータ型です。戻される文字列は、expr1が文字データ型の場合はVARCHAR2データ型、expr1が各国語キャラクタ・データ型の場合はNVARCHAR2データ型、expr1がLOBデータ型の場合はLOBデータ型になります。expr1と同じキャラクタ・セットの文字列が戻されます。引数nは、NUMBER型の整数か、またはNUMBER型の整数に暗黙的に変換可能な値である必要があります。

expr1はNULL以外である必要があります。expr2を指定しない場合、デフォルトで空白1個が指定されます。expr1がnより長い場合、このファンクションはnに収まるexpr1の一部を戻します。

引数nは、戻り値が画面に表示される場合の全体の長さです。ほとんどのキャラクタ・セットでは、戻り値の文字数です。ただし、一部のマルチバイト・キャラクタ・セットでは、文字列の表示長はその文字列の文字数と異なることがあります。

例

次の例では、空白にアスタリスクを埋め込んで、給与額の単純なチャートを作成します。

SELECT last_name, RPAD(' ', salary/1000/1, '*') "Salary"
FROM employees
WHERE department_id = 80
ORDER BY last_name, "Salary";

LAST_NAME                 Salary
------------------------- ---------------
Abel                       **********
Ande                       *****
Banda                      *****
Bates                      ******
Bernstein                  ********
Bloom                      *********
Cambrault                  **********
Cambrault                  ******
Doran                      ******
Errazuriz                  ***********
Fox                        ********
Greene                     ********
Hall                       ********
Hutton                     *******
Johnson                    *****
King                       *********
. . .

RTRIM

構文

用途

RTRIMは、charの右端から、setに指定されたすべての文字を削除します。この関数は、問合せの出力を書式設定する場合に役立ちます。

setを指定しない場合、デフォルトで空白1個が指定されます。RTRIMはLTRIMと同様の働きをします。

charおよびsetは、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBデータ型です。戻される文字列は、charが文字データ型の場合はVARCHAR2データ型、charが各国語キャラクタ・データ型の場合はNVARCHAR2データ型、charがLOBデータ型の場合はLOBデータ型になります。

関連項目:
「LTRIM」

例

次の例では、文字列の右端にあるすべての小なり記号(<)、大なり記号(>)および等号(=)を文字列から削除します。

SELECT RTRIM('<=====>BROWNING<=====>', '<>=') "RTRIM Example"
FROM DUAL;

RTRIM Example
---------------
<=====>BROWNING

SCN_TO_TIMESTAMP

構文

用途

SCN_TO_TIMESTAMPは、引数として、システム変更番号(SCN)と評価される数値を取り、そのSCNに関連付けられた概数のタイムスタンプを戻します。戻り値のデータ型はTIMESTAMPです。このファンクションは、SCNに関連付けられたタイムスタンプを調べる場合に有効です。たとえば、このファンクションをORA_ROWSCN疑似列とともに使用して、行への最新の変更にタイムスタンプを関連付けることができます。

注意:

- 結果値の通常の精度は3秒です。

- SCNとSCN生成時のタイムスタンプの関連は、一定期間データベースで記憶されます。この期間は、最大で自動調整されたUNDO保存期間(データベースが自動UNDO管理モードで実行されている場合)およびデータベース内のすべてのフラッシュバック・アーカイブの保存時間となりますが、120時間以上になります。関連が不要となるまでの経過時間には、データベースが開かれているときの時間のみが加算されます。SCN_TO_TIMESTAMPの引数に対して指定されたSCNが古すぎる場合は、エラーが戻されます。

関連項目:
「ORA_ROWSCN疑似列」および「TIMESTAMP_TO_SCN」を参照してください。

例

次の例では、ORA_ROWSCN疑似列を使用して行への最新の変更のシステム変更番号を判断し、SCN_TO_TIMESTAMPを使用してそのSCNをタイムスタンプに変換します。

SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) FROM employees
WHERE employee_id = 188;

このような問合せを使用して、Oracleフラッシュバック問合せで使用するためにシステム変更番号をタイムスタンプに変換することもできます。

SELECT salary FROM employees WHERE employee_id = 188;
SALARY
----------
3800

UPDATE employees SET salary = salary*10 WHERE employee_id = 188;
COMMIT;

SELECT salary FROM employees WHERE employee_id = 188;
SALARY
----------
38000

SELECT SCN_TO_TIMESTAMP(ORA_ROWSCN) FROM employees
WHERE employee_id = 188;
SCN_TO_TIMESTAMP(ORA_ROWSCN)
---------------------------------------------------------------------------
28-AUG-03 01.58.01.000000000 PM

FLASHBACK TABLE employees TO TIMESTAMP
TO_TIMESTAMP('28-AUG-03 01.00.00.000000000 PM');

SELECT salary FROM employees WHERE employee_id = 188;
SALARY
----------
3800

SESSIONTIMEZONE

構文

用途

SESSIONTIMEZONEは、現行セッションのタイムゾーンを返します。戻り型は、タイムゾーン・オフセット('[+|-]TZH:TZM'という書式の文字列型)またはタイムゾーン地域名です。これは、最近のALTER SESSION文でユーザーが指定したセッション・タイムゾーンの値によって異なります。

注意:
クライアントのオペレーティング・システムで特定のタイムゾーンを使用している場合でも、オフセットにはクライアント・セッションのデフォルトのタイムゾーンが使用されます。特定のタイムゾーンをデフォルトのセッション・タイムゾーンとして使用する場合は、クライアント環境のORA_SDTZ変数をOracleのタイムゾーン地域名に設定します。この変数の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

例

次の例では、現行のセッションのタイムゾーンを戻します。

SELECT SESSIONTIMEZONE FROM DUAL;

SESSION
-------
-08:00

SET

構文

用途

SETは、重複を排除することによってネストした表を単一の集合に変換します。このファンクションは、各要素が一意であるネストした表を戻します。戻されるネストした表のデータ型は、入力されたネストした表と同じです。

ネストした表の要素の型は、比較可能な型である必要があります。スカラー型以外の型の比較の可能性は、「比較条件」を参照してください。

例

次の例では、customers_demo表から、ネストした表列cust_address_ntabの一意の要素を選択します。

SELECT customer_id, SET(cust_address_ntab) address
FROM customers_demo
ORDER BY customer_id;

CUSTOMER_ID ADDRESS(STREET_ADDRESS, POSTAL_CODE, CITY, STATE_PROVINCE, COUNTRY_ID)
----------- ------------------------------------------------------------------------
101 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('514 W Superior St', '46901', 'Kokomo', 'IN', 'US'))
102 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('2515 Bloyd Ave', '46218', 'Indianapolis', 'IN', 'US'))
103 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('8768 N State Rd 37', '47404', 'Bloomington', 'IN', 'US'))
104 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('6445 Bay Harbor Ln', '46254', 'Indianapolis', 'IN', 'US'))
105 CUST_ADDRESS_TAB_TYP(CUST_ADDRESS_TYP('4019 W 3Rd St', '47404', 'Bloomington', 'IN', 'US'))
. . .

この例では、表customers_demoと、データを含むネストした表の列が1つ必要です。この表およびネストした表の列を作成する方法については、「MULTISET演算子」を参照してください。

SIGN

構文

用途

SIGNは、nの符号を戻します。このファンクションは、引数として、任意の数値データ型、または暗黙的にNUMBERに変換可能な数値以外のデータ型を取り、NUMBERを戻します。

NUMBER型の値の場合、符号は次のとおりです。

- n<0(ゼロ)の場合、-1

- n=0の場合、0(ゼロ)

- n>0の場合、1

浮動小数点数(BINARY_FLOATおよびBINARY_DOUBLE)の場合、このファンクションは数値の符号ビットを戻します。符号ビットは次のようになります。

- n<0(ゼロ)の場合、-1

- n>=0またはn=NaNの場合、+1

例

次の例では、ファンクションの引数(-15)が0より小さいことを示します。

SELECT SIGN(-15) "Sign" FROM DUAL;

Sign
----------
-1

SIN

構文

用途

SINは、n(ラジアンで表された角度)のサインを戻します。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。引数がBINARY_FLOATの場合、このファンクションはBINARY_DOUBLEを戻します。それ以外の場合、引数と同じ数値データ型を戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

例

次の例では、30度のサインを戻します。

SELECT SIN(30 * 3.14159265359/180)
"Sine of 30 degrees" FROM DUAL;

Sine of 30 degrees
------------------
.5

SINH

構文

用途

SINHは、nの双曲線サインを戻します。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。引数がBINARY_FLOATの場合、このファンクションはBINARY_DOUBLEを戻します。それ以外の場合、引数と同じ数値データ型を戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

例

次の例では、1の双曲線サインを戻します。

SELECT SINH(1) "Hyperbolic sine of 1" FROM DUAL;

Hyperbolic sine of 1
--------------------
1.17520119

SOUNDEX

構文

用途

SOUNDEXは、charと同じ音声表現を持つ文字列を戻します。このファンクションを使用すると、綴りが異なっても発音が類似した英単語を比較できます。

音声表現については、『The Art of Computer Programming, Volume 3: Sorting and Searching』(Donald E. Knuth著)で次のように定義されています。

1. 文字列の最初の文字を残し、a、e、h、i、o、u、w、yの文字が出てきた場合にはすべて削除します。

2. 残った2文字目以降の文字に対し、次のように数値を割り当てます。

b, f, p, v = 1
c, g, j, k, q, s, x, z = 2
d, t = 3
l = 4
m, n = 5
r = 6

3. 元の名前(最初の手順を行う前)で、同じ数値を持つ2つ以上の文字が並んでいるか、または挟まれているhとwを除外すると同じ数値を持つ2つ以上の文字が並んでしまう場合は、最初の文字を残してそれ以外の並んでいる同じ数値の文字をすべて削除します。

4. 最初の4バイトを0(ゼロ)で埋めて戻します。

charは、CHAR、VARCHAR2、NCHARまたはNVARCHAR2データ型です。戻り値は、charと同じデータ型です。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。

関連項目:
詳細は、「データ型の比較規則」を参照してください。

例

次の例では、「Smyth」と同じ音声表現を持つ従業員を戻します。

SELECT last_name, first_name
FROM hr.employees
WHERE SOUNDEX(last_name)
= SOUNDEX('SMYTHE')
ORDER BY last_name, first_name;

LAST_NAME  FIRST_NAME
---------- ----------
Smith      Lindsey
Smith      William

SQRT

構文

用途

SQRTは、nの平方根を戻します。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

- nがNUMBERになる場合、値nは負にはなりません。SQRTは実数を戻します。

- nが2進浮動小数点数(BINARY_FLOATまたはBINARY_DOUBLE)になる場合、結果は次のとおりです。

- n >= 0の場合、結果は正。

- n = -0の場合、結果は-0。

- n < 0の場合、結果はNaN。

例

次の例では、26の平方根を戻します。

SELECT SQRT(26) "Square root" FROM DUAL;

Square root
-----------
5.09901951

STANDARD_HASH

構文

用途

STANDARD_HASHは、複数のハッシュ・アルゴリズムのいずれかを使用して、特定の式のハッシュ値を計算します。このハッシュ・アルゴリズムは、米国標準技術局(NIST)で定義され、標準化されています。このファンクションは、セキュリティ・アプリケーション(デジタル署名、チェックサム、指紋認証など)で認証を実行して、データ整合性を維持するために役立ちます。

STANDARD_HASHファンクションを使用すると、拡張データ型の列に索引を作成できます。詳細は、「拡張データ型の列に対する索引の作成」を参照してください。

- expr引数には、Oracle Databaseでハッシュ値を計算するデータを指定します。exprに指定できるデータの長さに制限はありません。このデータは通常、列名です。exprは、LONG型またはLOB型にすることはできません。ユーザー定義のオブジェクト型にすることはできません。その他のデータ型はすべて、exprでサポートされています。

- オプションのmethod引数を使用すると、どのハッシュ・アルゴリズムを使用するかを指定できます。有効なアルゴリズムは、SHA1、SHA256、SHA384、SHA512、およびMD5です。この引数を省略すると、SHA1が使用されます。

このファンクションは、RAW値を返します。

注意:
STANDARD_HASHファンクションは、Oracle Databaseの内部でハッシュ・パーティション化のために使用されるものと同じではありません。

STATS_BINOMIAL_TEST

構文

用途

STATS_BINOMIAL_TESTは、有効な値が2つのみである二値変数に使用する直接確立法です。このファンクションは、標本の割合と指定された割合との差をテストします。このテストでは通常、小さいサイズの標本が使用されます。

このファンクションは3つの必須の引数を取ります。expr1はテスト対象の標本、expr2は割合を求める値、pはテストの基準となる割合です。オプションの4つ目の引数を使用すると、表7-3に示すように、このファンクションによって戻されるNUMBER値の意味を指定できます。この引数には、テキスト・リテラル、バインド変数または定数の文字値に評価される式を指定できます。4つ目の引数を指定しない場合、デフォルトは'TWO_SIDED_PROB'です。

表7-3 STATS_BINOMIALの戻り値

引数

戻り値の意味

'TWO_SIDED_PROB'

指定された母集団の割合pが、観測された割合より外側になる確率。

'EXACT_PROB'

指定された母集団の割合pが、観測された割合と正確に同じ値になる確率。

'ONE_SIDED_PROB_OR_MORE'

指定された母集団の割合pが、観測された割合以上になる確率。

'ONE_SIDED_PROB_OR_LESS'

指定された母集団の割合pが、観測された割合以下になる確率。

'EXACT_PROB'では、pと一致する割合が戻される確率が戻されます。標本における割合が、50%と大幅に異なるか(有意差があるか)どうかをテストする場合、通常、pを0.50に設定します。割合が異なるかどうかのみをテストする場合、戻り値に'TWO_SIDED_PROB'を使用します。割合がexpr2の値より大きいかどうかをテストする場合、戻り値に'ONE_SIDED_PROB_OR_MORE'を使用します。割合がexpr2より小さいかどうかをテストする場合、戻り値に'ONE_SIDED_PROB_OR_LESS'を使用します。

STATS_BINOMIAL_TESTの例 次の例では、母集団の69%が男性であるという仮定に基づいて観測された男性数が、実際の男性数と正確に同一となる確率を判断します。

SELECT AVG(DECODE(cust_gender, 'M', 1, 0)) real_proportion,
STATS_BINOMIAL_TEST
(cust_gender, 'M', 0.68, 'EXACT_PROB') exact,
STATS_BINOMIAL_TEST
(cust_gender, 'M', 0.68, 'ONE_SIDED_PROB_OR_LESS') prob_or_less
FROM sh.customers;

STATS_CROSSTAB

構文

用途

クロス集計は、2つの名義変数の分析に使用する方法です。STATS_CROSSTABファンクションは2つの必須の引数を取ります。分析対象の2つの変数はexpr1とexpr2です。オプションの3つ目の引数を使用すると、表7-4に示すように、このファンクションによって戻されるNUMBER値の意味を指定できます。この引数には、テキスト・リテラル、バインド変数または定数の文字値に評価される式を指定できます。3つ目の引数を指定しない場合、デフォルトは'CHISQ_SIG'です。

表7-4 STATS_CROSSTABの戻り値

引数

戻り値の意味

'CHISQ_OBS'

カイ2乗の測定値

'CHISQ_SIG'

カイ2乗の測定値の有意性

'CHISQ_DF'

カイ2乗の自由度

'PHI_COEFFICIENT'

ファイ係数

'CRAMERS_V'

クラメールのV統計

'CONT_COEFFICIENT'

コンティンジェンシー係数

'COHENS_K'

コーエンのカッパ

STATS_CROSSTABの例 次の例では、性別と収入水準の関連の強さを判断します。

SELECT STATS_CROSSTAB
(cust_gender, cust_income_level, 'CHISQ_OBS') chi_squared,
STATS_CROSSTAB
(cust_gender, cust_income_level, 'CHISQ_SIG') p_value,
STATS_CROSSTAB
(cust_gender, cust_income_level, 'PHI_COEFFICIENT') phi_coefficient
FROM sh.customers;

CHI_SQUARED    P_VALUE PHI_COEFFICIENT
----------- ---------- ---------------
251.690705 1.2364E-47      .067367056

STATS_F_TEST

構文

用途

STATS_F_TESTは、2つの分散に有意差があるかどうかをテストします。fの観測値は、他方の分散に対する一方の分散の比率です。この値が1と大きく異なる場合は、通常、有意差があることを示しています。

このファンクションは2つの必須の引数を取ります。expr1はグループ変数または独立変数で、expr2は値の標本です。オプションの3つ目の引数を使用すると、表7-5に示すように、このファンクションによって戻されるNUMBER値の意味を指定できます。この引数には、テキスト・リテラル、バインド変数または定数の文字値に評価される式を指定できます。3つ目の引数を指定しない場合、デフォルトは'TWO_SIDED_SIG'です。

表7-5 STATS_F_TESTの戻り値

引数

戻り値の意味

'STATISTIC'

fの観測値

'DF_NUM'

分子の自由度

'DF_DEN'

分母の自由度

'ONE_SIDED_SIG'

fの片側有意

'TWO_SIDED_SIG'

fの両側有意

片側有意は常に上側確率に関連します。最後の引数expr3は、expr1で指定した2つのグループのうち、大きい値または分子(棄却域が上側確率の値)のグループを示します。

fの観測値は、2つ目のグループの分散に対する1つ目のグループの分散の比率です。fの観測値の有意性は、2つの分散が偶然に異なる確率で、0(ゼロ)から1の数値です。この有意性の値が小さい場合、2つの分散に有意差があることを示しています。各分散の自由度は、標本における観測数から1を引いた値です。

STATS_F_TESTの例 次の例では、男性と女性のクレジット利用限度額に有意差があるかどうかを判断します。p_valueが0(ゼロ)に近くなく、f_statisticが1に近いという結果は、男性と女性のクレジット利用限度額の差が有意でないことを示しています。

SELECT VARIANCE(DECODE(cust_gender, 'M', cust_credit_limit, null)) var_men,
VARIANCE(DECODE(cust_gender, 'F', cust_credit_limit, null)) var_women,
STATS_F_TEST(cust_gender, cust_credit_limit, 'STATISTIC', 'F') f_statistic,
STATS_F_TEST(cust_gender, cust_credit_limit) two_sided_p_value
FROM sh.customers;

VAR_MEN  VAR_WOMEN F_STATISTIC TWO_SIDED_P_VALUE
---------- ---------- ----------- -----------------
12879896.7   13046865  1.01296348        .311928071

STATS_KS_TEST

構文

用途

STATS_KS_TESTは、2つの標本を比較して、それらが同じ母集団に属しているか、または同じ分布を持つ母集団に属しているかをテストするKolmogorov-Smirnovファンクションです。このファンクションでは、標本の母集団が正規分布に従うとは仮定されません。

このファンクションは2つの必須の引数を取ります。expr1には、データを2つの標本に分類する値を指定し、expr2には各標本の値を指定します。expr1に、データを1つのみか3つ以上の標本に分類する値を指定すると、エラーが発生します。オプションの3つ目の引数を使用すると、表7-6に示すように、このファンクションによって戻されるNUMBER値の意味を指定できます。この引数には、テキスト・リテラル、バインド変数または定数の文字値に評価される式を指定できます。3つ目の引数を指定しない場合、デフォルトは'SIG'です。

表7-6 STATS_KS_TESTの戻り値

引数

戻り値の意味

'STATISTIC'

Dの観測値

'SIG'

Dの有意性

STATS_KS_TESTの例 次の例では、Kolmogorov-Smirnov検定を使用して、男性と女性に対する売上の分布が偶然であるかどうかを判断します。

SELECT stats_ks_test(cust_gender, amount_sold, 'STATISTIC') ks_statistic,
stats_ks_test(cust_gender, amount_sold) p_value
FROM sh.customers c, sh.sales s
WHERE c.cust_id = s.cust_id;

KS_STATISTIC    P_VALUE
------------ ----------
.003841396 .004080006

STATS_MODE

構文

用途

STATS_MODEは、引数として値の集合を取り、最も出現頻度の高い値を戻します。複数の最頻値が存在する場合、Oracle Databaseは1つの最頻値を選択し、その値のみを戻します。

複数の最頻値(存在する場合)を取得する場合は、次の不確定な問合せに示すとおり、他のファンクションの組合せを使用する必要があります。

SELECT x FROM (SELECT x, COUNT(x) AS cnt1
FROM t GROUP BY x)
WHERE cnt1 =
(SELECT MAX(cnt2) FROM (SELECT COUNT(x) AS cnt2 FROM t GROUP BY x));

例

次の例では、hr.employees表の部門ごとの給与の最頻値を戻します。

SELECT department_id, STATS_MODE(salary) FROM employees
GROUP BY department_id
ORDER BY department_id, stats_mode(salary);

DEPARTMENT_ID STATS_MODE(SALARY)
------------- ------------------
10               4400
20               6000
30               2500
40               6500
50               2500
60               4800
70              10000
80               9500
90              17000
100               6900
110               8300
7000

複数の最頻値が存在し、そのすべての最頻値を取得する必要がある場合は、次の例に示すとおり、他のファンクションの組合せを使用します。

SELECT commission_pct FROM
(SELECT commission_pct, COUNT(commission_pct) AS cnt1 FROM employees
GROUP BY commission_pct)
WHERE cnt1 =
(SELECT MAX (cnt2) FROM
(SELECT COUNT(commission_pct) AS cnt2
FROM employees GROUP BY commission_pct))
ORDER BY commission_pct;

COMMISSION_PCT
--------------
.2
.3

STATS_MW_TEST

構文

用途

Mann-Whitney検定では、2つの独立した標本を比較して、2つの母集団が同じ分布ファンクションを持つという帰無仮説を、2つの分布ファンクションは異なるという対立仮説に対してテストします。

STATS_MW_TESTでは、STATS_T_TEST_*ファンクションとは異なり、標本間の差が正規分布するとは仮定されません。このファンクションは2つの必須の引数を取ります。expr1には、データをグループに分類する値を指定し、expr2には各グループの値を指定します。オプションの3つ目の引数を使用すると、表7-7に示すように、このファンクションによって戻されるNUMBER値の意味を指定できます。この引数には、テキスト・リテラル、バインド変数または定数の文字値に評価される式を指定できます。3つ目の引数を指定しない場合、デフォルトは'TWO_SIDED_SIG'です。

表7-7 STATS_MW_TESTの戻り値

引数

戻り値の意味

'STATISTIC'

Zの観測値

'U_STATISTIC'

Uの観測値

'ONE_SIDED_SIG'

Zの片側有意

'TWO_SIDED_SIG'

Zの両側有意

ZまたはUの観測値の有意性は、2つの分散が偶然に異なる確率で、0(ゼロ)から1の数値です。この有意性の値が小さい場合、2つの分散に有意差があることを示しています。各分散の自由度は、標本における観測数から1を引いた値です。

片側有意は常に上側確率に関連します。最後の引数expr3は、expr1で指定した2つのグループのうち、大きい値(棄却域が上側確率の値)のグループを示します。

STATS_MW_TESTは、値の順位の合計における差を確認して、標本が同じ分布からのものである確率を計算します。標本が同じ分布に属している場合、各標本の合計値は近くなります。

STATS_MW_TESTの例 次の例では、Mann-Whitney検定を使用して、男性と女性に対する売上の分布が偶然であるかどうかを判断します。

SELECT STATS_MW_TEST
(cust_gender, amount_sold, 'STATISTIC') z_statistic,
STATS_MW_TEST
(cust_gender, amount_sold, 'ONE_SIDED_SIG', 'F') one_sided_p_value
FROM sh.customers c, sh.sales s
WHERE c.cust_id = s.cust_id;

Z_STATISTIC ONE_SIDED_P_VALUE
----------- -----------------
-1.4011509        .080584471

STATS_ONE_WAY_ANOVA

構文

用途

STATS_ONE_WAY_ANOVAファンクションによる一元配置分散分析では、分散の2つの異なる推定値を比較して、(複数のグループまたは変数の)平均値の差をテストして統計学的有意差を求めます。1つ目の推定値は、各グループまたはカテゴリ内の分散に基づきます。これは、群内平均平方または平均平方誤差と呼ばれます。2つ目の推定値は、グループの平均値の分散に基づきます。これは、群間平均平方と呼ばれます。グループの平均値に有意差がある場合、その群間平均平方は期待値より大きくなり、群内平均平方に一致しません。グループの平均平方が一貫している場合、2つの分散の推定値はほぼ同じになります。

STATS_ONE_WAY_ANOVAは、2つの必須の引数を取ります。expr1には、データをグループの集合に分割する独立変数またはグループ変数を指定し、expr2には、グループの各メンバーに対応する値を含む従属変数(数式)を指定します。オプションの3つ目の引数を使用すると、表7-8に示すように、このファンクションによって戻されるNUMBER値の意味を指定できます。この引数には、テキスト・リテラル、バインド変数または定数の文字値に評価される式を指定できます。3つ目の引数を指定しない場合、デフォルトは'SIG'です。

表7-8 STATS_ONE_WAY_ANOVAの戻り値

引数

戻り値の意味

'SUM_SQUARES_BETWEEN'

グループ間平方和

'SUM_SQUARES_WITHIN'

グループ内平方和

'DF_BETWEEN'

グループ間の自由度

'DF_WITHIN'

グループ内の自由度

'MEAN_SQUARES_BETWEEN'

グループ間平均平方

'MEAN_SQUARES_WITHIN'

グループ内平均平方

'F_RATIO'

群内平均平方に対する群間平均平方の比率(MSB(グループ間平均平方)/MSW(グループ内平均平方))

'SIG'

有意性

一元配置分散分析の有意性は群間平均平方と群内平均平方の比率に対するf検定の片側有意を求めることによって判断されます。f検定では片側有意を使用する必要があります。これは、群間平均平方は、群内平均平方以上のみになるためです。そのため、STATS_ONE_WAY_ANOVAが戻す有意性は、グループ間の差が偶然である確率で、0(ゼロ)から1の数値です。この数値が小さいほど、グループ間の有意差が大きくなります。f検定の実行の詳細は、「STATS_F_TEST」を参照してください。

STATS_ONE_WAY_ANOVAの例 次の例では、収入水準内での売上平均の差と、収入水準間での売上平均の差の有意性を判断します。p_valuesが0(ゼロ)に近いという結果は、男性と女性の両方に対して、様々な収入水準の人々に販売された商品の金額には有意差があることを示しています。

SELECT cust_gender,
STATS_ONE_WAY_ANOVA(cust_income_level, amount_sold, 'F_RATIO') f_ratio,
STATS_ONE_WAY_ANOVA(cust_income_level, amount_sold, 'SIG') p_value
FROM sh.customers c, sh.sales s
WHERE c.cust_id = s.cust_id
GROUP BY cust_gender
ORDER BY cust_gender;

C    F_RATIO    P_VALUE
- ---------- ----------
F 5.59536943 4.7840E-09
M  9.2865001 6.7139E-17

STATS_T_TEST_*

t検定ファンクションを次に示します。

- STATS_T_TEST_ONE: 1標本t検定

- STATS_T_TEST_PAIRED: 対応のある2標本t検定(クロスt検定とも呼ばれる)

- STATS_T_TEST_INDEP: 同じ分散(併合分散)を持つ独立した2つのグループのt検定

- STATS_T_TEST_INDEPU: 異なる分散(非併合分散)を持つ独立した2つのグループのt検定

構文

stats_t_test::=

用途

t検定では、平均値の差の有意性を測定します。この検定を使用して、2つのグループの平均値の比較、または1つのグループの平均値と定数の比較を行えます。t検定ファンクションは2つの式引数を取ります。ただし、2つ目の式は、1標本ファンクション(STATS_T_TEST_ONE)のオプションです。各t検定ファンクションでオプションの3つ目の引数を使用すると、表7-9に示すように、このファンクションによって戻されるNUMBER値の意味を指定できます。この引数には、テキスト・リテラル、バインド変数または定数の文字値に評価される式を指定できます。3つ目の引数を指定しない場合、デフォルトは'TWO_SIDED_SIG'です。

表7-9 STATS_T_TEST_*の戻り値

引数

戻り値の意味

'STATISTIC'

tの観測値

'DF'

Degree of freedom

'ONE_SIDED_SIG'

tの片側有意

'TWO_SIDED_SIG'

tの両側有意

2つの独立したSTATS_T_TEST_*ファンクションは、3つ目の引数が'STATISTIC'または'ONE_SIDED_SIG'として指定されている場合、4つ目の引数(expr3)を取ることができます。この場合、expr3は、expr1のどちらの値が大きい値(棄却域が上側確率の値)であるかを示します。

tの観測値の有意性は、tの値が偶然得られた確率で、0(ゼロ)から1の数値です。この値が小さいほど、平均値間の有意差が大きくなります。片側有意は常に上側確率に関連します。1標本および対応のあるt検定の場合、最初の式が大きい値になります。独立したt検定の場合、expr3で指定した値が大きい値になります。

自由度は、tの観測値を求めるために使用したt検定の種類によって異なります。たとえば、1標本t検定(STATS_T_TEST_ONE)の場合、自由度は標本における観測数から1を引いた値です。

STATS_T_TEST_ONE

STATS_T_TEST_ONEファンクションでは、expr1には標本を指定し、expr2には標本平均値の比較対象となる定数平均値を指定します。t検定の場合にのみ、expr2はオプションとなります。定数平均値は、デフォルトで0になります。このファンクションは、標本平均値と既知の平均値の差を、平均値の標準誤差で割ってt値を求めます(STATS_T_TEST_PAIREDでは、平均値の差の標準誤差で割ります)。

STATS_T_TEST_ONEの例 次の例では、平均表示価格と定数値60の差の有意性を判断します。

SELECT AVG(prod_list_price) group_mean,
STATS_T_TEST_ONE(prod_list_price, 60, 'STATISTIC') t_observed,
STATS_T_TEST_ONE(prod_list_price, 60) two_sided_p_value
FROM sh.products;

GROUP_MEAN T_OBSERVED TWO_SIDED_P_VALUE
---------- ---------- -----------------
139.545556 2.32107746        .023158537

STATS_T_TEST_PAIRED

STATS_T_TEST_PAIREDファンクションでは、expr1およびexpr2には、比較する平均値の計算元の2つの標本をそれぞれ指定します。このファンクションは、標本平均値の差を、平均値の差の標準誤差で割ってt値を求めます(STATS_T_TEST_ONEでは、平均値の標準誤差で割ります)。

STATS_T_TEST_INDEPおよびSTATS_T_TEST_INDEPU

STATS_T_TEST_INDEPおよびSTATS_T_TEST_INDEPUファンクションでは、expr1はグループ列で、expr2は値の標本です。併合分散用のファンクション(STATS_T_TEST_INDEP)は、同様の分散を持つ2つの分布において、平均値が同じか異なるかをテストします。非併合分散用のファンクション(STATS_T_TEST_INDEPU)は、既知の有意差のある分散を持つ2つの分布においても、平均値が同じか異なるかをテストします。

これらのファンクションを使用する前に、標本の分散に有意差があるかどうかを判断しておくことをお薦めします。有意差がある場合、そのデータは異なる形状の分布に属している可能性があり、平均値の差が有効でない場合があります。f検定を実行して、分散の差を判断できます。分散に有意差がない場合、STATS_T_TEST_INDEPを使用します。有意差がある場合は、STATS_T_TEST_INDEPUを使用します。f検定の実行の詳細は、「STATS_F_TEST」を参照してください。

STATS_T_TEST_INDEPの例 次の例では、各分布の分散が同様である(併合分散)として、男性と女性に対する平均売上間の差の有意性を判断します。

SELECT SUBSTR(cust_income_level, 1, 22) income_level,
AVG(DECODE(cust_gender, 'M', amount_sold, null)) sold_to_men,
AVG(DECODE(cust_gender, 'F', amount_sold, null)) sold_to_women,
STATS_T_TEST_INDEP(cust_gender, amount_sold, 'STATISTIC', 'F') t_observed,
STATS_T_TEST_INDEP(cust_gender, amount_sold) two_sided_p_value
FROM sh.customers c, sh.sales s
WHERE c.cust_id = s.cust_id
GROUP BY ROLLUP(cust_income_level)
ORDER BY income_level, sold_to_men, sold_to_women, t_observed;

INCOME_LEVEL           SOLD_TO_MEN SOLD_TO_WOMEN T_OBSERVED TWO_SIDED_P_VALUE
---------------------- ----------- ------------- ---------- -----------------
A: Below 30,000          105.28349    99.4281447 -1.9880629        .046811482
B: 30,000 - 49,999       102.59651    109.829642 3.04330875        .002341053
C: 50,000 - 69,999      105.627588    110.127931 2.36148671        .018204221
D: 70,000 - 89,999      106.630299     110.47287 2.28496443        .022316997
E: 90,000 - 109,999     103.396741    101.610416 -1.2544577        .209677823
F: 110,000 - 129,999     106.76476    105.981312 -.60444998        .545545304
G: 130,000 - 149,999    108.877532     107.31377 -.85298245        .393671218
H: 150,000 - 169,999    110.987258    107.152191 -1.9062363        .056622983
I: 170,000 - 189,999    102.808238     107.43556 2.18477851        .028908566
J: 190,000 - 249,999    108.040564    115.343356 2.58313425        .009794516
K: 250,000 - 299,999    112.377993    108.196097 -1.4107871        .158316973
L: 300,000 and above    120.970235    112.216342 -2.0642868        .039003862
107.121845     113.80441 .686144393        .492670059
106.663769    107.276386 1.08013499        .280082357
14 rows selected.

STATS_T_TEST_INDEPUの例 次の例では、各分布の分散に既知の有意差がある(非併合分散)として、男性と女性に対する平均売上間の差の有意性を判断します。

SELECT SUBSTR(cust_income_level, 1, 22) income_level,
AVG(DECODE(cust_gender, 'M', amount_sold, null)) sold_to_men,
AVG(DECODE(cust_gender, 'F', amount_sold, null)) sold_to_women,
STATS_T_TEST_INDEPU(cust_gender, amount_sold, 'STATISTIC', 'F') t_observed,
STATS_T_TEST_INDEPU(cust_gender, amount_sold) two_sided_p_value
FROM sh.customers c, sh.sales s
WHERE c.cust_id = s.cust_id
GROUP BY ROLLUP(cust_income_level)
ORDER BY income_level, sold_to_men, sold_to_women, t_observed;

INCOME_LEVEL           SOLD_TO_MEN SOLD_TO_WOMEN T_OBSERVED TWO_SIDED_P_VALUE
---------------------- ----------- ------------- ---------- -----------------
A: Below 30,000          105.28349    99.4281447 -2.0542592        .039964704
B: 30,000 - 49,999       102.59651    109.829642 2.96922332        .002987742
C: 50,000 - 69,999      105.627588    110.127931  2.3496854        .018792277
D: 70,000 - 89,999      106.630299     110.47287 2.26839281        .023307831
E: 90,000 - 109,999     103.396741    101.610416 -1.2603509        .207545662
F: 110,000 - 129,999     106.76476    105.981312 -.60580011        .544648553
G: 130,000 - 149,999    108.877532     107.31377 -.85219781        .394107755
H: 150,000 - 169,999    110.987258    107.152191 -1.9451486        .051762624
I: 170,000 - 189,999    102.808238     107.43556 2.14966921        .031587875
J: 190,000 - 249,999    108.040564    115.343356 2.54749867        .010854966
K: 250,000 - 299,999    112.377993    108.196097 -1.4115514        .158091676
L: 300,000 and above    120.970235    112.216342 -2.0726194        .038225611
107.121845     113.80441 .689462437        .490595765
106.663769    107.276386 1.07853782        .280794207
14 rows selected.

STATS_WSR_TEST

構文

用途

STATS_WSR_TESTは、対応のある標本のウィルコクソンの符号順位検定であり、標本間の差の中央値と0(ゼロ)に有意差があるかどうかを判断します。差の絶対値は、標本を順序付けし、順位に符号を付けて求められます。また、帰無仮説によって、正の差の順位の合計が、負の差の順位の合計に等しいと仮定されます。

このファンクションは2つの必須の引数を取ります。分析対象の2つの標本はexpr1とexpr2です。オプションの3つ目の引数を使用すると、表7-10に示すように、このファンクションによって戻されるNUMBER値の意味を指定できます。この引数には、テキスト・リテラル、バインド変数または定数の文字値に評価される式を指定できます。3つ目の引数を指定しない場合、デフォルトは'TWO_SIDED_SIG'です。

表7-10 STATS_WSR_TEST_*の戻り値

引数

戻り値の意味

'STATISTIC'

Zの観測値

'ONE_SIDED_SIG'

Zの片側有意

'TWO_SIDED_SIG'

Zの両側有意

片側有意は常に上側確率に関連します。expr1が大きい値(棄却域が上側確率の値)になります。

STDDEV

構文

関連項目:
構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

STDDEVは、数値の集合であるexprの標本標準偏差を戻します。これは、集計ファンクションまたは分析ファンクションとして使用できます。このファンクションは、STDDEV_SAMPがNULLを戻すことに対して、入力データが1行のみの場合にSTDDEVが0(ゼロ)を戻すという点で、STDDEV_SAMPと異なります。

Oracle Databaseは、VARIANCE集計ファンクションに対して定義された分散の平方根として標準偏差を計算します。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

DISTINCTを指定する場合は、analytic_clauseのquery_partition_clauseのみ指定できます。order_by_clauseおよびwindowing_clauseは指定できません。

関連項目:

- 「集計ファンクション」、「VARIANCE」および「STDDEV_SAMP」を参照してください。

- exprの書式の詳細は、「SQL式」を参照してください。

集計の例

次の例では、サンプル表hr.employeesの給与値の標本標準偏差を戻します。

SELECT STDDEV(salary) "Deviation"
FROM employees;

Deviation
----------
3909.36575

分析の例

次の例では、hire_dateで順序付けられたサンプル表hr.employeesの部門80の給与の値の累積標準偏差を戻します。

SELECT last_name, salary,
STDDEV(salary) OVER (ORDER BY hire_date) "StdDev"
FROM employees
WHERE department_id = 30
ORDER BY last_name, salary, "StdDev";

LAST_NAME                     SALARY     StdDev
------------------------- ---------- ----------
Baida                           2900 4035.26125
Colmenares                      2500 3362.58829
Himuro                          2600  3649.2465
Khoo                            3100 5586.14357
Raphaely                       11000          0
Tobias                          2800  4650.0896

STDDEV_POP

構文

関連項目:
構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

STDDEV_POPは母集団標準偏差を計算し、母集団分散の平方根を戻します。これは、集計ファンクションまたは分析ファンクションとして使用できます。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

このファンクションは、VAR_POPファンクションの平方根と同じです。VAR_POPがNULLを戻す場合、このファンクションもNULLを戻します。

関連項目:

- 「集計ファンクション」および「VAR_POP」を参照してください。

- exprの書式の詳細は、「SQL式」を参照してください。

集計の例

次の例では、サンプル表sh.salesにある売上高の母集団標準偏差および標本標準偏差を戻します。

SELECT STDDEV_POP(amount_sold) "Pop",
STDDEV_SAMP(amount_sold) "Samp"
FROM sales;

Pop       Samp
---------- ----------
896.355151 896.355592

分析の例

次の例では、サンプル表hr.employeesの部門ごとの給与の母集団標準偏差を戻します。

SELECT department_id, last_name, salary,
STDDEV_POP(salary) OVER (PARTITION BY department_id) AS pop_std
FROM employees
ORDER BY department_id, last_name, salary, pop_std;

DEPARTMENT_ID LAST_NAME                     SALARY    POP_STD
------------- ------------------------- ---------- ----------
10 Whalen                          4400          0
20 Fay                             6000       3500
20 Hartstein                      13000       3500
30 Baida                           2900  3069.6091
. . .
100 Urman                           7800 1644.18166
110 Gietz                           8300       1850
110 Higgins                        12000       1850
Grant                           7000          0

STDDEV_SAMP

構文

関連項目:
構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

STDDEV_SAMPは標本累積標準偏差を計算し、標本分散の平方根を戻します。これは、集計ファンクションまたは分析ファンクションとして使用できます。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を返します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

このファンクションは、VAR_SAMPファンクションの平方根と同じです。VAR_SAMPがNULLを戻す場合、このファンクションもNULLを戻します。

関連項目:

- 「集計ファンクション」および「VAR_SAMP」を参照してください。

- exprの書式の詳細は、「SQL式」を参照してください。

集計の例

「STDDEV_POP」の集計の例を参照してください。

分析の例

次の例では、employees表の部門ごとの給与の標本標準偏差を戻します。

SELECT department_id, last_name, hire_date, salary,
STDDEV_SAMP(salary) OVER (PARTITION BY department_id
ORDER BY hire_date
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cum_sdev
FROM employees
ORDER BY department_id, last_name, hire_date, salary, cum_sdev;

DEPARTMENT_ID LAST_NAME       HIRE_DATE     SALARY   CUM_SDEV
------------- --------------- --------- ---------- ----------
10 Whalen          17-SEP-03       4400
20 Fay             17-AUG-05       6000 4949.74747
20 Hartstein       17-FEB-04      13000
30 Baida           24-DEC-05       2900 4035.26125
30 Colmenares      10-AUG-07       2500 3362.58829
30 Himuro          15-NOV-06       2600  3649.2465
30 Khoo            18-MAY-03       3100 5586.14357
30 Raphaely        07-DEC-02      11000
. . .
100 Greenberg       17-AUG-02      12008  2126.9772
100 Popp            07-DEC-07       6900 1804.13155
100 Sciarra         30-SEP-05       7700 1929.76233
100 Urman           07-MAR-06       7800 1788.92504
110 Gietz           07-JUN-02       8300 2621.95194
110 Higgins         07-JUN-02      12008
Grant           24-MAY-07       7000

SUBSTR

構文

substr::=

用途

SUBSTRの各ファンクションは、charのpositionの文字からsubstring_length文字分の文字列を抜き出して戻します。SUBSTRは、入力キャラクタ・セットによって定義された文字を使用して、長さを計算します。SUBSTRBには、文字でなくバイトを使用します。SUBSTRCは、完全なUnicodeキャラクタを使用します。SUBSTR2は、UCS2コードポイントを使用します。SUBSTR4は、UCS4コードポイントを使用します。

- positionが0の場合、1として処理されます。

- positionが正の場合、Oracle Databaseはcharの始めから数えて最初の文字を検索します。

- positionが負の場合、Oracleはcharの終わりから逆方向に数えます。

- substring_lengthを指定しないと、Oracleはcharの終わりまでのすべての文字を戻します。substring_lengthが1より小さい場合、NULLを戻します。

charのデータ型は、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBです。例外は、SUBSTRC、SUBSTR2およびSUBSTR4です。これらでは、charをCLOBおよびNCLOBのいずれにもできません。positionおよびsubstring_lengthは、NUMBERデータ型か、または暗黙的にNUMBERに変換可能な任意のデータ型で、整数である必要があります。戻り値は、charと同じデータ型です。引数としてSUBSTRに渡された浮動小数点数は、自動的に整数に変換されます。

関連項目:
異なるロケールでのSUBSTRファンクションおよび長さセマンティクスの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

例

次の例では、「ABCDEFG」の指定されたサブストリングを戻します。

SELECT SUBSTR('ABCDEFG',3,4) "Substring"
FROM DUAL;

Substring
---------
CDEF

SELECT SUBSTR('ABCDEFG',-5,4) "Substring"
FROM DUAL;

Substring
---------
CDEF

データベース・キャラクタ・セットがダブルバイトの場合を想定します。

SELECT SUBSTRB('ABCDEFG',5,4.2) "Substring with bytes"
FROM DUAL;

Substring with bytes
--------------------
CD

SUM

構文

関連項目:
構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

SUMは、exprの値の合計を戻します。これは、集計ファンクションまたは分析ファンクションとして使用できます。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を返します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

DISTINCTを指定する場合は、analytic_clauseのquery_partition_clauseのみ指定できます。order_by_clauseおよびwindowing_clauseは指定できません。

関連項目:
exprの書式の詳細は、「SQL式」を参照してください。「集計ファンクション」も参照してください。

集計の例

次の例では、サンプル表hr.employeesにあるすべての給与の合計を計算します。

SELECT SUM(salary) "Total"
FROM employees;

Total
----------
691400

分析の例

次の例では、サンプル表hr.employeesの各マネージャについて、そのマネージャの下で働く従業員の現在の給与以下の給与の累積合計を計算します。RaphaelyおよびCambraultが同じ累積を持っています。これは、RaphaelyおよびCambraultが同じ給与であるため、Oracle Databaseが給与の値を同時に追加し、同じ累積合計を両方の行に対して適用したためです。

SELECT manager_id, last_name, salary,
SUM(salary) OVER (PARTITION BY manager_id ORDER BY salary
RANGE UNBOUNDED PRECEDING) l_csum
FROM employees
ORDER BY manager_id, last_name, salary, l_csum;

MANAGER_ID LAST_NAME                     SALARY     L_CSUM
---------- ------------------------- ---------- ----------
100 Cambrault                      11000      68900
100 De Haan                        17000     155400
100 Errazuriz                      12000      80900
100 Fripp                           8200      36400
100 Hartstein                      13000      93900
100 Kaufling                        7900      20200
100 Kochhar                        17000     155400
100 Mourgos                         5800       5800
100 Partners                       13500     107400
100 Raphaely                       11000      68900
100 Russell                        14000     121400
. . .
149 Hutton                          8800      39000
149 Johnson                         6200       6200
149 Livingston                      8400      21600
149 Taylor                          8600      30200
201 Fay                             6000       6000
205 Gietz                           8300       8300
King                           24000      24000

SYS_CONNECT_BY_PATH

構文

用途

SYS_CONNECT_BY_PATHは、階層問合せのみで有効です。このファンクションは、ルートからノードへの列の値のパスを、CONNECT BY条件によって戻された各行をcharで区切った列の値とともに戻します。

columnおよびcharは、CHAR、VARCHAR2、NCHARまたはNVARCHAR2データ型です。戻される文字列は、VARCHAR2データ型であり、columnと同じキャラクタ・セットです。

関連項目:
階層問合せおよびCONNECT BY条件の詳細は、「階層問合せ」を参照してください。

例

次の例では、従業員KochharからKochharのすべての従業員(およびそれらの従業員の従業員)への従業員名のパスを戻します。

SELECT LPAD(' ', 2*level-1)||SYS_CONNECT_BY_PATH(last_name, '/') "Path"
FROM employees
START WITH last_name = 'Kochhar'
CONNECT BY PRIOR employee_id = manager_id;

Path
------------------------------
/Kochhar/Greenberg/Chen
/Kochhar/Greenberg/Faviet
/Kochhar/Greenberg/Popp
/Kochhar/Greenberg/Sciarra
/Kochhar/Greenberg/Urman
/Kochhar/Higgins/Gietz
/Kochhar/Baer
/Kochhar/Greenberg
/Kochhar/Higgins
/Kochhar/Mavris
/Kochhar/Whalen
/Kochhar

SYS_CONTEXT

構文

用途

SYS_CONTEXTは、現在のコンテキストnamespaceに関連付けられたparameterの値を戻します。この関数は、SQL文とPL/SQL文の両方で使用できます。SYS_CONTEXTはローカルに実行する必要があります。

namespaceおよびparameterには、文字列、またはネームスペースまたは属性を指定する文字列に変換する式を指定できます。namespaceおよびparameterにリテラル引数を指定し、(SQL文で指定されたPL/SQLファンクション内ではなく)SQL文で明示的にSYS_CONTEXTを使用した場合は、SYS_CONTEXTファンクションを起動するコール元の各サイトで、SQL文の実行ごとに1回のみSYS_CONTEXTが評価されます。

コンテキストnamespaceはすでに作成されている必要があり、関連付けられたparameterおよびその値は、DBMS_SESSION.set_contextプロシージャを使用して設定されている必要があります。namespaceは有効なSQL識別子である必要があります。parameter名には、すべての文字列を指定できます。大/小文字は区別されず、長さは30バイト以下です。

戻り値のデータ型はVARCHAR2です。戻り値のデフォルトの最大サイズは256バイトです。オプションのlengthパラメータを指定して、このデフォルトを上書きできます。このパラメータは、NUMBERか、または暗黙的にNUMBERに変換可能な値である必要があります。有効な値の範囲は、1から4000バイトです。無効な値を指定すると、Oracle Databaseはその値を無視してデフォルト値を使用します。

Oracleは、次の組込みネームスペースを提供しています。

- USERENV: 現在のセッションを説明します。ネームスペースUSERENVの事前定義パラメータについては、表7-11を参照してください。

- SYS_SESSION_ROLES: 指定されたロールがセッションに対して現在有効かどうかを示します。

関連項目:

- アプリケーション開発でのアプリケーション・コンテキスト機能の使用方法については、『Oracle Databaseセキュリティ・ガイド』を参照してください。

- ユーザー定義のコンテキスト・ネームスペースの作成方法については、「CREATE CONTEXT」を参照してください。

- DBMS_SESSION.set_contextプロシージャの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

例

次の例では、データベースにログインしたユーザー名を戻します。

CONNECT OE
Enter password: password

SELECT SYS_CONTEXT ('USERENV', 'SESSION_USER')
FROM DUAL;

SYS_CONTEXT ('USERENV', 'SESSION_USER')
---------------------------------------
OE

次の例では、SESSION_ROLESデータ・ディクショナリ・ビューを問い合せて、セッションに対して現在有効なロールがRESOURCEのみであることを示します。その後で、SYS_CONTEXTファンクションを使用して、セッションに対してRESOURCEロールが現在有効であり、DBAロールが有効でないことを示します。

CONNECT OE
Enter password: password

SELECT role FROM session_roles;

ROLE
--------
RESOURCE

SELECT SYS_CONTEXT('SYS_SESSION_ROLES', 'RESOURCE')
FROM DUAL

SYS_CONTEXT('SYS_SESSION_ROLES','RESOURCE')
--------------------------------------
TRUE

SELECT SYS_CONTEXT('SYS_SESSION_ROLES', 'DBA')
FROM DUAL;

SYS_CONTEXT('SYS_SESSION_ROLES','DBA')
--------------------------------------
FALSE

注意:
この機能を簡単に実演する場合、これらの例では、通常デプロイされたシステムが使用するパスワード管理技術を実行しません。本番環境では、Oracle Databaseのパスワード管理ガイドラインに従って、サンプル・アカウントを無効にします。パスワード管理ガイドラインおよび他のセキュリティに関する推奨事項については、『Oracle Databaseセキュリティ・ガイド』を参照してください。

次の例では、hr_appsの作成時に、コンテキストhr_appsに関連付けられたPL/SQLパッケージの属性group_noに対する値として設定されたグループ番号を戻します。

SELECT SYS_CONTEXT ('hr_apps', 'group_no') "User Group"
FROM DUAL;

表7-11 ネームスペースUSERENVの事前定義パラメータ

パラメータ

戻り値

ACTION

モジュール(アプリケーション名)内の位置を識別します。DBMS_APPLICATION_INFOパッケージまたはOCIを使用して設定します。

AUDITED_CURSORID

監査をトリガーによって実行したSQLのカーソルIDを戻します。このパラメータは、ファイングレイン監査環境では無効です。このパラメータをファイングレイン監査環境で指定すると、Oracle Databaseは常にNULLを戻します。

AUTHENTICATED_IDENTITY

認証で使用する識別を戻します。次のリストでは、ユーザーのタイプの後に、戻される値を示します。

- Kerberos認証済のエンタープライズ・ユーザー: Kerberosプリンシパル名

- Kerberos認証済の外部ユーザー: Kerberosプリンシパル名(スキーマ名と同一)

- SSL認証済のエンタープライズ・ユーザー: ユーザーのPKI証明書のDN

- SSL認証済の外部ユーザー: ユーザーのPKI証明書のDN

- パスワード認証済のエンタープライズ・ユーザー: ニックネーム(ログイン名と同一)

- パスワード認証済のデータベース・ユーザー: データベースのユーザー名(スキーマ名と同一)

- OS認証済の外部ユーザー: 外部オペレーティング・システムのユーザー名

- RADIUS認証済の外部ユーザー: スキーマ名

- DN付きプロキシ: クライアントのOracle Internet Directory DN

- 証明書付きプロキシ: クライアントの証明書DN

- ユーザー名付きプロキシ: クライアントがローカル・データベースのユーザーの場合はデータベース・ユーザー名、クライアントがエンタープライズ・ユーザーの場合はニックネーム。

- パスワード・ファイルを使用するSYSDBA/SYSOPER: ログイン名

- OS認証を使用するSYSDBA/SYSOPER: オペレーティング・システムのユーザー名

AUTHENTICATION_DATA

ログイン・ユーザーの認証に使用されるデータを戻します。X.503認証セッションでは、このフィールドはHEX2形式での認証のコンテキストを戻します。

注意: 構文のlengthパラメータを使用して、AUTHENTICATION_DATA属性の戻り値を変更できます。最大4000までの値を指定できます。この属性は、Oracle Databaseがこのような変更を実行するUSERENVの唯一の属性です。

AUTHENTICATION_METHOD

認証方式を戻します。次に、ユーザー・タイプの後に返される方式を続けて示します。

- パスワード認証済のエンタープライズ・ユーザー、ローカル・データベースのユーザー、またはパスワード・ファイルを使用するSYSDBA/SYSOPER(パスワードを使用するユーザー名付きのプロキシ): PASSWORD

- Kerberos認証済のエンタープライズ・ユーザーまたは外部ユーザー: KERBEROS

- SSL認証済のエンタープライズ・ユーザーまたは外部ユーザー: SSL

- RADIUS認証済の外部ユーザー: RADIUS

- OS認証済の外部ユーザーまたはSYSDBA/SYSOPER: OS

- 証明書付きプロキシ、DN、またはパスワードを使用しないユーザー名: NONE

- バックグラウンド・プロセス(ジョブ・キュー・スレーブ・プロセス): JOB

- パラレル問合せスレーブ・プロセス: PQ_SLAVE

認証方式がパスワード、KerberosまたはSSLの場合、IDENTIFICATION_TYPEを使用して外部ユーザーとエンタープライズ・ユーザーを区別できます。

BG_JOB_ID

現行のセッションがOracle Databaseのバックグラウンド・プロセスで確立された場合、そのセッションのジョブIDを戻します。セッションがバックグラウンド・プロセスで確立されていない場合は、NULLを戻します。

CDB_NAME

マルチテナント・コンテナ・データベース(CDB)に接続しているときに問合せが実行されると、CDBの名前を戻します。それ以外の場合は、nullを戻します。

CLIENT_IDENTIFIER

アプリケーションによって設定された識別子を、DBMS_SESSION.SET_IDENTIFIERプロシージャ、OCI属性OCI_ATTR_CLIENT_IDENTIFIERまたはOracle Dynamic Monitoring Service (DMS)を使用して戻します。この属性は、同じデータベース・ユーザーとして認証される複数の軽量アプリケーション・ユーザーを識別するために、様々なデータベース・コンポーネントによって使用されます。

CLIENT_INFO

DBMS_APPLICATION_INFOパッケージを使用するアプリケーションが格納できる64バイトまでのユーザー・セッション情報を戻します。

CLIENT_PROGRAM_NAME

データベース・セッションに使用されるプログラムの名前。

CON_ID

CDBに接続しているときに問合せが実行されると、現在のコンテナIDを戻します。それ以外の場合は0を戻します。

CON_NAME

CDBに接続しているときに問合せが実行されると、現在のコンテナ名を戻します。それ以外の場合は、DB_NAME初期化パラメータで指定されたデータベースの名前を戻します。

CURRENT_BIND

ファイングレイン監査のバインド変数。この属性は、ファイングレイン監査機能のイベント・ハンドラ内のみで指定できます。

CURRENT_EDITION_ID

現行のエディションの識別子。

CURRENT_EDITION_NAME

現行のエディションの名前。

CURRENT_SCHEMA

現在アクティブなデフォルトのスキーマの名前。この値は、セッションの存続期間中にALTER SESSION SET CURRENT_SCHEMA文を使用して変更できます。また、この値は、セッションの存続期間中に、アクティブな定義者権限オブジェクトの所有者を反映するために変更することもできます。この値をビュー定義の本体で直接使用すると、そのビューを使用しているカーソルを実行するときに使用されるデフォルトのスキーマが戻されます。定義者権限としてカーソルで使用されるビューは考慮されません。

注意: すべての種類(ログオン・トリガーを除く)のストアドPL/SQLユニット内から、SQL文ALTER SESSION SET CURRENT_SCHEMAを発行しないようにしてください。

CURRENT_SCHEMAID

現在アクティブなデフォルトのスキーマの識別子。

CURRENT_SQL

CURRENT_SQLn

CURRENT_SQLは、ファイングレイン監査イベントをトリガーによって実行した現行のSQLの最初の4KBを戻します。CURRENT_SQLn属性は、後続の4KBずつを戻します。nは、1から7(1および7を含む)の整数です。CURRENT_SQL1は4から8KB、CURRENT_SQL2は8から12KBのように戻します。これらの属性は、ファイングレイン監査機能のイベント・ハンドラ内のみで指定できます。

CURRENT_SQL_LENGTH

ファイングレイン監査または行レベルのセキュリティ(RLS)ポリシーのファンクションまたはイベント・ハンドラをトリガーする現行のSQL文の長さ。この属性は、ファイングレイン監査機能のイベント・ハンドラ内のみで指定できます。

CURRENT_USER

現在アクティブな権限を持つデータベース・ユーザー名。これは、Real Application Securityセッションがアタッチまたはデタッチされるときや、アクティブな定義者権限オブジェクトの所有者を反映するために、データベース・セッション中に変化することがあります。定義者権限オブジェクトがアクティブでない場合、CURRENT_USERはSESSION_USERと同じ値を戻します。この値をビュー定義の本体で直接使用すると、そのビューを使用しているカーソルを実行しているユーザーが戻されます。定義者権限としてカーソルで使用されるビューは考慮されません。エンタープライズ・ユーザーの場合、スキーマを返します。Real Application Securityユーザーが現在アクティブな場合は、ユーザーXS$NULLが返されます。

関連項目: ユーザーXS$NULLの詳細は、『Oracle Database 2日でセキュリティ・ガイド』を参照してください。

CURRENT_USERID

権限が現在アクティブになっているデータベース・ユーザーの識別子。

DATABASE_ROLE

USERENVネームスペースでSYS_CONTEXTファンクションを使用するデータベース・ロール。ロールは、PRIMARY、PHYSICAL STANDBY、LOGICAL STANDBY、SNAPSHOT STANDBYのいずれかです。

DB_DOMAIN

DB_DOMAIN初期化パラメータで指定されたデータベースのドメインを戻します。

DB_NAME

DB_NAME初期化パラメータで指定されたデータベース名を戻します。

DB_SUPPLEMENTAL_LOG_LEVEL

サプリメンタル・ロギングが有効になっている場合は、有効なサプリメンタル・ロギング・レベルのリストが含まれている文字列を返します。可能な値は、ALL_COLUMN、FOREIGN_KEY、MINIMAL、PRIMARY_KEY、PROCEDURALおよびUNIQUE_INDEXです。サプリメンタル・ロギングが有効でない場合は、NULLを返します。

DB_UNIQUE_NAME

DB_UNIQUE_NAME初期化パラメータで指定されたデータベース名を戻します。

DBLINK_INFO

データベース・リンク・セッションのソースを戻します。具体的には、次の書式の文字列を戻します。

SOURCE_GLOBAL_NAME=dblink_src_global_name, DBLINK_NAME=dblink_name, SOURCE_AUDIT_SESSIONID=dblink_src_audit_sessionid

それぞれの意味は、次のとおりです。

- dblink_src_global_name: ソース・データベースの一意のグローバル名

- dblink_name: ソース・データベースでのデータベース・リンクの名前

- dblink_src_audit_sessionid: dblink_nameを使用してリモート・データベースへの接続を開始したソース・データベースでのセッションの監査セッションID

ENTRYID

現行の監査エントリ番号を戻します。監査エントリIDの順序は、ファイングレイン監査レコードと通常の監査レコードで共通です。この属性を分散SQL文で使用することはできません。正しい監査エントリ識別子は、標準またはファイングレイン監査の監査ハンドラを介してのみ参照できます。

ENTERPRISE_IDENTITY

ユーザーのエンタープライズ全体の識別を戻します。

- エンタープライズ・ユーザーの場合: Oracle Internet Directory DN。

- 外部ユーザーの場合: 外部識別(Kerberosプリンシパル名、RADIUSスキーマ名、OSユーザー名、証明書DN)。

- ローカル・ユーザーおよびSYSDBA/SYSOPERログインの場合: NULL。

属性の値はプロキシ方式によって異なります。

- DN付きプロキシの場合: クライアントのOracle Internet Directory DN

- 証明書付きプロキシの場合: クライアントの証明書DN(外部ユーザー)、Oracle Internet Directory DN(グローバル・ユーザー)

- ユーザー名付きプロキシの場合: クライアントがエンタープライズ・ユーザーの場合はOracle Internet Directory DN、クライアントがローカル・データベースのユーザーの場合はNULL。

FG_JOB_ID

DBMS_JOBパッケージを使用して作成されたジョブ内から問い合せた場合: 現在のセッションがクライアントのフォアグラウンド・プロセスで確立されているときには、現在のセッションのジョブIDが返されます。セッションがフォアグラウンド・プロセスで確立されていない場合は、NULLを戻します。

それ以外の場合は0を戻します。

GLOBAL_CONTEXT_MEMORY

コンテキストへのグローバルなアクセスによって、システム・グローバル領域で使用された数値を戻します。

GLOBAL_UID

エンタープライズ・ユーザー・セキュリティ(EUS)ログインの場合は、Oracle Internet Directoryからグローバル・ユーザーIDを戻します。その他のすべてのログインの場合は、NULLを戻します。

HOST

接続中のクライアントのホスト・マシン名を戻します。

IDENTIFICATION_TYPE

データベースでユーザーのスキーマを作成した方法を戻します。特に、CREATE/ALTER USER構文に、IDENTIFIED句が反映されます。次に、スキーマ作成時に使用される構文の後に返される識別タイプを続けて示します。

- IDENTIFIED BY password: LOCAL

- IDENTIFIED EXTERNALLY: EXTERNAL

- IDENTIFIED GLOBALLY: GLOBAL SHARED

- IDENTIFIED GLOBALLY AS DN: GLOBAL PRIVATE

INSTANCE

現行のインスタンスのインスタンス識別番号を戻します。

INSTANCE_NAME

インスタンス名。

IP_ADDRESS

接続中のクライアントのマシンのIPアドレスを戻します。クライアントとサーバーが同じマシン上にあり、接続にIPv6アドレスが使用されている場合は、::1が戻されます。

IS_APPLY_SERVER

ロジカル・スタンバイ・データベースでSQL Applyサーバーから問合せが実行された場合は、TRUEを戻します。それ以外の場合はFALSEを戻します。

IS_DG_ROLLING_UPGRADE

DBMS_ROLLINGパッケージを使用して開始された、Data Guard構成内のデータベース・ソフトウェアのローリング・アップグレードがアクティブの場合には、TRUEを戻します。それ以外の場合はFALSEを戻します。

ISDBA

オペレーティング・システムまたはパスワード・ファイルによって、ユーザーがDBA権限を持っていると認証された場合、TRUEを戻します。

LANG

言語名の略称を戻します。これは、既存の'LANGUAGE'パラメータを短縮したものです。

LANGUAGE

現行のセッションで使用している言語(language)および地域(territory)を、データベース・キャラクタ・セット(character set)も含めて次の書式で戻します。

language_territory.characterset

MODULE

DBMS_APPLICATION_INFOパッケージまたはOCIを使用して設定されたアプリケーション名(モジュール)を戻します。

NETWORK_PROTOCOL

接続文字列の'PROTOCOL=protocol'の部分で指定された、通信に使用されるネットワーク・プロトコルを戻します。

NLS_CALENDAR

現行のセッションの現行のカレンダを戻します。

NLS_CURRENCY

現行のセッションの通貨を戻します。

NLS_DATE_FORMAT

セッションの日付書式を戻します。

NLS_DATE_LANGUAGE

日付の表示に使用される言語を戻します。

NLS_SORT

BINARYまたは言語ソート基準を戻します。

NLS_TERRITORY

現行のセッションの地域を戻します。

ORACLE_HOME

Oracleホーム・ディレクトリのフル・パス名。

OS_USER

データベース・セッションを開始するクライアント・プロセスのオペレーティング・システム・ユーザー名を戻します。

PLATFORM_SLASH

プラットフォームのパス区切り文字として使用されるスラッシュ(「/」)文字。

POLICY_INVOKER

行レベルのセキュリティ(RLS)・ポリシーのファンクションの実行者。

PROXY_ENTERPRISE_IDENTITY

プロキシ・ユーザーがエンタープライズ・ユーザーの場合に、Oracle Internet Directory DNを戻します。

PROXY_USER

SESSION_USERのかわりに現行のセッションを開いたデータベース・ユーザー名を戻します。

PROXY_USERID

SESSION_USERのかわりに現行のセッションを開いたデータベース・ユーザーのIDを戻します。

SCHEDULER_JOB

現在のセッションがフォアグラウンド・ジョブまたはバックグラウンド・ジョブに属している場合は、Yを戻します。それ以外の場合はNを戻します。

SERVER_HOST

インスタンスを実行しているマシンのホスト名。

SERVICE_NAME

任意のセッションで接続しているサービスの名前を戻します。

SESSION_EDITION_ID

セッション・エディションの識別子。

SESSION_EDITION_NAME

セッション・エディションの名前。

SESSION_USER

セッション・ユーザー(ログオンしたユーザー)の名前。これは、Real Application Securityセッションがアタッチまたはデタッチされると、データベース・セッション中に変化することがあります。エンタープライズ・ユーザーの場合、スキーマを戻します。その他のユーザーの場合、データベース・ユーザー名を戻します。現在のデータベース・セッションにReal Application Securityがアタッチされている場合は、ユーザーXS$NULLが返されます。

関連項目: ユーザーXS$NULLの詳細は、『Oracle Database 2日でセキュリティ・ガイド』を参照してください。

SESSION_USERID

セッション・ユーザー(ログオンしたユーザー)のID。

SESSIONID

監査セッション識別子を戻します。この属性を分散SQL文で使用することはできません。

SID

セッションID。

STATEMENTID

文の監査の識別子を戻します。STATEMENTIDは、任意のセッションで監査されたSQL文の番号を示します。この属性を分散SQL文で使用することはできません。正しい文の監査の識別子は、標準またはファイングレイン監査の監査ハンドラを介してのみ参照できます。

TERMINAL

現行のセッションのクライアントに対するオペレーティング・システムの識別子を戻します。分散SQL文では、この属性はローカル・セッションの識別子を戻します。分散環境では、リモートのSELECTに対してのみこのオプションを使用でき、リモートのINSERT、UPDATEまたはDELETEには使用できません。(このパラメータの戻り値の長さはオペレーティング・システムによって異なります。)

UNIFIED_AUDIT_SESSIONID

統合監査または混合モード監査を使用するデータベースに接続中に問い合せた場合、統合監査セッションIDを戻します。

従来の監査を使用するデータベースに接続中に問い合せた場合、nullを戻します。

注意: このパラメータは、Oracle Database 12cリリース1(12.1.0.2)以上で使用できます。

SYS_DBURIGEN

構文

用途

SYS_DBURIGenは、引数として1つ以上の列または属性、およびオプションでROWIDを取り、特定の列または行オブジェクトへのDBURITypeデータ型のURLを生成します。これによって、データベースからXML文書を検索するためのURLを使用できるようになります。

参照するすべての列または属性は、同じ表内に存在する必要があります。これらは、主キーの役割を果たす必要があります。実際に表の主キーに一致する必要はありませんが、一意の値を参照する必要があります。複数の列を指定すると、最後の列以外のすべての列はデータベースの行を識別し、指定された最後の列は行にある列を識別します。

デフォルトでは、URLはフォーマットされたXML文書を指します。URLにドキュメントのテキストのみを指す場合は、オプションの'text()'を指定します。

注意:
このXMLコンテキストでは、小文字のtextはキーワードであり、構文のプレースホルダではありません。

列または属性を含む表またはビューが、問合せのコンテキストで指定されるスキーマを持たない場合、Oracle Databaseは、表名またはビュー名をパブリック・シノニムとして解析します。

関連項目:
データベースのDBURITypeデータ型およびXML文書の詳細は、『Oracle XML DB開発者ガイド』を参照してください。

例

次の例では、SYS_DBURIGenファンクションを使用して、サンプル表hr.employeesのemployee_id = 206である行のemail列へのDBURITypeデータ型のURLを生成します。

SELECT SYS_DBURIGEN(employee_id, email)
FROM employees
WHERE employee_id = 206;

SYS_DBURIGEN(EMPLOYEE_ID,EMAIL)(URL, SPARE)
--------------------------------------------------------------------
DBURITYPE('/PUBLIC/EMPLOYEES/ROW[EMPLOYEE_ID=''206'']/EMAIL', NULL)

SYS_EXTRACT_UTC

構文

用途

SYS_EXTRACT_UTCは、タイムゾーン・オフセットまたはタイムゾーン地域名を含む日時値から協定世界時(UTC)(以前のグリニッジ標準時)を抽出します。タイムゾーンを指定しないと、この日時はセッションのタイムゾーンに関連付けられます。

例

次の例では、指定された日時からUTCを抽出します。

SELECT SYS_EXTRACT_UTC(TIMESTAMP '2000-03-28 11:30:00.00 -08:00')
FROM DUAL;

SYS_EXTRACT_UTC(TIMESTAMP'2000-03-2811:30:00.00-08:00')
-----------------------------------------------------------------
28-MAR-00 07.30.00 PM

SYS_GUID

構文

用途

SYS_GUIDは、16バイトで構成されたグローバルな一意の識別子(RAW値)を生成して戻します。多くのプラットフォームでは、生成された識別子は、ホスト識別子、ファンクションをコールするプロセスやスレッドのプロセス識別子またはスレッド識別子、およびそのプロセスやスレッドに対する非反復値(バイトの順序)で構成されています。

例

次の例では、サンプル表hr.locationsに列を追加後、一意の識別子を各行に挿入し、グローバルな一意識別子の16バイトのRAW値を32文字の16進表記で戻します。

ALTER TABLE locations ADD (uid_col RAW(16));

UPDATE locations SET uid_col = SYS_GUID();

SELECT location_id, uid_col FROM locations
ORDER BY location_id, uid_col;

LOCATION_ID UID_COL
----------- ----------------------------------------------------------------
1000 09F686761827CF8AE040578CB20B7491
1100 09F686761828CF8AE040578CB20B7491
1200 09F686761829CF8AE040578CB20B7491
1300 09F68676182ACF8AE040578CB20B7491
1400 09F68676182BCF8AE040578CB20B7491
1500 09F68676182CCF8AE040578CB20B7491
. . .

SYS_OP_ZONE_ID

注意:
SYS_OP_ZONE_IDファンクションは、Oracle Database 12cリリース1(12.1.0.2)から使用可能です。

構文

用途

SYS_OP_ZONE_IDは、ROWIDを引数として、ゾーンIDを戻します。ROWIDは表の行を識別します。ゾーンIDは、行を含むゾーンと呼ばれる連続したディスク・ブロックのセットを識別します。戻り値はNUMBERです。

CREATE MATERIALIZED ZONEMAP文を使用してゾーン・マップを作成する場合、SYS_OP_ZONE_IDファンクションが使用されます。ゾーン・マップの定義する副問合せのSELECTおよびGROUP BY句にSYS_OP_ZONE_IDを指定する必要があります。

rowidの場合、ゾーン・マップのファクト表のROWID疑似列を指定します。

schemaおよびtableを使用してファクト表のスキーマと名前を指定するか、t_aliasを使用してファクト表の表の別名を指定します。これらのパラメータの指定は、ゾーン・マップの定義する副問合せのFROM句によって異なります。

- FROM句でファクト表の表の別名を指定する場合、SYS_OP_ZONE_IDに表の別名(t_alias)も指定する必要があります。

- FROM句でファクト表の表の別名を指定しない場合、tableを使用してファクト表の名前を指定します。他のスキーマ内にファクト表が存在している場合、schema修飾子を使用できます。schemaを省略する場合、ファクト表は自分のスキーマ内にあるとみなされます。FROM句で1つの表(ファクト表)のみを指定する場合、schemaまたはtableを指定する必要はありません。

オプションのscaleパラメータは、ゾーン・マップのスケールを表します。デフォルトでSYS_OP_ZONE_IDは作成されるゾーン・マップのスケールを使用するため、このパラメータを指定する必要はありません。scaleを指定する場合、作成されるゾーン・マップのスケールを照合する必要があります。ゾーン・マップのスケールの指定の詳細は、CREATE MATERIALIZED ZONEMAPのSCALE句を参照してください。

関連項目:
ゾーン・マップの作成の詳細は、CREATE MATERIALIZED ZONEMAPを参照してください。

例

次の例は、ファクト表salesの列time_idを追跡する基本的なゾーン・マップを作成する場合にSYS_OP_ZONE_IDファンクションを使用します。ゾーン・マップのスケールはデフォルト値10です。このため、SYS_OP_ZONE_IDファンクションのデフォルトのスケール値は10になります。

CREATE MATERIALIZED ZONEMAP sales_zmap
AS
SELECT SYS_OP_ZONE_ID(rowid), MIN(time_id), MAX(time_id)
FROM sales
GROUP BY SYS_OP_ZONE_ID(rowid);

作成されるゾーン・マップのスケールに8が指定されている点を除いて、次の例は前の例と似ています。このため、SYS_OP_ZONE_IDファンクションのデフォルトのスケール値は8になります。

CREATE MATERIALIZED ZONEMAP sales_zmap
SCALE 8
AS
SELECT SYS_OP_ZONE_ID(rowid), MIN(time_id), MAX(time_id)
FROM sales
GROUP BY SYS_OP_ZONE_ID(rowid);

作成されるゾーン・マップのスケールにSYS_OP_ZONE_IDファンクションで指定されているscale引数12と一致しない8が指定されているため、次の例はエラーを戻します。

CREATE MATERIALIZED ZONEMAP sales_zmap
SCALE 8
AS
SELECT SYS_OP_ZONE_ID(rowid,12), MIN(time_id), MAX(time_id)
FROM sales
GROUP BY SYS_OP_ZONE_ID(rowid,12);

次の例は、結合ゾーン・マップを作成します。ファクト表がsalesで、ディメンション表がproductsとcustomersです。表の別名sがFROM句のファクト表に指定されているため、表の別名sがSYS_OP_ZONE_IDファンクションにも指定されます。

CREATE MATERIALIZED ZONEMAP sales_zmap
AS
SELECT SYS_OP_ZONE_ID(s.rowid),
MIN(prod_category), MAX(prod_category),
MIN(country_id), MAX(country_id)
FROM sales s, products p, customers c
WHERE s.prod_id = p.prod_id(+) AND
s.cust_id = c.cust_id(+)
GROUP BY SYS_OP_ZONE_ID(s.rowid);

SYS_TYPEID

構文

用途

SYS_TYPEIDは、オペランドで最も指定される型の型IDを戻します。この値は、主に、置換可能な列の基礎となる型判別式の列を識別するために使用されます。たとえば、型判別式の列に索引を構築するために、SYS_TYPEIDによって戻される値を使用できます。

このファンクションは、オブジェクト型のオペランドのみで使用してください。すべての最終ルート・オブジェクト型(型階層に属さない最終型)は、NULLの型IDを持ちます。Oracle Databaseは、型階層に属するすべての型に、NULL以外の一意の型IDを割り当てます。

関連項目:
型IDの詳細は、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。

例

次の例では、「置換可能な表および列のサンプル:」で作成された表personsおよびbooksを使用します。最初の問合せは、persons表に格納されたオブジェクト・インスタンスの最も指定される型を戻します。

SELECT name, SYS_TYPEID(VALUE(p)) "Type_id" FROM persons p;

NAME                      Type_id
------------------------- --------------------------------
Bob                       01
Joe                       02
Tim                       03

次の問合せは、books表に格納された作者の最も指定される型を戻します。

SELECT b.title, b.author.name, SYS_TYPEID(author)
"Type_ID" FROM books b;

TITLE                     AUTHOR.NAME          Type_ID
------------------------- -------------------- -------------------
An Autobiography          Bob                  01
Business Rules            Joe                  02
Mixing School and Work    Tim                  03

SYS_TYPEIDファンクションを使用すると、表の型判別式の列に索引を作成できます。「置換可能な列の索引の作成例:」を参照してください。

SYS_XMLAGG

構文

用途

SYS_XMLAggは、exprによって表されるすべてのXML文書またはXMLフラグメントを集約し、単一のXML文書を生成します。このファンクションは、デフォルト名ROWSETの新しい囲み要素を追加します。XML文書を別の方法でフォーマットする場合は、XMLFormatオブジェクトのインスタンスであるfmtを指定します。

関連項目:
SYS_XMLAggの結果をフォーマットするためのXMLFormat型の属性の使用については、「SYS_XMLGEN」および「XML書式モデル」を参照してください。

例

次の例では、SYS_XMLGENファンクションを使用して、従業員名の最初の文字がRであるサンプル表employeesの各行に対して、XML文書を生成した後、デフォルトの囲み要素ROWSETの1つのXML文書にすべての行を集約します。

SELECT SYS_XMLAGG(SYS_XMLGEN(last_name)) XMLAGG
FROM employees
WHERE last_name LIKE 'R%'
ORDER BY xmlagg;

XMLAGG
--------------------------------------------------------------------------------
<?xml version="1.0"?>
<ROWSET>
<LAST_NAME>Rajs</LAST_NAME>
<LAST_NAME>Raphaely</LAST_NAME>
<LAST_NAME>Rogers</LAST_NAME>
<LAST_NAME>Russell</LAST_NAME>
</ROWSET>

SYS_XMLGEN

注意:
SYS_XMLGenファンクションは、非推奨です。これは、下位互換性を保つためにのみサポートされています。そのかわりに、SQL/XML生成ファンクションを使用してください。詳細は、『Oracle XML DB開発者ガイド』を参照してください。

構文

用途

SYS_XMLGENは、データベースの特定の行および列を評価する式を取り、XML文書を含むXMLType型のインスタンスを戻します。exprは、スカラー値、ユーザー定義型またはXMLTypeインスタンスです。

- exprがスカラー値である場合、ファンクションはスカラー値を含むXML要素を戻します。

- exprが型である場合、ファンクションはXML要素へユーザー定義型の属性をマップします。

- exprがXMLTypeインスタンスである場合、ファンクションはデフォルトのタグ名がROWであるXML要素でドキュメントを囲みます。

デフォルトでは、XML文書の要素はexprの要素と一致します。たとえば、exprが列名に変換される場合、XMLの囲み要素は同じ列名になります。XML文書を別の方法でフォーマットする場合は、XMLFormatオブジェクトのインスタンスであるfmtを指定します。

関連項目:
XMLFormat型の詳細およびSYS_XMLGENの結果を書式化するための属性の使用方法については、「XML書式モデル」を参照してください。

例

次の例では、サンプル表oe.employeesからemployee_id値が205の従業員の電子メールIDを検出し、EMAIL要素を持つXML文書を含むXMLTypeのインスタンスを生成します。

SELECT SYS_XMLGEN(email)
FROM employees
WHERE employee_id = 205;

SYS_XMLGEN(EMAIL)
-------------------------------------------------------------------
<?xml version="1.0"?>
<EMAIL>SHIGGINS</EMAIL>

SYSDATE

構文

用途

SYSDATEは、データベース・サーバーが存在するオペレーティング・システムの現在の日付と時刻のセットを戻します。戻り値のデータ・タイプはDATEです。戻り値の書式は、NLS_DATE_FORMAT初期化パラメータの値によって異なります。この関数に引数を指定する必要はありません。分散SQL文では、このファンクションはローカル・データベースのオペレーティング・システムの日付と時刻のセットを戻します。このファンクションはCHECK制約の条件の中では使用できません。

注意:
FIXED_DATE初期化パラメータを使用して、SYSDATEが常に現在の日時のかわりに戻す変わらない日時を設定できます。このパラメータは、主にテストに役立ちます。FIXED_DATE初期化パラメータの詳細は、Oracle Database Referenceを参照してください。

例

次の例では、オペレーティング・システムの現在の日付および時刻を戻します。

SELECT TO_CHAR
(SYSDATE, 'MM-DD-YYYY HH24:MI:SS') "NOW"
FROM DUAL;

NOW
-------------------
04-13-2001 09:45:51

SYSTIMESTAMP

構文

用途

SYSTIMESTAMPは、データベースが存在するシステムの、秒の小数部とタイムゾーンを含む日付を戻します。戻り値の型は、TIMESTAMP WITH TIME ZONEです。

例

次の例では、システムのタイムスタンプを戻します。

SELECT SYSTIMESTAMP FROM DUAL;

SYSTIMESTAMP
------------------------------------------------------------------
28-MAR-00 12.38.55.538741 PM -08:00

次の例では、秒の小数部を明示的に指定する方法を示します。

SELECT TO_CHAR(SYSTIMESTAMP, 'SSSSS.FF') FROM DUAL;

TO_CHAR(SYSTIME
---------------
55615.449255

次の例では、指定したタイムゾーンでの現在のタイムスタンプを戻します。

SELECT SYSTIMESTAMP AT TIME ZONE 'UTC' FROM DUAL;

SYSTIMESTAMPATTIMEZONE'UTC'
---------------------------------------------------------------------------
08-07-21 20:39:52,743557 UTC

この例の出力書式は、セッションのNLS_TIMESTAMP_TZ_FORMATによって異なります。

TAN

構文

用途

TANは、n(ラジアンで表された角度)のタンジェントを戻します。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。引数がBINARY_FLOATの場合、このファンクションはBINARY_DOUBLEを戻します。それ以外の場合、引数と同じ数値データ型を戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

例

次の例では、135度のタンジェントを戻します。

SELECT TAN(135 * 3.14159265359/180)
"Tangent of 135 degrees"  FROM DUAL;

Tangent of 135 degrees
----------------------
- 1

TANH

構文

用途

TANHは、nの双曲線タンジェントを戻します。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。引数がBINARY_FLOATの場合、このファンクションはBINARY_DOUBLEを戻します。それ以外の場合、引数と同じ数値データ型を戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

例

次の例では、5の双曲線タンジェントを戻します。

SELECT TANH(.5) "Hyperbolic tangent of .5"
FROM DUAL;

Hyperbolic tangent of .5
------------------------
.462117157

TIMESTAMP_TO_SCN

構文

用途

TIMESTAMP_TO_SCNは、引数としてタイムスタンプ値を取り、そのタイムスタンプに関連付けられたシステム変更番号(SCN)の概数を戻します。戻り値のデータ型はNUMBERです。このファンクションは、特定のタイムスタンプに関連付けられたSCNを調べる場合に有効です。

注意:
SCNとSCN生成時のタイムスタンプの関連は、一定期間データベースで記憶されます。この期間は、最大で自動調整されたUNDO保存期間(データベースが自動UNDO管理モードで実行されている場合)およびデータベース内のすべてのフラッシュバック・アーカイブの保存時間となりますが、120時間以上になります。関連が不要となるまでの経過時間には、データベースが開かれているときの時間のみが加算されます。TIMESTAMP_TO_SCNの引数に対して指定されたタイムスタンプが古すぎる場合は、エラーが戻されます。

関連項目:
SCNをタイムスタンプへ変換する方法については、「SCN_TO_TIMESTAMP」を参照してください。

例

次の例では、行をoe.orders表に挿入し、TIMESTAMP_TO_SCNを使用して、挿入操作のシステム変更番号を判断します。(実際に戻されるSCNは、システムごとに異なります。)

INSERT INTO orders (order_id, order_date, customer_id, order_total)
VALUES (5000, SYSTIMESTAMP, 188, 2345);
1 row created.

COMMIT;
Commit complete.

SELECT TIMESTAMP_TO_SCN(order_date) FROM orders
WHERE order_id = 5000;

TIMESTAMP_TO_SCN(ORDER_DATE)
----------------------------
574100

TO_BINARY_DOUBLE

構文

用途

TO_BINARY_DOUBLEは、倍精度の浮動小数点数を戻します。

- exprには、文字列か、またはNUMBER、BINARY_FLOATまたはBINARY_DOUBLE型の数値を指定できます。exprがBINARY_DOUBLEの場合、このファンクションはexprを戻します。

- オプションの'fmt'引数および'nlsparam'引数はexprが文字列の場合にのみ有効です。これらの引数は、TO_CHAR(数値)ファンクションの場合と同じ用途に使用されます。

- 文字列'INF'(大/小文字は区別されない)は、正の無限大に変換されます。

- 文字列'-INF'(大/小文字は区別されない)は、負の無限大に変換されます。

- 文字列'NaN'(大/小文字は区別されない)は、NaN(非数値)に変換されます。

expr文字列には、浮動小数点数の書式要素(F、f、Dまたはd)は使用できません。

文字列またはNUMBERからBINARY_DOUBLEへの変換は、正確に行われない場合があります。これは、NUMBERおよび文字列型では10進精度、BINARY_DOUBLEでは2進精度を使用して数値を表現するためです。

BINARY_FLOATからBINARY_DOUBLEへの変換は正確に行われます。

関連項目:
「TO_CHAR(数値)」および「浮動小数点数」を参照してください。

例

次の例では、それぞれ異なる数値データ型の3つの列を持つ次の表を使用します。

CREATE TABLE float_point_demo
(dec_num NUMBER(10,2), bin_double BINARY_DOUBLE, bin_float BINARY_FLOAT);

INSERT INTO float_point_demo
VALUES (1234.56,1234.56,1234.56);

SELECT * FROM float_point_demo;

DEC_NUM BIN_DOUBLE  BIN_FLOAT
---------- ---------- ----------
1234.56 1.235E+003 1.235E+003

次の例では、NUMBERデータ型の値をBINARY_DOUBLEデータ型の値に変換します。

SELECT dec_num, TO_BINARY_DOUBLE(dec_num)
FROM float_point_demo;

DEC_NUM TO_BINARY_DOUBLE(DEC_NUM)
---------- -------------------------
1234.56                1.235E+003

次の例では、dec_num列およびbin_double列から抽出されたダンプ情報を比較します。

SELECT DUMP(dec_num) "Decimal",
DUMP(bin_double) "Double"
FROM float_point_demo;

Decimal                     Double
--------------------------- ---------------------------------------------
Typ=2 Len=4: 194,13,35,57   Typ=101 Len=8: 192,147,74,61,112,163,215,10

TO_BINARY_FLOAT

構文

用途

TO_BINARY_FLOATは、単精度の浮動小数点数を戻します。

- exprには、文字列か、またはNUMBER、BINARY_FLOATまたはBINARY_DOUBLE型の数値を指定できます。exprがBINARY_FLOATの場合、このファンクションはexprを戻します。

- オプションの'fmt'引数および'nlsparam'引数はexprが文字列の場合にのみ有効です。これらの引数は、TO_CHAR(数値)ファンクションの場合と同じ用途に使用されます。

- 文字列'INF'(大/小文字は区別されない)は、正の無限大に変換されます。

- 文字列'-INF'(大/小文字は区別されない)は、負の無限大に変換されます。

- 文字列'NaN'(大/小文字は区別されない)は、NaN(非数値)に変換されます。

expr文字列には、浮動小数点数の書式要素(F、f、Dまたはd)は使用できません。

文字列またはNUMBERからBINARY_FLOATへの変換は、正確に行われない場合があります。これは、NUMBERおよび文字列型では10進精度、BINARY_FLOATでは2進精度を使用して数値を表現するためです。

BINARY_DOUBLE値に、BINARY_FLOATがサポートする数を超える精度ビットが使用されている場合、BINARY_DOUBLEからBINARY_FLOATへの変換は正確に行われません。

関連項目:
「TO_CHAR(数値)」および「浮動小数点数」を参照してください。

例

次の例では、「TO_BINARY_DOUBLE」で作成したfloat_point_demo表を使用して、NUMBERデータ型の値をBINARY_FLOATデータ型の値に変換します。

SELECT dec_num, TO_BINARY_FLOAT(dec_num)
FROM float_point_demo;

DEC_NUM TO_BINARY_FLOAT(DEC_NUM)
---------- ------------------------
1234.56               1.235E+003

TO_BLOB

構文

to_blob::=

用途

TO_BLOBは、LONG RAWおよびRAW値をBLOB値に変換します。

PL/SQLパッケージ内からは、TO_BLOBを使用してRAW値およびBLOB値をBLOBに変換できます。

例

次の例は、RAW列の値としてBLOBを戻します。

SELECT TO_BLOB(raw_column) blob FROM raw_table;

BLOB
-----------------------
00AADD343CDBBD

TO_CHAR(文字)

構文

to_char_char::=

用途

TO_CHAR(文字)は、NCHAR、NVARCHAR2、CLOBまたはNCLOBデータをデータベース・キャラクタ・セットに変換します。戻り値は常にVARCHAR2です。

このファンクションを使用して文字LOBをデータベース・キャラクタ・セットに変換する際、変換するLOB値がターゲットのデータ型よりも大きいと、データベースからエラーが返されます。

例

次の例では、単純な文字列を文字データとして解析します。

SELECT TO_CHAR('01110') FROM DUAL;

TO_CH
-----
01110

この例と、「TO_CHAR(数値)」の最初の例を比較してください。

次の例では、pm.print_media表のCLOBデータをデータベース・キャラクタ・セットに変換します。

SELECT TO_CHAR(ad_sourcetext) FROM print_media
WHERE product_id = 2268;

TO_CHAR(AD_SOURCETEXT)
--------------------------------------------------------------------
******************************
TIGER2 2268...Standard Hayes Compatible Modem
Product ID: 2268
The #1 selling modem in the universe! Tiger2's modem includes call management
and Internet voicing. Make real-time full duplex phone calls at the same time
you're online.
**********************************

TO_CHAR(日時)

構文

to_char_date::=

用途

TO_CHAR(日時)は、DATE、TIMESTAMP、TIMESTAMP WITH TIME ZONE、TIMESTAMP WITH LOCAL TIME ZONE、INTERVAL DAY TO SECONDまたはINTERVAL YEAR TO MONTHデータ型の日時値または期間値を日付書式fmtで指定された書式のVARCHAR2データ型の値に変換します。fmtを省略すると、次のように、dateはVARCHAR2値に変換されます。

- DATE値は、デフォルトの日付書式の値に変換されます。

- TIMESTAMPおよびTIMESTAMP WITH LOCAL TIME ZONE値は、デフォルトのタイムスタンプ書式の値に変換されます。

- TIMESTAMP WITH TIME ZONE値は、タイムゾーン書式のデフォルトのタイムスタンプの値に変換されます。

- 期間値は期間リテラルを数値で表現したものに変換されます。

日時書式の詳細は、「書式モデル」を参照してください。

'nlsparam'引数には、月と日の名前および略称が戻される言語を指定します。この引数は次のような形式で指定できます。

'NLS_DATE_LANGUAGE = language'

'nlsparam'を指定しないと、このファンクションはセッションのデフォルト日付言語を使用します。

関連項目:
「データ変換のセキュリティ上の考慮事項」

このファンクションは任意のXMLファンクションと組み合せて使用できますが、生成される日付の書式は、XMLスキーマの標準書式ではなく、データベースの書式になります。

関連項目:

- XMLの日付およびタイムスタンプの書式設定とその例については、『Oracle XML DB開発者ガイド』を参照してください。

- XMLファンクションのリストについては、「XMLファンクション」を参照してください。

例

次の例で使用する表は、次のとおりです。

CREATE TABLE date_tab (
ts_col      TIMESTAMP,
tsltz_col   TIMESTAMP WITH LOCAL TIME ZONE,
tstz_col    TIMESTAMP WITH TIME ZONE);

次の例では、TO_CHARを別のTIMESTAMPデータ型に適用した結果を示します。TIMESTAMP WITH LOCAL TIME ZONE列の結果は、セッションのタイムゾーンを識別します。これに対して、TIMESTAMPおよびTIMESTAMP WITH TIME ZONE列の結果は、セッションのタイムゾーンを識別しません。

ALTER SESSION SET TIME_ZONE = '-8:00';
INSERT INTO date_tab VALUES (
TIMESTAMP'1999-12-01 10:00:00',
TIMESTAMP'1999-12-01 10:00:00',
TIMESTAMP'1999-12-01 10:00:00');
INSERT INTO date_tab VALUES (
TIMESTAMP'1999-12-02 10:00:00 -8:00',
TIMESTAMP'1999-12-02 10:00:00 -8:00',
TIMESTAMP'1999-12-02 10:00:00 -8:00');

SELECT TO_CHAR(ts_col, 'DD-MON-YYYY HH24:MI:SSxFF') AS ts_date,
TO_CHAR(tstz_col, 'DD-MON-YYYY HH24:MI:SSxFF TZH:TZM') AS tstz_date
FROM date_tab
ORDER BY ts_date, tstz_date;

TS_DATE                        TSTZ_DATE
------------------------------ -------------------------------------
01-DEC-1999 10:00:00.000000    01-DEC-1999 10:00:00.000000 -08:00
02-DEC-1999 10:00:00.000000    02-DEC-1999 10:00:00.000000 -08:00

SELECT SESSIONTIMEZONE,
TO_CHAR(tsltz_col, 'DD-MON-YYYY HH24:MI:SSxFF') AS tsltz
FROM date_tab
ORDER BY sessiontimezone, tsltz;

SESSIONTIM TSLTZ
---------- ------------------------------
-08:00     01-DEC-1999 10:00:00.000000
-08:00     02-DEC-1999 10:00:00.000000

ALTER SESSION SET TIME_ZONE = '-5:00';
SELECT TO_CHAR(ts_col, 'DD-MON-YYYY HH24:MI:SSxFF') AS ts_col,
TO_CHAR(tstz_col, 'DD-MON-YYYY HH24:MI:SSxFF TZH:TZM') AS tstz_col
FROM date_tab
ORDER BY ts_col, tstz_col;

TS_COL                         TSTZ_COL
------------------------------ -------------------------------------
01-DEC-1999 10:00:00.000000    01-DEC-1999 10:00:00.000000 -08:00
02-DEC-1999 10:00:00.000000    02-DEC-1999 10:00:00.000000 -08:00

SELECT SESSIONTIMEZONE,
TO_CHAR(tsltz_col, 'DD-MON-YYYY HH24:MI:SSxFF') AS tsltz_col
FROM date_tab
ORDER BY sessiontimezone, tsltz_col;
2    3    4
SESSIONTIM TSLTZ_COL
---------- ------------------------------
-05:00     01-DEC-1999 13:00:00.000000
-05:00     02-DEC-1999 13:00:00.000000

次の例では、期間リテラルをテキスト・リテラルに変換します。

SELECT TO_CHAR(INTERVAL '123-2' YEAR(3) TO MONTH) FROM DUAL;

TO_CHAR
-------
+123-02

TO_CHAR(数値)

構文

to_char_number::=

用途

TO_CHAR(数値)は、nを、オプションの数値書式fmtを使用してVARCHAR2データ型の値に変換します。n値には、NUMBER、BINARY_FLOATまたはBINARY_DOUBLE型の値を指定できます。fmtを指定しないと、nの有効桁数を保持するために十分な長さのVARCHAR2値に変換されます。

nが負の場合、書式が適用された後で符号が適用されます。したがって、TO_CHAR(-1, '$9')は、$-1ではなく-$1を戻します。

数値書式の詳細は、「書式モデル」を参照してください。

'nlsparam'引数には、数値書式要素によって戻される次の文字を指定します。

- 小数点文字

- 桁区切り

- 各国通貨記号

- 国際通貨記号

この引数は次のような形式で指定できます。

'NLS_NUMERIC_CHARACTERS = ''dg''
NLS_CURRENCY = ''text''
NLS_ISO_CURRENCY = territory '

文字dおよびgは、それぞれ小数点文字および桁区切りを表します。これらは、異なるシングルバイト文字である必要があります。引用符付き文字列の中では、パラメータ値を囲む一重引用符を2つ使用する必要があります。通貨記号には10文字使用できます。

'nlsparam'またはパラメータのいずれか1つを省略すると、このファンクションはセッションのデフォルト・パラメータ値を使用します。

関連項目:
「データ変換のセキュリティ上の考慮事項」

例

次の文は、暗黙的な変換を使用して、文字列と数値を数値に結合します。

SELECT TO_CHAR('01110' + 1) FROM DUAL;

TO_C
----
1111

この例と、「TO_CHAR(文字)」の最初の例を比較してください。

次の例では、出力で通貨記号の左側に空白埋めが行われます。オプションの数値書式fmtでは、Lは各国通貨記号を、MIは後に付くマイナス記号(-)を表します。数値書式要素の完全なリストは、「表2-13 数値書式要素」を参照してください。例は、セッション・パラメータNLS_TERRITORYがAMERICAに設定されたセッションの出力を示します。

SELECT TO_CHAR(-10000,'L99G999D99MI') "Amount"
FROM DUAL;

Amount
--------------
$10,000.00-

次の例では、NLS_CURRENCYには、L数値書式要素について各国通貨記号として使用する文字列を指定します。NLS_NUMERIC_CHARACTERSは、カンマをD数値書式要素の小数点区切りとして使用する文字に指定し、ピリオドをG数値書式要素のグループ区切りとして使用する文字に指定します。これらの文字は、ドイツなどの多くの国で想定されます。

SELECT TO_CHAR(-10000,'L99G999D99MI',
'NLS_NUMERIC_CHARACTERS = '',.''
NLS_CURRENCY = ''AusDollars'' ') "Amount"
FROM DUAL;

Amount
-------------------
AusDollars10.000,00-

次の例では、NLS_ISO_CURRENCYは、C数値書式要素のPOLAND地域に国際通貨記号を使用するようデータベースに指示します。

SELECT TO_CHAR(-10000,'99G999D99C',
'NLS_NUMERIC_CHARACTERS = '',.''
NLS_ISO_CURRENCY=POLAND') "Amount"
FROM DUAL;

Amount
-----------------
-10.000,00PLN

TO_CLOB

構文

用途

TO_CLOBは、LOB列またはその他の文字列のNCLOB値をCLOB値に変換します。charは、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBデータ型です。Oracle Databaseは、基底LOBデータを各国語キャラクタ・セットからデータベース・キャラクタ・セットに変換することによってこのファンクションを実行します。

PL/SQLパッケージ内からは、TO_CLOBファンクションを使用して、RAW、CHAR、VARCHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOB値をCLOBまたはNCLOB値に変換できます。

例

次の文は、サンプル表pm.print_mediaのNCLOBデータをCLOBに変換し、CLOB列に挿入して、その行の既存のデータを置換します。

UPDATE PRINT_MEDIA
SET AD_FINALTEXT = TO_CLOB (AD_FLTEXTN);

TO_DATE

構文

用途

TO_DATEは、CHAR、VARCHAR2、NCHARまたはNVARCHAR2データ型のcharを、DATEデータ型の値に変換します。

注意:
このファンクションは、データを別の日時データ型へは変換しません。他の日時変換の詳細は、「TO_TIMESTAMP」、「TO_TIMESTAMP_TZ」、「TO_DSINTERVAL」および「TO_YMINTERVAL」を参照してください。

fmtは、charの書式を指定する日時書式モデルです。fmtを指定しない場合、charはデフォルトの日付書式である必要があります。デフォルトの日付フォーマットは、NLS_TERRITORY初期化パラメータによって暗黙的に決まります。NLS_DATE_FORMATパラメータを使用して明示的に設定することもできます。fmtがJ(ユリウス日)の場合、charは整数である必要があります。

注意:
次の項の例に示すとおり、TO_DATEでは、常に書式マスク(fmt)を指定することをお薦めします。書式マスクを指定しないと、このファンクションは、charがNLS_TERRITORYまたはNLS_DATE_FORMATパラメータで指定されたものと同じ書式を使用している場合にのみ有効になります。さらに、依存性を回避するために明示的な書式マスクが指定されていない場合は、データベース間でファンクションが不安定になることがあります。

'nlsparam'引数には、日付に変換されるテキスト文字列の言語を指定します。この引数は次のような形式で指定できます。

'NLS_DATE_LANGUAGE = language'

引数charにDATE値を持つTO_DATEファンクションは使用しないでください。戻されるDATE値は、fmtまたはデフォルトの日付書式によって、元のcharとは異なる世紀の値を持つことがあります。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。

関連項目:
詳細は、「日時書式モデル」および「データ型の比較規則」を参照してください。

例

次の例では、文字列を日付に変換します。

SELECT TO_DATE(
'January 15, 1989, 11:00 A.M.',
'Month dd, YYYY, HH:MI A.M.',
'NLS_DATE_LANGUAGE = American')
FROM DUAL;

TO_DATE('
---------
15-JAN-89

戻された値は、NLS_TERRITORYパラメータが'AMERICA'に設定されている場合は、デフォルトの日付書式を反映します。異なるNLS_TERRITORYの値が設定されている場合は、異なるデフォルトの日付書式となります。

ALTER SESSION SET NLS_TERRITORY = 'KOREAN';

SELECT TO_DATE(
'January 15, 1989, 11:00 A.M.',
'Month dd, YYYY, HH:MI A.M.',
'NLS_DATE_LANGUAGE = American')
FROM DUAL;

TO_DATE(
--------
89/01/15

TO_DSINTERVAL

構文

sql_format::=

ds_iso_format::=

注意:
以前のリリースでは、TO_DSINTERVALファンクションはオプションのnlsparam句を受け入れました。この句は下位互換性のために現在も受け入れられますが、効果はありません。

用途

TO_DSINTERVALは、CHAR、VARCHAR2、NCHARまたはNVARCHAR2データ型の文字列を、INTERVAL DAY TO SECOND型に変換します。

TO_DSINTERVALは、2つの書式のいずれかの引数を取ります。

- SQL規格(ISO/IEC 9075:2003)に準拠したSQL期間書式(ISO/IEC 9075:2003)

- ISO 8601:2004規格に準拠したISO存続期間書式

SQL書式では、daysは0(ゼロ)から999999999の整数、hoursは0(ゼロ)から23の整数、minutesとsecondsは0(ゼロ)から59の整数になります。frac_secsは秒の小数部であり、.0から.999999999になります。日付と時間は1つ以上の空白で区切ります。これ以外に、書式要素の間に空白を使用できます。

ISO書式では、days、hours、minutesおよびsecondsは、0(ゼロ)から999999999の整数になります。frac_secsは秒の小数部であり、.0から.999999999になります。値には空白を使用できません。Tを指定する場合は、hours、minutesまたはsecondsの値を少なくとも1つ指定する必要があります。

例

次の例では、SQL書式を使用して、2002年11月1日から100日以上勤務している従業員をhr.employees表から検索します。

SELECT employee_id, last_name FROM employees
WHERE hire_date + TO_DSINTERVAL('100 00:00:00')
<= DATE '2002-11-01'
ORDER BY employee_id;

EMPLOYEE_ID LAST_NAME
----------- ---------------
102 De Haan
203 Mavris
204 Baer
205 Higgins
206 Giet

次の例では、ISO書式を使用して、2009年の始めから100日と5時間後のタイムスタンプを表示します。

SELECT TO_CHAR(TIMESTAMP '2009-01-01 00:00:00' + TO_DSINTERVAL('P100DT05H'),
'YYYY-MM-DD HH24:MI:SS') "Time Stamp"
FROM DUAL;

Time Stamp
-------------------
2009-04-11 05:00:00

TO_LOB

構文

用途

TO_LOBは、long_column列のLONGまたはLONG RAW値をLOB値に変換します。このファンクションはLONGまたはLONG RAW列に対してのみ、およびINSERT文における副問合せのSELECT構文のリストにおいてのみ適用できます。

このファンクションを使用する前に、LOB列を作成して変換されたLONG値を受け取る必要があります。LONG値を変換する場合は、CLOB列を作成します。LONG RAW値を変換する場合は、BLOB列を作成します。

索引構成表を作成する場合は、CREATE TABLE ... AS SELECT文の副問合せで、TO_LOBファンクションを使用してLONG列をLOB列に変換することはできません。LONG列を含まない索引構成表を作成し、INSERT ...AS SELECT文でTO_LOBファンクションを使用してください。

このファンクションは、PL/SQLパッケージ内で使用できません。かわりに、TO_CLOBファンクションまたはTO_BLOBファンクションを使用してください。

関連項目:

- LONG列をLOBに変換する別の方法については、「ALTER TABLE」のmodify_col_properties句を参照してください。

- INSERT文の副問合せについては、「INSERT」を参照してください。

例

次の例では、不確定な表old_tableのLONGデータに対するTO_LOBファンクションの使用方法を示します。

CREATE TABLE new_table (col1, col2, ... lob_col CLOB);
INSERT INTO new_table (select o.col1, o.col2, ... TO_LOB(o.old_long_col)
FROM old_table o;

TO_MULTI_BYTE

構文

用途

TO_MULTI_BYTEは、シングルバイト文字を、対応するマルチバイト文字に変換してcharを戻します。charのデータ型は、CHAR、VARCHAR2、NCHARまたはNVARCHAR2です。戻り値は、charと同じデータ型です。

char内に同等のマルチバイト文字がないシングルバイト文字は、シングルバイト文字として出力されます。このファンクションは、ご使用のデータベース・キャラクタ・セットに、シングルバイト文字およびマルチバイト文字の両方が含まれている場合にのみ有効です。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。

関連項目:
詳細は、「データ型の比較規則」を参照してください。

例

次の例では、シングルバイトAからUTF8のマルチバイトAへの変換を示します。

SELECT dump(TO_MULTI_BYTE( 'A')) FROM DUAL;

DUMP(TO_MULTI_BYTE('A'))
------------------------
Typ=1 Len=3: 239,188,161

TO_NCHAR(文字)

構文

to_nchar_char::=

用途

TO_NCHAR(文字)は、文字列、CHAR、VARCHAR2、CLOBまたはNCLOB値を各国語キャラクタ・セットに変換します。戻り値は常にNVARCHAR2です。このファンクションは、各国語キャラクタ・セットでUSING句を指定したTRANSLATE ... USINGファンクションと同じです。

関連項目:
「データ変換」および「TRANSLATE ... USING」を参照してください。

例

次の例では、oe.customers表のVARCHAR2データを各国語キャラクタ・セットに変換します。

SELECT TO_NCHAR(cust_last_name) FROM customers
WHERE customer_id=103;

TO_NCHAR(CUST_LAST_NAME)
--------------------------------------------------
Taylor

TO_NCHAR(日時)

構文

to_nchar_date::=

用途

TO_NCHAR(日時)は、DATE、TIMESTAMP、TIMESTAMP WITH TIME ZONE、TIMESTAMP WITH LOCAL TIME ZONE、INTERVAL MONTH TO YEARまたはINTERVAL DAY TO SECONDデータ型の日付または期間値をデータベース・キャラクタ・セットから各国語キャラクタ・セットに変換します。

関連項目:
「データ変換のセキュリティ上の考慮事項」

例

次の例では、状態が9であるすべての注文のorder_dateを各国語キャラクタ・セットに変換します。

SELECT TO_NCHAR(ORDER_DATE) AS order_date
FROM ORDERS
WHERE ORDER_STATUS > 9
ORDER BY order_date;

ORDER_DATE
--------------------------------------------------------------------------
06-DEC-99 02.22.34.225609 PM
13-SEP-99 10.19.00.654279 AM
14-SEP-99 09.53.40.223345 AM
26-JUN-00 10.19.43.190089 PM
27-JUN-00 09.53.32.335522 PM

TO_NCHAR(数値)

構文

to_nchar_number::=

用途

TO_NCHAR(数値)は、nを各国語キャラクタ・セットの文字列に変換します。n値には、NUMBER、BINARY_FLOATまたはBINARY_DOUBLE型の値を指定できます。このファンクションは、引数と同じ型の値を戻します。オプションのfmt、nに対応する'nlsparam'は、DATE、TIMESTAMP、TIMESTAMP WITH TIME ZONE、TIMESTAMP WITH LOCAL TIME ZONE、INTERVAL MONTH TO YEARまたはINTERVAL DAY TO SECONDデータ型です。

関連項目:
「データ変換のセキュリティ上の考慮事項」

例

次の例では、oe.ordersサンプル表のcustomer_id値を各国語キャラクタ・セットに変換します。

SELECT TO_NCHAR(customer_id) "NCHAR_Customer_ID"  FROM orders
WHERE order_status > 9
ORDER BY "NCHAR_Customer_ID";

NCHAR_Customer_ID
----------------------------------------
102
103
148
148
149

TO_NCLOB

構文

用途

TO_NCLOBは、LOB列またはその他の文字列のCLOB値をNCLOB値に変換します。charは、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBデータ型です。Oracle Databaseは、charのキャラクタ・セットをデータベース・キャラクタ・セットから各国語キャラクタ・セットに変換することによって、このファンクションを実行します。

例

次の例では、TO_NCLOBファンクションでデータを変換後、pm.print_media表のNCLOB列に文字データを挿入します。

INSERT INTO print_media (product_id, ad_id, ad_fltextn)
VALUES (3502, 31001,
TO_NCLOB('Placeholder for new product description'));

TO_NUMBER

構文

用途

TO_NUMBERは、exprを、NUMBERデータ型の値に変換します。exprには、CHAR、VARCHAR2、NCHAR、NVARCHAR2、BINARY_FLOATまたはBINARY_DOUBLEデータ型の数値を指定できます。

- CHAR、VARCHAR2、NCHARまたはNVARCHAR2データ型のexprを指定した場合、オプションの書式モデルfmtを指定できます。

- BINARY_FLOATまたはBINARY_DOUBLEデータ型のexprを指定した場合、BINARY_FLOATまたはBINARY_DOUBLEはその内部表現によってのみ解釈できるため、書式モデルは指定できません。

書式モデルの詳細は、「書式モデル」を参照してください。

このファンクションの'nlsparam'引数は、数値変換のTO_CHARファンクションの場合と同じ用途に使用されます。詳細は、「TO_CHAR(数値)」を参照してください。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。

関連項目:
詳細は、「データ型の比較規則」を参照してください。

例

次の例では、文字列データを数値に変換します。

UPDATE employees SET salary = salary +
TO_NUMBER('100.00', '9G999D99')
WHERE last_name = 'Perkins';

SELECT TO_NUMBER('-AusDollars100','L9G999D99',
' NLS_NUMERIC_CHARACTERS = '',.''
NLS_CURRENCY            = ''AusDollars''
') "Amount"
FROM DUAL;

Amount
----------
-100

TO_SINGLE_BYTE

構文

用途

TO_SINGLE_BYTEは、マルチバイト文字を、対応するシングルバイト文字に変換してcharを戻します。charのデータ型は、CHAR、VARCHAR2、NCHARまたはNVARCHAR2です。戻り値は、charと同じデータ型です。

char内に同等のシングルバイト文字がないマルチバイト文字は、マルチバイト文字として出力されます。このファンクションは、ご使用のデータベース・キャラクタ・セットに、シングルバイト文字およびマルチバイト文字の両方が含まれている場合にのみ有効です。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。

関連項目:
詳細は、「データ型の比較規則」を参照してください。

例

次の例では、UTF8のマルチバイトAからシングルバイトのASCIIのAへの変換を示します。

SELECT TO_SINGLE_BYTE( CHR(15711393)) FROM DUAL;

T
-
A

TO_TIMESTAMP

構文

用途

TO_TIMESTAMPは、CHAR、VARCHAR2、NCHARまたはNVARCHAR2データ型のcharを、TIMESTAMPデータ型の値に変換します。

オプションのfmtは、charの書式を指定します。fmtを指定しない場合、charはデフォルト書式のTIMESTAMPデータ型である必要があります。このデータ型は、NLS_TIMESTAMP_FORMAT初期化パラメータによって決まります。オプションの'nlsparam'引数は、日付変換のTO_CHARファンクションの場合と同じ用途で使用されます。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。

関連項目:
詳細は、「データ型の比較規則」を参照してください。

例

次の例では、文字列をタイムスタンプに変換します。文字列がデフォルトのTIMESTAMP書式ではないため、書式マスクを指定する必要があります。

SELECT TO_TIMESTAMP ('10-Sep-02 14:10:10.123000', 'DD-Mon-RR HH24:MI:SS.FF')
FROM DUAL;

TO_TIMESTAMP('10-SEP-0214:10:10.123000','DD-MON-RRHH24:MI:SS.FF')
---------------------------------------------------------------------------
10-SEP-02 02.10.10.123000000 PM

関連項目:
デフォルトのTIMESTAMP書式の詳細は、『Oracle Databaseリファレンス』のNLS_TIMESTAMP_FORMATパラメータに関する項を参照してください。書式マスクの指定の詳細は、「日時書式モデル」を参照してください。

TO_TIMESTAMP_TZ

構文

用途

TO_TIMESTAMP_TZは、CHAR、VARCHAR2、NCHARまたはNVARCHAR2データ型のcharを、TIMESTAMP WITH TIME ZONEデータ型の値に変換します。

注意:
このファンクションは、文字列をTIMESTAMP WITH LOCAL TIME ZONEに変換しません。変換するには、「CAST」で示すように、CASTファンクションを使用してください。

オプションのfmtは、charの書式を指定します。fmtを指定しない場合、charはデフォルト書式のTIMESTAMP WITH TIME ZONEデータ型である必要があります。オプションの'nlsparam'は、日付変換のTO_CHARファンクションの場合と同じ用途で使用されます。

例

次の例では、文字列をTIMESTAMP WITH TIME ZONE値に変換します。

SELECT TO_TIMESTAMP_TZ('1999-12-01 11:00:00 -8:00',
'YYYY-MM-DD HH:MI:SS TZH:TZM') FROM DUAL;

TO_TIMESTAMP_TZ('1999-12-0111:00:00-08:00','YYYY-MM-DDHH:MI:SSTZH:TZM')
--------------------------------------------------------------------
01-DEC-99 11.00.00.000000000 AM -08:00

次の例では、サンプル表oe.order_itemsおよびoe.ordersを使用して、UNION演算のNULL列をTIMESTAMP WITH LOCAL TIME ZONEとしてキャストします。

SELECT order_id, line_item_id,
CAST(NULL AS TIMESTAMP WITH LOCAL TIME ZONE) order_date
FROM order_items
UNION
SELECT order_id, to_number(null), order_date
FROM orders;

ORDER_ID LINE_ITEM_ID ORDER_DATE
---------- ------------ -----------------------------------
2354            1
2354            2
2354            3
2354            4
2354            5
2354            6
2354            7
2354            8
2354            9
2354           10
2354           11
2354           12
2354           13
2354              14-JUL-00 05.18.23.234567 PM
2355            1
2355            2
. . .

TO_YMINTERVAL

構文

ym_iso_format::=

用途

TO_YMINTERVALは、CHAR、VARCHAR2、NCHARまたはNVARCHAR2データ型の文字列を、INTERVAL YEAR TO MONTH型に変換します。

TO_YMINTERVALは、2つの書式のいずれかの引数を取ります。

- SQL規格(ISO/IEC 9075:2003)に準拠したSQL期間書式(ISO/IEC 9075:2003)

- ISO 8601:2004規格に準拠したISO存続期間書式

SQL書式では、yearsは0(ゼロ)から999999999の整数、monthsは0(ゼロ)から11の整数になります。これ以外に、書式要素の間に空白を使用できます。

ISO書式では、yearsとmonthsは、0(ゼロ)から999999999の整数になります。days、hours、minutes、secondsおよびfrac_secsは、負でない整数になります。負の整数を指定した場合は、無視されます。値には空白を使用できません。Tを指定する場合は、hours、minutesまたはsecondsの値を少なくとも1つ指定する必要があります。

例

次の例では、サンプル表hr.employeesの各従業員の雇用された後から1年と2か月後の日付を計算します。

SELECT hire_date, hire_date + TO_YMINTERVAL('01-02') "14 months"
FROM employees;

HIRE_DATE 14 months
--------- ---------
17-JUN-03 17-AUG-04
21-SEP-05 21-NOV-06
13-JAN-01 13-MAR-02
20-MAY-08 20-JUL-09
21-MAY-07 21-JUL-08

. . .

次の例では、ISO書式を使用して同じ計算を行います。

SELECT hire_date, hire_date + TO_YMINTERVAL('P1Y2M') FROM employees;

TRANSLATE

構文

用途

TRANSLATEは、from_string内のすべての文字をto_string内の対応する文字に置換してexprを戻します。from_string内に存在しないexpr内の文字は置換されません。引数from_stringには、to_stringより多い文字を指定できます。この場合、from_stringの終わりにある余分な文字には、to_string内に対応する文字がありません。これらの余分な文字がexpr内にある場合、それらの文字は戻り値から削除されます。

from_string内に1つの文字が複数回現れた場合は、最初の出現に対応するto_stringマッピングが使用されます。

戻り値からfrom_string内のすべての文字を削除するために、to_stringに空の文字列を使用することはできません。Oracle Databaseは空の文字列をNULLと解析するため、このファンクションにNULLの引数がある場合、NULLが戻されます。from_string内の文字をすべて削除するには、from_stringの先頭に別の文字を結合し、この文字をto_stringとして指定します。たとえば、TRANSLATE(expr, 'x0123456789', 'x')では、すべての数字がexprから削除されます。

TRANSLATEは、REPLACEファンクションに関連する機能を提供します。REPLACEファンクションでは、単一の文字列から別の単一の文字列への置換、および文字列の削除を実行できます。TRANSLATEでは、1回の操作で複数の単一文字を1対1で置き換えることができます。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。

関連項目:
詳細は、「データ型の比較規則」および「REPLACE」を参照してください。

例

次の文は、本のタイトルを、ファイル名などに使用するために文字列に変換します。from_stringには、空白、アスタリスク、スラッシュおよびアポストロフィの4つの文字(およびエスケープ文字のアポストロフィ)が含まれています。to_stringには、3つのアンダースコアのみが含まれています。from_stringの4つ目の文字に対応する置換文字がないため、戻り値ではアポストロフィが削除されています。

SELECT TRANSLATE('SQL*Plus User''s Guide', ' */''', '___') FROM DUAL;

TRANSLATE('SQL*PLUSU
--------------------
SQL_Plus_Users_Guide

TRANSLATE ... USING

構文

用途

TRANSLATE ... USINGは、charをデータベース・キャラクタ・セットと各国語キャラクタ・セット間の変換に指定されたキャラクタ・セットに変換します。

注意:
TRANSLATE ... USINGは、主にANSIとの互換性のためにサポートされているファンクションです。TO_CHARおよびTO_NCHARファンクションを使用してデータをデータベース・キャラクタ・セットまたは各国語キャラクタ・セットに適切に変換することをお薦めします。TO_CHARおよびTO_NCHARは、文字データのみを受け入れるTRANSLATE ... USINGに比べ、より多くのデータ型を引数として取ることができます。

引数charは変換する式です。

- USING CHAR_CS引数を指定すると、charがデータベース・キャラクタ・セットに変換されます。出力データ型はVARCHAR2です。

- USING NCHAR_CS引数を指定すると、charが各国語キャラクタ・セットに変換されます。出力データ型はNVARCHAR2です。

このファンクションは、OracleのCONVERTファンクションに似ていますが、入力または出力のデータ型にNCHARまたはNVARCHAR2を使用する場合は、CONVERTではなくこのファンクションを使用する必要があります。入力にUCS2コードポイントまたはバックスラッシュ(\)が含まれる場合は、UNISTRファンクションを使用してください。

関連項目:
「CONVERT」および「UNISTR」

例

次の文は、サンプル表oe.product_descriptionsのデータを使用して、TRANSLATE ... USINGファンクションの使用方法を示しています。

CREATE TABLE translate_tab (char_col  VARCHAR2(100),
nchar_col NVARCHAR2(50));
INSERT INTO translate_tab
SELECT NULL, translated_name
FROM product_descriptions
WHERE product_id = 3501;

SELECT * FROM translate_tab;

CHAR_COL             NCHAR_COL
-------------------- --------------------------------------------------
. . .
C pre SPNIX4.0 - Sys
C pro SPNIX4.0 - Sys
C til SPNIX4.0 - Sys
C voor SPNIX4.0 - Sys
. . .

UPDATE translate_tab
SET char_col = TRANSLATE (nchar_col USING CHAR_CS);

SELECT * FROM translate_tab;

CHAR_COL                  NCHAR_COL
------------------------- -------------------------
. . .
C per a SPNIX4.0 - Sys    C per a SPNIX4.0 - Sys
C pro SPNIX4.0 - Sys      C pro SPNIX4.0 - Sys
C for SPNIX4.0 - Sys      C for SPNIX4.0 - Sys
C til SPNIX4.0 - Sys      C til SPNIX4.0 - Sys
. . .

TREAT

構文

用途

TREATは式の宣言型を変更します。

このファンクションを使用する場合は、typeに対するEXECUTEオブジェクト権限が必要です。

- exprとtypeは、トップレベルのコレクションを除く、ユーザー定義オブジェクト型である必要があります。

- typeは、スーパータイプまたはexprの宣言型のサブタイプである必要があります。exprの最も指定される型がtype(またはtypeのサブタイプ)である場合、TREATはexprを戻します。exprの最も指定される型がtype(またはtypeのサブタイプ)ではない場合、TREATはNULLを戻します。

- exprの宣言型がREF型の場合にのみ、REFを指定できます。

- exprの宣言型がexprのソース型へのREFである場合、typeはサブタイプまたはexprのソース型のスーパータイプである必要があります。DEREF(expr)の最も指定される型がtype(またはtypeのサブタイプ)である場合、TREATはexprを戻します。DEREF(expr)の最も指定される型がtype(またはtypeのサブタイプ)ではない場合、TREATはNULLを戻します。

関連項目:
詳細は、「データ型の比較規則」を参照してください。

例

次の例では、「置換可能な表および列のサンプル:」で作成された表oe.personsを使用します。次の例では、persons表のすべての人物の給与属性を検索します。従業員ではない人物のインスタンスの値はNULLです。

SELECT name, TREAT(VALUE(p) AS employee_t).salary salary
FROM persons p;

NAME                          SALARY
------------------------- ----------
Bob
Joe                           100000
Tim                             1000

TREATファンクションを使用すると、置換可能列のサブタイプ属性に索引を作成できます。「置換可能な列の索引の作成例:」を参照してください。

TRIM

構文

用途

TRIMによって、文字列の先行または後続文字(またはその両方)を切り捨てることができます。trim_characterまたはtrim_sourceが文字リテラルの場合、一重引用符で囲む必要があります。

- LEADINGを指定すると、Oracle Databaseはtrim_characterと等しい先行文字を削除します。

- TRAILINGを指定すると、Oracleはtrim_characterと等しい後続文字を削除します。

- BOTHを指定するか、またはいずれも指定しない場合、Oracleはtrim_characterと等しい先行および後続文字を削除します。

- trim_characterを指定しないと、デフォルト値は空白になります。

- trim_sourceのみを指定すると、Oracleは先行および後続空白を削除します。

- このファンクションは、値をVARCHAR2データ型で戻します。値の最大長は、trim_sourceの長さです。

- trim_sourceまたはtrim_characterのいずれかがNULLの場合、TRIMはNULLを戻します。

trim_characterとtrim_sourceは両方とも、VARCHAR2またはVARCHAR2に暗黙的に変換できる任意のデータ型です。戻される文字列は、trim_sourceがCHARまたはVARCHAR2(NCHARまたはNVARCHAR2)データ型の場合はVARCHAR2(NVARCHAR2)データ型、trim_sourceがCLOBデータ型の場合はCLOBになります。trim_sourceと同じキャラクタ・セットの文字列が戻されます。

例

次の例では、hrスキーマの従業員の雇用日から先行0(ゼロ)を切り捨てます。

SELECT employee_id,
TO_CHAR(TRIM(LEADING 0 FROM hire_date))
FROM employees
WHERE department_id = 60
ORDER BY employee_id;

EMPLOYEE_ID TO_CHAR(T
----------- ---------
103 20-MAY-08
104 21-MAY-07
105 25-JUN-05
106 5-FEB-06
107 7-FEB-07

TRUNC(日付)

構文

trunc_date::=

用途

TRUNC(日付)ファンクションは、時刻部分を書式モデルfmtで指定された単位まで切り捨てたdateを戻します。このファンクションは、NLS_CALENDARセッション・パラメータの影響を受けません。このファンクションはグレゴリオ暦の規則に従って動作します。戻される値は、dateに異なる日時データ型を指定した場合でも、常にDATEデータ型です。fmtを省略すると、デフォルトの書式モデル'DD'が使用され、午前0時(真夜中)を基準に切り捨てられたdateの値が戻されます。fmtで使用できる書式モデルについては、「ROUNDおよびTRUNC日付ファンクション」を参照してください。

例

次の例では、日付を切り捨てます。

SELECT TRUNC(TO_DATE('27-OCT-92','DD-MON-YY'), 'YEAR')
"New Year" FROM DUAL;

New Year
---------
01-JAN-92

TRUNC(数値)

構文

trunc_number::=

用途

TRUNC(数値)ファンクションは、n1を小数第n2位までに切り捨てた値を戻します。n2を指定しない場合、n1の小数点以下を切り捨てます。n2が負の場合は、小数点の左n2桁を切り捨てて、0(ゼロ)にします。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。n2を指定しない場合、このファンクションは、引数の数値データ型と同じデータ型を戻します。n2を指定すると、このファンクションはNUMBERを戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

例

次の例では、数値を切り捨てます。

SELECT TRUNC(15.79,1) "Truncate" FROM DUAL;

Truncate
----------
15.7

SELECT TRUNC(15.79,-1) "Truncate" FROM DUAL;

Truncate
----------
10

TZ_OFFSET

構文

用途

TZ_OFFSETは、文が実行された日付に基づいた引数に対応するタイムゾーン・オフセットを戻します。有効なタイムゾーン地域名、UTCからのタイムゾーン・オフセット(それ自体を戻します)、またはキーワードSESSIONTIMEZONEまたはDBTIMEZONEを入力できます。time_zone_nameの有効な値を表示するには、V$TIMEZONE_NAMES動的パフォーマンス・ビューのTZNAME列を問い合せます。

注意:
夏時間機能には、タイムゾーン地域名が必要です。この名前は、大小2つのタイムゾーン・ファイルに格納されます。これらのファイルのうち、使用する環境および使用するOracle Databaseのリリースに応じて、いずれか一方がデフォルトのファイルになります。タイムゾーン・ファイルおよびタイムゾーン名の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

例

次の例では、UTCからUS/東部タイムゾーンのタイムゾーン・オフセットを戻します。

SELECT TZ_OFFSET('US/Eastern') FROM DUAL;

TZ_OFFS
-------
-04:00

UID

構文

用途

UIDは、セッション・ユーザー(ログインしているユーザー)を一意に識別する整数を戻します。

関連項目:
セッション・ユーザーをOracle Databaseが判断する方法については、「USER」を参照してください。

例

次の例では、セッション・ユーザーのUIDが返されます。

SELECT UID FROM DUAL;

UNISTR

構文

用途

UNISTRは、引数としてテキスト・リテラルまたは文字データに変換する式を取り、各国語キャラクタ・セットで戻します。データベースの各国語キャラクタ・セットは、AL16UTF16またはUTF8です。UNISTRでは、文字列への文字のUnicodeエンコーディング値の指定を可能にすることによって、Unicode文字列リテラルがサポートされます。これは、NCHAR列にデータを挿入する場合などに有効です。

Unicodeエンコーディング値は、\xxxxという形式です。xxxxは、文字のUCS-2エンコーディング形式での16進数値です。補足文字は2つのコード・ユニットとしてエンコードされ、最初のコード・ユニットは上位サロゲート範囲(U+D800からU+DBFF)から、2番目のコード・ユニットは下位サロゲート範囲(U+DC00からU+DFFF)から取得されます。文字列そのものにバックスラッシュを含めるには、文字列の先頭に別のバックスラッシュ(\\)を付けます。

移植性およびデータ保護のために、UNISTR文字列の引数にはASCII文字およびUnicodeエンコーディング値のみを指定することをお薦めします。

関連項目:
Unicodeおよび各国語キャラクタ・セットの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

例

次の例では、ASCII文字およびUnicodeエンコーディング値をUNISTRファンクションに渡した後、そのUNISTRファンクションによって各国語キャラクタ・セットで文字列が戻されます。

SELECT UNISTR('abc\00e5\00f1\00f6') FROM DUAL;

UNISTR
------
abcåñö

UPDATEXML

注意:
UPDATEXMLファンクションは、非推奨です。これは、下位互換性を保つためにのみサポートされています。そのかわりに、XQuery Updateを使用してください。詳細は、『Oracle XML DB開発者ガイド』を参照してください。

構文

用途

UPDATEXMLは、引数としてXMLTypeインスタンスおよびXPath値の組を取り、更新された値を持つXMLTypeインスタンスを戻します。XPath_stringがXML要素の場合、対応するvalue_exprはXMLTypeインスタンスです。XPath_stringが属性またはテキスト・ノードの場合、value_exprは任意のスカラー・データ型となります。先頭にスラッシュを付けて絶対XPath_stringを指定したり、先頭のスラッシュを省略して相対XPath_stringを指定できます。先頭のスラッシュを省略した場合、相対パスのコンテキストは、デフォルトでルート・ノードに設定されます。

各XPath_stringおよびこれに対応するvalue_exprのターゲットのデータ型は一致する必要があります。オプションのnamespace_stringは、接頭辞のデフォルト・マッピングまたはネームスペース・マッピング(Oracle DatabaseがXPath式を評価する場合に使用)を指定するVARCHAR2値に解決される必要があります。

XML要素を更新してNULLにした場合、属性および子要素が削除されるため、要素は空になります。要素のテキスト・ノードを更新してNULLにした場合、その要素のテキスト値が削除されるため、要素自体は残りますが空になります。

多くの場合、このファンクションはメモリー内のXML文書を実体化して、その値を更新します。ただし、UPDATEXMLは、直接オブジェクト・リレーショナル列の値を更新するように、その列でのUPDATE文に対して最適化されます。この最適化には、次の条件があります。

- XMLType_instanceは、UPDATE ... SET句の列と同じである必要があります。

- XPath_stringは、スカラー・コンテンツとなる必要があります。

例

次の例では、サンプル・スキーマOE(XMLType型のwarehouse_spec列を持つ)にあるSan Francisco倉庫のドック数を4に更新します。

SELECT warehouse_name,
EXTRACT(warehouse_spec, '/Warehouse/Docks')
"Number of Docks"
FROM warehouses
WHERE warehouse_name = 'San Francisco';

WAREHOUSE_NAME       Number of Docks
-------------------- --------------------
San Francisco        <Docks>1</Docks>

UPDATE warehouses SET warehouse_spec =
UPDATEXML(warehouse_spec,
'/Warehouse/Docks/text()',4)
WHERE warehouse_name = 'San Francisco';

1 row updated.

SELECT warehouse_name,
EXTRACT(warehouse_spec, '/Warehouse/Docks')
"Number of Docks"
FROM warehouses
WHERE warehouse_name = 'San Francisco';

WAREHOUSE_NAME       Number of Docks
-------------------- --------------------
San Francisco        <Docks>4</Docks>

UPPER

構文

用途

UPPERは、すべての文字を大文字にしてcharを戻します。charは、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBデータ型です。戻り値は、charと同じデータ型です。データベースは、基礎となるキャラクタ・セットに対して定義されているバイナリ・マッピングに基づいて文字の大/小文字を設定します。大文字の区別については、「NLS_UPPER」を参照してください。

例

次の例では、各従業員の姓を大文字で戻します。

SELECT UPPER(last_name) "Uppercase"
FROM employees;

USER

構文

用途

USERは、セッション・ユーザー(ログオンしているユーザー)の名前を返します。これは、Real Application Securityセッションがアタッチまたはデタッチされると、データベース・セッション中に変化することがあります。エンタープライズ・ユーザーの場合、このファンクションはスキーマを返します。その他のユーザーの場合、データベース・ユーザー名を返します。現在のデータベース・セッションにReal Application Securityがアタッチされている場合は、ユーザーXS$NULLを返します。

このファンクションは、VARCHAR2値を返します。

Oracle Databaseは、空白埋め比較セマンティクスでこのファンクションの値を比較します。

分散SQL文では、UIDファンクションおよびUSERファンクションは、ローカル・データベース上のユーザーを識別します。CHECK制約の条件でこれらのファンクションは使用できません。

関連項目:
ユーザーXS$NULLの詳細は、『Oracle Database 2日でセキュリティ・ガイド』を参照してください。

例

次の例では、セッション・ユーザーとユーザーのUIDが返されます。

SELECT USER, UID FROM DUAL;

USERENV

構文

用途

注意:
USERENVは、下位互換用に保持されるレガシー・ファンクションです。現行の機能に対して組込みUSERENVネームスペースとともにSYS_CONTEXTファンクションを使用することをお薦めします。詳細は、「SYS_CONTEXT」を参照してください。

USERENVは現行のセッションについての情報を戻します。この情報は、アプリケーション固有の監査証跡表を書き込む場合、またはセッションで現在使用されている言語固有の文字を判断する場合に有効です。CHECK制約の条件で、USERENVは使用できません。表7-12に、parameter引数の値を示します。

SESSIONID、SIDおよびENTRYIDパラメータを使用するコール(NUMBERを戻す)以外のUSERENVへのすべてのコールは、VARCHAR2データを戻します。

表7-12 USERENVファンクションのパラメータ

パラメータ

戻り値

CLIENT_INFO

CLIENT_INFOは、DBMS_APPLICATION_INFOパッケージを使用するアプリケーションが格納できる64バイトまでのユーザー・セッション情報を戻します。

注意: 商業用のアプリケーションによっては、このコンテキスト値を使用する可能性があります。このコンテキスト領域の使用に対する制限については、これらのアプリケーションのドキュメントを参照してください。

関連項目:

- アプリケーション・コンテキストの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

- 「CREATE CONTEXT」および「SYS_CONTEXT」を参照してください。

ENTRYID

現行の監査エントリ番号を戻します。監査エントリIDの順序は、ファイングレイン監査レコードと通常の監査レコードで共通です。この属性を分散SQL文で使用することはできません。

ISDBA

ISDBAは、オペレーティング・システムまたはパスワード・ファイルによって、ユーザーがDBA権限を持っていると認証された場合、'TRUE'を戻します。

LANG

LANGは、言語名のISO略称を戻します。これは、既存の'LANGUAGE'パラメータを短縮したものです。

LANGUAGE

LANGUAGEは、現行のセッションで使用している言語(language)および地域(territory)を、データベース・キャラクタ・セット(character set)も含めた次の書式で戻します。

language_territory.characterset

SESSIONID

SESSIONIDは、監査セッション識別子を戻します。このパラメータを分散SQL文で指定することはできません。

SID

SIDは、セッションIDを戻します。

TERMINAL

TERMINALは、現行のセッションの端末に対するオペレーティング・システム識別子を戻します。分散SQL文では、このパラメータはローカル・セッションの識別子を戻します。分散環境では、リモートのSELECTに対してのみこのパラメータを使用でき、リモートのINSERT、UPDATEまたはDELETEには使用できません。

例

次の例では、現行のセッションのLANGUAGEパラメータを戻します。

SELECT USERENV('LANGUAGE') "Language" FROM DUAL;

Language
-----------------------------------
AMERICAN_AMERICA.WE8ISO8859P1

VALUE

構文

用途

VALUEは、引数としてオブジェクト表の行に関連付けられた相関変数(表別名)を取り、オブジェクト表に格納されたオブジェクト・インスタンスを戻します。オブジェクト・インスタンスの型は、オブジェクト表と同じ型です。

例

次の例では、「置換可能な表および列のサンプル:」で作成されたoe.personsサンプル表を使用します。

SELECT VALUE(p) FROM persons p;

VALUE(P)(NAME, SSN)
-------------------------------------------------------------
PERSON_T('Bob', 1234)
EMPLOYEE_T('Joe', 32456, 12, 100000)
PART_TIME_EMP_T('Tim', 5678, 13, 1000, 20)

関連項目:
VALUEファンクションでのIS OF type条件の使用方法については、「IS OF type条件」を参照してください。

VAR_POP

構文

関連項目:
構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

VAR_POPは、数値の集合にあるNULLを削除した後、この集合の母集団分散を戻します。これは、集計ファンクションまたは分析ファンクションとして使用できます。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

ファンクションが空の集合に適用されると、NULLを戻します。このファンクションは、次の計算を行います。

SUM((expr - (SUM(expr) / COUNT(expr)))2) / COUNT(expr)

関連項目:
exprの書式の詳細は、「SQL式」を参照してください。「集計ファンクション」も参照してください。

集計の例

次の例では、employees表にある給与の母集団分散を戻します。

SELECT VAR_POP(salary) FROM employees;

VAR_POP(SALARY)
---------------
15141964.9

分析の例

次の例では、sh.sales表での1998年における月ごとの売上について、累積の母集団および標本分散を計算します。

SELECT t.calendar_month_desc,
VAR_POP(SUM(s.amount_sold))
OVER (ORDER BY t.calendar_month_desc) "Var_Pop",
VAR_SAMP(SUM(s.amount_sold))
OVER (ORDER BY t.calendar_month_desc) "Var_Samp"
FROM sales s, times t
WHERE s.time_id = t.time_id AND t.calendar_year = 1998
GROUP BY t.calendar_month_desc
ORDER BY t.calendar_month_desc, "Var_Pop", "Var_Samp";

CALENDAR    Var_Pop   Var_Samp
-------- ---------- ----------
1998-01           0
1998-02  2269111326 4538222653
1998-03  5.5849E+10 8.3774E+10
1998-04  4.8252E+10 6.4336E+10
1998-05  6.0020E+10 7.5025E+10
1998-06  5.4091E+10 6.4909E+10
1998-07  4.7150E+10 5.5009E+10
1998-08  4.1345E+10 4.7252E+10
1998-09  3.9591E+10 4.4540E+10
1998-10  3.9995E+10 4.4439E+10
1998-11  3.6870E+10 4.0558E+10
1998-12  4.0216E+10 4.3872E+10

VAR_SAMP

構文

関連項目:
構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

VAR_SAMPは、数値の集合にあるNULLを削除した後、この集合の標本分散を戻します。これは、集計ファンクションまたは分析ファンクションとして使用できます。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を戻します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

ファンクションが空の集合に適用されると、NULLを戻します。このファンクションは、次の計算を行います。

(SUM(expr - (SUM(expr) / COUNT(expr)))2) / (COUNT(expr) - 1)

このファンクションは、1つの要素の集合を入力するとVARIANCEは0を戻し、VAR_SAMPはNULLを戻すという点を除いては、VARIANCEに似ています。

関連項目:
exprの書式の詳細は、「SQL式」を参照してください。「集計ファンクション」も参照してください。

集計の例

次の例では、サンプル表employeesにある給与の標本分散を計算します。

SELECT VAR_SAMP(salary) FROM employees;

VAR_SAMP(SALARY)
----------------
15284813.7

分析の例

「VAR_POP」の分析の例を参照してください。

VARIANCE

構文

関連項目:
構文、セマンティクスおよび制限事項の詳細は、「分析ファンクション」を参照してください。

用途

VARIANCEはexprの分散を戻します。これは、集計ファンクションまたは分析ファンクションとして使用できます。

exprの分散の計算結果は、次のようになります。

- exprの行数が1の場合は0(ゼロ)

- exprの行数が1を超える場合はVAR_SAMP

DISTINCTを指定する場合は、analytic_clauseのquery_partition_clauseのみ指定できます。order_by_clauseおよびwindowing_clauseは指定できません。

このファンクションは、引数として、任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。また、引数の数値データ型と同じデータ型を返します。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。exprの書式の詳細は、「SQL式」を参照してください。「集計ファンクション」も参照してください。

集計の例

次の例では、サンプル表employeesにあるすべての給与の分散を計算します。

SELECT VARIANCE(salary) "Variance"
FROM employees;

Variance
----------
15283140.5

分析の例

次の例では、雇用日で順序付けられた部門30の給与の値の累積分散を戻します。

SELECT last_name, salary, VARIANCE(salary)
OVER (ORDER BY hire_date) "Variance"
FROM employees
WHERE department_id = 30
ORDER BY last_name, salary, "Variance";

LAST_NAME                     SALARY   Variance
------------------------- ---------- ----------
Baida                           2900 16283333.3
Colmenares                      2500   11307000
Himuro                          2600   13317000
Khoo                            3100   31205000
Raphaely                       11000          0
Tobias                          2800 21623333.3

VSIZE

構文

用途

VSIZEは、exprの内部表現でのバイト数を戻します。exprがNULLの場合はNULLを戻します。

このファンクションは、CLOBデータを直接的にサポートしていません。ただし、暗黙的なデータ変換を使用してCLOBを引数として渡すことはできます。

関連項目:
詳細は、「データ型の比較規則」を参照してください。

例

次の例では、部門10の従業員のlast_name列のバイト数を戻します。

SELECT last_name, VSIZE (last_name) "BYTES"
FROM employees
WHERE department_id = 10
ORDER BY employee_id;

LAST_NAME            BYTES
--------------- ----------
Whalen                   6

WIDTH_BUCKET

構文

用途

WIDTH_BUCKETを使用すると、ヒストグラムの幅が同じサイズに分割された等幅ヒストグラムを作成できます。このファンクションと、等高ヒストグラムを作成するNTILEを比較してください。各バケットが実際の数値線幅のclosed-open間隔であることが理想です。たとえば、間隔に10が含まれ20が排除されることを示すために、バケットは10.00から19.999...のスコアに割り当てられます。これは、[10, 20]と表すこともできます。

指定された式に対して、WIDTH_BUCKETは、この式の値が評価された後に該当するバケット数を戻します。

- exprは、ヒストグラムが作成される式です。この式は、数値または日時値、あるいは数値または日時値に暗黙的に変換可能な値に評価される必要があります。exprがNULLと評価された場合、式はNULLを戻します。

- min_valueおよびmax_valueは、exprの許容域のエンド・ポイントに解決される式です。これらの式は両方とも数値または日時値に評価される必要があり、いずれもNULLに評価されません。

- num_bucketsは、バケット数を示す定数に解決される式です。この式は、正の整数に評価される必要があります。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。

Oracle Databaseは、必要に応じて、0(ゼロ)の下位バケットおよびnum_buckets+1の上位バケットを作成します。これらのバケットは、min_value未満およびmax_valueより大きい値を処理し、エンドポイントの妥当性チェックに有効です。

例

次の例では、サンプル表oe.customersのスイスの顧客のcredit_limit列に10バケットのヒストグラムを作成し、各顧客のバケット数(「クレジット・グループ」)を戻します。最大値以上のクレジット利用限度額を持つ顧客は、上位バケット11に割り当てられます。

SELECT customer_id, cust_last_name, credit_limit,
WIDTH_BUCKET(credit_limit, 100, 5000, 10) "Credit Group"
FROM customers WHERE nls_territory = 'SWITZERLAND'
ORDER BY "Credit Group", customer_id, cust_last_name, credit_limit;

CUSTOMER_ID CUST_LAST_NAME       CREDIT_LIMIT Credit Group
----------- -------------------- ------------ ------------
825 Dreyfuss                      500            1
826 Barkin                        500            1
827 Siegel                        500            1
853 Palin                         400            1
843 Oates                         700            2
844 Julius                        700            2
835 Eastwood                     1200            3
836 Berenger                     1200            3
837 Stanton                      1200            3
840 Elliott                      1400            3
841 Boyer                        1400            3
842 Stern                        1400            3
848 Olmos                        1800            4
849 Kaurusmdki                   1800            4
828 Minnelli                     2300            5
829 Hunter                       2300            5
850 Finney                       2300            5
851 Brown                        2300            5
852 Tanner                       2300            5
830 Dutt                         3500            7
831 Bel Geddes                   3500            7
832 Spacek                       3500            7
833 Moranis                      3500            7
834 Idle                         3500            7
838 Nicholson                    3500            7
839 Johnson                      3500            7
845 Fawcett                      5000           11
846 Brando                       5000           11
847 Streep                       5000           11

XMLAGG

構文

用途

XMLAggは集計ファンクションです。XMLフラグメントのコレクションを取り、集計されたXML文書を戻します。NULLを戻す引数は結果から排除されます。

XMLAggは、ノードのコレクションを戻す点を除いて、SYS_XMLAggに似ていますが、XMLAggはXMLFormatオブジェクトを使用した書式設定は受け入れません。また、XMLAGGは、SYS_XMLAGGとは異なり、出力を要素タグで囲みません。

このorder_by_clauseにかぎり、他の使用方法とは異なり、数値リテラルは列の位置として認識されず、単に数値リテラルとして解釈されます。

関連項目:
「XMLELEMENT」および「SYS_XMLAGG」を参照してください。

例

次の例では、従業員のジョブIDと姓を要素の内容とするEmployee要素を含むDepartment要素を生成します。

SELECT XMLELEMENT("Department",
XMLAGG(XMLELEMENT("Employee",
e.job_id||' '||e.last_name)
ORDER BY last_name))
as "Dept_list"
FROM employees e
WHERE e.department_id = 30;

Dept_list
-------------------------------------------------------------
<Department>
<Employee>PU_CLERK Baida</Employee>
<Employee>PU_CLERK Colmenares</Employee>
<Employee>PU_CLERK Himuro</Employee>
<Employee>PU_CLERK Khoo</Employee>
<Employee>PU_MAN Raphaely</Employee>
<Employee>PU_CLERK Tobias</Employee>
</Department>

XMLAGGが行を集計するため、結果は単一行となります。GROUP BY句を使用して、戻された行の集合を複数のグループにまとめることができます。

SELECT XMLELEMENT("Department",
XMLAGG(XMLELEMENT("Employee", e.job_id||' '||e.last_name)))
AS "Dept_list"
FROM employees e
GROUP BY e.department_id;

Dept_list
---------------------------------------------------------
<Department>
<Employee>AD_ASST Whalen</Employee>
</Department>

<Department>
<Employee>MK_MAN Hartstein</Employee>
<Employee>MK_REP Fay</Employee>
</Department>

<Department>
<Employee>PU_MAN Raphaely</Employee>
<Employee>PU_CLERK Khoo</Employee>
<Employee>PU_CLERK Tobias</Employee>
<Employee>PU_CLERK Baida</Employee>
<Employee>PU_CLERK Colmenares</Employee>
<Employee>PU_CLERK Himuro</Employee>
</Department>
. . .

XMLCAST

構文

用途

XMLCastは、value_expressionをdatatypeで指定されたスカラーSQLデータ型にキャストします。value_expression引数は、評価されるSQL式です。datatype引数にはNUMBER、VARCHAR2、CHAR、CLOB、BLOBおよびREF XMLTYPEデータ型、任意の日時データ型を指定できます。

関連項目:
このファンクションの使用の詳細および例は、『Oracle XML DB開発者ガイド』を参照してください。

XMLCDATA

構文

用途

XMLCDataは、value_exprを評価してCDATAセクションを生成します。value_exprは文字列に変換する必要があります。このファンクションの戻り値は、次の書式になります。

<![CDATA[string]]>

結果値が無効なXML CDATAセクションの場合は、エラーが戻されます。次の条件がXMLCDataに適用されます。

- value_exprには、サブストリング]]>を含めることはできません。

- value_exprがNULLと評価された場合、このファンクションはNULLを戻します。

関連項目:
このファンクションの詳細は、『Oracle XML DB開発者ガイド』を参照してください。

例

次の文は、DUAL表を使用して、XMLCDataの構文を示します。

SELECT XMLELEMENT("PurchaseOrder",
XMLAttributes(dummy as "pono"),
XMLCdata('<!DOCTYPE po_dom_group [
<!ELEMENT po_dom_group(student_name)*>
<!ELEMENT po_purch_name (#PCDATA)>
<!ATTLIST po_name po_no ID #REQUIRED>
<!ATTLIST po_name trust_1 IDREF #IMPLIED>
<!ATTLIST po_name trust_2 IDREF #IMPLIED>
]>')) "XMLCData" FROM DUAL;

XMLCData
----------------------------------------------------------
<PurchaseOrder pono="X"><![CDATA[
<!DOCTYPE po_dom_group [
<!ELEMENT po_dom_group(student_name)*>
<!ELEMENT po_purch_name (#PCDATA)>
<!ATTLIST po_name po_no ID #REQUIRED>
<!ATTLIST po_name trust_1 IDREF #IMPLIED>
<!ATTLIST po_name trust_2 IDREF #IMPLIED>
]>
]]>
</PurchaseOrder>

XMLCOLATTVAL

構文

用途

XMLCOLATTVALは、XMLフラグメントを作成し、各XMLフラグメントの名前がcolumn、属性がnameとなるように、結果としてできたXMLを展開します。

AS句を使用して、name属性の値を列名以外の値に変更できます。この場合、文字列リテラルのc_aliasを指定するか、またはEVALNAME value_exprを指定します。後者の場合は、値の式が評価され、その結果(文字列リテラル)が別名として使用されます。この別名は、初期化パラメータがMAX_STRING_SIZE = STANDARDの場合は最大4,000文字になります。また、MAX_STRING_SIZE = EXTENDEDの場合は最大32,767文字になります。詳細は、「拡張データ型」を参照してください。

value_exprの値を指定する必要があります。value_exprがNULLの場合、要素は戻されません。

XMLColAttValの制限事項: value_exprにオブジェクト型の列を指定することはできません。

例

次の例では、従業員のサブセットに対してEmp要素を作成します。このとき、Empの内容として、employee_id、last_nameおよびsalaryの各要素がネストされます。ネストされた各要素にはcolumnという名前が付き、属性値として列名を持つname属性が与えられます。

SELECT XMLELEMENT("Emp",
XMLCOLATTVAL(e.employee_id, e.last_name, e.salary)) "Emp Element"
FROM employees e
WHERE employee_id = 204;

Emp Element
--------------------------------------------------------------------
<Emp>
<column name="EMPLOYEE_ID">204</column>
<column name="LAST_NAME">Baer</column>
<column name="SALARY">10000</column>
</Emp>

これらの2つのファンクションの出力の比較については、「XMLFOREST」の例を参照してください。

XMLCOMMENT

構文

用途

XMLCommentは、value_exprの評価結果を使用してXMLコメントを生成します。value_exprは文字列に変換する必要があります。このファンクションには、2つの連続したダッシュ(ハイフン)を含めることはできません。このファンクションの戻り値は、次の書式になります。

<!--string-->

value_exprがNULLである場合、このファンクションはNULLを戻します。

関連項目:
このファンクションの詳細は、『Oracle XML DB開発者ガイド』を参照してください。

例

次の例は、DUAL表を使用して、XMLComment構文を示します。

SELECT XMLCOMMENT('OrderAnalysisComp imported, reconfigured, disassembled')
AS "XMLCOMMENT" FROM DUAL;

XMLCOMMENT
--------------------------------------------------------------------------------
<!--OrderAnalysisComp imported, reconfigured, disassembled-->

XMLCONCAT

構文

用途

XMLCONCATは、入力として一連のXMLTypeインスタンスを取り、各行について一連の要素を連結し、連結した結果を戻します。XMLCONCATはXMLSEQUENCEの逆の処理をします。

NULL式は結果から排除されます。値のすべての式がNULLの場合、このファンクションはNULLを戻します。

関連項目:
「XMLSEQUENCE」

例

次の例では、従業員のサブセットの名前と姓に対してXML要素を作成し、作成した要素を連結して戻します。

SELECT XMLCONCAT(XMLELEMENT("First", e.first_name),
XMLELEMENT("Last", e.last_name)) AS "Result"
FROM employees e
WHERE e.employee_id > 202;

Result
----------------------------------------------------------------
<First>Susan</First>
<Last>Mavris</Last>

<First>Hermann</First>
<Last>Baer</Last>

<First>Shelley</First>
<Last>Higgins</Last>

<First>William</First>
<Last>Gietz</Last>

4 rows selected.

XMLDIFF

構文

用途

XMLDiffファンクションは、XmlDiff C APIのSQLインタフェースです。このファンクションは、2つのXML文書を比較し、Xdiffスキーマに基づいたXMLの差異を取得します。diff文書がXMLType文書として戻されます。

- 最初の2つの引数には、2つのXMLType文書の名前を指定します。

- integerには、CファンクションXmlDiffのhashLevelを表す数値を指定します。ハッシュを使用しない場合は、この引数を0(ゼロ)に設定するか、または引数全体を省略します。ハッシュを使用しないでフラグを指定する場合は、この引数を0(ゼロ)に設定する必要があります。

- stringには、ファンクションの動作を制御するフラグを指定します。これらのフラグは、セミコロンで区切られた1つ以上の名前で指定します。これらの名前は、XmlDiffファンクションの定数の名前と同じです。

関連項目:
このファンクションの使用方法と例については、『Oracle XML Developer's Kitプログラマーズ・ガイド』を参照してください。CのXML APIの詳細は、『Oracle Database XML C APIリファレンス』を参照してください

例

次の例では、2つのXML文書を比較し、差異をXMLType文書として戻します。

SELECT XMLDIFF(
XMLTYPE('<?xml version="1.0"?>
<bk:book xmlns:bk="http://example.com">
<bk:tr>
<bk:td>
<bk:chapter>
Chapter 1.
</bk:chapter>
</bk:td>
<bk:td>
<bk:chapter>
Chapter 2.
</bk:chapter>
</bk:td>
</bk:tr>
</bk:book>'),
XMLTYPE('<?xml version="1.0"?>
<bk:book xmlns:bk="http://example.com">
<bk:tr>
<bk:td>
<bk:chapter>
Chapter 1.
</bk:chapter>
</bk:td>
<bk:td/>
</bk:tr>
</bk:book>')
)
FROM DUAL;

XMLELEMENT

構文

XML_attributes_clause::=

用途

XMLElementは、identifierに対する要素名を取るか、またはEVALNAME value_exprの要素名、要素に対する属性のオプションのコレクション、およびその要素の内容を構成する引数を評価します。このファンクションはXMLType型のインスタンスを戻します。XMLElementは、戻されたXMLに属性を格納できる点を除いてSYS_XMLGenに似ていますが、XMLElementはXMLFormatオブジェクトを使用した書式設定は受け入れません。

次の項に示すとおり、通常は、XMLELEMENTファンクションはネストされており、ネスト構造のXML文書を生成します。

ENTITYESCAPINGおよびNONENTITYESCAPINGキーワードについては、『Oracle XML DB開発者ガイド』を参照してください。

囲みタグに使用するOracle Databaseの値を指定する必要があります。この場合、文字列リテラルのidentifierを指定するか、またはEVALNAME value_exprを指定します。後者の場合は、値の式が評価され、その結果(文字列リテラル)が識別子として使用されます。この識別子は、列名または列の参照である必要はありません。式またはNULLは指定できません。初期化パラメータがMAX_STRING_SIZE = STANDARDの場合は最大4,000文字になります。また、MAX_STRING_SIZE = EXTENDEDの場合は最大32,767文字になります。

要素の内容を構成するオブジェクトは、XMLATTRIBUTESキーワードの後に指定します。XML_attributes_clauseでは、value_exprがNULLの場合、その値の式に対する属性は作成されません。value_exprの型に、オブジェクト型またはコレクションは指定できません。AS句を使用してvalue_exprに別名を指定すると、c_aliasまたは評価された値の式(EVALNAME value_expr)は、初期化パラメータがMAX_STRING_SIZE = STANDARDの場合は最大4,000文字まで指定可能になります。また、MAX_STRING_SIZE = EXTENDEDの場合は最大32,767文字まで指定可能になります。

関連項目:
MAX_STRING_SIZEの詳細は、「拡張データ型」を参照してください。

構文図のXML_attributes_clauseに続くオプションのvalue_exprは、次のようになります。

- value_exprがスカラー式である場合、AS句は省略できます。この場合、Oracleは列名を要素名として使用します。

- value_exprがオブジェクト型またはコレクションである場合、AS句は必須です。この場合、Oracleは指定されたc_aliasを囲みタグとして使用します。

- value_exprがNULLの場合、その値の式に対する要素は作成されません。

関連項目:
「SYS_XMLGEN」

例

次の例では、一連の従業員について、従業員の名前と雇用日を指定する、ネストされた要素を持つEmp要素を生成します。

SELECT XMLELEMENT("Emp", XMLELEMENT("Name",
e.job_id||' '||e.last_name),
XMLELEMENT("Hiredate", e.hire_date)) as "Result"
FROM employees e WHERE employee_id > 200;

Result
-------------------------------------------------------------------
<Emp>
<Name>MK_MAN Hartstein</Name>
<Hiredate>2004-02-17</Hiredate>
</Emp>

<Emp>
<Name>MK_REP Fay</Name>
<Hiredate>2005-08-17</Hiredate>
</Emp>

<Emp>
<Name>HR_REP Mavris</Name>
<Hiredate>2002-06-07</Hiredate>
</Emp>

<Emp>
<Name>PR_REP Baer</Name>
<Hiredate>2002-06-07</Hiredate>
</Emp>

<Emp>
<Name>AC_MGR Higgins</Name>
<Hiredate>2002-06-07</Hiredate>
</Emp>

<Emp>
<Name>AC_ACCOUNT Gietz</Name>
<Hiredate>2002-06-07</Hiredate>
</Emp>

6 rows selected.

次の例では、XMLELEMENTファンクションにXML_attributes_clauseを使用して、トップレベル要素に対する属性値を持つ、ネストされたXML要素を作成します。

SELECT XMLELEMENT("Emp",
XMLATTRIBUTES(e.employee_id AS "ID", e.last_name),
XMLELEMENT("Dept", e.department_id),
XMLELEMENT("Salary", e.salary)) AS "Emp Element"
FROM employees e
WHERE e.employee_id = 206;

Emp Element
---------------------------------------------------------------
<Emp ID="206" LAST_NAME="Gietz">
<Dept>110</Dept>
<Salary>8300</Salary>
</Emp>

last_name列にはAS identifier句が指定されていません。その結果、戻されたXMLは、デフォルトで列名last_nameを使用します。

最後に、次の例では、XML_attributes_clauseに副問合せを使用して、別の表から要素の属性に情報を取り出します。

SELECT XMLELEMENT("Emp", XMLATTRIBUTES(e.employee_id, e.last_name),
XMLELEMENT("Dept", XMLATTRIBUTES(e.department_id,
(SELECT d.department_name FROM departments d
WHERE d.department_id = e.department_id) as "Dept_name")),
XMLELEMENT("salary", e.salary),
XMLELEMENT("Hiredate", e.hire_date)) AS "Emp Element"
FROM employees e
WHERE employee_id = 205;

Emp Element
-------------------------------------------------------------------
<Emp EMPLOYEE_ID="205" LAST_NAME="Higgins">
<Dept DEPARTMENT_ID="110" Dept_name="Accounting"/>
<salary>12008</salary>
<Hiredate>2002-06-07</Hiredate>
</Emp>

XMLEXISTS

構文

XML_passing_clause::=

用途

XMLExistsは、指定されたXQuery式から空でないXQuery順序が戻されるかどうかをチェックします。戻される場合、このファンクションはTRUEを戻し、それ以外の場合はFALSEを戻します。引数XQuery_stringはリテラル文字列ですが、XML_passing_clauseを使用してバインドするXQuery変数を含めることができます。

XML_passing_clauseのexprは、XMLTypeまたはSQLスカラー・データ型のインスタンスを戻し、XQuery式を評価するためのコンテキストとして使用されます。PASSING句には、識別子を指定せずに1つのexprのみを指定できます。各exprの評価結果は、XQuery_stringの対応する識別子にバインドされます。exprの後にAS句が続かない場合、式の評価結果はXQuery_stringの評価用のコンテキスト項目として使用されます。

関連項目:
このファンクションの使用の詳細および例は、『Oracle XML DB開発者ガイド』を参照してください。

XMLFOREST

構文

用途

XMLFORESTは、各引数パラメータをXMLに変換し、変換された引数を連結したXMLフラグメントを戻します。

- value_exprがスカラー式である場合、AS句は省略できます。この場合、Oracle Databaseは列名を要素名として使用します。

- value_exprがオブジェクト型またはコレクションである場合、AS句は必須です。この場合、Oracleは指定された式を囲みタグとして使用します。
この場合、文字列リテラルのc_aliasを指定するか、またはEVALNAME value_exprを指定します。後者の場合は、値の式が評価され、その結果(文字列リテラル)が識別子として使用されます。この識別子は、列名または列の参照である必要はありません。式またはNULLは指定できません。初期化パラメータがMAX_STRING_SIZE = STANDARDの場合は最大4,000文字になります。また、MAX_STRING_SIZE = EXTENDEDの場合は最大32,767文字になります。詳細は、「拡張データ型」を参照してください。

- value_exprがNULLの場合、そのvalue_exprに対する要素は作成されません。

例

次の例では、従業員のサブセットに対してEmp要素を作成します。このとき、Empの内容として、employee_id、last_nameおよびsalaryの各要素がネストされます。

SELECT XMLELEMENT("Emp",
XMLFOREST(e.employee_id, e.last_name, e.salary))
"Emp Element"
FROM employees e WHERE employee_id = 204;

Emp Element
----------------------------------------------------------------
<Emp>
<EMPLOYEE_ID>204</EMPLOYEE_ID>
<LAST_NAME>Baer</LAST_NAME>
<SALARY>10000</SALARY>
</Emp>

これらの2つのファンクションの出力の比較については、「XMLCOLATTVAL」の例を参照してください。

XMLISVALID

構文

用途

XMLISVALIDは、入力されたXMLType_instanceが、関連するXMLスキーマに準拠するかどうかをチェックします。XMLType_instanceに対して記録される検証ステータスは変更されません。

入力されたXMLドキュメントが有効であると判断された場合、XMLISVALIDは1を戻します。無効であると判断された場合は、0(ゼロ)を戻します。引数としてXMLSchema_URLを指定した場合、規格準拠のチェックに使用されます。指定しなかった場合、XMLドキュメントで指定されたXMLスキーマが規格準拠のチェックに使用されます。

- XMLType_instanceは、検証されるXMLTypeインスタンスです。

- XMLSchema_URLは、規格準拠のチェックを行うXMLスキーマのURLです。

- elementは、規格準拠のチェックを行う指定されたスキーマの要素です。複数のトップレベル要素を定義するXMLスキーマを使用しており、これらの要素の特定の1つに対して規格準拠のチェックを行う場合に指定します。

関連項目:
このファンクションの使用の詳細および例は、『Oracle XML DB開発者ガイド』を参照してください

XMLPARSE

構文

用途

XMLParseは、value_exprの評価結果からXMLインスタンスを解析して生成します。value_exprは文字列に変換する必要があります。value_exprがNULLである場合、このファンクションはNULLを戻します。

- DOCUMENTを指定する場合、value_exprは単一ルートのXML文書である必要があります。

- CONTENTを指定する場合、value_exprは有効なXML値である必要があります。

- WELLFORMEDを指定する場合、value_exprは整形式XML文書である必要があります。これは、入力が正しい書式であることを確認する、データベースによる妥当性チェックが実行されないためです。

関連項目:
このファンクションの詳細は、『Oracle XML DB開発者ガイド』を参照してください。

例

次の例は、DUAL表を使用して、XMLParseの構文を示します。

SELECT XMLPARSE(CONTENT '124 <purchaseOrder poNo="12435">
<customerName> Acme Enterprises</customerName>
<itemNo>32987457</itemNo>
</purchaseOrder>'
WELLFORMED) AS PO FROM DUAL;

PO
-----------------------------------------------------------------
124 <purchaseOrder poNo="12435">
<customerName> Acme Enterprises</customerName>
<itemNo>32987457</itemNo>
</purchaseOrder>

XMLPATCH

構文

用途

XMLPatchファンクションは、XmlPatch C APIのSQLインタフェースです。このファンクションは、指定された変更を適用してXML文書を修正します。修正されたXMLType文書が戻されます。

- 最初の引数には、入力XMLType文書の名前を指定します。

- 2番目の引数には、最初の文書に適用する変更を含むXMLType文書を指定します。変更は、Xdiff XMLスキーマに基づいている必要があります。Oracle XML Developer's KitのJavaメソッドdiff()から、XML出力を指定できます。

関連項目:
このファンクションの使用方法と例については、『Oracle XML Developer's Kitプログラマーズ・ガイド』を参照してください。CのXML APIの詳細は、『Oracle Database XML C APIリファレンス』を参照してください

例

次の例では、別のXMLType文書に指定された変更を適用してXMLType文書を修正し、修正したXMLType文書を戻します。

SELECT XMLPATCH(
XMLTYPE('<?xml version="1.0"?>
<bk:book xmlns:bk="http://example.com">
<bk:tr>
<bk:td>
<bk:chapter>
Chapter 1.
</bk:chapter>
</bk:td>
<bk:td>
<bk:chapter>
Chapter 2.
</bk:chapter>
</bk:td>
</bk:tr>
</bk:book>'),
XMLTYPE('<?xml version="1.0"?>
<xd:xdiff xsi:schemaLocation="http://xmlns.oracle.com/xdb/xdiff.xsd
http://xmlns.oracle.com/xdb/xdiff.xsd"
xmlns:xd="http://xmlns.oracle.com/xdb/xdiff.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:bk="http://example.com">
<?oracle-xmldiff operations-in-docorder="true" output-model="snapshot"
diff-algorithm="global"?>
<xd:delete-node xd:node-type="element"
xd:xpath="/bk:book[1]/bk:tr[1]/bk:td[2]/bk:chapter[1]"/>
</xd:xdiff>')
)
FROM DUAL;

XMLPI

構文

用途

XMLPIは、identifierとvalue_exprの評価結果(オプション)を使用して、XMLの処理命令を生成します。通常、処理命令は、XML文書のすべてまたは一部に関連付けられた情報をアプリケーションに提供するために使用されます。アプリケーションはこの処理命令を使用して、XML文書の最適な処理方法を決定します。

囲みタグに使用するOracle Databaseの値を指定する必要があります。この場合、文字列リテラルのidentifierを指定するか、またはEVALNAME value_exprを指定します。後者の場合は、値の式が評価され、その結果(文字列リテラル)が識別子として使用されます。この識別子は、列名または列の参照である必要はありません。式またはNULLは指定できません。初期化パラメータがMAX_STRING_SIZE = STANDARDの場合は最大4,000文字になります。また、MAX_STRING_SIZE = EXTENDEDの場合は最大32,767文字になります。詳細は、「拡張データ型」を参照してください。

オプションのvalue_exprは文字列に変換する必要があります。オプションのvalue_exprを指定しない場合、デフォルトは長さが0(ゼロ)の文字列です。このファンクションの戻り値は、次の書式になります。

<?identifier string?>

XMLPIには、次の制限事項があります。

- identifierは、処理命令の有効な対象である必要があります。

- xmlは、identifierと組み合せて指定することはできません。

- identifierには、連続文字?>を含めることはできません。

関連項目:
このファンクションの詳細は、『Oracle XML DB開発者ガイド』を参照してください。

例

次の文は、DUAL表を使用して、XMLPIの構文の使用を示します。

SELECT XMLPI(NAME "Order analysisComp", 'imported, reconfigured, disassembled')
AS "XMLPI" FROM DUAL;

XMLPI
--------------------------------------------------------------------------------
<?Order analysisComp imported, reconfigured, disassembled?>

XMLQUERY

構文

XML_passing_clause::=

用途

XMLQUERYでは、SQL文のXMLデータを問い合せることができます。このファンクションは、文字列リテラル、オプションのコンテキスト項目、および他のバインド変数としてXQuery式を取り、これらの入力値を使用してXQuery式の評価結果を戻します。

- XQuery_stringは、プロローグを含む完全なXQuery式です。

- XML_passing_clauseのexprは、XMLTypeまたはSQLスカラー・データ型のインスタンスを戻し、XQuery式を評価するためのコンテキストとして使用されます。PASSING句には、識別子を指定せずに1つのexprのみを指定できます。各exprの評価結果は、XQuery_stringの対応する識別子にバインドされます。exprの後にAS句が続かない場合、式の評価結果はXQuery_stringの評価用のコンテキスト項目として使用されます。

- RETURNING CONTENTは、XQuery式の評価結果がXML 1.0文書か、またはXML 1.0セマンティクスに準拠したドキュメント・フラグメントのいずれかであることを示します。

- 結果セットが空の場合、このファンクションは、SQL NULL値を戻します。NULL ON EMPTYキーワードがデフォルトで実装されます。このキーワードは、意味を明確にするために示されます。

関連項目:
このファンクションの詳細は、『Oracle XML DB開発者ガイド』を参照してください。

例

次の文では、XML_passing_clauseのoe.warehouses表のwarehouse_spec列をコンテキスト項目として指定します。この文は、領域が50Kより大きいウェアハウスに関する特定の情報を戻します。

SELECT warehouse_name,
EXTRACTVALUE(warehouse_spec, '/Warehouse/Area'),
XMLQuery(
'for $i in /Warehouse
where $i/Area > 50000
return <Details>
<Docks num="{$i/Docks}"/>
<Rail>
{
if ($i/RailAccess = "Y") then "true" else "false"
}
</Rail>
</Details>' PASSING warehouse_spec RETURNING CONTENT) "Big_warehouses"
FROM warehouses;

WAREHOUSE_ID Area      Big_warehouses
------------ --------- --------------------------------------------------------
1     25000
2     50000
3     85700 <Details><Docks></Docks><Rail>false</Rail></Details>
4    103000 <Details><Docks num="3"></Docks><Rail>true</Rail></Details>
. . .

XMLROOT

構文

用途

XMLROOTでは、既存のXML値のXMLルート情報(プロローグ)のバージョンとスタンドアロンのプロパティを指定して、新しいXML値を作成できます。value_exprがすでにプロローグを持っている場合、エラーが戻されます。入力がNULLの場合、このファンクションはNULLを戻します。

戻り値は次の書式になります。

<?xml version = "version" [ STANDALONE = "{yes | no}" ]?>

- 最初のvalue_exprでは、XML値を指定します。この値に対してプロローグ情報を指定します。

- VERSION句のvalue_exprは、有効なXMLバージョンを表す文字列である必要があります。VERSIONにNO VALUEを指定すると、バージョンはデフォルトで1.0になります。

- オプションのSTANDALONE句を指定しない場合や、NO VALUEを指定した場合は、ファンクションの戻り値にスタンドアロンのプロパティは存在しません。

例

次の文は、DUAL表を使用して、XMLROOTの構文を示します。

SELECT XMLROOT ( XMLType('<poid>143598</poid>'), VERSION '1.0', STANDALONE YES)
AS "XMLROOT" FROM DUAL;

XMLROOT
--------------------------------------------------------------------------------
<?xml version="1.0" standalone="yes"?>
<poid>143598</poid>

XMLSEQUENCE

注意:
XMLSEQUENCEファンクションは、非推奨です。これは、下位互換性を保つためにのみサポートされています。ただし、かわりにXMLTABLEファンクションを使用することをお薦めします。詳細は、「XMLTABLE」を参照してください。

構文

用途

XMLSEQUENCEには2つの書式があります。

- 1つ目の書式は、入力としてXMLTypeインスタンスを取り、XMLTypeにあるトップレベルのノードのVARRAYを戻します。この書式のかわりに、SQL/XML標準ファンクションXMLTableを使用すると効果的です。このファンクションを使用すると、SQLコードがより読みやすくなります。Oracle Database 10gリリース2より前のリリースでは、このリリースのXMLTableファンクションでより効果的に実行されるいくつかの機能を、XMLSequenceがSQLファンクションTABLEを使用して実行していました。

- 2つ目の書式は、入力としてREFCURSORインスタンスおよびオプションのXMLFormatオブジェクトのインスタンスを取り、カーソルの各行に対して、XMLSequence型としてXML文書を戻します。

XMLSEQUENCEはXMLTypeのコレクションを戻すため、このファンクションをTABLE句で使用して、コレクション値をネスト解除することで複数行にし、SQL問合せでの処理をさらに進めることができます。

関連項目:
このファンクションの詳細は、『Oracle XML DB開発者ガイド』を参照してください。また「XMLTABLE」も参照してください。

例

次の例では、XMLSEQUENCEが複数の要素を持つXML文書をVARRAY型の単一要素ドキュメントに分割する方法を示しています。この例では、TABLEキーワードが、コレクションを副問合せのFROM句で使用できる表の値とみなすように、Oracle Databaseに指示しています。

SELECT EXTRACT(warehouse_spec, '/Warehouse') as "Warehouse"
FROM warehouses WHERE warehouse_name = 'San Francisco';

Warehouse
------------------------------------------------------------
<Warehouse>
<Building>Rented</Building>
<Area>50000</Area>
<Docks>1</Docks>
<DockType>Side load</DockType>
<WaterAccess>Y</WaterAccess>
<RailAccess>N</RailAccess>
<Parking>Lot</Parking>
<VClearance>12 ft</VClearance>
</Warehouse>

1 row selected.

SELECT VALUE(p)
FROM warehouses w,
TABLE(XMLSEQUENCE(EXTRACT(warehouse_spec, '/Warehouse/*'))) p
WHERE w.warehouse_name = 'San Francisco';

VALUE(P)
----------------------------------------------------------------
<Building>Rented</Building>
<Area>50000</Area>
<Docks>1</Docks>
<DockType>Side load</DockType>
<WaterAccess>Y</WaterAccess>
<RailAccess>N</RailAccess>
<Parking>Lot</Parking>
<VClearance>12 ft</VClearance>

8 rows selected.

XMLSERIALIZE

構文

用途

XMLSerializeは、value_exprの内容を含む文字列またはLOBを作成します。

- DOCUMENTを指定する場合、value_exprは有効なXML文書である必要があります。

- CONTENTを指定する場合、value_exprは単一ルートのXML文書である必要はありません。ただし、有効なXMLコンテンツである必要があります。

- datatypeの指定には、文字列型(VARCHAR2またはVARCHARは使用可能、NVARCHAR2は使用不可)、BLOBまたはCLOBを使用できます。デフォルトはCLOBです。

- datatypeがBLOBの場合は、ENCODING句を指定して、指定したエンコーディングをプロローグで使用できます。xml_encoding_specは、XMLエンコーディング宣言(encoding="...")です。

- XML宣言でstring_literalとして指定したバージョン(<?xml version="..." ...?>)を使用するには、VERSION句を指定します。

- 意味のないすべての空白を出力から取り除くには、NO INDENTを指定します。出力をN個の空白の相対インデントを使用して出力整形するには、INDENT SIZE = Nを指定します。Nは整数です。Nが0の場合、出力整形によって各要素の後に改行文字が挿入され、各要素は独自の行に配置されますが、その他の意味のないすべての空白は出力で省略されます。SIZEを指定せずにINDENTを指定すると、2個の空白インデントが使用されます。この句を指定しない場合、動作(出力整形されるかどうか)は予測不能です。

- HIDE DEFAULTSおよびSHOW DEFAULTSは、XML Schemaに基づくデータにのみ適用されます。SHOW DEFAULTSを指定した場合、XML Shemaでデフォルト値が定義されているオプションの要素や属性が入力データに存在しないと、それらの要素や属性はそのデフォルト値とともに出力に含められます。HIDE DEFAULTSを指定した場合、このような要素や属性は出力に含められません。HIDE DEFAULTSがデフォルトの動作です。

関連項目:
このファンクションの詳細は、『Oracle XML DB開発者ガイド』を参照してください。

例

次の文は、DUAL表を使用して、XMLSerializeの構文を示します。

SELECT XMLSERIALIZE(CONTENT XMLTYPE('<Owner>Grandco</Owner>')) AS xmlserialize_doc
FROM DUAL;

XMLSERIALIZE_DOC
----------------
<Owner>Grandco</Owner>

XMLTABLE

構文

XMLnamespaces_clause::=

注意:
DEFAULT string句を1つのみ指定できます。

XMLTABLE_options::=

XML_passing_clause::=

XML_table_column::=

用途

XMLTableは、XQueryの評価結果をリレーショナル行および列にマップします。SQLを使用して、このファンクションで戻される結果を仮想リレーショナル表として問い合せることができます。

- XMLNAMESPACES句には、XMLネームスペースの宣言が含まれます。これらの宣言は、XQuery式(評価されたXQuery_string)と、XML_table_columnのPATH句のXPath式で参照されます。XQuery式は行を計算し、XPath式はXMLTableファンクション全体の列を計算します。COLUMNS句のPATH式に修飾名を使用する場合は、XMLNAMESPACES句を指定する必要があります。

- XQuery_stringはリテラル文字列です。この文字列は完全なXQuery式であり、プロローグ文字を含むことができます。XQuery_stringの値はXMLTableファンクションへの入力となります。つまり、このXQueryの結果は分解されてリレーショナル・データとして格納されます。

- XML_passing_clauseのexprは、XMLTypeまたはSQLスカラー・データ型のインスタンスを戻し、XQuery式を評価するためのコンテキストとして使用されます。PASSING句には、識別子を指定せずに1つのexprのみを指定できます。各exprの評価結果は、XQuery_stringの対応する識別子にバインドされます。exprの後にAS句が続かない場合、式の評価結果はXQuery_stringの評価用のコンテキスト項目として使用されます。この句がサポートするのは値渡しのみで、参照渡しはサポートしません。したがって、BY VALUEキーワードはオプションであり、意味を明確にするためのものです。

- オプションのRETURNING SEQUENCE BY REF句を指定すると、XQuery評価の結果が参照で戻されます。したがって、XML_table_column句の中でソース・データの任意の部分を参照できます。
この句を指定しないと、XQuery評価の結果は値で戻されます。つまり、実際のノードへの参照のかわりに、ターゲット・ノードのコピーが戻されます。この場合、XML_table_column句では戻されたコピーの中に含まれないデータを参照できません。特に、ソース・データ内でターゲット・ノードより前にあるデータは参照できません。

- オプションのCOLUMNS句は、XMLTableにより作成される仮想表の列を定義します。

- COLUMNS句を指定しない場合、XMLTableは、COLUMN_VALUEという名前の単一のXMLType疑似列を戻します。

- FOR ORDINALITYは、columnが生成された行番号の列になるように指定します。FOR ORDINALITY句は、最大で1つにする必要があります。これは、NUMBER列として作成されます。

- FOR ORDINALITY列以外の作成される各列について、列のデータ型を指定する必要があります。XMLTypeまたは他の任意のデータ型を指定できます。
列のデータ型がXMLTypeの場合は、XMLTYPE句を指定します。オプションの(SEQUENCE) BY REF句を指定すると、PATH式のターゲットとなっているソース・データへの参照が列の内容として戻されます。それ以外の場合、columnにはターゲット・データのコピーが格納されます。

XMLTypeデータを参照で戻すことにより、列のPATH式のターゲットの外にあるソース・データ内のノードをターゲットとするパスを持つ他の列を指定できるようになります。

列のデータ型がそれ以外のデータ型の場合は、datatypeを指定します。

- オプションのPATH句では、XQuery式の文字列でアドレス指定されるXQuery結果の部分を列の内容として使用するように指定します。
PATHを省略した場合は、XQuery式がcolumnであるものと仮定されます。次に例を示します。

XMLTable(... COLUMNS xyz)

これは、次の式と同じです。

XMLTable(... COLUMNS xyz PATH 'XYZ')

異なるPATH句を使用すると、XQuery結果を異なる仮想表の列に分割できます。

- オプションのDEFAULT句では、PATH式の結果が空の順序の場合に使用する値を指定します。そのexprは、評価されてデフォルト値を生成するXQuery式です。

関連項目:
追加の例を含むXMLTableファンクションおよびXQueryの概要については、『Oracle XML DB開発者ガイド』を参照してください。

例

次の例では、warehouses表のwarehouse_spec列の各値にXQuery '/Warehouse'を適用した結果を、列WaterおよびRailのある仮想リレーショナル表に変換します。

SELECT warehouse_name warehouse,
warehouse2."Water", warehouse2."Rail"
FROM warehouses,
XMLTABLE('/Warehouse'
PASSING warehouses.warehouse_spec
COLUMNS
"Water" varchar2(6) PATH 'WaterAccess',
"Rail" varchar2(6) PATH 'RailAccess')
warehouse2;

WAREHOUSE                           Water  Rail
----------------------------------- ------ ------
Southlake, Texas                    Y      N
San Francisco                       Y      N
New Jersey                          N      N
Seattle, Washington                 N      Y

XMLTRANSFORM

構文

用途

XMLTransformは、引数としてXMLTypeインスタンスおよびXSLスタイルシート(それ自体がXMLTypeインスタンス)を取ります。ファンクションは、スタイルシートをインスタンスに適用し、XMLTypeを戻します。

このファンクションは、データをデータベースから取得するように、スタイルシートに従ってデータを編成する場合に有効です。

関連項目:
このファンクションの詳細は、『Oracle XML DB開発者ガイド』を参照してください。

例

XMLTRANSFORMファンクションを使用するには、XSLスタイルシートが必要です。次に、ノード内の要素をアルファベット順に並べる単純なスタイルシートの例を示します。

CREATE TABLE xsl_tab (col1 XMLTYPE);

INSERT INTO xsl_tab VALUES (
XMLTYPE.createxml(
'<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" >
<xsl:output encoding="utf-8"/>
<!-- alphabetizes an xml tree -->
<xsl:template match="*">
<xsl:copy>
<xsl:apply-templates select="*|text()">
<xsl:sort select="name(.)" data-type="text" order="ascending"/>
</xsl:apply-templates>
</xsl:copy>
</xsl:template>
<xsl:template match="text()">
<xsl:value-of select="normalize-space(.)"/>
</xsl:template>
</xsl:stylesheet>  '));

1 row created.

次の例では、XSLスタイルシートxsl_tabを使用して、サンプル表oe.warehousesにあるwarehouse_specの要素をアルファベット順に並べます。

SELECT XMLTRANSFORM(w.warehouse_spec, x.col1).GetClobVal()
FROM warehouses w, xsl_tab x
WHERE w.warehouse_name = 'San Francisco';

XMLTRANSFORM(W.WAREHOUSE_SPEC,X.COL1).GETCLOBVAL()
--------------------------------------------------------------------------------
<Warehouse>
<Area>50000</Area>
<Building>Rented</Building>
<DockType>Side load</DockType>
<Docks>1</Docks>
<Parking>Lot</Parking>
<RailAccess>N</RailAccess>
<VClearance>12 ft</VClearance>
<WaterAccess>Y</WaterAccess>
</Warehouse>

ROUNDおよびTRUNC日付ファンクション

表7-13は、ROUNDおよびTRUNC日付ファンクションで使用できる書式モデルと、日付の丸めや切捨ての対象となる単位をまとめたものです。デフォルトのモデル「DD」では、時間が午前0時である日にちの形に丸められた、または切り捨てられた日付が返されます。

表7-13 ROUNDおよびTRUNC日付ファンクションの日付書式モデル

書式モデル

丸め/切捨て対象の単位

CC
SCC

4桁の年の最初の2桁より1大きい数

SYYYY
YYYY
YEAR
SYEAR
YYY
YY
Y

年(7月1日で切上げ)

IYYY
IYY
IY
I

ISO 8601標準で定義されている暦週を含む年

Q

四半期(四半期の2番目の月の16日で切上げ)

MONTH
MON
MM
RM

月(16日で切上げ)

WW

年の最初の日と同じ曜日

IW

ISO 8601標準で定義されている歴週の最初の日と同じ日、つまり月曜日

W

月の最初の日と同じ曜日

DDD
DD
J

日

DAY
DY
D

週の開始日

HH
HH12
HH24

時

MI

分

書式モデルDAY、DYおよびDで使用される週の開始日は、初期化パラメータNLS_TERRITORYで暗黙的に指定されます。

関連項目:
このパラメータの詳細は、『Oracle Databaseリファレンス』および『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

ユーザー定義ファンクション

PL/SQL、JavaまたはCでユーザー定義ファンクションを作成し、SQLまたはSQL組込みファンクションにはない機能を持たせることができます。ユーザー定義ファンクションは、式を指定できる場所であればどこでも、SQL文に指定できます。

たとえば、次の場所でユーザー定義ファンクションを使用できます。

- SELECT文のselectリスト

- WHERE句の条件

- CONNECT BY句、START WITH句、ORDER BY句およびGROUP BY句

- INSERT文のVALUES句

- UPDATE文のSET句

注意:
Oracle SQLは、ブール値のパラメータまたは戻り値を持つファンクションのコールをサポートしていません。したがって、ユーザー定義ファンクションがSQL文からコールされる場合は、数値(0または1)または文字列('TRUE'または'FALSE')を戻すように設計する必要があります。

user_defined_function::=

オプションの式のリストは、ファンクション、パッケージまたは演算子の属性と一致する必要があります。

ユーザー定義ファンクションの制限事項: DISTINCTおよびALLキーワードは、ユーザー定義集計ファンクションのみで有効です。

関連項目:

- ファンクションの作成(ユーザー定義ファンクションの制限を含む)の詳細は、「CREATE FUNCTION」を参照してください。

- ユーザー・ファンクションの作成および使用方法の詳細は、『Oracle Database開発ガイド』を参照してください。

前提条件

ユーザー定義ファンクションをSQL文で使用するには、トップレベル・ファンクションとして作成するか、またはパッケージ仕様部で宣言する必要があります。

SQLの式の中でユーザー・ファンクションを使用するには、ユーザーがユーザー・ファンクションのEXECUTE権限を持っている必要があります。ユーザー・ファンクションで定義したビューを問い合せるには、そのビューに対するREADまたはSELECT権限が必要です。ビューを検索するには個々のEXECUTE権限は必要ありません。

関連項目:
トップレベル・ファンクションの詳細は、「CREATE FUNCTION」を参照してください。パッケージ・ファンクションの詳細は、「CREATE PACKAGE」を参照してください。

名前の優先順位

SQL文内では、データベースの列名は、パラメータなしのファンクション名より優先順位が高くなります。たとえば、Human Resourcesのマネージャが、hrスキーマに次の2つのオブジェクトを作成する場合は、次のようにします。

CREATE TABLE new_emps (new_sal NUMBER, ...);
CREATE FUNCTION new_sal RETURN NUMBER IS BEGIN ... END;

その後、次の2つの文のように、new_salを参照するとnew_emps.new_sal列を参照することになります。

SELECT new_sal FROM new_emps;
SELECT new_emps.new_sal FROM new_emps;

new_salファンクションにアクセスするには、次のように入力します。

SELECT hr.new_sal FROM new_emps;

SQLの式内で使用できるユーザー・ファンクションのコール例を次に示します。

circle_area (radius)
payroll.tax_rate (empno)
hr.employees.tax_rate (dependent, empno)@remote

例 hrスキーマからtax_rateユーザー・ファンクションをコールし、tax_table内のss_no列とsal列に対してこのファンクションを実行するには、次のように指定します。

SELECT hr.tax_rate (ss_no, sal)
INTO income_tax
FROM tax_table WHERE ss_no = tax_id;

INTO句は、結果をincome_tax変数に配置するために使用できるPL/SQLです。

ネーミング規則

オプションのスキーマ名またはパッケージ名を1つのみ指定すると、最初の識別子はスキーマ名またはパッケージ名のいずれかになります。たとえば、PAYROLL.TAX_RATEという参照内のPAYROLLがスキーマ名かパッケージ名かを判断するには、Oracle Databaseは次の手順を実行します。

1. カレント・スキーマ内のPAYROLLパッケージをチェックします。

2. PAYROLLパッケージが検出されない場合は、トップレベルのTAX_RATEファンクションを含むスキーマ名PAYROLLを検索します。このようなファンクションが検出されない場合は、エラーを戻します。

3. カレント・スキーマ内でPAYROLLパッケージが検出されると、PAYROLLパッケージの中でTAX_RATEファンクションを検索します。このようなファンクションが検出されない場合は、エラーを戻します。

また、ユーザーが定義したシノニムを使用して、ストアド・トップレベル・ファンクションを参照することもできます。

8 共通のSQL DDL句

この章では、複数のSQL文で使用されるSQLデータ定義句について説明します。

この章では、次の内容を説明します。

- allocate_extent_clause

- constraint

- deallocate_unused_clause

- file_specification

- logging_clause

- parallel_clause

- physical_attributes_clause

- size_clause

- storage_clause

allocate_extent_clause

用途

allocate_extent_clause句を使用すると、データベース・オブジェクトの新しいエクステントを明示的に割り当てることができます。

この句を使用してエクステントを明示的に割り当てた場合、NEXTおよびPCTINCREASE記憶域パラメータの値は変更されません。したがって、Oracle Databaseで暗黙的に割り当てられる次のエクステントのサイズには影響ありません。NEXTおよびPCTINCREASE記憶域パラメータの詳細は、「storage_clause」を参照してください。

エクステントは次のSQL文で割り当てることができます。

- ALTER CLUSTER(「ALTER CLUSTER」を参照)

- ALTER INDEX: エクステントを索引、索引パーティションまたは索引サブパーティションに割り当てる場合(「ALTER INDEX」を参照)

- ALTER MATERIALIZED VIEW: エクステントをマテリアライズド・ビュー、そのパーティションまたはサブパーティションの1つ、あるいは索引構成マテリアライズド・ビューのオーバーフロー・セグメントに割り当てる場合(「ALTER MATERIALIZED VIEW」を参照)

- ALTER MATERIALIZED VIEW LOG(「ALTER MATERIALIZED VIEW LOG」を参照)

- ALTER TABLE: エクステントを表、表パーティション、表サブパーティション、索引構成表のマッピング表、索引構成表のオーバーフロー・セグメントまたはLOB記憶域セグメントに割り当てる場合(「ALTER TABLE」を参照)

構文

allocate_extent_clause::=

(size_clause::=を参照)

セマンティクス

この項では、allocate_extent_clauseのパラメータについて説明します。詳細は、特定のデータベース・オブジェクトに対してこれらのパラメータを設定または再設定するSQL文の説明を参照してください。

同じ文でallocate_extent_clauseとdeallocate_unused_clauseを指定することはできません。

SIZE

エクステント・サイズをバイト単位で指定します。integerの値は0から2147483647となります。これより大きいエクステント・サイズを指定するには、この範囲の整数とK、M、GまたはTを使用して、エクステント・サイズをKB、MB、GBまたはTB単位で指定します。

表、索引、マテリアライズド・ビューまたはマテリアライズド・ビュー・ログでは、SIZEを指定しないと、Oracle Databaseではオブジェクトの記憶域パラメータの値に基づいてサイズが決定されます。ただし、クラスタの場合、クラスタの記憶域パラメータは評価されないため、デフォルト値を使用しない場合はSIZEを指定する必要があります。

DATAFILE 'filename'

新しいエクステントを割り当てるデータファイルを、表、クラスタ、索引、マテリアライズド・ビューまたはマテリアライズド・ビュー・ログの表領域から1つ指定します。DATAFILEを指定しないと、Oracleがデータファイルを選択します。

INSTANCE integer

Oracle Real Application Clustersを使用する場合のみ、このパラメータを使用します。

INSTANCE integerを指定すると、指定したインスタンスに対応付けられた空きリスト・グループが新しいエクステントを使用できるようになります。インスタンス数が空きリスト・グループの最大数を超えた場合、指定したインスタンス数/最大数という除算が行われ、その余りから、使用する空きリスト・グループが識別されます。インスタンスは初期化パラメータINSTANCE_NUMBERの値で識別されます。

このパラメータを指定しない場合、表、クラスタ、索引、マテリアライズド・ビューまたはマテリアライズド・ビュー・ログに領域が割り当てられますが、特定の空きリスト・グループからは割り当てられません。かわりにマスター空きリストが使用され、必要に応じて領域が割り当てられます。

注意:
自動セグメント領域管理の使用時は、allocate_extent_clauseのINSTANCEパラメータを設定しても、指定したインスタンスに新しく割り当てられた領域が確保されない場合があります。これは、自動セグメント領域管理では、エクステントとインスタンス間の固定したアフィニティが保持されないためです。

constraint

用途

constraintを使用すると、整合性制約(データベース内の値を制限する規則)を定義できます。Oracle Databaseでは、6つの制約を作成し、それを2つの方法で宣言することができます。

次に、6つの整合性制約について簡単に説明します。詳細は、「セマンティクス」を参照してください。

- NOT NULL制約は、データベースの値がNULLになることを禁止します。

- 一意制約は、複数の行が同じ列または列の組合せで同じ値を持つことを禁止しますが、一部の値がNULLになることを許可します。

- 主キー制約は、1つの宣言でNOT NULL制約と一意制約を組み合せたものです。これにより、同じ列または列の組合せで、複数の行の値が同じにならないように、また値がNULLにならないようにします。

- 外部キー制約は、ある表の値が別の表の値と一致することを必要とします。

- CHECK制約は、データベースの値が、指定された条件を満たすことを必要とします。

- REF列は、定義上は別のオブジェクト型またはリレーショナル表の中のオブジェクトを参照します。REF制約を使用すると、REF列と参照先のオブジェクトの関係をさらに詳しく指定できます。

制約は、次の2つの構文で定義できます。

- 個々の列または属性の定義の一部として定義できます。これを、表内指定といいます。

- 表定義の一部として定義できます。これを、表外指定といいます。

NOT NULL制約は、表内に宣言する必要があります。その他のすべての制約は、表内または表外に宣言できます。

制約句は、次の文に指定できます。

- CREATE TABLE(「CREATE TABLE」を参照)

- ALTER TABLE(「ALTER TABLE」を参照)

- CREATE VIEW(「CREATE VIEW」を参照)

- ALTER VIEW(「ALTER VIEW」を参照)

ビュー制約 Oracle Databaseでは、ビュー制約を適用していません。ただし、実表に対する制約によってビューに制約を適用できます。

ビューには、一意制約、主キー制約および外部キー制約のみを指定でき、これらの制約はDISABLE NOVALIDATEモードのみでサポートされています。オブジェクト列の属性にビュー制約を定義することはできません。

関連項目:
ビュー制約の詳細は、「ビュー制約」を参照してください。DISABLE NOVALIDATEモードの詳細は、「DISABLE句」を参照してください。

前提条件

制約を定義する文を発行できる権限が必要です。

外部キー制約を作成する場合は、この条件に加えて、親表またはビューが自分のスキーマ内に設定されている必要があります。設定されていないかぎり、親表またはビューの参照キー列に対するREFERENCES権限が必要です。

構文

constraint::=

(inline_constraint::=、out_of_line_constraint::=、inline_ref_constraint::=、out_of_line_ref_constraint::=を参照)

inline_constraint::=

(references_clause::=を参照)

out_of_line_constraint::=

(references_clause::=、constraint_state::=を参照)

inline_ref_constraint::=

(references_clause::=、constraint_state::=を参照)

out_of_line_ref_constraint::=

(references_clause::=、constraint_state::=を参照)

references_clause::=

constraint_state::=

(using_index_clause::=、exceptions_clause::=を参照)

using_index_clause ::=

(create_index::=、index_properties::=を参照)

index_properties::=

(global_partitioned_index::=、local_partitioned_index ::=(「CREATE INDEX」の項)、index_attributes::=を参照。INDEXTYPE IS ...句は、制約を定義すると無効になります。)

index_attributes::=

(physical_attributes_clause::=, logging_clause::=, index_compression::=, partial_index_clause::=「CREATE INDEX」の項の「parallel_clause」をすべて参照。using_index_clauseではサポートされません。)

exceptions_clause::=

セマンティクス

この項では、constraintのセマンティクスについて説明します。詳細は、表またはビューの制約を定義または再定義するSQL文の説明を参照してください。

Oracle Databaseでは、ユーザー定義オブジェクト、ネストした表、VARRAY、REFまたはLOB型の列または属性に対して制約を使用することはできません。ただし、次の2つの例外があります。

- NOT NULL制約は、ユーザー定義オブジェクト、VARRAY、REFまたはLOB型の列や属性に使用できます。

- NOT NULL、外部キーおよびREF制約は、REF型の列に使用できます。

CONSTRAINT constraint_name 制約名を指定します。この識別子を指定しない場合、SYS_Cnの形式で名前が生成されます。整合性制約の名前と定義は、USER_、ALL_およびDBA_CONSTRAINTSデータ・ディクショナリ・ビュー(それぞれCONSTRAINT_NAME列およびSEARCH_CONDITION列)に格納されます。

関連項目:
データ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

NOT NULL制約

NOT NULL制約は、列にNULLが含まれることを禁止します。NULLキーワード自体は、実際に整合性制約を定義するものではありませんが、これを指定すると、列にNULLが含まれることが許可されます。NOT NULLおよびNULLは、表内指定で定義する必要があります。NOT NULLまたはNULLを指定しない場合、NULLがデフォルトになります。

NOT NULL制約は、XMLType列およびVARRAY列で表内指定できる唯一の制約です。

NOT NULL制約を満たすには、表のすべての行がその列の値を持つ必要があります。

注意:
Oracle Databaseでは、すべてのキー列がNULLの表の行には索引を付けません(ただし、ビットマップ索引の場合を除きます)。このため、表のすべての行に索引を付けるには、1つ以上の索引キー列にNOT NULL制約を指定するか、ビットマップ索引を作成する必要があります。

NOT NULL制約の制限事項: NOT NULL制約には次の制限事項があります。

- ビュー制約にはNULLまたはNOT NULLを指定できません。

- オブジェクト属性にはNULLまたはNOT NULLを指定できません。そのかわりに、IS [NOT] NULL条件でCHECK制約を使用してください。

関連項目:
「属性レベル制約の例」および「NOT NULLの例」を参照してください。

一意制約

一意制約は、列を一意キーとして指定します。複合一意キーは、列の組合せを一意キーとして指定します。一意制約を表内に定義する場合に必要となるのは、UNIQUEキーワードのみです。一意制約を表外に定義する場合は、1つ以上の列も指定する必要があります。複合一意キーは、表外に定義する必要があります。

一意制約を満たすには、表の中の2つの行が一意キーに対して同じ値を持たないようにする必要があります。ただし、単一の列で構成される一意キーの場合は、複数のNULLを持つことができます。複合一意キーを満たすには、表またはビューの2つの行がキー列に対して同じ組合せの値を持たないようにする必要があります。すべてのキー列に対してNULLを持つ行は、自動的にその制約を満たすことになります。ただし、1つ以上のキー列に対してNULLを持ち、その他のキー列に対して同じ組合せの値を持つ2つの行は、制約に違反します。

Oracleでは、1つ以上の列に一意制約を指定すると、暗黙的に一意キーに索引が作成されます。問合せのパフォーマンスを目的に一意性を定義する場合は、かわりにCREATE UNIQUE INDEX文を使用して明示的に一意索引を作成することをお薦めします。また、CREATE UNIQUE INDEX文で、条件付きの一意制約を定義する一意のファンクション索引を作成することもできます。詳細は、「ファンクション索引の使用による条件付き一意性の定義例:」を参照してください。

使用可能な一意制約を拡張データ型の列に指定すると、Oracleがその使用可能な制約の一意性を適用するための索引を作成しようとしたときに、「最大キー長を超過しました」というエラーが通知されることがあります。この問題を回避する方法の詳細は、「拡張データ型の列に対する索引の作成」を参照してください。

一意制約の制限事項: 一意制約には、次の制限事項があります。

- 一意キー列は、LOB、LONG、LONG RAW、VARRAY、NESTED TABLE、OBJECT、REF、TIMESTAMP WITH TIME ZONEまたはユーザー定義型を含むことができません。ただし、一意キーはTIMESTAMP WITH LOCAL TIME ZONEの列を含むことができます。

- 1つの複合一意キーは、33以上の列を持つことはできません。

- 同一の列または列の組合せを一意キーと主キーの両方には指定できません。

- 継承階層でサブビューを作成する場合は、一意キーを指定できません。一意キーは、トップレベル(ルート)のビューのみに指定できます。

関連項目:
「一意キーの例」および「複合一意キーの例」を参照してください。

主キー制約

主キー制約は、列を表またはビューの主キーとして指定します。複合主キーは、列の組合せを主キーとして指定します。主キー制約を表内に定義する場合に必要となるのは、PRIMARY KEYキーワードのみです。主キー制約を表外に定義する場合は、1つ以上の列も指定する必要があります。複合主キーは表外に定義する必要があります。

主キー制約を満たすには次の条件があります。

- 主キーの値が、表の中の複数行に存在することはできません。

- 主キーを構成する列に、NULLを持たせることはできません。

主キー制約を作成する場合

- Oracle Databaseでは、主キー制約を適用する前に既存の索引に一意の値の集合が含まれる場合、その索引が使用されます。既存の索引は、一意であると定義されている場合も、一意でないと定義されている場合もあります。DML操作を実行すると、この既存の索引を使用して主キー制約が適用されます。

- 既存の索引を使用できない場合は、一意索引が生成されます。

主キー制約を削除する場合

- 既存の索引を使用して主キーが作成された場合、索引は削除されません。

- システム生成の索引を使用して主キーが作成された場合、索引は削除されます。

拡張データ型の列を使用可能な主キーとして指定すると、Oracleがその使用可能な制約の一意性を適用するための索引を作成しようとしたときに「最大キー長を超過しました」というエラーが通知されることがあります。この問題を回避する方法の詳細は、「拡張データ型の列に対する索引の作成」を参照してください。

主キー制約の制限事項: 主キー制約には、次の制限事項があります。

- 表またはビューには、主キーを1つのみ指定できます。

- 主キー列は、LOB、LONG、LONG RAW、VARRAY、NESTED TABLE、BFILE、REF、TIMESTAMP WITH TIME ZONEまたはユーザー定義型を含むことができません。ただし、主キーはTIMESTAMP WITH LOCAL TIME ZONEの列を含むことができます。

- 主キーのサイズは、1データベース・ブロックを超えることはできません。

- 1つの複合主キーは、33以上の列を持つことはできません。

- 同一の列または列の組合せを一意キーと主キーの両方には指定できません。

- 継承階層でサブビューを作成する場合は、主キーを指定できません。主キーは、トップレベル(ルート)のビューのみに指定できます。

関連項目:
「主キーの例」および「複合主キーの例」を参照してください。

外部キー制約

外部キー制約(参照整合性制約ともいう)は、列を外部キーとして指定し、その外部キーと指定した主キーまたは一意キー(参照キー)との関係を設定します。複合外部キーは、列の組合せを外部キーとして指定します。

外部キーを持つ表またはビューを子オブジェクトといい、参照キーを持つ表またはビューを親オブジェクトといいます。外部キーと参照キーを、同一の表またはビューに設定することができます。この場合、親表と子表は同一の表になります。親表または親ビューのみを指定して、列名を指定しない場合、外部キーは自動的に親表または親ビューの主キーを参照します。外部キーと参照キーの対応する列は、同じ順序とデータ型で構成されている必要があります。

単一キー列の外部キー制約は、表内または表外に定義できます。複合外部キーと属性の外部キーは、表外に指定します。

複合外部キー制約を満たすには、複合外部キーが親表または親ビューの複合一意キーまたは複合主キーを参照するか、外部キーの1つ以上の列の値がNULLである必要があります。

外部キーと主キーの両方、または外部キーと一意キーの両方に、同一の列または列の組合せを指定できます。また、外部キーとクラスタ・キーの両方にも同じ列または列の組合せを指定できます。

1つの表またはビューで複数の外部キーを定義できます。また、1つの列が複数の外部キーを構成することもできます。

外部キー制約の制限事項: 外部キー制約には、次の制限事項があります。

- 外部キー列は、LOB、LONG、LONG RAW、VARRAY、NESTED TABLE、BFILE、REF、TIMESTAMP WITH TIME ZONEまたはユーザー定義型を含むことができません。ただし、主キーはTIMESTAMP WITH LOCAL TIME ZONEの列を含むことができます。

- 親表または親ビューの参照一意制約または参照主キー制約が事前に定義されている必要があります。

- 1つの複合外部キーは、33以上の列を持つことはできません。

- 子表と親表は、同一データベース上に設定されている必要があります。分散データベースのノード間の参照整合性制約を使用可能にする場合、データベース・トリガーを使用する必要があります。「CREATE TRIGGER」を参照してください。

- 子オブジェクトと親オブジェクトのどちらかがビューの場合、ビュー制約のすべての制限事項が制約に適用されます。「ビュー制約」を参照してください。

- AS subquery句を含むCREATE TABLE文には、外部キー制約を定義できません。そのかわりに、制約を指定せずに表を作成し、後でALTER TABLE文を使用してその制約を追加できます。

- 表に外部キーがあり、外部キーの親が索引構成表である場合、他のセッションが親表の非キー列を更新している場合、外部キーを含む行を更新するセッションはハングします。

関連項目:

- 制約の使用の詳細は、『Oracle Database開発ガイド』を参照してください。

- 「外部キー制約の例」および「複合外部キー制約の例」を参照してください。

references_clause 外部キー制約はreferences_clause構文を使用します。外部キー制約を表内に指定する場合に必要となるのは、references_clauseのみです。外部キー制約を表外に指定する場合は、FOREIGN KEYキーワードと1つ以上の列も指定する必要があります。

ON DELETE句 ON DELETE句を指定すると、参照主キーまたは参照一意キーの値を削除した場合に参照整合性がどのように自動処理されるかを指定できます。この句を指定しない場合、子表に依存する行を持つ親表の中の参照キーの値は削除できません。

- 依存する外部キーの値を削除する場合は、CASCADEを指定します。

- 依存する外部キーの値をNULLに変換する場合は、SET NULLを指定します。仮想列の値は直接更新できないため、仮想列に対してこの句を指定することはできません。仮想列が導出される値を更新する必要があります。

ON DELETEの制限事項: この句は、ビュー制約に対して指定できません。

関連項目:
「ON DELETEの例」

CHECK制約

CHECK制約によって、表の各行に必要な条件を指定できます。制約を満たすためには、表のそれぞれの行が、その条件に対してTRUEまたは不明(NULLのため)のいずれかである必要があります。特定の行に対するCHECK制約条件が評価される場合、条件にある列名に、その行の列値が適用されます。

CHECK制約の表内指定と表外指定の構文は同じです。ただし、表内指定では現在定義されている列(または、オブジェクト列の場合は列の属性)のみを参照でき、表外指定では複数の列または属性を参照できます。

Oracleでは、CHECK制約の条件が相互に排他的かどうかは検証しません。このため、1つの列に対して複数のCHECK制約を作成する場合は、制約の用途が矛盾しないように注意する必要があります。また、条件の評価について特別な順序を想定しないでください。

関連項目:

- その他の詳細および構文は、第6章「条件」を参照してください。

- 「CHECK制約の例」および「属性レベル制約の例」を参照してください。

CHECK制約の制限事項: CHECK制約には、次の制限事項があります。

- ビューに対しては、CHECK制約を指定できません。ただし、WITH CHECK OPTION句を使用してビューを定義することは可能です。これは、ビューにCHECK制約を指定することと同じです。

- CHECK制約の条件では、その表の中のすべての列を参照できますが、他の表の列は参照できません。

- CHECK制約の条件は、次の構造を持つことができません。

- 副問合せおよびスカラー副問合せ式

- 決定的でないファンクションへのコール(CURRENT_DATE、CURRENT_TIMESTAMP、DBTIMEZONE、LOCALTIMESTAMP、SESSIONTIMEZONE、SYSDATE、SYSTIMESTAMP、UID、USERおよびUSERENV)

- ユーザー定義ファンクションへのコール

- REF列の参照解除(DEREFファンクションを使用する場合など)

- ネストした表の列または属性

- 疑似列CURRVAL、NEXTVAL、LEVELまたはROWNUM

- 完全に指定されていない日付定数

REF制約

REF制約を使用すると、REF型の列とそれが参照するオブジェクトとの関係を指定できます。

ref_constraint REF制約は、ref_constraint構文を使用します。REF制約は表内または表外に定義します。表外指定の場合は、指定しているREF列または属性を指定する必要があります。

- ref_columnには、オブジェクトまたはリレーショナル表のREF列の名前を指定します。

- ref_attributeには、リレーショナル表のオブジェクト列内の埋込みREF属性を指定します。

表内指定と表外指定のどちらでも、有効範囲制約、ROWID制約または参照整合性制約をREF列に定義できます。

REF列の有効範囲表または参照表が、主キーに基づくオブジェクト識別子を持っている場合、そのREF列はユーザー定義REF列です。

関連項目:

- REFデータ型の詳細は、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。

- 「外部キー制約」および「REF制約の例」を参照してください。

REF列のSCOPE制約

表がREF列を持つ場合は、この列のそれぞれのREF値が別のオブジェクト表内の行を参照する場合があります。SCOPE句は、参照の有効範囲を1つの表scope_tableに制限します。REF列または属性の値はscope_table内のオブジェクトを指し、その場所にREF列と同じ型のオブジェクト・インスタンスが格納されます。

REF列内の参照の有効範囲を1つの表に制限する場合に、SCOPE句を指定します。この句を指定するには、scope_tableが自分のスキーマ内にあるか、またはscope_tableに対するREADまたはSELECT権限あるいはREAD ANY TABLEまたはSELECT ANY TABLEシステム権限が必要です。REF列ごとに有効範囲表を1つのみ指定できます。

有効範囲制約の制限事項: 有効範囲制約には、次の制限事項があります。

- 表が空でない場合は、有効範囲制約を既存の列に追加できません。

- VARRAY列のREF要素に対しては有効範囲制約を指定できません。

- AS subqueryを指定し、この副問合せがユーザー定義REFデータ型を戻す場合、この句を指定する必要があります。

- 有効範囲制約を、後でREF列から削除することはできません。

REF列のROWID制約

WITH ROWIDを指定して、ref_columnまたはref_attributeのREFの値とともにROWIDを格納します。ROWIDとともにREF値を格納した場合、参照解除操作のパフォーマンスは向上しますが、使用する領域も多くなります。デフォルトのREF値の記憶域では、ROWIDは格納されません。

関連項目:
参照解除の例は、「DEREF」を参照してください。

ROWID制約の制限事項: ROWID制約には、次の制限事項があります。

- VARRAY列のREF要素に対してはROWID制約を定義できません。

- ROWID制約を、後でREF列から削除することはできません。

- REF列または属性の範囲が限定される場合、この句は無視され、ROWIDはREFとともには格納されません。

REF列の参照整合性制約

ref_constraint構文のreferences_clauseを使用すると、外部キー制約をREF列に定義できます。また、この句はREF列や属性の有効範囲を参照表に暗黙的に制限します。ただし、REF列以外の外部キー制約が親表の実際の列を参照することに対し、REF列の外部キー制約は親表の暗黙のオブジェクト識別子を参照します。

制約名を指定しない場合、制約に対するシステム名がSYS_Cnという形式で生成されます。

範囲が限定されている既存のREF列に参照整合性制約を追加する場合、参照表は、REF列の有効範囲表と同じである必要があります。後で参照整合性制約を削除する場合、REF列の範囲が参照表に限定されたままになります。

他の型の列に対する外部キー制約と同様に、表内で宣言する場合に必要となるのはreferences_clauseのみです。表外で宣言する場合は、FOREIGN KEYキーワード、および1つ以上のREF列または属性も指定する必要があります。

関連項目:
オブジェクト識別子の詳細は、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。

REF列の外部キー制約の制限事項: REF列における外部キー制約には、次の追加の制限事項があります。

- 範囲が限定されていない既存のREF列に参照整合性制約を追加する場合、有効範囲制約が暗黙的に追加されます。したがって、有効範囲制約に適用されるすべての制限事項は、この場合にも適用されます。

- references_clause内のオブジェクト名の後には列を指定できません。

制約状態の指定

制約定義の一部として、制約が適用される方法およびタイミングを指定できます。

constraint_state constraint_stateは、表内指定と表外指定の両方に使用できます。constraint_stateの句を表示される順序(上から下)で指定します。いずれの句も複数回は指定できません。

DEFERRABLE句 DEFERRABLEおよびNOT DEFERRABLEパラメータは、後続のトランザクションで、SET CONSTRAINT(S)文を使用して、トランザクションが終わるまで制約のチェックを遅延できるかどうかを指定します。この句を指定しない場合、NOT DEFERRABLEがデフォルトになります。

- NOT DEFERRABLEを指定すると、後続のトランザクションで、SET CONSTRAINT[S]句を使用して、トランザクションがコミットされるまでこの制約のチェックを遅延させることができません。NOT DEFERRABLE制約のチェックは、トランザクションの終わりまで遅延させることはできません。
新しいNOT DEFERRABLE制約を宣言する場合、CREATE TABLEまたはALTER TABLE文のコミット時にその制約が有効である必要があります。有効でない場合、これらの文は正常に実行されません。

- DEFERRABLEを指定すると、後続のトランザクションで、SET CONSTRAINT[S]句を使用して、COMMIT文が発行されるまでこの制約のチェックを遅延させることができます。制約のチェックに失敗した場合、エラーが戻され、トランザクションはコミットされません。この設定によって、制約に違反する可能性のある変更をデータベースに行っている場合に、すべての変更が完了するまで、制約を一時的に使用禁止にすることが可能になります。

注意:
オプティマイザは遅延可能制約の索引を使用可能として考慮しません。

制約の遅延可能状態は変更できません。これらのパラメータのいずれを指定するか、どちらも指定せずにNOT DEFERRABLE制約を暗黙的に有効にするかに関係なく、この句をALTER TABLE文に指定することはできません。制約を削除してから再作成する必要があります。

関連項目:

- トランザクションに対する制約のチェックの設定の詳細は、「SET CONSTRAINT[S]」を参照してください。

- 遅延制約の詳細は、『Oracle Database管理者ガイド』および『Oracle Database概要』を参照してください。

- 「DEFERRABLE制約の例」

[NOT] DEFERRABLEの制限事項: ビュー制約にはこれらのパラメータを指定できません。

INITIALLY句 INITIALLY句は、DEFERRABLE句が指定されている制約に対するデフォルトのチェック動作を指定します。INITIALLY設定は、後続のトランザクションにSET CONSTRAINT(S)文を指定することで上書きできます。

- INITIALLY IMMEDIATEを指定すると、この制約は後続の各SQL文の終わりでチェックされます。INITIALLYを指定しない場合、INITIALLY IMMEDIATEがデフォルトになります。
新しいINITIALLY IMMEDIATE制約を宣言する場合、CREATE TABLEまたはALTER TABLE文のコミット時にその制約が有効である必要があります。有効でない場合、これらの文は正常に実行されません。

- INITIALLY DEFERREDを指定すると、この制約は後続のトランザクションの終わりでチェックされます。

制約をNOT DEFERRABLEとして宣言した場合、この句は無効です。NOT DEFERRABLE制約は自動的にINITIALLY IMMEDIATEになり、INITIALLY DEFERREDに変更することはできないためです。

VALIDATE | NOVALIDATE VALIDATEおよびNOVALIDATEの動作は、制約が明示的にまたはデフォルトで使用可能/使用禁止のどちらになっているかで異なります。VALIDATEおよびNOVALIDATEキーワードは、「ENABLE句」および「DISABLE句」で説明されています。

NOVALIDATEモードでの外部キー制約の注意事項 外部キー制約がNOVALIDATEモードの場合、表内の既存のデータが制約に準拠せず、QUERY_REWRITE_INTEGRITYパラメータがENFORCEDに設定されていないと、オプティマイザが表の問合せ時に結合の絞込みを使用することがあります。この場合、準拠しない外部キー値を持つ表の行をフィルタで除外する結合条件が問合せに含まれている場合でも、問合せはこのような行を返すことがあります。

ENABLE句 表のデータに制約を適用するには、ENABLEを指定します。

一意制約または主キー制約を使用可能にした場合、キーに索引が存在しないと、一意索引が作成されます。KEEP INDEXを指定しないかぎり、その後で制約が使用禁止になった場合にこの索引は削除されます。そのため、制約が使用可能になるたびに索引が再作成されます。

索引の再作成を避け、余分な索引を削除するには、最初に使用禁止にした主キー制約および一意制約を新しく作成します。その後、一意でない索引を作成して(または、既存の一意でない索引を使用して)制約を適用してください。制約が使用禁止の場合、一意でない索引は削除されず、後続のENABLE操作が容易になります。

- ENABLE VALIDATEを使用すると、すべての旧データと新データが制約に従うことを指定できます。制約が使用可能で、妥当性チェック済の場合は、すべてのデータが現在有効で、今後も有効であることが保証されます。
整合性制約に違反する行が表にある場合、制約は使用禁止のままエラーを戻します。すべての行が制約に従っている場合、Oracleは制約を使用可能にします。新規データが整合性制約に違反する場合、その後の文は実行されず、整合性制約の違反を示すエラーが戻されます。

主キー制約をENABLE VALIDATEモードに設定すると、妥当性チェック・プロセスによって主キー列にNULLが含まれないことが検証されます。これによるオーバーヘッドを回避するには、データを列に入力する前およびこの表の主キー制約を使用可能にする前に、主キーの各列にNOT NULLのマークを付けます。

- ENABLE NOVALIDATEを使用すると、制約データに対して新しく行うすべてのDML操作が制約に従うことが保証されます。表の既存データが制約に従っていることは保証されません。

VALIDATEもNOVALIDATEも指定しない場合、VALIDATEがデフォルトになります。

ENABLE NOVALIDATEからENABLE VALIDATEに単一制約状態を変更すると、パラレルで操作が実行できるため、読込み、書込みまたはその他のDDL操作が中断されません。

ENABLE句の制限事項: 使用禁止になっている一意キーまたは主キーを参照する外部キーを使用可能にすることはできません。

DISABLE句 整合性制約を使用禁止にする場合は、DISABLEを指定します。データ・ディクショナリでは、使用禁止になっている整合性制約は、使用可能な制約とともに表示されます。この句を指定せずに制約を作成した場合は、その制約は自動的に使用可能になります。

- DISABLE VALIDATEは、制約を使用禁止にして制約の索引を削除しますが、制約は有効のままです。この機能を使用すると、大量のデータをロードでき、また索引用の領域が削減されるため、データ・ウェアハウスで非常に有効です。この設定を使用することで、ALTER TABLE文のexchange_partition_subpart句またはSQL*Loaderを使用して、データを非パーティション表からパーティション表にロードすることもできます。他のSQL文を使用した表に対するすべての変更(挿入、更新および削除)は禁止されます。

関連項目:
この設定の使用方法の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

- DISABLE NOVALIDATEは、Oracleによって制約がメンテナンスされないこと(使用禁止になっているため)、および制約が真であると保証されないこと(妥当性チェックが行われていないため)を示します。
外部キー制約がDISABLE NOVALIDATE状態であっても、外部キーが参照している主キーを持つ表を削除できません。また、オプティマイザは、DISABLE NOVALIDATE状態でも制約を使用できます。

関連項目:
この設定を使用する状況の詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。

VALIDATEもNOVALIDATEも指定しない場合、NOVALIDATEがデフォルトになります。

一意索引を使用している一意制約または主キー制約を使用禁止にすると、一意索引は削除されます。その他の注意事項や制限事項は、「CREATE TABLE」の「enable_disable_clause」を参照してください。

RELY句 RELYおよびNORELYパラメータは、NOVALIDATEモードの制約をクエリー・リライトに対して考慮するかどうかを指定します。RELYを指定すると、適用されていないクエリー・リライトに対するNOVALIDATEモードの制約は、アクティブになります。その制約はNOVALIDATEモードであるため、適用されません。デフォルト値はNORELYです。

適用されない制約は、通常、マテリアライズド・ビューおよびクエリー・リライトにのみ有効です。QUERY_REWRITE_INTEGRITYモードに従って、クエリー・リライトは、VALIDATEモードの制約、またはRELYパラメータが設定されたNOVALIDATEモードの制約を使用して、結合情報を確認します。

RELY句の制限事項: RELYには、遅延不可のNOT NULL制約を設定できません。

関連項目:
マテリアライズド・ビューおよびクエリー・リライトの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

索引による制約の適用

一意制約または主キー制約の状態を定義する場合は、制約の適用に使用する索引を指定すること、または制約の適用に使用する索引をOracleで自動作成することが可能です。

using_index_clause using_index_clauseは、一意制約または主キー制約を使用可能にしている場合にのみ指定できます。using_index_clauseの句はどのような順序でも指定できますが、各句を指定できるのは1回のみです。

- schema.indexを指定すると、指定した索引を使用して制約が適用されます。索引がない、または制約の適用に索引が使用できない場合、エラーが戻されます。

- create_index_statementを指定すると、索引が作成され、制約の適用に使用されます。索引が作成できない、または制約の適用に索引が使用できない場合、エラーが戻されます。

- 既存の索引の指定も、新しい索引の作成も行わない場合は、索引が自動で作成されます。この場合、次のようになります。

- 索引には制約と同じ名前が割り当てられます。

- 表がパーティション化されている場合、一意制約または主キー制約にローカル・パーティション索引またはグローバル・パーティション索引を指定できます。

using_index_clauseの制限事項: using_index_clauseには、次の制限事項があります。

- この句は、ビュー制約に対して指定できません。

- この句は、NOT NULL、外部キーまたはCHECK制約には指定できません。

- 索引構成表の主キーが使用可能な場合は、索引の指定(schema.index)および作成(create_index_statement)はできません。

- index_attributesのparallel_clauseは指定できません。

- index_propertiesのINDEXTYPE IS ...句は、制約の定義では無効です。

関連項目:

- index_attributes、global_partitioned_index、local_partitioned_index句の詳細、および索引に関連するNOSORTとlogging_clauseの詳細は、「CREATE INDEX」を参照してください。

- 「physical_attributes_clause」と「PCTFREEパラメータ」および「storage_clause」を参照してください。

- 「明示的な索引の制御例」

制約の例外の処理

制約の状態を定義する場合は、制約に違反するすべての行のROWIDを格納する表を指定できます。

exceptions_clause exceptions_clause構文を使用すると、例外の処理を定義できます。schemaを指定しない場合、自分のスキーマ内に例外表があるとみなされます。この句自体を指定しない場合、表の名前はEXCEPTIONSになります。EXCEPTIONS表または指定した表は、ローカル・データベースに存在する必要があります。

次のいずれかのスクリプトを使用して、EXCEPTIONS表を作成できます。

- UTLEXCPT.SQLは、物理ROWIDを使用します。そのため、行は、索引構成表からではなく従来表から収集されます。(次の注意を参照。)

- UTLEXPT1.SQLは、ユニバーサルROWIDを使用します。そのため、行は、従来表と索引構成表の両方から収集されます。

独自の例外表を作成する場合、これら2つのスクリプトのいずれかで規定される形式に従う必要があります。

ユニバーサルROWIDではなく、主キーに基づく索引構成表から例外を収集する場合、索引構成表ごとに別の例外表を作成し、主キー記憶域を確保する必要があります。スクリプトを変更および再発行することによって、別の名前の例外表を複数作成できます。

exceptions_clauseの制限事項: exceptions_clauseには、次の制限事項があります。

- この句は、ビュー制約に対して指定できません。

- この文が正常に終了されるまでROWIDは存在しないため、この句をCREATE TABLE文に指定することはできません。

関連項目:

- SQLスクリプトの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』のDBMS_IOTパッケージを参照してください。

- 移行行および連鎖行の削除については、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。

ビュー制約

データ・ウェアハウスのアプリケーションは、リレーショナル・スキーマ内の参照整合性制約を識別することによって、Oracle Database内の多次元データを認識します。これらの制約によって、表間の主キーと外部キーの関係が表されます。Oracle Databaseデータ・ディクショナリを問い合せることによって、アプリケーションはそのような制約を認識できるようになるため、データベース内の多次元データを認識できます。スキーマの複雑さまたはセキュリティ上の理由のため、ファクト表およびディメンション表にビューを定義する必要がある場合があります。Oracle Databaseには、これらのビューを制約する機能があります。ビュー間で制約を定義できるようにすることによって、実表制約をビューに伝播できます。これによって、ビューで提供される制限された環境でも、アプリケーションで多次元データを認識できるようにすることができます。

Oracleでは、ビュー制約を適用していません。ただし、ビューに対する操作には、基となる実表に定義されている整合性制約が適用されます。つまり、実表に対する制約によって、ビューに制約を適用できます。

ビュー制約の注意事項: ビュー制約は表制約のサブセットで、次の制限事項があります。

- ビューには、一意制約、主キー制約および外部キー制約のみ指定できます。ただし、WITH CHECK OPTION句を使用してビューを定義することは可能です。これは、ビューにCHECK制約を指定することと同じです。

- ビュー制約は、DISABLE NOVALIDATEモードのみでサポートされています。他のモードは指定できません。ビュー制約を宣言する場合は、キーワードDISABLEを指定する必要があります。NOVALIDATEはデフォルトのため、明示的に指定する必要はありません。

- RELYおよびNORELYパラメータはオプションです。ビュー制約は適用されないため、通常はRELYパラメータで指定し、より有効に使用します。RELYまたはNORELYキーワードは、DISABLEキーワードより前に指定する必要があります。詳細は、「RELY句」を参照してください。

- ビュー制約は直接適用されないため、INITIALLY DEFERREDまたはDEFERRABLEは指定できません。

- using_index_clause、exceptions_clause句、またはreferences_clauseのON DELETE句は指定できません。

- オブジェクト列の属性にビュー制約を定義することはできません。

例

一意キーの例 次の文は、サンプル表sh.promotionsを作成する文の例です。この文は制約を表内に定義し、promo_id列で一意キーを暗黙的に使用可能にします(この例では、他の制約は省略されています)。

CREATE TABLE promotions_var1
( promo_id         NUMBER(6)
CONSTRAINT promo_id_u  UNIQUE
, promo_name       VARCHAR2(20)
, promo_category   VARCHAR2(15)
, promo_cost       NUMBER(10,2)
, promo_begin_date DATE
, promo_end_date   DATE
) ;

制約promo_id_uは、一意キーとしてpromo_id列を識別します。この制約によって、表に同じIDを持つ複数の販売促進の行が存在しないことが保証されます。ただし、識別子のない行は許可されます。

この制約を表外に定義して使用可能にすることもできます。

CREATE TABLE promotions_var2
( promo_id         NUMBER(6)
, promo_name       VARCHAR2(20)
, promo_category   VARCHAR2(15)
, promo_cost       NUMBER(10,2)
, promo_begin_date DATE
, promo_end_date   DATE
, CONSTRAINT promo_id_u UNIQUE (promo_id)
USING INDEX PCTFREE 20
TABLESPACE stocks
STORAGE (INITIAL 8M) );

この文にはusing_index_clauseも含まれています。この句は、制約を使用可能にするために作成される索引の記憶特性を指定します。

複合一意キーの例 次の文は、oe.warehouses表のwarehouse_id列とwarehouse_name列を組み合せて複合一意キーを定義し、使用可能にします。

ALTER TABLE warehouses
ADD CONSTRAINT wh_unq UNIQUE (warehouse_id, warehouse_name)
USING INDEX PCTFREE 5
EXCEPTIONS INTO wrong_id;

wh_unq制約によって、warehouse_idとwarehouse_nameを組み合せた値が表の中に複数存在しないことが保証されます。

このADD CONSTRAINT句には、制約以外のプロパティも指定できます。

- USING INDEX句は、制約を使用可能にするために作成される索引の記憶特性を指定します。

- EXCEPTIONS INTO句によって、制約に違反する行がwarehouses表に含まれている場合、その行に関する情報がwrong_id表に書き込まれます。wrong_id例外表が存在しない場合、この文は正常に実行されません。

主キーの例 次の文は、サンプル表hr.locationsを作成する文の例です。locations_demo表を作成し、location_id列に主キーを定義して使用可能にします(この例では、hr.locations表の他の制約は省略されています)。

CREATE TABLE locations_demo
( location_id    NUMBER(4) CONSTRAINT loc_id_pk PRIMARY KEY
, street_address VARCHAR2(40)
, postal_code    VARCHAR2(12)
, city           VARCHAR2(30)
, state_province VARCHAR2(25)
, country_id     CHAR(2)
) ;

表内に指定されているloc_id_pk制約は、location_id列をlocations_demo表の主キーとして識別します。この制約によって、表の中の複数の所在地が同一の所在地識別子を持つことはなく、かつ所在地識別子がNULLにならないことが保証されます。

この制約を表外に定義して使用可能にすることもできます。

CREATE TABLE locations_demo
( location_id    NUMBER(4)
, street_address VARCHAR2(40)
, postal_code    VARCHAR2(12)
, city           VARCHAR2(30)
, state_province VARCHAR2(25)
, country_id     CHAR(2)
, CONSTRAINT loc_id_pk PRIMARY KEY (location_id));

NOT NULLの例 次の文は、(「主キーの例」で作成した)locations_demo表を変更し、country_id列にNOT NULL制約を定義して使用可能にします。

ALTER TABLE locations_demo
MODIFY (country_id CONSTRAINT country_nn NOT NULL);

制約country_nnによって、country_idがNULLの所在地の行が表にないことが保証されます。

複合主キーの例 次の文は、sh.salesサンプル表のprod_id列およびcust_id列を組み合せて複合主キーを定義します。

ALTER TABLE sales
ADD CONSTRAINT sales_pk PRIMARY KEY (prod_id, cust_id) DISABLE;

この制約は、sales表の主キーとしてprod_id列とcust_id列の組合せを識別します。この制約によって、表の中の複数の行がprod_id列とcust_id列に同じ組合せの値を持たないことが保証されます。

この制約句(PRIMARY KEY)では、次の制約のプロパティも指定しています。

- 制約定義によって制約名が指定されていないため、この制約に対する名前がOracleによって自動的に生成されます。

- DISABLE句によって制約が定義されますが、使用可能にはなりません。

外部キー制約の例 次の文は、dept_20表を作成し、departments表のdepartment_id列の主キーを参照するdepartment_id列に、外部キーを定義して使用可能にします。

CREATE TABLE dept_20
(employee_id     NUMBER(4),
last_name       VARCHAR2(10),
job_id          VARCHAR2(9),
manager_id      NUMBER(4),
hire_date       DATE,
salary          NUMBER(7,2),
commission_pct  NUMBER(7,2),
department_id   CONSTRAINT fk_deptno
REFERENCES departments(department_id) );

fk_deptno制約によって、dept_20表の従業員が属しているすべての部門がdepartments表に含まれることが保証されます。ただし、部門番号がNULL値の従業員(どの部門にも属さない従業員)がいてもかまいません。すべての従業員がいずれかの部門に割り当てられるようにするには、dept_20表のdepartment_id列に対して、REFERENCES制約の他にNOT NULL制約を作成します。

この制約を定義して使用可能にする前に、departments表のdepartment_id列を主キーまたは一意キーとして指定する制約を定義して使用可能にする必要があります。

制約が表内に定義されているため、この外部キー制約定義はFOREIGN KEY句を使用しません。また、この列には参照キーのデータ型が自動的に割り当てられるため、department_id列のデータ型は必要ありません。

制約定義によって親表と参照キーの列の両方が指定されます。参照キーは親表の主キーであるため、参照キーの列名の指定は任意です。

この外部キー制約を表外に定義することもできます。

CREATE TABLE dept_20
(employee_id     NUMBER(4),
last_name       VARCHAR2(10),
job_id          VARCHAR2(9),
manager_id      NUMBER(4),
hire_date       DATE,
salary          NUMBER(7,2),
commission_pct  NUMBER(7,2),
department_id,
CONSTRAINT fk_deptno
FOREIGN  KEY (department_id)
REFERENCES  departments(department_id) );

これらの外部キー定義は、両方ともON DELETE句を指定していないため、従業員がいる部門は削除できません。

ON DELETEの例 次の文では、dept_20表を作成し、2つの参照整合性制約を定義して使用可能にした後、ON DELETE句を使用します。

CREATE TABLE dept_20
(employee_id     NUMBER(4) PRIMARY KEY,
last_name       VARCHAR2(10),
job_id          VARCHAR2(9),
manager_id      NUMBER(4) CONSTRAINT fk_mgr
REFERENCES employees ON DELETE SET NULL,
hire_date       DATE,
salary          NUMBER(7,2),
commission_pct  NUMBER(7,2),
department_id   NUMBER(2)   CONSTRAINT fk_deptno
REFERENCES departments(department_id)
ON DELETE CASCADE );

最初のON DELETE句によって、従業員番号2332の上司がemployees表から削除された場合、2332の上司の部下だったdept_20表のすべての従業員のmanager_id値がNULLになります。

次のON DELETE句によって、departments表のdepartment_id値が削除されると、これに依存するdept_20表の行のdepartment_id値も同時に削除されます。たとえば、部門番号20がdepartments表から削除されると、部門番号20の全従業員がdept_20表から削除されます。

複合外部キー制約の例 次の文は、dept_20表のemployee_id列およびhire_date列を組み合せて外部キーを定義して使用可能にします。

ALTER TABLE dept_20
ADD CONSTRAINT fk_empid_hiredate
FOREIGN KEY (employee_id, hire_date)
REFERENCES hr.job_history(employee_id, start_date)
EXCEPTIONS INTO wrong_emp;

fk_empid_hiredate制約によって、dept_20表の中すべての従業員が、employees表に存在するemployee_idとhire_dateの組合せを持つことが保証されます。この制約を定義して使用可能にする前に、employees表のemployee_id列とhire_date列の組合せを主キーまたは一意キーとして指定する制約を定義して使用可能にする必要があります。

EXCEPTIONS INTO句によって、制約に違反する行がdept_20表に含まれている場合、その行に関する情報がwrong_emp表に書き込まれます。wrong_emp例外表が存在しない場合、この文は正常に実行されません。

CHECK制約の例 次の文は、divisions表を作成し、その表の各列にcheck制約を定義します。

CREATE TABLE divisions
(div_no    NUMBER  CONSTRAINT check_divno
CHECK (div_no BETWEEN 10 AND 99)
DISABLE,
div_name  VARCHAR2(9)  CONSTRAINT check_divname
CHECK (div_name = UPPER(div_name))
DISABLE,
office    VARCHAR2(10)  CONSTRAINT check_office
CHECK (office IN ('DALLAS','BOSTON',
'PARIS','TOKYO'))
DISABLE);

列に定義されている各制約によって、列の値が次のように制限されます。

- check_divnoによって、部門番号は必ず10から99の範囲内になります。

- check_divnameによって、部門名はすべて大文字になります。

- check_officeによって、事務所の所在地はDallas、Boston、ParisまたはTokyoのいずれかに制限されます。

それぞれのCONSTRAINT句にDISABLE句が指定されているため、これらの制約は定義されるのみで、使用可能にはされません。

次の文は、dept_20表を作成し、CHECK制約を表外に定義して暗黙的に使用可能にします。

CREATE TABLE dept_20
(employee_id     NUMBER(4) PRIMARY KEY,
last_name       VARCHAR2(10),
job_id          VARCHAR2(9),
manager_id      NUMBER(4),
salary          NUMBER(7,2),
commission_pct  NUMBER(7,2),
department_id   NUMBER(2),
CONSTRAINT check_sal CHECK (salary * commission_pct <= 5000));

この制約は、不等式の条件を使用して、従業員の歩合総額(salaryとcommission_pctを掛けた金額)を$5000に制限します。

- 従業員の給与と歩合がNULL以外の値の場合、制約を満たすには、この金額が$5000を超えてはいけません。

- 従業員の給与または歩合がNULL値の場合、条件の結果は不明となり、その従業員は自動的に制約を満たします。

この例の制約句には制約名が指定されていないため、制約の名前が自動的に生成されます。

次の文は、1つの主キー制約、2つの外部キー制約、1つのNOT NULL制約および2つのCHECK制約を定義して使用可能にします。

CREATE TABLE order_detail
(CONSTRAINT pk_od PRIMARY KEY (order_id, part_no),
order_id    NUMBER
CONSTRAINT fk_oid
REFERENCES oe.orders(order_id),
part_no     NUMBER
CONSTRAINT fk_pno
REFERENCES oe.product_information(product_id),
quantity    NUMBER
CONSTRAINT nn_qty NOT NULL
CONSTRAINT check_qty CHECK (quantity > 0),
cost        NUMBER
CONSTRAINT check_cost CHECK (cost > 0) );

この制約によって、表のデータに対して次の規則を適用できます。

- pk_odは、order_id列とpart_no列の組合せを表の主キーとして指定します。この制約を満たすためには、order_id列およびpart_no列の組合せが同じである行が、表内に2つあってはいけません。また、order_id列およびpart_no列では、行にNULLを入れることはできません。

- fk_oidは、サンプル・スキーマoe内のorders表にあるorder_id列を参照する外部キーとして、order_id列を指定します。order_detail.order_id列に追加されるすべての新しい値は、oe.orders.order_id列にあらかじめ存在する必要があります。

- fk_pnoは、oeが所有するproduct_information表にあるproduct_id列を参照する外部キーとして、product_id列を指定します。order_detail.product_id列に追加されるすべての新しい値は、oe.product_information.product_id列にあらかじめ存在する必要があります。

- nn_qtyは、quantity列に対してNULLを禁止します。

- check_qtyによって、quantity列の値は必ず0(ゼロ)より大きくなります。

- check_costによって、cost列の値は必ず0(ゼロ)より大きくなります。

この例は、制約句と列定義について、次の点についても示しています。

- 表外制約定義は、列定義の前と後のどちらにも指定できます。この例では、pk_od制約の表外定義が、列定義の前にあります。

- 列定義には、複数の表内制約定義を含めることができます。この例では、quantity列の定義はnn_qty制約とcheck_qty制約の両方の定義を含んでいます。

- 表には、複数のCHECK制約を指定できます。複数のビジネス・ルールを適用する複雑な条件を持つ1つのCHECK制約よりも、それぞれ1つのビジネス・ルールのみを適用する単純な条件を持つ複数のCHECK制約を使用してください。矛盾している制約があると、その制約を識別するエラー・メッセージが戻されます。エラーが検出された制約が1つのビジネス・ルールのみを有効にする場合、このようなエラー・メッセージの方が、矛盾のあるビジネス・ルールを正確に識別できます。

属性レベル制約の例 次の文は、students表のname列のfirst_name属性とlast_name属性の両方に対して値が存在することを保証します。

CREATE TYPE person_name AS OBJECT
(first_name VARCHAR2(30), last_name VARCHAR2(30));
/

CREATE TABLE students (name person_name, age INTEGER,
CHECK (name.first_name IS NOT NULL AND
name.last_name IS NOT NULL));

REF制約の例 次の例は、サンプル・スキーマのオブジェクト型であるcust_address_typの複製を作成し、SCOPE制約が指定されたREF列を含む表を作成します。

CREATE TYPE cust_address_typ_new AS OBJECT
( street_address     VARCHAR2(40)
, postal_code        VARCHAR2(10)
, city               VARCHAR2(30)
, state_province     VARCHAR2(10)
, country_id         CHAR(2)
);
/
CREATE TABLE address_table OF cust_address_typ_new;

CREATE TABLE customer_addresses (
add_id NUMBER,
address REF cust_address_typ_new
SCOPE IS address_table);

次の例は、同じ表を作成しますが、親表のオブジェクト識別子列を参照するREF列に参照整合性制約が指定されています。

CREATE TABLE customer_addresses (
add_id NUMBER,
address REF cust_address_typ REFERENCES address_table);

次の例では、department_typ型およびdepartments_obj_t表(「オブジェクト表の作成例:」で作成)を使用します。この文を実行すると、有効範囲付きREFを持つ表が作成されます。

CREATE TABLE employees_obj
( e_name   VARCHAR2(100),
e_number NUMBER,
e_dept   REF department_typ SCOPE IS departments_obj_t );

次の文は、参照整合性制約が定義されているREF列を含む表を作成します。

CREATE TABLE employees_obj
( e_name   VARCHAR2(100),
e_number NUMBER,
e_dept   REF department_typ REFERENCES departments_obj_t);

明示的な索引の制御例 次の文は、Oracleが制約を適用する場合に使用する索引を、明示的に制御する一意制約または主キー制約を作成する別の方法を示します。

CREATE TABLE promotions_var3
( promo_id         NUMBER(6)
, promo_name       VARCHAR2(20)
, promo_category   VARCHAR2(15)
, promo_cost       NUMBER(10,2)
, promo_begin_date DATE
, promo_end_date   DATE
, CONSTRAINT promo_id_u UNIQUE (promo_id, promo_cost)
USING INDEX (CREATE UNIQUE INDEX promo_ix1
ON promotions_var3 (promo_id, promo_cost))
, CONSTRAINT promo_id_u2 UNIQUE (promo_cost, promo_id)
USING INDEX promo_ix1);

この例は、1つの制約に対して1つの索引を作成し、その索引を使用して同じ文に別の制約を作成して使用可能にできることも示しています。

DEFERRABLE制約の例 次の文は、scores列にCHECK制約NOT DEFERRABLE INITIALLY IMMEDIATE(デフォルト)を使用したgames表を作成します。

CREATE TABLE games (scores NUMBER CHECK (scores >= 0));

次の文は、列に対する一意制約をINITIALLY DEFERRED DEFERRABLEとして定義します。

CREATE TABLE games
(scores NUMBER, CONSTRAINT unq_num UNIQUE (scores)
INITIALLY DEFERRED DEFERRABLE);

deallocate_unused_clause

用途

deallocate_unused_clauseを使用すると、データベース・オブジェクト・セグメントの終わりにある未使用領域の割当てを明示的に解除し、解放された領域を表領域の他のセグメントで使用できるようになります。

未使用領域の割当ては、次の文で解除できます。

- ALTER CLUSTER(「ALTER CLUSTER」を参照)

- ALTER INDEX: 未使用領域の割当てを索引、索引パーティションまたは索引サブパーティションから解除する場合(「ALTER INDEX」を参照)

- ALTER MATERIALIZED VIEW: 未使用領域の割当てを索引構成マテリアライズド・ビューのオーバーフロー・セグメントから解除する場合(「ALTER MATERIALIZED VIEW」を参照)

- ALTER TABLE: 未使用領域の割当てを表、表パーティション、表サブパーティション、索引構成表のマッピング表、索引構成表のオーバーフロー・セグメントまたはLOB記憶域セグメントから解除する場合(「ALTER TABLE」を参照)

構文

deallocate_unused_clause::=

(size_clause::=を参照)

セマンティクス

この項では、deallocate_unused_clauseのセマンティクスについて説明します。詳細は、特定のデータベース・オブジェクトに対してこの句を設定または再設定するSQL文の説明を参照してください。

同じ文でdeallocate_unused_clauseとallocate_extent_clauseの両方を指定することはできません。

最高水位標を超える(データベース・ブロックがデータを受け取るためにフォーマットされていない)未使用領域のみ解放できます。未使用領域の割当て解除は、オブジェクトの終わりから開始し、オブジェクトの先頭にある最高水位標に向かって進行します。

エクステントが割当て解除の範囲内に完全に含まれる場合、エクステント全体が解放されて再利用可能となります。エクステントの一部が含まれる場合、最高水位標までのすでに使用されている部分がエクステントになり、残りの未使用領域が解放されて再利用可能になります。

割当てが解除される表領域のユーザー割当て制限は、解放される領域の量のみ増加します。

解放される領域の実際の量は、INITIAL、MINEXTENTSおよびNEXT記憶域パラメータによって異なります。これらのパラメータの詳細は、「storage_clause」を参照してください。

KEEP integer

割当て解除後に、データベース・オブジェクトのセグメントが保持する、最高水位標を超えるバイト数を指定します。

- KEEPを指定しなかった場合に、最高水位標がINITIALおよびMINEXTENTSのサイズを超えると、最高水位標を超えるすべての未使用領域が解放されます。最高水位標がINITIALまたはMINEXTENTSのサイズより小さい場合は、MINEXTENTSを超えるすべての未使用領域が解放されます。

- KEEPオプションを指定した場合、指定した量の領域が保持され、残りの領域のみが解放されます。このとき、残りのエクステント数がMINEXTENTSより小さくなった場合、MINEXTENTSはそのエクステント数に変更されます。また、初期エクステントがINITIALより小さくなった場合、INITIALがそのサイズに変更されます。

- どちらの場合にも、NEXT記憶域パラメータの値は、割当て解除された最後のエクステントのサイズに設定されます。

file_specification

用途

file_specification構文のいずれかを使用すると、ファイルをデータファイルまたは一時ファイルとして指定できます。また、1つ以上のファイルのグループを1つのREDOログ・ファイル・グループとして指定することもできます。Oracle Automatic Storage Management (Oracle ASM)ディスク・グループにファイルを格納する場合、そのファイルをディスク・グループ・ファイルとしても指定できます。

file_specificationは次の文に指定できます。

- CREATE CONTROLFILE(「CREATE CONTROLFILE」を参照)

- CREATE DATABASE(「CREATE DATABASE」を参照)

- ALTER DATABASE(「ALTER DATABASE」を参照)

- CREATE TABLESPACE(「CREATE TABLESPACE」を参照)

- ALTER TABLESPACE(「ALTER TABLESPACE」を参照)

- ALTER DISKGROUP(「ALTER DISKGROUP」を参照)

前提条件

ファイルを指定する文を発行する権限が必要です。

構文

file_specification::=

datafile_tempfile_spec::=

(size_clause::=を参照)

redo_log_file_spec::=

(size_clause::=を参照)

ASM_filename ::=

fully_qualified_file_name::=

numeric_file_name::=

incomplete_file_name::=

alias_file_name::=

autoextend_clause::=

(size_clause::=を参照)

maxsize_clause::=

(size_clause::=を参照)

セマンティクス

この項では、file_specificationのセマンティクスについて説明します。詳細は、データファイル、一時ファイル、REDOログ・ファイルまたはOracle ASMディスク・グループやディスク・グループ・ファイルを指定するSQL文の説明を参照してください。

datafile_tempfile_spec

データベース記憶域がファイル・システム内またはOracle ASMディスク・グループ内に存在する場合、この句を使用してデータファイルと一時ファイルの属性を指定します。

redo_log_file_spec

データベース記憶域がファイル・システム内またはOracle ASMディスク・グループ内に存在する場合、この句を使用してREDOログ・ファイルの属性を指定します。

filename

filenameは、ファイル・システム内に格納されたファイルに使用します。filenameは、新しいファイルまたは既存のファイルを指定できます。新しいファイルを指定する場合、次のことに注意します。

- Oracle Managed Filesを使用していない場合は、filenameとSIZE句の両方を指定しないと、文は失敗します。サイズを指定せずにファイル名を指定すると、Oracleは既存のファイルを再利用し、ファイルが存在しない場合はエラーを戻そうとします。

- Oracle Managed Filesを使用している場合は、filenameや残りの句は必須ではありません。この場合、Oracle Databaseによってファイルに一意の名前が作成され、そのファイルが次のいずれかの初期化パラメータで指定されるディレクトリに保存されます。

- DB_RECOVERY_FILE_DEST(ログ・ファイルと制御ファイルに有効)

- DB_CREATE_FILE_DEST初期化パラメータ(すべてのファイル・タイプに有効)

- DB_CREATE_ONLINE_LOG_DEST_n初期化パラメータ(ログ・ファイルに対してはDB_CREATE_FILE_DESTとDB_RECOVERY_FILE_DESTより優先される)。

既存のファイルを指定する場合は、データファイル、一時ファイルまたはREDOログ・ファイル・メンバーの名前を指定します。filenameには、7ビットASCIIキャラクタ・セットまたはEBCDICキャラクタ・セットのシングルバイト文字のみを使用できます。マルチバイト文字は無効です。

filenameには、パス接頭辞を含めることができます。パス接頭辞を指定しない場合は、データベースによってデフォルトの格納場所(プラットフォームによって異なる)のパス接頭辞が追加されます。

REDOログ・ファイル・グループは、1つ以上のメンバー(コピー)で構成されます。filenameは、使用するオペレーティング・システムの表記規則に従って、完全な名前で指定する必要があります。

データベースがfilenameを解析する方法は、SIZE句およびREUSE句の指定によっても異なります。

- filenameのみを指定する場合、またはREUSE句を指定してSIZE句を指定しない場合、そのファイルはすでに存在している必要があります。

- filenameの指定に、SIZE句を指定して、REUSE句を指定しない場合、そのファイルは新しいファイルである必要があります。

- filenameの指定に、SIZE句とREUSE句の両方を指定する場合、そのファイルは新しいファイル、既存のファイルのどちらでもかまいません。ファイルがすでに存在している場合は、そのファイルが新しいサイズで再利用されます。また、ファイルが存在しない場合は、データベースはREUSEキーワードを無視し、指定のサイズで新しいファイルを作成します。

関連項目:
Oracle Managed Filesの詳細は、『Oracle Automatic Storage Management管理者ガイド』を参照してください。また、「データファイルの指定例」および「ログ・ファイルの指定例」も参照してください。

ASM_filename

Oracle ASMディスク・グループに格納されたファイルには、ASM_filenameの形式を使用します。この構文でデータファイル、一時ファイルおよびREDOログ・ファイルを作成または参照できます。

すべてのASM_filename形式は、プラス記号(+)で始まりディスク・グループ名が続きます。すべてのOracle ASMディスク・グループの名前を確認するには、V$ASM_DISKGROUPビューを問い合せます。

関連項目:
Oracle ASMの使用については、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

fully_qualified_file_name

Oracle ASMディスク・グループにファイルを作成する場合、そのファイルにはシステム生成の完全修飾されたOracle ASMファイル名が付けられます。既存のOracle ASMファイルを参照する場合にのみ、この形式を使用できます。そのため、ファイル作成時にこの形式を使用する場合は、REUSEも指定する必要があります。

- db_nameは、DB_UNIQUE_NAME初期化パラメータの値です。この名前はファイルが存在するデータベースの名前と同じです。ただし、プライマリ・データベースとスタンバイ・データベースの両方が存在する場合は、パラメータはこれらを区別して異なる値になります。

- file_typeとfile_type_tagは、データベース・ファイル・タイプです。表8-1に、すべてのファイル・タイプとそれに対応するOracle ASMタグを示します。

- filenumberとincarnation_numberは、システム生成の識別子で、これによって一意性が保証されます。

完全修飾されたOracle ASMファイル名を確認するには、そのファイル・タイプに適切な動的パフォーマンス・ビュー(データファイルではV$DATAFILE、制御ファイルではV$CONTROLFILEなど)を問い合せます。また、V$ASM_FILEビューを問い合せることによって、完全修飾された名前のfilenumberとincarnation_numberの部分を取得できます。

表8-1 Oracleファイル・タイプとOracle ASMファイル・タイプ・タグ

Oracle ASM file_type

説明

Oracle ASM file_type_tag

コメント

CONTROLFILE

制御ファイルとバックアップ制御ファイル

Current

Backup

—

DATAFILE

データファイルとデータファイル・コピー

tsname

ファイルが追加される表領域です。

ONLINELOG

オンライン・ログ

group_group#

—

ARCHIVELOG

アーカイブ・ログ

thread_thread#_seq_sequence#

—

TEMPFILE

一時ファイル

tsname

ファイルが追加される表領域です。

BACKUPSET

データファイルとアーカイブ・ログのバックアップ・ピース(データファイルの増分バックアップ・ピース)

hasspfile_timestamp

hasspfileの値は、s(バックアップ・セットがspfileを含む)またはn(バックアップ・セットがspfileを含まない)のいずれかになります。

PARAMETERFILE

永続パラメータ・ファイル

spfile

—

DATAGUARDCONFIG

Data Guard構成ファイル

db_unique_name

Data Guardでは、DB_UNIQUE_NAME初期化パラメータの値が使用されます。

FLASHBACK

フラッシュバック・ログ

log_log#

—

CHANGETRACKING

ブロック・チェンジ・トラッキング・データ

ctf

増分バックアップ中に使用されます。

DUMPSET

データ・ポンプ・ダンプ・セット

user_obj#_file#

ダンプ・セット・ファイルは、ユーザー名、ダンプ・セットが作成されたジョブ番号およびファイル番号をタグの一部としてエンコードします。

XTRANSPORT

データファイル変換

tsname

—

AUTOBACKUP

自動バックアップ・ファイル

hasspfile_timestamp

hasspfileの値は、s(バックアップ・セットがspfileを含む)またはn(バックアップ・セットがspfileを含まない)のいずれかになります。

numeric_file_name

数値のOracle ASMファイル名は、一意のfilenumber.incarnation_number文字列のみが使用されることを除き、完全修飾されたファイル名に類似しています。既存のファイルを参照するためにのみ、この形式を使用できます。そのため、ファイル作成時にこの形式を使用する場合は、REUSEも指定する必要があります。

incomplete_file_name

不完全なOracle ASMファイル名は、ファイルの作成時にのみ使用されます。ディスク・グループ名のみを指定した場合、Oracle ASMではそのファイル・タイプに適したデフォルトのテンプレートが使用されます。たとえば、CREATE TABLESPACE文でデータファイルを作成する場合、Oracle ASMではデフォルトのDATAFILEテンプレートを使用してOracle ASMデータファイルが作成されます。ディスク・グループ名とテンプレートを指定した場合、Oracle ASMでは指定したテンプレートを使用してファイルが作成されます。いずれの場合も、Oracle ASMによって完全修飾されたファイル名が作成されます。

template_name テンプレートは、属性の名前付きコレクションです。テンプレートを作成して、ディスク・グループのファイルに適用できます。すべてのOracle ASMテンプレートの名前を確認するには、V$ASM_TEMPLATEデータ・ディクショナリ・ビューを問い合せます。Oracle ASMテンプレートを作成する手順は、「diskgroup_template_clauses」を参照してください。

templateは、ファイルの作成時にのみ指定できます。これは、ASM_filenameの構文図の不完全なファイル名形式および別名形式に示されています。

- ディスク・グループ名の直後にtemplateを指定した場合、Oracle ASMでは指定したテンプレートを使用してファイルが作成され、そのファイルに完全修飾されたファイル名が付けられます。

- 別名を指定した後にtemplateを指定した場合、Oracle ASMでは指定したテンプレートを使用してファイルが作成され、そのファイルに完全修飾されたファイル名が付けられます。また、後でファイルの参照に使用できる別名も作成されます。指定した別名が既存のファイルを参照している場合は、REUSEを指定しないかぎり、Oracle ASMではテンプレートの指定が無視されます。

関連項目:
デフォルト・テンプレートについては、「diskgroup_template_clauses」を参照してください。

alias_file_name

別名は、Oracle ASMファイルのわかりやすい名前です。ファイルの別名は、ファイルの作成または参照時に使用できます。ファイルの作成時にのみ、別名とともにテンプレートを指定できます。Oracle ASMファイルの別名を確認するには、V$ASM_ALIASデータ・ディクショナリ・ビューを問い合せます。

ファイルの作成時に別名を指定する場合、完全な別名を指定する手順は、「diskgroup_directory_clauses」および「diskgroup_alias_clauses」を参照してください。

SIZE句

ファイルのサイズをバイト単位で指定します。K、M、GまたはTを使用して、KB、MB、GBまたはTB単位で指定することもできます。

- UNDO表領域の場合、各データファイルに対してSIZE句を指定する必要があります。その他の表領域の場合、ファイルがすでに存在するとき、またはOracle Managed Fileを作成するときには、このパラメータを省略できます。

- Oracle Managed Fileの作成時にこの句を指定しないと、100MBのファイルが作成されます。

- 表領域は、中に含まれるオブジェクトのサイズの合計より1ブロック大きいサイズである必要があります。

関連項目:
自動UNDO管理およびUNDO表領域の詳細は、『Oracle Database管理者ガイド』を参照してください。また、「ログ・ファイルの追加例」も参照してください。

BLOCKSIZE句

BLOCKSIZEを指定すると、オペレーティング・システム依存のセクター・サイズを上書きします。この句を省略した場合、オペレーティング・システム依存のセクター・サイズがブロック・サイズとして使用されます。

512バイト・セクターのディスク、または512バイトをエミュレートする4KBセクターのディスクにREDOログ・ファイルを追加する場合は、新しいファイルのブロック・サイズがプラットフォーム・ベースの元のサイズ(4KB)である必要があります。

- 512バイト・セクターのディスクにREDOログ・ファイルを追加する場合は、使用しているプラットフォームに応じて、ブロック・サイズを512または1024(1K)に指定する必要があります。

- 4KBセクターのディスク(ネイティブ)にREDOログ・ファイルを追加する場合は、ブロック・サイズを4096(4K)に指定する必要があります。

- 512バイトをエミュレートする4KBセクターのディスクにREDOログ・ファイルを追加する場合は、使用しているプラットフォームに応じて、ブロック・サイズを512、1024(1K)または4096(4K)のいずれかに指定できます。

ログ・グループ内のすべてのログが、同じブロック・サイズである必要があります。別々のディスクに2つのログ・グループを作成する場合は、ブロック・サイズが異なっていてもかまいません。ただし、構成が異なっていると、ログ・スイッチのたびにオーバーヘッドが発生します。すべてのログ・ファイルのブロック・サイズを同じにすることをお薦めします。

この句は、使用しているセクター・サイズが4Kの場合に、パフォーマンスよりもディスク使用量を重視して最適化する場合に有効です。この場合、BLOCKSIZE 512(HP-UXの場合はBLOCKSIZE 1024)を指定してオペレーティング・システムのセクター・サイズを上書きできます。

関連項目:
「ログ・ファイルの追加例」

REUSE

REUSEは、既存ファイルの再利用を可能にします。

- ファイルがすでに存在する場合、ファイル名が再利用され、新しいサイズが適用されるか(SIZEを指定する場合)、または元のサイズのままとなります。

- ファイルが存在していない場合、この句は無視され、ファイルが作成されます。

REUSE句の制限事項: filenameを指定しないかぎり、REUSEは指定できません。

既存のファイルが使用される場合は、そのファイルに入っていた内容は失われます。

関連項目:
「データファイルの追加例」および「ログ・ファイルの追加例」を参照してください。

autoextend_clause

autoextend_clauseはデータファイルと一時ファイルに有効ですが、REDOログ・ファイルには有効ではありません。この句は、新しいデータファイル、既存のデータファイルまたは一時ファイルの自動拡張を使用可能または使用禁止にします。この句を指定しない場合、次のようになります。

- Oracle Managed Filesの場合

- SIZEを指定すると、指定したサイズのファイルが作成され、AUTOEXTENDが使用禁止になります。

- SIZEを指定しないと、100MBのファイルが作成され、AUTOEXTENDが使用可能になります。自動拡張が必要な場合、データベースは元のサイズまたは100MB(いずれか小さい方)のサイズ単位でファイルを拡張します。NEXT句を指定して、このデフォルトの動作を上書きできます。

- ユーザー管理ファイルの場合、SIZEの指定/未指定にかかわらず、AUTOEXTENDが使用禁止にされたファイルが作成されます。

ON ONを指定すると、自動拡張を使用可能にします。

OFF OFFを指定すると、自動拡張を使用禁止にします。自動拡張を使用禁止にする場合は、NEXTおよびMAXSIZEの値を0(ゼロ)に設定します。後続の文で自動拡張を使用可能に戻す場合は、これらの値を設定しなおす必要があります。

NEXT NEXT句を使用すると、エクステントがさらに必要になった場合にデータファイルに自動的に割り当てられるディスク領域の増分サイズを、バイト単位で指定できます。デフォルトのサイズは1データ・ブロックです。

MAXSIZE MAXSIZE句を使用すると、データファイルの自動拡張で使用されるディスク領域の最大サイズを指定できます。

UNLIMITED データファイルまたは一時ファイルに割り当てられるディスク領域を制限しない場合は、UNLIMITED句を使用します。

autoextend_clauseの制限事項: この句はCREATE CONTROLFILE文のdatafile_tempfile_specの一部、またはALTER DATABASE CREATE DATAFILE句には指定できません。

例

ログ・ファイルの指定例 次の文は、payableという名前のデータベースを作成します。このデータベースには各グループにメンバーを2つ持つREDOログ・ファイル・グループが2つと、データファイルが1つ設定されています。

CREATE DATABASE payable
LOGFILE GROUP 1 ('diska:log1.log', 'diskb:log1.log') SIZE 50K,
GROUP 2 ('diska:log2.log', 'diskb:log2.log') SIZE 50K
DATAFILE 'diskc:dbone.dbf' SIZE 30M;

LOGFILE句の最初のファイル指定は、REDOログ・ファイル・グループにGROUP 1の値を指定します。このグループには、'diska:log1.log'および'diskb:log1.log'というメンバーがあり、サイズはそれぞれ50KBです。

LOGFILE句の2番目のファイル指定は、REDOログ・ファイル・グループにGROUP 2の値を指定します。このグループには、'diska:log2.log'および'diskb:log2.log'というメンバーがあり、サイズはそれぞれ50KBです。

DATAFILE句のファイル指定では、'diskc:dbone.dbf'という名前のデータファイルが指定されています。このファイルのサイズは30MBです。

各ファイル指定はSIZEパラメータの値を指定し、REUSE句は指定していないため、指定のファイルがすでに定義されていることはありません。Oracleが新しくファイルを作成します。

ログ・ファイルの追加例 次の文は、2つのメンバーで構成される新しいREDOログ・ファイル・グループを、payableデータベースに追加します。

ALTER DATABASE payable
ADD LOGFILE GROUP 3 ('diska:log3.log', 'diskb:log3.log')
SIZE 50K REUSE;

ADD LOGFILE句のファイル指定は、REDOログ・ファイル・グループにGROUP 3の値を指定します。このグループには、'diska:log3.log'および'diskb:log3.log'というメンバーがあり、サイズはそれぞれ50KBです。このファイル指定ではREUSE句が指定されているため、各メンバーはすでに存在している可能性があります(ただし、存在していなくてもかまいません)。

次の文は移行先のディスク4k_disk_aおよび4k_disk_b上にメンバー・ログ・ファイルを持つログ・ファイル・グループ5を追加します。この文の実行後は、switch_logfile_clauseを使用して、ブロック・サイズが512バイトのディスク上にある既存のログ・ファイルを、ブロック・サイズが4Kのログに切り替えることができます。

ALTER DATABASE ADD LOGFILE GROUP 5
('4k_disk_a:log5.log', '4k_disk_b:log5.log')
SIZE 100M BLOCKSIZE 4096 REUSE;

データファイルの指定例 次の文は、stocksという名前の表領域を作成します。また、この表領域にはデータファイルが3つあります。

CREATE TABLESPACE stocks
DATAFILE 'stock1.dbf' SIZE 10M,
'stock2.dbf' SIZE 10M,
'stock3.dbf' SIZE 10M;

このデータファイルのファイル指定は、'diskc:stock1.dbf'、'diskc:stock2.dbf'および'diskc:stock3.dbf'という名前のファイルを指定します。

データファイルの追加例 次の文は、stocks表領域を変更し、新しいデータファイルを追加します。

ALTER TABLESPACE stocks
ADD DATAFILE 'stock4.dbf' SIZE 10M REUSE;

このファイル指定は、'stock4.dbf'という名前のデータファイルを指定します。このファイル名が存在しない場合、REUSEキーワードは無視されます。

完全修飾されたOracle ASMデータファイル名の使用例 次の文は、Oracle ASMを使用する際に、fully_qualified_file_name句を使用して、仮想データベースtestdbのデータファイルをオンラインにする方法を示します。

ALTER DATABASE testdb
DATAFILE '+dgroup_01/testdb/datafile/system.261.1' ONLINE;

logging_clause

用途

logging_clauseを使用すると、特定のDML操作をREDOログ・ファイルに記録するか(LOGGING)、記録しないか(NOLOGGING)を指定できます。

logging_clauseは次の文に指定できます。

- CREATE TABLEおよびALTER TABLE: 表、表のパーティション、LOBセグメント、または索引構成表のオーバーフロー・セグメントのログを記録する場合(「CREATE TABLE」および「ALTER TABLE」を参照)。

注意:
LOB列に指定されたロギングは、表レベルで設定されたロギングとは異なる場合があります。表レベルでLOGGINGを指定し、LOB列にNOLOGGINGを指定する場合は、実表の行に対するDMLの変更は記録されますが、LOBデータに対するDMLの変更は記録されません。

- CREATE INDEXおよびALTER INDEX: 索引または索引のパーティションのログを記録する場合(「CREATE INDEX」および「ALTER INDEX」を参照)。

- CREATE MATERIALIZED VIEWおよびALTER MATERIALIZED VIEW: マテリアライズド・ビュー、マテリアライズド・ビューのパーティションの1つまたはLOBセグメントのログを記録する場合(「CREATE MATERIALIZED VIEW」および「ALTER MATERIALIZED VIEW」を参照)。

- CREATE MATERIALIZED VIEW LOGおよびALTER MATERIALIZED VIEW LOG: マテリアライズド・ビュー・ログまたはマテリアライズド・ビュー・ログのパーティションの1つのログを記録する場合(「CREATE MATERIALIZED VIEW LOG」および「ALTER MATERIALIZED VIEW LOG」を参照)。

- CREATE TABLESPACEおよびALTER TABLESPACE: 表領域に作成されたすべてのオブジェクトに対するデフォルトのロギング特性を設定または変更する場合(「CREATE TABLESPACE」および「ALTER TABLESPACE」を参照)。

- CREATE PLUGGABLE DATABASEおよびALTER PLUGGABLE DATABASE: プラガブル・データベース(PDB)に作成されたすべての表領域のデフォルトのロギング特性を設定または変更する場合(CREATE PLUGGABLE DATABASEおよびALTER PLUGGABLE DATABASEを参照)。

次の操作にも、LOGGINGまたはNOLOGGINGを指定できます。

- 索引の再構築(CREATE INDEX ... REBUILDを使用)

- 表の移動(ALTER TABLE ... MOVEを使用)

構文

logging_clause::=

セマンティクス

この項では、logging_clauseのセマンティクスについて説明します。詳細は、特定のデータベース・オブジェクトに対してロギング特性を設定または再設定するSQL文の説明を参照してください。

- LOGGINGを指定すると、データベース・オブジェクトの作成、およびその後のオブジェクトへの挿入をREDOログ・ファイルに記録します。

- NOLOGGINGを指定すると、データベース・オブジェクトの作成、およびその後の従来型INSERTをREDOログ・ファイルに記録します。ダイレクト・パス・インサートは記録されません。

- 非パーティション・オブジェクトの場合、この句に指定する値は、オブジェクトに関連付けられたセグメントの実際の物理属性となります。

- パーティション・オブジェクトの場合、この句に指定する値は、PARTITION記述でロギング属性を指定しないかぎり、CREATE文(および後続のALTER ... ADD PARTITION文)で指定するすべてのパーティションに関連付けられたセグメントのデフォルトの物理属性となります。

- SecureFiles LOBでは、NOLOGGING設定はFILESYSTEM_LIKE_LOGGINGに内部変換されます。

- CACHE NOLOGGINGは、BasicFiles LOBに対しては許可されません。

- FILESYSTEM_LIKE_LOGGING句は、SecureFiles LOBセグメントのログを記録する場合にのみ有効です。この設定は、BasicFiles LOBには指定できません。メタデータ変更のログのみを記録する場合は、この設定を指定します。この設定は、障害からリカバリする平均時間を短縮するファイル・システムのメタデータ・ジャーナリングに似ています。SecureFiles LOBのLOGGING設定は、ファイルシステムのデータ・ジャーナルに似ています。LOGGINGとFILESYSTEM_LIKE_LOGGINGの両方の設定によって、SecureFileを使用した完全なトランザクション・ファイル・システムが実現します。

注意:
LOBセグメントの場合は、NOLOGGING設定とFILESYSTEM_LIKE_LOGGING設定を使用すると、バックアップ操作中にディスク上でデータが変更され、バックアップの一貫性が損われる可能性があります。この状況を回避するには、LOB記憶域にLOGGINGを設定し、LOBセグメントに対する変更がREDOログ・ファイルに保存されるようにします。または、データベースをFORCE LOGGINGモードに変更し、すべてのLOBセグメントに対する変更がREDOログ・ファイルに保存されるようにします。

ロギング属性を指定しているオブジェクトが強制ロギング・モードのデータベースまたは表領域に存在している場合、そのデータベースまたは表領域が強制ロギング・モードから別のモードに変わるまで、NOLOGGING設定は無視されます。

データベースをARCHIVELOGモードで実行している場合、LOGGING操作の前に取ったバックアップからのメディア・リカバリによって、オブジェクトが再作成されます。ただし、NOLOGGING操作の前に取ったバックアップからのメディア・リカバリでは、オブジェクトは再作成されません。

NOLOGGINGモードでの操作で生成されるREDOログのサイズは、LOGGINGモードで生成されるログより非常に小さくなります。

NOLOGGINGモードでは、データの変更時に、(新しいエクステントをINVALIDとしてマーク設定し、ディクショナリの変更を記録するために)最小限のログが記録されます。メディア・リカバリ中にNOLOGGINGが適用された場合、REDOデータのログ記録が中断されるため、エクステント無効化レコードでは、一定のブロック範囲に「論理的に無効」というマークが付きます。このため、損失してはならないデータベース・オブジェクトの場合は、NOLOGGING操作の後にバックアップを取る必要があります。

NOLOGGINGは、LOGGINGをサポートする場所のサブセットのみでサポートされます。次の操作でのみ、NOLOGGINGモードがサポートされます。

DML:

- INSERT文またはMERGE文のいずれかの結果として実行されるダイレクト・パスINSERT(シリアルまたはパラレル)。NOLOGGINGは、MERGE文の結果として実行されるUPDATE操作には適用できません。

- ダイレクト・ローダー(SQL*Loader)

DDL:

- CREATE TABLE ... AS SELECT(NOLOGGINGモードでは、表の作成は記録されますが、ダイレクト・パス・インサートは記録されません。)

- CREATE TABLE ... LOB_storage_clause ... LOB_parameters ... CACHE | NOCACHE | CACHE READS

- ALTER TABLE ... LOB_storage_clause ... LOB_parameters ... CACHE | NOCACHE | CACHE READS(新しく作成したLOB列のロギングを指定する場合)

- ALTER TABLE ... modify_LOB_storage_clause ... modify_LOB_parameters ... CACHE | NOCACHE | CACHE READS(既存のLOB列のロギングを変更する場合)

- ALTER TABLE ... MOVE

- ALTER TABLE ... (データ移動を伴うすべてのパーティション操作)

- ALTER TABLE ... ADD PARTITION(ハッシュ・パーティションのみ)

- ALTER TABLE ... MERGE PARTITIONS

- ALTER TABLE ... SPLIT PARTITION

- ALTER TABLE ... MOVE PARTITION

- ALTER TABLE ... MODIFY PARTITION ... ADD SUBPARTITION

- ALTER TABLE ... MODIFY PARTITION ... COALESCE SUBPARTITION

- CREATE INDEX

- ALTER INDEX ... REBUILD

- ALTER INDEX ... REBUILD [SUB]PARTITION

- ALTER INDEX ... SPLIT PARTITION

LOB以外のオブジェクトの場合、この句を指定しないと、オブジェクトが存在する表領域のロギング属性がオブジェクトのデフォルトのロギング属性になります。

LOBに対してこの句を省略した場合は、次のようになります。

- CACHEを指定した場合は、LOGGINGが使用されます(CACHE NOLOGGINGは指定できないため)。

- NOCACHEまたはCACHE READSを指定した場合は、表が存在する表領域の属性がデフォルトのロギング属性として使用されます。

NOLOGGINGは、内部に(行データとともに表に)格納されたLOBには適用されません。LOBに対するNOLOGGINGを4000バイト未満の値に指定し、STORAGE IN ROWを使用禁止にしていなかった場合、NOLOGGINGの指定は無視され、LOBデータは他の表データと同様に扱われます。

parallel_clause

用途

parallel_clauseを使用すると、データベース・オブジェクト作成のパラレル化、およびその後のオブジェクトに対する問合せのデフォルトの並列度と、オブジェクトに対するDML操作の設定が可能になります。

parallel_clauseは次の文に指定できます。

- CREATE TABLE: 表のパラレル化を設定する場合(「CREATE TABLE」を参照)。

- ALTER TABLE(「ALTER TABLE」を参照)

- 表のパラレル化を変更する場合

- 表パーティションの追加、結合、交換、マージ、分割、切捨て、削除または移動の操作をパラレル化する場合

- CREATE CLUSTERおよびALTER CLUSTER: クラスタのパラレル化を設定または変更する場合(「CREATE CLUSTER」および「ALTER CLUSTER」を参照)。

- CREATE INDEX: 索引のパラレル化を設定する場合(「CREATE INDEX」を参照)。

- ALTER INDEX(「ALTER INDEX」を参照)

- 索引のパラレル化を変更する場合

- 索引の再構築または索引パーティションの分割をパラレル化する場合

- CREATE MATERIALIZED VIEW: マテリアライズド・ビューのパラレル化を設定する場合(「CREATE MATERIALIZED VIEW」を参照)。

- ALTER MATERIALIZED VIEW(「ALTER MATERIALIZED VIEW」を参照)

- マテリアライズド・ビューのパラレル化を変更する場合

- マテリアライズド・ビュー・パーティションの追加、結合、交換、マージ、分割、切捨て、削除または移動の操作をパラレル化する場合

- マテリアライズド・ビュー・サブパーティションの追加または移動の操作をパラレル化する場合

- CREATE MATERIALIZED VIEW LOG: マテリアライズド・ビュー・ログのパラレル化を設定する場合(「CREATE MATERIALIZED VIEW LOG」を参照)。

- ALTER MATERIALIZED VIEW LOG(「ALTER MATERIALIZED VIEW LOG」を参照)

- マテリアライズド・ビュー・ログのパラレル化を変更する場合

- マテリアライズド・ビュー・ログ・パーティションの追加、結合、交換、マージ、分割、切捨て、削除または移動の操作をパラレル化する場合

- ALTER DATABASE ... RECOVER: データベースをリカバリする場合(「ALTER DATABASE」を参照)。

- ALTER DATABASE ... standby_database_clauses: スタンバイ・データベースに対する操作をパラレル化する場合(「ALTER DATABASE」を参照)。

関連項目:
DBMS_PARALLEL_EXECUTEパッケージ(行のチャンクの変更を表に適用するメソッドを含むパッケージ)の詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。エラーがない場合は、各チャンクに対する変更が個別にコミットされます。

構文

parallel_clause::=

セマンティクス

この項では、parallel_clauseのセマンティクスについて説明します。詳細は、特定のデータベース・オブジェクトまたは操作に対してパラレル化を設定または再設定するSQL文の説明を参照してください。

注意:
parallel_clause構文は、以前のリリースの構文にかわるものです。以前のリリースの構文は下位互換用にサポートされていますが、動作がわずかに異なることがあります。

parallel_clauseは、PARALLEL_DEGREE_POLICY初期化パラメータの設定に基づいて解釈されます。この初期化パラメータがAUTOに設定されている場合、parallel_clauseは完全に無視され、オプティマイザによってすべての文に対して最適な並列度が決定されます。PARALLEL_DEGREE_POLICYがMANUALまたはLIMITEDのいずれかに設定されている場合、parallel_clauseは次のように解釈されます。

NOPARALLEL NOPARALLELを指定すると、シリアル実行が行われます。これはデフォルトです。

PARALLEL PARALLELを指定すると、パラレル実行が行われます。

- PARALLEL_DEGREE_POLICYがMANUALに設定されている場合は、オプティマイザによって並列度が計算されます。並列度は、すべての関係するインスタンスで使用可能なCPUの数に、初期化パラメータPARALLEL_THREADS_PER_CPUの値を掛けたものです。

- PARALLEL_DEGREE_POLICYがLIMITEDに設定されている場合は、オプティマイザによって最適な並列度が決定されます。

PARALLEL integer integerには、パラレル操作で使用するパラレル・スレッド数である並列度を指定します。各パラレル・スレッドは、1、2個のパラレル実行サーバーを使用します。

parallel_clauseの注意事項: parallel_clauseには、次の注意事項があります。

- トリガーまたは参照整合性制約を定義した表に対するDML操作では、パラレル化を使用できません。

- 索引構成表でのUPDATEまたはDELETE操作に対して、パラレル化はサポートされません。

- 表の作成中にparallel_clauseを指定する際に、表にLOB型またはユーザー定義オブジェクト型の列が含まれている場合、このLOB型またはオブジェクト型の列を変更する後続のINSERT、UPDATE、DELETEおよびMERGE操作は、通知なしにシリアル実行されます。ただし、後続の問合せはパラレルで実行されます。

- parallel_clauseの効果はパラレル・ヒントによって上書きされます。

- リモート・オブジェクトを参照するDML文およびCREATE TABLE ... AS SELECT文は、パラレルで実行されます。ただし、リモート・オブジェクトはリモート・データベースにある必要があります。参照は、ローカル・データベースにあるオブジェクトにループバックできません。たとえば、ローカル・データベースのオブジェクトを指定するリモート・データベースのシノニムから参照することはできません。

- LOB列を含む表でのDML操作はパラレル化できます。ただし、パーティション内並列性はサポートされていません。

関連項目:
パラレル化操作の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。また「表の作成: パラレル化の例」も参照してください。

physical_attributes_clause

用途

physical_attributes_clauseを使用すると、PCTFREE、PCTUSEDおよびINITRANSパラメータの値、および表、クラスタ、索引またはマテリアライズド・ビューの記憶特性を指定できます。

physical_attributes_clauseは次の文に指定できます。

- CREATE CLUSTERおよびALTER CLUSTER: クラスタおよびクラスタ内のすべての表の物理属性を設定または変更する場合(「CREATE CLUSTER」および「ALTER CLUSTER」を参照)。

- CREATE TABLE: 表、表パーティション、オブジェクト表のOIDINDEXまたは索引構成表のオーバーフロー・セグメントの物理属性を設定する場合(「CREATE TABLE」を参照)。

- ALTER TABLE: 表の物理属性、将来追加される表パーティションのデフォルトの物理属性、または既存の表パーティションの物理属性を変更する場合(「ALTER TABLE」を参照)。次の制限があります。

- 物理属性は、一時表には指定できません。

- 物理属性は、クラスタ化表には指定できません。クラスタ内の表はクラスタの物理属性を継承します。

- CREATE INDEX: 索引または索引パーティションの物理属性を設定する場合(「CREATE INDEX」を参照)。

- ALTER INDEX: 索引の物理属性、将来追加される索引パーティションのデフォルトの物理属性、または既存の索引パーティションの物理属性を変更する場合(「ALTER INDEX」を参照)

- CREATE MATERIALIZED VIEW: マテリアライズド・ビュー、そのパーティションの1つ、またはマテリアライズド・ビューを保持するために生成される索引の物理属性を設定する場合(「CREATE MATERIALIZED VIEW」を参照)。

- ALTER MATERIALIZED VIEW: マテリアライズド・ビューの物理属性、将来追加されるパーティションのデフォルトの物理属性、および既存のパーティション、またはマテリアライズド・ビューを保持するために作成される索引の物理属性を変更する場合(「ALTER MATERIALIZED VIEW」を参照)。

- CREATE MATERIALIZED VIEW LOGおよびALTER MATERIALIZED VIEW LOG: マテリアライズド・ビュー・ログの物理属性を設定または変更する場合(「CREATE MATERIALIZED VIEW LOG」および「ALTER MATERIALIZED VIEW LOG」を参照)。

構文

physical_attributes_clause::=

(storage_clause::=を参照)

セマンティクス

この項では、physical_attributes_clauseのパラメータについて説明します。詳細は、特定のデータベース・オブジェクトに対してこれらのパラメータを設定または再設定するSQL文の説明を参照してください。

PCTFREE integer

データベース・オブジェクトの各データ・ブロック内で、オブジェクトの行を将来更新するために確保しておく領域の割合を表す整数値を指定します。PCTFREEの値は、0から99の値にする必要があります。値に0を指定した場合は、ブロック全体が一杯になるまで新しい行を挿入できます。デフォルト値は10です。10を指定した場合、既存の行に対して行われる更新用に各ブロックの10%が確保されるため、各ブロックでは最大90%まで表に新しい行を挿入できます。

PCTFREEは、表、パーティション、クラスタ、索引、マテリアライズド・ビュー、マテリアライズド・ビュー・ログおよびゾーン・マップを作成および変更する文の中で同様に機能します。PCTFREEとPCTUSEDの組合せによって、新しい行を既存のデータ・ブロックと新しいデータ・ブロックのどちらに挿入するかが決まります。「PCTFREEとPCTUSEDの連携」を参照してください。

PCTFREE句の制限事項: 索引を変更する場合、このパラメータは、modify_index_default_attrs句およびsplit_index_partitionにのみ指定できます。

PCTUSED integer

使用済領域のうち、データベース・オブジェクトのデータ・ブロックごとに確保される最小限の割合を表す整数値を指定します。PCTUSEDは0から99までの正の整数で指定し、デフォルト値は40です。

PCTUSEDは、表、パーティション、クラスタ、マテリアライズド・ビュー、マテリアライズド・ビュー・ログおよびゾーン・マップを作成および変更する文の中で同様に機能します。

PCTUSEDは、索引構成表には無効な表記憶特性です。

PCTFREEおよびPCTUSEDの合計は100以下である必要があります。PCTFREEとPCTUSEDをともに使用して、データベース・オブジェクト内の領域を効果的に利用できます。「PCTFREEとPCTUSEDの連携」を参照してください。

PCTUSED句の制限事項: PCTUSEDパラメータには、次の制限事項があります。

- このパラメータは、索引または索引構成表の索引セグメントには指定できません。

- このパラメータは、自動セグメント領域管理のオブジェクトに対しては有効ではなく、無視されます。

関連項目:
PCTUSEDおよびPCTFREEの各値によるパフォーマンスへの効果については『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。自動セグメント領域管理については「CREATE TABLESPACE」の「segment_management_clause」を参照してください。

PCTFREEとPCTUSEDの連携

新しく割り当てられたデータ・ブロックでは、挿入に使用できる領域は、ブロック・サイズからブロック・オーバーヘッドと空き領域(PCTFREE)の合計を引いたものになります。既存のデータを更新する場合は、ブロック内の任意の利用可能な領域を使用できます。このため、更新によってブロックの利用可能な領域がPCTFREEより小さくなる可能性があります。

データ・ブロックがPCTFREEによって決定された制限に達すると、そのブロックの割合(パーセント)がパラメータPCTUSEDを下回るまで、ブロックに新しい行は挿入はできないとOracle Databaseによって判断されます。この値になるまで、Oracle Databaseでは、データ・ブロックにすでに含まれている行の更新にのみデータ・ブロックの空き領域が使用されます。ブロックは、使用済領域がPCTUSEDの値を下回ると、行挿入の対象となります。

関連項目:
PCTUSEDおよびPCTFREEによる空きリストのセグメント領域管理処理の詳細は、「FREELISTS」を参照してください。

INITRANS integer

データベース・オブジェクトに割り当てられた各データ・ブロックに割り当てられる、同時実行トランザクション・エントリの初期数を指定します。この値の範囲は1から255で、デフォルト値は1ですが、次の例外があります。

- クラスタのINITRANSのデフォルト値は、クラスタが存在する表領域のINITRANSのデフォルト値と2のいずれか大きい方の値です。

- 索引のデフォルト値は2です。

通常、INITRANS値は、変更せずにデフォルトのまま使用してください。

ブロックを更新するトランザクションごとに、ブロックのトランザクション・エントリが必要です。このパラメータを指定した場合、最小数の同時実行トランザクションでブロックを更新できます。さらに、トランザクション・エントリを動的に割り当てるときのオーバーヘッドを回避できます。

INITRANSパラメータは、表、パーティション、クラスタ、索引、マテリアライズド・ビューおよびマテリアライズド・ビュー・ログを作成および変更する文の中で同様に機能します。

MAXTRANSパラメータ

MAXTRANSは、セグメント内の各データ・ブロックで実行可能な同時実行更新トランザクションの最大数を決定する以前のリリースのパラメータです。このパラメータは現在非推奨になっています。今回のリリースでは、Oracleは、ブロック内の未使用領域に応じて、任意のデータ・ブロックに対して最大255の同時実行更新トランザクションを自動的に許可します。

MAXTRANS値が設定された既存のオブジェクトは、その設定を保持します。ただし、MAXTRANS値を変更しようとすると、新しい指定は無視され、エラーを戻さずに値は255に置き換えられます。

storage_clause

storage_clauseによって、表、オブジェクト表OIDINDEX、パーティション、LOBデータ・セグメントまたは索引構成表のオーバーフロー・データ・セグメントの記憶特性を指定できます。この句は、大規模な表のパフォーマンスに影響します。記憶域は、追加領域の動的割当てを最小限に抑えるように割り当てられます。詳細は、「storage_clause」を参照してください。

size_clause

用途

size_clauseを使用すると、すべての文にバイト、KB(K)、MB(M)、GB(G)、TB(T)、PB(P)、EB(E)の各単位でバイト数を指定して、ディスク容量またはメモリー容量を設定できます。

構文

size_clause::=

セマンティクス

size_clauseを使用すると、バイト数を様々な単位で指定できます。単位の略語を指定しない場合、integerはバイト単位で解釈されます。

注意:
バイトのすべての単位が常に適切であるとはかぎりません。状況依存の制限が適用されます。後者の場合、Oracleはエラー・メッセージを発行します。

storage_clause

用途

storage_clauseを使用すると、Oracle Databaseによる永続的なデータベース・オブジェクトの格納方法を指定できます。一時セグメントの記憶域パラメータでは、常に、関連付けられた表領域のデフォルトの記憶域パラメータが使用されます。記憶域パラメータは、データベースのデータへのアクセス時間およびデータベース内での領域の効率的な利用に影響します。

関連項目:
記憶域パラメータの影響の詳細は、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

クラスタ、索引、マテリアライズド・ビュー、マテリアライズド・ビュー・ログ、ロールバック・セグメント、表、LOB、VARRAY、ネストした表またはパーティションを作成する場合、これらのオブジェクトに割り当てられるセグメントに、記憶域パラメータの値を指定できます。記憶域パラメータを指定しない場合、オブジェクトが存在する表領域に指定されている記憶域パラメータの値が使用されます。表領域に対して値を指定しなかった場合、データベースによってデフォルト値が使用されます。

注意:
ローカル管理表領域内のオブジェクトへの記憶域パラメータの指定は、下位互換性のためにサポートされています。ローカル管理表領域を使用している場合、ローカル管理表領域にオブジェクトを作成する際にこれらの記憶域パラメータを省略できます。

クラスタ、索引、マテリアライズド・ビュー、マテリアライズド・ビュー・ログ、ロールバック・セグメント、表、VARRAY、ネストした表またはパーティションを変更する場合、記憶域パラメータの値を変更できます。この値の変更は、それ以降のエクステントの割当てにのみ影響します。

storage_clauseはphysical_attributes_clauseの一部であるため、この句は、物理属性句を指定できる任意の文に指定できます(「physical_attributes_clause」を参照)。storage_clauseは次の文にも指定できます。

- CREATE CLUSTERおよびALTER CLUSTER: クラスタおよびクラスタ内のすべての表の記憶特性を設定または変更する場合(「CREATE CLUSTER」および「ALTER CLUSTER」を参照)。

- CREATE INDEXおよびALTER INDEX: 表索引または索引パーティションに対して作成された索引セグメントまたは主キー制約または一意制約を適用するために使用される索引に対して作成された索引セグメントの記憶特性を設定または変更する場合(「CREATE INDEX」および「ALTER INDEX」を参照)。

- CREATE TABLEまたはALTER TABLEのENABLE ... USING INDEX句: 主キー制約または一意制約を適用するためにシステムによって作成された索引の記憶特性を設定または変更する場合。

- CREATE MATERIALIZED VIEWおよびALTER MATERIALIZED VIEW: マテリアライズド・ビュー、そのパーティションの1つ、またはマテリアライズド・ビューを保持するために生成される索引の記憶特性を設定または変更する場合(「CREATE MATERIALIZED VIEW」および「ALTER MATERIALIZED VIEW」を参照)。

- CREATE MATERIALIZED VIEW LOGおよびALTER MATERIALIZED VIEW LOG: マテリアライズド・ビュー・ログの記憶特性を設定または変更する場合(「CREATE MATERIALIZED VIEW LOG」および「ALTER MATERIALIZED VIEW LOG」を参照)。

- CREATE ROLLBACK SEGMENTおよびALTER ROLLBACK SEGMENT: ロールバック・セグメントの記憶特性を設定または変更する場合(「CREATE ROLLBACK SEGMENT」および「ALTER ROLLBACK SEGMENT」を参照)。

- CREATE TABLEおよびALTER TABLE: クラスタ化されていない表またはそのパーティションまたはサブパーティションの1つのLOBまたはVARRAYデータ・セグメント、またはネストした表の記憶表の記憶特性を設定する場合(「CREATE TABLE」および「ALTER TABLE」を参照)。

- CREATE TABLESPACEおよびALTER TABLESPACE: 表領域に作成されたすべてのオブジェクトに対するデフォルトの記憶特性を設定または変更する場合(「CREATE TABLESPACE」および「ALTER TABLESPACE」を参照)。表領域の記憶域パラメータに対する変更は、表領域に作成される新しいオブジェクトまたはセグメントに割り当てられる新しいエクステントにのみ影響します。

- constraint: 制約の適用に使用される索引(パーティション索引の場合は索引のパーティション)の記憶域を指定する場合(「constraint」を参照)。

前提条件

STORAGEパラメータの値を変更する場合は、適切なCREATE文またはALTER文を使用するための権限が必要です。

構文

storage_clause::=

(size_clause::=を参照)

maxsize_clause::=

(size_clause::=を参照)

セマンティクス

この項では、storage_clauseのパラメータについて説明します。詳細は、特定のデータベース・オブジェクトに対してこれらの記憶域パラメータを設定または再設定するSQL文の説明を参照してください。

注意:
ローカル管理表領域の場合、storage_clauseの解析方法は異なります。ローカル管理表領域の場合、Oracle Databaseでは、オブジェクトの最初の作成時に割り当てられるエクステント数を計算するために、INITIAL、NEXT、PCTINCREASEおよびMINEXTENTSが使用されます。オブジェクトの作成後、これらのパラメータは無視されます。詳細は、「CREATE TABLESPACE」を参照してください。

関連項目:
「表の記憶域属性の指定例」

INITIAL

オブジェクトの第1エクステントのサイズを指定します。スキーマ・オブジェクトの作成時に、このエクステントに領域が割り当てられます。この句の詳細は、「size_clause」を参照してください。

ローカル管理表領域では、初期セグメント・サイズを決定するために、INITIALの値が、ローカル管理の種類(AUTOALLOCATEまたはUNIFORM)と、MINEXTENTS、NEXTおよびPCTINCREASEの値とともに使用されます。

- AUTOALLOCATEエクステント管理の場合、INITIAL設定を使用して、割り当てられるエクステント数を最適化します。エクステントには、64K、1M、8Mおよび64Mのサイズを割り当てることができます。セグメントの作成時に、これらの4つのサイズのうちINITIAL以下で最大のものがシステムによって選択され、そのサイズのエクステントがINITIAL設定に達するのに必要な数だけ割り当てられます。たとえば、INITIALを4Mに設定すると、1Mのエクステントが4つ作成されます。

- UNIFORMエクステント管理の場合、エクステント数は、初期セグメント・サイズと表領域作成時に指定した均一エクステント・サイズで決定されます。たとえば、エクステントが1Mの均一なローカル管理表領域の場合、INITIALの値を5Mに指定すると、1Mのエクステントが5つ作成されます。
次の例を比較してみます。AUTOALLOCATEの場合、INITALを72Kに設定すると、初期セグメント・サイズは128K(INITIALを超えるサイズ)になります。64Kより小さいエクステントを割り当てることはできないため、必然的に64Kのエクステントが2つ割り当てられます。INITIALを72Kに設定し、24KのUNIFORMエクステント・サイズを使用する場合は、24Kのエクステント3つが割り当てられるため、72Kに等しくなります。

ディクショナリ管理表領域では、デフォルトの初期エクステント・サイズは5ブロックであり、後続のすべてのエクステントは5ブロックに丸められます。表領域作成時にMINIMUM EXTENTが指定された場合、エクステント・サイズはMINIMUM EXTENTの値に丸められます。

INITIALの制限事項: ALTER文では、INITIALを指定できません。

NEXT

オブジェクトに割り当てる次のエクステント・サイズをバイト単位で指定します。この句の詳細は、「size_clause」を参照してください。

ローカル管理表領域では、ユーザー指定のNEXTの値はすべて無視され、表領域が自動割当てエクステント管理用に設定されている場合、NEXTのサイズはOracleによって決定されます。UNIFORM表領域では、NEXTのサイズは表領域作成時に指定された均一エクステント・サイズです。

ディクショナリ管理表領域では、デフォルトのサイズは5データ・ブロックです。最小のサイズは1データ・ブロックです。最大値は、ご使用のオペレーティング・システムによって異なります。5データ・ブロックより小さい値が指定された場合、データ・ブロック・サイズの一番近い倍数に丸められます。5データ・ブロックを超える値の場合は、断片化を最小限に抑える値に切り上げられます。

関連項目:
断片化の最小化の詳細は、『Oracle Database概要』を参照してください。

PCTINCREASE

ローカル管理表領域では、初期セグメント・サイズを決定するためにセグメント作成時にPCTINCREASEの値が使用され、その後の領域割当て時にはこのパラメータは無視されます。

ディクショナリ管理表領域では、3番目以降の各エクステントが直前のエクステントに対して増加する割合(パーセント)を指定します。デフォルト値は50です。この場合、3番目以降のエクステントは、それぞれその直前のエクステントより50%ずつ大きくなります。最小値は0で、この場合、第2エクステント以降のエクステントのサイズはすべて同じになります。最大値は、ご使用のオペレーティング・システムによって異なります。計算された各新規エクステントのサイズは、データ・ブロック・サイズの一番近い倍数に丸められます。ALTER文にPCTINCREASEパラメータの値を指定してこの値を変更すると、この変更した値と直前に割り当てられたエクステントのサイズを使用して、次に割り当てるエクステントのサイズが計算されます。

PCTINCREASEの制限事項: ロールバック・セグメントにPCTINCREASEは指定できません。ロールバック・セグメントでは、PCTINCREASEの値は常に0(ゼロ)です。

MINEXTENTS

ローカル管理表領域では、初期セグメント・サイズを決定するために、MINEXTENTSの値がPCTINCREASE、INITIALおよびNEXTの値とともに使用されます。

ディクショナリ管理表領域では、オブジェクトの作成時に割り当てられる合計エクステント数を指定します。最小値(デフォルト)は1です。この場合、第1エクステントのみが割り当てられます。ただし、ロールバック・セグメントの場合、最小値(デフォルト)は2です。最大値は、ご使用のオペレーティング・システムによって異なります。

- ローカル管理表領域では、領域の初期割当て量を計算するためにMINEXTENTSが使用されます。INITIAL * MINEXTENTSで算出されます。その後、この値は1に設定され、DBA_SEGMENTSビューに反映されます。

- ディクショナリ管理表領域では、MINEXTENTSは単純に、セグメントに割り当てる必要があるエクステントの最小数です。

MINEXTENTSの値が1より大きい場合、INITIAL、NEXTおよびPCTINCREASE記憶域パラメータの値に基づいて、次のエクステントのサイズが計算されます。

ALTER文にMINEXTENTSの値を指定して変更する際は、現行の値より小さくすることはできますが、大きくすることはできません。MINEXTENTSをより小さい値に再設定すると便利な場合があります。たとえば、TRUNCATE ... DROP STORAGE文の前で、TRUNCATE操作の後もセグメントがエクステントの最小数を変更しない場合です。

MINEXTENTSの制限事項: MINEXTENTS記憶域パラメータには、次の制限事項があります。

- MINEXTENTSは、表領域レベルでは適用できません。

- ALTER文のMINEXTENTSの値、またはローカル管理表領域に存在するオブジェクトに対するMINEXTENTSの値は変更できません。

MAXEXTENTS

この記憶域パラメータは、ディクショナリ管理表領域のオブジェクトに対してのみ有効です。第1エクステントを含めて、Oracleがオブジェクトに割り当てることができるエクステントの総数を指定します。最小値は1です(最小値が常に2のロールバック・セグメントは除きます)。デフォルト値は、データ・ブロックのサイズによって異なります。

MAXEXTENTSの制限事項 MAXEXTENTSは、ローカル管理表領域に存在するオブジェクトに対しては無視されます。ただし、DBA_TABLESPACESデータ・ディクショナリ・ビューの表領域に対し、ALLOCATION_TYPEの値がUSERである場合を除きます。

関連項目:
DBA_TABLESPACESデータ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

UNLIMITED 必要に応じてエクステントが自動的に割り当てられるようにする場合に、UNLIMITEDを指定します。断片化を最小限に抑えるため、この設定をお薦めします。

ロールバック・セグメントにこの句は使用しないでください。この句をロールバック・セグメントに使用すると、長時間実行される特殊なDMLトランザクションによって、ディスクが一杯になるまで新しいエクステントが作成され続ける可能性があります。

注意:
storage_clauseを指定せずに作成したロールバック・セグメントは、ロールバック・セグメントを作成した表領域の記憶域パラメータと同じ設定になります。MAXEXTENTS UNLIMITEDを指定して表領域を作成する場合、ロールバック・セグメントのデフォルトは同じ設定になります。

MAXSIZE

MAXSIZE句を使用すると、記憶域要素の最大サイズを指定できます。LOB記憶域では、MAXSIZEを使用すると、次のようになります。

- LOB_parametersにRETENTION MAXを指定すると、指定されたサイズにLOBセグメントが拡張され、その後、UNDO領域から任意の領域を再利用できます。

- LOB_parametersにRETENTION AUTO、MINまたはNONEを指定すると、指定されたサイズはLOBセグメントのサイズの上限値となり、UNDOの保持においてその指定の影響はありません。

UNLIMITED 記憶域要素のディスク領域を制限しない場合は、UNLIMITED句を使用します。この句は、LOB_parametersでのRETENTION MAXの指定と同時には指定できません。両方を指定すると、RETENTION AUTOおよびMAXSIZE UNLIMITEDが使用されます。

FREELISTS

セグメントを手動で領域管理する表領域の場合、セグメント内の挿入ポイント数を増やしてOLTPシステムの領域管理のパフォーマンスを向上させるために、FREELISTS記憶域パラメータが使用されます。セグメントを自動的に領域管理する表領域の場合、変化するワークロードにデータベースが適応するため、このパラメータは無視されます。

セグメントを手動で領域管理する表領域の場合、表領域およびロールバック・セグメント以外のオブジェクトに対して、表、パーティション、クラスタまたは索引の各空きリスト・グループの空きリスト数を指定します。このパラメータの最小値(デフォルト)は1です。この場合、空きリスト・グループごとに1つの空きリストが含まれます。最大値は、データ・ブロックのサイズによって異なります。FREELISTSに指定した値が大きすぎた場合、最大値を示すエラーが戻ります。

「LOB_parameters」のSECUREFILEパラメータを指定している場合、この句は無効です。SECUREFILEパラメータおよびFREELISTSの両方を指定した場合、FREELISTSの指定は無視されます。

FREELISTSの制限事項: 表領域またはロールバック・セグメントを作成または変更するとき以外は、すべての文のstorage_clauseにFREELISTSを指定できます。

FREELIST GROUPS

セグメントを手動で領域管理する表領域の場合、Oracle Real Application Clusters環境でセグメント空き領域を静的にパーティション化するために、この記憶域パラメータの値が使用されます。このパーティション化によって、セグメント・メタデータがインスタンス間で転送されなくなり、領域の割当ておよび割当て解除のパフォーマンスが向上します。セグメントを自動的に領域管理する表領域の場合、インスタンス間ワークロードにOracleが動的に適応するため、このパラメータは無視されます。

セグメントを手動で領域管理する表領域の場合、作成するデータベース・オブジェクトに対する空きリスト・グループ数を指定します。このパラメータの最小値(デフォルト)は1です。Oracleは、Oracle Real Application Clusters(Oracle RAC)インスタンスのインスタンス番号を使用して、各インスタンスを空きリスト・グループにマップします。

1つの空きリスト・グループに、それぞれデータベース・ブロックを1つずつ使用します。したがって、次のことがいえます。

- 各空きリスト・グループの最小値に、1データ・ブロックを加えた値を格納できるだけの十分な大きさの値をINITIALの値に指定していない場合、INITIALの値は必要な分だけ引き上げられます。

- 均一なローカル管理表領域にオブジェクトを作成する場合、空きリスト・グループ数に適応するだけの十分なエクステント・サイズがないと、作成操作は正常に実行されません。

「LOB_parameters」のSECUREFILEパラメータを指定している場合、この句は無効です。SECUREFILEパラメータおよびFREELIST GROUPSの両方を指定した場合、FREELIST GROUPSの指定は無視されます。

FREELIST GROUPSの制限事項: FREELIST GROUPSパラメータは、CREATE TABLE、CREATE CLUSTER、CREATE MATERIALIZED VIEW、CREATE MATERIALIZED VIEW LOGおよびCREATE INDEX文でのみ指定できます。

OPTIMAL

OPTIMALキーワードは、ロールバック・セグメントのみに指定します。ロールバック・セグメントの最適なサイズをバイト単位で指定します。この句の詳細は、「size_clause」を参照してください。

エクステントのデータがアクティブ・トランザクションで不要になった場合、Oracleは、そのエクステントの割当てを動的に解除することによって、指定されたロールバック・セグメントのサイズを維持します。ロールバック・セグメントのサイズの合計をOPTIMAL値より小さくせずに、できるだけ多くのエクステントの割当てを解除します。

OPTIMALには、MINEXTENTS、INITIAL、NEXTおよびPCTINCREASEパラメータで最初に割り当てた領域より小さい値を指定できません。最大値は、ご使用のオペレーティング・システムによって異なります。値は、データ・ブロック・サイズの一番近い倍数に丸められます。

NULL ロールバック・セグメントに対する最適なサイズがないことを示す場合にNULLを指定します。これは、ロールバック・セグメントのエクステントの割当てが解除されないことを示します。これはデフォルトの動作です。

BUFFER_POOL

BUFFER_POOL句では、スキーマ・オブジェクト用のデフォルトのバッファ・プール(キャッシュ)を定義します。オブジェクトのすべてのブロックは、指定されたキャッシュに格納されます。

- バッファ・プールがパーティション表またはパーティション索引用に定義されている場合は、パーティションは、パーティション・レベル定義で変更されないかぎり、表定義または索引定義のバッファ・プールを継承します。

- 索引構成表の場合、索引セグメントおよびオーバーフロー・セグメントに対して個々にバッファ・プールを指定できます。

BUFFER_POOLパラメータの制限事項: BUFFER_POOLには、次の制限事項があります。

- この句は、クラスタ化表には指定できません。ただし、クラスタには指定できます。

- この句は、表領域またはロールバック・セグメントには指定できません。

KEEP KEEPを指定すると、ブロックがセグメントからKEEPバッファ・プールへ移されます。KEEPバッファ・プールに適切なサイズを維持すると、メモリーのスキーマ・オブジェクトが保持され、I/O操作を避けることができます。KEEPは、表、クラスタ、マテリアライズド・ビューまたはマテリアライズド・ビュー・ログに指定するNOCACHE句より優先されます。

RECYCLE RECYCLEを指定すると、ブロックがセグメントからRECYCLEプールへ移されます。RECYCLEプールに適切なサイズを指定すると、不要なキャッシュ領域が利用されず、デフォルト・プールがRECYCLEプールであるオブジェクト数が削減されます。

DEFAULT デフォルトのバッファ・プールを識別する場合に、DEFAULTを指定します。これは、KEEPもRECYCLEも指定しないオブジェクトのデフォルトです。

関連項目:
複数のバッファ・プールの使用方法については、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。

FLASH_CACHE

FLASH_CACHE句を使用すると、自動バッファ・キャッシュ・ポリシーを上書きし、特定のスキーマ・オブジェクトをフラッシュ・メモリーにキャッシュする方法を指定できます。この句を使用するには、システムでデータベース・スマート・フラッシュ・キャッシュ(フラッシュ・キャッシュ)が構成されている必要があります。フラッシュ・キャッシュは、フラッシュ・ディスク(フラッシュ・メモリーを使用するストレージ・デバイス)に格納されるデータベース・バッファ・キャッシュの拡張機能です。フラッシュ・メモリーは磁気ディスクよりも高速であるため、データベースは、磁気ディスクから読み込むかわりに、フラッシュ・キャッシュにバッファをキャッシュすることによってパフォーマンスを向上させることができます。

KEEP フラッシュ・キャッシュの大きさが十分にあり、スキーマ・オブジェクト・バッファを引き続きフラッシュ・キャッシュにキャッシュする場合は、KEEPを指定します。

NONE スキーマ・オブジェクト・バッファをフラッシュ・キャッシュにキャッシュしないようにする場合は、NONEを指定します。これにより、より頻繁にアクセスするオブジェクト用にフラッシュ・キャッシュ領域を確保できます。

DEFAULT メイン・メモリーからエージ・アウトされるときにスキーマ・オブジェクト・バッファをフラッシュ・キャッシュに書き込み、その後、標準のバッファ・キャッシュ置換アルゴリズムによりフラッシュ・キャッシュからエージ・アウトする場合は、DEFAULTを指定します。フラッシュ・キャッシュが構成されている場合に、KEEPまたはNONEを指定しないと、これがデフォルトになります。

注意:
データベース・スマート・フラッシュ・キャッシュは、SolarisおよびOracle Linux環境でのみ使用できます。

関連項目:

- データベース・スマート・フラッシュ・キャッシュの詳細は、『Oracle Database概要』を参照してください。

- データベース・スマート・フラッシュ・キャッシュの構成方法を確認するには、『Oracle Database管理者ガイド』を参照してください。

ENCRYPT

この句は、表領域を作成する場合にのみ有効です。表領域全体を暗号化するには、ENCRYPTを指定します。CREATE TABLESPACE文にENCRYPTION句を指定する必要もあります。

関連項目:
「CREATE TABLESPACE」の「ENCRYPTION句」を参照してください。

例

表の記憶域属性の指定例 次の文は、表の作成時に記憶域パラメータの値を指定します。

CREATE TABLE divisions
(div_no     NUMBER(2),
div_name   VARCHAR2(14),
location   VARCHAR2(13) )
STORAGE  ( INITIAL 8M MAXSIZE 1G );

STORAGEパラメータに指定した値に基づいて、次に示すとおり表に領域が割り当てられます。

- INITIALの値は8Mのため、第1エクステントのサイズは8MBになります。

- MAXSIZEの値は1Gのため、記憶域要素の最大サイズは1GBになります。

9 SQL問合せおよび副問合せ

この章では、SQL問合せおよび副問合せについて説明します。

この章では、次の内容を説明します。

- 問合せおよび副問合せ

- 単純な問合せの作成

- 階層問合せ

- UNION [ALL]、INTERSECTおよびMINUS演算子

- 問合せ結果のソート

- 結合

- 副問合せの使用方法

- ネストされた副問合せのネスト解除

- DUAL表からの選択

- 分散問合せ

問合せおよび副問合せ

問合せとは、1つ以上の表またはビューからデータを検索する操作のことです。このマニュアルでは、トップレベルのSELECT文を問合せといい、他のSQL文の中でネストされた問合せを副問合せといいます。

この項では、問合せおよび副問合せの種類およびその使用方法について説明します。この章では、トップレベルの構文について説明します。すべての句のすべての構文およびこの文のセマンティクスについては、「SELECT」を参照してください。

select::=

subquery::=

query_block::=

単純な問合せの作成

SELECTキーワードの後、FROM句の前にある式のリストを、SELECT構文のリストといいます。SELECT構文のリストに、1つ以上の表、ビューおよびマテリアライズド・ビューからOracle Databaseが戻す行に含まれる1つ以上の列を指定します。SELECT構文のリストの要素によって、列のデータ型、長さおよび数が決定されます。

複数の表に同じ名前の列がある場合、表の名前でその列名を修飾する必要があります。それ以外の場合は、完全に修飾した列名はオプションとなります。ただし、明示的に表および列の参照を修飾することをお薦めします。表および列名を完全に修飾することで、Oracleの作業が少なくなります。

列の別名c_aliasを使用して、SELECT構文のリストの直前の式にラベルを付けると、列が新しい見出し付きで表示されます。別名によって、問合せ中にSELECT構文のリストの項目名を効果的に変更できます。別名はORDER BY句の中で使用できますが、問合せ内のその他の句には使用できません。

Oracle Databaseのオプティマイザに指示(ヒント)を与えるために、SELECT文中でコメントを使用できます。オプティマイザは、これらのヒントを使用して文の実行計画を選択します。ヒントの詳細は、「ヒント」を参照してください。

階層問合せ

表に階層データが含まれる場合、階層問合せ句を使用して階層順に行を選択することができます。

hierarchical_query_clause::=

conditionには、第6章「条件」で説明した任意の条件を使用できます

START WITH句では、階層のルート行を指定します。

CONNECT BY句では、階層の親/子の行の関連を指定します。

- NOCYCLEパラメータは、データ内にCONNECT BYループが存在する場合でも問合せで行を戻すようにOracle Databaseに指示します。このパラメータをCONNECT_BY_ISCYCLE疑似列とともに使用すると、ループが含まれている行を確認できます。詳細は、「CONNECT_BY_ISCYCLE疑似列」を参照してください。

- 階層問合せでは、condition内の1つの式を、親である行を参照するためにPRIOR演算子で修飾する必要があります。次に例を示します。

... PRIOR expr = expr
or
... expr = PRIOR expr

CONNECT BY conditionが複合条件の場合、1つの条件のみにPRIOR演算子が必要です(複数のPRIOR条件を使用することもできます)。次に例を示します。

CONNECT BY last_name != 'King' AND PRIOR employee_id = manager_id ...
CONNECT BY PRIOR employee_id = manager_id and
PRIOR account_mgr_id = customer_id ...

PRIORは単項演算子であり、単項算術演算子の+および-と同じ優先順位を持っています。この演算子は、階層問合せ内でカレント行の親である行の直後にある式を評価します。

PRIORは、等価演算子を使用して列の値を比較する場合によく使用されます。(PRIORキーワードは演算子のどちら側でもかまいません。)PRIORを指定すると、列の親である行の値が使用されます。等号(=)以外の演算子は、理論上はCONNECT BY句に指定できます。ただし、これらの他の演算子の組合せによっては、作成される条件は無限ループを発生させる場合があります。この場合、実行時にループが検出され、エラーが戻されます。

CONNECT BY条件とPRIOR式は、いずれも相関関係のない副問合せの形式で指定できます。ただし、CURRVALおよびNEXTVALは、無効なPRIOR式であるため、PRIOR式は順序を参照できません。

CONNECT_BY_ROOT演算子を使用してSELECT構文のリスト内の列を問い合せることによって、階層問合せをさらに向上できます。この演算子は、親の行のみでなく、階層内のすべての祖先の行を戻すことによって、階層問合せのCONNECT BY [PRIOR]条件の機能を拡張します。

関連項目:
この演算子の詳細は、「CONNECT_BY_ROOT」および「階層問合せの例」を参照してください。

Oracleは次のように階層問合せを処理します。

- 最初に、結合(指定されている場合)が、FROM句で指定されているか、またはWHERE句述語で指定されているかが評価されます。

- CONNECT BY条件が評価されます。

- 残りのWHERE句述語が評価されます。

次に、Oracleはこれらの評価からの情報を使用して、次の手順で階層を形成します。

1. Oracleは、階層のルート行を選択します。これらの行は、START WITH条件を満たすものです。

2. Oracleは、各ルート行の子である行を選択します。子である各行は、1つのルート行に関してCONNECT BY条件を満たす必要があります。

3. Oracleは、子である行の連続生成を選択します。まず、手順2で戻された子である行を選択し、その行にある子を選択します(以降同様に続きます)。現在の親である行に関するCONNECT BY条件を評価することによって、常に子を選択します。

4. 問合せに結合を含まないWHERE句が含まれる場合、Oracleは、階層からWHERE句の条件を満たさないすべての行を排除します。条件を満たさない子である行をすべて排除するのではなく、各行に関してこの条件をそれぞれ評価します。

5. Oracleは、図9-1に示す順序で行を戻します。この図では、親である行の下に子である行が表示されます。階層ツリーの詳細は、図3-1「階層ツリー」を参照してください。

図9-1 階層問合せ

親である行に対する子を検索するために、Oracleは、親である行のCONNECT BY条件のPRIOR式、および各行の他の式を表の中で評価します。条件がTRUEとなる行が、その親である行の子です。CONNECT BY条件に、問合せによって選択された行をさらにフィルタ処理するための他の条件を含めることができます。

CONNECT BY条件が階層のループになった場合、Oracleはエラーを戻します。1つの行が別の行の親(または親の親または祖先)および子(または子の子または子孫)の場合、ループが発生します。

注意:
階層問合せでは、ORDER BYまたはGROUP BYを指定しないでください。指定すると、CONNECT BYの結果の階層順序が上書きされます。同じ親の兄弟である行を順序付ける場合は、ORDER SIBLINGS BY句を使用します。「order_by_clause」を参照してください。

階層問合せの例

CONNECT BY句の例 次の階層問合せは、CONNECT BYを使用して従業員とマネージャの関係を定義しています。

SELECT employee_id, last_name, manager_id
FROM employees
CONNECT BY PRIOR employee_id = manager_id;

EMPLOYEE_ID LAST_NAME                 MANAGER_ID
----------- ------------------------- ----------
101 Kochhar                          100
108 Greenberg                        101
109 Faviet                           108
110 Chen                             108
111 Sciarra                          108
112 Urman                            108
113 Popp                             108
200 Whalen                           101
203 Mavris                           101
204 Baer                             101
. . .

LEVELの例 次の例は、前述の例と似ていますが、LEVEL疑似列を使用して、親および子である行を表示しています。

SELECT employee_id, last_name, manager_id, LEVEL
FROM employees
CONNECT BY PRIOR employee_id = manager_id;

EMPLOYEE_ID LAST_NAME                 MANAGER_ID      LEVEL
----------- ------------------------- ---------- ----------
101 Kochhar                          100          1
108 Greenberg                        101          2
109 Faviet                           108          3
110 Chen                             108          3
111 Sciarra                          108          3
112 Urman                            108          3
113 Popp                             108          3
200 Whalen                           101          2
203 Mavris                           101          2
204 Baer                             101          2
205 Higgins                          101          2
206 Gietz                            205          3
102 De Haan                          100          1
...

START WITH句の例 次の例は、START WITH句を追加して階層にルート行を指定し、SIBLINGSキーワードを使用したORDER BY句を追加して階層の順序を保持しています。

SELECT last_name, employee_id, manager_id, LEVEL
FROM employees
START WITH employee_id = 100
CONNECT BY PRIOR employee_id = manager_id
ORDER SIBLINGS BY last_name;

LAST_NAME                 EMPLOYEE_ID MANAGER_ID      LEVEL
------------------------- ----------- ---------- ----------
King                              100                     1
Cambrault                         148        100          2
Bates                             172        148          3
Bloom                             169        148          3
Fox                               170        148          3
Kumar                             173        148          3
Ozer                              168        148          3
Smith                             171        148          3
De Haan                           102        100          2
Hunold                            103        102          3
Austin                            105        103          4
Ernst                             104        103          4
Lorentz                           107        103          4
Pataballa                         106        103          4
Errazuriz                         147        100          2
Ande                              166        147          3
Banda                             167        147          3
...

hr.employees表で、Steven Kingは会社の最高責任者であるため、マネージャはいません。彼の従業員には、部門80のマネージャであるJohn Russellがいます。employees表を更新してRussellをKingのマネージャとして設定する場合は、データ内にループを作成します。

UPDATE employees SET manager_id = 145
WHERE employee_id = 100;

SELECT last_name "Employee",
LEVEL, SYS_CONNECT_BY_PATH(last_name, '/') "Path"
FROM employees
WHERE level <= 3 AND department_id = 80
START WITH last_name = 'King'
CONNECT BY PRIOR employee_id = manager_id AND LEVEL <= 4;

ERROR:
ORA-01436: CONNECT BY loop in user data

CONNECT BY条件にNOCYCLEパラメータを指定すると、Oracleはループでも行を戻します。CONNECT_BY_ISCYCLE疑似列には、サイクルを含む行が表示されます。

SELECT last_name "Employee", CONNECT_BY_ISCYCLE "Cycle",
LEVEL, SYS_CONNECT_BY_PATH(last_name, '/') "Path"
FROM employees
WHERE level <= 3 AND department_id = 80
START WITH last_name = 'King'
CONNECT BY NOCYCLE PRIOR employee_id = manager_id AND LEVEL <= 4
ORDER BY "Employee", "Cycle", LEVEL, "Path";

Employee                       Cycle      LEVEL Path
------------------------- ---------- ---------- -------------------------
Abel                               0          3 /King/Zlotkey/Abel
Ande                               0          3 /King/Errazuriz/Ande
Banda                              0          3 /King/Errazuriz/Banda
Bates                              0          3 /King/Cambrault/Bates
Bernstein                          0          3 /King/Russell/Bernstein
Bloom                              0          3 /King/Cambrault/Bloom
Cambrault                          0          2 /King/Cambrault
Cambrault                          0          3 /King/Russell/Cambrault
Doran                              0          3 /King/Partners/Doran
Errazuriz                          0          2 /King/Errazuriz
Fox                                0          3 /King/Cambrault/Fox
...

CONNECT_BY_ISLEAFの例 次の文は、階層問合せを使用して、列の値をカンマで区切られたリストにする方法を示しています。

SELECT LTRIM(SYS_CONNECT_BY_PATH (warehouse_id,','),',') FROM
(SELECT ROWNUM r, warehouse_id FROM warehouses)
WHERE CONNECT_BY_ISLEAF = 1
START WITH r = 1
CONNECT BY r = PRIOR r + 1
ORDER BY warehouse_id;

LTRIM(SYS_CONNECT_BY_PATH(WAREHOUSE_ID,','),',')
--------------------------------------------------------------------------------
1,2,3,4,5,6,7,8,9

CONNECT_BY_ROOTの例 次の例では、部門110の各従業員の名字、階層内で各従業員の上に位置する最高レベルのマネージャ、マネージャと従業員との間のレベル数、および両者間のパスを戻します。

SELECT last_name "Employee", CONNECT_BY_ROOT last_name "Manager",
LEVEL-1 "Pathlen", SYS_CONNECT_BY_PATH(last_name, '/') "Path"
FROM employees
WHERE LEVEL > 1 and department_id = 110
CONNECT BY PRIOR employee_id = manager_id
ORDER BY "Employee", "Manager", "Pathlen", "Path";

Employee        Manager            Pathlen Path
--------------- --------------- ---------- ------------------------------
Gietz           Higgins                  1 /Higgins/Gietz
Gietz           King                     3 /King/Kochhar/Higgins/Gietz
Gietz           Kochhar                  2 /Kochhar/Higgins/Gietz
Higgins         King                     2 /King/Kochhar/Higgins
Higgins         Kochhar                  1 /Kochhar/Higgins

次の例では、GROUP BY句を使用して、部門110の各従業員と階層内でその従業員の上位に位置するすべての従業員の合計の給与を戻します。

SELECT name, SUM(salary) "Total_Salary" FROM (
SELECT CONNECT_BY_ROOT last_name as name, Salary
FROM employees
WHERE department_id = 110
CONNECT BY PRIOR employee_id = manager_id)
GROUP BY name
ORDER BY name, "Total_Salary";

NAME                      Total_Salary
------------------------- ------------
Gietz                             8300
Higgins                          20300
King                             20300
Kochhar                          20300

関連項目:

- 階層問合せでのこれらの疑似列の処理方法については、「LEVEL疑似列」および「CONNECT_BY_ISCYCLE疑似列」を参照してください。

- ルートからノードへの列の値のパスの検索については、「SYS_CONNECT_BY_PATH」を参照してください。

- ORDER BY句のSIBLINGSキーワードについては、「order_by_clause」を参照してください。

- subquery_factoring_clauseでは、再帰的副問合せのファクタリング(再帰的WITH)がサポートされ、これによって、階層データの問合せを行うことができます。この機能は、深さ優先検索および幅優先検索を提供し、複数の再帰的ブランチをサポートするという点において、CONNECT BYよりも強力です。

UNION [ALL]、INTERSECTおよびMINUS演算子

集合演算子UNION、UNION ALL、INTERSECTおよびMINUSを使用して、複数の問合せを組み合せることができます。集合演算子の優先順位はすべて同じです。SQL文に複数の集合演算子がある場合、カッコによって明示的に別の順序が指定されないかぎり、Oracle Databaseは左から右の順に評価します。

複合問合せを構成する各問合せと、それに対応するSELECT構文のリスト内の各式は、数値が一致し、データ型グループ(数値や文字など)が同じである必要があります。

集合演算子によって結合された2つの問合せが文字データを選択する場合、戻される値のデータ型は次のようにして決定されます。

- 両方の問合せが同じ長さのCHARデータ型の値を選択する場合、戻される値のデータ型はその長さのCHARになります。両方の問合せが異なる長さのCHARデータ型の値を選択する場合、戻される値は、長い方のCHAR値の長さを使用したVARCHAR2になります。

- 問合せのどちらか一方または両方が、VARCHAR2データ型の値を選択する場合、戻される値のデータ型はVARCHAR2になります。

集合演算子によって結合された2つの問合せが数値データを選択する場合、戻される値のデータ型は数値の優先順位によって決定されます。

- すべての問合せがBINARY_DOUBLE型の値を選択する場合、戻される値のデータ型はBINARY_DOUBLEになります。

- いずれの問合せもBINARY_DOUBLE型の値を選択せず、BINARY_FLOAT型の値を選択する場合、戻される値のデータ型はBINARY_FLOATになります。

- すべての問合せがNUMBER型の値を選択する場合、戻される値のデータ型はNUMBERになります。

集合演算子を使用する問合せでは、データ型グループ間の暗黙的な変換は行われません。そのため、複合問合せの対応する式が文字データと数値データの両方になる場合は、エラーが戻されます。

関連項目:
暗黙的な変換の詳細は、表2-10「暗黙的な型変換のマトリックス」を参照してください。数値の優先順位の詳細は、「数値の優先順位」を参照してください。

例 次の問合せは有効です。

SELECT 3 FROM DUAL
INTERSECT
SELECT 3f FROM DUAL;

この問合せは、次の複合問合せに暗黙的に変換されます。

SELECT TO_BINARY_FLOAT(3) FROM DUAL
INTERSECT
SELECT 3f FROM DUAL;

次の問合せはエラーを戻します。

SELECT '3' FROM DUAL
INTERSECT
SELECT 3f FROM DUAL;

集合演算子の制限事項: 集合演算子には、次の制限事項があります。

- 集合演算子は、データ型がBLOB、CLOB、BFILE、VARRAYまたはネストした表である列に対しては無効になります。

- UNION、INTERSECTおよびMINUS演算子は、LONG列に対しては無効になります。

- 集合演算子の前のSELECT構文のリストに式が含まれている場合、order_by_clauseでその式を参照するには、式に列の別名を指定する必要があります。

- for_update_clauseは、集合演算子とともに指定できません。

- これらの演算子の副問合せには、order_by_clauseを指定できません。

- TABLEコレクション式を含むSELECT文では、これらの演算子を使用できません。

注意:
SQL規格に準拠するために、Oracleの今後のリリースでは、他の集合演算子より優先順位の高いINTERSECT演算子が提供されます。したがって、INTERSECT演算子と他の集合演算子を使用する問合せでは、カッコを使用して評価順序を指定してください。

UNIONの例 次の文は、UNION演算子によって2つの問合せの結果を結合しています。結果に重複行は含まれません。次の文は、他の表に存在していない列がある場合に、(TO_CHARファンクションを使用して)データ型を一致させる必要があることを示しています。

SELECT location_id, department_name "Department",
TO_CHAR(NULL) "Warehouse"  FROM departments
UNION
SELECT location_id, TO_CHAR(NULL) "Department", warehouse_name
FROM warehouses;

LOCATION_ID Department                     Warehouse
----------- ------------------------------ ---------------------------
1400 IT
1400                                Southlake, Texas
1500 Shipping
1500                                San Francisco
1600                                New Jersey
1700 Accounting
1700 Administration
1700 Benefits
1700 Construction
1700 Contracting
1700 Control And Credit
...

UNION ALLの例 UNION ALL演算子がすべての行を戻すのに対して、UNION演算子は重複しない行のみを戻します。UNION ALL演算子は、重複行も対象に含めます。

SELECT product_id FROM order_items
UNION
SELECT product_id FROM inventories
ORDER BY product_id;

SELECT location_id  FROM locations
UNION ALL
SELECT location_id  FROM departments
ORDER BY location_id;

問合せで複数回戻されるlocation_id値(1700など)は、UNION演算子では1回のみ戻されますが、UNION ALL演算子では複数回戻されています。

INTERSECTの例 次の文は、INTERSECT演算子によって2つの結果を結合しています。この場合、両方の問合せによって共通に戻される一意の行のみが戻されます。

SELECT product_id FROM inventories
INTERSECT
SELECT product_id FROM order_items
ORDER BY product_id;

MINUSの例 次の文は、MINUS演算子を使用して2つの結果を結合します。この場合、最初の問合せでは戻されるが、2番目の問合せでは戻されない一意の行のみが戻されます。

SELECT product_id FROM inventories
MINUS
SELECT product_id FROM order_items
ORDER BY product_id;

問合せ結果のソート

ORDER BY句を使用して、問合せによって選択された行を順序付けます。位置のソートは次のような場合に有効です。

- 長いSELECT構文のリストの式によって順序付けるためには、全体の式を複製するのではなく、ORDER BY句でその位置を指定することができます。

- 集合演算子UNION、INTERSECT、MINUSまたはUNION ALLを含む複合問合せでは、ORDER BY句に明示的な式ではなく、位置または別名を指定する必要があります。またORDER BY句は、最後のコンポーネントの問合せにのみ使用できます。ORDER BY句は、複合問合せ全体によって戻されたすべての行を順序付けます。

Oracle DatabaseによってORDER BY句の文字値のソートに使用されるメカニズムは照合とも呼ばれ、NLS_SORTセッション・パラメータで指定されます。このパラメータが未設定の場合、NLS_LANGUAGEセッション・パラメータからデフォルトが導出されます。ALTER SESSION SET NLS_SORT文を使用して、照合を動的に変更できます。2つ目のパラメータで指定される照合を使用して、引数としてソートされる文字式をNLSSORTファンクションに含めることによって、特定の照合を適用することもできます。

ORDER BY句の文字値が言語的に比較される場合、文字値はまず照合キーに変換されてから、RAW値のように比較されます。照合キーは、NLSSORTの指定に従って明示的に生成されるか、NLSSORTで使用される同じメソッドを用いて暗黙的に生成されます。明示的および暗黙的に生成された照合キーは、いずれも「NLSSORT」で説明されている制限事項の対象になります。これらの制限事項の結果、照合キーの生成に使用される接頭辞が同じであれば、残りの値が異なっていても、2つの値は言語的に等しいとみなされる場合があります。

関連項目:
NLSパラメータの詳細は、「NLSSORT」および『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

結合

結合とは、2つ以上の表、ビューまたはマテリアライズド・ビューの行を結合する問合せです。複数の表が問合せのFROM句に指定される場合、Oracle Databaseは結合を実行します。問合せのSELECT構文のリストは、これらの表のいずれかの任意の列を選択することができます。これらの表のいずれか2つに共通の列名を持つものがある場合、問合せの間、これらの列に対してすべての参照を明確にするために表の名前を付けて修飾する必要があります。

結合条件

ほとんどの結合問合せには、FROM句またはWHERE句のいずれかに1つ以上の結合条件が含まれます。結合条件によって、異なる表から2つの列が比較されます。結合を実行するために、Oracle Databaseは各表に1つずつ含まれている列を結合し、結合条件がTRUEになるようにします。結合条件の列をSELECT構文のリストに表示する必要はありません。

3つ以上の表を結合するために、Oracleはまず列を比較する結合条件に基づいて2つの表を結合し、結合された表と新規の表の列を含む結合条件に基づいて、さらにもう1つの表を結合します。すべての表が結果に結合されるまで、このプロセスを継続します。オプティマイザは、Oracleが結合条件に基づいて表を結合する順序、表の索引、および任意の使用可能な表の統計を決定します。

結合条件を含むWHERE句には、1つの表のみの列を参照する別の条件も含めることができます。これらの条件は、結合問合せによって戻された列をさらに制限することができます。

注意:
WHERE句に結合条件が含まれる場合、WHERE句にはLOB列を指定できません。WHERE句でのLOBの使用については、他にも制限事項があります。詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。

等価結合

等価結合とは、等価演算子を含む結合条件での結合のことです。等価結合は、指定した列に同等の値を持つ行を結合します。オプティマイザが結合の実行を選択する内部アルゴリズムによって、1つの表の等価結合条件における列の合計サイズは、データ・ブロックのサイズ以下に制限される可能性があります。データ・ブロックのサイズは、初期化パラメータDB_BLOCK_SIZEによって指定されます。

関連項目:
「結合問合せの使用例:」

自己結合

自己結合とは、自己の表結合のことです。この表はFROM句に2回指定され、結合条件の列名を修飾する表の別名が続きます。自己結合を実行するために、Oracle Databaseは結合条件を満たす表の行を結合して戻します。

関連項目:
「自己結合の使用例:」

デカルト積

結合問合せの2つの表に結合条件がない場合、Oracle Databaseはデカルト積を戻します。この場合、1つの表の各行が別の表の各行に結合されます。デカルト積は常に多数の行を生成するため、有効ではありません。たとえば、それぞれが100行を持つ2つの表のデカルト積は10,000行を生成します。特にデカルト積を必要としないかぎり、必ず結合条件を指定してください。問合せが3つ以上の表を結合し、特定の組に対して結合条件を指定しない場合、オプティマイザは、中間のデカルト積を生成しないように結合順序を選択する可能性があります。

内部結合

内部結合(単純結合)とは、結合条件を満たす行のみを戻す、複数の表の結合です。

外部結合

外部結合は、単純結合の結果を拡張します。外部結合は、結合条件を満たすすべての行と、結合条件を満たす行を除いた、一方の表のすべての行を戻します。

- 表AおよびBの外部結合を行い、すべての行をAから戻す問合せ(左側外部結合)を記述するには、FROM句でLEFT [OUTER] JOIN構文を使用するか、WHERE句の結合条件で外部結合演算子(+)をBのすべての列に適用します。Bに一致する行のないAのすべての行に関して、Oracle Databaseは、Bの列を含む任意のSELECT構文のリストの式にNULLを戻します。

- 表AおよびBの外部結合を行い、すべての行をBから戻す問合せ(右側外部結合)を記述するには、FROM句でRIGHT [OUTER] JOIN構文を使用するか、WHERE句の結合条件で外部結合演算子(+)をAのすべての列に適用します。Aに一致する行のないBのすべての行に関して、Oracleは、Aの列を含む任意のSELECT構文のリストの式にNULLを戻します。

- 外部結合を行い、結合条件を満たさない場合にすべての行をAおよびBからNULLで拡張して戻す問合せ(完全外部結合)を記述するには、FROM句でFULL [OUTER] JOIN構文を使用します。

指定する書式にかかわらず、外部結合のWHERE句の副問合せでは列を比較できません。

外部結合を使用すると、疎データ内の欠損を補完できます。このような結合はパーティション化された外部結合と呼ばれ、join_clause構文のquery_partition_clauseを使用して形成されます。疎データとは、時刻や部門などのディメンションの一部の値に対する行を持たないデータです。たとえば、販売データの表には通常、売上のない任意の日付の製品に対する行は存在しません。データの欠損の補完は、データの欠損によって分析計算が複雑になる場合や、疎データを直接問い合せた場合に一部のデータを見逃す可能性がある際に役立ちます。

関連項目:

- 外部結合を使用した疎データの欠損の補完方法の詳細は、「join_clause」を参照してください。

- グループ外部結合および疎データの欠損補完の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

Oracleの結合演算子よりも、FROM句のOUTER JOIN構文を使用することをお薦めします。Oracleの結合演算子(+)を使用した外部結合問合せには、次の規則と制限事項があります(これらの規則や制限事項は、FROM句のOUTER JOIN構文にはありません)。

- FROM句の結合構文を含む問合せブロックには結合演算子(+)を指定できません。

- 結合演算子(+)は、WHERE句またはFROM句の左相関のコンテキスト(TABLE句を指定する場合)にのみ指定でき、表またはビューの列にのみ適用されます。

- AおよびBが複数の結合条件によって結合される場合、これらの条件のすべてにおいて結合演算子(+)を使用する必要があります。使用しない場合、Oracle Databaseは単純結合の結果である行のみを戻しますが、外部結合の結果がないことを示す警告やエラーは出力しません。

- ある表を外部問合せに指定して別の表を内部問合せに指定した場合、結合演算子(+)は外部結合を生成しません。

- 自己結合が有効であっても、結合演算子(+)を使用して表を自己に外部結合することはできません。たとえば、次の文は無効です。

-- The following statement is not valid:
SELECT employee_id, manager_id
FROM employees
WHERE employees.manager_id(+) = employees.employee_id;

ただし、次の自己結合は有効です。

SELECT e1.employee_id, e1.manager_id, e2.employee_id
FROM employees e1, employees e2
WHERE e1.manager_id(+) = e2.employee_id
ORDER BY e1.employee_id, e1.manager_id, e2.employee_id;

- 結合演算子(+)は任意の式ではなく、列にのみ適用することができます。ただし、任意の式には結合演算子(+)でマークされた1つ以上の列を含めることができます。

- 結合演算子(+)を含むWHERE条件は、OR論理演算子を使用する他の条件と結合できません。

- WHERE条件は、IN比較条件を使用して、結合演算子(+)でマークされた列を式と比較できません。

WHERE句に表Bの列と定数を比較する条件が含まれる場合、Oracleがこの列に対してNULLを生成する表Aの列を戻すように、結合演算子(+)をこの列に適用する必要があります。それ以外の場合、Oracleは単純結合の結果のみを戻します。

以前のリリースのOracle Databaseでは、2組以上の表の外部結合を実行する問合せで、単一表は他の1つの表のみに対してNULL生成された表にすることができました。Oracle Database 12c以降では、単一表は複数の表に対してNULL生成された表にすることができます。たとえば、Oracle Database 12cでは、次の文が許容されています。

SELECT * FROM A, B, D
WHERE A.c1 = B.c2(+) and D.c3 = B.c4(+);

この例では、NULL生成された表Bは、2つの表AとDに外部結合されます。外部結合の構文については、「SELECT」を参照してください。

アンチ結合

アンチ結合は、述語の右側に対応する行を持たない述語の左側の行を戻します。この結合は、右側の副問合せに一致しない(NOT IN)行を戻します。

関連項目:
「アンチ結合の使用例:」

セミ結合

セミ結合は、述語の右側の複数の行が副問合せの条件を満たす場合に、述語の左側から行を重複させずにEXISTS副問合せに一致する行を戻します。

副問合せがWHERE句のORブランチに指定されている場合、セミ結合およびアンチ結合変換は実行できません。

関連項目:
「セミ結合の使用例:」

副問合せの使用方法

副問合せは、複数部分の問合せに応答します。たとえば、Taylorの部門で働いている人を判断するには、まずTaylorが働く部門を判断する副問合せを使用できます。その後、親SELECT文で元の問合せに応答することができます。SELECT文のFROM句の副問合せは、インライン・ビューとも呼ばれます。任意の数の副問合せをインライン・ビュー内にネストできます。また、SELECT文のWHERE句の副問合せは、ネストした副問合せとも呼ばれます。ネストした副問合せには、最大255レベルの副問合せをネストできます。

副問合せは、別の副問合せを含むことができます。トップレベル問合せのFROM句内の副問合せレベルの数には、制限がありません。WHERE句には、最大255レベルの副問合せをネストできます。

副問合せにある列が、含まれる文の列と同じ名前を持つ場合、含まれる文の表の列に表名または別名で参照の接頭辞を付ける必要があります。文をさらに読みやすくするには、常に、表、ビューまたはマテリアライズド・ビューの名前または別名で副問合せの列を修飾します。

ネストした副問合せが、その副問合せから1レベル上位の親である文で参照する表の列を参照する場合、Oracleは相関副問合せを行います。親である文は、副問合せがネストしているSELECT、UPDATEまたはDELETE文のいずれかです。概念的に、相関副問合せは、親である文によって処理される行ごとに1回評価されます。しかし、オプティマイザは、問合せを結合として書き換えるか、他のなんらかの手法を使用して意味的に同等の問合せを形成することを選択する可能性があります。Oracleは、副問合せで指定された表内を検索した後、親である文で指定された表内を検索することによって、副問合せ内の未修飾列を解決します。

相関副問合せは、応答が親である文によって処理された各列の値に依存する複数部分の問合せに応答します。たとえば、相関副問合せを使用して、部門内で給与が平均給与以上の従業員を判断することができます。この場合、相関副問合せは独自で各部門の平均給与を計算します。

関連項目:
「相関副問合せの使用例:」

副問合せは、次の用途に使用します。

- INSERTまたはCREATE TABLE文のターゲット表に挿入する一連の行を定義します。

- CREATE VIEWまたはCREATE MATERIALIZED VIEW文のビューまたはマテリアライズド・ビューに含める一連の行を定義します。

- UPDATE文の既存の行に割り当てる1つ以上の値を定義します。

- SELECT、UPDATEおよびDELETE文のWHERE句、HAVING句またはSTART WITH句における条件に対する値を定義します。

- 含まれる問合せによって操作される表を定義します。
表名を指定する場合と同様に、問合せを含むFROM句に副問合せを指定することによってこれらのことを行います。INSERT、UPDATEおよびDELETE文においても、このようにして表のかわりに副問合せを使用することができます。

このように使用される副問合せでは、その副問合せ内で定義した相関変数と、その副問合せを含む問合せのブロック内で定義した相関変数が使用できます。詳細は、「table_collection_expression」を参照してください。

1つの行から1つの列の値を戻すスカラー副問合せは、有効な書式の式です。構文でexprをコールするほとんどの場合に、スカラー副問合せ式を使用できます。詳細は、「スカラー副問合せ式」を参照してください。

ネストされた副問合せのネスト解除

副問合せは、親である文のWHERE句内にあるときはネストされています。ネストされた副問合せを持つ文を評価する場合、Oracle Databaseは、副問合せ部分を複数回評価する必要があり、効果的なアクセス・パスまたは結合を見逃してしまう可能性があります。

副問合せのネスト解除によって、副問合せの本体がネスト解除され、その副問合せを含む文の本体に結合されます。これによって、アクセス・パスおよび結合の評価時に、オプティマイザが副問合せと文を1つのものと判断します。オプティマイザは、ほぼすべての副問合せをネスト解除できますが、いくつか例外があります。これらの例外としては、階層副問合せ、およびROWNUM疑似列、集合演算子の1つ、ネストした集計ファンクション、副問合せの直接的な外部問合せブロックではない問合せブロックへの相関参照を含む副問合せなどがあります。

制約がない場合、オプティマイザは、次のネストされた副問合せを自動的にネスト解除します(ただし、ネスト解除しない場合もあります)。

- 相関関係のないIN副問合せ

- INおよびEXISTS相関副問合せ(集計ファンクションまたはGROUP BY句を含まない場合)

ネスト解除された拡張副問合せを行うには、次のタイプの副問合せをネスト解除するようにオプティマイザに指示します。

- 副問合せにHASH_AJまたはMERGE_AJヒントを指定して、NOT IN副問合せをネスト解除します。

- 副問合せにUNNESTヒントを指定して、その他の副問合せをネスト解除します。

関連項目:
ヒントの詳細は、「ヒント」を参照してください。

DUAL表からの選択

DUALは、データ・ディクショナリとともにOracle Databaseによって自動的に作成された表です。DUALは、ユーザーSYSのスキーマにありますが、すべてのユーザーがDUALという名前でアクセスすることができます。VARCHAR2(1)として定義されているDUMMY列を持ち、X値を持つ行を含みます。DUAL表から選択することは、定数式をSELECT文で計算する場合に便利です。 DUALには行が1つしかないため、定数が返されるのは1回のみです。一方で、任意の表から定数、疑似列または式を選択できますが、値は表の行の数のみ戻されます。DUALから定数値を選択する例は、「SQLファンクション」を参照してください。

注意:
Oracle Database 10gリリース1以降では、DUMMY列を含まない式を計算する場合に、論理I/OがDUAL表で実行されません。この最適化は、実行計画でFAST DUALとしてリストされます。DUALのDUMMY列に対してSELECTを実行した場合、この最適化は行われず、論理I/Oが実行されます。

分散問合せ

Oracle分散データベース管理システム・アーキテクチャによって、Oracle NetおよびOracle Databaseサーバーを使用するリモート・データベースにアクセスできます。名前の最後に@dblinkを追加して、リモート表、ビューまたはマテリアライズド・ビューを識別できます。dblinkは、リモート表、ビューまたはマテリアライズド・ビューを含むデータベースへのデータベース・リンクの完全な名前または部分的な名前である必要があります。

関連項目:

- データベース・リンクの参照方法の詳細は、「リモート・データベース内のオブジェクトの参照」を参照してください。

- リモート・データベースへのアクセスについては、『Oracle Database Net Services管理者ガイド』を参照してください。

分散問合せの制限事項: 現在、分散問合せには、FOR UPDATE句によってロックされたすべての表、および問合せによって選択されたLONG列を持つすべての表が、同じデータベース上に位置している必要があるという制限があります。また、Oracle Databaseは現在、リモート表にあるユーザー定義型またはオブジェクトREFのデータ型を選択する分散問合せをサポートしていません。

10 SQL文: ADMINISTER KEY MANAGEMENTからALTER JAVA

この章では、様々なSQL文をリストしてアルファベット順にSQL文を説明します。その他のSQL文については、第11章から第19章を参照してください。

この章では、次の内容を説明します。

- 様々な種類のSQL文

- SQL文に関する章の構成

- ADMINISTER KEY MANAGEMENT

- ALTER AUDIT POLICY (統合監査)

- ALTER CLUSTER

- 「ALTER DATABASE」

- ALTER DATABASE LINK

- ALTER DIMENSION

- ALTER DISKGROUP

- ALTER FLASHBACK ARCHIVE

- ALTER FUNCTION

- ALTER INDEX

- ALTER INDEXTYPE

- ALTER JAVA

様々な種類のSQL文

次の項にあるリストは、SQL文の機能の概要について、次のカテゴリに分類して説明しています。

- データ定義言語(DDL)文

- データ操作言語(DML)文

- トランザクション制御文

- セッション制御文

- システム制御文

- 埋込みSQL文

データ定義言語(DDL)文

データ定義言語(DDL)文によって、次のタスクを実行できます。

- スキーマ・オブジェクトの作成、変更および削除

- 権限およびロールの付与および取消し

- 表、索引またはクラスタ上の情報の分析

- 監査オプションの構築

- データ・ディクショナリへのコメントの追加

CREATE、ALTERおよびDROPコマンドは、特定のオブジェクトに対して排他的アクセスを必要とします。たとえば、別のユーザーが特定の表でトランザクションをオープンしている場合、ALTER TABLE文は実行できません。

GRANT、REVOKE、ANALYZE、AUDITおよびCOMMENTコマンドは、特定のオブジェクトに対する排他的アクセスを必要としません。たとえば、他のユーザーが表を更新しているときでも、その表を分析できます。

Oracle Databaseは、暗黙的にすべてのDDL文の前後で現在のトランザクションをコミットします。

DDL文はブロッキングまたは非ブロッキングのいずれかで、どちらのタイプのDDL文にも内部構造の排他ロックが必要です。

関連項目:
ブロック化DDLと非ブロック化DDLの相違については、『Oracle Database開発ガイド』を参照してください。

DDL文の多くは、Oracle Databaseにスキーマ・オブジェクトを再コンパイルまたは再認可させることができます。Oracle Databaseがスキーマ・オブジェクトを再コンパイルまたは再認可する方法、およびDDL文によってそれを実行する環境については、『Oracle Database概要』を参照してください。

DDL文は、DBMS_SQLパッケージを使用したPL/SQLによってサポートされます。

関連項目:
このパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

次に、DDL文を示します。

ALTER (ALTER SESSIONおよびALTER SYSTEMを除くALTERで始まるすべての文。「セッション制御文」および「システム制御文」を参照)
ANALYZE
ASSOCIATE STATISTICS
AUDIT
COMMENT
CREATE (CREATEで始まるすべての文)
DISASSOCIATE STATISTICS
DROP (DROPで始まるすべての文)
FLASHBACK (FLASHBACKで始まるすべての文)
GRANT
NOAUDIT
PURGE
RENAME
REVOKE
TRUNCATE

データ操作言語(DML)文

データ操作言語(DML)文は、既存スキーマ・オブジェクトのデータにアクセスし、操作します。次の文は、現在のトランザクションを暗黙的にコミットしません。次に、データ操作言語文を示します。

CALL
DELETE
EXPLAIN PLAN
INSERT
LOCK TABLE
MERGE
SELECT
UPDATE

SELECT文は、DML文の制限された形式であり、データベース内のデータへのアクセスのみが可能です。アクセスしたデータを操作してから問合せの結果を戻すことはできますが、データベースに格納されたデータを操作することはできません。

SELECT文は、動的に実行されるときにのみPL/SQLでサポートされます。ただし、類似のPL/SQL文SELECT INTOをPL/SQLコード内で使用でき、この文は動的に実行する必要はありません。CALLおよびEXPLAIN PLAN文は、動的に実行されるときにのみPL/SQLでサポートされます。他のすべてのDML文は、PL/SQLで完全にサポートされます。

トランザクション制御文

トランザクション制御文は、DML文で行った変更を管理します。次に、トランザクション制御文を示します。

COMMIT
ROLLBACK
SAVEPOINT
SET TRANSACTION
SET CONSTRAINT

COMMITおよびROLLBACKコマンドの特定書式以外のトランザクション制御文は、PL/SQLでサポートされます。制限については、「COMMIT」および「ROLLBACK」を参照してください。

セッション制御文

セッション制御文は、ユーザー・セッションのプロパティを動的に管理します。次の文は、現在のトランザクションを暗黙的にコミットしません。

PL/SQLは、セッション制御文をサポートしません。次に、セッション制御文を示します。

ALTER SESSION
SET ROLE

システム制御文

唯一のシステム制御文であるALTER SYSTEMは、Oracle Databaseインスタンスのプロパティを動的に管理します。この文によって、現行トランザクションが暗黙的にコミットされることはなく、この文はPL/SQLではサポートされません。

埋込みSQL文

埋込みSQL文は、DDL、DMLおよびトランザクション制御文を手続き型言語プログラム内に入れます。埋込みSQLは、Oracleプリコンパイラでサポートされており、次のマニュアルに記載されています。

- 『Pro*COBOLプログラマーズ・ガイド』

- 『Pro*C/C++プログラマーズ・ガイド』

- 『Oracle SQL*Module for Ada Programmer\'s Guide』

SQL文に関する章の構成

この章および第11章から第19章のすべてのSQL文は、次の項で編成されています。

構文 構文図には、文を構成するキーワードおよびパラメータを示します。

注意:
すべてのキーワードおよびパラメータがあらゆる環境において有効なわけではありません。構文の制限事項については、文および句の「セマンティクス」を参照してください。

用途 文の基本的な使用方法を説明します。

前提条件 文の実行に必要な権限と、文を使用する前に実行する手順を示します。特に指定がないかぎり、ご使用のインスタンスでデータベースがオープンされている必要があります。

セマンティクス 構文を構成するキーワード、パラメータおよび句の用途について説明します。また、制限事項およびその他の注意事項についても説明します。(この章で使用するキーワードおよびパラメータの表記規則の詳細は、「はじめに」を参照してください。)

例 文の様々な句およびパラメータの使用方法を示します。

ADMINISTER KEY MANAGEMENT

用途

ADMINISTER KEY MANAGEMENT文は、透過的データ暗号化のための統合されたキー管理インタフェースを提供します。この文は、次の目的に使用できます。

- ソフトウェア・キーストアおよびハードウェア・キーストアの管理

- 暗号化キーの管理

- シークレットの管理

前提条件

ADMINISTER KEY MANAGEMENTシステム権限、またはSYSKMシステム権限が必要です。

CONTAINER句を指定する場合は、マルチテナント・コンテナ・データベース(CDB)に接続している必要があります。CONTAINER = ALLを指定するには、現在のコンテナがルートである必要があります。また、共通に付与されているADMINISTER KEY MANAGEMENTまたはSYSKM権限が必要です。

構文

administer_key_management::=

(keystore_management_clauses::=, key_management_clauses::=, secret_management_clauses::=)

keystore_management_clauses::=

(create_keystore::=, open_keystore::=, close_keystore, backup_keystore::=, alter_keystore_password::=, merge_into_new_keystore::=, merge_into_exist_keystore::=)

create_keystore::=

open_keystore::=

close_keystore

backup_keystore::=

alter_keystore_password::=

merge_into_new_keystore::=

merge_into_exist_keystore::=

key_management_clauses::=

(set_key::=、create_key::=、use_key::=、set_key_tag::=、export_keys::=、import_keys::=、migrate_key::=、reverse_migrate_key::=を参照)

set_key::=

create_key::=

use_key::=

set_key_tag::=

export_keys::=

import_keys::=

migrate_key::=

reverse_migrate_key::=

secret_management_clauses::=

(add_update_secret::=、delete_secret::=を参照)

add_update_secret::=

delete_secret::=

セマンティクス

keystore_management_clauses

これらの句を使用して、次のキーストア管理操作を実行できます。

- ソフトウェア・キーストアの作成

- ソフトウェア・キーストアまたはハードウェア・キーストアのオープンとクローズ

- パスワードベースのソフトウェア・キーストアのバックアップ

- パスワードベースのソフトウェア・キーストアのパスワードの変更

- 2つの既存のソフトウェア・キーストアの、新しいパスワードベース・ソフトウェア・キーストアへのマージ

- 1つの既存のソフトウェア・キーストアの、既存のパスワードベース・ソフトウェア・キーストアへのマージ

create_keystore

この句を使用して、パスワードベースのソフトウェア・キーストアと自動ログイン・ソフトウェア・キーストアの2種類のソフトウェア・キーストアを作成できます。この句をマルチテナント環境で発行するには、ルートに接続する必要があります。

CREATE KEYSTORE パスワードベースのソフトウェア・キーストアを作成するには、この句を指定します。

- keystore_locationには、ソフトウェア・キーストア・ディレクトリのフルパス名を指定します。キーストアは、このディレクトリにewallet.p12という名前のファイルで作成されます。ご使用のシステムのソフトウェア・キーストア・ディレクトリを確認する方法の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

- keystore_passwordを使用して、キーストアのパスワードを設定します。詳細は、「キーストア・パスワードを指定するときの注意事項」を参照してください。

CREATE [ LOCAL ] AUTO_LOGIN KEYSTORE 自動ログイン・ソフトウェア・キーストアを作成するには、この句を指定します。自動ログイン・ソフトウェア・キーストアは、既存のパスワードベースのソフトウェア・キーストアから作成されます。自動ログイン・キーストアは、システム生成のパスワードを保持します。これは、パスワードベースのソフトウェア・キーストアと同じディレクトリにある、cwallet.ssoという名前のPKCS#12ベースのファイルに格納されます。

- デフォルトでは、Oracleが作成する自動ログイン・キーストアは、このキーストアが格納されているコンピュータ以外のコンピュータからも開けるようになります。LOCALキーワードを指定すると、Oracle Databaseによりローカルの自動ログイン・キーストアが作成されますが、そのキーストアはそれが格納されているコンピュータからのみ開けます。

- keystore_locationには、既存のパスワードベースのソフトウェア・キーストアが格納されているディレクトリのフルパス名を指定します。パスワードベースのソフトウェア・キーストアは、開いていても閉じていてもかまいません。

- keystore_passwordには、既存のパスワードベースのソフトウェア・キーストアのパスワードを指定します。

キーストアの作成についての制限事項 ローカルであるかどうかにかかわらず、パスワードベースのソフトウェア・キーストアと自動ログイン・ソフトウェア・キーストアは、どちらも1つのディレクトリ内に1つまで作成できます。

関連項目:
ソフトウェア・キーストアの作成の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

open_keystore

この句を使用すると、パスワードベースのソフトウェア・キーストアまたはハードウェア・キーストアを開くことができます。

注意:
自動ログイン・ソフトウェア・キーストアとローカルの自動ログイン・ソフトウェア・キーストアを開くために、この句を使用する必要はありません。これらのキーストアは、マスター暗号化キーへのアクセスにより自動的に開かれます。

- keystore_passwordには、そのキーストアのパスワードを指定します。

- CONTAINER句は、CDBに接続しているときに適用されます。
現在のコンテナがプラガブル・データベース(PDB)である場合は、CONTAINER = CURRENTを指定すると、PDBでキーストアが開きます。PDBでキーストアを開く前に、ルートでキーストアが開かれている必要があります。

現在のコンテナがルートである場合は、CONTAINER = CURRENTを指定すると、ルートでキーストアが開き、CONTAINER = ALLと指定すると、ルートとすべてのPDBでキーストアが開きます。

この句を省略すると、CONTAINER = CURRENTがデフォルトになります。

関連項目:
パスワードベースのソフトウェア・キーストアとハードウェア・キーストアを開く方法の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

close_keystore

この句を使用すると、パスワードベースのソフトウェア・キーストア、自動ログイン・ソフトウェア・キーストア、またはハードウェア・キーストアを閉じることができます。キーストアを閉じると、すべての暗号化操作と復号化操作が無効になります。データを暗号化または複合化しようとしたり、暗号化されたデータにアクセスしようとすると、エラーが発生します。

- パスワードベースのソフトウェア・キーストアまたはハードウェア・キーストアを閉じるには、keystore_passwordを指定します。

- 自動ログイン・キーストアを閉じるときには、keystore_passwordを指定しないでください。自動ログイン・キーストアを閉じる前に、V$ENCRYPTION_WALLETビューのWALLET_TYPE列を確認してください。AUTOLOGINが戻されたら、キーストアを閉じることができます。そうしないと、キーストアを閉じようとするとエラーが発生します。

- CONTAINER句は、CDBに接続しているときに適用されます。
現在のコンテナがPDBである場合は、CONTAINER = CURRENTを指定すると、PDBでキーストアが閉じます。

現在のコンテナがルートである場合は、CONTAINER = CURRENT句とCONTAINER = ALL句は同じ結果になり、どちらの句でもルートとすべてのPDBでキーストアが閉じます。

この句を省略すると、CONTAINER = CURRENTがデフォルトになります。

関連項目:
キーストアを閉じる方法の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

backup_keystore

この句を使用すると、パスワードベースのソフトウェア・キーストアをバックアップできます。このキーストアは、開いている必要があります。

- デフォルトでは、Oracle Databaseは、ewallet_timestamp.p12という形式の名前でバックアップ・ファイルを作成します。timestampは、UTC形式でのファイル作成時のタイムスタンプです。オプションのUSING 'backup_identifier'句を使用すると、バックアップ・ファイルの名前に追加するバックアップ識別子を指定できます。たとえば、バックアップ識別子に'Backup1'を指定すると、Oracle Databaseは、ewallet_timestamp_Backup1.p12という形式の名前でバックアップ・ファイルを作成します。

- keystore_passwordには、そのキーストアのパスワードを指定します。

- オプションのTO 'keystore_location'句を使用すると、バックアップ・ファイルの作成先ディレクトリを指定できます。この句を省略すると、バックアップは、キーストアがバックアップされているディレクトリに作成されます。

関連項目:
パスワードベースのソフトウェア・キーストアのバックアップ方法の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

alter_keystore_password

この句を使用すると、パスワードベースのソフトウェア・キーストアのパスワードを変更できます。このキーストアは、開いている必要があります。

- old_keystore_passwordには、キーストアの古いパスワードを指定します。

- new_keystore_passwordには、キーストアの新しいパスワードを指定します。

- オプションのWITH BACKUP句を使用すると、パスワードを変更する前に、キーストアのバックアップを作成するようにデータベースに指示できます。詳細は、「WITH BACKUP句の注意事項」を参照してください。

関連項目:
パスワードベースのソフトウェア・キーストアのパスワード変更方法の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

merge_into_new_keystore

この句を使用すると、2つのソフトウェア・キーストアを新しい1つのキーストアにマージできます。2つの構成要素であるキーストアに含まれるキーと属性は、新しいキーストアに追加されます。構成要素であるキーストアには、パスワードベースのソフトウェア・キーストアまたは自動ログイン(ローカルの自動ログインを含む)ソフトウェア・キーストアのいずれもできます。また、それらは開いていても閉じていてもかまいません。新しいキーストアは、パスワードベースのソフトウェア・キーストアになります。マージが完了された時点では、閉じられた状態になります。この句に指定するキーストアは、データベースで使用するように構成されたキーストアでも、それ以外のキーストアでもかまいません。

- keystore1_locationには、最初のキーストアが格納されているディレクトリのフルパス名を指定します。

- IDENTIFIED BY keystore1_passwordは、最初のキーストアがパスワードベースのソフトウェア・キーストアの場合にかぎり指定できます。

- keystore2_locationには、2番目のキーストアが格納されているディレクトリのフルパス名を指定します。

- IDENTIFIED BY keystore2_passwordは、2番目のキーストアがパスワードベースのソフトウェア・キーストアの場合にかぎり指定できます。

- keystore3_locationには、新しいキーストアの作成先になるディレクトリのフルパス名を指定します。

- keystore3_passwordには、新しいキーストアのパスワードを指定します。詳細は、「キーストア・パスワードを指定するときの注意事項」を参照してください。

関連項目:
ソフトウェア・キーストアのマージ方法の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

merge_into_exist_keystore

この句を使用すると、ソフトウェア・キーストアを、それ以外の既存のソフトウェア・キーストアにマージできます。マージ元のキーストアに含まれるキーと属性は、マージ先のキーストアに追加されます。マージ元のキーストアには、パスワードベースのソフトウェア・キーストアまたは自動ログイン(ローカルの自動ログインを含む)ソフトウェア・キーストアのいずれも選択できます。また、それらは開いていても閉じていてもかまいません。マージ先になるキーストアは、パスワードベースのソフトウェア・キーストアにする必要があります。これは、マージの開始時に開いていても閉じられていてもかまいません。ただし、マージが完了した時点では、閉じられた状態になります。この句に指定するキーストアは、データベースで使用するように構成されたキーストアでも、それ以外のキーストアでもかまいません。

- keystore1_locationには、マージ元のキーストアが格納されているディレクトリのフルパス名を指定します。

- IDENTIFIED BY keystore1_passwordは、マージ元のキーストアがパスワードベースのソフトウェア・キーストアの場合にかぎり、指定できます。

- keystore2_locationには、マージ先になるキーストアが格納されているディレクトリのフルパス名を指定します。

- keystore2_passwordには、マージ先になるキーストアのパスワードを指定します。

- オプションのWITH BACKUP句を使用すると、マージを実行する前にマージ先になるキーストアのバックアップを作成するようにデータベースに指示できます。詳細は、「WITH BACKUP句の注意事項」を参照してください。

関連項目:
ソフトウェア・キーストアのマージ方法の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

key_management_clauses

これらの句を使用して次のキー管理操作を実行できます。

- マスター暗号化キーの作成とアクティブ化

- 暗号化キーのタグの設定

- キーストアからファイルへの暗号化キーのエクスポート

- ファイルからキーストアへの暗号化キーのインポート

- パスワードベースのソフトウェア・キーストアからハードウェア・キーストアへの移行

- ハードウェア・キーストアからパスワードベースのソフトウェア・キーストアへの移行

set_key

この句は新しいマスター暗号化キーを作成し、それをアクティブ化します。この句を使用すると、キーストア内に最初のマスター暗号化キーを作成することも、マスター暗号化キーを交換(変更)することもできます。この句を使用するときに、マスター暗号化キーがアクティブな場合は、そのキーが非アクティブ化されてから新しいマスター暗号化キーがアクティブ化されます。キーを含むキーストアは、パスワードベースのソフトウェア・キーストアであっても、ハードウェア・キーストアであってもかまいません。このキーストアは、開いている必要があります。

- ENCRYPTIONキーワードはオプションで、意味を明確化するために使用されます。

- オプションのUSING TAG句を指定すると、タグを新しいマスター暗号化キーに関連付けできます。詳細は、「USING TAG句の注意事項」を参照してください。

- keystore_passwordには、そのキーストアのパスワードを指定します。

- WITH BACKUP句と、オプションのUSING 'backup_identifier'句を指定すると、新しいマスター暗号化キーが作成される前に、キーストアのバックアップが作成されます。詳細は、「WITH BACKUP句の注意事項」を参照してください。

- CONTAINER句は、CDBに接続しているときに適用されます。
現在のコンテナがPDBである場合は、CONTAINER = CURRENTを指定すると、PDBで新しいマスター暗号化キーが作成およびアクティブ化されます。PDBでマスター暗号化キーを作成する前に、ルートにマスター暗号化キーが存在する必要があります。

現在のコンテナがルートの場合は、CONTAINER = CURRENTを指定すると、ルートで新しいマスター暗号化キーが作成およびアクティブ化され、CONTAINER = ALLを指定すると、すべてのPDBで新しいマスター暗号化キーが作成およびアクティブ化されます。

この句を省略すると、CONTAINER = CURRENTがデフォルトになります。

関連項目:
マスター暗号化キーの作成およびアクティブ化の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

create_key

この句を使用すると、後で使用するためのマスター暗号化キーを作成できます。その後で、use_key句を使用すると、このキーをアクティブ化できます。キーを含むキーストアは、パスワードベースのソフトウェア・キーストアであっても、ハードウェア・キーストアであってもかまいません。このキーストアは、開いている必要があります。

- ENCRYPTIONキーワードはオプションで、意味を明確化するために使用されます。

- オプションのUSING TAG句を指定すると、タグを暗号化キーに関連付けできます。詳細は、「USING TAG句の注意事項」を参照してください。

- keystore_passwordには、キーの作成先になるキーストアのパスワードを指定します。

- WITH BACKUP句とオプションのUSING 'backup_identifier'句を指定すると、キーが作成される前に、キーストアのバックアップが作成されるようになります。詳細は、「WITH BACKUP句の注意事項」を参照してください。

- CONTAINER句は、CDBに接続しているときに適用されます。
現在のコンテナがPDBである場合は、CONTAINER = CURRENTを指定すると、PDBでマスター暗号化キーが作成されます。PDBでマスター暗号化キーを作成する前に、ルートにマスター暗号化キーが存在する必要があります。

現在のコンテナがルートである場合は、CONTAINER = CURRENTを指定すると、ルートでマスター暗号化キーが作成され、CONTAINER = ALLを指定すると、ルートとすべてのPDBでマスター暗号化キーが作成されます。

この句を省略すると、CONTAINER = CURRENTがデフォルトになります。

関連項目:
後で使用するためのマスター暗号化キーの作成方法の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

use_key

この句を使用して作成済のマスター暗号化キーをアクティブ化できます。この句を使用するときに、マスター暗号化キーがアクティブな場合は、そのキーが非アクティブ化されてから新しいマスター暗号化キーがアクティブ化されます。キーを含むキーストアは、パスワードベースのソフトウェア・キーストアであっても、ハードウェア・キーストアであってもかまいません。このキーストアは、開いている必要があります。

- ENCRYPTIONキーワードはオプションで、意味を明確化するために使用されます。

- key_idには、アクティブ化するキーの識別子を指定します。キー識別子は、V$ENCRYPTION_KEYSビューのKEY_ID列を問い合せることで確認できます。

- オプションのUSING TAG句を指定すると、タグを暗号化キーに関連付けできます。詳細は、「USING TAG句の注意事項」を参照してください。

- keystore_passwordには、このキーを格納するキーストアのパスワードを指定します。

- WITH BACKUP句とオプションのUSING 'backup_identifier'句を指定すると、キーがアクティブ化される前に、キーストアのバックアップを作成するようになります。詳細は、「WITH BACKUP句の注意事項」を参照してください。

関連項目:
マスター暗号化キーのアクティブ化の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

set_key_tag

この句を使用してに指定された暗号化キーにタグを設定できます。タグはオプションで、キーに関するユーザー定義の記述子です。キーにタグがない場合は、この句を使用してタグを作成できます。キーにタグがある場合は、この句を使用して置き換えることができます。暗号化キーのタグは、V$ENCRYPTION_KEYSビューのTAG列を問い合せることで表示できます。

- tagには、英数字の文字列を指定します。tagは、一重引用符(' ')で囲みます。

- key_idには、暗号化キーの識別子を指定します。キー識別子は、V$ENCRYPTION_KEYSビューのKEY_ID列を問い合せることで確認できます。

- keystore_passwordには、このキーを格納するキーストアのパスワードを指定します。

- WITH BACKUP句とオプションのUSING 'backup_identifier'句を指定すると、キーがアクティブ化される前に、キーストアのバックアップが作成されます。詳細は、「WITH BACKUP句の注意事項」を参照してください。

関連項目:
キー・タグの設定の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

export_keys

この句を使用して、1つ以上の暗号化キーを、パスワードベースのソフトウェア・キーストアからファイルにエクスポートします。このキーストアは、開いている必要があります。各暗号化キーは、キー識別子およびキー属性とともにエクスポートされます。エクスポートされたキーは、ファイル内でパスワード(シークレット)によって保護されます。その後に、import_keys句を使用して1つ以上のキーをパスワードベースのソフトウェア・キーストアにインポートできます。

- ENCRYPTIONキーワードはオプションで、意味を明確化するために使用されます。

- secretを指定して、ファイル内のキーを保護するパスワード(シークレット)を設定します。シークレットは英数字の文字列です。シークレットは、二重引用符で囲むこともできます。引用符の有無にかかわらず、シークレットでは大文字と小文字が区別されます。

- filenameには、キーのエクスポート先となるファイルのフルパス名を指定します。filenameは一重引用符で囲みます。

- keystore_passwordには、エクスポートするキーを含むキーストアのパスワードを指定します。

- 次のいずれかの方法により、WITH IDENTIFIER IN句を使用して、エクスポートする1つ以上の暗号化キーを指定します。

- key_idを使用して、エクスポートする暗号化キーの識別子を指定します。key_idを複数指定する場合は、カンマ区切りのリストにします。キー識別子は、V$ENCRYPTION_KEYSビューのKEY_ID列を問い合せることで確認できます。

- subqueryを使用して、エクスポートする暗号化キーのキー識別子のリストを戻す問合せを指定できます。たとえば、次のsubqueryは、タグがmytagという文字列で始まるデータベース内のすべての暗号化キーのキー識別子を戻します。

SELECT KEY_ID FROM V$ENCRYPTION_KEYS WHERE TAG LIKE 'mytag%'

Oracle Databaseは、subqueryを定義者の権限ではなく現在のユーザーの権限で実行することに注意してください。

- WITH IDENTIFIER IN句を省略すると、データベース内のすべての暗号化キーがエクスポートされます。

WITH IDENTIFIER IN句の制限事項: マルチテナント環境では、PDBからのキーのエクスポート時にWITH IDENTIFIER INを指定できません。これによって、PDB内のすべてのキーが、アクティブな暗号化キーに関するメタデータとともに確実にエクスポートされます。その後、PDBのクローンを作成する場合や、PDBを切断して接続する場合には、エクスポート・ファイルを使用して、クローンとして作成したPDBまたは新たに接続したPDBにキーをインポートし、アクティブな暗号化キーに関する情報を保存できます。

関連項目:
暗号化キーのエクスポートの詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

import_keys

この句を使用して、1つ以上の暗号化キーを、ファイルからパスワードベースのソフトウェア・キーストアにインポートします。このキーストアは、開いている必要があります。各暗号化キーは、キー識別子およびキー属性とともにインポートされます。キーは、事前にexport_keys句を使用して、ファイルにエクスポートしておく必要があります。キーストアにインポートされているキーは再インポートできません。

- ENCRYPTIONキーワードはオプションで、意味を明確化するために使用されます。

- secretには、ファイル内のキーを保護するパスワード(シークレット)を指定します。シークレットは英数字の文字列です。シークレットは、二重引用符で囲むこともできます。引用符の有無にかかわらず、シークレットでは大文字と小文字が区別されます。

- filenameには、キーのインポート元となるファイルのフルパス名を指定します。filenameは一重引用符で囲みます。

- keystore_passwordには、キーのインポート先となるキーストアのパスワードを指定します。

- WITH BACKUP句とオプションのUSING 'backup_identifier'句を指定すると、キーがインポートされる前に、キーストアのバックアップが作成されます。詳細は、「WITH BACKUP句の注意事項」を参照してください。

関連項目:
暗号化キーのインポートの詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

migrate_key

この句を使用して、パスワードベースのソフトウェア・キーストアからハードウェア・キーストアへ移行します。この句によって、既存の表暗号化キーおよび表領域暗号化キーが、ソフトウェア・キーストア内のマスター暗号化キーを使用して復号化され、次にハードウェア・キーストア内の新規作成されたマスター暗号化キーを使用して再び暗号化されます。

注意:
この句の使用は、パスワードベースのソフトウェア・キーストアからハードウェア・キーストアへの移行のための一連のステップのうちの単なる1ステップにすぎません。この句を使用する前に、すべてのステップについて、『Oracle Database Advanced Securityガイド』を参照してください。

- ENCRYPTIONキーワードはオプションで、意味を明確化するために使用されます。

- HSM_auth_stringには、ハードウェア・キーストアのパスワードを指定します。詳細は、「キーストア・パスワードを指定するときの注意事項」を参照してください。

- software_keystore_passwordには、パスワードベースのソフトウェア・キーストアのパスワードを指定します。詳細は、「キーストア・パスワードを指定するときの注意事項」を参照してください。

- WITH BACKUP句とオプションのUSING 'backup_identifier'句を指定すると、移行が行われる前に、キーストアのバックアップが作成されます。詳細は、「WITH BACKUP句の注意事項」を参照してください。

reverse_migrate_key

この句を使用して、ハードウェア・キーストアからパスワードベースのソフトウェア・キーストアへ移行します。この句によって、既存の表暗号化キーおよび表領域暗号化キーが、ハードウェア・キーストア内のマスター暗号化キーを使用して復号化され、次にパスワードベースのソフトウェア・キーストア内の新規作成されたマスター暗号化キーを使用して再び暗号化されます。

注意:
この句の使用は、ハードウェア・キーストアからパスワードベースのソフトウェア・キーストアへの移行のための一連のステップのうちの単なる1ステップです。この句を使用する前に、すべてのステップについて、『Oracle Database Advanced Securityガイド』を参照してください。

- ENCRYPTIONキーワードはオプションで、意味を明確化するために使用されます。

- software_keystore_passwordには、パスワードベースのソフトウェア・キーストアのパスワードを指定します。詳細は、「キーストア・パスワードを指定するときの注意事項」を参照してください。

- HSM_auth_stringには、ハードウェア・キーストアのパスワードを指定します。詳細は、「キーストア・パスワードを指定するときの注意事項」を参照してください。

secret_management_clauses

この句を使用して、パスワードベースのソフトウェア・キーストアやハードウェア・キーストア内のシークレットを追加、更新および削除できます。

関連項目:
シークレットの追加、更新および削除の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

add_update_secret

この句を使用して、シークレットを追加または更新できます。

- キーストアにシークレットを追加するには、ADD を指定します。

- キーストア内の既存のシークレットを更新するには、UPDATEを指定します。

- secretには、追加または更新するシークレットを指定します。シークレットは英数字の文字列です。シークレットは一重引用符で囲みます。

- client_identifierには、シークレットの識別に使用する英数字の文字列を指定します。client_identifierは一重引用符で囲みます。

- オプションのUSING TAG句を指定すると、secretにタグを関連付けできます。tagはオプションで、シークレットに関するユーザー定義の記述子です。タグは一重引用符で囲みます。シークレットのタグは、V$CLIENT_SECRETSビューのSECRET_TAG列を問い合せることで確認できます。

- keystore_passwordには、そのキーストアのパスワードを指定します。

- WITH BACKUP句とオプションのUSING 'backup_identifier'句を指定すると、パスワードベースのソフトウェア・キーストアのシークレットが追加または更新される前に、キーストアのバックアップが作成されます。詳細は、「WITH BACKUP句の注意事項」を参照してください。

delete_secret

この句を使用してシークレットを削除できます。

- client_identifierには、シークレットの識別に使用する英数字の文字列を指定します。client_identifierは一重引用符で囲みます。V$CLIENT_SECRETSビューのCLIENT列を問い合せることで、クライアント識別子を表示できます。

- keystore_passwordには、そのキーストアのパスワードを指定します。

- WITH BACKUP句とオプションのUSING 'backup_identifier'句を指定すると、パスワードベースのソフトウェア・キーストアからシークレットが削除される前に、キーストアのバックアップが作成されます。詳細は、「WITH BACKUP句の注意事項」を参照してください。

キーストア・パスワードを指定するときの注意事項 キーストア・パスワードは次のように指定します。

- パスワードベースのソフトウェア・キーストアの場合は、文字列としてパスワードを指定します。パスワードを二重引用符で囲むこともできます。引用符の有無にかかわらず、パスワードは大文字と小文字が区別されます。キーストアのパスワードはデータベース・ユーザーのパスワードと同じ規則に従います。詳細は、「CREATE USER」の「BY password」句を参照してください。

- ハードウェア・キーストアの場合は、"user_id:password"の形式の文字列としてパスワードを指定します。

- user_idは、HSM管理インタフェースを使用してデータベース用に作成されたユーザーIDです。

- passwordは、HSM管理インタフェースを使用してユーザーIDに対して作成されたパスワードです。

user_id:passwordの文字列は二重引用符(" ")囲み、user_idとpasswordはコロン(:)で区切ります。

WITH BACKUP句の注意事項 多くのADMINISTER KEY MANAGEMENT操作には、WITH BACKUP句が含まれます。この句は、パスワードベースのソフトウェア・キーストアにのみ適用されます。これは、この操作を実行する前に、キーストアをバックアップする必要があることを意味しています。このため、操作を実行するときにWITH BACKUP句を指定するか、操作を実行する直前にADMINISTER KEY MANAGEMENT backup_clause文を発行する必要があります。

WITH BACKUP句を指定すると、Oracle Databaseは、ewallet_timestamp.p12という形式の名前でバックアップ・ファイルを作成します。timestampは、UTC形式でのファイル作成時のタイムスタンプです。バックアップ・ファイルは、キーストアをバックアップしているディレクトリに作成されます。

オプションのUSING 'backup_identifier'句を使用すると、バックアップ・ファイルの名前に追加するバックアップ識別子を指定できます。たとえば、バックアップ識別子に'Backup1'を指定すると、Oracle Databaseは、ewallet_timestamp_Backup1.p12という形式の名前でバックアップ・ファイルを作成します。

USING TAG句の注意事項 多くのADMINISTER KEY MANAGEMENT操作にはUSING TAG句が含まれます。この句を使用すると、タグを暗号化キーに関連付けできます。tagはオプションで、キーに関するユーザー定義の記述子です。これは一重引用符で囲まれた文字列です。

暗号化キーのタグは、V$ENCRYPTION_KEYSビューのTAG列を問い合せることで表示できます。

例

キーストアを作成する例 次の文は/etc/ORACLE/WALLETS/orclディレクトリ内にパスワードベースのソフトウェア・キーストアを作成します。

ADMINISTER KEY MANAGEMENT
CREATE KEYSTORE '/etc/ORACLE/WALLETS/orcl'
IDENTIFIED BY password;

次の文は、前の文で作成されたキーストアから自動ログイン・ソフトウェア・キーストアを作成します。

ADMINISTER KEY MANAGEMENT
CREATE AUTO_LOGIN KEYSTORE FROM KEYSTORE '/etc/ORACLE/WALLETS/orcl'
IDENTIFIED BY password;

キーストアを開く例 次の文は、パスワードベースのソフトウェア・キーストアを開きます。

ADMINISTER KEY MANAGEMENT
SET KEYSTORE OPEN
IDENTIFIED BY password;

CDBに接続している場合、次の文は現在のコンテナ内のパスワードベースのソフトウェア・キーストアを開きます。

ADMINISTER KEY MANAGEMENT
SET KEYSTORE OPEN
IDENTIFIED BY password
CONTAINER = CURRENT;

次の文はハードウェア・キーストアを開きます。

ADMINISTER KEY MANAGEMENT
SET KEYSTORE OPEN
IDENTIFIED BY "user_id:password";

キーストアを閉じる例 次の文はパスワードベースのソフトウェア・キーストアを閉じます。

ADMINISTER KEY MANAGEMENT
SET KEYSTORE CLOSE
IDENTIFIED BY password;

次の文は、自動ログイン・ソフトウェア・キーストアを閉じます。

ADMINISTER KEY MANAGEMENT
SET KEYSTORE CLOSE;

次の文は、ハードウェア・キーストアを閉じます。

ADMINISTER KEY MANAGEMENT
SET KEYSTORE CLOSE
IDENTIFIED BY "user_id:password";

キーストアをバックアップする例 次の文は、パスワードベースのソフトウェア・キーストアのバックアップを作成します。バックアップは、/etc/ORACLE/KEYSTORE/DB1ディレクトリに格納され、バックアップ・ファイル名にタグhr.emp_keystoreが含まれます。

ADMINISTER KEY MANAGEMENT
BACKUP KEYSTORE USING 'hr.emp_keystore'
IDENTIFIED BY password
TO '/etc/ORACLE/KEYSTORE/DB1/';

キーストア・パスワードを変更する例 次の文は、パスワードベースのソフトウェア・キーストアのパスワードを変更します。パスワードを変更する前に、キーストアのバックアップもタグpwd_change付きで作成します。

ADMINISTER KEY MANAGEMENT
ALTER KEYSTORE PASSWORD IDENTIFIED BY old_password
SET new_password WITH BACKUP USING 'pwd_change';

2つのキーストアを1つの新しいキーストアにマージする例 次の文は、自動ログイン・ソフトウェア・キーストアとパスワードベースのソフトウェア・キーストアをマージして、1つの新しいパスワードベースのソフトウェア・キーストアを別の場所に作成します。

ADMINISTER KEY MANAGEMENT
MERGE KEYSTORE '/etc/ORACLE/KEYSTORE/DB1'
AND KEYSTORE '/etc/ORACLE/KEYSTORE/DB2'
IDENTIFIED BY existing_keystore_password
INTO NEW KEYSTORE '/etc/ORACLE/KEYSTORE/DB3'
IDENTIFIED BY new_keystore_password;

キーストアを既存のキーストアにマージする例 次の文は、自動ログイン・ソフトウェア・キーストアをパスワードベースのソフトウェア・キーストアにマージします。マージを実行する前に、パスワードベースのソフトウェア・キーストアのバックアップも作成します。

ADMINISTER KEY MANAGEMENT
MERGE KEYSTORE '/etc/ORACLE/KEYSTORE/DB1'
INTO EXISTING KEYSTORE '/etc/ORACLE/KEYSTORE/DB2'
IDENTIFIED BY existing_keystore_password
WITH BACKUP;

マスター暗号化キーを作成しアクティブ化する例 次の文は、パスワードベースのソフトウェア・キーストア内にマスター暗号化キーを作成し、アクティブ化します。新しいマスター暗号化キーを作成する前に、キーストアのバックアップも作成します。

ADMINISTER KEY MANAGEMENT
SET KEY IDENTIFIED BY password
WITH BACKUP;

次の文は、パスワードベースのソフトウェア・キーストア内にマスター暗号化キーを作成しますが、そのキーをアクティブ化しません。新しいマスター暗号化キーを作成する前に、キーストアのバックアップも作成します。

ADMINISTER KEY MANAGEMENT
CREATE KEY USING TAG 'mykey1'
IDENTIFIED BY password
WITH BACKUP;

次の問合せは、前の文で作成されたマスター暗号化キーのキー識別子を表示します。

SELECT TAG, KEY_ID
FROM V$ENCRYPTION_KEYS
WHERE TAG = 'mykey1';

TAG     KEY_ID
---     ----------------------------------------------------
mykey1  ARgEtzPxpE/Nv8WdPu8LJJUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

次の文は、前の文で問合せのあったマスター暗号化キーをアクティブ化します。新しいマスター暗号化キーをアクティブ化する前に、キーストアのバックアップも作成します。

ADMINISTER KEY MANAGEMENT
USE KEY 'ARgEtzPxpE/Nv8WdPu8LJJUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
IDENTIFIED BY password
WITH BACKUP;

キー・タグを設定する例 次の文は、前の例でアクティブ化されたマスター暗号化キーのタグをmykey2に変更します。タグを変更する前に、キーストアのバックアップも作成します。

ADMINISTER KEY MANAGEMENT
SET TAG 'mykey2' FOR 'ARgEtzPxpE/Nv8WdPu8LJJUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA'
IDENTIFIED BY password
WITH BACKUP;

キーをエクスポートする例 次の文は、パスワードベースのソフトウェア・キーストアから/etc/TDE/export.expファイルに2つのマスター暗号化キーをエクスポートします。この文は、シークレットmy_secretを使用してそのファイルの内のマスター暗号化キーを暗号化します。エクスポートされるマスター暗号化キーの識別子は、カンマ区切りのリストとして提供されます。

ADMINISTER KEY MANAGEMENT
EXPORT KEYS WITH SECRET "my_secret"
TO '/etc/TDE/export.exp'
IDENTIFIED BY password
WITH IDENTIFIER IN 'AdoxnJ0uH08cv7xkz83ovwsAAAAAAAAAAAAAAAAAAAAAAAAAAAAA',
'AW5z3CoyKE/yv3cNT5CWCXUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA';

次の文は、パスワードベースのソフトウェア・キーストアから/etc/TDE/export.expファイルにマスター暗号化キーをエクスポートします。タグがmytag1またはmytag2であるキーのみがエクスポートされます。ファイル内のマスター鍵は、シークレットmy_secretを使用して暗号化されます。キー識別子は、V$ENCRYPTION_KEYSビューに問い合せて見つけます。

ADMINISTER KEY MANAGEMENT
EXPORT KEYS WITH SECRET "my_secret"
TO '/etc/TDE/export.exp'
IDENTIFIED BY password
WITH IDENTIFIER IN
(SELECT KEY_ID FROM V$ENCRYPTION_KEYS WHERE TAG IN ('mytag1', 'mytag2'));

次の文は、データベースのすべてのマスター暗号化キーを/etc/TDE/export.expファイルにエクスポートします。ファイル内のマスター鍵は、シークレットmy_secretを使用して暗号化されます。

ADMINISTER KEY MANAGEMENT
EXPORT KEYS WITH SECRET "my_secret"
TO '/etc/TDE/export.exp'
IDENTIFIED BY password;

マルチテナント環境で、次の文は、PDB salespdbのすべてのマスター暗号化キーをメタデータとともに/etc/TDE/salespdb.expファイルにエクスポートします。ファイル内のマスター鍵は、シークレットmy_secretを使用して暗号化されます。その後、PDBのクローンを作成する場合や、PDBを切断して再接続する場合には、この文で作成されたエクスポート・ファイルを使用して、クローンとして作成したPDB、または新たに接続したPDBにキーをインポートできます。

ALTER SESSION SET CONTAINER = salespdb;
ADMINISTER KEY MANAGEMENT
EXPORT KEYS WITH SECRET "my_secret"
TO '/etc/TDE/salespdb.exp'
IDENTIFIED BY password;

キーをインポートする例 次の文は、/etc/TDE/export.expファイルからパスワードベースのソフトウェア・キーストアに、シークレットmy_secretで暗号化されたマスター暗号化キーをインポートします。キーをインポートする前に、パスワードベースのソフトウェア・キーストアのバックアップも作成します。

ADMINISTER KEY MANAGEMENT
IMPORT KEYS WITH SECRET "my_secret"
FROM '/etc/TDE/export.exp'
IDENTIFIED BY password
WITH BACKUP;

キーの移行の例: 次の文は、パスワードベースのソフトウェア・キーストアからハードウェア・キーストアへの移行を実行します。移行を実行する前に、パスワードベースのソフトウェア・キーストアのバックアップも作成します。

ADMINISTER KEY MANAGEMENT
SET ENCRYPTION KEY IDENTIFIED BY "user_id:password"
MIGRATE USING software_keystore_password
WITH BACKUP;

キーストアの逆方向の移行の例: 次の文は、ハードウェア・キーストアからパスワードベースのソフトウェア・キーストアへの逆方向の移行を実行します。

ADMINISTER KEY MANAGEMENT
SET ENCRYPTION KEY IDENTIFIED BY software_keystore_password
REVERSE MIGRATE USING "user_id:password";

シークレットをキーストアに追加する例 次の文は、クライアントclient1のシークレットsecret1をタグMy first secret付きでパスワードベースのソフトウェア・キーストアに追加します。シークレットを追加する前に、パスワードベースのソフトウェア・キーストアのバックアップも作成します。

ADMINISTER KEY MANAGEMENT
ADD SECRET 'secret1' FOR CLIENT 'client1'
USING TAG 'My first secret'
IDENTIFIED BY password
WITH BACKUP;

次の文は、類似したシークレットをハードウェア・キーストアに追加します。

ADMINISTER KEY MANAGEMENT
ADD SECRET 'secret2' FOR CLIENT 'client2'
USING TAG 'My second secret'
IDENTIFIED BY "user_id:password";

キーストア内のシークレットを更新する例 次の文は、前の例でパスワードベースのソフトウェア・キーストア内に作成されたシークレットを更新します。シークレットを更新する前に、パスワードベースのソフトウェア・キーストアのバックアップも作成します。

ADMINISTER KEY MANAGEMENT
UPDATE SECRET 'secret1' FOR CLIENT 'client1'
USING TAG 'New Tag 1'
IDENTIFIED BY password
WITH BACKUP;

次の文は、前の例でハードウェア・キーストア内に作成されたシークレットを更新します。

ADMINISTER KEY MANAGEMENT
UPDATE SECRET 'secret2' FOR CLIENT 'client2'
USING TAG 'New Tag 2'
IDENTIFIED BY "user_id:password";

キーストアからシークレットを削除する例 次の文は、前の例で更新されたシークレットをパスワードベースのソフトウェア・キーストアから削除します。シークレットを削除する前に、パスワードベースのソフトウェア・キーストアのバックアップも作成します。

ADMINISTER KEY MANAGEMENT
DELETE SECRET FOR CLIENT 'client1'
IDENTIFIED BY password
WITH BACKUP;

次の文は、前の例で更新されたシークレットをハードウェア・キーストアから削除します。

ADMINISTER KEY MANAGEMENT
DELETE SECRET FOR CLIENT 'client2'
IDENTIFIED BY "user_id:password";

ALTER AUDIT POLICY (統合監査)

このセクションでは、統合監査のためのALTER AUDIT POLICY文について説明します。この種類の監査は、Oracle Database 12cで新たに導入されたもので、完全かつ高度な監査機能を提供します。統合監査の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

用途

ALTER AUDIT POLICY文を使用すると、統合監査ポリシーを変更できます。

関連項目:

- CREATE AUDIT POLICY (統合監査)

- DROP AUDIT POLICY (統合監査)

- AUDIT (統合監査)

- NOAUDIT (統合監査)

前提条件

AUDIT SYSTEMシステム権限、またはAUDIT_ADMINロールが必要になります。

マルチテナント・コンテナ・データベース(CDB)に接続している場合、共通の統合監査ポリシーを変更するには、現在のコンテナがルートである必要があります。また、共通に付与されているAUDIT SYSTEM権限またはAUDIT_ADMIN共通ロールが必要です。ローカルの統合監査ポリシーを変更するには、現在のコンテナが、その監査ポリシーが作成されたコンテナである必要があります。また、共通に付与されているAUDIT SYSTEM権限またはAUDIT_ADMIN共通ロールを保有しているか、そのコンテナでローカルに付与されているAUDIT SYSTEM権限またはAUDIT_ADMINローカル・ロールを保有している必要があります。

構文

alter_audit_policy::=

注意:
ADD句またはDROP句を指定するときには、少なくともprivilege_audit_clause句、action_audit_clause句、またはrole_audit_clause句のいずれか1つを指定する必要があります。

(privilege_audit_clause::=、action_audit_clause::=、role_audit_clause::=を参照)

privilege_audit_clause::=

action_audit_clause::=

standard_actions::=

component_actions::=

role_audit_clause::=

セマンティクス

ポリシー

変更する統合監査ポリシーの名前を指定します。このポリシーは、CREATE AUDIT POLICY文を使用して作成されている必要があります。すべての監査ポリシーの説明を確認するには、AUDIT_UNIFIED_POLICIESビューを問い合せます。

関連項目:

- CREATE AUDIT POLICY (統合監査)

- AUDIT_UNIFIED_POLICIESビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

ADD | DROP

ADD句を使用すると、監査対象になる権限をpolicyに追加できます。

DROP句を使用すると、監査対象になる権限をpolicyから削除できます。

これらの句のセマンティクスの詳細は、CREATE AUDIT POLICYの「privilege_audit_clause」、「action_audit_clause」、および「role_audit_clause」を参照してください。

CONDITION

この句を使用すると、policyの監査条件を削除、追加または置換できます。

DROPを指定すると、policyから監査条件を削除できます。

policyの監査条件を追加または置換するには、'audit_condition' ... を指定します。

これらの句のセマンティクスの詳細は、CREATE AUDIT POLICYの「audit_condition」、「EVALUATE PER STATEMENT」、「EVALUATE PER SESSION」、および「EVALUATE PER INSTANCE」を参照してください。

例

次の例では、CREATE AUDIT POLICYの「例」で作成した統合監査ポリシーを変更します。

統合監査ポリシーに権限、アクションおよびロールを追加する例 次の文では、システム権限のCREATE ANY TABLEとDROP ANY TABLEを統合監査ポリシーdml_polに追加します。

ALTER AUDIT POLICY dml_pol
ADD PRIVILEGES CREATE ANY TABLE, DROP ANY TABLE;

次の文では、システム・アクションのCREATE JAVA、ALTER JAVAおよびDROP JAVAを統合監査ポリシーjava_polに追加します。

ALTER AUDIT POLICY java_pol
ADD ACTIONS CREATE JAVA, ALTER JAVA, DROP JAVA;

次の文では、ロールのdbaを統合監査ポリシーtable_polに追加します。

ALTER AUDIT POLICY table_pol
ADD ROLES dba;

次の文では、複数のシステム権限、アクションおよびロールを統合監視ポリシーsecurity_polに追加します。

ALTER AUDIT POLICY security_pol
ADD PRIVILEGES CREATE ANY LIBRARY, DROP ANY LIBRARY
ACTIONS DELETE on hr.employees,
INSERT on hr.employees,
UPDATE on hr.employees,
ALL on hr.departments
ROLES dba, connect;

統合監査ポリシーから権限、アクションおよびロールを削除する例 次の文では、システム権限CREATE ANY TABLEを統合監査ポリシーtable_polから削除します。

ALTER AUDIT POLICY table_pol
DROP PRIVILEGES CREATE ANY TABLE;

次の文では、hr.employeesに対するINSERTおよびUPDATEアクションを統合監査ポリシーdml_polから削除します。

ALTER AUDIT POLICY dml_pol
DROP ACTIONS INSERT on hr.employees,
UPDATE on hr.employees;

次の文では、ロールのjava_deployを統合監査ポリシーjava_polから削除します。

ALTER AUDIT POLICY java_pol
DROP ROLES java_deploy;

次の文では、システム権限、アクションおよびロールを統合監視ポリシーhr_admin_polから削除します。

ALTER AUDIT POLICY hr_admin_pol
DROP PRIVILEGES CREATE ANY TABLE
ACTIONS LOCK TABLE
ROLES audit_viewer;

統合監査ポリシーにアクションを追加および削除する例 次の文では、Oracle Data Pump用のEXPORTアクションを統合監査ポリシーdp_actions_polに追加して、Oracle Data Pump用のIMPORTアクションを削除します。

ALTER AUDIT POLICY dp_actions_pol
ADD ACTIONS COMPONENT = datapump EXPORT
DROP ACTIONS COMPONENT = datapump IMPORT;

統合監査ポリシーから監査条件を削除する例 次の文では、監査条件を統合監査ポリシーorder_updates_polから削除します。

ALTER AUDIT POLICY order_updates_pol
CONDITION DROP;

統合監査ポリシーの監査条件を変更する例 次の文では、統合監査ポリシーemp_updates_polの監査条件を変更して、UIDが102のユーザーが監査可能な文を発行したときにのみ、このポリシーを適用します。

ALTER AUDIT POLICY emp_updates_pol
CONDITION 'UID = 102'
EVALUATE PER STATEMENT;

ALTER CLUSTER

用途

ALTER CLUSTER文を使用すると、クラスタの記憶特性および並列特性を再定義できます。

注意:
クラスタ・キーの列番号および列名を変更するためにこの文を使用することはできません。また、クラスタを格納する表領域を変更することはできません。

関連項目:
クラスタの作成については、「CREATE CLUSTER」を参照してください。クラスタからの表の削除については、「DROP CLUSTER」および「DROP TABLE」を参照してください。クラスタへの表の追加については、「CREATE TABLE」の「physical_properties」を参照してください。

前提条件

クラスタが自分のスキーマ内にあるか、またはALTER ANY CLUSTERシステム権限が必要です。

構文

alter_cluster::=

(physical_attributes_clause ::=、size_clause::=、MODIFY PARTITION、allocate_extent_clause ::=、deallocate_unused_clause ::=、parallel_clause::=を参照)

physical_attributes_clause ::=

(storage_clause::=を参照)

allocate_extent_clause ::=

(size_clause::=を参照)

deallocate_unused_clause ::=

(size_clause::=を参照)

parallel_clause::=

セマンティクス

schema

クラスタが含まれているスキーマを指定します。schemaを指定しない場合、クラスタは自分のスキーマ内にあるとみなされます。

cluster

変更するクラスタの名前を指定します。

physical_attributes_clause

クラスタのPCTUSEDパラメータ、PCTFREEパラメータおよびINITRANSパラメータの値を変更します。

クラスタの記憶特性を変更するには、STORAGE句を使用します。

関連項目:

- パラメータの詳細は、「physical_attributes_clause」を参照してください。

- その句の詳細は、「storage_clause」を参照してください。

物理属性の制限事項: クラスタの記憶域パラメータINITIALおよびMINEXTENTSの値は変更できません。

SIZE integer

SIZE句を使用すると、クラスタに割り当てられたデータ・ブロック中に格納されるクラスタ・キーの数を指定できます。

SIZEの制限事項: ハッシュ・クラスタではなく、索引クラスタのSIZEパラメータのみを変更できます。

関連項目:
SIZEパラメータについては、「CREATE CLUSTER」および「クラスタの変更例:」を参照してください。

MODIFY PARTITION

MODIFY PARTITION partition allocate_extent_clauseを指定すると、クラスタ・パーティションの新しいエクステントを明示的に割り当てることができます。この操作はレンジ・パーティション・ハッシュ・クラスタにのみ有効で、Oracle Database 12cリリース1(12.1.0.2)から使用可能です。partitionには、クラスタ・パーティション名を指定します。

allocate_extent_clause

allocate_extent_clauseを指定すると、クラスタの新しいエクステントを明示的に割り当てることができます。この操作は、索引クラスタおよび非パーティション・ハッシュ・クラスタにのみ有効です。

allocate_extent_clauseを使用して明示的にエクステントを割り当てるときは、表を作成するときとは異なり、Oracle Databaseがクラスタの記憶域パラメータを評価して次に割り当てるエクステントの新しいサイズを決定することはありません。したがって、Oracle Databaseのデフォルト値が使用されるのを避けるにはSIZEを指定してください。

関連項目:
この句の詳細は、「allocate_extent_clause」を参照してください。

deallocate_unused_clause

deallocate_unused_clause句を使用すると、クラスタの終わりの未使用領域の割当てを明示的に解除し、解放された領域が他のセグメントで使用可能になります。

関連項目:
この句の詳細は、「deallocate_unused_clause」および「未使用領域の解放例:」を参照してください。

CACHE | NOCACHE

この句の動作は、CREATE CLUSTER文およびALTER CLUSTER文で同じです。

関連項目:
この句の詳細は、「CACHE | NOCACHE」を参照してください。

parallel_clause

parallel_clauseを指定すると、クラスタの問合せのデフォルト並列度を変更できます。

関連項目:
この句の詳細は、「CREATE TABLE」の「parallel_clause 」を参照してください。

例

次に、「CREATE CLUSTER」の「例」で作成したクラスタを変更する例を示します。

クラスタの変更例: 次の文は、personnelクラスタを変更します。

ALTER CLUSTER personnel
SIZE 1024 CACHE;

この結果、各クラスタ・キー値に1024バイトが割り当てられ、CACHE属性が有効になります。データ・ブロックのサイズを2KBと想定した場合、このクラスタ内の今後のデータ・ブロックには、各ブロックに2つのクラスタ・キー(2KBを1024バイトで割った値)が含まれます。

未使用領域の解放例: 次の文は、languageクラスタから未使用領域の割当てを解除し、後で使用できるように30KBの未使用領域を保持します。

ALTER CLUSTER language
DEALLOCATE UNUSED KEEP 30 K;

ALTER DATABASE

用途

ALTER DATABASE文を使用すると、既存のデータベースを変更、メンテナンスまたはリカバリできます。

関連項目:

- メディア・リカバリの実行例については、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

- スタンバイ・データベースをメンテナンスするためにALTER DATABASE文を使用する場合の詳細は、『Oracle Data Guard概要および管理』を参照してください。

- データベースの作成の詳細は、「CREATE DATABASE」を参照してください。

前提条件

ALTER DATABASEシステム権限が必要です。

startup_clausesを指定するには、AS SYSDBA、AS SYSOPER、AS SYSBACKUPまたはAS SYSDGとして接続している必要もあります。

general_recovery句を指定する場合は、SYSDBAまたはSYSBACKUPシステム権限も必要です。

DEFAULT EDITION句を指定するには、指定されたエディションのUSEオブジェクト権限のWITH GRANT OPTIONも必要です。

マルチテナント・コンテナ・データベース(CDB)に接続しているときには、次の条件が適用されます。

- CDB全体を変更する場合は、現在のコンテナがルートである必要があります。また、共通に付与されているALTER DATABASE権限が必要です。

- コンテナを変更する場合は、そのコンテナが現在のコンテナである必要があります。また、ALTER DATABASE権限(共通に付与されている権限か、そのコンテナでローカルに付与されている権限のいずれか)が必要です。

関連項目:
ALTER DATABASE句がCDB全体を変更する句かまたはコンテナのみを変更する句かの判断については、「CDBでALTER DATABASEを使用するときの注意事項」を参照してください。

構文

alter_database::=

ALTER DATABASE構文のグループは、次のとおりです。

- startup_clauses::=

- recovery_clauses ::=

- database_file_clauses ::=

- logfile_clauses ::=

- controlfile_clauses ::=

- standby_database_clauses ::=

- default_settings_clauses::=

- instance_clauses::=

- security_clause ::=

startup_clauses::=

recovery_clauses ::=

(general_recovery ::=、managed_standby_recovery::=を参照)

general_recovery ::=

(full_database_recovery ::=、partial_database_recovery::=、parallel_clause::=)

full_database_recovery ::=

partial_database_recovery::=

parallel_clause::=

managed_standby_recovery::=

(parallel_clause ::=を参照)

注意:
managed_standby_recoveryのいくつかの副次句は不要であり、その使用は非推奨になっています。これらの副次句は、構文図にも記載されていません。「managed_standby_recovery」のセマンティクスを参照してください。

database_file_clauses ::=

(create_datafile_clause::=、alter_datafile_clause::=、alter_tempfile_clause::=、move_datafile_clause::=を参照)

create_datafile_clause::=

(file_specification::=を参照)

alter_datafile_clause::=

(autoextend_clause ::=、size_clause::=を参照)

alter_tempfile_clause::=

(autoextend_clause ::=、size_clause::=を参照)

move_datafile_clause::=

ASM_filename::=

autoextend_clause::=

maxsize_clause::=

(size_clause::=を参照)

logfile_clauses ::=

(logfile_descriptor::=、add_logfile_clauses::=、drop_logfile_clauses::=、switch_logfile_clause::=、supplemental_db_logging ::=を参照)

add_logfile_clauses::=

(redo_log_file_spec::=、logfile_descriptor::=を参照)

drop_logfile_clauses::=

(logfile_descriptor::=を参照)

switch_logfile_clause::=

supplemental_db_logging ::=

(supplemental_id_key_clause::=を参照)

supplemental_id_key_clause::=

supplemental_plsql_clause::=

logfile_descriptor::=

controlfile_clauses ::=

(trace_file_clause::=を参照)

trace_file_clause::=

standby_database_clauses ::=

(activate_standby_db_clause::=、maximize_standby_db_clause::=、register_logfile_clause::=、commit_switchover_clause::=、start_standby_clause::=、stop_standby_clause::=、convert_database_clause::=、parallel_clause::=、switchover_clause::=、failover_clause::=を参照)

activate_standby_db_clause::=

maximize_standby_db_clause::=

register_logfile_clause::=

(file_specification::=を参照)

switchover_clause::=

failover_clause::=

commit_switchover_clause::=

start_standby_clause::=

stop_standby_clause::=

convert_database_clause::=

default_settings_clauses::=

(flashback_mode_clause ::=、set_time_zone_clause::=を参照)

set_time_zone_clause::=

flashback_mode_clause ::=

instance_clauses::=

security_clause ::=

セマンティクス

CDBでALTER DATABASEを使用するときの注意事項 CDBに接続しているときにALTER DATABASE文を発行する場合、この文の動作は、現在のコンテナおよび指定した句によって変わります。

現在のコンテナがルートである場合、次の句を含むALTER DATABASE文を使用すると、CDB全体が変更されます。これらの句を指定するには、共通に付与されているALTER DATABASE権限が必要です。

- startup_clauses

- recovery_clauses
注意: 個々のプラガブル・データベース(PDB)のバックアップとリカバリ用に、recovery_clausesのサブセットがサポートされています。これらの句を指定するには、ALTER DATABASE権限(共通に付与されている権限か、そのPDBでローカルに付与されている権限のいずれか)が必要です。詳細は、「CDBでのrecovery_clausesの使用の注意事項」を参照してください。

- logfile_clauses

- controlfile_clauses

- standby_database_clauses

- instance_clauses

- security_clause

- RENAME GLOBAL_NAME TO

- ENABLE BLOCK CHANGE TRACKING

- DISABLE BLOCK CHANGE TRACKING

現在のコンテナがルートの場合、次の句を含むALTER DATABASE文を使用すると、ルートのみが変更されます。これらの句を指定するには、ALTER DATABASE権限(共通に付与されている権限か、そのルートでローカルに付与されている権限のいずれか)が必要です。

- database_file_clauses

- DEFAULT EDITION

- DEFAULT TABLESPACE

現在のコンテナがルートの場合、次の句を含むALTER DATABASE文を使用すると、ルートが変更され、PDBにデフォルト値が設定されます。これらの句を指定するには、共通に付与されているALTER DATABASE権限が必要です。

- DEFAULT TEMPORARY TABLESPACE

- flashback_mode_clause

- SET DEFAULT { BIGFILE | SMALLFILE } TABLESPACE

- set_time_zone_clause

現在のコンテナがPDBである場合、ALTER DATABASE文を使用すると、そのPDBが変更されます。この場合、ALTER PLUGGABLE DATABASE文でもサポートされるALTER DATABASE句のみを発行できます。この機能は、CDBに移行したアプリケーションの下位互換性を維持するために用意されています。例外はPDBストレージの限度の変更です。これには、ALTER PLUGGABLE DATABASEのpdb_storage_clauseを使用する必要があります。これらの句の詳細は、ALTER PLUGGABLE DATABASEのドキュメントを参照してください。

database

変更するデータベースの名前を指定します。databaseを省略した場合は、初期化パラメータDB_NAMEの値によって特定されたデータベースが変更されます。なお、データベースの制御ファイルが初期化パラメータCONTROL_FILESに指定されている場合にのみ、そのデータベースを変更できます。データベース識別子は、Oracle Netのデータベース指定とは関係ありません。

startup_clauses

startup_clausesを使用すると、データベースをマウントおよびオープンして、アクセス可能にできます。

MOUNT句

MOUNT句を使用すると、データベースをマウントできます。データベースがすでにマウントされている場合、この句は使用できません。

MOUNT STANDBY DATABASE MOUNT STANDBY DATABASEを指定すると、フィジカル・スタンバイ・データベースをマウントできます。キーワードSTANDBY DATABASEは省略可能です(マウントされるデータベースがプライマリとセカンダリのどちらであるかは自動的に判別されるため)。この文が実行されるとすぐに、スタンバイ・インスタンスはプライマリ・インスタンスからREDOデータを受信できるようになります。

関連項目:
スタンバイ・データベースの詳細は、『Oracle Data Guard概要および管理』を参照してください。

MOUNT CLONE DATABASE MOUNT CLONE DATABASEを指定すると、クローン・データベースをマウントできます。

OPEN句

OPEN句を使用すると、データベースを使用可能な状態にできます。データベースをオープンするには、マウントしておく必要があります。

OPENを他のキーワードを指定せずに単独で指定した場合のデフォルトは、プライマリ・データベース、ロジカル・スタンバイ・データベースまたはスナップショット・スタンバイ・データベースではOPEN READ WRITE NORESETLOGS、フィジカル・スタンバイ・データベースではOPEN READ ONLYです。

OPEN READ WRITE OPEN READ WRITEを指定すると、読取り/書込みモードでデータベースがオープンされ、ユーザーはREDOログを生成できるようになります。これは、プライマリ・データベースをオープンするときのデフォルトです。この句は、フィジカル・スタンバイ・データベースに対しては指定できません。

関連項目:
「READ ONLY | READ WRITEの例:」

RESETLOGS | NORESETLOGS 現行のログ順序番号を1にリセットし、アーカイブされていないログ(現行のログを含む)をアーカイブして、リカバリ時に適用されなかったREDO情報を今後適用されないように破棄するかどうかを指定します。Oracle Databaseは、この句の設定が必要な次の状況を除き、NORESETLOGSを自動的に使用します。

- 次の場合は、RESETLOGSを指定する必要があります。

- 不完全メディア・リカバリ、またはバックアップ制御ファイルを使用してメディア・リカバリを実行した後

- 前回の不完全なOPEN RESETLOGS操作の後

- FLASHBACK DATABASE処理の後

- 作成した制御ファイルをマウントした場合、オンライン・ログが失われたときはRESETLOGSを、失われていないときはNORESETLOGSを指定する必要があります。

UPGRADE | DOWNGRADE データベースをアップグレードまたはダウングレードする場合にかぎり、これらのOPEN句パラメータを使用します。この句は、Oracle Databaseに対して、アップグレードとダウングレードにそれぞれ必要なシステム・パラメータを動的に変更するように指示します。SQL*PlusのSTARTUP UPGRADEコマンドまたはSTARTUP DOWNGRADEコマンドでも、同じ結果が得られます。

CDBのUPGRADEパラメータまたはDOWNGRADEパラメータを使用すると、ルート・コンテナは指定したモードで開かれますが、それ以外のコンテナはすべてREAD WRITEモードで開かれます。

関連項目:

- データベースをあるリリースから別のリリースにアップグレードまたはダウングレードする手順については、『Oracle Databaseアップグレード・ガイド』を参照してください。

- SQL*PlusのSTARTUPコマンドの詳細は、『SQL*Plusユーザーズ・ガイドおよびリファレンス』を参照してください。

OPEN READ ONLY OPEN READ ONLYを指定すると、トランザクションが読取り専用に制限され、ユーザーはREDOログを生成できなくなります。この設定は、フィジカル・スタンバイ・データベースをオープンするときのデフォルトであり、このように設定すると、プライマリ・データベース・サイトからのアーカイブ・ログのコピー中でも、フィジカル・スタンバイ・データベースが問合せに使用可能になります。

データベースのオープンの制限事項: データベースのオープンには、次の制限事項があります。

- データベースが現在他のインスタンスでREAD WRITEモードでオープンされている場合、READ ONLYモードではオープンできません。

- データベースをリカバリする必要がある場合、READ ONLYモードではオープンできません。

- データベースがREAD ONLYモードでオープンされている間は、表領域をオフラインに切り替えることはできません。ただし、データファイルのオフラインとオンラインの切替えは可能であり、データベースがREAD ONLYモードでオープンされている間にオフラインのデータファイルおよび表領域をリカバリすることも可能です。

関連項目:
フィジカル・スタンバイ・データベースのオープン方法の詳細は、『Oracle Data Guard概要および管理』を参照してください。

recovery_clauses

recovery_clausesを使用すると、バックアップ後の操作を指定できます。これらすべての句では、Oracle Databaseは、現行の制御ファイルが認識しているデータファイルおよびログ・ファイルのインカネーションを使用して、データベースをリカバリします。

関連項目:
データベースのバックアップの詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』および「データベースのリカバリ例:」を参照してください。

CDB でのrecovery_clausesの使用の注意事項 現在のコンテナがルートである場合は、recovery_clausesのすべてを指定してCDB全体のバックアップとリカバリを実行できます。

現在のコンテナがPDBである場合は、recovery_clausesの次の副次句を指定してそのPDBのバックアップとリカバリを実行できます。

- BEGIN BACKUP

- END BACKUP

- full_database_recovery: DATABASEキーワードのみを指定できます。

- partial_database_recovery

- general_recoveryのLOGFILE句とCONTINUE句

前述の副次句は、ALTER PLUGGABLE DATABASEのpdb_recovery_clausesを使用して指定することもできます。「ALTER PLUGGABLE DATABASE」の構文図「pdb_recovery_clauses::=」を参照してください。

general_recovery

general_recovery句を指定すると、データベース、スタンバイ・データベース、または指定した表領域やファイルのメディア・リカバリを制御できます。インスタンスで、データベースがマウント済(オープン状態またはクローズ状態)の場合、関連ファイルが使用中でなければ、この句を使用できます。

注意:
全体的または部分的なデータベース・リカバリおよびログファイルのリカバリでは、デフォルトでパラレル化が有効になっています。並列度はデータベースによって計算されます。NOPARALLELを指定してこれらの操作の並列化を無効にすることも、並列度をPARALLEL integerで指定することもできます(それぞれの構文図を参照してください)。

一般的なデータベース・リカバリの制限事項: 一般的なリカバリには、次の制限事項があります。

- データベースがクローズ状態の場合にのみ、データベース全体をリカバリできます。

- インスタンスで、データベースが排他モードでマウントされている必要があります。

- リカバリ対象の表領域またはデータファイルがオフラインの場合、データベースがオープン状態でもクローズ状態でも、表領域またはデータファイルをリカバリできます。

- 共有サーバー・アーキテクチャでOracle Databaseに接続している場合、メディア・リカバリは実行できません。

関連項目:

- RMANメディア・リカバリおよびユーザー定義メディア・リカバリの詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

- SQL*PlusのRECOVERコマンドの詳細は、『SQL*Plusユーザーズ・ガイドおよびリファレンス』を参照してください。

AUTOMATIC

AUTOMATICを指定すると、リカバリ操作を続けるために必要な、次のアーカイブREDOログ・ファイルの名前が自動的に生成されます。LOG_ARCHIVE_DEST_nパラメータが定義されている場合は、Oracle Databaseはこのパラメータのうち、有効で使用可能なものをスキャンして、最初のローカル・アーカイブ先を決定します。このアーカイブ先をLOG_ARCHIVE_FORMATと組み合せて、ターゲットのREDOログ・ファイル名が生成されます。LOG_ARCHIVE_DEST_nパラメータが定義されていない場合は、かわりにLOG_ARCHIVE_DESTパラメータ値が使用されます。

生成された名前のファイルが見つかった場合は、そのファイルに格納されているREDOが適用されます。ファイルが見つからない場合は、ファイル名の入力を求めるプロンプトが表示され、このときに、生成されたファイル名が候補として表示されます。

AUTOMATICもLOGFILEも指定しなかった場合は、ファイル名の入力を求めるプロンプトが表示され、このときに、生成されたファイル名が候補として表示されます。この生成されたファイル名をそのまま使用することも、別の完全修飾ファイル名を入力することもできます。アーカイブ済のファイル名が、Oracle Databaseによって生成されるファイル名とは異なることがわかっている場合は、LOGFILE句を使用すると時間を節約できます。

FROM 'location'

FROM 'location'を指定すると、アーカイブREDOログ・ファイル・グループを読み取る位置を指定できます。locationには、使用するオペレーティング・システムの表記規則に従って、ファイルの位置を完全に指定する必要があります。このパラメータを指定しないと、そのアーカイブREDOログ・ファイル・グループは、初期化パラメータLOG_ARCHIVE_DESTまたはLOG_ARCHIVE_DEST_1に指定された位置にあるとみなされます。

full_database_recovery

full_database_recovery句を指定すると、データベース全体をリカバリできます。

DATABASE DATABASE句を指定すると、データベース全体をリカバリできます。これはデフォルトです。データベースがクローズされている場合にのみ、このオプションを使用できます。

STANDBY DATABASE STANDBY DATABASE句を指定すると、プライマリ・データベースからコピーされたアーカイブREDOログ・ファイルおよび制御ファイルを使用して、フィジカル・スタンバイ・データベースを手動でリカバリできます。スタンバイ・データベースは、マウントされているがオープンされていない状態である必要があります。

この句は、オンライン・データファイルのみをリカバリします。

- UNTIL句を使用すると、リカバリ操作の存続期間を指定できます。

- CANCELは、取消しベースのリカバリを示します。RECOVER CANCEL句を指定したALTER DATABASE文を発行するまで、データベース・リカバリが続行されます。

- TIMEは、時間ベースのリカバリを示します。このパラメータは、dateに指定した時点までデータベースをリカバリします。dateは、'YYYY-MM-DD:HH24:MI:SS'の書式の文字リテラルである必要があります。

- CHANGEは、変更ベースのリカバリを示します。integerに指定したシステム変更番号の直前の、トランザクションの一貫性が保たれるところまでデータベースをリカバリします。

- CONSISTENTは、データベースを読取り専用モードでオープンできるよう、すべてのオンライン・ファイルの一貫性が保たれるSCNポイントまでデータベースをリカバリします。この句では、制御ファイルがバックアップ制御ファイルである必要があります。

- 現行の制御ファイルのかわりにバックアップ制御ファイルを使用する場合、USING BACKUP CONTROLFILEを指定します。

- Storage Snapshot Optimizationを使用してストレージ・スナップショットでデータベースをリカバリするには、SNAPSHOT TIME句を指定します。この句はストレージ・スナップショットが作成されたときにデータベースがバックアップ・モードでなかったときに使用できます。

- dateは、'YYYY-MM-DD:HH24:MI:SS'形式の文字リテラルである必要があります。これはスナップショットが完了した直後の時刻を示す必要があります。UNTIL TIME句を指定する場合は、SNAPSHOT TIME dateはUNTIL TIME date以前の時刻である必要があります。

関連項目:
ストレージ・スナップショットの最適化を使用したリカバリの詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

partial_database_recovery

partial_database_recovery句を指定すると、個々の表領域およびデータファイルをリカバリできます。

TABLESPACE TABLESPACE句を指定すると、指定した表領域のみをリカバリできます。リカバリの対象となる表領域がオフラインの場合、データベースがオープン状態でもクローズ状態でも、この句を使用できます。

関連項目:
「パラレル・リカバリ処理の使用例:」

DATAFILE DATAFILE句を指定すると、指定したデータファイルをリカバリできます。リカバリ対象のデータファイルがオフラインの場合、データベースがオープン状態でもクローズ状態でも、この句を使用できます。

データファイルは、名前または番号で識別できます。番号で識別した場合、filenumberは、V$DATAFILE動的パフォーマンス・ビューのFILE#列、またはDBA_DATA_FILESデータ・ディクショナリ・ビューのFILE_ID列の数を表す整数です。

STANDBY {TABLESPACE | DATAFILE} 旧リリースでは、スタンバイ上の特定の表領域や特定のデータファイルの古いバックアップをリカバリして、残りのスタンバイ・データベースとの一貫性を確保するために、STANDBY TABLESPACEまたはSTANDBY DATAFILEを指定できました。これらの2つの句は、現在サポートされていません。かわりに、ALTER DATABASE RECOVER MANAGED STANDBY DATABASE UNTIL CONSISTENT文を使用して、一貫性のあるポイントまで(それ以上は超えずに)スタンバイ・データベースをリカバリします。

LOGFILE

LOGFILE 'filename'を指定すると、指定したREDOログ・ファイルを使用して、メディア・リカバリを続行できます。

TEST

TEST句を使用すると、試行リカバリを実行できます。試行リカバリが役立つのは、通常のリカバリ手順でなんらかの問題が発生した場合です。REDOストリームの内容をあらかじめ見ることができるので、その他に発生する可能性のある問題を検出できます。試行リカバリでは、標準リカバリに似た方法でREDOが適用されますが、ディスクへの変更書込みは行われず、リカバリによる変更は試行リカバリの終了時にロールバックされます。

この句を使用できるのは、最後のRESETLOGS操作以降に取ったバックアップをリストアする場合のみです。そうでない場合は、エラーが戻ります。

ALLOW ... CORRUPTION

ALLOW integer CORRUPTION句を指定すると、ログ・ファイルが破損した場合に、許容リカバリの続行で許容する破損ブロックの数を指定することができます。

関連項目:

- データベースのリカバリの概要は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

- スタンバイ・データベースの管理リカバリの詳細は、『Oracle Data Guard概要および管理』を参照してください。

CONTINUE

CONTINUEを指定すると、スレッドを使用禁止にするために中断されていた複数インスタンス・リカバリを再開できます。

CONTINUE DEFAULTを指定すると、他に指定されたログ・ファイルがない場合、自動的に生成されたREDOログ・ファイルを使用して、リカバリが再開されます。ファイル名の入力を求めるプロンプトが表示されないこと以外は、AUTOMATICの指定と同じです。

CANCEL

CANCELを指定すると、取消しベースのリカバリを終了できます。

managed_standby_recovery

managed_standby_recovery句を使用すると、フィジカル・スタンバイ・データベースでのREDO Applyを開始および停止できます。REDO Applyは、プライマリ・データベースから受け取るREDOを継続的に適用することで、スタンバイ・データベースとプライマリ・データベースでのトランザクションの一貫性を確保します。

プライマリ・データベースは、そのREDOデータをスタンバイ・サイトに転送します。REDOデータが、フィジカル・スタンバイ・サイトのREDOログ・ファイルに書き込まれると、REDO Applyでそのログ・ファイルを使用できるようになります。managed_standby_recovery句は、スタンバイ・インスタンスにデータベースがマウントされているか、またはスタンバイ・インスタンスが読取り専用でオープンされている場合にのみ使用できます。

注意:
Oracle Database 12c以降では、REDO Apply時にデフォルトでリアルタイム適用が有効化されます。リアルタイム適用は、スタンバイREDOログ・ファイルが書き込まれると、このログ・ファイルからすぐにREDOをリカバリします。このとき、このログ・ファイルを最初に物理スタンバイ・データベースでアーカイブする必要はありません。リアルタイム適用は、USING ARCHIVED LOGFILE句を使用して無効化できます。詳細は、次の項を参照してください。

- リアルタイム適用の詳細は、『Oracle Data Guard概要および管理』を参照してください。

- USING ARCHIVED LOGFILE句

注意:
パラレル化は、REDO Applyの実行中、デフォルトで有効になります。並列度はデータベースによって計算されます。NOPARALLELを指定してこれらの操作の並列化を無効にすることも、並列度をPARALLEL integerで指定することもできます(それぞれの構文図を参照してください)。

管理スタンバイ・リカバリの制限事項: この句には、「general_recovery」に記載されている内容と同じ制限が適用されます。

関連項目:
この句の使用の詳細は、『Oracle Data Guard概要および管理』を参照してください。

USING ARCHIVED LOGFILE句 USING ARCHIVED LOGFILEを指定すると、リアルタイム適用を有効化することなくREDO Apply開始できます。

DISCONNECT DISCONNECTを指定すると、現行のセッションを他のタスクで使用可能にしたまま、REDO Applyをバックグラウンドで実行するよう指示できます。FROM SESSIONキーワードはオプションであり、意味を明確にするためのものです。

NODELAY NODELAY句は、プライマリ・データベースのLOG_ARCHIVE_DEST_nパラメータのDELAY属性より優先されます。NODELAY句を指定しない場合は、LOG_ARCHIVE_DEST_n設定のDELAY属性に従って、アーカイブREDOログ・ファイルの適用が遅延されます(属性が設定されている場合)。このパラメータにDELAY属性が指定されていない場合、アーカイブREDOログ・ファイルは、すぐにスタンバイ・データベースに適用されます。

リアルタイム適用をUSING CURRENT LOGFILE句とともに指定すると、このスタンバイのプライマリでLOG_ARCHIVE_DEST_nパラメータに対して指定されたDELAY値は無視されます。デフォルトはNODELAYです。

UNTIL CHANGE句 この句を使用すると、特定のシステム変更番号より前のREDOデータをリカバリするようREDO Applyに指示できます。

UNTIL CONSISTENT  この句を使用すると、スタンバイ・データベースを読取り専用モードでオープンできるように、一貫性のあるSCNポイントまでスタンバイ・データベースをリカバリできます。

FINISH FINISHを指定すると、フェイルオーバー用に準備されている使用可能なすべてのREDOデータを完全に適用できます。

FINISH句を使用するのは、プライマリ・データベースに障害が発生した場合のみです。この句は、設定済の遅延間隔よりも優先され、この句を指定すると、使用可能なすべてのREDOが即座に適用されます。FINISHコマンドが完了すると、このデータベースをスタンバイ・データベース・ロールで実行することができなくなります。このデータベースは、ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY文を発行してプライマリ・データベースに変換する必要があります。

CANCEL CANCELを指定すると、REDO Applyをすぐに停止できます。REDO Applyが停止すると、すぐに制御が戻されます。

TO LOGICAL STANDBY句 この句を使用すると、フィジカル・スタンバイ・データベースをロジカル・スタンバイ・データベースに変換できます。

db_name  データベース名を指定して、新しいロジカル・スタンバイ・データベースを識別します。この文の発行時にサーバー・パラメータ・ファイル(spfile)を使用している場合、データベースは、新しいロジカル・スタンバイ・データベースに関する適切な情報でこのファイルを更新します。spfileを使用していない場合は、データベースの停止後にDB_NAMEパラメータの名前を設定するよう求めるメッセージが発行されます。さらに、この句をスタンバイ・データベースで使用する前に、プライマリ・データベースでDBMS_LOGSTDBY.BUILD PL/SQLプロシージャを起動する必要もあります。

関連項目:
DBMS_LOGSTDBY.BUILDプロシージャの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

KEEP IDENTITY ロジカル・スタンバイによって提供されるローリング・アップグレード機能を使用し、さらにプライマリ・データベースおよびフィジカル・スタンバイの元の構成に戻す場合は、この句を使用します。この句を使用して作成されたロジカル・スタンバイ・データベースでは、スイッチオーバーおよびフェイルオーバーのサポートは制限されます。そのため、この句を使用して汎用ロジカル・スタンバイ・データベースを作成しないでください。

関連項目:
ローリング・アップグレードの詳細は、『Oracle Data Guard概要および管理』を参照してください。

非推奨になる予定の管理スタンバイ・リカバリ句

以前のリリースの構文には、次の句が記載されていました。これらの句は非推奨になる予定であり、使用する必要はありません。これらの句は使用しないことをお薦めします。

FINISH FORCE、FINISH WAIT、FINISH NOWAIT FINISH句のこれらのオプションの書式は、非推奨になる予定です。ここでは下位互換性のために、これらのセマンティクスについて説明します。

- FORCEを指定すると、FINISHプロセスを開始する妨げになる非アクティブなREDO転送セッションを終了できます。

- NOWAITを指定すると、リカバリが完了する前に、フォアグラウンド・プロセスに制御が戻ります。

- WAIT(デフォルト)を指定すると、リカバリが完了してから、フォアグラウンド・プロセスに制御が戻ります。

指定されている場合、これらの句は無視されます。ターミナル・リカバリはフォアグラウンドで実行され、常にすべてのREDO転送セッションを終了します。そのため、リカバリが完了するまでユーザーに制御は戻りません。

CANCEL IMMEDIATE、CANCEL WAIT、CANCEL NOWAIT CANCEL句のこれらのオプションの書式は、非推奨になる予定です。ここでは下位互換性のために、これらのセマンティクスについて説明します。

- IMMEDIATEキーワードを指定すると、現在のREDOログ・ファイルが完全に適用される前にREDO Applyを停止できます。セッション制御は、REDO Applyが実際に停止した時点で戻ります。

- NOWAITキーワードを含めると、CANCEL操作が終了するのを待たずに、セッション制御が戻ります。

指定されている場合、これらの句は無視されます。REDO Applyは常にすぐに取り消され、操作の完了後にのみ制御がセッションに戻されます。

USING CURRENT LOGFILE句 USING CURRENT LOGFILE句は非推奨です。これにより、REDO Apply時にリアルタイム適用が起動されます。ただし、現在、これはデフォルトの動作になっているため、この句を利用する意味はなくなりました。

BACKUP句

この句を使用すると、データベース内のすべてのデータファイルをオンライン・バックアップ・モード(ホット・バックアップ・モードともいう)にしたり、このモードから戻すことができます。

関連項目:
個々の表領域のすべてのデータファイルに対するオンライン・バックアップ・モードの設定または解除の詳細は、「ALTER TABLESPACE」を参照してください。

BEGIN BACKUP句

BEGIN BACKUPを指定すると、データベース内のすべてのデータファイルがオンライン・バックアップ・モードに移行します。データベースをマウントしてオープンしておく必要があります。また、メディア・リカバリを使用可能にする(データベースをARCHIVELOGモードにする)必要があります。

データベースがオンライン・バックアップ・モードになっている間は、インスタンスの通常停止、個々の表領域のバックアップの開始、表領域のオフラインへの切替え、または表領域の読取り専用設定は実行できません。

この句は、オフラインまたは読取り専用の表領域のデータファイルには影響しません。

END BACKUP句

END BACKUPを指定すると、オンライン・バックアップ・モードの現行のデータベースにあるすべてのデータファイルを、オンライン・バックアップ・モードから戻すことができます。この操作を実行するとき、データベースはマウント済(オープン状態またはクローズ状態)である必要があります。

システム障害、インスタンス障害、またはSHUTDOWN ABORT操作の後は、オンライン・バックアップ・モードのファイルがシステム・クラッシュ時のファイルと一致するかどうかは識別されません。ファイルに一貫性がある場合、個々のデータファイル、またはすべてのデータファイルをオンライン・バックアップ・モードから戻すことができます。これによって、起動時にファイルのメディア・リカバリを回避できます。

- ALTER DATABASE DATAFILE ... END BACKUP文を使用すると、個々のデータファイルをオンライン・バックアップ・モードから戻すことができます。「database_file_clauses」を参照してください。

- ALTER TABLESPACE ... END BACKUP文を使用すると、表領域内のすべてのデータファイルをオンライン・バックアップ・モードから戻すことができます。

database_file_clauses

database_file_clausesを指定すると、データファイルおよび一時ファイルを変更できます。インスタンスで、データベースがマウント済(オープン状態またはクローズ状態)の場合、関連ファイルが使用中でなければ、次の句はどれでも使用できます。ただし、move_datafile_clauseを使用すると、使用中のデータファイルを移動できます。

RENAME FILE句

RENAME FILE句を使用すると、データファイル、一時ファイルまたはREDOログ・ファイル・メンバーの名前を変更できます。この句を指定する前に、オペレーティング・システムのファイル名の表記規則に従って、各ファイル名を指定してください。

- データファイルまたは一時ファイルにこの句を使用するには、データベースをマウントしておく必要があります。データベースはオープンしていてもかまいませんが、名前を変更するデータファイルまたは一時ファイルはオフラインにしておく必要があります。また、最初にファイル・システム上のファイルを新しい名前に変更する必要があります。

- ログ・ファイル用にこの句を使用するには、データベースはマウントされているがオープンされていない状態である必要があります。

- ブロック・チェンジ・トラッキングを使用可能にしている場合、この句を使用してブロック・チェンジ・トラッキング・ファイルの名前を変更できます。ブロック・チェンジ・トラッキング・ファイルの名前を変更する場合、データベースはマウントされているがオープンされていない状態である必要があります。

この句によって名前が変更されるのは、制御ファイル内のファイルのみです。オペレーティング・システムのファイルの名前が実際に変更されることはありません。オペレーティング・システムのファイルは引き続き存在しますが、Oracle Databaseによって使用されることはなくなります。

関連項目:

- データファイルと一時ファイルのリカバリの詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

- 「ログ・ファイル・メンバーの名前の変更例:」および「一時ファイルの操作例:」を参照してください。

create_datafile_clause

CREATE DATAFILE句を使用すると、元のデータファイルのかわりに新しい空のデータファイルを作成できます。この句を使用すると、バックアップを取らずに失われたデータファイルを再作成できます。filenameまたはfilenumberには、データベースの一部であるファイルまたは以前一部であったファイルを指定します。番号で識別した場合、filenumberは、V$DATAFILE動的パフォーマンス・ビューのFILE#列、またはDBA_DATA_FILESデータ・ディクショナリ・ビューのFILE_ID列の数を表す整数です。

- AS NEWを指定すると、データファイル用のデフォルトのファイル・システム位置に、システムが生成するファイル名で、置き換えるファイルと同じサイズのOracle Managed Filesのデータファイルが作成されます。

- AS file_specificationを指定すると、新しいデータファイルにファイル名(およびオプションでサイズ)を割り当てることができます。オペレーティング・システムのファイル・システム内の標準データファイルと一時ファイル、またはOracle Automatic Storage Management (Oracle ASM)ディスク・グループのファイルを指定するには、file_specificationのdatafile_tempfile_spec書式(「file_specification」を参照)を使用します。

元のファイル(filenameまたはfilenumber)が既存のOracle Managed Filesのデータファイルの場合、Oracle Databaseは新しいファイルを作成した後、元のファイルを削除しようとします。元のファイルが既存のユーザー管理データファイルの場合、Oracle Databaseは元のファイルを削除しません。

AS句を指定しない場合、Oracle Databaseによって、filenameまたはfilenumberに指定したファイルと同じ名前およびサイズのファイルが新しく作成されます。

リカバリ時には、元のデータファイルの作成後に書き込まれたアーカイブREDOログを、失われたデータファイルにかわる新しい空のデータファイルに適用する必要があります。

新しいファイルは、元のファイルの作成時と同じ状態で作成されます。新しいファイルを元のファイルが失われた時点の状態に戻すには、メディア・リカバリを行ってください。

データファイルの新規作成の制限事項: 新規データファイルの作成には、次の制限事項があります。

- SYSTEM表領域の最初のデータファイルに基づいて新しいファイルを作成することはできません。

- このCREATE DATAFILE句には、datafile_tempfile_specのautoextend_clauseは指定できません。

関連項目:

- 新しいデータファイル名を指定しない場合にこの句によって戻される結果の詳細は、「CREATE DATABASE」の「DATAFILE句」を参照してください。

- ファイル仕様(datafile_tempfile_spec)の詳細は、「file_specification」および「新しいデータファイルの作成例:」を参照してください。

alter_datafile_clause

DATAFILE句を使用すると、名前または番号で識別するファイルを操作できます。番号で識別した場合、filenumberは、V$DATAFILE動的パフォーマンス・ビューのFILE#列、またはDBA_DATA_FILESデータ・ディクショナリ・ビューのFILE_ID列の数を表す整数です。DATAFILE句を使用すると、次のようにデータベース・ファイルを変更できます。

ONLINE ONLINEを指定すると、データファイルをオンラインにできます。

OFFLINE OFFLINEを指定すると、データファイルがオフラインになります。データベースがオープンされている場合は、データファイルをオンラインに戻す前にデータファイルのメディア・リカバリを行う必要があります(データファイルをオフラインにする前にチェックポイントが実行されないため)。

FOR DROP データベースがNOARCHIVELOGモードの場合は、FOR DROP句を指定して、データファイルをオフラインにする必要があります。ただし、この句は、データベースからデータファイルを削除しません。そのため、オペレーティング・システムのコマンドを使用するか、またはデータファイルが存在する表領域を削除する必要があります。削除するまで、データファイルはRECOVERまたはOFFLINEの状態でデータ・ディクショナリに残ります。

データベースがARCHIVELOGモードの場合は、FOR DROP句は無視されます。

RESIZE RESIZEを指定すると、データファイルのサイズを、指定した絶対サイズ(バイト単位)まで増やしたり減らすことができます。デフォルト値はないため、必ずサイズを指定してください。

増やしたサイズに対して十分なディスク領域がない場合、または減らしたサイズを超えるデータがファイルに含まれる場合、エラー・メッセージが戻されます。

関連項目:
「データファイルのサイズの変更例:」

END BACKUP END BACKUPを指定すると、データファイルをオンライン・バックアップ・モードから戻すことができます。END BACKUP句の詳細は、ALTER DATABASE構文の最上位で説明しています。「END BACKUP句」を参照してください。

alter_tempfile_clause

TEMPFILE句を使用すると一時データファイルのサイズを変更できますが、autoextend_clauseを指定して永続データファイルの場合と同じ効果を得ることもできます。データベースはオープンしている必要があります。一時ファイルの指定は、名前と番号のどちらでもかまいません。番号で指定する場合は、filenumberに整数(V$TEMPFILE動的パフォーマンス・ビューのFILE#列に格納されている数値)を指定します。

注意:
オペレーティング・システムによっては、一時ファイルのブロックが実際にアクセスされるまで、一時ファイル用の領域が割り当てられない場合があります。領域の割当ての遅延のため、一時ファイルの作成およびサイズ変更が速くなります。ただし、後で一時ファイルが使用されるときに、十分なディスク領域を使用可能にする必要があります。問題を回避するには、一時ファイルの作成またはサイズ変更の前に、ディスクの空き領域が、新しく作成する一時ファイルまたはサイズ変更後の一時ファイルのサイズよりも大きいことを確認してください。ディスク領域に余裕を持たせておくと、関連のない操作による、予期されるディスク使用量の増加にも対応できます。その後で、作成またはサイズ変更操作を実行してください。

DROP DROPを指定すると、tempfileがデータベースから削除されます。表領域はそのまま残ります。

INCLUDING DATAFILESを指定すると、関連付けられたオペレーティング・システム・ファイルは削除され、削除された各ファイルのメッセージがアラート・ログに書き込まれます。同じ結果は、ALTER TABLESPACE ... DROP TEMPFILE文を使用しても得られます。詳細は、「ALTER TABLESPACE」の「DROP句」を参照してください。

move_datafile_clause

MOVE DATAFILE句を使用すると、オンライン・データファイルを新しい場所に移動できます。この操作を実行するときには、データベースが開かれていて、データファイルにアクセスしていてもかまいません。この処理の実行中には、データファイルのコピーが作成されます。この句を使用する前に、オリジナルのデータファイルとそのコピー用に適切なディスク領域があることを確認してください。

元のデータファイルは、file_name、ASM_filename、またはfile_numberを使用して指定できます。ASMファイル名の詳細は、ASM_filenameを参照してください。番号で識別した場合、file_numberは、V$DATAFILE動的パフォーマンス・ビューのFILE#列、またはDBA_DATA_FILESデータ・ディクショナリ・ビューのFILE_ID列の数を表す整数です。

TO句を使用すると、新しいfile_nameまたはASM_filenameを指定できます。Oracle Managed Filesを使用している場合は、TO句を省略できます。この場合、Oracle Databaseは、データファイル用に一意の名前を作成して、そのファイルをDB_CREATE_FILE_DEST初期化パラメータで指定したディレクトリに保存します。

REUSEを指定すると、すでにデータファイルが存在していても、新しいデータファイルが作成されます。

KEEPを指定すると、元のデータファイルがMOVE DATAFILE操作後に維持されるようになります。元のデータファイルがOracle Managed Fileの場合には、KEEPを指定できません。新しいデータファイルがOracle Managed Fileの場合には、KEEPを指定できます。

autoextend_clause

autoextend_clauseを使用すると、新規または既存のデータファイルまたは一時ファイルの自動拡張を使用可能または使用禁止にできます。この句の詳細は、「file_specification」を参照してください。

logfile_clauses

logfile_clausesを指定すると、ログ・ファイルを追加、削除または変更できます。

ARCHIVELOG

ARCHIVELOGを指定すると、REDOログ・ファイル・グループを再利用する前に、グループの内容をアーカイブできます。このモードでは、メディア・リカバリができるようになります。この句は、インスタンスを正常に停止したか、またはエラーなしで即時停止した後に、再起動してデータベースをマウントした後にのみ使用します。

MANUAL MANUALを指定すると、Oracle Databaseによって作成されたREDOログ・ファイルのアーカイブを、ユーザーが制御することができます。この句は、テープに直接アーカイブするユーザーなどに対して、下位互換性を保つために提供されています。MANUALを指定する場合、次のことに注意します。

- ログの切替えが発生した場合、Oracle DatabaseはREDOログ・ファイルをアーカイブしません。これは手動で行う必要があります。

- アーカイブ・ログの宛先として、スタンバイ・データベースを指定することはできません。したがって、データベースを、MAXIMUM PROTECTIONまたはMAXIMUM AVAILABILITYスタンバイ保護モードにすることはできません。

この句を指定しない場合、REDOログ・ファイルは、初期化パラメータLOG_ARCHIVE_DEST_nに指定された宛先に自動的にアーカイブされます。

NOARCHIVELOG

REDOログ・ファイル・グループを再利用する前に、内容をアーカイブする必要がない場合は、NOARCHIVELOGを指定します。このモードでは、メディア障害後のリカバリはできません。インスタンスでデータベースがマウントされているがオープンされていない場合にのみ、この句を使用します。

[NO] FORCE LOGGING

この句を使用すると、データベースをFORCE LOGGINGモードにしたり、このモードから戻すことができます。データベースは、マウントまたはオープンされている必要があります。

FORCE LOGGINGモードでは、一時表領域および一時セグメントの変更を除くデータベースのすべての変更が記録されます。この設定は、各表領域で指定するNOLOGGINGまたはFORCE LOGGING設定、および各データベース・オブジェクトで指定するNOLOGGING設定より優先され、これらの設定には影響されません。

FORCE LOGGINGを指定すると、Oracle Databaseは、まだ記録されていない実行中のすべての操作が終了するまで待機します。

関連項目:
FORCE LOGGINGモードの使用の詳細は、『Oracle Database管理者ガイド』を参照してください。

RENAME FILE句

ログ・ファイルに対するこの句の機能は、データファイルおよび一時ファイルの場合と同じです。「RENAME FILE句」を参照してください。

CLEAR LOGFILE句

CLEAR LOGFILE句を使用すると、オンラインREDOログを再初期化でき、このときにREDOログをアーカイブしないことも選択できます。CLEAR LOGFILEは、REDOログの追加および削除と似ていますが、スレッドのログが2つしかなくてもこの文を発行できる点や、現行のREDOログ・ファイルがクローズ状態のスレッドのものであっても発行できる点が異なります。

スタンバイ・データベースでは、STANDBY_FILE_MANAGEMENT初期化パラメータがAUTOに設定されており、いずれかのログ・ファイルがOracle Managed Filesである場合、Oracle Databaseによって、制御ファイル内のファイルと同数のOracle Managed Filesのログ・ファイルが作成されます。ログ・ファイル・メンバーは、ログ・ファイルの現行のデフォルト宛先に格納されます。

- アーカイブされていないREDOログを再利用する場合は、UNARCHIVEDを指定する必要があります。

注意:
リカバリのためにREDOログが必要な場合にUNARCHIVEDを指定すると、バックアップが使用できなくなります。

- ARCHIVELOGモードのデータベースでデータファイルをオフラインにする(DROPキーワードを使用せずにALTER DATABASE ... DATAFILE OFFLINEを指定する)場合、およびそのデータファイルをオンラインに戻す前に、消去するアーカイブされていないログがデータファイルのリカバリに必要な場合は、UNRECOVERABLE DATAFILEを指定する必要があります。この場合、CLEAR LOGFILE文の完了後にデータファイルおよび表領域全体を削除する必要があります。
メディア・リカバリで必要なログを、CLEAR LOGFILEを使用して消去しないでください。データベースのチェックポイント後のREDOを含むログを消去する必要がある場合は、不完全メディア・リカバリを最初に実行する必要があります。オープンしているスレッドの現行のREDOログは消去できます。クローズしているスレッドの現行のログは、そのスレッド内でログを切り替えれば消去できます。

CLEAR LOGFILE文が、システム障害またはインスタンス障害による割込みを受けると、データベースがハングする場合があります。このような状況になった場合は、データベースの再起動後に、この文を再発行します。ログ・グループのあるメンバーにアクセスしようとした際、I/Oエラーによる障害が発生した場合は、そのメンバーを削除して他のメンバーを追加できます。

関連項目:
「ログ・ファイルの消去例:」

add_logfile_clauses

この句を使用すると、データベースにREDOログ・ファイル・グループを追加したり、既存のREDOログ・ファイル・グループに新しいメンバーを追加することができます。

ADD LOGFILE句 ADD LOGFILE句を使用すると、オンラインREDOログまたはスタンバイREDOログに1つ以上のREDOログ・ファイル・グループを追加できます。

関連項目:

- 新しいログ・ファイル・グループ名を指定しない場合にこの句によってOracle Managed Filesに戻される結果の詳細は、「CREATE DATABASE」の「LOGFILE句」を参照してください。

- 「REDOログ・ファイル・グループの追加例:」

- スタンバイREDOログの詳細は、『Oracle Data Guard概要および管理』を参照してください。

STANDBY STANDBY句を使用すると、REDOログ・ファイル・グループがスタンバイREDOログに追加されます。この句を指定しないと、ログ・ファイル・グループがオンラインREDOログに追加されます。

INSTANCE INSTANCE句は、Oracle Real Application Clusters(Oracle RAC)またはOracle RAC One Nodeデータベースのみに適用できます。REDOログ・ファイル・グループを追加するインスタンスの名前を指定します。インスタンス名は最大80文字の文字列です。Oracle Databaseは、指定されたインスタンスにマップされるスレッドを自動的に使用します。指定されたインスタンスにスレッドがマップされていない場合、Oracle Databaseはマップされていない使用可能なスレッドを自動的に取得して、そのインスタンスに割り当てます。この句を指定しないと、Oracle Databaseは、現行のインスタンスを指定した場合と同じコマンドを実行します。指定されたインスタンスにマップされた現行のスレッドが存在せず、マップされていない使用可能なスレッドも存在しない場合、エラーが戻されます。

THREAD スタンバイREDOログにREDOログ・ファイル・グループを追加する場合は、THREAD句を使用して、ログ・ファイル・グループを特定のプライマリ・データベースREDOスレッドに割り当てます。どのREDOスレッドが開かれているかを判断するには、プライマリ・データベースでV$INSTANCEビューに対して問合せを行い、いずれか1つのスレッド番号を指定します。

オンラインREDOログにログ・ファイル・グループを追加する場合、THREAD句を使用して、ログ・ファイル・グループを特定のREDOスレッドに割り当てることもできます。この使用方法は現在非推奨になっています。INSTANCE句を使用すると、同じ結果になり、使用も簡単です。

GROUP GROUP句を使用すると、すべてのスレッドのすべてのREDOログ・ファイル・グループの中でグループを一意に識別できます(この値の範囲は、1からCREATE DATABASE文のMAXLOGFILESで指定された値まで)。同一のGROUP値を持つREDOログ・ファイル・グループを複数追加することはできません。このパラメータを指定しない場合、値が自動的に生成されます。REDOログ・ファイル・グループのGROUP値は、動的パフォーマンス・ビューV$LOGで確認できます。

redo_log_file_spec 各redo_log_file_specには、1つ以上のメンバー(コピー)を含むREDOログ・ファイル・グループを指定します。新しいログ・ファイルにファイル名を指定しない場合、「CREATE DATABASE」の「LOGFILE句」に示すルールに従って、Oracle Managed Filesが作成されます。

関連項目:

- file_specification

- 動的パフォーマンス・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

ADD LOGFILE MEMBER句 ADD LOGFILE MEMBER句を使用すると、既存のREDOログ・ファイル・グループに新しいメンバーを追加できます。新しいメンバーをそれぞれ'filename'に指定します。すでにファイルが存在する場合、追加するメンバーはグループ内の他のメンバーと同じサイズである必要があり、REUSEを指定する必要があります。ファイルが存在しない場合、適切なサイズのファイルが作成されます。メディア障害によってグループのすべてのメンバーを失った場合は、そのグループにメンバーを追加することはできません。

STANDBY スタンバイREDOログ・ファイル・グループにメンバーを追加する場合は、STANDBYを指定する必要があります。そうでない場合は、エラーが戻ります。

logfile_descriptor句を使用して、次のいずれかの方法で、既存のREDOログ・ファイル・グループを指定できます。

GROUP integer integerにはREDOログ・ファイル・グループを識別するGROUPパラメータの値を指定します。

filename REDOログ・ファイル・グループのすべてのメンバーを指定します。ご使用のオペレーティング・システムの表記規則に従って、ファイル名を完全に指定する必要があります。

関連項目:

- 新しいログ・ファイル・グループ名を指定しない場合にこの句によってOracle Managed Filesに戻される結果の詳細は、「CREATE DATABASE」の「LOGFILE句」を参照してください。

- 「REDOログ・ファイル・グループ・メンバーの追加例:」

drop_logfile_clauses

この句を使用すると、REDOログ・ファイル・グループまたはREDOログ・ファイル・メンバーを削除できます。

DROP LOGFILE句 DROP LOGFILE句を使用すると、REDOログ・ファイル・グループのすべてのメンバーを削除できます。この句を使用してOracle Managed Filesを削除する場合、ディスクからもすべてのログ・ファイル・メンバーが削除されます。ADD LOGFILE MEMBER句と同様に、REDOログ・ファイル・グループを指定します。

- 現行のログ・ファイル・グループを削除する場合、最初にALTER SYSTEM SWITCH LOGFILE文を発行する必要があります。

- アーカイブが必要なREDOログ・ファイル・グループは、削除できません。

- REDOログ・ファイル・グループを削除すると、そのREDOスレッドのREDOログ・ファイル・グループが2つ未満になる場合は、削除できません。

関連項目:
「ALTER SYSTEM」および「ログ・ファイル・メンバーの削除例:」を参照してください。

DROP LOGFILE MEMBER句 DROP LOGFILE MEMBER句を使用すると、1つ以上のREDOログ・ファイル・メンバーを削除できます。各'filename'には、ご使用のオペレーティング・システムのファイル名の表記規則に従って、メンバーを完全に指定する必要があります。

- 現行のログのログ・ファイルを削除する場合、最初にALTER SYSTEM SWITCH LOGFILE文を発行する必要があります。詳細は、「ALTER SYSTEM」を参照してください。

- この句では、有効なデータを含むREDOログ・ファイル・グループのすべてのメンバーを削除できません。このような操作には、DROP LOGFILE句を使用してください。

関連項目:
「ログ・ファイル・メンバーの削除例:」

switch_logfile_clause

この句は、現在のデータベースのブロック・サイズと異なるブロック・サイズでデータベースをディスクに移行する場合に有効です。この句を使用すると、オープン状態とクローズ状態の両スレッドを含む外部で使用可能なすべてのスレッドに対して、異なるブロック・サイズにログ・ファイルを切り替えることができます。4KBセクターのディスクを使用するようデータベースを移行する場合は、integerに4096を指定する必要があります。データベースの移行を戻して512バイト・セクターのディスクを使用するようにする場合は、integerに512を指定する必要があります。

この句は、既存のALTER SYSTEM SWITCH LOGFILE文の拡張です。この文は、ログを単一スレッドに切り替えます。一方、句の方は、オープン状態とクローズ状態の両スレッドを含む外部で使用可能なすべてのスレッドに対して、ログ・ファイルを切り替えます。

この句を使用する前に、移行先のディスクと同じブロック・サイズで2つ以上のREDOログ・グループをあらかじめ作成しておく必要があります。

関連項目:
異なるブロック・サイズでのデータベースのディスクへの移行の詳細は、『Oracle Database管理者ガイド』および「ログ・ファイルの追加例」を参照してください。

supplemental_db_logging

この句を使用すると、ログ・ストリームへのサプリメンタル・データの追加を実行または停止するようにOracle Databaseに指示できます。

ADD SUPPLEMENTAL LOG句 ADD SUPPLEMENTAL LOG DATAを指定すると、最小サプリメンタル・ロギングを使用可能にできます。最小サプリメンタル・ロギングに加え、列データ・ロギングを使用可能にする場合、ADD SUPPLEMENTAL LOG supplemental_id_key_clauseを指定します。PL/SQLコールのサプリメンタル・ロギングを使用可能にする場合は、ADD SUPPLEMENTAL LOG supplemental_plsql_clauseを指定します。Oracle Databaseは、デフォルトでは最小サプリメンタル・ロギングまたはサプリメンタル・ロギングを使用可能にしません。

最小サプリメンタル・ロギングによって、LogMiner(およびLogMinerの技術に基づいた製品)には、連鎖行および様々な記憶域構成(クラスタ表など)をサポートするために十分な情報が確保されます。

あるデータベースで生成されたREDOが、別のデータベースでの変更の基となる(マイニングおよび適用される)場合(ロジカル・スタンバイ・データベースなど)、ROWIDではなく列データを使用して、影響を受ける行を識別する必要があります。この場合、supplemental_id_key_clauseを指定する必要があります。

サプリメンタル・ロギングが使用可能になっているかどうかを確認するには、V$DATABASEビューの適切な列を問い合せます。

この句は、データベースがオープンしているときに使用できます。ただし、パフォーマンスに影響するカーソル・キャッシュのすべてのDMLカーソルが、キャッシュが再移入されるまで無効になります。

CDBでこの句を使用する場合は、現在のコンテナがルートである必要があります。この場合、そのCDB全体に対して操作が実行されます。

supplemental_id_clauseの詳細は、「CREATE TABLE」の「supplemental_id_key_clause」を参照してください。

関連項目:

- ロジカル・スタンバイ・データベースをサポートするためのプライマリ・データベースでのサプリメンタル・ロギングの詳細は、『Oracle Data Guard概要および管理』を参照してください。

- supplemental_db_logging句の構文の使用例は、『Oracle Databaseユーティリティ』を参照してください。

DROP SUPPLEMENTAL LOG句

この句を使用すると、サプリメンタル・ロギングを停止できます。

- DROP SUPPLEMENTAL LOG DATAを指定すると、更新操作が発生するたびにREDOログ・ストリームに追加の最小ログ情報が置かれることを停止できます。Oracle Databaseがsupplemental_id_key_clauseで指定された列データ・サプリメンタル・ロギングを実行している場合、まずDROP SUPPLEMENTAL LOG supplemental_id_key_clauseで列データ・サプリメンタル・ロギングを停止してから、この句を指定する必要があります。

- DROP SUPPLEMENTAL LOG supplemental_id_key_clauseを指定すると、システム生成の補助ログ・グループの一部またはすべてを削除できます。削除する補助ログ・グループがsupplemental_id_key_clauseを使用して追加された場合、この句を指定する必要があります。

- PL/SQLコールのサプリメンタル・ロギングを使用禁止にする場合は、DROP SUPPLEMENTAL LOG supplemental_plsql_clauseを指定します。

CDBでこの句を使用する場合は、現在のコンテナがルートである必要があります。この場合、そのCDB全体に対して操作が実行されます。

関連項目:
サプリメンタル・ロギングの詳細は、『Oracle Data Guard概要および管理』を参照してください。

controlfile_clauses

controlfile_clausesを指定すると、制御ファイルを作成またはバックアップできます。

CREATE CONTROLFILE句

CREATE CONTROLFILE句を使用すると、制御ファイルを作成できます。

- PHYSICAL STANDBYを指定すると、物理データベースの管理に使用する制御ファイルを作成することになります。これは、STANDBYを指定していて、PHYSICALやLOGICALを指定していない場合のデフォルトです。

- LOGICAL STANDBYを指定すると、論理データベースの管理に使用する制御ファイルを作成することになります。

- FAR SYNC INSTANCEを指定すると、Data Guard遠隔同期インスタンスの管理に使用する制御ファイルを作成することになります。

ファイルがすでに存在している場合は、REUSEを指定してください。Oracle RAC環境では、制御ファイルを共有記憶域に配置する必要があります。

関連項目:
制御ファイル作成の詳細は、『Oracle Data Guard概要および管理』を参照してください。

BACKUP CONTROLFILE句

BACKUP CONTROLFILE句を使用すると、現行の制御ファイルのバックアップを取ることができます。この句を使用するとき、データベースをオープンまたはマウントしておく必要があります。

TO 'filename' この句を使用して制御ファイルのバイナリ・バックアップを指定します。filenameには、オペレーティング・システムの規則に従って完全なファイル名を指定する必要があります。指定したファイルがすでに存在している場合は、REUSEを指定します。Oracle RAC環境では、filenameを共有記憶域に配置する必要があります。

バイナリ・バックアップには、TO TRACEを指定した場合には取得されない情報が格納されています(アーカイブ・ログ履歴、読取り専用およびオフライン表領域のオフライン範囲、RMANを使用する場合のバックアップ・セットおよびコピーなど)。COMPATIBLE初期化パラメータが 10.2以上の場合は、バイナリの制御ファイル・バックアップに一時ファイルのエントリが含まれます。

TO TRACE TO TRACEを指定すると、Oracle Databaseでは、制御ファイルの物理バックアップが作成されるかわりに、トレース・ファイルにSQL文が書き込まれます。トレース・ファイルに記述されたSQL文を使用すると、データベースの起動、制御ファイルの再作成、データベースのリカバリやオープンなどの操作を、作成した制御ファイルに基づいて正しく実行できます。ブロック・チェンジ・トラッキングを使用可能にしているときにALTER DATABASE BACKUP CONTROLFILE TO TRACE文を発行すると、生成されるトレース・ファイルには、ブロック・チェンジ・トラッキングを再度使用可能にするコマンドが記述されます。

この文は暗黙的なALTER DATABASE REGISTER LOGFILE文を発行します。アーカイブ・ログ・ファイルが現行のアーカイブ・ログの宛先に存在する場合、この文によって、インカネーション・レコードが作成されます。

このトレース・ファイルには、アーカイブログの現在の宛先に存在しているログファイル用のALTER DATABASE REGISTER LOGFILE文も記述されています。これは、ログファイルを適用するREDOのブランチについて、暗黙的にデータベース・インカネーションのレコードを作成することになります。

制御ファイルのコピーがすべて失われた場合(または、制御ファイルのサイズを変更する場合)は、トレース・ファイルからスクリプト・ファイルに文をコピーし、必要に応じて文を編集できます。

- AS filenameを指定すると、標準トレース・ファイルではなくfilenameというファイルにトレース出力を格納できます。

- REUSEを指定すると、filenameと呼ばれる既存ファイルを上書きできます。

- RESETLOGSは、データベースの起動用としてトレース・ファイルに書き込まれたSQL文が、ALTER DATABASE OPEN RESETLOGSであることを示します。オンライン・ログが使用不可能な場合のみ、この設定は有効です。

- NORESETLOGSは、データベースの起動用としてトレース・ファイルに書き込まれたSQL文が、ALTER DATABASE OPEN NORESETLOGSであることを示します。オンライン・ログが使用可能な場合のみ、この設定は有効です。

オンライン・ログの今後の状態が予測できない場合は、RESETLOGSもNORESETLOGSも指定しないでください。この場合、両方のバージョンのスクリプトがトレース・ファイルに入れられるため、スクリプトが必要になった時点で、適切なバージョンを選択できます。

トレース・ファイルは、DIAGNOSTIC_DEST初期化パラメータによって決まるサブディレクトリに格納されます。CREATE CONTROLFILE文が書き込まれたトレース・ファイルの名前と場所は、アラート・ログで確認できます。V$DIAG_INFO動的パフォーマンス・ビューのNAMEおよびVALUE列を問い合せて、トレース・ファイルのディレクトリを検索することもできます。

関連項目:
アラート・ログの表示方法の詳細は、『Oracle Database管理者ガイド』を参照してください。

standby_database_clauses

この句を使用すると、スタンバイ・データベースをアクティブにする、または保護モードと非保護モードのいずれかを指定することができます。

関連項目:
フィジカルおよびロジカルのスタンバイ・データベースの説明およびスタンバイ・データベースの保守および使用に関する情報は、『Oracle Data Guard概要および管理』を参照してください。

activate_standby_db_clause

ACTIVATE STANDBY DATABASE句を使用すると、スタンバイ・データベースをプライマリ・データベースに変換できます。

注意:
このコマンドを使用する前に、『Oracle Data Guard概要および管理』を参照して使用方法を確認してください。

PHYSICAL PHYSICALを指定すると、フィジカル・スタンバイ・データベースをアクティブにできます。これはデフォルトです。

LOGICAL LOGICALを指定すると、ロジカル・スタンバイ・データベースをアクティブにできます。ロジカル・スタンバイ・データベースが複数ある場合は、すべてのスタンバイ・システムで同じログ・データが使用可能であることを確認する必要があります。

FINISH APPLY この句は、ロジカル・スタンバイ・データベースのみに適用されます。この句は、ターミナル適用を開始するために使用します(ターミナル適用を実行すると、残りのREDOが適用され、ロジカル・スタンバイ・データベースがプライマリ・データベースと同じ状態になります)。ターミナル適用が完了すると、データベースは、ロジカル・スタンバイからプライマリ・データベースへのスイッチオーバーを完了します。

データの消失があってもデータベースをすぐにリストアする必要がある場合は、この句を指定しないでください。データベースは、ターミナル適用を行わずに、ロジカル・スタンバイからプライマリ・データベースへのスイッチオーバーを実行します。

maximize_standby_db_clause

この句では、このデータベース環境でのデータの保護レベルを指定します。この句をプライマリ・データベースから指定します。

注意:
PROTECTEDおよびUNPROTECTEDキーワードは、意味を明確にするために変更されていますが、引き続きサポートされています。PROTECTEDは、TO MAXIMIZE PROTECTIONと同等です。UNPROTECTEDは、TO MAXIMIZE PERFORMANCEと同等です。

TO MAXIMIZE PROTECTION この設定は、最大保護モードを確立し、最高レベルのデータ保護を実現します。トランザクションのリカバリに必要なすべてのデータが、SYNCログ転送モードを使用するように構成された1つ以上のフィジカル・スタンバイ・データベースに書き込まれるまで、そのトランザクションはコミットされません。1つ以上のスタンバイ・データベースにREDOレコードを書き込めない場合、プライマリ・データベースは停止します。このモードでは、データ非消失は保証されますが、プライマリ・データベースのパフォーマンスおよび可用性に最大の影響を与える可能性があります。

最大保護モードの確立における制限事項: 現在のデータ保護モードがMAXIMUM AVAILABILITYで、同期化されたスタンバイ・データベースが1つ以上ある場合にのみ、オープンなデータベースに対してTO MAXIMIZE PROTECTIONを指定できます。

TO MAXIMIZE AVAILABILITY この設定は、最大可用性モードを確立し、2番目に高いレベルのデータ保護を実現します。トランザクションのリカバリに必要なすべてのデータが、SYNCログ転送モードを使用するように構成された1つ以上のフィジカルまたはロジカル・スタンバイ・データベースに書き込まれるまで、そのトランザクションはコミットされません。最大保護モードとは異なり、1つ以上のスタンバイ・データベースにREDOレコードを書き込めない場合でも、プライマリ・データベースは停止しません。障害が修正され、スタンバイ・データベースがプライマリ・データベースと同一になるまで、データ保護レベルは最大パフォーマンス・モードまで下げられます。最大パフォーマンス・モードのプライマリ・データベースに障害が発生しないかぎり、このモードによってデータ非消失が保証されます。最大可用性モードは、プライマリ・データベースの可用性に影響を与えずに、最大レベルのデータ保護を実現します。

TO MAXIMIZE PERFORMANCE この設定は、最大パフォーマンス・モードを確立します(これがデフォルトの設定です)。トランザクションがコミットされるのは、そのトランザクションのリカバリに必要なデータがスタンバイ・データベースに書き込まれる前です。したがって、プライマリ・データベースに障害が発生してREDOレコードをプライマリ・データベースからリカバリできなくなると、トランザクションが失われることがあります。このモードは、プライマリ・データベースのパフォーマンスに影響を与えないという条件の下で最大レベルのデータ保護を実現します。

データベースの現行モードを確認するには、V$DATABASE動的パフォーマンス・ビューのPROTECTION_MODE列を問い合せます。

関連項目:
スタンバイ・データベースのこれらの設定については、『Oracle Data Guard概要および管理』を参照してください。

register_logfile_clause

スタンバイ・データベースでREGISTER LOGFILE句を指定すると、障害が発生したプライマリ・データベースからログ・ファイルを手動で登録することができます。オペレーティング・システムのファイル・システム内の標準REDOログ・ファイル、またはOracle ASMディスク・グループのREDOログ・ファイルをリスト表示するには、file_specificationのredo_log_file_spec書式(「file_specification」を参照)を使用します。

ログ・ファイルのインカーネーションが不明である場合、REGISTER LOGFILE句は、インカネーション・レコードをV$DATABASE_INCARNATIONビューに追加します。新しく登録されたログ・ファイルのインカネーションが現行のRECOVERY_TARGET_INCARNATION#よりも高いRESETLOGS_TIMEを保持している場合、REGISTER LOGFILE句は、新しく追加されたインカネーション・レコードに対応するようにRECOVERY_TARGET_INCARNATION#も変更します。

OR REPLACE OR REPLACEを指定すると、スタンバイ・データベースの既存のアーカイブ・ログ・エントリを更新できます(たとえばそのエントリの位置やファイル指定が変更されたとき)。エントリのシステム変更番号は、正確に一致している必要があります。また、元のエントリは、管理スタンバイ・ログの送信メカニズムによって作成される必要があります。

FOR logminer_session_name この句が役に立つのは、Streams環境の場合です。LogMinerセッションを1つ指定して、そのセッションにログ・ファイルを登録できます。

switchover_clause

注意:
このコマンドを使用する前に、『Oracle Data Guard概要および管理』を参照して使用方法を確認してください。

この句を使用すると、物理スタンバイ・データベースへのスイッチオーバーを実行できます。この句は、プライマリ・データベースから指定してください。target_db_nameには、スタンバイ・データベースのDB_UNIQUE_NAMEを指定します。

VERIFY この句を使用すると、物理スタンバイ・データベースがスイッチオーバーできる状態になっていることを確認できます。この句は、プライマリ・データベースから指定してください。target_db_nameには、スタンバイ・データベースのDB_UNIQUE_NAMEを指定します。スタンバイ・データベースがスイッチオーバーできる状態のときには、「データベースが変更されました」のメッセージが返されます。それ以外の場合は、スタンバイ・データベースをスイッチオーバーするための準備に役立つエラー・メッセージが返されます。

FORCE この句は、前回のスイッチオーバー・コマンドが失敗して、プライマリ・データベースなしで構成が作成された場合に使用します。この句は、プライマリ・データベースに変換する物理スタンバイ・データベースから指定します。target_db_nameには、プライマリ・データベースに変換するデータベースのDB_UNIQUE_NAMEを指定します。

failover_clause

注意:
このコマンドを使用する前に、『Oracle Data Guard概要および管理』を参照して使用方法を確認してください。

この句を使用すると、物理スタンバイ・データベースへのフェイルオーバーを実行できます。この句は、スタンバイ・データベースから指定します。target_db_nameには、スタンバイ・データベースのDB_UNIQUE_NAMEを指定します。

FORCE この句は、フェイルオーバー先がData Guard遠隔同期インスタンスでサービス提供されている場合にのみ意味を持ちます。この句は、前回のフェイルオーバー・コマンドが失敗して、失敗の理由が解決できなかったときに使用します。これにより、フェイルオーバーでData Guard遠隔同期インスタンスとの対話時に発生した失敗を無視して、可能ならばフェイルオーバーを継続するように指示します。

commit_switchover_clause

この句を使用すると、Data Guard構成でのデータベース・ロールの遷移を実行できます。

注意:
このコマンドを使用する前に、『Oracle Data Guard概要および管理』を参照して使用方法を確認してください。

PREPARE TO SWITCHOVER この句は、プライマリ・データベースがロジカル・スタンバイ・データベースになる準備またはロジカル・スタンバイ・データベースがプライマリ・データベースになる準備を行います。

- プライマリ・データベースでPREPARE TO SWITCHOVER TO LOGICAL STANDBYを指定します。

- ロジカル・スタンバイ・データベースでPREPARE TO SWITCHOVER TO PRIMARY DATABASEを指定します。

COMMIT TO SWITCHOVER この句は、プライマリ・データベースをスタンバイ・データベース・ロールに切り替えるか、またはスタンバイ・データベースをプライマリ・データベース・ロールに切り替えます。

- プライマリ・データベースでCOMMIT TO SWITCHOVER TO PHYSICAL STANDBYまたはCOMMIT TO SWITCHOVER TO LOGICAL STANDBYを指定します。

- スタンバイ・データベースでCOMMIT TO SWITCHOVER TO PRIMARY DATABASEを指定します。

PHYSICAL この句は常にオプションです。この句をCOMMIT TO SWITCHOVER TO PRIMARY句とともに使用することは、非推奨になりました。

LOGICAL この句は、プライマリ・データベースをロジカル・スタンバイ・データベース・ロールに切り替えるときに、PREPARE TO SWITCHOVER句またはCOMMIT TO SWITCHOVER句とともに指定します。この句をCOMMIT TO SWITCHOVER TO PRIMARY句とともに使用することは、非推奨になりました。

WITH SESSION SHUTDOWN この句は、データベース・ロールの遷移を実行する前に、すべてのデータベース・セッションをクローズし、コミットされていないトランザクションをロールバックします。

WITHOUT SESSION SHUTDOWN この句は、データベース・セッションが存在する場合、要求されたロールの遷移が発生しないようにします。これはデフォルトです。

WAIT この句を指定すると、ロールの遷移が完了するのを待機してから制御がユーザーに戻されます。

NOWAIT この句を指定すると、ロールの遷移が完了するのを待機しないで制御がユーザーに戻されます。これはデフォルトです。

CANCEL この句を指定すると、以前に指定したPREPARE TO SWITCHOVER文の影響が無効にされます。

関連項目:
プライマリ・データベースとスタンバイ・データベース間のスイッチオーバーの詳細は、『Oracle Data Guard概要および管理』を参照してください。

start_standby_clause

START LOGICAL STANDBY APPLY句を指定すると、ロジカル・スタンバイ・データベースへのREDOログの適用を開始できます。この句では、PL/SQLコールのロギング以外に、主キー、一意索引および一意制約のサプリメンタル・ロギングが使用可能になります。

- 現在のスタンバイREDOログ・ファイルのREDOデータを適用する場合は、IMMEDIATEを指定します。

- この適用において遅延を無視するようにOracle Databaseに指示する場合は、NODELAYを指定します。これは、プライマリ・データベースが存在せず、PL/SQLコールの実行が必要になる場合に便利です。

- 初めてスタンバイ・データベースにログを適用する場合は、INITIALを指定します。

- 次の2つの状況では、NEW PRIMARY句が必要となります。

- ロジカル・スタンバイへのフェイルオーバー時に、フェイルオーバー操作に加わっていないロジカル・スタンバイ、およびロジカル・スタンバイ・データベースとして回復された後の古いデータベースでこの句を指定します。

- (準備されていないスイッチオーバー操作を使用する)ロジカル・スタンバイ・データベースを使用してローリング・アップグレードを実行している場合は、元のプライマリ・データベースが新しいデータベース・ソフトウェアにアップグレードされた後でこの句を指定します。

- イベント表の最後のトランザクションをスキップして適用を再開する場合は、SKIP FAILED [TRANSACTION]を指定します。

- スタンバイREDOログ・ファイル情報をアーカイブ・ログに強制処理する場合は、FINISHを指定します。プライマリ・データベースが使用できなくなった場合、REDOログ・ファイルのデータを適用できます。

stop_standby_clause

この句を使用すると、ログ適用サービスを停止できます。この句は、フィジカル・スタンバイ・データベースではなく、ロジカル・スタンバイ・データベースのみに適用されます。STOP句を使用すると、適用が正常に停止されます。

convert_database_clause

この句を使用すると、データベースを別の形式に変換できます。

- CONVERT TO PHYSICAL STANDBYを使用すると、プライマリ・データベース、ロジカル・スタンバイ・データベースまたはスナップショット・スタンバイ・データベースをフィジカル・スタンバイ・データベースへ変換できます。
この句を指定する前に、次の手順を実行します。

- Oracle Real Application Clusters(Oracle RAC)データベースで、1つを除いてすべてのインスタンスを停止します。

- データベースがマウントされ、オープンしていないことを確認します。

データベースは変換後にディスマウントされ、再起動する必要があります。

- CONVERT TO SNAPSHOT STANDBYを使用すると、フィジカル・スタンバイ・データベースをスナップショット・スタンバイ・データベースへ変換できます。
この句を指定する前に、REDO Applyを停止していることを確認してください。

注意:
スナップショット・スタンバイ・データベースは、フィジカル・スタンバイ・データベースに変換される前に読取り/書込みモードで1回以上オープンされている必要があります。

関連項目:
スタンバイ・データベースの詳細は、『Oracle Data Guard概要および管理』を参照してください。

default_settings_clauses

データベースのデフォルト設定を変更できます。

DEFAULT EDITION句

この句を使用すると、指定したエディションをデータベースのデフォルト・エディションとして設定できます。指定するエディションをあらかじめ作成し、USABLEにしておく必要があります。変更内容は即座に反映され、Oracle RAC環境のすべてのノードから参照可能になります。指定したエディションで新しいデータベース・セッションが自動的に開始されます。新しい設定は、データベースを停止して起動した後も保持されます。

データベース・デフォルト・エディションとしてエディションを指定する場合、指定されたエディションに対してUSEオブジェクト権限がロールPUBLICに付与されていますが、すべてのユーザーがエディションを使用できます。

データベースの現在のデフォルト・エディションを確認するには、次の問合せを使用します。

SELECT PROPERTY_VALUE FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME = 'DEFAULT_EDITION';

関連項目:
エディションの詳細は「CREATE EDITION」、エディションをUSABLEに指定する方法の詳細は『Oracle Database PL/SQL言語リファレンス』を参照してください。

CHARACTER SET、NATIONAL CHARACTER SET

ALTER DATABASE文を使用して、データベース・キャラクタ・セットまたは各国語キャラクタ・セットを変更することはできなくなりました。データベース・キャラクタ・セットの移行の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

SET DEFAULT TABLESPACE句

この句を使用すると、以降に作成する表領域のデフォルト・タイプを指定または変更できます。表領域がbigfileかsmallfileかを指定するには、BIGFILEまたはSMALLFILEを指定します。

- bigfile表領域に格納されるのは、1つのデータファイルまたは一時ファイルのみであり、このファイルには最大約40億(2^32)ブロックを格納できます。データファイルまたは一時ファイル1つ当たりの最大サイズは、32Kブロックの表領域の場合は128TB、8Kブロックの表領域の場合は32TBです。

- smallfile表領域は、Oracleの従来の表領域であり、1022のデータファイルまたは一時ファイルを含めることができます。それぞれのファイルは、最大で約400万(2^22)のブロックを格納できます。

関連項目:

- bigfile表領域の詳細は、『Oracle Database管理者ガイド』を参照してください。

- 「表領域のデフォルト・タイプの設定例:」

DEFAULT TABLESPACE句

この句を使用すると、データベースのデフォルトの永続表領域を構築または変更できます。作成済の表領域を指定する必要があります。この操作の完了後、すべての非SYSTEMユーザーに、新しいデフォルトの一時表領域が再度割り当てられます。これらのユーザーがこれ以降作成するすべてのオブジェクトは、デフォルトで、新しいデフォルトの表領域に格納されます。以前に指定したデフォルトの表領域を置き換える場合、以前作成したオブジェクトを古いデフォルトの表領域から新しいデフォルトの表領域に移動した後で、必要に応じて古いデフォルトの表領域を削除することができます。

DEFAULT TEMPORARY TABLESPACE句

この句を使用すると、データベースのデフォルトの一時表領域を、新しい表領域または表領域グループに変更できます。

- tablespaceを指定すると、データベースの新しいデフォルトの一時表領域を指定できます。この操作の完了後、以前のデフォルトの一時表領域が割り当てられているすべてのユーザーに、新しいデフォルトの一時表領域が再度割り当てられます。その後、必要に応じて以前のデフォルトの一時表領域を削除することができます。

- tablespace_group_nameを指定すると、tablespace_group_nameで指定されている表領域グループのすべての表領域を、データベースのデフォルトの一時表領域として指定できます。この操作の完了後、デフォルトの一時表領域を明示的に割り当てられていないユーザーは、tablespace_group_nameに含まれる任意の表領域に一時セグメントを作成できます。以前のデフォルトの一時表領域がデフォルトの一時表領域グループに含まれる場合、以前の一時表領域を削除することはできません。

現行のデフォルトの一時表領域またはデフォルトの一時表領域グループの名前を確認するには、ALL_、DBA_またはUSER_USERSデータ・ディクショナリ・ビューのTEMPORARY_TABLESPACE列を問い合せます。

デフォルトの一時表領域の制限事項: デフォルトの一時表領域には、次の制限事項があります。

- デフォルトの一時表領域として割り当てる表領域、または再度割り当てる表領域は、標準的なブロック・サイズである必要があります。

- SYSTEM表領域がローカル管理される場合、デフォルトの一時表領域として指定する表領域も、ローカル管理される必要があります。

関連項目:

- 表領域グループの詳細は、『Oracle Database管理者ガイド』を参照してください。

- 「デフォルトの一時表領域の変更例:」

instance_clauses

Oracle Real Application Clusters環境では、ENABLE INSTANCEを指定すると、指定したデータベース・インスタンスにマップされたスレッドが有効になります。使用可能にできるスレッドは、2つ以上のREDOログ・ファイル・グループを持つスレッドのみです。また、データベースはオープンされている必要があります。

DISABLE INSTANCEを指定すると、指定したデータベース・インスタンスにマップされたスレッドを使用禁止にできます。インスタンス名は最大80文字の文字列です。指定したインスタンスにマップされているスレッドがない場合、エラーが戻されます。データベースは、オープンされている必要がありますが、指定したスレッドを使用しているインスタンスでデータベースをマウント済の場合は、そのスレッドを使用禁止にできません。

関連項目:
インスタンスを使用可能または使用禁止にする場合の詳細は、『Oracle Real Application Clusters管理およびデプロイメント・ガイド』を参照してください。

RENAME GLOBAL_NAME句

RENAME GLOBAL_NAMEを指定すると、データベースのグローバル名を変更できます。データベースはオープンしている必要があります。databaseには、データベースの新しい名前を8バイト以内の長さで指定します。オプションのdomainには、ネットワーク階層におけるデータベースの有効な位置を指定します。ドメイン名を指定する場合は、ドメイン名のコンポーネントを有効な識別子にする必要があります。有効な識別子の詳細は、「データベース・オブジェクトのネーミング規則」を参照してください。

注意:
データベース名を変更しても、リモート・データベース内の既存のデータベース・リンク、シノニム、ストアド・プロシージャ、ストアド・ファンクションからのユーザーのデータベースに対するグローバル参照は変更されません。これらの参照を変更するのは、リモート・データベース管理者の責任です。

関連項目:
「グローバル・データベース名の変更例:」

BLOCK CHANGE TRACKING句

ブロック・チェンジ・トラッキング機能を使用すると、Oracle Databaseでは、プライマリ・データベースおよび任意のフィジカル・スタンバイ・データベースの両方で、すべてのデータベース更新の物理的な場所を追跡できます。トラッキングを実行する各データベースで、ブロック・チェンジ・トラッキングを使用可能にする必要があります。トラッキング情報は、ブロック・チェンジ・トラッキング・ファイルという別のファイルに保持されます。Oracle Managed Filesを使用している場合、Oracle Databaseは、DB_CREATE_FILE_DESTで指定した場所にブロック・チェンジ・トラッキング・ファイルを自動的に作成します。Oracle Managed Filesを使用していない場合、チェンジ・トラッキング・ファイルの名前を指定する必要があります。Oracle Databaseは、増分バックアップのパフォーマンス向上などの内部タスクのために、チェンジ・トラッキング・データを使用します。ブロック・チェンジ・トラッキングを使用可能にする場合、データベースは、ARCHIVELOGモードまたはNOARCHIVELOGモードで、オープンされているかマウント済である必要があります。

ENABLE BLOCK CHANGE TRACKING この句を指定すると、ブロック・チェンジ・トラッキングが使用可能になり、Oracle Databaseによってブロック・チェンジ・トラッキング・ファイルが作成されます。

- USING FILE 'filename'を指定すると、ブロック・チェンジ・トラッキング・ファイルの名前を(Oracle Databaseが生成するのではなく)自分で指定できます。Oracle Managed Filesを使用していない場合、この句を指定する必要があります。

- REUSEを指定すると、同じ名前の既存のブロック・チェンジ・トラッキング・ファイルを上書きできます。

DISABLE BLOCK CHANGE TRACKING この句を指定すると、Oracle Databaseによるチェンジ・トラッキングを停止し、既存のブロック・チェンジ・トラッキング・ファイルを削除できます。

関連項目:
ブロック・チェンジ・トラッキングの設定の詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』および「ブロック・チェンジ・トラッキングを使用可能および使用禁止にする例:」を参照してください。

[NO] FORCE FULL DATABASE CACHING

この句を使用して、強制完全データベース・キャッシュ・モードを有効化または無効化します。自動的なデフォルト・モードとは逆に、強制完全データベース・キャッシュ・モードは、バッファ・キャッシュに適しているNOCACHE LOBを含むデータベース全体を考慮します。このモードは、Oracle Database 12cリリース1(12.1.0.2)以上で使用できます。

データベースは、マウントされているがオープンされていない状態であることが必要です。Oracle RAC環境では、データベースをマウントする必要がありますが、現在のインスタンスでオープン状態ではなく、すべての他のインスタンスでアンマウントする必要があります。

- FORCE FULL DATABASE CACHINGを指定して、強制完全データベース・キャッシュ・モードを有効化します。

- NO FORCE FULL DATABASE CACHINGを指定して、強制完全データベース・キャッシュ・モードを無効化します。これがデフォルト・モードです。

V$DATABASE動的パフォーマンス・ビューのFORCE_FULL_DB_CACHING列を問い合せて強制完全データベース・キャッシュ・モードを有効化するかどうかを判断できます。

関連項目:

- 強制完全データベース・キャッシュ・モードの詳細は、『Oracle Database概要』を参照してください。

- 強制完全データベース・キャッシュ・モードを有効化する方法は、『Oracle Database管理者ガイド』を参照してください。

- V$DATABASE動的パフォーマンス・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

flashback_mode_clause

この句を使用すると、データベースをFLASHBACKモードにすることや、元のモードに戻すことができます。この句を指定できるのは、データベースがARCHIVELOGモードで、かつデータベースの高速リカバリ領域が準備済の場合のみです。この句は、データベースがマウントされているかオープンされているときに指定できます。フィジカル・スタンバイ・データベースに対しては、REDO Applyがアクティブな場合はこの句を指定できません。

関連項目:
フラッシュバック操作のための高速リカバリ領域の準備の詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

FLASHBACK ON この句を使用すると、データベースはFLASHBACKモードになります。データベースがFLASHBACKモードのとき、Oracle Databaseは、高速リカバリ領域に自動的にフラッシュバック・データベース・ログを作成し、これを管理します。その後、SYSDBAシステム権限を持つユーザーは、FLASHBACK DATABASE文を発行できます。

FLASHBACK OFF この句を使用すると、データベースはFLASHBACKモードから戻されます。Oracle Databaseは、フラッシュバック・データのロギングを停止し、既存のすべてのフラッシュバック・データベース・ログを削除します。FLASHBACK DATABASEを発行すると、エラーが発生して実行できません。

set_time_zone_clause

この句のセマンティクスは、CREATE DATABASE文およびALTER DATABASE文で同じです。この句をALTER DATABASEと併用すると、データベースのタイムゾーンがリセットされます。データベースのタイムゾーンを確認するには、組込み関数「DBTIMEZONE」を問い合せます。この句を使用してタイムゾーンを設定または変更した後、新しいタイムゾーンを有効にするためにデータベースを再起動する必要があります。

すべての新しいTIMESTAMP WITH LOCAL TIME ZONEデータは、ディスクに格納されるときにデータベースのタイムゾーンに正規化されます。データベースの既存のデータは、自動的に新しいタイムゾーンに更新されません。したがって、データベースにTIMESTAMP WITH LOCAL TIME ZONEデータが存在する場合は、データベースのタイムゾーンをリセットすることはできません。TIMESTAMP WITH LOCAL TIME ZONEデータを削除またはエクスポートしてからデータベースのタイムゾーンをリセットする必要があります。このような理由から、データが格納されているデータベースのタイムゾーンは変更しないことをお薦めします。

この句の詳細は、「CREATE DATABASE」の「set_time_zone_clause」を参照してください。

security_clause

security_clause(GUARD)を使用すると、データベースのデータが変更されないように保護できます。現行のセッションでこの設定を上書きするには、ALTER SESSION DISABLE GUARD文を使用します。詳細は、「ALTER SESSION」を参照してください。

ALL ALLを指定すると、SYS以外のすべてのユーザーが、データベースの内容を変更できなくなります。

STANDBY STANDBYを指定すると、SYS以外のすべてのユーザーは、ロジカル・スタンバイで管理されるデータベース・オブジェクトを変更できなくなります。この設定は、ロジカル・スタンバイによってレプリケートされる前に、データをレポート操作によって変更できるようにする場合に便利です。

関連項目:
ロジカル・スタンバイの詳細は、『Oracle Data Guard概要および管理』を参照してください。

NONE NONEを指定すると、データベースのすべてのデータについて、通常のセキュリティを設定できます。

注意:
ロジカル・スタンバイ・データベースには、この設定をできるだけ使用しないでください。

例

READ ONLY | READ WRITEの例: 次の文は、データベースを読取り専用モードでオープンします。

ALTER DATABASE OPEN READ ONLY;

次の文は、データベースを読み書き両用モードでオープンし、オンラインREDOログを消去します。

ALTER DATABASE OPEN READ WRITE RESETLOGS;

パラレル・リカバリ処理の使用例: 次の文は、パラレル・リカバリ処理を使用して表領域のリカバリを行います。

ALTER DATABASE
RECOVER TABLESPACE tbs_03
PARALLEL;

REDOログ・ファイル・グループの追加例: 次の文は、2つのメンバーを含むREDOログ・ファイル・グループを追加し、GROUPパラメータの値に3を指定してこのグループを識別します。

ALTER DATABASE
ADD LOGFILE GROUP 3
('diska:log3.log' ,
'diskb:log3.log') SIZE 50K;

次の文は、2つのメンバーを含むREDOログ・ファイル・グループをスレッド5(Real Application Clusters環境内)に追加して、このグループにGROUPパラメータ値4を割り当てます。

ALTER DATABASE
ADD LOGFILE THREAD 5 GROUP 4
('diska:log4.log',
'diskb:log4:log');

REDOログ・ファイル・グループ・メンバーの追加例: 次の文は、前述の例で追加したREDOログ・ファイル・グループに1つのメンバーを追加します。

ALTER DATABASE
ADD LOGFILE MEMBER 'diskc:log3.log'
TO GROUP 3;

ログ・ファイル・メンバーの削除例: 次の文は、前述の例で追加したREDOログ・ファイル・メンバーの1つを削除します。

ALTER DATABASE
DROP LOGFILE MEMBER 'diskb:log3.log';

次の文は、REDOログ・ファイル・グループ3のすべてのメンバーを削除します。

ALTER DATABASE DROP LOGFILE GROUP 3;

ログ・ファイル・メンバーの名前の変更例: 次の文は、REDOログ・ファイル・メンバーの名前を変更します。

ALTER DATABASE
RENAME FILE 'diskc:log3.log' TO 'diskb:log3.log';

この例では、REDOログ・グループ・メンバーのファイルが、別のファイルに変更されただけです。ファイル名が、実際にdiskc:log3.logからdiskb:log3.logに変更されたわけではありません。この文を発行する前に、オペレーティング・システムでこのファイル名を変更する必要があります。

表領域のデフォルト・タイプの設定例: 次の文は、これ以降作成される表領域の種類がデフォルトでbigfile表領域になるように指定します。

ALTER DATABASE
SET DEFAULT BIGFILE TABLESPACE;

デフォルトの一時表領域の変更例: 次の文は、tbs_05(「一時表領域の作成例:」で作成)をデータベースのデフォルトの一時表領域にします。この文は、作成時に何も指定されていない場合にデフォルトの一時表領域を作成するか、既存のデフォルトの一時表領域をtbs_05に置き換えます。

ALTER DATABASE
DEFAULT TEMPORARY TABLESPACE tbs_05;

または、表領域グループを使用して、表領域グループをデフォルトの一時表領域に定義することもできます。次の文は、表領域グループtbs_group_01の表領域(「表領域グループへの一時表領域の追加例:」で作成)をデータベースのデフォルトの一時表領域にします。

ALTER DATABASE
DEFAULT TEMPORARY TABLESPACE tbs_grp_01;

新しいデータファイルの作成例: 次の文は、ファイルtbs_f03.dbfを基に、新しいデータファイルtbs_f04.dbfを作成します。新しいデータファイルを作成する前に、既存のデータファイル(またはこのデータファイルが存在する表領域)をオフラインにする必要があります。

ALTER DATABASE
CREATE DATAFILE 'tbs_f03.dbf'
AS 'tbs_f04.dbf';

一時ファイルの操作例: 次の例では、「データファイルおよび一時ファイルの追加例と削除例:」で作成された一時ファイルtemp02.dbfをオフラインにして、名前を変更します。

ALTER DATABASE TEMPFILE 'temp02.dbf' OFFLINE;

ALTER DATABASE RENAME FILE 'temp02.dbf' TO 'temp03.dbf';

一時ファイルの名前を変更する文では、まずファイルtemp03.dbfをオペレーティング・システム上に作成する必要があります。

グローバル・データベース名の変更例: 次の文は、データベースのグローバル名を変更し、データベース名とドメインの両方を指定します。

ALTER DATABASE
RENAME GLOBAL_NAME TO demo.world.example.com;

ブロック・チェンジ・トラッキングを使用可能および使用禁止にする例: 次の文は、ブロック・チェンジ・トラッキングを使用可能にし、tracking_fileというブロック・チェンジ・トラッキング・ファイルを作成(すでに存在する場合は上書き)します。

ALTER DATABASE
ENABLE BLOCK CHANGE TRACKING
USING FILE 'tracking_file' REUSE;

次の文は、ブロック・チェンジ・トラッキングを使用禁止にし、既存のブロック・チェンジ・トラッキング・ファイルを削除します。

ALTER DATABASE
DISABLE BLOCK CHANGE TRACKING;

データファイルのサイズの変更例: 次の文は、データファイルdiskb:tbs_f5.dbfのサイズを変更します。

ALTER DATABASE
DATAFILE 'diskb:tbs_f5.dbf' RESIZE 10 M;

ログ・ファイルの消去例: 次の文は、ログ・ファイルを消去します。

ALTER DATABASE
CLEAR LOGFILE 'diskc:log3.log';

データベースのリカバリ例: 次の文は、データベース全体を完全にリカバリし、必要な新しいアーカイブREDOログ・ファイル名を生成します。

ALTER DATABASE
RECOVER AUTOMATIC DATABASE;

次の文は、Oracle Databaseが適用するREDOログ・ファイル名を明示的に指定します。

ALTER DATABASE
RECOVER LOGFILE 'diskc:log3.log';

次の文は、時間ベースのデータベース・リカバリを実行します。

ALTER DATABASE
RECOVER AUTOMATIC UNTIL TIME '2001-10-27:14:00:00';

データベースは、2001年10月27日の午後2時の状態にリカバリされます。

表領域のリカバリ例は、「パラレル・リカバリ処理の使用例:」を参照してください。

ALTER DATABASE LINK

用途

接続または認証ユーザーのパスワードが変更された場合に固定ユーザー・データベース・リンクを変更するには、ALTER DATABASE LINK文を使用します。

注意:

- この文を使用して、データベース・リンクに関連付けられた接続または認証ユーザーを変更することはできません。userを変更するには、データベース・リンクを再作成する必要があります。

- この文を使用して、接続または認証ユーザーのパスワードを変更することはできません。このためには、「ALTER USER」文を使用し、その後、ALTER DATABASE LINK文でデータベース・リンクを変更する必要があります。

- この文は、固定ユーザー・データベース・リンクに対してのみ有効で、接続ユーザーまたは現行のユーザーのデータベース・リンクに対しては有効でありません。この2種類のデータベース・リンクの詳細は、「CREATE DATABASE LINK」を参照してください。

前提条件

プライベート・データベース・リンクを変更するには、ALTER DATABASE LINKシステム権限が必要です。パブリック・データベース・リンクを変更するには、ALTER PUBLIC DATABASE LINKシステム権限が必要です。

構文

alter_database_link::=

dblink_authentication::=

セマンティクス

ALTER DATABASE LINK文は、接続および認証ユーザーの現在のパスワードによって固定ユーザー・データベース・リンクを更新するためにのみ使用します。したがって、上の構文図で表示していないCREATE DATABASE LINK文内の有効な句はすべて、ALTER DATABASE LINK文内では有効ではありません。この文で許可されているすべての句のセマンティクスは、CREATE DATABASE LINK内の同じ句のセマンティクスと同じです。詳細は、CREATE DATABASE LINKを参照してください。

例

次の文は、ALTER DATABASE LINK文の有効な例を示しています。

ALTER DATABASE LINK private_link
CONNECT TO hr IDENTIFIED BY hr_new_password;

ALTER PUBLIC DATABASE LINK public_link
CONNECT TO scott IDENTIFIED BY scott_new_password;

ALTER SHARED PUBLIC DATABASE LINK shared_pub_link
CONNECT TO scott IDENTIFIED BY scott_new_password
AUTHENTICATED BY hr IDENTIFIED BY hr_new_password;

ALTER SHARED DATABASE LINK shared_pub_link
CONNECT TO scott IDENTIFIED BY scott_new_password;

ALTER DIMENSION

用途

ALTER DIMENSION文を使用すると、ディメンションの階層関係またはディメンション属性を変更できます。

関連項目:
「CREATE DIMENSION」および「DROP DIMENSION」を参照してください。

前提条件

ディメンションが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、ALTER ANY DIMENSIONシステム権限が必要です。

所有者の権限があれば、ディメンションはいつでも変更されます。

構文

alter_dimension::=

(level_clause::=、hierarchy_clause::=、attribute_clause::=、extended_attribute_clause::=を参照)

level_clause::=

hierarchy_clause::=

(dimension_join_clause::=を参照)

dimension_join_clause::=

attribute_clause::=

extended_attribute_clause::=

セマンティクス

次のキーワード、パラメータおよび句の意味は、ALTER DIMENSIONに対してのみ有効です。その他のキーワード、パラメータおよび句には、CREATE DIMENSION文での機能と同じ機能があります。詳細は、「CREATE DIMENSION」を参照してください。

schema

変更するディメンションのスキーマを指定します。schemaを指定しない場合、ディメンションは自分のスキーマ内にあるとみなされます。

dimension

ディメンション名を指定します。ディメンションは、すでに存在している必要があります。

ADD

ADD句を使用すると、ディメンションにレベル、階層または属性を追加できます。これらの要素の1つを追加しても、既存のマテリアライズド・ビューは無効になりません。

ADD LEVEL句は、他のADD句より前に処理されます。

DROP

DROP句を使用すると、ディメンションからレベル、階層または属性を削除できます。指定するすべてのレベル、階層または属性は、すでに存在している必要があります。

1つの属性で、1つのレベルに関連付けられている1つ以上のレベルと列の関係を削除できます。

DROPの制限事項: 属性または階層がレベルを参照する場合は、すべての参照している属性および階層を削除するか、またはCASCADEを指定しないかぎり、このレベルを削除することはできません。

CASCADE CASCADEを指定すると、レベルを参照する属性または階層をレベルとともに削除できます。

RESTRICT RESTRICTを指定すると、属性または階層が参照するレベルを削除しないようにOracle Databaseに指示できます。これはデフォルトです。

COMPILE

COMPILEを指定すると、無効のディメンションを明示的に再コンパイルできます。ADD句またはDROP句が発行されると、ディメンションは自動的にコンパイルされます。ただし、ディメンションが参照するオブジェクトを変更する(たとえば、ディメンションで参照された表を削除した後再作成する)と、ディメンションが無効になるため、これを明示的に再コンパイルする必要があります。

例

ディメンションの変更例: 次の例は、サンプル・スキーマshのcustomers_dimディメンションを変更します。

ALTER DIMENSION customers_dim
DROP ATTRIBUTE country;

ALTER DIMENSION customers_dim
ADD LEVEL zone IS customers.cust_postal_code
ADD ATTRIBUTE zone DETERMINES (cust_city);

ALTER DISKGROUP

注意:
このSQL文は、Oracle ASMを使用しており、Oracle ASMインスタンスを起動している場合にのみ有効です。この文の発行は、通常のデータベース・インスタンスからではなく、Oracle ASMインスタンスから行う必要があります。Oracle ASMインスタンスの起動の詳細は、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

用途

ALTER DISKGROUP文を使用すると、ディスク・グループまたはディスク・グループ内のディスクに対して多数の操作を実行できます。

関連項目:

- ディスク・グループの作成については、「CREATE DISKGROUP」を参照してください。

- Oracle ASMおよびディスク・グループを使用してデータベース管理を簡略化する方法については、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

前提条件

この文を発行するOracle ASMインスタンスが起動されている必要があります。変更するディスク・グループはマウントされている必要があります。

ALTER DISKGROUPの句はすべて、発行するにはSYSASMシステム権限が必要です。個々の句の発行については、次のようになります。

- SYSOPER権限で実行可能なALTER DISKGROUP操作は、diskgroup_availability、rebalance_diskgroup_clause、check_diskgroup_clause(REPAIRオプションの指定なし)です。

- SYSDBAとして接続している場合は、この文を使用するための限定的な権限が与えられます。次の操作は常に、SYSDBAとして接続しているユーザーに許可されます。

- ALTER DISKGROUP ... ADD DIRECTORY

- ALTER DISKGROUP ... ADD/ALTER/DROP TEMPLATE(システム・テンプレート以外の場合のみ)

- ALTER DISKGROUP ... ADD USERGROUP

- SELECT

- SHOW PARAMETER

表10-1に、SYSDBAとして接続しているユーザーに特定の条件下で付与されるその他の権限を示します。

表10-1 SYSDBAへの条件付きディスク・グループ権限

ALTER DISKGROUP操作

条件

DROP FILE

ユーザーはファイルへの読取りおよび書込み権限を持っている必要があります。

ADD ALIAS

ユーザーは関連のファイルへの読取りおよび書込み権限を持っている必要があります。

RENAME ALIAS

ユーザーは関連のファイルへの読取りおよび書込み権限を持っている必要があります。

DROP ALIAS

ユーザーは関連のファイルへの読取りおよび書込み権限を持っている必要があります。

RENAME DIRECTORY

ディレクトリにファイルが存在せず、別名のみが存在している必要があります。ユーザーはそのディレクトリ内のすべての別名へのDROP ALIAS権限を持っている必要があります。

DROP DIRECTORY

ディレクトリにファイルが存在せず、別名のみが存在している必要があります。ユーザーはそのディレクトリ内のすべての別名へのDROP ALIAS権限を持っている必要があります。

DROP USERGROUP

ユーザーはユーザー・グループの所有者である必要があります。

MODIFY FILE

ユーザーはファイルの所有者である必要があります。

MODIFY USERGROUP ADD MEMBER

ユーザーはユーザー・グループの所有者である必要があります。

MODIFY USERGROUP DROP MEMBER

ユーザーはユーザー・グループの所有者である必要があります。

SET PERMISSION

ユーザーはファイルの所有者である必要があります。

SET OWNER GROUP

ユーザーはファイルの所有者でユーザー・グループのメンバーである必要があります。

構文

alter_diskgroup::=

(add_disk_clause::=、drop_disk_clause::=、resize_disk_clause::=、replace_disk_clause::=、rename_disk_clause::=、disk_online_clause::=、disk_offline_clause::=、rebalance_diskgroup_clause ::=、check_diskgroup_clause::=、diskgroup_template_clauses::=、diskgroup_directory_clauses::=、diskgroup_alias_clauses::=、diskgroup_volume_clauses::=、diskgroup_attributes ::=、modify_diskgroup_file::=、drop_diskgroup_file_clause::=、usergroup_clauses::=、user_clauses::=、file_permissions_clause::=、file_owner_clause::=、scrub_clause::=、undrop_disk_clause::=、diskgroup_availability::=、enable_disable_volume::=を参照)

add_disk_clause::=

(qualified_disk_clause::=を参照)

qualified_disk_clause::=

(size_clause::=を参照)

drop_disk_clause::=

resize_disk_clause::=

(size_clause::=を参照)

replace_disk_clause::=

rename_disk_clause::=

disk_online_clause::=

disk_offline_clause::=

timeout_clause::=

rebalance_diskgroup_clause ::=

check_diskgroup_clause::=

diskgroup_template_clauses::=

(qualified_template_clause::=を参照)

qualified_template_clause::=

redundancy_clause::=

striping_clause::=

disk_region_clause::=

diskgroup_directory_clauses::=

diskgroup_alias_clauses::=

diskgroup_volume_clauses::=

(add_volume_clause::=、modify_volume_clause::=を参照)

add_volume_clause::=

(size_clause::=、redundancy_clause::=、disk_region_clause::=を参照)

size_clause::=

modify_volume_clause::=

(disk_region_clause::=を参照)

diskgroup_attributes ::=

modify_diskgroup_file::=

drop_diskgroup_file_clause::=

usergroup_clauses::=

user_clauses::=

file_permissions_clause::=

file_owner_clause::=

scrub_clause::=

undrop_disk_clause::=

diskgroup_availability::=

enable_disable_volume::=

セマンティクス

diskgroup_name

変更するディスク・グループの名前を指定します。既存のディスク・グループの名前を特定するには、V$ASM_DISKGROUP動的パフォーマンス・ビューを問い合せます。

add_disk_clause

この句を使用すると、ディスク・グループに1つ以上のディスクを追加し、新しく追加したディスクの属性を指定できます。この操作を実行すると、Oracle ASMによって、自動的にディスク・グループの均衡が再調整されます。

この句を使用して、ディスクの障害グループを変更することはできません。これを行うには、ディスク・グループからディスクを削除した後で、新しい障害グループの一部として、ディスク・グループにディスクを再度追加します。

ディスク・グループ内の既存のディスク名を特定するには、V$ASM_DISK動的パフォーマンス・ビューを問い合せます。

QUORUM | REGULAR これらのキーワードのセマンティクスは、CREATE DISKGROUP文内のセマンティクスと同じです。これらのキーワードの詳細は、「QUORUM | REGULAR」を参照してください。

既存のディスクまたはディスク・グループで、この修飾子を変更することはできません。したがって、ディスク・グループの作成時に指定されているキーワードと異なるキーワードをこの句内で指定することはできません。

関連項目:
これらのキーワードの使用方法の詳細は、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

FAILGROUP句 この句を使用すると、新しく追加したディスクを障害グループに割り当てることができます。この句を省略して、標準または高冗長性ディスク・グループにディスクを追加すると、Oracle Databaseは、新しく追加されたディスクを自動的に障害グループに追加します。障害グループの暗黙的な名前は、オペレーティング・システムに依存しないディスク名と同じです(「NAME句」を参照)。

外部冗長性ディスク・グループを作成している場合、この句は指定できません。

qualified_disk_clause

この句のセマンティクスは、CREATE DISKGROUP文およびALTER DISKGROUP文で同じです。この句の詳細は、CREATE DISKGROUPの「qualified_disk_clause」を参照してください。

drop_disk_clause

この句を使用すると、ディスク・グループから1つ以上のディスクを削除できます。

DROP DISK DROP DISK句を使用すると、ディスク・グループから1つ以上のディスクを削除し、自動的にディスク・グループの均衡を再調整できます。ディスクを削除すると、Oracle ASMによって、ディスクのすべてのデータが再配置され、ディスクをディスク・グループから除外するためにディスク・ヘッダーが消去されます。FORCEキーワードを指定すると、ディスク・ヘッダーは消去されません。

V$ASM_DISK動的パフォーマンス・ビューのNAME列のように、disk_nameを指定します。

削除するディスクがクォーラム・ディスクであるか、またはクォーラム障害グループに属している場合は、ディスクを削除するためにQUORUMを指定する必要があります。「QUORUM | REGULAR」を参照してください。

DROP DISKS IN FAILGROUP DROP DISKS IN FAILGROUP句を使用すると、指定した障害グループからすべてのディスクを削除できます。他の動作は、DROP DISK句と同じです。

指定した障害グループがクォーラム障害グループである場合は、ディスクを削除するためにQUORUMキーワードを指定する必要があります。「QUORUM | REGULAR」を参照してください。

FORCE | NOFORCE これらのキーワードを使用すると、ディスクがディスク・グループから除外されたとみなされるタイミングを指定できます。デフォルト設定であるNOFORCEを使用することをお薦めします。

- NOFORCEを指定すると、Oracle ASMによって、ディスクのすべてのエクステントが他のディスクに再配置された後で、ディスク・グループからそのディスクが除外され、ディスク・グループの均衡が再調整されます。

注意:
DROP DISK ... NOFORCEを指定すると、ディスクの再利用やシステムからの削除を行っても問題ない状態になる前に制御がユーザーに戻ります。ディスクの除外操作が完了したことを確認するには、V$ASM_DISKビューを問い合せて、HEADER_STATUSの値がFORMERであることを確認します。STATEの値がDROPPINGの場合は、ディスクの削除や再利用はしないでください。V$ASM_OPERATIONビューを問い合せると、ディスク除外によって実行される均衡再調整に必要な時間の概算がわかります。REBALANCE ... WAIT(「rebalance_diskgroup_clause」を参照)も指定した場合は、この文から制御が戻るのは均衡再調整操作が完了してディスクがクリアされたときとなります。ただし、均衡の再調整が失敗することもあるため、V$ASM_DISKのHEADER_STATUS列がFORMERになっていることを必ず確認してください。

- FORCEを指定すると、ディスクは、ディスク・グループからすぐに除外されます。次に、他のディスク上の冗長コピーからデータが再構築され、そのデータが他のディスクに再配置されて、ディスク・グループの均衡が再調整されます。
FORCE句は、削除するディスクをOracle ASMで読み取れなくなった場合などに役立ちます。ただし、NOFORCEによる削除より長い時間がかかり、ファイルの一部の保護が低下することがあります。外部冗長性ディスク・グループに対してFORCEを指定することはできません(そのディスクの冗長データが存在しない場合は、Oracle ASMがそのディスクからデータを読み取ってからでなければそのディスクを除外できないため)。

FORCEやNOFORCEを指定したかどうかにかかわらず、ディスクを削除する際の均衡の再調整操作には時間がかかります。進捗を監視するには、V$ASM_OPERATION動的パフォーマンス・ビューを問い合せます。均衡の再調整操作の詳細は、「rebalance_diskgroup_clause」を参照してください。

resize_disk_clause

この句を使用して、ディスク・グループ内のそれぞれのディスクに新しいサイズを指定できます。この句は、オペレーティング・システムによって戻されるサイズや、以前にディスクに指定したサイズを上書きします。

SIZE 新しいサイズをKB、MB、GBまたはTB単位で指定します。ディスク容量を超えるサイズは指定できません。ディスク容量よりも小さいサイズを指定した場合、Oracle ASMで使用されるディスク容量が制限されます。この句を指定しない場合、Oracle ASMはプログラム的にディスクのサイズを決定します。

replace_disk_clause

この句を使用すると、ディスク・グループ内の1つ以上のディスクを置換できます。この句により、1回の操作でディスクが置換されます。これは各ディスクを削除して追加するより効率的です。

disk_nameには、置換するディスクの名前を指定します。この名前は置換用のディスクに割り当てられます。ディスク名は、V$ASM_DISK動的パフォーマンス・ビューのNAME列を問合せれば表示されます。

path_nameには、置換用ディスクのフルパス名を指定します。

FORCE FORCEを指定すると、Oracle ASMで、ディスク・グループのメンバーである置換用ディスクをディスク・グループに追加できます。

注意:
この方法でFORCEを使用すると、既存のディスク・グループが破棄される可能性があります。

NOFORCE NOFORCEを指定すると、Oracle ASMで、置換用ディスクがディスク・グループのメンバーである場合にエラーを戻すことができます。デフォルトはNOFORCEです。

POWER POWER句のセマンティクスは、POWER値を0に設定できないことを除き、ディスク・グループの均衡の手動再調整と同じです。「POWER」を参照してください。

WAIT | NOWAIT WAITおよびNOWAITキーワードのセマンティクスは、ディスク・グループの均衡の手動再調整と同じです。「WAIT | NOWAIT」を参照してください。

rename_disk_clause

この句を使用すると、ディスク・グループ内の1つ以上のディスクの名前を変更できます。ディスク・グループはMOUNT RESTRICTED状態にあり、このディスク・グループ内のすべてのディスクがオンラインになっている必要があります。

RENAME DISK この句を指定すると、1つ以上のディスクの名前を変更できます。ディスクごとに、old_disk_nameとnew_disk_nameを指定します。new_disk_nameがすでに存在する場合、この操作は失敗します。

RENAME DISKS ALL この句を指定すると、ディスク・グループ内のすべてのディスクの名前を、diskgroupname_####(####はディスク番号)という書式の名前に変更できます。すでにdiskgroupname_####書式になっているディスク名は変更されません。

disk_online_clause

disk_online_clauseを使用すると、1つ以上のディスクをオンラインにし、ディスク・グループの均衡を再調整できます。V$ASM_DISK動的パフォーマンス・ビューのNAME列のように、disk_nameを指定します。ここでのQUORUMおよびREGULARキーワードのセマンティクスは、ディスク・グループへのディスクの追加時と同じセマンティクスとなります。「QUORUM | REGULAR」を参照してください。POWER句のセマンティクスは、ディスク・グループの均衡の手動再調整と同じです。「POWER」を参照してください。WAITおよびNOWAITキーワードのセマンティクスは、ディスク・グループの均衡の手動再調整と同じです。「WAIT | NOWAIT」を参照してください。

disk_offline_clause

disk_offline_clauseを使用すると、1つ以上のディスクをオフラインに切り替えることができます。指定したディスクをオフラインに切り替えることによってディスク・グループの冗長性レベルに違反する場合、この句は失敗します。

V$ASM_DISK動的パフォーマンス・ビューのNAME列のように、disk_nameを指定します。

ここでのQUORUMおよびREGULARキーワードのセマンティクスは、ディスク・グループへのディスクの追加時と同じセマンティクスとなります。「QUORUM | REGULAR」を参照してください。

デフォルトでは、オフラインに切り替えられるとすぐに、ディスクはOracle ASMによって削除されます。timeout_clauseを指定してこの操作を遅らせることにより、ディスクを修復してオンラインに戻すことができます。分単位または時間単位でタイムアウト値を指定できます。単位を指定しない場合、デフォルトは時間です。

この句を複数回指定することによって、タイムアウトの期間を変更できます。指定するたびに、Oracle ASMによって、ディスク・グループがマウントされている間、直近のdisk_offline_clauseからの時間が測定されます。Oracle ASMによってオフライン・ディスクが削除されるまでの残り時間を知るには、V$ASM_DISKのrepair_timer列を問い合せます。

この句によって、disk_repair_time属性の以前の設定が上書きされます。ディスク・グループの属性の詳細は、表14-2「ディスク・グループの属性」を参照してください。

関連項目:
Oracle ASMディスクのオンラインおよびオフラインへの切替えの詳細は、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

rebalance_diskgroup_clause

この句を使用すると、ディスク・グループの均衡を手動で再調整できます。Oracle ASMでは、すべてのドライブ間で均等にデータファイルが再分散されます。記憶域構成が変化すると、Oracle ASMによって、ファイルが均等に配置され、ディスク・グループの均衡が自動的に再調整されるため、この句が必要なことはほとんどありません。ただし、POWER句を使用して均衡の自動再調整操作の速度を制御する場合、この句は便利です。

POWER POWER句には、0から11までの範囲内の値を指定します(0を指定すると均衡の再調整操作は停止し、11を指定するとOracle ASMによる均衡の再調整は可能なかぎり高速で実行されます)。POWER句の値のデフォルトは、ASM_POWER_LIMIT初期化パラメータの値です。

POWER句を省略すると、Oracle ASMによる均衡の自動および指定の再調整操作は、ASM_POWER_LIMIT初期化パラメータの値に基づいて実行されます。

注意:
Oracle Database 11gリリース2(11.2.0.2)以降では、COMPATIBLE.ASMディスク・グループの属性が11.2.0.2以上に設定されている場合、POWER句に0から1024の値を指定できます。

WAIT | NOWAIT この句を使用すると、制御を、均衡の再調整操作のどの段階でユーザーに戻すか指定できます。

- WAITを指定すると、スクリプトでディスクを追加または削除するときに、ディスク・グループの均衡の再調整が完了してからユーザーに制御が戻ります。WAITモードで実行されている再調整操作を明示的に終了させることができますが、操作を終了させても、同じ文の中ですでに完了したディスクの追加や削除の操作が元に戻ることはありません。

- NOWAITは、文の発行後すぐに制御をユーザーに戻す場合に指定します。これはデフォルトです。

均衡の再調整操作の進捗を監視するには、V$ASM_OPERATION動的パフォーマンス・ビューを問い合せます。

関連項目:
ディスク・グループの均衡の再調整の詳細は、ASM_POWER_LIMITおよび『Oracle Automatic Storage Management管理者ガイド』を参照してください。また、「ディスク・グループの均衡の再調整例:」も参照してください。

check_diskgroup_clause

check_diskgroup_clauseを使用すると、Oracle ASMディスク・グループのメタデータの内部一貫性を検証できます。ディスク・グループは、マウントされている必要があります。Oracle ASMによってサマリー・エラーが表示され、検出されたエラーの詳細がアラート・ログに書き込まれます。

CHECKキーワードによって、次の処理が実行されます。

- ディスクの一貫性をチェックします。

- すべてのファイル・エクステント・マップおよび割当て表の一貫性をクロスチェックします。

- 別名メタデータ・ディレクトリおよびファイル・ディレクトリが正しくリンクされていることをチェックします。

- 別名ディレクトリ・ツリーが正しくリンクされていることをチェックします。

- Oracle ASMメタデータ・ディレクトリに、到達不可能なブロックが割り当てられていないことをチェックします。

REPAIR | NOREPAIR この句を使用すると、一貫性チェックで検出されたエラーを修正するかどうかをOracle ASMに指示できます。デフォルトはNOREPAIRです。NOREPAIR設定は、非一貫性が検出された場合には警告を受け取るが、Oracle ASMによる修正処理を自動的に行わない場合に便利です。

非推奨になる予定の句 以前のリリースでは、ALL、DISK、DISKS IN FAILGROUPまたはFILEに対してCHECKを指定できました。これらの句は不要になったため、非推奨になる予定です。指定すると、動作は以前のリリースと同じで、アラート・ログにメッセージが追加されます。ただし、これらの句はサポートされなくなる予定であるため、新しいコードには使用しないことをお薦めします。非推奨になる予定の句は、次のとおりです。

- ALL: ディスク・グループ内のすべてのディスクとファイルをチェックします。

- DISK: ディスク・グループ内の1つ以上の指定したディスクをチェックします。

- DISKS IN FAILGROUP: 指定した障害グループ内のすべてのディスクをチェックします。

- FILE: ディスク・グループ内の1つ以上の指定したファイルをチェックします。ファイル名の参照書式のいずれかを使用する必要があります。Oracle ASMのファイル名の参照書式の詳細は、「ASM_filename」を参照してください。

diskgroup_template_clauses

テンプレートは、属性の名前付きコレクションです。ディスク・グループを作成すると、Oracle ASMによって、システムの一連の初期デフォルト・テンプレートがそのディスク・グループに関連付けられます。テンプレートで定義される属性は、そのディスク・グループ内のすべてのファイルに適用されます。表10-2に、システムのデフォルト・テンプレートと、様々な種類のファイルに適用される属性を示します。表の後に説明するdiskgroup_template_clausesを使用すると、テンプレートの属性を変更して、新しいテンプレートを作成できます。

ディスク・グループ・ファイルを作成した後は、この句を使用して属性を変更することはできません。これを行うには、Recovery Manager(RMAN)を使用して、新しい属性を持つ新しいファイルにそのファイルをコピーする必要があります。

表10-2 Oracle Automatic Storage Managementシステムのファイル・グループのデフォルト・テンプレート

テンプレート名

ファイル・タイプ

外部冗長性のディスク・グループでのミラー化レベル

標準冗長性のディスク・グループでのミラー化レベル

高冗長性のディスク・グループでのミラー化レベル

ストライプ化

リージョン

CONTROLFILE

制御ファイル

非保護

3方向ミラー

3方向ミラー

FINE

COLD

DATAFILE

データファイルとコピー

非保護

双方向ミラー

3方向ミラー

COARSE

COLD

ONLINELOG

オンライン・ログ

非保護

双方向ミラー

3方向ミラー

COARSE

COLD

ARCHIVELOG

アーカイブ・ログ

非保護

双方向ミラー

3方向ミラー

COARSE

COLD

TEMPFILE

一時ファイル

非保護

双方向ミラー

3方向ミラー

COARSE

COLD

BACKUPSET

データファイルのバックアップ・ピース、データファイルの増分バックアップ・ピース、およびアーカイブ・ログのバックアップ・ピース

非保護

双方向ミラー

3方向ミラー

COARSE

COLD

PARAMETERFILE

SPFILE

非保護

双方向ミラー

3方向ミラー

COARSE

COLD

DATAGUARDCONFIG

障害回復構成(スタンバイ・データベースで使用)

非保護

双方向ミラー

3方向ミラー

COARSE

COLD

FLASHBACK

フラッシュバック・ログ

非保護

双方向ミラー

3方向ミラー

COARSE

COLD

CHANGETRACKING

ブロック・チェンジ・トラッキング・データ(増分バックアップで使用)

非保護

双方向ミラー

3方向ミラー

COARSE

COLD

DUMPSET

データ・ポンプ・ダンプ・セット

非保護

双方向ミラー

3方向ミラー

COARSE

COLD

XTRANSPORT

クロス・プラットフォーム変換データファイル

非保護

双方向ミラー

3方向ミラー

COARSE

COLD

AUTOBACKUP

自動バックアップ・ファイル

非保護

双方向ミラー

3方向ミラー

COARSE

COLD

ASMPARAMETERFILE

SPFILE

非保護

双方向ミラー

3方向ミラー

COARSE

COLD

OCRFILE

Oracle Cluster Registryファイル

非保護

双方向ミラー

3方向ミラー

COARSE

COLD

ADD TEMPLATE この句を使用すると、ディスク・グループに1つ以上の名前付きテンプレートを追加できます。既存のテンプレートの名前を特定するには、V$ASM_TEMPLATE動的パフォーマンス・ビューを問い合せます。

MODIFY TEMPLATE この句を使用すると、システムのデフォルト・ディスク・グループ・テンプレートまたはユーザー定義のディスク・グループ・テンプレートの属性を変更できます。指定した属性のみが変更されます。指定していないプロパティは、現在の値のまま変更されません。

注意:
以前のリリースでは、キーワードALTER TEMPLATEがMODIFY TEMPLATEのかわりに使用されました。ALTERキーワードは、下位互換性のためにまだサポートされていますが、他のOracle SQLとの一貫性のためにMODIFYに置き換えられました。

template_name 追加または変更するテンプレートの名前を指定します。テンプレート名には、データベース・スキーマ・オブジェクトと同じネーミング規則および制限が適用されます。データベース・オブジェクト名の詳細は、「データベース・オブジェクトのネーミング規則」を参照してください。

redundancy_clause  新しく追加または変更するテンプレートの冗長性レベルを指定します。

- MIRROR: このテンプレートが適用されるファイルは、データ・ブロックのミラー化によって保護されます。標準冗長性ディスク・グループでは、プライマリ・エクステントごとに1つのミラー・エクステントが存在します(双方向ミラー化)。高冗長性ディスク・グループでは、プライマリ・エクステントごとに2つのミラー・エクステントが存在します(3方向ミラー化)。外部冗長性ディスク・グループのテンプレートには、MIRRORを指定することはできません。

- HIGH: このテンプレートが適用されるファイルは、データ・ブロックのミラー化によって保護されます。標準冗長性および高冗長性ディスク・グループでは、プライマリ・エクステントごとに2つのミラー・エクステントが存在します(3方向ミラー化)。外部冗長性ディスク・グループのテンプレートには、HIGHを指定することはできません。

- UNPROTECTED: このテンプレートが適用されるファイルは、自動ストレージ管理によってメディア障害から保護されません。システムのアクションまたはユーザー・コマンドによってディスクがオフラインになると、保護されていないファイルが失われる可能性があります。外部冗長性ディスク・グループには、UNPROTECTEDのみが有効な設定です。高冗長性ディスク・グループのテンプレートには、UNPROTECTEDを指定することはできません。標準または高冗長性ディスク・グループでは、保護されていないファイルを使用しないことをお薦めします。

この句を指定しない場合、デフォルト値は、標準冗長性ディスク・グループではMIRROR、高冗長性ディスク・グループではHIGH、外部冗長性ディスク・グループではUNPROTECTEDになります。

striping_clause  このテンプレートが適用されるファイルのストライプ化の方法を指定します。

- FINE: このテンプレートが適用されるファイルは、128KB単位でストライプ化されます。このストライプ化モードはOracle ASM spfileでは無効です。

- COARSE: このテンプレートが適用されるファイルは、1MB単位でストライプ化されます。これはデフォルト値です。

disk_region_clause  この句を使用すると、ディスク・グループ・ファイルのインテリジェント・データ配置属性を指定できます。Oracle ASMによってファイルに割り当てるディスク内の領域を次のように指定します。

- HOT: エクステントはスピンドルから最も離れたディスク領域に割り当てられます。ディスク上のこれらの外側のトラックは内側のトラックより長いため、より多くのセクターを含み、スループットもより向上します。

- COLD: エクステントはスピンドルに最も近いディスク領域に割り当てられます。

- MIRRORHOTおよびMIRRORCOLD: ファイルのミラー化されたデータ・ブロックに対する領域を指定します。

目的のディスク領域に使用できる領域がない場合は、Oracle ASMによって他の領域のエクステントが割り当てられますが、領域のサイズを調整するために均衡の再調整が開始されます。

関連項目:
インテリジェント・ディスク配置の詳細は、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

DROP TEMPLATE この句を使用すると、ディスク・グループから1つ以上のテンプレートを削除できます。この句で削除できるのはユーザー定義テンプレートのみであり、システム・デフォルト・テンプレートは削除できません。

diskgroup_directory_clauses

Oracle ASMファイル名の別名(「diskgroup_alias_clauses」を参照)を作成する前に、別名が存在する場所の完全なディレクトリ構造を指定する必要があります。diskgroup_directory_clausesを使用すると、そのようなディレクトリ構造を作成および操作できます。

ADD DIRECTORY この句を使用すると、階層的に名付けられた別名の新しいディレクトリ・パスを作成できます。ディレクトリの各コンポーネントを区切るには、スラッシュ(/)を使用します。各ディレクトリ・コンポーネントの最大長は48バイトであり、スラッシュ文字を含むことはできません。コンポーネントの最初または最後の文字に空白を使用することはできません。ディレクトリ・パス全体の長さは、256バイトから、このディレクトリに作成する別名(「diskgroup_alias_clauses」を参照)の長さを引いた長さを超えることはできません。

DROP DIRECTORY この句を使用すると、階層的に名付けられた別名のディレクトリを削除できます。FORCEが指定されていないかぎり、Oracle ASMでは、別名の定義を含むディレクトリは削除されません。この句は、システム別名の一部として作成されたディレクトリの削除には無効です。そのようなディレクトリは、V$ASM_ALIAS動的パフォーマンス・ビューのSYSTEM_CREATED列の値がYとなっています。

RENAME DIRECTORY この句を使用すると、階層的に名付けられた別名のディレクトリ名を変更できます。この句は、システム別名の一部として作成されたディレクトリ名の変更には無効です。そのようなディレクトリは、V$ASM_ALIAS動的パフォーマンス・ビューのSYSTEM_CREATED列の値がYとなっています。

diskgroup_alias_clauses

Oracle ASMファイルが作成されると(暗黙的かユーザー指定によるかにかかわらず)、Oracle ASMによって、そのファイルには、ドット付きの数値の組で終わる完全修飾名が割り当てられます(「file_specification」を参照)。diskgroup_alias_clausesを使用すると、Oracle ASMファイル名のわかりやすい別名を作成できます。ドット付きの数値の組で終わる別名は指定できません(このような書式を使用すると、Oracle ASMファイル名と区別できないため)。

この句を指定する前に、まずネーミング規則に従ってディレクトリ構造を作成する必要があります(「diskgroup_directory_clauses」を参照)。別名全体の長さは最大256バイトです(ディレクトリの接頭辞を含む)。別名では大/小文字は区別されませんが、大/小文字の区別は保持されます。

ADD ALIAS この句を使用すると、Oracle ASMファイル名の別名を作成できます。alias_nameには、ディレクトリのフルパスと別名を指定します。既存のOracle ASM別名の名前を特定するには、V$ASM_ALIAS動的パフォーマンス・ビューを問い合せます。Oracle ASMファイル名の詳細は、「ASM_filename」を参照してください。

DROP ALIAS この句を使用すると、ディスク・グループ・ディレクトリから別名を削除できます。各別名には、ディレクトリのフルパスと別名を指定します。別名が参照する元のファイルは変更されません。

RENAME ALIAS この句を使用すると、既存の別名を変更できます。alias_nameには、ディレクトリのフルパスと別名を指定します。

別名の削除および名前の変更の制限事項:  システム生成された別名を削除したり、名前を変更することはできません。別名がシステム生成されたものかどうかを確認するには、V$ASM_ALIAS動的パフォーマンス・ビューのSYSTEM_CREATED列を問い合せます。

diskgroup_volume_clauses

これらの句を使用して、物理ボリューム・デバイスに対応する論理Oracle ASM動的ボリューム・マネージャ(Oracle ADVM)のボリュームを操作できます。これらの句を使用するには、Oracle ASMが開始されていて、変更するディスク・グループがマウントされている必要があります。

関連項目:
例を含むディスク・グループ・ボリュームの詳細は、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

add_volume_clause  この句を使用すると、ディスク・グループにボリュームを追加できます。

asm_volumeでは、ボリュームの名前を指定します。名前に使用できるのは英数字のみで、先頭の文字は英字にする必要があります。名前の最大長はプラットフォームによって異なります。詳細は、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

size_clauseには、Oracle ADVMボリュームのサイズを指定します。Oracle ASMインスタンスによって、ボリュームを作成するために十分な領域が存在するかどうかが確認されます。十分な領域が存在しない場合は、Oracle ASMによりエラーが戻されます。十分な領域が存在する場合は、Oracle ASMインスタンスが実行されディスク・グループがマウントされているすべてのクラスタ内ノードに対し、追加が通知されます。Oracle ASMは、ファイル・システムの作成およびマウントに使用可能なボリューム・デバイスをそれらのノード上に作成して使用できるようにします。

次のオプションの設定も使用できます。

- redundancy_clauseで、Oracle ADVMボリュームの冗長性レベルを指定します。標準冗長ディスク・グループでボリュームを作成する場合のみ、この句を指定できます。次のボリューム冗長レベルを指定できます。

- MIRROR: ボリュームの双方向ミラー化。これはデフォルトです。

- HIGH: ボリュームの3方向ミラー化。

- UNPROTECTED: ボリュームのミラー化なし。

高冗長ディスク・グループまたは外部冗長ディスク・グループでボリュームを作成する場合は、redundancy_clauseを指定できません。その場合には、エラーが発生します。高冗長ディスク・グループでは、Oracle Databaseによりボリューム冗長が自動的にHIGH (3方向ミラー化)に設定されます。外部冗長ディスク・グループでは、Oracle Databaseによりボリューム冗長が自動的にUNPROTECTED (ミラー化なし)に設定されます。

- STRIPE_WIDTH句では、Oracle ADVMボリュームのストライプ幅を指定します。有効な値は、4KBから1MBまでの範囲の2の累乗です。デフォルト値は128Kです。

- STRIPE_COLUMNS句では、Oracle ADVMボリュームのストライプ・セット1つ当たりのストライプの数を指定します。有効範囲は1から8です。デフォルトは4です。STRIPE_COLUMNSを1に設定すると、ストライプ化は無効になります。この場合、ストライプ幅はボリュームのエクステント・サイズになります。このボリュームのエクステント・サイズは、ディスク・グループの割当て単位(AU)の64倍です。

- disk_region_clause句では、ディスク・グループ・ボリュームのプライマリとプライマリ以外の両方のミラーのインテリジェント・データ配置属性を指定します。ともにデフォルトはCOLDです。この句の詳細は、「disk_region_clause」を参照してください。

modify_volume_clause:  この句を使用すると、既存のOracle ADVMボリュームの特性を変更できます。次の句を1つ以上指定する必要があります。

- disk_region_clause句では、ディスク・グループ・ボリュームのプライマリとプライマリ以外の両方のミラーのインテリジェント・データ配置属性を指定します。プライマリ・ミラーのデフォルトはCOLDです。ミラーおよび高冗長性のデフォルトはHOTです。この句の詳細は、「disk_region_clause」を参照してください。

- MOUNTPATH句では、ボリュームに関連付けられたマウントパスの名前を指定します。mountpath_nameは、最大1024文字まで指定可能です。

- USAGE句では、ボリュームに関連付けられた使用状況の名前を指定します。usage_nameは、最大30文字まで指定可能です。

RESIZE VOLUME句 この句を使用すると、既存のOracle ADVMボリュームのサイズを変更できます。Oracle ASMクラスタ内のすべてのノードに新しいサイズが伝播されます。ボリューム上にOracle Automatic Storage Managementファイル・システム(ACFS)が存在する場合は、ALTER DISKGROUP文のかわりにacfsutil sizeコマンドを使用する必要があります。

関連項目:
acfsutil sizeコマンドの使用方法の詳細は、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

DROP VOLUME句: この句を使用すると、既存のOracle ADVMボリュームの記憶域コンテナであるOracle ASMファイルを削除できます。Oracle ASMクラスタ内では、Oracle ASMインスタンスが実行されディスク・グループがオープンしているすべてのノードに対する削除操作が通知され、これにより、ボリューム・デバイスが削除されます。ボリューム・ファイルがオープンしている場合は、この句によりエラーが戻されます。

diskgroup_attributes

この句を使用すると、ディスク・グループの属性を指定できます。表14-2「ディスク・グループの属性」に、この句で設定できる属性を示します。この句の動作の詳細は、「CREATE DISKGROUP」の「ATTRIBUTE句」を参照してください。

modify_diskgroup_file

この句を使用すると、既存のディスク・グループ・ファイルのインテリジェント・データ配置属性を変更できます。ファイルのインテリジェント・データ配置を変更する場合、この処理はそのファイルの新しいエクステントには適用されますが、均衡の再調整操作を実行するまでは既存のファイルの内容には影響しません。均衡の再調整を手動で開始することで、新しいインテリジェント・データ配置ポリシーを既存のファイルの内容に適用できます。均衡の再調整操作では、最後に指定したポリシーがファイル・エクステントに対して使用されます。

関連項目:

- この句の詳細は、「disk_region_clause」を参照してください。

- ディスク・グループの均衡の手動による再調整の詳細は、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

drop_diskgroup_file_clause

この句を使用すると、ディスク・グループからファイルを削除できます。Oracle ASMによって、削除するファイルに関連付けられたすべての別名も削除されます。ファイル名の参照書式のいずれかを使用する必要があります。ほとんどのOracle ASMファイルはOracle Managed Filesであり、不要になると自動的に削除されるため、手動で削除する必要はありません。Oracle ASMのファイル名の参照書式の詳細は、「ASM_filename」を参照してください。

ディスク・グループ・ファイルが現在のインスタンスまたはOracle ASMクラスタ内のインスタンスの起動に使用されたspfileである場合は、そのディスク・グループ・ファイルを削除できません。

usergroup_clauses

これらの句を使用して、ディスク・グループにユーザー・グループを追加したり、ディスク・グループからユーザー・グループを削除したり、または既存のユーザー・グループにメンバーを追加したり、そこからメンバーを削除することができます。

関連項目:
例を含むユーザー・グループとメンバーの詳細は、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

ADD USERGROUP  この句を使用すると、ディスク・グループにユーザー・グループを追加できます。ユーザー・グループを作成するには、SYSASMまたはSYSDBA権限が必要です。ユーザー・グループ名は、最大30文字まで指定可能です。ユーザー名を指定する場合は、それがOSパスワード・ファイル内に含まれている必要があります。

MODIFY USERGROUP  これらの句を使用すると、既存のユーザー・グループにメンバーを追加したり、そこからメンバーを削除できます。これらの句を使用するには、ユーザー・グループのOracle ASM管理者(SYSASM権限を所持)またはOracle ASM作成者(SYSDBA権限を所持)である必要があります。ユーザー名は、OSパスワード・ファイル内の既存のユーザーである必要があります。

DROP USERGROUP  この句を使用すると、ディスク・グループから既存のユーザー・グループを削除できます。この句を使用するには、ユーザー・グループのOracle ASM管理者(SYSASM権限を所持)またはOracle ASM作成者(SYSDBA権限を所持)である必要があります。ユーザー・グループを削除すると、有効なユーザー・グループを含まないディスク・グループ・ファイルが残る場合があります。この場合は、「file_permissions_clause」を使用して手動でディスク・グループ・ファイルを更新し、新しい有効なグループを追加できます。

user_clauses

これらの句を使用すると、ディスク・グループにユーザーを追加したり、このグループからユーザーを削除したり、このグループ内のユーザーを置換したりできます。

注意:
SQL*Plusでユーザーを管理するときには、そのユーザーは既存のオペレーティング・システム・ユーザーであり、ユーザー名と対応するオペレーティング・システムのユーザーIDを持っている必要があります。ただし、検証できるユーザーは、Oracle ASMインスタンスと同じクラスタ内のユーザーのみです。

ADD USER  この句を使用すると、Oracle ASMディスク・グループに1人以上のオペレーティング・システム(OS)・ユーザーを追加して、それらのユーザーにディスク・グループに対するアクセス権限を付与できます。指定したユーザーがすでにディスク・グループ内に存在する場合(V$ASM_USERで表示)は、コマンドによってエラーが記録され、他にもユーザーを指定している場合は、続けて他のユーザーの追加が行われます。データベース・インスタンスを実行しているOSユーザーは、インスタンスがディスク・グループにアクセスする際にディスク・グループに自動的に追加されるため、このコマンドを使用する必要はほとんどありません。ただし、この句は特定のデータベース・インスタンスに関連付けられていないユーザーを追加する場合に有効です。

DROP USER  この句を使用すると、ディスク・グループから1人以上のユーザーを削除できます。この句で指定したユーザーがディスク・グループに存在しない場合は、エラーが記録され、他にもユーザーを指定した場合は続けて他のユーザーの削除が行われます。そのユーザーが所有するファイルがある場合は、CASCADEキーワードを指定する必要があります(指定すると、ユーザーとそのユーザーのすべてのファイルが削除されます)。そのユーザーが所有しているファイルがオープンされている場合は、DROP USER CASCADEは失敗し、エラーが戻されます。

ユーザーが所有するファイルを削除せずにユーザーを削除するには、各ファイルの所有者を他のユーザーに変更し、そのユーザーに対してALTER DISKGROUP ... DROP USER文を発行します。また、ALTER DISKGROUP ... REPLACE USER文を発行して、ディスク・グループに存在していないユーザーで、削除するユーザーを置換することもできます。この操作には、それまで削除したユーザーが所有していたファイルを、新しいユーザーが所有するようになるという副作用があります。

REPLACE USER

この句を使用すると、ディスク・グループ内のold_userをnew_userに置換できます。現時点でold_userが所有しているすべてのファイルは、new_userが所有するようになり、old_userはディスク・グループから削除されます。old_userはディスク・グループに存在している必要があり、new_userはディスク・グループに存在していてはいけません。

file_permissions_clause

この句を使用して、ディスク・グループ・ファイルの権限の設定を変更できます。権限の3つのクラスは、所有者、ユーザー・グループおよびその他です。この句を使用するには、ファイルの所有者またはOracle ASM管理者である必要があります。

オープン・ファイルの権限設定を変更すると、その時点でファイルに対して実行している操作は、変更前の権限設定を使用して完了することになります。新しい権限設定は、再認証の要求時に反映されます。

file_owner_clause

この句を使用すると、指定したファイルに対して所有者またはユーザー・グループを設定できます。ファイルの所有者を変更するには、Oracle ASM管理者である必要があります。ファイルのユーザー・グループを変更するには、ファイルの所有者またはOracle ASM管理者である必要があります。さらに、ファイルに関連するユーザー・グループを変更する場合は、指定したユーザー・グループがディスク・グループ内にすでに存在し、ファイルの所有者がそのユーザー・グループのメンバーである必要があります。

オープン・ファイルに対してこの句を使用すると、次の条件が適用されます。

- オープン・ファイルの所有者またはユーザー・グループを変更すると、その時点でファイルに対して実行している操作は、変更前の所有者またはユーザー・グループを使用して完了することになります。新しい所有者またはユーザー・グループは、再認証の要求時に反映されます。

- オープン・ファイルの所有者を変更すると、そのファイルの新しい所有者は、インスタンスを再起動するまでディスク・グループから削除できなくなります。Oracle ASMクラスタでは、そのファイルの新しい所有者は、クラスタ内のすべてのインスタンスを再起動するまで削除できなくなります。

- オープン・ファイルの所有者を変更すると、ファイルの所有権が変更された後でも、そのファイルがオープンしている間は元の所有者を削除できません。

scrub_clause

この句を使用すると、ディスク・グループをスクラブできます。スクラブ操作は、論理データの破損を検査して、標準冗長性および高冗長性のディスク・グループ内で破損を自動的に修復します。

- FILE句を使用すると、ディスク・グループ内の指定したOracle ASMファイルをスクラブできます。ASM_filenameの参照書式のいずれか1つを使用する必要があります。Oracle ASMのファイル名の参照書式の詳細は、「ASM_filename」を参照してください。

- DISK句を使用すると、ディスク・グループ内の指定したディスクをスクラブできます。

- FILEまたはDISKを省略すると、ディスク・グループ内のすべてのファイルとディスクがスクラブされます。

REPAIR | NOREPAIR REPAIRを指定すると、論理データの破損検査中に検出したエラーの修復を試行するようになります。NOREPAIRを指定すると、破損についての警告が通知されますが、Oracle ASMは修正処理を実行しません。デフォルトはNOREPAIRです。

POWER POWER句を使用すると、スクラブ操作の機能レベルを指定できます。有効な値は、AUTO、LOW、HIGH、およびMAXです。この句を省略すると、機能レベルのデフォルトはAUTOになり、POWERはシステムの最適レベルに調整されます。

WAIT | NOWAIT WAITを指定すると、スクラブ操作を完了してからユーザーに制御を戻します。NOWAITを指定すると、操作をスクラブ・キューに追加し、制御をただちにユーザーに戻します。デフォルトは、NOWAITです。

FORCE | NOFORCE FORCEを指定すると、システムのI/O負荷が高い場合や、スクラブ処理がシステム・レベルで無効にされている場合でも、このコマンドが処理されます。NOFORCEを指定すると、コマンドは通常通りに処理されます。デフォルトは、NOFORCEです。

スクラブ操作の進行状況は、V$ASM_ OPERATION動的パフォーマンス・ビューを問い合せることで監視できます。

関連項目:
ディスク・グループのスクラブ処理の詳細は、『Oracle Automatic Storage Management管理者ガイド』、および「ディスク・グループのスクラブ処理例:」を参照してください。

undrop_disk_clause

この句を使用すると、ディスク・グループからのディスクの削除を取り消すことができます。1つ以上のディスク・グループ内のすべてのディスク(diskgroup_nameを指定)、またはすべてのディスク・グループ内のすべてのディスク(ALLを指定)の保留中の削除を取り消すことができます。

ディスク・グループから完全に削除されたディスクや、完全に削除されたディスク・グループに対しては、この句は無効です。この句を指定すると、実行時間が長い操作が行われます。操作の状態を確認するには、V$ASM_OPERATION動的パフォーマンス・ビューを問い合せます。

関連項目:
実行時間が長いOracle ASM操作の詳細は、V$ASM_OPERATIONを参照してください。

diskgroup_availability

この句を使用すると、Oracle ASMインスタンスと同じノードで実行されているデータベース・インスタンスに対して、1つ以上のディスク・グループを使用可能または使用禁止にできます。この句は、クラスタ内の他のノードのディスク・グループの状態には影響しません。

MOUNT MOUNTを指定すると、ローカルOracle ASMインスタンスのディスク・グループをマウントできます。ALL MOUNTを指定すると、ASM_DISKGROUPS初期化パラメータで指定されたすべてのディスク・グループがマウントされます。ファイル操作は、ディスク・グループがマウントされている場合のみ可能です。Oracle ASMがクラスタ内またはOracle Restartで管理されたスタンドアロン・サーバー内で実行されている場合、MOUNT句は対応するリソースを自動的にオンラインにします。

RESTRICTED | NORMAL これらの句を使用すると、ディスク・グループがマウントされる方式を決定できます。

- RESTRICTEDモードでは、ディスク・グループは単一インスタンス排他モードでマウントされます。同じクラスタ内の他のOracle ASMインスタンスは、そのディスク・グループをマウントできません。このモードでは、Oracle ASMクライアントはディスク・グループを使用できません。

- NORMALモードでは、ディスク・グループは共有モードでマウントされるので、他のOracle ASMインスタンスおよびクライアントがディスク・グループにアクセスできます。これはデフォルトです。

FORCE | NOFORCE これらの句を使用すると、ディスク・グループがマウントされる環境を決定できます。

- FORCEモードでは、Oracle ASMは、ディスク・グループに属するすべてのデバイスを検出できない場合でも、そのディスク・グループをマウントしようとします。この設定は、標準冗長性または高冗長性ディスク・グループのディスマウント中に、そのディスクの一部が使用不可になった場合に役立ちます。MOUNT FORCEが成功した場合、Oracle ASMは欠落しているディスクをオフラインにします。
Oracle ASMがディスク・グループ内のすべてのディスクを検出した場合、MOUNT FORCEは失敗します。そのため、MOUNT FORCE設定は、一部のディスクが使用不可の場合にのみ使用します。それ以外の場合は、NOFORCEを使用します。

標準冗長性および高冗長性ディスク・グループでは、1つの障害グループのディスクが使用不可になる場合があり、MOUNT FORCEは正常に実行されます。また、高冗長性ディスク・グループでは、2つの異なる障害グループの2つのディスクが使用不可になる場合があり、MOUNT FORCEは正常に実行されます。使用不可のディスクのその他の組合せでは、Oracle ASMはすべてのユーザー・データまたはメタデータの有効なコピーが使用可能なディスク上にあることを保証できないため、操作は失敗します。

- NOFORCEモードでは、Oracle ASMは、すべてのメンバー・ディスクが検出されないかぎり、ディスク・グループをマウントしようとしません。これはデフォルトです。

関連項目:
初期化パラメータ・ファイルへのディスク・グループ名の追加の詳細は、ASM_DISKGROUPSを参照してください。

DISMOUNT DISMOUNTを指定すると、指定したディスク・グループをディスマウントできます。FORCEが指定されていないかぎり、ディスク・グループのいずれかのファイルがオープンされていると、Oracle ASMによりエラーが戻されます。ALL DISMOUNTを指定すると、現在マウントされているすべてのディスク・グループがディスマウントされます。ファイル操作は、ディスク・グループがマウントされている場合のみ可能です。Oracle ASMがクラスタ内またはOracle Restartで管理されたスタンドアロン・サーバー内で実行されている場合、DISMOUNT句は対応するリソースを自動的にオフラインにします。

FORCE FORCEを指定すると、ディスク・グループのいずれかのファイルがオープンされていてもディスク・グループをディスマウントするように、Oracle ASMに指示できます。

enable_disable_volume

この句を使用すると、ディスク・グループ内の1つ以上のボリュームを有効または無効にできます。

- 有効化したボリュームごとに、Oracle ASMは、ファイル・システムの作成またはマウントに使用可能なボリューム・デバイス・ファイルをローカル・ノード上に作成します。

- 無効化したボリュームごとに、Oracle ASMは、ローカル・ノード上のデバイス・ファイルを削除します。ボリューム・ファイルがローカル・ノード上でオープンしている場合は、DISABLE句によりエラーが戻されます。

ALLキーワードを使用すると、ディスク・グループ内のすべてのボリュームを有効または無効にできます。ALTER DISKGROUP ALL ...を指定する場合は、この句内でALLキーワードも使用する必要があります。

関連項目:
ディスク・グループ・ボリュームの詳細は、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

例

次の例では、dgroup_01というディスク・グループが必要です。ASM_DISKSTRINGが/devices/disks/*に設定されていることが前提となります。またOracleユーザーが/devices/disks/d100への読取り/書込み権限を持っていると想定しています。dgroup_01の作成方法については、「ディスク・グループの作成例:」を参照してください。

ディスク・グループへのディスクの追加例: 次の文は、ディスクd100をディスク・グループdgroup_01に追加します。

ALTER DISKGROUP dgroup_01
ADD DISK '/devices/disks/d100';

ディスク・グループからのディスクの削除例: 次の文は、ディスクdgroup_01_0000をディスク・グループdgroup_01から削除します。

ALTER DISKGROUP dgroup_01
DROP DISK dgroup_01_0000;

ディスク・グループからのディスクの削除の取消し例: 次の文は、ディスク・グループdgroup_01からのディスクの削除を取り消します。

ALTER DISKGROUP dgroup_01
UNDROP DISKS;

ディスク・グループのサイズの変更例: 次の文は、ディスク・グループdgroup_01のすべてのディスクのサイズを変更します。

ALTER DISKGROUP dgroup_01
RESIZE ALL
SIZE 36G;

ディスク・グループの均衡の再調整例: 次の文は、ディスク・グループdgroup_01の均衡を手動で再調整し、Oracle ASMによる均衡の再調整を最高速度で実行します。

ALTER DISKGROUP dgroup_01
REBALANCE POWER 11 WAIT;

WAITキーワードを指定すると、データベースでは、ディスク・グループの均衡が再調整されるのを待機してからユーザーに制御を戻します。

ディスク・グループのメタデータの内部一貫性の検証例: 次の文は、Oracle ASMディスク・グループのメタデータの内部一貫性を検証し、検出されたエラーの修正をOracle ASMに指示します。

ALTER DISKGROUP dgroup_01
CHECK ALL
REPAIR;

ディスク・グループへの名前付きテンプレートの追加例: 次の文は、名前付きテンプレートtemplate_01をディスク・グループdgroup_01に追加します。

ALTER DISKGROUP dgroup_01
ADD TEMPLATE template_01
ATTRIBUTES (UNPROTECTED COARSE);

ディスク・グループ・テンプレートの属性の変更例: 次の文は、システムのデフォルト・ディスク・グループ・テンプレートまたはユーザー定義のディスク・グループ・テンプレートtemplate_01の属性を変更します。

ALTER DISKGROUP dgroup_01
MODIFY TEMPLATE template_01
ATTRIBUTES (FINE);

ディスク・グループからのユーザー定義テンプレートの削除例: 次の文は、ユーザー定義テンプレートtemplate_01をディスク・グループdgroup_01から削除します。

ALTER DISKGROUP dgroup_01
DROP TEMPLATE template_01;

階層的に名付けられた別名のディレクトリ・パスの作成例: 次の文は、別名が存在する場所のディレクトリ構造を指定します。

ALTER DISKGROUP dgroup_01
ADD DIRECTORY '+dgroup_01/alias_dir';

Oracle ASMファイル名の別名の作成例: 次の文は、Oracle ASMの数値のファイル名を指定してユーザー別名を作成します。

ALTER DISKGROUP dgroup_01
ADD ALIAS '+dgroup_01/alias_dir/datafile.dbf'
FOR '+dgroup_01.261.1';

ディスク・グループのスクラブ処理例:

ディスク・グループdgroup_01をスクラブするには、次の文を発行します。この文では、論理データの破損検査中に検出したエラーの修復を試行して、スクラブ操作が完了してからユーザーに制御を返します。

ALTER DISKGROUP dgroup_01
SCRUB REPAIR WAIT;

ディスク・グループのディスマウント例: 次の文は、ディスク・グループdgroup_01をディスマウントします。この文は、アクティブなファイルが1つ以上ある場合でも、ディスク・グループをディスマウントします。

ALTER DISKGROUP dgroup_01
DISMOUNT FORCE;

ディスク・グループのマウント例: 次の文は、ディスク・グループdgroup_01をマウントします。

ALTER DISKGROUP dgroup_01
MOUNT;

ALTER FLASHBACK ARCHIVE

用途

ALTER FLASHBACK ARCHIVE文を使用すると、次の操作を実行できます。

- システムのデフォルトのフラッシュバック・データ・アーカイブとしてのフラッシュバック・データ・アーカイブの指定

- フラッシュバック・データ・アーカイブによって使用される表領域の追加

- フラッシュバック・データ・アーカイブによって使用される表領域の割当て制限の変更

- フラッシュバック・データ・アーカイブによる使用からの表領域の削除

- フラッシュバック・データ・アーカイブの保存期間の変更

- 不要な古いデータのフラッシュバック・データ・アーカイブの消去

関連項目:
フラッシュバック・データ・アーカイブの使用方法の詳細は、『Oracle Database開発ガイド』および「CREATE FLASHBACK ARCHIVE」を参照してください。

前提条件

フラッシュバック・データ・アーカイブを変更するには、FLASHBACK ARCHIVE ADMINISTERシステム権限が必要です。フラッシュバック・データ・アーカイブ表領域を追加、変更または削除するには、影響を受ける表領域に対する適切な権限も必要です。

構文

alter_flashback_archive::=

flashback_archive_quota::=

flashback_archive_retention::=

セマンティクス

flashback_archive

既存のフラッシュバック・データ・アーカイブの名前を指定します。

SET DEFAULT

この句を指定するには、SYSDBAとしてログインしている必要があります。この句を使用すると、このフラッシュバック・データ・アーカイブをシステムのデフォルトのフラッシュバック・データ・アーカイブとして指定できます。CREATE TABLE文またはALTER TABLE文に、フラッシュバック・データ・アーカイブ名を指定しないでflashback_archive_clauseが指定されている場合は、データベースはデフォルトのフラッシュバック・データ・アーカイブを使用して、該当する表のデータを格納します。

この文によって、異なるフラッシュバック・データ・アーカイブのデフォルトとしての以前の指定は上書きされます。

関連項目:
詳細は、「CREATE TABLE」の「flashback_archive_clause」を参照してください。

ADD TABLESPACE

この句を使用すると、フラッシュバック・データ・アーカイブに表領域を追加できます。flashback_archive_quota句を使用して、新規表領域内のフラッシュバック・データ・アーカイブによって使用できる領域の量を指定できます。この句を省略すると、新しく追加された表領域内でフラッシュバック・データ・アーカイブの領域の制限はありません。

MODIFY TABLESPACE

この句を使用すると、フラッシュバック・データ・アーカイブによってすでに使用されている表領域の割当て制限を変更できます。

REMOVE TABLESPACE

この句を使用すると、フラッシュバック・データ・アーカイブによる使用から表領域を削除できます。フラッシュバック・データ・アーカイブによって使用される最後に残った表領域は削除できません。

削除する表領域にフラッシュバック・アーカイブの保存期間内のデータが含まれている場合は、そのデータも削除されます。そのため、この句を使用して表領域を削除する前に、データを別の表領域に移動する必要があります。

MODIFY RETENTION

この句を使用すると、フラッシュバック・データ・アーカイブの保存期間を変更できます。

PURGE

この句を使用すると、フラッシュバック・データ・アーカイブからデータを消去できます。

- PURGE ALLを指定すると、フラッシュバック・データ・アーカイブからすべてのデータが削除されます。この履歴情報は、フラッシュバック問合せで指定されたSCNまたはタイムスタンプがUNDO保存期間内である場合にのみ、フラッシュバック問合せを使用して取得できます。

- PURGE BEFORE SCNを指定すると、指定したシステム変更番号より前のフラッシュバック・データ・アーカイブからすべてのデータが削除されます。

- PURGE BEFORE TIMESTAMPを指定すると、指定したタイムスタンプより前のフラッシュバック・データ・アーカイブからすべてのデータが削除されます。

[NO] OPTIMIZE DATA

この句のセマンティクスは、CREATE FLASHBACK ARCHIVEの[NO] OPTIMIZE DATA句と同じです。

関連項目:
フラッシュバック・データ・アーカイブの作成の詳細およびフラッシュバック・データ・アーカイブの簡単な使用例は、「CREATE FLASHBACK ARCHIVE」を参照してください。

ALTER FUNCTION

用途

ファンクションはPL/SQLを使用して定義されます。このため、この項では一般的な情報について説明します。構文およびセマンティクスの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

ALTER FUNCTION文を使用すると、無効なスタンドアロンのストアド・ファンクションを再コンパイルできます。明示的に再コンパイルすることによって、実行時に暗黙的に再コンパイルする必要がなくなり、また、実行時のコンパイル・エラーとパフォーマンス上のオーバーヘッドもなくなります。

この文では、既存のファンクションの宣言または定義は変更されません。ファンクションを再宣言または再定義する場合は、OR REPLACE句を指定してCREATE FUNCTION文を使用します。「CREATE FUNCTION」を参照してください。

前提条件

ファンクションが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、ALTER ANY PROCEDUREシステム権限が必要です。

構文

alter_function::=

(function_compile_clause: この句の構文の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。)

セマンティクス

schema

ファンクションが含まれているスキーマを指定します。schemaを指定しない場合、ファンクションは自分のスキーマ内にあるとみなされます。

function_name

再コンパイルするファンクション名を指定します。

function_compile_clause

この句の構文とセマンティクスの詳細およびファンクションの作成とコンパイルの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

EDITIONABLE | NONEDITIONABLE

この句を使用すると、schemaのスキーマ・オブジェクト・タイプFUNCTIONのエディショニングが後で有効化されたときに、そのファンクションをエディション・オブジェクトにするか非エディション・オブジェクトにするかを指定できます。デフォルトは、EDITIONABLEです。エディション・オブジェクトと非エディション・オブジェクトの変更の詳細は、『Oracle Database開発ガイド』を参照してください。

ALTER INDEX

用途

ALTER INDEX文を使用すると、既存の索引を変更または再作成できます。

関連項目:
索引の作成については、「CREATE INDEX」を参照してください。

前提条件

索引が自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、ALTER ANY INDEXシステム権限が必要です。

MONITORING USAGE句を実行する場合は、索引は自分のスキーマ内に存在する必要があります。

ドメイン索引を変更する場合は、索引の索引タイプに対してEXECUTEオブジェクト権限が必要です。

オブジェクト権限は、個々の索引パーティションまたはサブパーティションではなく、親索引に付与されている必要があります。

索引パーティションの変更、再作成または分割、索引サブパーティションの変更または再作成を行う場合は、表領域割当て制限が必要です。

構文

alter_index::=

(deallocate_unused_clause ::=, allocate_extent_clause ::=, shrink_clause::=, parallel_clause ::=, physical_attributes_clause ::=, logging_clause::=, partial_index_clause::=, rebuild_clause ::=, alter_index_partitioning ::=)

(ODCI_parametersについては、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。)

deallocate_unused_clause ::=

(size_clause::=を参照)

allocate_extent_clause::=

(size_clause::=を参照)

shrink_clause::=

parallel_clause::=

physical_attributes_clause::=

(storage_clause::=を参照)

logging_clause::=

partial_index_clause::=

rebuild_clause ::=

(parallel_clause ::=、physical_attributes_clause ::=、index_compression::=、logging_clause::=、partial_index_clause::=を参照)

(ODCI_parametersについては、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。XMLIndex_parameters_clauseについては、『Oracle XML DB開発者ガイド』を参照してください。

index_compression::=

prefix_compression::=

advanced_index_compression::=

alter_index_partitioning ::=

(modify_index_default_attrs ::=、add_hash_index_partition ::=、modify_index_partition ::=、rename_index_partition::=、drop_index_partition ::=、split_index_partition::=、coalesce_index_partition ::=、modify_index_subpartition::=を参照)

modify_index_default_attrs ::=

(physical_attributes_clause ::=、logging_clause::=を参照)

add_hash_index_partition ::=

(index_compression::=、parallel_clause::=を参照)

coalesce_index_partition ::=

(parallel_clause ::=を参照)

modify_index_partition ::=

(deallocate_unused_clause ::=、allocate_extent_clause ::=、physical_attributes_clause ::=、logging_clause::=、index_compression::=を参照)

rename_index_partition::=

drop_index_partition ::=

split_index_partition::=

(parallel_clause ::=を参照)

index_partition_description::=

(segment_attributes_clause::=、index_compression::=を参照)

注意:
USABLEキーワードとUNUSABLEキーワードは、split_index_partition句にindex_partition_descriptionが指定されているときにはサポートされません。

segment_attributes_clause::=

(physical_attributes_clause ::=、logging_clause::=を参照)

modify_index_subpartition::=

(allocate_extent_clause ::=、deallocate_unused_clause ::=を参照)

セマンティクス

schema

索引が含まれているスキーマを指定します。schemaを指定しない場合、索引は自分のスキーマ内にあるとみなされます。

index

変更する索引の名前を指定します。

索引変更の制限事項: 索引の変更には、次の制限事項があります。

- indexがドメイン索引である場合は、PARAMETERS句、RENAME句、rebuild_clause(PARAMETERS句の有無に関係なく)、parallel_clauseまたはUNUSABLE句のみ指定できます。その他のすべての句は無効です。

- LOADINGまたはFAILEDのマークが付いているドメイン索引は、変更または名前の変更ができません。索引にFAILEDのマークが付いている場合、REBUILD句のみ指定できます。

関連項目:
ドメイン索引のLOADINGおよびFAILED状態については、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。

deallocate_unused_clause

deallocate_unused_clause句を使用すると、索引の終わりの未使用領域の割当てを明示的に解除し、解放された領域が表領域内の他のセグメントで使用可能になります。

indexがレンジ・パーティションまたはハッシュ・パーティションである場合、各索引パーティションの未使用領域の割当てが解除されます。indexがコンポジット・パーティション表のローカル索引である場合、各索引サブパーティションの未使用領域の割当てが解除されます。

領域の割当て解除の制限事項: 領域の割当て解除には、次の制限事項があります。

- この句は、一時表の索引に対して指定できません。

- この句およびrebuild_clauseは、指定できません。

この句の詳細は、「deallocate_unused_clause」を参照してください。

KEEP integer KEEP句を使用すると、割当てを解除した後に索引に残す、最高水位標を超えるバイト数を指定できます。残りのエクステント数がMINEXTENTSより少ない場合、MINEXTENTSは現行のエクステント数に設定されます。初期エクステントがINITIALより小さくなると、INITIALは初期エクステントの現行の値に設定されます。KEEPを指定しないと、すべての未使用領域が解放されます。

この句の詳細は、「ALTER TABLE」を参照してください。

allocate_extent_clause

allocate_extent_clauseを使用すると、索引の新しいエクステントを明示的に割り当てることができます。ハッシュ・パーティション表のローカル索引に対して、新規エクステントが索引の各パーティションに割り当てられます。

エクステントの割当ての制限事項: この句は、一時表の索引、レンジ・パーティションまたはコンポジット・パーティション索引に対して指定できません。

この句の詳細は、「allocate_extent_clause」を参照してください。

shrink_clause

この句を使用すると、索引セグメントを縮小化できます。ALTER INDEX ... SHRINK SPACE COMPACTを指定することは、ALTER INDEX ... COALESCEを指定することと同じです。

この句の詳細は、「CREATE TABLE」の「shrink_clause」を参照してください。

索引セグメントの縮小の制限事項: この句は、ビットマップ結合索引またはファンクション索引に対して指定できません。

parallel_clause

PARALLEL句を使用すると、索引の問合せおよびDMLに対するデフォルトの並列度を変更できます。

並列化する索引の制限事項: この句は、一時表の索引に対して指定できません。

この句の詳細は、「CREATE TABLE」の「parallel_clause」を参照してください。

関連項目:
「パラレル問合せを使用可能にする例:」

physical_attributes_clause

physical_attributes_clauseを使用すると、非パーティション索引、パーティション索引のすべてのパーティションおよびサブパーティション、指定されたパーティション、または指定されたパーティションのすべてのサブパーティションに対するパラメータの値を変更できます。

関連項目:

- この句のパラメータの詳細は、「CREATE TABLE」を参照してください。

- 「索引の実属性の変更例:」および「MAXEXTENTSの変更例:」を参照してください。

索引の物理属性の制限事項: 索引の物理属性には、次の制限事項があります。

- この句は、一時表の索引に対して指定できません。

- 索引の変更中は、PCTUSEDパラメータを指定できません。

- PCTFREEパラメータは、rebuild_clause、modify_index_default_attrs句またはsplit_index_partition句の一部としてのみ指定できます。

storage_clause

storage_clauseを使用すると、非パーティション索引、索引パーティション、またはパーティション索引のすべてのパーティションの記憶域パラメータ、あるいはパーティション索引の記憶域パラメータのデフォルト値を変更できます。この句の詳細は、「storage_clause」を参照してください。

logging_clause

logging_clauseを使用すると、索引のロギング属性を変更できます。REBUILD句も指定すると、この新しい設定は再構築操作に影響します。REBUILD句でロギングに異なる値を指定した場合、索引および再構築操作のロギング属性として指定された最後のロギング値が使用されます。

索引セグメントには、実表の属性と異なるロギング属性、および同じ実表の他の索引セグメントと異なるロギング属性を指定できます。

索引のログの制限事項: この句は、一時表の索引に対して指定できません。

関連項目:

- この句の詳細は、「logging_clause」を参照してください。

- パラレルDMLの詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

partial_index_clause

partial_index_clauseを使用すると、索引を全索引または部分索引に変更できます。INDEXING FULLを指定すると、索引を全索引に変更できます。INDEXING PARTIALを指定すると、索引を部分索引に変更できます。この句は、パーティション表の索引に対してのみ有効です。この句のセマンティクスの詳細は、CREATE INDEXの「partial_index_clause」を参照してください。

RECOVERABLE | UNRECOVERABLE

これらのキーワードは以前のリリースで非推奨になったもので、それぞれLOGGINGおよびNOLOGGINGに置き換えられています。RECOVERABLEおよびUNRECOVERABLEは、下位互換性のためにサポートされていますが、LOGGINGおよびNOLOGGINGキーワードを使用することをお薦めします。

RECOVERABLEは、パーティション表またはLOBの記憶特性の作成時には無効なキーワードです。UNRECOVERABLEは、パーティション表または索引構成表の作成時には無効なキーワードです。また、CREATE INDEXのAS副問合せ句を使用してのみ指定できます。

rebuild_clause

rebuild_clauseを使用すると、既存の索引、あるいはパーティションまたはサブパーティションのいずれかを再構築できます。索引にUNUSABLEのマークが付いている場合、正常に再構築するとUSABLEになります。ファンクション索引も使用可能にします。索引の基になるファンクションが存在しない場合、再構築文は正常に実行されません。

注意:
索引構成表の2次索引を再構築する場合、Oracle Databaseは、索引が作成されたときの論理ROWIDに含まれる主キー列を保持します。したがって、COMPATIBLE初期化パラメータが10.0.0未満に設定された状態で索引が作成された場合、再構築された索引には、索引キーと、索引キーには含まれない表の主キー列が含まれます。COMPATIBLE初期化パラメータが10.0.0以上に設定された状態で索引が作成された場合、再構築された索引には、索引キーと、索引キーに含まれる主キー列を含む、表のすべての主キー列が含まれます。

索引の再構築の制限事項: 索引の再構築には、次の制限事項があります。

- 一時表の索引は、再構築できません。

- INVALIDのマークが付いているビットマップ索引は再構築できません。制約を削除してからそれを再作成する必要があります。

- パーティション索引全体は、再構築できません。PARTITION句で説明するとおり、各パーティションまたはサブパーティションを再構築する必要があります。

- 同じ文でdeallocate_unused_clauseとrebuild_clauseを指定することはできません。

- 索引全体(ALTER INDEX)またはパーティション(ALTER INDEX ... MODIFY PARTITION)に対して、PCTFREEパラメータ値を変更できません。ALTER INDEX文の他のすべての形式では、PCTFREEを指定できます。

- ドメイン索引の場合

- 指定できるのは、PARAMETERS句(索引または索引のパーティション用)またはparallel_clauseのみです。その他の再構築の句は無効です。

- 索引にIN_PROGRESSのマークが付いていない場合にのみ、索引を再構築できます。

- 索引にIN_PROGRESSまたはFAILEDのマーク、パーティションにIN_PROGRESSのマークが付いていない場合にのみ、索引パーティションを再構築できます。

- ローカル索引は再構築できませんが、ALTER INDEX ... REBUILD PARTITIONでローカル索引のパーティションを再構築できます。

- ハッシュ・パーティションまたはハッシュ・サブパーティションのローカル索引に指定できるパラメータは、TABLESPACEのみです。

- 遅延可能一意制約を適用するために使用されるオンライン索引は、再構築できません。

PARTITION句

PARTITION句を使用すると、索引の1つのパーティションを再構築できます。この句は、索引パーティションを別の表領域に移動したり、作成時の物理属性を変更するために使用できます。

ブロック・サイズが異なる表領域のパーティション化されたデータベース・エンティティの記憶域には、制限事項があります。これらの制限事項については、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

パーティションの再構築の制限事項: この句は、コンポジット・パーティション表のローカル索引に対して指定できません。かわりに、REBUILD SUBPARTITION句を使用してください。

関連項目:
パーティションのメンテナンス操作については、『Oracle Database VLDBおよびパーティショニング・ガイド』および「使用禁止の索引パーティションの再構築例:」を参照してください。

SUBPARTITION句

SUBPARTITION句を使用すると、索引の1つのサブパーティションを再構築できます。この句を使用して、索引サブパーティションを他の表領域に移動することもできます。TABLESPACEを指定しないと、サブパーティションは同じ表領域に再構築されます。

ブロック・サイズが異なる表領域のパーティション化されたデータベース・エンティティの記憶域には、制限事項があります。これらの制限事項については、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

索引のサブパーティション変更の制限事項 サブパーティションに対して指定できるパラメータは、TABLESPACE、ONLINEおよびparallel_clauseのみです。

REVERSE | NOREVERSE

索引ブロックのバイトを逆順に格納するかどうかを示します。

- REVERSEを指定すると、索引の再構築時に、索引ブロックのバイトが逆順で格納され、ROWIDが除外されます。

- NOREVERSEを指定すると、索引の再構築時に、逆順にせずに索引ブロックのバイトが格納されます。NOREVERSEキーワードを指定せずにREVERSE索引を再構築すると、再構築された索引は、逆キーの索引になります。

逆索引の制限事項: 逆索引には、次の制限事項があります。

- ビットマップ索引または索引構成表は逆順には格納できません。

- パーティションまたはサブパーティションに対して、REVERSEまたはNOREVERSEを指定できません。

関連項目:
「索引ブロックの逆順格納例:」

parallel_clause

parallel_clauseを使用すると、索引の再構築をパラレル化して索引自体の並列度を変更できます。その索引に対する後続のすべての操作は、次にデータ定義言語(DDL)文のparallel_clauseによって上書きされるまで、この句に指定された並列度で実行されます。次の例外があります。

- 索引を再構築する前にALTER SESSION DISABLE PARALLEL DDLが指定されている場合は、索引がシリアルで再構築され、索引の並列度が1に変更されます。

- 索引を再構築する前にALTER SESSION FORCE PARALLEL DDLが指定されている場合は、索引がパラレルで再構築され、索引の並列度がALTER SESSION文で指定された値に変更されます。値がない場合は、DEFAULTに変更されます。

関連項目:
「索引のパラレル再構築例:」

TABLESPACE句

再構築された索引、索引パーティションまたは索引サブパーティションが格納される表領域を指定します。デフォルトは、再構築の前に索引またはパーティションが格納されていた表領域です。

index_compression

index_compression句を使用して、索引の索引圧縮を有効化または無効化します。prefix_compression句を指定して、索引の接頭辞圧縮を有効化または無効化します。advanced_index_compression句を指定して、索引の拡張索引圧縮を有効化または無効化します。

index_compression句は、CREATE INDEXおよびALTER INDEXに対して同じセマンティクスを持ちます。これらの句の詳細は、CREATE INDEXのindex_compressionを参照してください。

ONLINE句

ONLINEを指定すると、表またはパーティションのDML操作を索引の再構築中に可能にするかどうかを指定できます。

オンライン索引の制限事項: オンライン索引には、次の制限事項があります。

- オンライン索引の作成中は、パラレルDMLはサポートされません。ONLINEを指定し、続いてパラレルDML文を発行すると、Oracle Databaseはエラーを戻します。

- ビットマップ結合索引またはクラスタ索引には、ONLINEを指定できません。

- 索引構成表の一意でない2次索引の場合、索引構成表内の索引キー列の数と論理ROWIDの主キー列の数の合計は、32以下にする必要があります。論理ROWIDは、索引キーに含まれる列を除外します。

logging_clause

ALTER INDEX ... REBUILD操作をログに記録するかどうかを指定します。

この句の詳細は、「logging_clause」を参照してください。

PARAMETERS句

この句は、トップレベルのALTER INDEX文およびrebuild_clauseのドメイン索引に対してのみ有効です。この句は、未解析のまま適切なODCI索引タイプ・ルーチンに渡されたパラメータ文字列を指定します。

パラメータ文字列の最大長は1,000文字です。

索引全体を変更または再構築する場合、文字列は索引レベルのパラメータを参照する必要があります。索引のパーティションを再構築する場合、文字列はパーティション・レベルのパラメータを参照する必要があります。

indexにUNUSABLEのマークが付いている場合、パラメータを変更するのみではUSABLEにはなりません。UNUSABLEのマークが付いた索引を使用可能にするには、その索引を再構築する必要があります。

Oracle Textがインストール済の場合、Oracle Text固有のパラメータを使用するOracle Textのドメイン索引を再構築することができます。パラメータの詳細は、『Oracle Textリファレンス』を参照してください。

PARAMETERS句の制限事項: indexにIN_PROGRESSまたはFAILEDのマークが付いておらず、IN_PROGRESSのマークが付いた索引パーティションが存在せず、変更対象のパーティションにFAILEDのマークが付いていない場合にのみ、索引パーティションを変更できます。

関連項目:

- ドメイン索引の索引タイプ・ルーチンの詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。

- ドメイン索引の詳細は、「CREATE INDEX」を参照してください。

XMLIndex_parameters_clause

この句は、XMLIndex索引に対してのみ有効です。この句は、XMLIndex実装を定義するパラメータ文字列を指定します。

パラメータ文字列の最大長は1,000文字です。

索引全体を変更または再構築する場合、文字列は索引レベルのパラメータを参照する必要があります。索引のパーティションを再構築する場合、文字列はパーティション・レベルのパラメータを参照する必要があります。

indexにUNUSABLEのマークが付いている場合、パラメータを変更するのみではUSABLEにはなりません。UNUSABLEのマークが付いた索引を使用可能にするには、その索引を再構築する必要があります。

関連項目:
XMLIndex_parameters_clauseの構文およびセマンティクスを含むXMLIndexの詳細は、『Oracle XML DB開発者ガイド』を参照してください。

XMLIndex_parameters_clauseの制限事項: indexにIN_PROGRESSまたはFAILEDのマークが付いておらず、IN_PROGRESSのマークが付いた索引パーティションが存在せず、変更対象のパーティションにFAILEDのマークが付いていない場合にのみ、索引パーティションを変更できます。

COMPILE句

この句を使用すると、無効な索引を明示的に再コンパイルできます。ドメイン索引の場合、この句は、システム管理されたドメイン索引をサポートするように基礎となる索引タイプが変更され、その結果として既存のドメイン索引がINVALIDとマークされた場合に有効です。これにより、このALTER INDEX文によって、ドメイン索引はユーザー管理されたドメイン索引からシステム管理されたドメイン索引に移行されます。すべてのタイプの索引の場合、ALTER TABLE文によって索引がINVALIDとマークされている場合にこの句が役立ちます。この場合、このALTER INDEX文は、再作成しないで索引を再検証します。

関連項目:
システム管理されたドメイン索引の作成の詳細は、「CREATE INDEXTYPE」の「storage_table_clause」および『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。

ENABLE句

ENABLEは、使用禁止になったファンクション索引(ALTER INDEX ... DISABLE文によって使用禁止になったものか、その索引で使用されるユーザー定義ファンクションが削除または置換されたために使用禁止になったもののいずれか)にのみ適用されます。次の条件が該当する場合、この句によって、このような索引が使用可能になります。

- ファンクションが現在有効な場合。

- 現行のファンクションのシグネチャが、索引が作成された場合のファンクションのシグネチャと一致する場合。

- ファンクションに現在DETERMINISTICのマークが付いている場合。

ファンクション索引の使用可能化の制限事項: ENABLE句には、次の制限事項があります。

- ENABLEと同じ文内では、ALTER INDEXの他の句の指定はできません。

- この句は、一時表の索引に対して指定できません。かわりに、その索引を削除し、再作成する必要があります。DBMS_METADATAパッケージを使用して、その索引の作成DDLを取得できます。

DISABLE句

DISABLEは、ファンクション索引のみに適用されます。この句を使用してファンクション索引を使用禁止にします。たとえば、ファンクションの本体を処理する場合に、これを行います。その後、ENABLEキーワードを使用して、索引を再構築、または別のALTER INDEX文を指定できます。

USABLE | UNUSABLE

索引、索引パーティションまたは索引サブパーティションにUNUSABLEのマークを付けるには、UNUSABLEを指定します。索引、索引パーティションまたは索引サブパーティションにUNUSABLEのマークを付けると、そのオブジェクトに割り当てられていた領域はすぐに解放されます。使用禁止の索引を使用可能にする場合、再構築するか、または削除して再作成する必要があります。1つのパーティションにUNUSABLEのマークが付いている場合も、同じ索引の他のパーティションは有効です。その索引を必要とする文が使用禁止のパーティションにアクセスしない場合、その文を実行できます。また、使用禁止のパーティションは、分割または名前を変更してから再構築できます。詳細は、CREATE INDEX ... USABLE | UNUSABLEを参照してください。

ONLINE: ONLINEを指定すると、表またはパーティションに対するDML操作を許可しながら、索引をUNUSABLEにすることを指示できます。この句を指定すると、データベースは索引セグメントを削除しないようになります。

索引への使用禁止のマーク付けの制限 次の制限は索引への使用禁止のマーク付けに適用されます。

- 一時表の索引に対してUNUSABLEは指定できません。

- グローバル索引がパーティション・メンテナンス操作中にUNUSABLEにマーク付けされた場合、データベースは使用禁止索引セグメントを削除しません。

VISIBLE | INVISIBLE

この句を使用すると、オプティマイザで索引を参照可能にするかどうかを指定できます。この句の詳細は、「CREATE INDEX」の「VISIBLE | INVISIBLE」を参照してください。

RENAME句

この句を指定すると、索引の名前を変更できます。new_index_nameは単一の識別子で、スキーマ名は含まれません。

索引の名前の変更の制限事項: ドメイン索引の場合、indexおよびindexのパーティションにIN_PROGRESSまたはFAILEDのマークが付いていると無効になります。

関連項目:
「索引の名前の変更例:」

COALESCE句

COALESCEを指定すると、ブロックを再利用するために、索引ブロックの内容を空きブロックにマージできます(可能な場合)。

CLEANUP: CLEANUPを指定すると、表のパーティション・メンテナンス操作で事前に削除または切捨てされたレコードの孤立した索引エントリを削除できます。

孤立した索引エントリが索引に含まれているかどうかを判断するには、USER_、DBA_、ALL_INDEXESデータ・ディクショナリ・ビューのORPHANED_ENTRIES列を問い合せます。詳細は、『Oracle Databaseリファレンス』を参照してください。

parallel_clause parallel_clauseを使用すると、結合操作をパラレル化するかどうかを指定できます。

この句の詳細は、「CREATE TABLE」の「parallel_clause」を参照してください。

索引ブロックの結合の制限事項: 索引ブロックの結合には、次の制限事項があります。

- この句は、一時表の索引に対して指定できません。

- この句は、索引構成表の主キー索引に対して指定できません。かわりにALTER TABLEのCOALESCE句を使用します。

関連項目:

- 領域管理および索引の結合の詳細は、『Oracle Database管理者ガイド』を参照してください。

- 索引構成表の領域の結合の詳細は、「COALESCE句」を参照してください。

- 索引セグメントを縮小化する他の方法については、「shrink_clause」を参照してください。

MONITORING USAGE | NOMONITORING USAGE

この句を使用すると、索引の使用を監視するかどうかを決定できます。

- MONITORING USAGEを指定すると、索引の監視が開始されます。まず、索引の使用に関する既存の情報が削除され、ALTER INDEX ... NOMONITORING USAGE文が次に実行されるまで、索引の使用が監視されます。

- NOMONITORING USAGEを指定すると、索引の監視を終了できます。

このALTER INDEX ... NOMONITORING USAGE文が発行された後、索引が使用されたかどうかを調べるには、USER_OBJECT_USAGEデータ・ディクショナリ・ビューのUSED列を問い合せます。

関連項目:
USER_OBJECT_USAGEデータ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

UPDATE BLOCK REFERENCES句

UPDATE BLOCK REFERENCES句は、索引構成表の通常のドメイン索引に対してのみ有効です。この句を指定すると、主キーによって識別されるブロックの適切なデータベース・アドレスとともに索引行の一部として格納され、失効したと推測されるすべてのデータ・ブロック・アドレスを更新することができます。

ドメイン索引では、AlterIndexUpdBlockRefsに設定されたalter_optionパラメータでODCIIndexAlterルーチンが実行されます。このルーチンはカートリッジ・コードを使用可能にし、失効したと推測される索引のデータ・ブロック・アドレスを更新します。

UPDATE BLOCK REFERENCESの制限事項: この句をALTER INDEXの他の句と組み合せることはできません。

alter_index_partitioning

ALTER INDEX文のパーティション化句は、パーティション索引に対してのみ有効です。

ブロック・サイズが異なる表領域のパーティション化されたデータベース・エンティティの記憶域には、制限事項があります。これらの制限事項については、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

索引のパーティション変更の制限事項: 索引のパーティション変更には、次の制限事項があります。

- これらの句は、一時表の索引に対して指定できません。

- ベース索引に対するいくつかの操作を1つのALTER INDEX文にまとめることはできますが(RENAMEおよびREBUILDは除く)、パーティション操作を、他のパーティション操作またはベース索引に対する操作と組み合せることはできません。

modify_index_default_attrs

パーティション索引のデフォルト属性に新しい値を指定します。

パーティションのデフォルト属性の変更の制限事項: ハッシュ・パーティション・グローバル索引またはハッシュ・パーティション表の索引の属性には、TABLESPACEのみを指定できます。

TABLESPACE 索引の新規パーティション、または索引パーティションのサブパーティションに対して、デフォルトの表領域を指定します。

logging_clause パーティション索引または索引パーティションのデフォルトのロギング属性を指定します。

この句の詳細は、「logging_clause」を参照してください。

FOR PARTITION FOR PARTITION句を使用すると、コンポジット・パーティション表にあるローカル索引のパーティションのサブパーティションに対して、デフォルトの属性を指定できます。

FOR PARTITIONの制限事項: リスト・パーティションに対してFOR PARTITIONを指定することはできません。

関連項目:
「デフォルト属性の変更例:」

add_hash_index_partition

この句を使用すると、ハッシュ・パーティション・グローバル索引にパーティションを追加できます。Oracle Databaseは、ハッシュ・パーティションを追加し、ハッシュ・ファンクションによって索引の既存のハッシュ・パーティションから再ハッシュされた索引エントリをそのハッシュ・パーティションに移入します。パーティション名を省略すると、SYS_Pnの形式でパーティション名が割り当てられます。TABLESPACE句を省略すると、その索引に対して指定された表領域にパーティションが配置されます。索引の表領域が指定されていない場合、パーティションは、ユーザーのデフォルトの表領域(指定されている場合)またはシステムのデフォルトの表領域に配置されます。

modify_index_partition

modify_index_partition句を使用すると、索引パーティションpartitionまたはそのサブパーティションの実物理属性、ロギング属性または記憶特性を変更できます。ハッシュ・パーティション・グローバル索引の場合、この句に指定できる副次句はUNUSABLEのみです。

COALESCE この句を指定すると、ブロックを再利用するために、索引パーティション・ブロックの内容を空きブロックにマージできます(可能な場合)。

CLEANUP: CLEANUPを指定すると、表のパーティション・メンテナンス操作で事前に削除または切捨てされたレコードの孤立した索引エントリを削除できます。

孤立した索引エントリが索引パーティションに含まれているかどうかを判断するには、USER_、DBA_、ALL_PART_INDEXESデータ・ディクショナリ・ビューのORPHANED_ENTRIES列を問い合せます。詳細は、『Oracle Databaseリファレンス』を参照してください。

UPDATE BLOCK REFERENCES UPDATE BLOCK REFERENCES句は、索引構成表の通常の索引に対してのみ有効です。この句を使用すると、2次索引パーティションに格納されている、失効したと推測されるすべてのデータ・ブロック・アドレスを更新することができます。

UPDATE BLOCK REFERENCESの制限事項: この句には、次の制限事項があります。

- ハッシュ・パーティション表の索引に対して、physical_attributes_clauseを指定することはできません。

- ALTER INDEXの他の句とともに、UPDATE BLOCK REFERENCESを指定することはできません。

注意:
索引がコンポジット・パーティション表のローカル索引である場合、ここで指定した変更は、以前に索引のサブパーティションに対して指定した属性を上書きします。また、そのパーティションに対して今後作成されるサブパーティションの属性値のデフォルト値となります。サブパーティションの属性はそのままで、パーティションのデフォルトの属性を変更するには、ALTER TABLE ... MODIFY DEFAULT ATTRIBUTES FOR PARTITIONを使用します。

関連項目:
「索引への使用禁止のマーク付けの例:」

UNUSABLE句 索引パーティションに対するこの句の機能は、索引全体の場合と同じです。「USABLE | UNUSABLE」を参照してください。

index_compression この句が意味を持つのは、コンポジット・パーティション索引に対してのみです。この句を使用すると、パーティションおよびそのパーティションのすべてのサブパーティションの圧縮属性を変更できます。パーティション内の各索引サブパーティションの状態は自動的にUNUSABLEと設定されるため、これらのサブパーティションを再構築する必要があります。パーティションのprefix_compression句を指定する前に、接頭辞圧縮を索引に指定する必要があります。または、パーティションのadvanced_index_compression句を指定する前に、拡張索引圧縮を索引に指定する必要があります。この句は、パーティション・レベルでのみ指定できます。個々のサブパーティションの圧縮属性を変更することはできません。

非コンポジット索引パーティションにもこの句を指定できます。ただし、非コンポジット・パーティションには、再構築と圧縮属性の設定を1つの手順で行うrebuild_clauseを使用する方が効率的です。

rename_index_partition

rename_index_partition句を使用すると、索引パーティションまたはサブパーティションの名前をnew_nameに変更できます。

索引パーティションの名前の変更の制限事項: 索引パーティションの名前の変更には、次の制限事項があります。

- リスト・パーティションのサブパーティションは名前を変更できません。

- ドメイン索引のパーティションの場合、indexにIN_PROGRESSまたはFAILEDのマークを付けることはできません。また、パーティションにIN_PROGRESS、名前を変更するパーティションにFAILEDのマークを付けることはできません。

関連項目:
「索引パーティションの名前の変更例:」

drop_index_partition

drop_index_partition句を使用すると、グローバル・パーティション索引からパーティションとその中のデータを削除できます。グローバル索引のパーティションを削除する場合、その索引の次のパーティションにUNUSABLEのマークが付けられます。グローバル索引の最上位のパーティションは削除できません。

関連項目:
「索引パーティションの削除例:」

split_index_partition

split_index_partition句を使用すると、レンジ・パーティション・グローバル索引のパーティションを2つのパーティションに分割し、新しいパーティションを索引に追加できます。この句は、ハッシュ・パーティション・グローバル索引に対しては無効です。かわりに、add_hash_index_partition句を使用してください。

UNUSABLEのマークが付いたパーティションを分割すると、2つのパーティションが生成されますが、その両方にUNUSABLEのマークが付けられます。このようなパーティションは、使用前に再構築する必要があります。

USABLEのマークが付いたパーティションを分割すると、索引データが移入された2つのパーティションが生成されます。新しいパーティションは、どちらもUSABLEのマークが付きます。

AT句 split_partition_1に新しい上限(境界は含まない)を指定します。value_listの値は、partition_name_oldの分割前のパーティション境界より小さく、その次の最小のパーティション(そのようなパーティションがある場合)のパーティション境界より大きい値である必要があります。

INTO句 分割の結果、生成される2つのパーティションの名前と物理属性を任意に指定します。

関連項目:
「パーティションの分割例:」

coalesce_index_partition

この句は、ハッシュ・パーティション・グローバル索引に対してのみ有効です。索引パーティションの数が1つ減少します。結合するパーティションは、ハッシュ・ファンクションの要件に基づいて選択されます。この句を使用するのは、選択されたパーティションの索引エントリを残りのパーティションのいずれかに分散した後で、その選択されたパーティションを削除する場合です。

modify_index_subpartition

modify_index_subpartition句を使用すると、コンポジット・パーティション表にあるローカル索引のサブパーティションに対する領域のUNUSABLEのマーク付け、割当てまたは割当て解除が可能になります。このようなサブパーティションの他のすべての属性は、パーティション・レベルのデフォルトの属性から継承されます。

例

索引ブロックの逆順格納例: 次の文は、索引ブロックのバイトが逆順に格納されるように、索引ord_customer_ix(「索引の作成例:」で作成)を再構築します。

ALTER INDEX ord_customer_ix REBUILD REVERSE;

索引のパラレル再構築例: 次の文は、パラレル実行プロセスを使用して、既存の索引のスキャンおよび新しい索引の構築を行い、既存の索引から索引を再構築します。

ALTER INDEX ord_customer_ix REBUILD PARALLEL;

索引の実属性の変更例: 次の文は、同じ索引に将来追加されるデータ・ブロックが、5つの初期トランザクション・エントリを使用するように、索引oe.cust_lname_ixを変更します。

ALTER INDEX oe.cust_lname_ix
INITRANS 5;

索引oe.cust_lname_ixがパーティション化されている場合、この文は将来追加される索引のパーティションのデフォルト属性も変更します。将来追加されるパーティションでは、5つの初期トランザクション・エントリと100KBの増分エクステントが使用されます。

パラレル問合せを使用可能にする例: 次の文は、索引upper_ix(「ファンクション索引の作成例:」で作成)に対するスキャンがパラレル化されるように、索引のパラレル属性を設定します。

ALTER INDEX upper_ix PARALLEL;

索引の名前の変更例: 次の文は、索引の名前を変更します。

ALTER INDEX upper_ix RENAME TO upper_name_ix;

索引への使用禁止のマーク付けの例: 次の文は、cost_ix索引(「レンジ・パーティション・グローバル索引の作成例:」で作成)を使用します。この索引のパーティションp1は、「索引パーティションの削除例:」で削除されています。最初の文は、索引パーティションp2にUNUSABLEのマークを付けます。

ALTER INDEX cost_ix
MODIFY PARTITION p2 UNUSABLE;

次の文は、索引cost_ix全体にUNUSABLEのマークを付けます。

ALTER INDEX cost_ix UNUSABLE;

使用禁止の索引パーティションの再構築例: 次の文は、cost_ix索引のパーティションp2およびp3を再構築し、索引をもう一度使用可能にします。パーティションp3の再構築はログに記録されません。

ALTER INDEX cost_ix
REBUILD PARTITION p2;
ALTER INDEX cost_ix
REBUILD PARTITION p3 NOLOGGING;

MAXEXTENTSの変更例: 次の文は、パーティションp3のエクステントの最大数を変更し、ロギング属性を変更します。

/* This example will fail if the tablespace in which partition p3
resides is locally managed.
*/
ALTER INDEX cost_ix MODIFY PARTITION p3
STORAGE(MAXEXTENTS 30) LOGGING;

索引パーティションの名前の変更例: 次の文は、cost_ix索引(「レンジ・パーティション・グローバル索引の作成例:」で作成)の索引パーティションの名前を変更します。

ALTER INDEX cost_ix
RENAME PARTITION p3 TO p3_Q3;

パーティションの分割例: 次の文は、索引cost_ixのパーティションp2(「レンジ・パーティション・グローバル索引の作成例:」で作成)をp2aとp2bに分割します。

ALTER INDEX cost_ix
SPLIT PARTITION p2 AT (1500)
INTO ( PARTITION p2a TABLESPACE tbs_01 LOGGING,
PARTITION p2b TABLESPACE tbs_02);

索引パーティションの削除例: 次の文は、cost_ix索引から索引パーティションp1を削除します。

ALTER INDEX cost_ix
DROP PARTITION p1;

デフォルト属性の変更例: 次の文は、ローカル・パーティション索引prod_idx(「ハッシュ・パーティション表の索引の作成例:」で作成)のデフォルトの属性を変更します。将来追加されるパーティションでは、5つの初期トランザクション・エントリが使用されます。

ALTER INDEX prod_idx
MODIFY DEFAULT ATTRIBUTES INITRANS 5;

ALTER INDEXTYPE

用途

ALTER INDEXTYPE文を使用すると、索引タイプの演算子を追加または削除したり、実装タイプを変更したり、索引タイプのプロパティを変更することができます。

前提条件

索引タイプが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、ALTER ANY INDEXTYPEシステム権限が必要です。

新しい演算子を追加する場合は、その演算子に対するEXECUTEオブジェクト権限が必要です。

実装タイプを変更する場合は、新しい実装タイプに対するEXECUTEオブジェクト権限が必要です。

構文

alter_indextype::=

(using_type_clause::=、storage_table_clauseを参照)

using_type_clause::=

(array_DML_clause ::=を参照)

array_DML_clause ::=

storage_table_clause::=

セマンティクス

schema

索引タイプが存在するスキーマ名を指定します。schemaを指定しない場合、この索引タイプは自分のスキーマ内にあるとみなされます。

indextype

変更する索引タイプの名前を指定します。

ADD | DROP

ADDまたはDROP句を使用すると、演算子を追加または削除できます。

削除には特別な権限は必要ありません。

- schemaには、演算子を含むスキーマを指定します。schemaを指定しない場合、その演算子は自分のスキーマ内にあるとみなされます。

- operatorには、索引タイプによってサポートされる演算子の名前を指定します。
この句に指定するすべての演算子は有効な演算子である必要があります。

- parameter_typeには、演算子へのパラメータ・タイプを指定します。

using_type_clause

USING句を使用すると、索引タイプを実装する新しいタイプを指定できます。

array_DML_clause

この句を使用すると、ODCIIndexInsertメソッドで配列インタフェースをサポートする索引タイプを変更できます。

typeおよびvarray_type 索引付けする列のデータ型がユーザー定義のオブジェクト型である場合、この句を指定して、Oracleがtypeの列値を保持するために使用するVARRAYのvarray_typeを識別する必要があります。索引タイプで型のリストがサポートされている場合、対応するVARRAY型のリストを指定できます。typeまたはvarray_typeでschemaを省略した場合、型が自分のスキーマ内に定義されているとみなされます。

索引付けする列のデータ型が組込みシステム型である場合、その索引タイプに指定されたVARRAY型は、システムで定義されたODCI型よりも優先されます。

COMPILE

この句を使用すると、索引タイプを明示的に再コンパイルできます。通常、索引タイプは自動的に再コンパイルされるため、この句は一部のアップグレード操作の後でのみ指定する必要があります。

storage_table_clause

この句では、索引タイプを変更する場合に、索引タイプを作成するときと同じ動作になります。詳細は、「CREATE INDEXTYPE」の「storage_table_clause」を参照してください。

WITH LOCAL PARTITION

この句では、索引タイプを変更する場合に、索引タイプを作成するときと同じ動作になります。詳細は、「CREATE INDEXTYPE」の句「WITH LOCAL PARTITION」を参照してください。

例

索引タイプの変更例: 次の例は、position_indextype索引タイプ(「索引タイプの作成例:」で作成)をコンパイルします。

ALTER INDEXTYPE position_indextype COMPILE;

ALTER JAVA

用途

ALTER JAVA文を使用すると、Javaクラス・スキーマ・オブジェクトの変換、またはJavaソース・スキーマ・オブジェクトのコンパイルを強制実行できます。(Java名に対するすべての外部参照を他のクラスと対応付ける前に、Javaクラスのメソッドをコールすることはできません。)

関連項目:
Javaクラスの変換およびJavaソースのコンパイルの詳細は、『Oracle Database Java開発者ガイド』を参照してください。

前提条件

Javaソースやクラスが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、ALTER ANY PROCEDUREシステム権限が必要です。さらに、Javaクラスに対するEXECUTEオブジェクト権限も必要です。

構文

alter_java::=

(invoker_rights_clause::=を参照)

invoker_rights_clause::=

セマンティクス

JAVA SOURCE

ALTER JAVA SOURCEを使用すると、Javaソース・スキーマ・オブジェクトをコンパイルできます。

JAVA CLASS

ALTER JAVA CLASSを使用すると、Javaクラス・スキーマ・オブジェクトを変換できます。

object_name

以前作成したJavaクラスまたはソース・スキーマ・オブジェクトを指定します。小文字、または大文字と小文字を組み合せた名前を付けるには、二重引用符を使用してください。

RESOLVER

RESOLVER句を使用すると、Javaクラスまたはソースが作成されたときに指定したマッピング・ペアを使用して、完全に指定された参照用のJava名に対するスキーマの検索方法を指定できます。

関連項目:
「CREATE JAVA」および「Javaクラスの変換例:」を参照してください。

RESOLVE | COMPILE

RESOLVEおよびCOMPILEは、同義のキーワードです。これらの句を使用すると、プライマリJavaクラス・スキーマ・オブジェクトの変換を指定できます。

- クラスに適用された場合、他のクラス・スキーマ・オブジェクトに対する参照名に変換されます。

- ソースに適用された場合、ソースがコンパイルされます。

invoker_rights_clause

invoker_rights_clauseを使用すると、クラスを定義したユーザーのスキーマ内で、そのユーザーの権限を使用してクラスのメソッドを実行するか、または、CURRENT_USERのスキーマ内で、そのユーザーの権限を使用してクラスのメソッドを実行するかを指定できます。

また、この句は、問合せ、DML操作、およびその型のメンバー・ファンクションおよびプロシージャ内の動的SQL文の外部名の変換方法も定義します。

AUTHID CURRENT_USER CURRENT_USERを指定すると、クラスのメソッドがCURRENT_USER権限で実行されることを指定できます。この句はデフォルトで、実行者権限クラスを作成します。

また、この句は、問合せ、DML操作、および動的SQL文の外部名をCURRENT_USERのスキーマで変換することも指定します。他のすべての文における外部名は、メソッドを含むスキーマで変換します。

AUTHID DEFINER DEFINERを指定すると、クラスを定義したユーザーの権限を使用してそのクラスのメソッドを実行できます。

さらに、メソッドのあるスキーマ内で外部名を変換するかどうかを指定します。

関連項目:
CURRENT_USERの判断方法については、『Oracle Database PL/SQL言語リファレンス』を参照してください。

例

Javaクラスの変換例: 次の文は、Javaクラスを強制変換します。

ALTER JAVA CLASS "Agent"
RESOLVER (("/usr/bin/bfile_dir/*" pm)(* public))
RESOLVE;

11 SQL文: ALTER LIBRARYからALTER SYSTEM

この章では、次のSQL文について説明します。

- ALTER LIBRARY

- 「ALTER MATERIALIZED VIEW」

- ALTER MATERIALIZED VIEW LOG

- ALTER MATERIALIZED ZONEMAP

- ALTER OPERATOR

- ALTER OUTLINE

- ALTER PACKAGE

- ALTER PLUGGABLE DATABASE

- ALTER PROCEDURE

- ALTER PROFILE

- ALTER RESOURCE COST

- ALTER ROLE

- ALTER ROLLBACK SEGMENT

- ALTER SEQUENCE

- 「ALTER SESSION」

- ALTER SYNONYM

- ALTER SYSTEM

ALTER LIBRARY

用途

ALTER LIBRARY文を使用すると、ライブラリを明示的に再コンパイルできます。明示的に再コンパイルすることによって、実行時に暗黙的に再コンパイルする必要がなくなり、また、実行時のコンパイル・エラーとパフォーマンス上のオーバーヘッドもなくなります。

注意:
この文を使用して、既存のライブラリの宣言や定義を変更することはできません。ライブラリを再宣言または再定義する場合は、「CREATE LIBRARY」にOR REPLACE句を指定します。

前提条件

ライブラリがSYSスキーマ内にある場合、SYSDBAとして接続する必要があります。そうでない場合は、ライブラリが自分のスキーマ内にあるか、ALTER ANY LIBRARYシステム権限が必要です。

構文

alter_library::=

(library_compile_clause: この句の構文の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。)

セマンティクス

schema

ライブラリが含まれているスキーマを指定します。schemaを指定しない場合、プロシージャは自分のスキーマ内にあるとみなされます。

library_name

再コンパイルするライブラリの名前を指定します。

library_compile_clause

この句の構文とセマンティクスの詳細およびライブラリの作成とコンパイルの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

EDITIONABLE | NONEDITIONABLE

この句を使用すると、schemaのスキーマ・オブジェクト・タイプLIBRARYのエディショニングが後で有効化されたときに、そのライブラリをエディション・オブジェクトにするか非エディション・オブジェクトにするかを指定できます。デフォルトは、EDITIONABLEです。エディション・オブジェクトと非エディション・オブジェクトの変更の詳細は、『Oracle Database開発ガイド』を参照してください。

ALTER MATERIALIZED VIEW

用途

マテリアライズド・ビューは、問合せ結果を含むデータベース・オブジェクトです。問合せのFROM句には、表、ビューおよびその他のマテリアライズド・ビューを指定できます。これらをあわせて、マスター表(レプリケーション用語)またはディテール表(データ・ウェアハウス用語)といいます。このマニュアルでは、マスター表という用語を使用します。マスター表が格納されているデータベースをマスター・データベースといいます。

ALTER MATERIALIZED VIEW文を使用すると、既存のマテリアライズド・ビューを次の方法で変更できます。

- 記憶特性を変更します。

- リフレッシュ方法、モードまたは時間を変更します。

- 別のタイプのマテリアライズド・ビューになるように構造を変更します。

- クエリー・リライトを使用可能または使用禁止にします。

注意:
下位互換性を保つために、MATERIALIZED VIEWのかわりにキーワードSNAPSHOTもサポートされています。

関連項目:

- マテリアライズド・ビューの作成の詳細は、「CREATE MATERIALIZED VIEW」を参照してください。

- レプリケーション環境でのマテリアライズド・ビューの詳細は、『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

- データ・ウェアハウス環境でのマテリアライズド・ビューの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

前提条件

マテリアライズド・ビューが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、ALTER ANY MATERIALIZED VIEWシステム権限が必要です。

クエリー・リライトでマテリアライズド・ビューを使用可能にする場合、次の条件が必要です。

- マテリアライズド・ビュー内のすべてのマスター表が自分のスキーマ内にある場合、QUERY REWRITE権限が必要です。

- いずれかのマスター表が別のスキーマ内にある場合、GLOBAL QUERY REWRITE権限が必要です。

- マテリアライズド・ビューが別のユーザーのスキーマ内にある場合、ユーザーおよびそのスキーマ所有者の両方に、前述の適切なQUERY REWRITE権限が必要です。また、マテリアライズド・ビューの所有者は、マテリアライズド・ビュー所有者が所有しないすべてのマスター表へのSELECT権限を持っている必要があります。

evaluation_edition_clauseまたはunusable_editions_clauseでエディションを指定するには、そのエディションに対するUSE権限が必要になります。

構文

alter_materialized_view::=

(physical_attributes_clause::=、modify_mv_column_clause::=、table_compression::=、inmemory_alter_table_clause::=、LOB_storage_clause::=、modify_LOB_storage_clause::=、alter_table_partitioning ::= (ALTER TABLEの一部)、parallel_clause::=、logging_clause::=、allocate_extent_clause::=、deallocate_unused_clause::=、shrink_clause::=、alter_iot_clauses::=、scoped_table_ref_constraint::=、alter_mv_refresh::=、evaluation_edition_clause::=、alter_query_rewrite_clause::=を参照)

physical_attributes_clause::=

(storage_clause::=を参照)

modify_mv_column_clause::=

table_compression::=

inmemory_alter_table_clause::=

(inmemory_parameters::=、inmemory_column_clause::=)

inmemory_parameters::=

(inmemory_memcompress::=、inmemory_priority::=、inmemory_distribute::=、inmemory_duplicate::=)

inmemory_memcompress::=

inmemory_priority::=

inmemory_distribute::=

inmemory_duplicate::=

inmemory_column_clause::=

(inmemory_memcompress::=)

LOB_storage_clause::=

(LOB_storage_parameters::=を参照)

LOB_storage_parameters::=

(LOB_parameters::=、storage_clause::=を参照)

LOB_parameters::=

(storage_clause::=、logging_clause::=を参照)

modify_LOB_storage_clause::=

(modify_LOB_parameters::=を参照)

modify_LOB_parameters::=

(storage_clause::=、LOB_retention_clause::=、LOB_compression_clause::=、logging_clause::=、allocate_extent_clause::=、shrink_clause::=、deallocate_unused_clause::=を参照)

parallel_clause::=

logging_clause::=

allocate_extent_clause::=

(size_clause::=を参照)

deallocate_unused_clause::=

(size_clause::=を参照)

shrink_clause::=

alter_iot_clauses::=

(index_org_table_clause::=、alter_overflow_clause::=を参照。alter_mapping_table_clausesは、マテリアライズド・ビューではサポートされていません。)

index_org_table_clause::=

(mapping_table_clauseは、マテリアライズド・ビューではサポートされていません。prefix_compressionは、マテリアライズド・ビューの変更でサポートされていません。index_org_overflow_clause::=を参照)

index_org_overflow_clause::=

(segment_attributes_clause::=(「ALTER TABLE」の項)を参照)

alter_overflow_clause::=

(allocate_extent_clause::=、shrink_clause::=、deallocate_unused_clause::=を参照)

add_overflow_clause::=

(segment_attributes_clause::=(「ALTER TABLE」の項)を参照)

scoped_table_ref_constraint::=

alter_mv_refresh::=

evaluation_edition_clause::=

alter_query_rewrite_clause::=

注意:
QUERY REWRITEのみを指定することはできません。ENABLEまたはDISABLEのどちらかを指定するか、副次句のunusable_editions_clauseを指定する必要があります。

unusable_editions_clause::=

セマンティクス

schema

マテリアライズド・ビューが含まれているスキーマを指定します。schemaを指定しない場合、このマテリアライズド・ビューは自分のスキーマ内にあるとみなされます。

materialized_view

変更するマテリアライズド・ビューの名前を指定します。

physical_attributes_clause

PCTFREE、PCTUSED、INITRANSパラメータの値(USING INDEX句で使用する場合は、INITRANSパラメータ値のみ)、およびマテリアライズド・ビューの記憶特性を指定します。PCTFREE、PCTUSEDおよびINITRANSパラメータの詳細は「ALTER TABLE」、記憶特性の詳細は「storage_clause」を参照してください。

modify_mv_column_clause

この句を使用すると、マテリアライズド・ビューのこの列を暗号化または復号化できます。この句の詳細は、「CREATE TABLE」の句「encryption_spec」を参照してください。

table_compression

table_compression句を使用すると、ディスクおよびメモリーの使用量を削減するために、データ・セグメントを圧縮するかどうかを指定できます。この句のセマンティクスの詳細は、「CREATE TABLE」の句「table_compression」を参照してください。

inmemory_alter_table_clause

inmemory_alter_table_clauseを使用して、マテリアライズド・ビューのインメモリー列ストアを有効化または無効化します。この句のセマンティクスは、ALTER MATERIALIZED VIEWおよびALTER TABLE文で同じです。ALTER TABLEのinmemory_alter_table_clauseを参照してください。

LOB_storage_clause

LOB_storage_clauseを使用すると、新しいLOBの記憶特性を指定できます。マテリアライズド・ビューのLOB記憶域は、表の場合と同様に動作します。LOB記憶域パラメータの詳細は、「CREATE TABLE」の「LOB_storage_clause」を参照してください。

modify_LOB_storage_clause

modify_LOB_storage_clauseを使用すると、LOB属性LOB_itemの物理属性またはLOBオブジェクト属性を変更できます。マテリアライズド・ビューのLOB記憶域の変更は、表の場合と同様に動作します。

関連項目:
変更可能なLOB記憶域パラメータの詳細は、「ALTER TABLE」の「modify_LOB_storage_clause」を参照してください。

alter_table_partitioning

マテリアライズド・ビューのパーティション化の句の構文および一般的な機能は、パーティション表と同じです。「ALTER TABLE」の「alter_table_partitioning」を参照してください。

マテリアライズド・ビューのパーティション変更の制限事項: partitioning_clausesでは、LOB_storage_clauseまたはmodify_LOB_storage_clauseを指定できません。

注意:
マテリアライズド・ビューの内容をマスター表の内容と同期させて保持するには、表パーティションを削除または切り捨てた後、表に依存しているすべてのマテリアライズド・ビューを手動で完全リフレッシュすることをお薦めします。

MODIFY PARTITION UNUSABLE LOCAL INDEXES この句を使用すると、partitionに関連付けられたすべてのローカル索引パーティションに、UNUSABLEのマークが付きます。

MODIFY PARTITION REBUILD UNUSABLE LOCAL INDEXES この句を使用すると、partitionに関連付けられた、使用禁止のローカル索引パーティションを再構築できます。

parallel_clause

parallel_clauseを使用すると、マテリアライズド・ビューのデフォルトの並列度を変更できます。

この句の詳細は、「CREATE TABLE」の「parallel_clause」を参照してください。

logging_clause

この句を使用すると、マテリアライズド・ビューのロギング特性を指定または変更できます。この句の詳細は、「logging_clause」を参照してください。

allocate_extent_clause

allocate_extent_clauseを使用すると、マテリアライズド・ビューの新しいエクステントを明示的に割り当てることができます。この句の詳細は、「allocate_extent_clause」を参照してください。

deallocate_unused_clause

deallocate_unused_clause句を使用すると、マテリアライズド・ビューの末尾にある未使用領域の割当てを明示的に解除でき、解放された領域を他のセグメントに使用できるようになります。この句の詳細は、「deallocate_unused_clause」を参照してください。

shrink_clause

この句を使用すると、マテリアライズド・ビューのセグメントを縮小化できます。この句の詳細は、「CREATE TABLE」の「shrink_clause」を参照してください。

CACHE | NOCACHE

アクセス頻度の高いデータについて、CACHEは、全表スキャンの実行時にこの表に対して取り出された各ブロックを、バッファ・キャッシュのLRUリストの最高使用頻度側に入れることを指定します。この属性は、小規模な参照表で有効です。NOCACHEは、ブロックをLRUリストの最低使用頻度側に入れることを指定します。この句の詳細は、「CREATE TABLE」の「CACHE | NOCACHE | CACHE READS」を参照してください。

alter_iot_clauses

alter_iot_clausesを使用すると、索引構成マテリアライズド・ビューの特性を変更できます。alter_iot_clausesのコンポーネントのキーワードおよびパラメータのセマンティクスは、ALTER TABLEと同じですが、次の制限事項があります。

索引構成マテリアライズド・ビューの変更の制限事項: index_org_table_clauseのmapping_table_clauseまたはprefix_compression句は指定できません。

関連項目:
索引構成マテリアライズド・ビューの作成については、「CREATE MATERIALIZED VIEW」の「index_org_table_clause」を参照してください。

USING INDEX句

この句を使用すると、マテリアライズド・ビューのデータをメンテナンスするために使用される索引のINITRANSパラメータおよびSTORAGEパラメータの値を変更できます。

USING INDEX句の制限事項: この句では、PCTUSEDまたはPCTFREEパラメータは指定できません。

MODIFY scoped_table_ref_constraint

MODIFY scoped_table_ref_constraint句を使用すると、新しい表または新しい列の別名にREF列または属性の有効範囲を再指定できます。

REF列の有効範囲の再指定の制限事項: ALTER MATERIALIZED VIEW文では、1つのREF列または属性の有効範囲のみを再指定することができます。この句は、この文以外では使用できません。

alter_mv_refresh

alter_mv_refresh句を使用すると、自動リフレッシュの方法、モードおよび日時のデフォルト値を変更できます。マテリアライズド・ビューのマスター表の内容が変更された場合、マテリアライズド・ビューのデータを更新し、現在マスター表にあるデータを正確に反映させる必要があります。この句によって、自動的にマテリアライズド・ビューをリフレッシュする日時をスケジューリングし、リフレッシュの方法およびモードを指定できます。

注意:
この句では、デフォルトのリフレッシュ・オプションのみを設定します。リフレッシュを実際に行う手順は、『Oracle Databaseアドバンスト・レプリケーション』および『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

FAST句

FASTを指定すると、高速リフレッシュ方法を指定できます。これはマスター表に対して行った変更に従ってリフレッシュを行います。この変更は、マスター表に関連付けられたマテリアライズド・ビュー・ログ(従来型DML変更の場合)またはダイレクト・ローダー・ログ(ダイレクト・パスINSERT操作の場合)に格納されます。

従来型DMLの変更の場合も、ダイレクト・パスINSERT操作の場合も、他の条件によって、高速リフレッシュへのマテリアライズド・ビューの適応性が制限されることがあります。

ALTER MATERIALIZED VIEW文でリフレッシュ方法をFASTに変更した場合、これは検証されていません。マテリアライズド・ビューが高速リフレッシュに適応しない場合、このビューをリフレッシュしようとするとエラーが戻されます。

関連項目:

- レプリケーション環境における高速リフレッシュの制限については、『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

- データ・ウェアハウス環境における高速リフレッシュの制限については、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

- 「自動リフレッシュの例:」

COMPLETE句

COMPLETEを指定すると、完全リフレッシュ(マテリアライズド・ビューを定義する問合せを実行することによって実装)が実行されます。完全リフレッシュを指定すると、高速リフレッシュが実行可能であっても、完全リフレッシュが実行されます。

関連項目:
「完全リフレッシュの例:」

FORCE句

FORCEを指定すると、リフレッシュ時に、高速リフレッシュが可能な場合は高速リフレッシュを実行し、そうでない場合は完全リフレッシュを実行できます。

ON COMMIT句

ON COMMITを指定すると、マテリアライズド・ビューのマスター表に対するトランザクションをコミットするときに必ずリフレッシュが実行されます。

ON COMMITおよびON DEMANDの両方を指定することはできません。ON COMMITを指定した場合、START WITHまたはNEXTを指定できません。

ON COMMITの制限事項: この句は、マテリアライズド結合ビューおよび単一表マテリアライズド集計ビューにのみサポートされます。

関連項目:
『Oracle Databaseアドバンスト・レプリケーション』および『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

ON DEMAND句

ON DEMANDを指定すると、マテリアライズド・ビューは、3つのDBMS_MVIEWリフレッシュ・プロシージャのいずれかのコールによる要求でリフレッシュされます。ON COMMITおよびON DEMANDのどちらも指定しなかった場合、ON DEMANDがデフォルトになります。

ON COMMITおよびON DEMANDの両方を指定することはできません。START WITHおよびNEXTは、ON DEMANDより優先されます。このため、START WITHまたはNEXTを指定したときは、ほとんどの場合、ON DEMANDを指定しても意味がありません。

関連項目:

- これらのプロシージャの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

- REFRESH ON DEMANDを指定することによって作成できるマテリアライズド・ビューのタイプについては、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

START WITH句

START WITH dateを指定すると、最初の自動リフレッシュ時間を表す日付を指定できます。

NEXT句

NEXTを指定すると、自動リフレッシュの間隔を計算するための日付式を指定できます。

START WITH値およびNEXT値は、将来の時刻に評価される値です。START WITH値を省略した場合、Oracle Databaseはマテリアライズド・ビューの作成時刻に対してNEXT式を評価することによって、最初の自動リフレッシュ時刻を判断します。START WITH値を指定し、NEXT値を指定しない場合、Oracle Databaseは1回のみマテリアライズド・ビューをリフレッシュします。START WITH値およびNEXT値のどちらも指定しない場合、またはalter_mv_refreshを指定しない場合、Oracle Databaseはマテリアライズド・ビューを自動リフレッシュしません。

WITH PRIMARY KEY句

WITH PRIMARY KEYを指定すると、ROWIDマテリアライズド・ビューを主キー・マテリアライズド・ビューに変更できます。主キー・マテリアライズド・ビューを使用すると、高速リフレッシュを継続できるマテリアライズド・ビューの機能に影響せずに、マテリアライズド・ビュー・マスター表を再編成できます。

この句を指定するには、マスター表に、使用可能な主キー制約が定義され、この制約に基づき、主キー情報を記録するマテリアライズド・ビュー・ログが定義されている必要があります。

関連項目:

- 主キー・マテリアライズド・ビューの詳細は、『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

- 「主キー・マテリアライズド・ビューの例:」

USING ROLLBACK SEGMENT句

自動UNDOモードではロールバック・セグメントではなくUNDO表領域が使用されるため、データベースが自動UNDOモードの場合、この句は無効です。自動UNDOモードを使用することをお薦めします。この句は、ロールバック・セグメントが使用される以前のバージョンのOracle Databaseが含まれるレプリケーション環境との下位互換性のためにサポートされています。

この句の詳細は、「CREATE MATERIALIZED VIEW」の「USING ROLLBACK SEGMENT句」を参照してください。

USING ... CONSTRAINTS句

この句のセマンティクスは、CREATE MATERIALIZED VIEWおよびALTER MATERIALIZED VIEW文で同じです。詳細は、「CREATE MATERIALIZED VIEW」の「USING ... CONSTRAINTS句」を参照してください。

evaluation_edition_clause

この句を使用すると、マテリアライズド・ビューの評価エディションを変更できます。この句のセマンティクスは、CREATE MATERIALIZED VIEWおよびALTER MATERIALIZED VIEW文で同じです。この句の詳細は、CREATE MATERIALIZED VIEWの「evaluation_edition_clause」を参照してください。

マテリアライズド・ビューの評価エディション変更の注意事項: マテリアライズド・ビューの評価エディションを変更するときには、次の注意事項が適用されます。

- REFRESH ON COMMITモードのマテリアライズド・ビューを変更するきに、CONSIDER FRESHを指定していないと、Oracle Databaseはマテリアライズド・ビューの完全リフレッシュを実行します。

- REFRESH ON DEMANDモードのマテリアライズド・ビューを変更するきに、CONSIDER FRESHを指定していないと、Oracle Databaseはマテリアライズド・ビューの失効状態をSTALEに設定します。

- REFRESH ON COMMITモードおよびREFRESH ON DEMANDモードのマテリアライズド・ビューの場合、評価エディションを変更して、CONSIDER FRESHを指定すると、Oracle Databaseはマテリアライズド・ビューの失効状態の更新と、マテリアライズド・ビューの再構築を実行しなくなります。そのため、CONSIDER FRESHを指定することで、評価エディションが変更されていても、subqueryが生成する結果に違いがないことを示せます。マテリアライズド・ビューが失効していて、この文を発行する前に高速リフレッシュまたは完全リフレッシュが必要になる場合、この状態は変更されないため、マテリアライズド・ビューには不適切なデータが含まれる可能性があります。

alter_query_rewrite_clause

この句を使用すると、マテリアライズド・ビューをクエリー・リライトで使用できるかどうかを指定できます。

ENABLE句 ENABLEを指定すると、クエリー・リライトでマテリアライズド・ビューを使用可能にできます。マテリアライズド・ビューにunusable_editions_clause指定している場合や、以前に指定していた場合、使用禁止のエディションでクエリー・リライトを有効にすることはできません。

関連項目:
「クエリー・リライトを使用可能にする例:」

マテリアライズド・ビューを使用可能にする場合の制限事項: マテリアライズド・ビューを使用可能にする処理には、次の制限事項があります。

- マテリアライズド・ビューが無効または使用禁止の場合、ENABLEモードでもクエリー・リライトに適応しません。

- マテリアライズド・ビューの全体または一部がビューから作成されている場合、クエリー・リライトを使用可能にできません。

- マテリアライズド・ビューのすべてのユーザー定義ファンクションがDETERMINISTICである場合のみ、クエリー・リライトを使用可能にできます。

関連項目:
CREATE FUNCTION

- 文内の式が反復可能な場合のみ、クエリー・リライトを使用可能にできます。たとえば、CURRENT_TIMEまたはUSERを含めることはできません。

関連項目:
クエリー・リライトの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

DISABLE句 DISABLEを指定すると、クエリー・リライトでマテリアライズド・ビューを使用禁止にできます。マテリアライズド・ビューが無効な場合、使用禁止であるかどうかにかかわらず、クエリー・リライトの使用には適応しません。ただし、使用禁止にされたマテリアライズド・ビューをリフレッシュすることはできます。

unusable_editions_clause この句を使用すると、クエリー・リライトに適格にならないマテリアライズド・ビューのエディションを指定できます。この句のセマンティクスは、CREATE MATERIALIZED VIEWおよびALTER MATERIALIZED VIEW文で同じです。この句の詳細は、CREATE MATERIALIZED VIEWの「unusable_editions_clause」を参照してください。

クエリー・リライトにマテリアライズド・ビューを使用し、使用禁止にされたエディションでコンパイルされたカーソルは無効になります。

COMPILE

COMPILEを指定すると、マテリアライズド・ビューを明示的に再検証できます。マテリアライズド・ビューが依存するオブジェクトを削除または変更した場合、マテリアライズド・ビューはアクセス可能のままですが、クエリー・リライトに対しては無効です。再度、明示的にマテリアライズド・ビューの妥当性チェックを行い、クエリー・リライトの使用に適応させるには、この句を使用します。

マテリアライズド・ビューの再妥当性チェックに失敗すると、リフレッシュできなくなるか、またはクエリー・リライトに使用できなくなります。

関連項目:
「マテリアライズド・ビューのコンパイル例:」

CONSIDER FRESH

この句を使用すると、マスター表が変更された後のマテリアライズド・ビューの失効状態を管理することができます。CONSIDER FRESHは、マテリアライズド・ビューが最新であり、TRUSTEDまたはSTALE_TOLERATEDモードでのクエリー・リライトに適応するとみなされるように指定します。

注意:
CONSIDER FRESH句は、CONSIDER FRESH句を発行する前にマテリアライズド・ビュー・ログの行を適用したり、パーティション・チェンジ・トラッキングの変更をマテリアライズド・ビューに適用しないようにデータベースに指示します。つまり、保留中の変更は無視され削除されます。これらはマテリアライズド・ビューに適用されません。これにより、マテリアライズド・ビューに、実表とほぼ同じ量のデータが含まれる可能性があります。

Oracle Databaseは、マテリアライズド・ビューが最新であるかどうかを保証できないため、ENFORCEDモードでのクエリー・リライトはサポートしません。また、この句はマテリアライズド・ビューの失効状態をUNKNOWNに設定します。失効状態は、ALL_MVIEWS、DBA_MVIEWSおよびUSER_MVIEWSの各データ・ディクショナリ・ビューのSTALENESS列に表示されます。

いずれかのマスター表の内容が変更された場合、マテリアライズド・ビューは失効します。この句は、Oracle Databaseに対して、マテリアライズド・ビューが最新で、変更されていないものと仮定するように指示します。そのため、リフレッシュが保留されているこれらの表に対する実際の更新内容は、マテリアライズド・ビューから削除されます。

関連項目:

- クエリー・リライトの詳細、およびマスター表へのパーティション・メンテナンス操作の影響については、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

- 「CONSIDER FRESHの例:」

例

自動リフレッシュの例: 次の文は、マテリアライズド・ビューsales_by_month_by_state(「マテリアライズド集計ビューの作成例:」で作成)のリフレッシュ方法のデフォルトをFASTに変更します。

ALTER MATERIALIZED VIEW sales_by_month_by_state
REFRESH FAST;

これ以降のマテリアライズド・ビューの自動リフレッシュは、高速リフレッシュになります。これは、単純なマテリアライズド・ビューであり、そのマスター表には、マテリアライズド・ビューの作成前または最後のリフレッシュ前に作成されたマテリアライズド・ビュー・ログがあります。

REFRESH句にSTART WITHまたはNEXTの値が指定されていないため、マテリアライズド・ビューsales_by_month_by_stateを作成したとき、または最後に変更したときにREFRESH句で設定されたリフレッシュ間隔がそのまま使用されます。

次の文は、マテリアライズド・ビューsales_by_month_by_stateの新しい自動リフレッシュ間隔を設定します。

ALTER MATERIALIZED VIEW sales_by_month_by_state
REFRESH NEXT SYSDATE+7;

REFRESH句にSTART WITHの値が指定されていないため、マテリアライズド・ビューsales_by_month_by_stateが作成されたとき、または最後に変更されたときに指定されたSTART WITHとNEXTの値によって設定された日時に次の自動リフレッシュが行われます。

次回の自動リフレッシュのときに、このマテリアライズド・ビューがリフレッシュされるとともに、NEXTの式SYSDATE+7が評価されて次回の自動リフレッシュの日時が決定し、それ以降もこのマテリアライズド・ビューのリフレッシュは自動的に週1回行われます。REFRESH句ではリフレッシュ方法が明示的には指定されていないため、CREATE MATERIALIZED VIEW文または最後に実行されたALTER MATERIALIZED VIEW文のREFRESH句で指定されたリフレッシュ方法が引き続き使用されます。

CONSIDER FRESHの例: 次の文は、Oracle Databaseがマテリアライズド・ビューsales_by_month_by_stateを最新であるとみなすように指定します。この文を使用すると、sales_by_month_by_stateのマスター表に対してパーティション・メンテナンス操作を実行した後でも、sales_by_month_by_stateに対してTRUSTEDモードでのクエリー・リライトが可能です。

ALTER MATERIALIZED VIEW sales_by_month_by_state CONSIDER FRESH;

前の文の結果として、マテリアライズド・ビューの最後のリフレッシュ以降に実表に加えられたパーティション管理操作は、マテリアライズド・ビューには適用されません。たとえば、マテリアライズド・ビューの次のリフレッシュの前にCONSIDER FRESHが使用されると、実表内のパーティションの中のデータに対する追加、削除または変更はマテリアライズド・ビューに反映されません。詳細は、「CONSIDER FRESH」を参照してください。

関連項目:
このALTER MATERIALIZED VIEWの例を必要とするパーティション・メンテナンスの例は、「表のパーティションの分割例:」を参照してください。

完全リフレッシュの例: 次の文は、マテリアライズド・ビューemp_data(「マテリアライズド・ビューの定期的リフレッシュ例:」で作成)の新しいリフレッシュ方法、NEXTで示す新しいリフレッシュ日時および新しい自動リフレッシュ間隔を指定します。

ALTER MATERIALIZED VIEW emp_data
REFRESH COMPLETE
START WITH TRUNC(SYSDATE+1) + 9/24
NEXT SYSDATE+7;

START WITH句の値によって、このマテリアライズド・ビューの次回の自動リフレッシュは翌日の午前9時に行うように設定されます。この時刻になると、マテリアライズド・ビューの完全リフレッシュが実行されるとともに、NEXTの式が評価されて、それ以降はこのマテリアライズド・ビューのリフレッシュが毎週実行されます。

クエリー・リライトを使用可能にする例: 次の文は、マテリアライズド・ビューemp_dataのクエリー・リライトを使用可能にし、暗黙的に再妥当性チェックを行います。

ALTER MATERIALIZED VIEW emp_data
ENABLE QUERY REWRITE;

主キー・マテリアライズド・ビューの例: 次の文は、ROWIDマテリアライズド・ビューorder_data(「ROWIDマテリアライズド・ビューの作成例:」で作成)を主キー・マテリアライズド・ビューに変更します。この例では、order_dataに主キーを持つマテリアライズド・ビュー・ログを定義していることが必要です。

ALTER MATERIALIZED VIEW order_data
REFRESH WITH PRIMARY KEY;

マテリアライズド・ビューのコンパイル例: 次の文は、マテリアライズド・ビューstore_mvを再検証します。

ALTER MATERIALIZED VIEW order_data COMPILE;

ALTER MATERIALIZED VIEW LOG

用途

マテリアライズド・ビュー・ログとは、マテリアライズド・ビューのマスター表に関連付けられる表です。ALTER MATERIALIZED VIEW LOG文を使用すると、既存のマテリアライズド・ビュー・ログの記憶特性またはタイプを変更できます。

注意:
下位互換性を保つために、MATERIALIZED VIEWのかわりにキーワードSNAPSHOTもサポートされています。

関連項目:

- マテリアライズド・ビュー・ログの作成については、「CREATE MATERIALIZED VIEW LOG」を参照してください。

- マテリアライズド・ビューのリフレッシュ方法など、マテリアライズド・ビューの詳細は、「ALTER MATERIALIZED VIEW」を参照してください。

- マテリアライズド・ビューの様々なタイプの詳細は、「CREATE MATERIALIZED VIEW」を参照してください。

前提条件

マスター表の所有者であるか、またはマスター表に対するREADまたはSELECT権限およびマテリアライズド・ビュー・ログに対するALTER権限が必要です。

関連項目:
ALTER MATERIALIZED VIEW LOGの前提条件の詳細は、『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

構文

alter_materialized_view_log::=

(physical_attributes_clause::=、add_mv_log_column_clause::=、alter_table_partitioning ::= (「ALTER TABLE」の項)、parallel_clause::=、logging_clause::=、allocate_extent_clause::=、shrink_clause::=、move_mv_log_clause::=、mv_log_augmentation::=、mv_log_purge_clause::=、for_refresh_clause::=を参照。)

physical_attributes_clause::=

storage_clause::=

add_mv_log_column_clause::=

allocate_extent_clause::=

(size_clause::=を参照)

shrink_clause::=

move_mv_log_clause::=

parallel_clause::=

mv_log_augmentation::=

(new_values_clause::=

new_values_clause::=

mv_log_purge_clause::=

for_refresh_clause::=

セマンティクス

FORCE

FORCEを指定すると、ADD句で指定したいずれかの項目がすでにマテリアライズド・ビュー・ログに指定されている場合、エラーは戻されませんが、既存の要素は無視され、マテリアライズド・ビュー・ログに存在しないすべての項目が追加されます。同様に、INCLUDING NEW VALUESを指定すると、この属性がすでにマテリアライズド・ビュー・ログに指定されている場合、冗長は無視され、エラーも戻されません。

schema

マスター表が定義されているスキーマを指定します。schemaを指定しない場合、マテリアライズド・ビュー・ログは自分のスキーマ内にあるとみなされます。

table

変更するマテリアライズド・ビュー・ログに関連付けられたマスター表の名前を指定します。

physical_attributes_clause

physical_attributes_clauseを使用すると、PCTFREE、PCTUSEDおよびINITRANSの各パラメータの値、マテリアライズド・ビュー・ログ、パーティションおよびオーバーフロー・データ・セグメントの記憶特性、またはパーティション・マテリアライズド・ビュー・ログのデフォルト特性を変更できます。

マテリアライズド・ビュー・ログの物理属性の制限事項: マテリアライズド・ビュー・ログがローカル管理表領域に存在する場合は、storage_clauseを使用して、エクステント・パラメータを変更することはできません。このパラメータについては、「CREATE TABLE」を参照してください。

add_mv_log_column_clause

マテリアライズド・ビュー・ログのマスター表に列を追加した場合、列はマテリアライズド・ビュー・ログに自動的には追加されません。そのため、この句を使用してマテリアライズド・ビュー・ログに列を追加します。マスター表の対応する列が暗号化されている場合、新規に追加された列はOracle Databaseによって暗号化されます。

alter_table_partitioning

パーティション化の句の構文および一般的な機能は、ALTER TABLE文の場合と同じです。「ALTER TABLE」の「alter_table_partitioning」を参照してください。

マテリアライズド・ビュー・ログのパーティション変更の制限事項: マテリアライズド・ビュー・ログのパーティションの変更には、次の制限事項があります。

- マテリアライズド・ビュー・ログのパーティションを変更する場合、LOB_storage_clauseまたはmodify_LOB_storage_clauseは使用できません。

- マテリアライズド・ビュー・ログのパーティションを削除、切捨てまたは交換しようとすると、Oracle Databaseはエラーを戻します。

parallel_clause

parallel_clauseを使用すると、マテリアライズド・ビュー・ログへのパラレル操作がサポートされているかどうかを指定できます。

この句の詳細は、「CREATE TABLE」の「parallel_clause」を参照してください。

logging_clause

マテリアライズド・ビュー・ログに対するロギング属性を指定します。この句の詳細は、「logging_clause」を参照してください。

allocate_extent_clause

allocate_extent_clauseを使用すると、マテリアライズド・ビュー・ログの新しいエクステントを明示的に割り当てることができます。この句の詳細は、「allocate_extent_clause」を参照してください。

shrink_clause

この句を使用すると、マテリアライズド・ビュー・ログのセグメントを縮小化できます。この句の詳細は、「CREATE TABLE」の「shrink_clause」を参照してください。

move_mv_log_clause

MOVE句を使用すると、マテリアライズド・ビュー・ログ表を他の表領域に移動して、マテリアライズド・ビュー・ログの他のセグメントまたは記憶域属性を変更したり、マテリアライズド・ビュー・ログのパラレル化を変更できます。

マテリアライズド・ビュー・ログの移動の制限事項: segment_attributesのstorage_clauseのENCRYPT句は、マテリアライズド・ビュー・ログでは無効です。

CACHE | NOCACHE句

アクセス頻度が高いデータについて、CACHEは、全表スキャンの実行時にこのログ用に取り出された各ブロックを、バッファ・キャッシュ内のLRUリストの最高使用頻度側に入れることを指定します。この属性は、小規模な参照表で有効です。NOCACHEは、ブロックをLRUリストの最低使用頻度側に入れることを指定します。この句の詳細は、「CREATE TABLE」の「CACHE | NOCACHE | CACHE READS」を参照してください。

mv_log_augmentation

ADD句を使用すると、マテリアライズド・ビュー・マスター表内の行が変更される際に、主キー値、ROWID値、オブジェクトID値または順序も記録するようにマテリアライズド・ビュー・ログを拡張できます。また、この句は、新しく列を記録するためにも使用できます。

これらの情報の記録を停止する場合は、マテリアライズド・ビュー・ログを削除してから、再作成する必要があります。マテリアライズド・ビュー・ログを削除した後再作成した場合、マスター表に依存するすべての既存マテリアライズド・ビューが、次回のリフレッシュ時に強制的に完全リフレッシュされます。

マテリアライズド・ビュー・ログの拡張の制限事項: 各マテリアライズド・ビュー・ログに指定できるのは、PRIMARY KEY、ROWID、OBJECT ID、SEQUENCEおよび列リストの列を1つずつです。このALTER文にPRIMARY KEY、ROWID、OBJECT ID、SEQUENCEおよび列リストを指定できるのはそれぞれ1回のみです。また、FORCEオプションを指定しないかぎり、これらの値のいずれかが作成時に(暗黙的または明示的に)指定された場合、このALTER文にはそれらの値を指定できません。

OBJECT ID OBJECT IDを指定すると、更新されるすべての行の適切なオブジェクト識別子をマテリアライズド・ビュー・ログに記録できます。

OBJECT ID句の制限事項: OBJECT IDは、オブジェクト表のログ用のみに指定でき、記憶表用には指定できません。

PRIMARY KEY PRIMARY KEYを指定すると、更新されるすべての行の主キー値をマテリアライズド・ビュー・ログに記録できます。

ROWID ROWIDを指定すると、更新されるすべての行のROWID値をマテリアライズド・ビュー・ログに記録できます。

SEQUENCE SEQUENCEを指定すると、追加の順序情報を提供する順序値をマテリアライズド・ビュー・ログに記録できます。

column 更新されるすべての行に対して、マテリアライズド・ビュー・ログに記録する値を持つ新しい列を指定します。通常、フィルタ列(副問合せマテリアライズド・ビューが参照する主キー以外の列)および結合列(副問合せのWHERE句で結合を定義する主キー以外の列)を指定します。

関連項目:

- マテリアライズド・ビュー・ログに値を明示的および暗黙的に含める方法については、「CREATE MATERIALIZED VIEW」を参照してください。

- フィルタ列および結合列については、『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

- 「ROWIDマテリアライズド・ビュー・ログの例:」

NEW VALUES句

NEW VALUES句を使用すると、更新DML操作で、古い値と新しい値の両方をマテリアライズド・ビュー・ログに保存するかどうかを指定できます。ALTER MATERIALIZED VIEW LOG文で追加した列のみでなく、ログのすべての列にこの句で設定した値を適用します。

INCLUDING INCLUDINGを指定すると、新しい値と古い値の両方をログに保存できます。このログが単一表マテリアライズド集計ビューの表用で、マテリアライズド・ビューに高速リフレッシュを実行する場合、INCLUDINGを指定してください。

EXCLUDING EXCLUDINGを指定すると、ログに新しい値が記録されなくなります。この句を使用すると、新しい値の記録によるオーバーヘッドを回避できます。

マテリアライズド・ビューのリフレッシュ・モードをFAST以外のモードに変更した場合を除き、高速リフレッシュが可能な単一表マテリアライズド集計ビューが定義されている場合は、EXCLUDING NEW VALUESを使用しないでください。

関連項目:
「マテリアライズド・ビュー・ログEXCLUDING NEW VALUESの例:」

mv_log_purge_clause

この句を使用すると、次のようにマテリアライズド・ビュー・ログのパージ属性を変更できます。

- パージを、IMMEDIATE SYNCHRONOUSからIMMEDIATE ASYNCHRONOUSに、またはIMMEDIATE ASYNCHRONOUSからIMMEDIATE SYNCHRONOUSに変更します。

- パージをIMMEDIATEからスケジュール実行に、またはスケジュール実行からIMMEDIATEに変更します。

- 新しい開始時間と、新しいnext時間およびintervalを指定します。

パージをスケジュール実行からIMMEDIATEに変更すると、そのマテリアライズド・ビュー・ログに関連付けられているスケジュール実行のパージ・ジョブは削除されます。パージをIMMEDIATEからスケジュール実行に変更すると、指定した属性を持つパージ・ジョブが作成されます。スケジュール実行のパージ属性を変更すると、スケジューラ・パージ・ジョブ内では指定した属性のみが変更されます。

スケジュール実行のパージ属性を変更する場合を除いて、ログ・パージを現在の状態に変更する場合(つまり変更しない状態にする場合)は、FORCEを指定する必要があります。

マテリアライズド・ビュー・ログに対してパージ時間または間隔がすでに設定されているかどうかを確認するには、*_MVIEW_LOGSデータ・ディクショナリ・ビューを問い合せます。この句のセマンティクスの詳細は、「CREATE MATERIALIZED VIEW LOG」の句「mv_log_purge_clause」を参照してください。

for_refresh_clause

この句を使用すると、マテリアライズド・ビュー・ログに使用するリフレッシュ方法を変更できます。

FOR SYNCHRONOUS REFRESH この句を指定すると、高速リフレッシュまたは完全リフレッシュを同期リフレッシュに変更できます。ステージング・ログが作成されます。

高速リフレッシュを変更する場合は、この句を使用する前に、次の条件が満たされていることを確認してください。

- マテリアライズド・ビュー・ログ内のすべての変更を使用している。

- マスター表に関連付けられたREFRESH ON DEMANDモードのマテリアライズド・ビューがリフレッシュされている。

- マスター表に関連付けられたREFRESH ON COMMITモードのマテリアライズド・ビューがREFRESH ON DEMANDモードのマテリアライズド・ビューに変換されている。

この句の使用後には、マスター表に対する直接のDML操作は実行できなくなります。データの変更操作の準備と実行には、DBMS_SYNC_REFRESHパッケージに含まれるプロシージャを使用する必要があります。

FOR FAST REFRESH この句を指定すると、同期リフレッシュまたは完全リフレッシュを高速リフレッシュに変更できます。マテリアライズド・ビュー・ログが作成されます。

同期リフレッシュを高速リフレッシュに変更する場合は、この句を使用する前に、ステージング・ログ内のすべての変更を使用していることを確認してください。

この句の使用後には、マスター表に対する直接のDML操作を実行できるようになります。

この句のセマンティクスの詳細は、CREATE MATERIALIZED VIEW LOGの句「for_refresh_clause」を参照してください。

例

ROWIDマテリアライズド・ビュー・ログの例: 次の文は、ROWID情報も記録するように既存の主キー・マテリアライズド・ビュー・ログを変更します。

ALTER MATERIALIZED VIEW LOG ON order_items ADD ROWID;

マテリアライズド・ビュー・ログEXCLUDING NEW VALUESの例: 次の文は、フィルタ列を追加し、新しい値を除外することで、hr.employeesのマテリアライズド・ビュー・ログを変更します。このログを使用するマテリアライズド集計ビューは、これ以降高速リフレッシュされません。ただし、高速リフレッシュが不要になる場合は、この処理によって新しい値の記録によるオーバーヘッドを回避できます。

ALTER MATERIALIZED VIEW LOG ON employees
ADD (commission_pct)
EXCLUDING NEW VALUES;

ALTER MATERIALIZED ZONEMAP

注意:
ALTER MATERIALIZED ZONEMAP文は、Oracle Database 12cリリース1(12.1.0.2)から使用可能です。

用途

ALTER MATERIALIZED ZONEMAP文を使用すると、既存のゾーン・マップを次の方法で変更できます。

- 属性の変更

- デフォルトのリフレッシュ方法とモードの変更

- プルーニングの使用の有効化または無効化

- コンパイル、再作成または使用不可にする

関連項目:

- ゾーン・マップの作成の詳細は、CREATE MATERIALIZED ZONEMAPを参照してください。

- ゾーン・マップの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

前提条件

ゾーン・マップが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、ALTER ANY MATERIALIZED VIEWシステム権限が必要です。

ゾーン・マップを含むスキーマを所有するユーザーは、各表のREADまたはSELECTオブジェクト権限あるいはREAD ANY TABLEまたはSELECT ANY TABLEシステム権限を介して、スキーマの外にあるゾーン・マップの実表のアクセスを必要とします。

構文

alter_materialized_zonemap::=

alter_zonemap_attributes::=

zonemap_refresh_clause::=

注意:
zonemap_refresh_clauseを指定する場合、REFRESHキーワードの後に少なくとも1つの句を指定する必要があります。

セマンティクス

schema

ゾーン・マップが含まれているスキーマを指定します。schemaを指定しない場合、このゾーン・マップは自分のスキーマ内にあるとみなされます。

zonemap_name

変更するゾーン・マップの名前を指定します。

alter_zonemap_attributes

この句を使用してゾーン・マップの次の属性を変更します: PCTFREE、PCTUSEDおよびCACHEまたはNOCACHE。これらの属性は、ALTER MATERIALIZED ZONEMAPおよびCREATE MATERIALIZED ZONEMAPに対して同じセマンティクスを持ちます。これらの属性の詳細は、CREATE MATERIALIZED ZONEMAPのドキュメントのPCTFREE, PCTUSEDおよびCACHE | NOCACHEを参照してください。

zonemap_refresh_clause

この句を使用して、ゾーン・マップのデフォルトのリフレッシュ方法およびモードを変更します。この句は、ALTER MATERIALIZED ZONEMAPおよびCREATE MATERIALIZED ZONEMAPに対して同じセマンティクスを持ちます。この句の詳細は、CREATE MATERIALIZED ZONEMAPの「zonemap_refresh_clause」を参照してください。

ENABLE | DISABLE PRUNING

この句を使用して、プルーニングのゾーン・マップの使用を有効化または無効化します。この句は、ALTER MATERIALIZED ZONEMAPおよびCREATE MATERIALIZED ZONEMAPに対して同じセマンティクスを持ちます。この句の詳細は、CREATE MATERIALIZED ZONEMAPのENABLE | DISABLE PRUNINGを参照してください。

COMPILE

この句を使用すると、ゾーン・マップを明示的にコンパイルできます。DDL操作が1つ以上の実表の構造を変更した後、この操作はゾーン・マップを検証します。Oracleデータベースが使用前にコンパイルが必要なゾーン・マップを自動的にコンパイルするため、通常この句を発行する必要はありません。ただし、ゾーン・マップを明示的にコンパイルする場合、この句を使用して実行できます。

ゾーン・マップのコンパイル結果は、実表がゾーン・マップに影響する方法で変更されるかどうかによって異なります。たとえば、列が実表に追加されると、変更がゾーン・マップに影響しないため、コンパイル後にゾーン・マップが有効になります。ただし、ゾーン・マップの定義する副問合せに含まれる列が実表から削除される場合、コンパイル後にゾーン・マップが無効になります。

ALL_, DBA_のCOMPILE_STATE列およびUSER_ZONEMAPSデータ・ディクショナリ・ビューを問い合せて、ゾーン・マップでコンパイルが必要かどうかを判断できます。列の値がNEEDS_COMPILEの場合、ゾーン・マップにコンパイルが必要です。

REBUILD

この句を使用すると、ゾーン・マップを明示的に再作成できます。この操作は、ゾーン・マップのデータをリフレッシュします。この句は、次の場合に有効です。

- この句を使用して、REFRESH ON DEMANDモードのゾーン・マップのデータをリフレッシュできます。詳細は、CREATE MATERIALIZED ZONEMAPのドキュメントのON DEMAND句を参照してください。

- ゾーン・マップのデフォルト・リフレッシュ・モードに関係なく、ゾーン・マップの実表のいずれかのEXCHANGE PARTITION操作の後にこの句を発行する必要があります。

- ゾーン・マップが使用不可とマークされている場合、この句を発行して使用不可とマークできます。ALL_, DBA_のUNUSABLE列およびUSER_ZONEMAPSデータ・ディクショナリ・ビューを問い合せて、ゾーン・マップが使用不可とマークされているかどうかを判断できます。

UNUSABLE

この句を指定して、ゾーン・マップを使用不可にします。後続の問合せはゾーン・マップを使用しないため、データベースはゾーン・マップを保持しません。ALTER MATERIALIZED ZONEMAP ... REBUILD文を発行して、再度ゾーン・マップを使用可能にすることができます。

例

ゾーン・マップ属性の変更: 例 次の文はゾーン・マップsales_zmapのPCTFREEおよびPCTUSED属性を変更し、キャッシュを使用しないようにゾーン・マップを変更します。

ALTER MATERIALIZED ZONEMAP sales_zmap
PCTFREE 20 PCTUSED 50 NOCACHE;

ゾーン・マップのデフォルトのリフレッシュ方法およびモードの変更: 例 次の文は、ゾーン・マップsales_zmapに対して、デフォルトのリフレッシュ方法をFASTに変更し、デフォルトのリフレッシュ・モードをON COMMITに変更します。

ALTER MATERIALIZED ZONEMAP sales_zmap
REFRESH FAST ON COMMIT;

プルーニングのゾーン・マップの使用の無効化: 次の文は、プルーニングのゾーン・マップsales_zmapの使用を無効化します。

ALTER MATERIALIZED ZONEMAP sales_zmap
DISABLE PRUNING;

ゾーン・マップのコンパイル: 例 次の文は、ゾーン・マップsales_zmapをコンパイルします。

ALTER MATERIALIZED ZONEMAP sales_zmap
COMPILE;

ゾーン・マップの再作成: 例 次の文は、ゾーン・マップsales_zmapを再作成します。

ALTER MATERIALIZED ZONEMAP sales_zmap
REBUILD;

ゾーン・マップを使用不可にする: 例 次の文は、ゾーン・マップsales_zmapを使用不可にします。

ALTER MATERIALIZED ZONEMAP sales_zmap
UNUSABLE;

ALTER OPERATOR

用途

ALTER OPERATOR文を使用すると、既存の演算子に対するバインドを追加または削除したり、既存の演算子をコンパイルすることができます。

関連項目:
「CREATE OPERATOR」

前提条件

事前にCREATE OPERATOR文によって演算子が作成されている必要があります。演算子が自分のスキーマ内にあるか、またはALTER ANY OPERATORシステム権限が必要です。ALTER OPERATOR文で参照される演算子およびファンクションに対するEXECUTEオブジェクト権限が必要です。

構文

alter_operator::=

(add_binding_clause::=、drop_binding_clause::=を参照)

add_binding_clause::=

(implementation_clause::=、using_function_clause::=を参照)

implementation_clause::=

(context_clause::=を参照)

context_clause::=

using_function_clause::=

drop_binding_clause::=

セマンティクス

schema

演算子が含まれているスキーマを指定します。この句を指定しない場合、その演算子は自分のスキーマにあるとみなされます。

operator

変更する演算子の名前を指定します。

add_binding_clause

この句を使用すると、演算子バインドを追加し、パラメータ・データ型および戻り型を指定できます。この演算子の既存のバインドと異なるシグネチャを使用する必要があります。

演算子のバインドが索引タイプに関連付けられており、演算子に別のバインドを追加する場合、Oracle Databaseは新しいバインドと索引タイプの関連付けを自動的に行いません。関連付けを行うには、明示的なALTER INDEXTYPE ... ADD OPERATOR文を発行する必要があります。

implementation_clause

この句のセマンティクスは、CREATE OPERATORおよびALTER OPERATOR文で同じです。詳細は、「CREATE OPERATOR」の「implementation_clause」を参照してください。

context_clause

この句のセマンティクスは、CREATE OPERATORおよびALTER OPERATOR文で同じです。詳細は、「CREATE OPERATOR」の「context_clause」を参照してください。

using_function_clause

この句のセマンティクスは、CREATE OPERATORおよびALTER OPERATOR文で同じです。詳細は、「CREATE OPERATOR」の「using_function_clause」を参照してください。

drop_binding_clause

この句を使用すると、演算子から削除するバインドのパラメータ・データ型のリストを指定できます。バインドに索引タイプや補助演算子バインドなどの依存オブジェクトが含まれる場合、FORCEを指定する必要があります。FORCEを指定すると、そのバインドに依存するすべてのオブジェクトにINVALIDのマークが付きます。依存オブジェクトは、DDL文、DML文または問合せで次に参照された際に再検証されます。

この句を使用して、この演算子に関連付けられた唯一のバインドを削除することはできません。この演算子に関連付けられた唯一のバインドを削除するには、DROP OPERATOR文を使用する必要があります。詳細は、「DROP OPERATOR」を参照してください。

COMPILE

COMPILEを指定すると、演算子を再コンパイルできます。

例

ユーザー定義演算子のコンパイル例: 次の例は、演算子eq_op(「ユーザー定義演算子の作成例:」で作成)をコンパイルします。

ALTER OPERATOR eq_op COMPILE;

ALTER OUTLINE

用途

注意:
ストアド・アウトラインは非推奨になりました。ストアド・アウトラインは、下位互換性を保つために今でもサポートされています。ただし、かわりにSQL計画管理を使用することをお薦めします。SQL計画管理では、ストアド・アウトラインよりも非常に安定したSQLパフォーマンスを実現するSQL計画ベースラインが作成されます。
DBMS_SPMパッケージのMIGRATE_STORED_OUTLINEファンクションまたはEnterprise Manager Cloud Controlを使用して、既存のストアド・アウトラインをSQL計画ベースラインに移行できます。移行が完了したら、ストアド・アウトラインに移行済のマークが付けられ、削除できるようになります。DBMS_SPMパッケージのDROP_MIGRATED_STORED_OUTLINEファンクションを使用して、システム上のすべての移行済ストアド・アウトラインを削除できます。

参照: SQL計画管理の詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。DBMS_SPMパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

ALTER OUTLINE文を使用すると、ストアド・アウトラインの名前を変更したり、ストアド・アウトラインを異なるカテゴリに再度割り当てることができます。また、アウトラインのSQL文をコンパイルし、古いアウトライン・データを現行の条件で作成したアウトラインと置き換えて、ストアド・アウトラインを再生成できます。

関連項目:
アウトラインの作成については、「CREATE OUTLINE」を参照してください。

前提条件

アウトラインを変更する場合は、ALTER ANY OUTLINEシステム権限が必要です。

構文

alter_outline::=

セマンティクス

PUBLIC | PRIVATE

PUBLICを指定すると、アウトラインのパブリック・バージョンを変更できます。これはデフォルトです。

PRIVATEを指定すると、現行のセッションに対してプライベートで、現行の解析スキーマにデータが格納されているアウトラインを変更できます。

outline

変更するアウトラインの名前を指定します。

REBUILD

REBUILDを指定すると、現行の条件で、outlineの実行計画が再生成されます。

関連項目:
「アウトラインの再構築例:」

RENAME TO句

RENAME TO句を使用すると、outlineの値と置き換えるアウトライン名を指定できます。

CHANGE CATEGORY TO句

CHANGE CATEGORY TO句を使用すると、outlineの移動先となるカテゴリ名を指定できます。

ENABLE | DISABLE

この句を使用すると、このアウトラインを選択的に使用可能または使用禁止にできます。デフォルトでは、アウトラインは使用可能になっています。DISABLEキーワードを使用すると、他のアウトラインの使用に影響を与えずに、1つのアウトラインを使用禁止にできます。

例

アウトラインの再構築例: 次の文は、アウトラインのテキストをコンパイルし、古いアウトライン・データを現行の条件で作成したアウトラインと置き換えて、salariesというストアド・アウトラインを再生成します。

ALTER OUTLINE salaries REBUILD;

ALTER PACKAGE

用途

パッケージはPL/SQLを使用して定義されます。このため、この項では一般的な情報について説明します。構文およびセマンティクスの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

ALTER PACKAGE文を使用すると、パッケージ仕様部またはパッケージ本体(あるいはその両方)を明示的に再コンパイルできます。明示的に再コンパイルすることによって、実行時に暗黙的に再コンパイルする必要がなくなり、また、実行時のコンパイル・エラーとパフォーマンス上のオーバーヘッドもなくなります。

パッケージ中のすべてのオブジェクトは、1つの単位として格納されているため、ALTER PACKAGE文によって、すべてのパッケージ・オブジェクトがまとめて再コンパイルされます。ALTER PROCEDURE文またはALTER FUNCTION文を使用して、パッケージ中の一部のプロシージャまたはファンクションを再コンパイルすることはできません。

注意:
この文を使用して、既存のパッケージの宣言や定義を変更することはできません。パッケージを再宣言または再定義する場合は、「CREATE PACKAGE」または「CREATE PACKAGE BODY」にOR REPLACE句を指定します。

前提条件

パッケージを変更するには、パッケージが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、ALTER ANY PROCEDUREシステム権限が必要です。

構文

alter_package::=

(package_compile_clause: この句の構文の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。)

セマンティクス

schema

パッケージが含まれているスキーマを指定します。schemaを指定しない場合、パッケージは自分のスキーマ内にあるとみなされます。

package_name

再コンパイルするパッケージの名前を指定します。

package_compile_clause

この句の構文とセマンティクスの詳細およびパッケージの作成とコンパイルの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

EDITIONABLE | NONEDITIONABLE

この句を使用すると、schemaのスキーマ・オブジェクト・タイプPACKAGEのエディショニングが後で有効化されたときに、そのパッケージをエディション・オブジェクトにするか非エディション・オブジェクトにするかを指定できます。デフォルトは、EDITIONABLEです。エディション・オブジェクトと非エディション・オブジェクトの変更の詳細は、『Oracle Database開発ガイド』を参照してください。

ALTER PLUGGABLE DATABASE

用途

ALTER PLUGGABLE DATABASE文を使用すると、プラガブル・データベース(PDB)を変更できます。

この句で実行できるタスクは、次のとおりです。

- PDBをマルチテナント・コンテナ・データベース(CDB)から切断する(pdb_unplug_clauseを使用)。

- PDBの設定を変更する(pdb_settings_clausesを使用)。

- PDBデータファイルをオンラインまたはオフラインにする(pdb_datafile_clauseを使用)。

- PDBをバックアップおよびリカバリする(pdb_recovery_clausesを使用)。

- PDBの状態を変更する(pdb_change_state句を使用)。

- CDB内の複数のPDBの状態を変更する(pdb_change_state_from_root句を使用)。

注意:
PDBに接続して、対応するALTER DATABASE文を実行することにより、すべてのALTER PLUGGABLE DATABASEタスクを実行できます。この機能は、CDBに移行したアプリケーションの下位互換性を維持するために用意されています。例外はPDBストレージの限度の変更です。これには、ALTER PLUGGABLE DATABASEのpdb_storage_clauseを使用する必要があります。

関連項目:
PDBの作成の詳細は、「CREATE PLUGGABLE DATABASE」を参照してください。

前提条件

CDBに接続している必要があります。

pdb_unplug_clauseを指定するには、現在のコンテナがルートである必要があります。また、AS SYSDBAまたはAS SYSOPERとして認証される必要があるとともに、共通に付与されているSYSDBA権限またはSYSOPER権限か、ルートと切断対象のPDBのそれぞれでローカルに付与されているこれらのどちらかの権限が必要です。

pdb_settings_clausesを指定するには、現在のコンテナが設定の変更対象のPDBである必要があります。また、ALTER DATABASE権限(共通に付与されている権限か、そのPDBでローカルに付与されている権限のいずれか)が必要です。pdb_logging_clausesまたはRENAME GLOBAL_NAME句を指定するには、RESTRICTED SESSION権限(共通に付与されている権限か、名前を変更するPDBでローカルに付与されている権限のいずれか)も必要です。PDBはREAD WRITE RESTRICTEDモードである必要があります。

pdb_datafile_clauseを指定するには、現在のコンテナが、データファイルをオンラインまたはオフラインにするPDBである必要があり、ALTER DATABASE権限(共通に付与されている権限か、そのPDBでローカルに付与されている権限のいずれか)が必要です。

pdb_recovery_clausesを指定するには、現在のコンテナがバックアップまたはリカバリの実行対象のPDBである必要があります。また、ALTER DATABASE権限(共通に付与されている権限か、そのPDBでローカルに付与されている権限のいずれか)が必要です。

pdb_change_state句を指定するには、現在のコンテナが状態の変更対象のPDBである必要があります。また、AS SYSBACKUP、AS SYSDBA、AS SYSDGまたはAS SYSOPERとして認証される必要があります。

pdb_change_state_from_root句を指定するには、現在のコンテナがルートである必要があります。また、AS SYSBACKUP、AS SYSDBA、AS SYSDGまたはAS SYSOPERとして認証される必要があるとともに、共通に付与されているSYSBACKUP、SYSDBA、SYSDGまたはSYSOPER権限か、ルートと状態の変更対象のPDBのそれぞれでローカルに付与されているこれらのいずれかの権限が必要です。

構文

alter_pluggable_database::=

(pdb_unplug_clause::=、pdb_settings_clauses::=、pdb_datafile_clause::=、pdb_recovery_clauses::=、pdb_change_state::=、pdb_change_state_from_root::=を参照)

pdb_unplug_clause::=

pdb_settings_clauses::=

(set_time_zone_clause::=、database_file_clauses ::=、supplemental_db_logging ::=、pdb_storage_clause::=、pdb_logging_clauses::=)

pdb_storage_clause::=

(size_clause::=を参照)

pdb_logging_clauses::=

logging_clause::=

pdb_force_logging_clause::=

pdb_datafile_clause::=

pdb_recovery_clauses::=

pdb_general_recovery::=

pdb_change_state::=

(pdb_open::=、pdb_close::=、pdb_save_or_discard_state::=)

pdb_open::=

instances_clause::=

pdb_close::=

relocate_clause::=

pdb_save_or_discard_state::=

pdb_change_state_from_root::=

(pdb_open::=、pdb_close::=、pdb_save_or_discard_state::=)

セマンティクス

pdb_unplug_clause

この句を使用すると、CDBからPDBを切断できます。PDBを切断すると、OracleはそのPDBのメタデータをXMLファイルに保存します。その後、このXMLファイルを使用して、そのPDBをCDBに接続できます。

- pdb_nameには、切断するPDBの名前を指定します。PDBはクローズされている必要があります。つまり、オープン・モードは、MOUNTEDである必要があります。Oracle Real Application Clusters(Oracle RAC)環境では、すべてのOracle RACインスタンスでそのPDBがクローズされている必要があります。

- filenameには、切断されるPDBのメタデータを格納するXMLファイルのフルパス名を指定します。

切断後、そのPDBは、オープン・モードMOUNTED、ステータスUNPLUGGEDとしてCDBに留まります。切断されたPDBに対して実行できる操作は、DROP PLUGGABLE DATABASEのみです。この操作により、PDBはCDBから削除されます。同じCDBまたは別のCDBにPDBを接続するには、先にそのPDBを削除する必要があります。

関連項目:

- PDBの切断の詳細は、『Oracle Database管理者ガイド』を参照してください。

- PDBの接続の詳細は、CREATE PLUGGABLE DATABASEのcreate_pdb_from_xml句を参照してください。

pdb_settings_clauses

これらの句を使用すると、PDBの様々な設定を変更できます。

pdb_name

オプションでpdb_nameを使用して、設定を変更するPDBの名前を指定できます。

DEFAULT EDITION句

この句を使用すると、指定したエディションをPDBのデフォルト・エディションとして設定できます。この句のセマンティクスの詳細は、ALTER DATABASEの「DEFAULT EDITION句」を参照してください。

SET DEFAULT TABLESPACE句

この句を使用すると、以降にPDBで作成する表領域のデフォルト・タイプを指定または変更できます。この句のセマンティクスの詳細は、ALTER DATABASEの「SET DEFAULT TABLESPACE句」を参照してください。

DEFAULT TABLESPACE句

この句を使用すると、PDBのデフォルトの永続表領域を構築または変更できます。この句のセマンティクスの詳細は、ALTER DATABASEの「DEFAULT TABLESPACE句」を参照してください。

DEFAULT TEMPORARY TABLESPACE句

この句を使用すると、PDBのデフォルトの一時表領域を、新しい表領域または表領域グループに変更できます。この句のセマンティクスの詳細は、ALTER DATABASEの「DEFAULT TEMPORARY TABLESPACE句」を参照してください。

RENAME GLOBAL_NAME TO句

この句を使用して、PDBのグローバル名を変更できます。新しいグローバル名は、CDB内で一意にする必要があります。Oracle Real Application Clusters(Oracle RAC)データベースの場合は、PDBを現在のインスタンスのみでREAD WRITE RESTRICTEDモードで開く必要があります。その他すべてのインスタンスでは、PDBをクローズする必要があります。この句のセマンティクスの詳細は、ALTER DATABASEの「RENAME GLOBAL_NAME句」を参照してください。

注意:
PDBのグローバル名を変更するときには必ず、そのPDBへの接続に使用しているデータベース・サービスのPLUGGABLE DATABASEプロパティを変更してください。

set_time_zone_clauses

この句を使用すると、PDBのタイムゾーン設定を変更できます。この句のセマンティクスの詳細は、ALTER DATABASEのset_time_zone_clauseを参照してください。

database_file_clauses

この句を使用すると、PDBのデータファイルと一時ファイルを変更できます。この句のセマンティクスの詳細は、ALTER DATABASEのdatabase_file_clausesを参照してください。

supplemental_db_logging

これらの句を使用すると、PDBのログ・ストリームへのサプリメンタル・データを追加する(または追加を停止する)ようにOracle Databaseに指示できます。ADD SUPPLEMENTAL LOG句には、CDBのログ・ストリームに最小限のサプリメンタル・データを追加する(または追加を停止する)ように指示するという副作用があります。この句のセマンティクスの詳細は、ALTER DATABASEのsupplemental_db_loggingを参照してください。

pdb_storage_clause

この句を使用して、PDBのストレージ制限を変更できます。

この句のセマンティクスは、CREATE PLUGGABLE DATABASEのpdb_storage_clauseと同じですが、次が追加されます。

- MAXSIZE size_clauseを指定する場合は、size_clauseに、PDBの既存の表領域の合計サイズ以上の値を指定する必要があります。それ以外の場合はエラーが発生します。

- MAX_SHARED_TEMP_SIZE size_clauseを指定する場合、size_clauseに、PDBに接続されたセッションによって使用される量より少ない値を指定すると、PDBに接続されたセッションによって使用されるストレージの量が、size_clauseで指定された値を下回らないかぎり、PDBに接続されたセッションで使用できる共有一時表領域内のストレージの量は増えません。

pdb_logging_clauses

この句を使用すると、PDBのロギング特性を設定または変更できます。

logging_clause

この句を使用して、PDB内で以降に作成する表領域のデフォルトのロギング属性を変更します。この句のセマンティクスは、CREATE PLUGGABLE DATABASEのlogging_clauseと同じです。

pdb_force_logging_clause

この句を使用してPDBを強制ロギングまたは強制ロギングなしモードにするか、PDBの強制ロギングまたは強制ロギングなしモードを解除します。

強制ロギング・モードでは、一時表領域および一時セグメントの変更を除くPDBのすべての変更の記録をデータベースに指示します。強制ロギングなしモードでは、PDBの変更を記録しないようデータベースに指示します。

CDB全体の強制ロギング・モードは、PDBレベルの強制ロギングなしモードより優先されます。PDBレベルの強制ロギング・モードおよび強制ロギングなしモードは、PDBの個々の表領域に指定するLOGGING、NOLOGGINGまたはFORCE LOGGING設定あるいはPDBの個々のデータベース・オブジェクトに指定するLOGGINGまたはNOLOGGING設定よりも優先され、これらの設定には影響されません。

- ENABLE FORCE LOGGINGを指定して、強制ロギング・モードのPDBを配置します。PDBが現在強制ロギングなしモードである場合、この句を指定するとエラーになります。最初にDISABLE FORCE NOLOGGINGを指定する必要があります。

- DISABLE FORCE LOGGINGを指定して、PDBの強制ロギング・モードを解除します。PDBが現在強制ロギング・モードでない場合、この句を指定するとエラーになります。

- ENABLE FORCE NOLOGGINGを指定して、強制ロギングなしモードのPDBを配置します。PDBが現在強制ロギング・モードである場合、この句を指定するとエラーになります。最初にDISABLE FORCE LOGGINGを指定する必要があります。

- DISABLE FORCE NOLOGGINGを指定して、PDBの強制ロギングなしモードを解除します。PDBが現在強制ロギングなしモードでない場合、この句を指定するとエラーになります。

この句は、logging_clauseで指定されたPDBのデフォルトのLOGGINGまたはNOLOGGINGモードを変更しません。

pdb_datafile_clause

この句を使用して、PDBに関連付けられたデータファイルをオンラインまたはオフラインにできます。この句を発行するときには、そのPDBがクローズされている必要があります。

- pdb_nameには、PDBの名前を指定します。現在のコンテナがそのPDBである場合は、pdb_nameは省略できます。

- DATAFILE句では、オンラインまたはオフラインにするデータファイルを指定できます。filenameまたはfilenumberを使用して、特定のデータファイルを名前または番号によって識別します。V$DATAFILE動的パフォーマンス・ビューのNAME列とFILE#列の問合せを実行することによって、データファイルの名前と番号を表示できます。そのPDBに関連付けられたすべてのデータファイルを指定するには、ALLを使用します。

- データファイルをオンラインにする場合はONLINEを指定し、データファイルをオフラインにする場合はOFFLINEを指定します。

pdb_recovery_clauses

pdb_recovery_clausesを使用して、PDBをバックアップおよびリカバリできます。

pdb_name

オプションでpdb_nameを使用して、バックアップまたはリカバリするPDBの名前を指定できます。

pdb_general_recovery

この句を指定すると、PDB、スタンバイ・データベース、または指定した表領域やファイルのメディア・リカバリを制御できます。pdb_general_recovery句は、ALTER DATABASEのgeneral_recovery句と同じセマンティクスを持ちます。詳細は、ALTER DATABASEのgeneral_recovery句を参照してください。

BACKUP句

この句を使用すると、PDB内のすべてのデータファイルをオンライン・バックアップ・モード(ホット・バックアップ・モードともいう)にしたり、このモードから戻すことができます。これらの句についてのセマンティクスは、ALTER PLUGGABLE DATABASEおよびALTER DATABASEと同じです。詳細は、ALTER DATABASEの「BACKUP句」を参照してください。

RECOVERY句

これらの句を使用して、リカバリのPDBを有効化または無効化します。PDBはクローズされている必要があります。つまり、オープン・モードは、MOUNTEDである必要があります。Oracle Database 12cリリース1(12.1.0.2)より、RECOVERY句を使用できます。

- ENABLE RECOVERYを指定して、PDBに属するすべてのデータファイルをオンラインにし、リカバリのPDBを有効化します。

- DISABLE RECOVERYを指定して、PDBに属するすべてのデータファイルをオフラインにし、リカバリのPDBを無効化します。

関連項目:
RECOVERY句の詳細は、『Oracle Data Guard概要および管理』を参照してください。

pdb_change_state

この句を使用すると、PDBの状態またはオープン・モードを変更できます。表11-1 は、PDBのオープン・モードを示しています。

- オープン・モードをREAD WRITE、READ ONLYまたはMIGRATEに変更するには、pdb_open句を指定します。

- オープン・モードをMOUNTEDに変更するには、pdb_close句を指定します。

表11-1 PDBのオープン・モード

オープン・モード

説明

READ WRITE

読取り/書込みオープン・モードのPDBでは、問合せおよびユーザー・トランザクションを実行でき、ユーザーはREDOログを生成できます。

READ ONLY

読取り専用オープン・モードのPDBでは、問合せは実行できますが、ユーザー変更を実行することはできません。

MIGRATE

PDBが移行オープン・モードの場合は、PDBでデータベース・アップグレード・スクリプトを実行できます。

MOUNTED

PDBは、マウント・モードでは、マウント・モードの非CDBと同じように動作します。どのオブジェクトの変更も行えず、またデータベース管理者のみがアクセス可能です。データファイルからの読取りも、データファイルへの書込みもできません。PDBに関する情報は、メモリー・キャッシュから削除されます。PDBのコールド・バックアップを実行できます。

V$PDBSビューのOPEN_MODE列を問い合せて、PDBのオープン・モードを表示できます。

関連項目:
PDBのオープン・モードの詳細は、『Oracle Database管理者ガイド』を参照してください。

pdb_name

オプションでpdb_nameを使用して、オープン・モードを変更するPDBの名前を指定できます。

pdb_open

この句を使用して、PDBのオープン・モードをREAD WRITE、READ ONLYまたはMIGRATEに変更できます。この句を指定するときにFORCEキーワードを指定しない場合は、そのPDBがMOUNTEDモードになっている必要があります。

READ WRITEまたはREAD ONLYを指定しない場合は、デフォルトでREAD WRITEが設定されます。例外は、そのPDBが、フィジカル・スタンバイ・データベースとして使用されるCDBに属している場合です。この場合、デフォルトはREAD ONLYになります。

READ WRITE この句を指定すると、オープン・モードをREAD WRITEに変更できます。

READ ONLY この句を指定すると、オープン・モードをREAD ONLYに変更できます。

[READ WRITE] UPGRADE この句を指定すると、オープン・モードをMIGRATEに変更できます。READ WRITEキーワードはオプションであり、意味を明確にするためのものです。

RESTRICTED オプションのRESTRICTEDキーワードを指定すると、そのPDBにおけるRESTRICTED SESSION権限を持つユーザーのみがそのPDBにアクセス可能になります。

PDBがREAD WRITEまたはREAD ONLYモードにあるときに、RESTRICTEDキーワードとFORCEキーワードを指定してオープン・モードの変更を実行すると、そのPDBに接続しているセッションのうち、そのPDBにおけるRESTRICTED SESSION権限を持っていないすべてのセッションが終了され、ロールバックされます。

FORCE このキーワードを指定すると、PDBのオープン・モードをREAD WRITEからREAD ONLYに、またはREAD ONLYからREAD WRITEに変更できます。FORCEキーワードを使用すると、オープン・モードの変更中にユーザーがPDBへの接続を維持できます。

READ WRITEからREAD ONLYへのPDBのオープン・モードの変更でFORCEを指定すると、オープン・モードの変更時にオープンになっているあらゆるREAD WRITEトランザクションが、DML操作をそれ以上実行できなくなり、またCOMMITもできなくなります。

FORCEの制限事項: PDBが現在MIGRATEモードにある場合は、FORCEキーワードは指定できません。また、現在オープン状態になっているPDBをMIGRATEモードに変更する際には、FORCEキーワードは指定できません。

RESETLOGS この句を指定すると、新しいPDBインカネーションを作成し、PDBのポイント・イン・タイム・リカバリ後に、そのPDBをREAD WRITEモードでオープンできます。

関連項目:
CDBおよびPDBのPoint-in-Timeリカバリの実行の詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

instances_clause Oracle Real Application Clusters環境でこの句を使用すると、指定されたOracle RACインスタンス内のPDBの状態を変更できます。この句を省略すると、PDBの状態は現在のインスタンス内のみで変更されます。

- instance_nameを使用して、1つ以上のインスタンス名のカンマ区切りのリストをかっこで囲んで指定します。これにより、それらのインスタンスのみPDBの状態が変更されます。

- Specify ALLを指定すると、すべてのインスタンス内のPDBの状態を変更できます。

- ALL EXCEPTを指定すると、指定されたインスタンスを除くすべてのインスタンス内のPDBの状態を変更できます。

PDBが1つ以上のインスタンス内ですでにオープンされている場合、別のインスタンス内でもオープンできますが、すでにオープンされているPDBと同じモードでオープンする必要があります。

pdb_close

この句を使用すると、PDBのオープン・モードをMOUNTEDに変更できます。この句を指定するときには、そのPDBがREAD WRITE、READ ONLYまたはMIGRATEモードにある必要があります。この句は、PDBでのSQL*Plus SHUTDOWNコマンドに相当します。

IMMEDIATE オプションのIMMEDIATEキーワードを指定した場合、この句は、PDBでの即時モードのSQL*Plus SHUTDOWNコマンドに相当します。それ以外の場合、PDBは通常モードでシャットダウンされます。

関連項目:
SQL*Plus SHUTDOWNコマンドの詳細は、『SQL*Plusユーザーズ・ガイドおよびリファレンス』を参照してください。

instances_clause Oracle Real Application Clusters環境でこの句を使用すると、指定されたOracle RACインスタンス内のPDBの状態を変更できます。PDBは、いくつかのインスタンスでクローズし、別のインスタンスでオープンしておくことができます。この句のセマンティクスの詳細は、instances_clauseを参照してください。

relocate_clause Oracle Real Application Clusters環境では、この句を使用して、異なるOracle RACインスタンス上でPDBを再オープンするようにデータベースに指示できます。

- Oracle Databaseで選択された別のインスタンス上のPDBを再オープンするには、RELOCATEを指定します。

- 指定されたインスタンス内でPDBを再オープンするには、RELOCATE TO 'instance_name'を指定します。

- 現在のインスタンス内でPDBをクローズするには、NORELOCATEを指定します。これはデフォルトです。

pdb_save_or_discard_state

この句を使用して、CDBの再起動時にPDBのオープン・モードを保存または破棄するようデータベースに指示します。

- SAVEを指定する場合、CDBの再起動後のPDBのオープン・モードは、CDBの再起動前のオープン・モードと同じです。

- DISCARDを指定する場合、CDBの再起動後のPDBのオープン・モードはMOUNTEDになります。これはデフォルトです。

instances_clause Oracle Real Application Clusters環境でこの句を使用して、指定されたOracle RACインスタンス内のPDBのオープン・モードを保存または破棄するようデータベースに指示します。この句を省略すると、データベースはSAVEまたはDISCARD設定を現在のインスタンスのPDBにのみ適用します。

- instance_nameを使用して、1つ以上のインスタンス名のカンマ区切りのリストをかっこで囲んで指定します。これにより、SAVEまたはDISCARD設定がそれらのインスタンスのPDBにのみ適用されます。

- ALLを指定して、SAVEまたはDISCARD設定をすべてのインスタンスのPDBに適用します。

- ALL EXCEPTを指定して、SAVEまたはDISCARD設定を指定されたインスタンスを除くすべてのインスタンスのPDBに適用します。

pdb_change_state_from_root

この句を使用して、1つ以上のPDBの状態を変更できます。

- 状態を変更する1つ以上のPDBのpdb_nameを指定します。

- ALLを指定すると、CDB内のすべてのPDBの状態を変更できます。

- ALL EXCEPTを指定すると、pdb_nameを使用して指定したPDBを除く、CDB内のすべてのPDBの状態を変更できます。

PDBがすでに指定した状態にある場合は、PDBの状態は変わらず、エラーは返されません。状態を変更できないPDBがあると、そのPDBにエラーが発生します。

これらの句のセマンティクスの詳細は、pdb_openおよびpdb_closeを参照してください。

例

CDBからPDBを切断する例: 次の文はPDB pdb1を切断し、PDBのメタデータをXMLファイル/oracle/data/pdb1.xmlに格納します。

ALTER PLUGGABLE DATABASE pdb1
UNPLUG INTO '/oracle/data/pdb1.xml';

PDBの設定を変更する例: 次の文は、PDB pdb2内のすべての表領域によって使用されるストレージ量の制限を500Mに変更します。

ALTER PLUGGABLE DATABASE pdb2
STORAGE (MAXSIZE 500M);

PDBのデータファイルをオフラインにする例: 次の文は、PDB pdb3に関連付けられたデータファイルをオフラインにします。

ALTER PLUGGABLE DATABASE pdb3
DATAFILE ALL OFFLINE;

PDBの状態の変更: 例 PDB pdb4がクローズされている、つまり、オープン・モードがMOUNTEDであることが前提となります。次の文は、READ ONLYオープン・モードでpdb4をオープンします。

ALTER PLUGGABLE DATABASE pdb4
OPEN READ ONLY;

次の文は、FORCEキーワードを使用して、pdb4のオープン・モードをREAD ONLYからREAD WRITEに変更します。

ALTER PLUGGABLE DATABASE pdb4
OPEN READ WRITE FORCE;

次の文は、PDB pdb4をクローズします。

ALTER PLUGGABLE DATABASE pdb4
CLOSE;

次の文は、READ ONLYオープン・モードでPDB pdb4をオープンします。RESTRICTEDキーワードが指定されているため、PDBへのアクセスは、PDBの中でRESTRICTED SESSION権限を持っているユーザーのみに許可されます。

ALTER PLUGGABLE DATABASE pdb4
OPEN READ ONLY RESTRICTED;

PDB pdb5がクローズされている、つまり、オープン・モードがMOUNTEDであることが前提となります。Oracle Real Application Clusters環境で、次の文は、インスタンスORCLDB_1およびORCLDB_2の中でPDB pdb5をREAD WRITEオープン・モードでオープンします。

ALTER PLUGGABLE DATABASE pdb5
OPEN READ WRITE INSTANCES = ('ORCLDB_1', 'ORCLDB_2');

Oracle Real Application Clusters環境で、次の文は、現在のインスタンスの中のPDB pdb6をクローズして、インスタンスORCLDB_3の中でpdb6を再オープンするようにデータベースに指示します。

ALTER PLUGGABLE DATABASE pdb6
CLOSE RELOCATE TO 'ORCLDB_3';

CDB内のすべてのPDBの状態を変更する例: 現在のコンテナがルートであることが前提となります。次の文はCDB内のすべてのPDBをREAD ONLYオープン・モードでオープンします。

ALTER PLUGGABLE DATABASE ALL
OPEN READ ONLY;

ALTER PROCEDURE

用途

パッケージはPL/SQLを使用して定義されます。このため、この項では一般的な情報について説明します。構文およびセマンティクスの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

ALTER PROCEDURE文を使用すると、スタンドアロンのストアド・プロシージャを明示的に再コンパイルできます。明示的に再コンパイルすることによって、実行時に暗黙的に再コンパイルする必要がなくなり、また、実行時のコンパイル・エラーとパフォーマンス上のオーバーヘッドもなくなります。

パッケージの一部であるプロシージャを再コンパイルする場合、ALTER PACKAGE文を使用して、そのパッケージ全体を再コンパイルします(「ALTER PACKAGE」を参照)。

注意:
この文では、既存のプロシージャの宣言または定義は変更されません。プロシージャを再宣言または再定義する場合は、OR REPLACE句を指定してCREATE PROCEDURE文を使用します(「CREATE PROCEDURE」を参照)。

ALTER PROCEDURE文は、ALTER FUNCTION文と似ています。詳細は、「ALTER FUNCTION」を参照してください。

前提条件

プロシージャは、自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、ALTER ANY PROCEDUREシステム権限が必要です。

構文

alter_procedure::=

(procedure_compile_clause: この句の構文の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。)

セマンティクス

schema

プロシージャが含まれているスキーマを指定します。schemaを指定しない場合、プロシージャは自分のスキーマ内にあるとみなされます。

procedure_name

再コンパイルするプロシージャの名前を指定します。

procedure_compile_clause

この句の構文とセマンティクスの詳細およびプロシージャの作成とコンパイルの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

EDITIONABLE | NONEDITIONABLE

この句を使用すると、schemaのスキーマ・オブジェクト・タイプPROCEDUREのエディショニングが後で有効化されたときに、そのプロシージャをエディション・オブジェクトにするか非エディション・オブジェクトにするかを指定できます。デフォルトは、EDITIONABLEです。エディション・オブジェクトと非エディション・オブジェクトの変更の詳細は、『Oracle Database開発ガイド』を参照してください。

ALTER PROFILE

用途

ALTER PROFILE文を使用すると、プロファイルのリソース制限またはパスワード管理パラメータを追加、変更または削除できます。

ALTER PROFILE文を使用すると、プロファイルに対して行った変更は、このプロファイルの現行のセッションのユーザーには影響しません。後続セッションのユーザーのみに影響します。

関連項目:
プロファイルの作成の詳細は、「CREATE PROFILE」を参照してください。

前提条件

ALTER PROFILEシステム権限が必要です。

CONTAINER句を指定する場合は、マルチテナント・コンテナ・データベース(CDB)に接続している必要があります。CONTAINER = ALLを指定する場合は、現在のコンテナがルートである必要があります。CONTAINER = CURRENTを指定するには、現在のコンテナがプラガブル・データベース(PDB)である必要があります。

構文

alter_profile::=

(resource_parameters::=、password_parameters::=を参照)

resource_parameters::=

(size_clause::=を参照)

password_parameters::=

セマンティクス

ALTER PROFILE文のキーワード、パラメータおよび句の意味は、すべてCREATE PROFILE文のキーワード、パラメータおよび句と同じです。

DEFAULTプロファイルから制限を削除することはできません。

詳細は、「CREATE PROFILE」および次の例を参照してください。

例

パスワードを無効にする例: 次の文は、new_profileプロファイル(「プロファイルの作成例:」で作成)のパスワードを90日間再利用できないようにします。

ALTER PROFILE new_profile
LIMIT PASSWORD_REUSE_TIME 90
PASSWORD_REUSE_MAX UNLIMITED;

デフォルトのパスワード値の設定例: 次の文は、app_userプロファイル(「プロファイルのリソース制限の設定の例:」で作成)のPASSWORD_REUSE_TIME値をDEFAULTプロファイルに定義された値にデフォルト設定します。

ALTER PROFILE app_user
LIMIT PASSWORD_REUSE_TIME DEFAULT
PASSWORD_REUSE_MAX UNLIMITED;

ログインおよびパスワード・ロック時間の制限例: 次の文は、プロファイルapp_userのFAILED_LOGIN_ATTEMPTSを5に、PASSWORD_LOCK_TIMEを1に変更します。

ALTER PROFILE app_user LIMIT
FAILED_LOGIN_ATTEMPTS 5
PASSWORD_LOCK_TIME 1;

この文を使用すると、ログインに5回連続して失敗した場合に、app_userプロファイルに割り当てられるユーザー・アカウントが1日ロックされます。

パスワードの有効期限および猶予期間の変更例: 次の文は、プロファイルapp_user2のPASSWORD_LIFE_TIMEを90日に、PASSWORD_GRACE_TIMEを5日に変更します。

ALTER PROFILE app_user2 LIMIT
PASSWORD_LIFE_TIME 90
PASSWORD_GRACE_TIME 5;

同時セッションの制限例: 次の文は、プロファイルapp_userに同時実行セッションの新しい制限5を指定します。

ALTER PROFILE app_user LIMIT SESSIONS_PER_USER 5;

現在、プロファイルapp_userにSESSIONS_PER_USERの制限が定義されていない場合は、このプロファイルに制限5が追加されます。プロファイルに制限が定義されている場合は、前述の文によってその制限が5に再定義されます。プロファイルapp_userが割り当てられているすべてのユーザーは、同時実行のセッションが5件に制限されます。

プロファイル制限の削除例: 次の文は、プロファイルapp_userのIDLE_TIME制限を削除します。

ALTER PROFILE app_user LIMIT IDLE_TIME DEFAULT;

プロファイルapp_userが割り当てられているユーザーは、以降のセッションからプロファイルDEFAULTに定義されたIDLE_TIME制限に従います。

プロファイル・アイドル時間の制限例: 次の文は、プロファイルDEFAULTにアイドル時間の制限(2分)を定義します。

ALTER PROFILE default LIMIT IDLE_TIME  2;

IDLE_TIMEの制限は、次のユーザーに適用されます。

- プロファイルが明示的に割り当てられていないユーザー

- IDLE_TIMEの制限が定義されていないプロファイルが明示的に割り当てられているユーザー

次の文は、プロファイルapp_user2に無制限のアイドル時間を設定します。

ALTER PROFILE app_user2 LIMIT IDLE_TIME UNLIMITED;

プロファイルapp_user2が割り当てられているすべてのユーザーは、以降のセッションから無制限のアイドル時間が許可されます。

ALTER RESOURCE COST

用途

ALTER RESOURCE COST文を使用すると、セッションで使用するリソース・コストの合計を算出するための式を指定または変更できます。

Oracle Databaseは、その他のリソースの使用も監視しますが、セッションに対するリソース・コストの合計は、この構文の4種類のリソースに基づいて算出されます。

この文を使用すると、4種類のリソースに重みを適用できます。Oracle Databaseは、プロファイルに指定されたこれらのリソースの値に重みを適用し、リソース・コストの合計を算出する計算式を設定します。CREATE PROFILE文のCOMPOSITE_LIMITパラメータを使用して、セッションに対するコストを制限できます。セッションのリソース・コストが制限を超えた場合、セッションは異常終了し、エラーが戻ります。各リソースに割り当てた重みを変更するためにALTER RESOURCE COST文を使用した場合、現行のセッション以降のすべてのセッションで、その新しい重みを基にリソース・コストが計算されます。

関連項目:
すべてのリソースおよびリソース制限の設定については、「CREATE PROFILE」を参照してください。

前提条件

ALTER RESOURCE COSTシステム権限が必要です。

構文

alter_resource_cost::=

セマンティクス

最初にセッションで使用された各リソースの量にそのリソースの重みを乗算し、次に、4種類のリソースの乗算結果を加算することによって、リソース・コストの合計が計算されます。どのセッションについても、このコストは、ユーザーのプロファイル内のCOMPOSITE_LIMITパラメータの値によって制限されます。乗算結果と総コストは、ともにサービス単位と呼ばれる単位で表されます。

CPU_PER_SESSION

このキーワードを使用すると、CPU_PER_SESSIONリソースに重みを適用できます。

CONNECT_TIME

このキーワードを使用すると、CONNECT_TIMEリソースに重みを適用できます。

LOGICAL_READS_PER_SESSION

この句を使用すると、LOGICAL_READS_PER_SESSIONリソースに重みを適用できます。論理読取りには、メモリーおよびディスクの両方から読み取られたブロックが含まれます。

PRIVATE_SGA

この句を使用すると、PRIVATE_SGAリソースに重みを適用できます。共有サーバー・アーキテクチャを使用して、セッション用としてSGA内でプライベート領域を割り当てている場合のみ、この制限が適用されます。

integer

各リソースの重みを指定します。各リソースに割り当てる重みによって、各リソースがリソース・コストの合計に影響する程度が決定されます。リソースに重みを割り当てない場合は、デフォルト値の0(ゼロ)が適用され、コストへの影響はありません。重みを割り当てた場合は、データベースの次のセッション以降のすべてのセッションで、その重みが適用されます。

例

リソース・コストの変更例: 次の文は、リソースCPU_PER_SESSIONとCONNECT_TIMEに重みを割り当てます。

ALTER RESOURCE COST
CPU_PER_SESSION 100
CONNECT_TIME      1;

この重みによって、セッションごとに次のコスト計算式が設定されます。

cost = (100 * CPU_PER_SESSION) + (1 * CONNECT_TIME)

この例では、CPU_PER_SESSIONおよびCONNECT_TIMEの値は、DEFAULTプロファイルまたはセッションのユーザーのプロファイルにある値のいずれかです。

ここでは、リソースLOGICAL_READS_PER_SESSIONおよびPRIVATE_SGAに重みを割り当てていないため、これらのリソースは式に含まれません。

プロファイルでCOMPOSITE_LIMIT値として500を割り当てた場合、costが500を超えると、必ず、セッションはこの制限を超えます。たとえば、CPU時間0.04秒、経過時間101分を使用するセッションは、この制限を超えます。同様に、CPU時間が0.0301秒、経過時間が200分のセッションもこの制限を超えます。

一度割り当てた重みは、次のように、別のALTER RESOURCE文を発行することによって変更できます。

ALTER RESOURCE COST
LOGICAL_READS_PER_SESSION 2
CONNECT_TIME 0;

新しく割り当てた重みによって、新しいコスト計算式が設定されます。

cost = (100 * CPU_PER_SESSION) + (2 * LOGICAL_READ_PER_SECOND)

CPU_PER_SESSIONおよびLOGICAL_READS_PER_SECONDの値は、DEFAULTプロファイルまたはセッションのユーザーのプロファイルにある値のいずれかです。

このALTER RESOURCE COST文によって、式は次のように変更されます。

- CPU_PER_SESSIONリソースの重みは指定しません。このリソースにはすでに重みが割り当てられているため、式では先に指定した重みがそのまま使用されます。

- LOGICAL_READS_PER_SESSIONリソースに重みを割り当てたため、このリソースが式で使用されます。

- CONNECT_TIMEリソースに0(ゼロ)を割り当てたため、このリソースは式に含まれていません。

- PRIVATE_SGAリソースの重みは指定しません。このリソースには重みを割り当てていないため、式に含まれていません。

ALTER ROLE

用途

ALTER ROLE文を使用すると、ロールを使用可能にするために必要な認可を変更できます。

関連項目:

- ロールの作成の詳細は、「CREATE ROLE」を参照してください。

- セッションのロールを使用可能または使用禁止にする方法については、「SET ROLE」を参照してください。

前提条件

ロールにADMIN OPTIONが付与されている必要があります。付与されていない場合は、ALTER ANY ROLEシステム権限が必要です。

ロールをIDENTIFIED GLOBALLYに変更する前に、次の作業が必要です。

- ロールに対して外部的に識別されたロール権限をすべて取り消します。

- すべてのユーザー、ロールおよびPUBLICからロールの付与を取り消します。

この規則の唯一の例外として、現在ロールを変更しているユーザーからはそのロールを取り消さないでください。

CONTAINER句を指定する場合は、マルチテナント・コンテナ・データベース(CDB)に接続している必要があります。CONTAINER = ALLを指定する場合は、現在のコンテナがルートである必要があります。CONTAINER = CURRENTを指定するには、現在のコンテナがプラガブル・データベース(PDB)である必要があります。

構文

alter_role::=

セマンティクス

ALTER ROLE文のキーワード、パラメータおよび句の意味は、すべてCREATE ROLE文のキーワード、パラメータおよび句と同じです。

ロールの変更の制限事項: NOT IDENTIFIEDロールは、別のロールに付与されている場合にはどのIDENTIFIEDタイプにも変更できません。

ロールの変更の注意事項: ロールの変更には、次の注意事項があります。

- すでに使用可能なロールのユーザー・セッションには影響しません。

- パスワードによって識別されるロールをアプリケーション・ロールに変更する場合(USING package句を使用)、ロールに対応付けられたパスワード情報は失われます。次にロールが使用可能になるときから、新しい認証方式が使用されます。

- ALTER ANY ROLEシステム権限を持つユーザーが、IDENTIFIED GLOBALLYロールをIDENTIFIED BY password、IDENTIFIED EXTERNALLYまたはNOT IDENTIFIEDに変更すると、非グローバルなロールを作成した場合と同様に、そのユーザーに変更されたロールがADMIN OPTION付きで付与されます。

詳細は、「CREATE ROLE」および次の例を参照してください。

例

ロール識別機能の変更例: 次の文は、ロールwarehouse_user(「ロールの作成例:」で作成)をNOT IDENTIFIEDに変更します。

ALTER ROLE warehouse_user NOT IDENTIFIED;

ロール・パスワードの変更例: 次の文は、ロールdw_manager(「ロールの作成例:」で作成)のパスワードをdataに変更します。

ALTER ROLE dw_manager
IDENTIFIED BY data;

パスワードの変更後、ロールdw_managerが付与されているユーザーは、新しいパスワードdataを使用してこのロールを使用可能にする必要があります。

アプリケーション・ロールの例: 次の例は、ロールdw_managerをhr.adminパッケージを使用してアプリケーション・ロールに変更します。

ALTER ROLE dw_manager IDENTIFIED USING hr.admin;

ALTER ROLLBACK SEGMENT

注意:
ロールバック・セグメントを使用せずに、自動UNDO管理モードでデータベースを実行することを強くお薦めします。ロールバック・セグメントは、以前のバージョンのOracle Databaseとの互換性に必要な場合以外は使用しないでください。自動UNDO管理の詳細は、『Oracle Database管理者ガイド』を参照してください。

用途

ALTER ROLLBACK SEGMENT文を使用すると、ロールバック・セグメントのオンライン/オフライン切替え、記憶特性の変更、またはロールバック・セグメントの最適サイズまたは指定サイズへの縮小を行うことができます。

ここでは、データベースがロールバックUNDOモードで実行されている(初期化パラメータUNDO_MANAGEMENTにMANUALを設定、またはすべて設定しない)ことを前提としています。データベースが自動UNDOモードで実行されている場合(初期化パラメータUNDO_MANAGEMENTにデフォルト値のAUTOを設定)、ユーザーが作成したロールバック・セグメントは意味を持ちません。

関連項目:

- ロールバック・セグメントの作成については、「CREATE ROLLBACK SEGMENT」を参照してください。

- UNDO_MANAGEMENTパラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

前提条件

ALTER ROLLBACK SEGMENTシステム権限が必要です。

構文

alter_rollback_segment::=

(storage_clause、size_clause::=を参照)

セマンティクス

rollback_segment

既存のロールバック・セグメントの名前を指定します。

ONLINE

ONLINEを指定すると、ロールバック・セグメントをオンラインにできます。ロールバック・セグメントを作成した場合、最初はオフライン状態になり、トランザクションに使用できなくなります。この句を指定した場合、ロールバック・セグメントはオンラインになり、インスタンスは、トランザクションに対してそのロールバック・セグメントを使用できるようになります。また、初期化パラメータROLLBACK_SEGMENTSを使用すると、インスタンスの起動時にロールバック・セグメントをオンラインにできます。

関連項目:
「ロールバック・セグメントをオンラインにする例:」

OFFLINE

OFFLINEを指定すると、ロールバック・セグメントをオフラインにできます。

- ロールバック・セグメント内に、アクティブ・トランザクションのロールバックに必要な情報が含まれていない場合は、すぐにオフラインになります。

- ロールバック・セグメントにアクティブ・トランザクションについての情報が含まれている場合、このロールバック・セグメントをその後のトランザクションに対して使用できないようにします。また、そのすべてのアクティブ・トランザクションがコミットまたはロールバックされた後、ロールバック・セグメントはオフラインになります。

オフラインになっているロールバック・セグメントは、どのインスタンスからもオンラインにできます。

ロールバック・セグメントがオンラインかオフラインかを確認するには、データ・ディクショナリ・ビューDBA_ROLLBACK_SEGSのSTATUS列を問い合せます。オンライン・ロールバック・セグメントの値はIN_USEです。オフライン・ロールバック・セグメントの値はAVAILABLEです。

ロールバック・セグメントをオフラインにする場合の制限事項: SYSTEMロールバック・セグメントをオフラインにすることはできません。

storage_clause

storage_clauseを使用すると、ロールバック・セグメントの記憶特性を変更できます。

ロールバック・セグメントの記憶域の制限事項: INITIALパラメータの値は変更できません。ロールバック・セグメントがローカル管理表領域にある場合、変更可能な記憶域パラメータはOPTIMALのみです。ロールバック・セグメントがディクショナリ管理表領域にある場合、変更可能な記憶域パラメータは、NEXT、MINEXTENTS、MAXEXTENTSおよびOPTIMALのみです。

関連項目:
構文および追加情報については、「storage_clause」を参照してください。

SHRINK句

SHRINKを指定すると、ロールバック・セグメントを最適サイズまたは指定サイズに縮小できます。縮小されるかどうか、および縮小量は、ロールバック・セグメントの使用可能領域およびアクティブ・トランザクションのロールバック・セグメント内での領域保持状態の状況によって異なります。

TO size_clauseに値を指定しなかった場合、ロールバック・セグメントを作成したCREATE ROLLBACK SEGMENT文のstorage_clauseのOPTIMALで指定した値が、デフォルトのサイズになります。OPTIMAL値を指定しなかった場合、CREATE ROLLBACK SEGMENT文のstorage_clauseのMINEXTENTSで指定した値がデフォルトのサイズになります。

TO size_clauseに値を指定するかどうかにかかわらず、次のことがいえます。

- この文の実行時には、ロールバック・セグメントの縮小値が有効です。その後、サイズはCREATE ROLLBACK SEGMENT文のOPTIMAL値に戻ります。

- ロールバック・セグメントは、エクステント数2未満には縮小できません。

ロールバック・セグメントを縮小した後でロールバック・セグメントの実際のサイズを確認する場合は、DBA_SEGMENTSビューのBYTES列、BLOCKS列およびEXTENTS列を問い合せます。

ロールバック・セグメントの縮小の制限事項: Oracle Real Application Clusters環境では、インスタンスに対してオンライン状態のロールバック・セグメントのみを縮小できます。

関連項目:
この句の詳細は、「size_clause」および「ロールバック・セグメントのサイズの変更例:」を参照してください。

例

次の例では、ロールバック・セグメントrbs_one(「ロールバック・セグメントの作成例:」で作成)を使用します。

ロールバック・セグメントをオンラインにする例: この文では、ロールバック・セグメントrbs_oneをオンラインにします。

ALTER ROLLBACK SEGMENT rbs_one ONLINE;

ロールバック・セグメントのサイズの変更例: この文は、ロールバック・セグメントrbs_oneを縮小します。

ALTER ROLLBACK SEGMENT rbs_one
SHRINK TO 100M;

ALTER SEQUENCE

用途

ALTER SEQUENCE文を使用すると、既存の順序の増分値、最小値および最大値、キャッシュされる数および動作を変更できます。この文は、順序番号に影響します。

関連項目:
順序の詳細は、「CREATE SEQUENCE」を参照してください。

前提条件

順序が自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、順序に対するALTERオブジェクト権限またはALTER ANY SEQUENCEシステム権限が必要です。

構文

alter_sequence::=

セマンティクス

この文のキーワードおよびパラメータの意味は、順序を作成する場合と同じです。

- 異なる順序番号で再開する場合、順序を削除して再作成する必要があります。

- NEXTVALを最初に呼び出す前に、INCREMENT BYの値を変更する場合、いくつかの順序番号がスキップされます。このため、元のSTART WITHの値を保持するには、順序を削除し、これを元のSTART WITHの値および新しいINCREMENT BYの値を使用して再作成する必要があります。

- KEEP句またはNOKEEP句を使用して、要求のランタイムとフェイルオーバーとの間で順序を変更すると、その要求に対するアプリケーション・コンティニュイティのための再実行中にNEXTVALの元の値は維持されません。

- いくつかの妥当性チェックが行われます。たとえば、MAXVALUEの値に現行の順序番号より小さい値は指定できません。

関連項目:
順序の作成については、「CREATE SEQUENCE」を参照してください。順序の削除および再作成については、「DROP SEQUENCE」を参照してください。

例

順序の変更例: 次の文は、customers_seq順序(「順序の作成例:」で作成)に新しい最大値を設定します。

ALTER SEQUENCE customers_seq
MAXVALUE 1500;

次の文は、customers_seq順序にCYCLEおよびCACHEオプションを指定します。

ALTER SEQUENCE customers_seq
CYCLE
CACHE 5;

ALTER SESSION

用途

ALTER SESSION文を使用すると、データベースへの接続に影響するすべての条件またはパラメータを、設定または変更できます。この文は、データベースとの接続を切断するまで有効です。

前提条件

SQLトレース機能を使用可能または使用禁止にするには、ALTER SESSIONシステム権限が必要です。

再開可能な領域割当てを使用可能または使用禁止にするには、RESUMABLEシステム権限が必要です。

特に指定がないかぎり、これ以外の操作についての権限は必要ありません。

構文

alter_session::=

alter_session_set_clause ::=

セマンティクス

ADVISE句

ADVISE句を指定すると、分散トランザクションを強制処理するためのアドバイスをリモート・データベースに送ることができます。リモート・データベース内のDBA_2PC_PENDINGビューのADVICE列に、アドバイスが表示されます(値'C'がCOMMIT、'R'がROLLBACK、' 'がNOTHINGを示します)。トランザクションの状態がインダウトになった場合、データベース管理者は、このアドバイスを使用してトランザクションをコミットするか、ロールバックするかを決定できます。

単一トランザクションにおいて、ADVISE句を指定したALTER SESSION文を複数発行し、リモート・データベースごとに異なるアドバイスを送ることができます。ADVISE句を指定した文はそれぞれ、ADVISE句を指定した別の文が発行されるまで、トランザクション内の後続する文で参照されるデータベースに対してアドバイスを送ります。

関連項目:
「分散トランザクションを強制的に実行する例:」

CLOSE DATABASE LINK句

CLOSE DATABASE LINKを指定すると、データベース・リンクdblinkをクローズできます。データベース・リンクを使用するSQL文を発行した場合、Oracle Databaseは、このデータベース・リンクを使用してリモート・データベース上にセッションを作成します。この接続は、セッションの終了またはデータベース・リンクの数が初期化パラメータOPEN_LINKSの値を超えるまでオープンされています。リンクをオープンしたままにしておくことによって発生するネットワークのオーバーヘッドを減らすには、セッションでデータベース・リンクを再度使用しない場合に、この句を使用してデータベース・リンクを明示的にクローズします。

関連項目:
「データベース・リンクをクローズする例:」

ENABLE | DISABLE COMMIT IN PROCEDURE

プロシージャおよびストアド・ファンクションはPL/SQLで記述されるため、COMMIT文とROLLBACK文を発行できます。アプリケーション自体が直接発行していないCOMMIT文やROLLBACK文によって、アプリケーションが中断される場合、DISABLE COMMIT IN PROCEDUREを指定して、セッション中にコールされるプロシージャおよびストアド・ファンクションがこれらの文を発行しないように制御します。

その後、ENABLE COMMIT IN PROCEDUREを指定することによって、セッションでプロシージャおよびストアド・ファンクションがCOMMITおよびROLLBACK文を発行できるようになります。

一部のアプリケーションは、自動的にプロシージャおよびストアド・ファンクションでのCOMMIT文やROLLBACK文を禁止します。詳細は、ご使用のアプリケーションのドキュメントを参照してください。

ENABLE | DISABLE GUARD

ALTER DATABASEのsecurity_clauseを使用すると、SYSユーザー以外のユーザーは、プライマリ・データベースまたはスタンバイ・データベース上のデータまたはデータベース・オブジェクトを変更できなくなります。この句を使用すると、現行のセッションの設定を上書きできます。

関連項目:
GUARDの設定の詳細は、「security_clause」を参照してください。

PARALLEL DML | DDL | QUERY

PARALLELパラメータを使用すると、そのセッションの後続のDML、DDLまたは問合せ文をパラレル実行するかどうかを指定できます。この句は、現行のセッション中に表自体を変更せずに、表の並列度を上書き可能にします。コミットされていないトランザクションは、DMLに対してこの句を実行する前に、コミットまたはロールバックされる必要があります。

関連項目:
「パラレルDMLを使用可能にする例:」

ENABLE句

ENABLEを指定すると、セッション内の後続文をパラレルで実行できます。これは、DDL文および問合せ文のデフォルトです。

- DML: パラレル・ヒントまたはパラレル句が指定されている場合に、DML文をパラレル・モードで実行します。

- DDL: パラレル句が指定されている場合に、DDL文をパラレル・モードで実行します。

- QUERY: パラレル・ヒントまたはパラレル句が指定されている場合に、問合せをパラレル・モードで実行します。

ENABLE句の制限事項: オプションのPARALLEL integerにENABLEを指定することはできません。

DISABLE句

DISABLEを指定すると、セッション内の後続文をシリアルで実行できます。これは、DML文のデフォルトです。

- DML: DML文をシリアルで実行します。

- DDL: DDL文をシリアルで実行します。

- QUERY: 問合せをシリアルで実行します。

DISABLE句の制限事項: オプションのPARALLEL integerにDISABLEを指定することはできません。

FORCE句

FORCEを使用すると、セッションの後続文を強制的にパラレル実行できます。パラレル句もパラレル・ヒントも指定されていない場合は、デフォルトの並列度が使用されます。この句は、セッションの後続文に指定されたすべてのparallel_clauseを上書きしますが、パラレル・ヒントによって上書きされます。

- DML: パラレルDML制限のどれにも違反していない場合、特定の並列度がこの句に指定されていないかぎり、セッションの後続のDML文は、デフォルトの並列度で実行されます。

- DDL: 特定の並列度がこの句に指定されていないかぎり、セッションの後続のDDL文は、デフォルトの並列度で実行されます。結果のデータベース・オブジェクトは、通常の並列度に対応します。
FORCE DDLを指定した場合、そのセッションで作成されるすべての表は、自動的にデフォルトの並列度で作成されます。結果は、CREATE TABLE文で(デフォルトの並列度を使用して)parallel_clauseを指定した場合と同じです。

- QUERY: 特定の並列度がこの句に指定されていないかぎり、後続の問合せは、デフォルトの並列度で実行されます。

PARALLEL integer 並列度を明示的に指定する整数を指定します。

- FORCE DDLでは、並列度は後続のDDL文のパラレル句を上書きします。

- FORCE DMLおよびFORCE QUERYでは、並列度は、データ・ディクショナリの表に格納されている現行の並列度を上書きします。

- ヒントによって文に指定される並列度は、強制的に実行される並列度を上書きします。

次のDML操作は、この句に関係なくパラレル化されません。

- クラスタ化表に対する操作

- データベースまたはパッケージの状態を読み書きする埋込みファンクションを使用した操作

- 起動する可能性のあるトリガーを使用した表に対する操作

- オブジェクト型、LONGまたはLOBデータ型が含まれている表またはスキーマ・オブジェクトでの操作

RESUMABLE句

これらの句を使用すると、再開可能な領域割当てを使用可能および使用禁止にできます。この機能によって、領域不足のエラー条件が発生した場合に操作は停止され、エラー条件が修復されたときに中断したところから自動的に再開されます。

注意:
再開可能な領域割当ては、ローカル管理表領域での操作で、完全にサポートされます。ディクショナリ管理表領域を使用する場合は、制限事項があります。制限事項の詳細は、『Oracle Database管理者ガイド』を参照してください。

ENABLE RESUMABLE

この句を使用すると、セッションに対する再開可能な領域割当てを使用可能にできます。

TIMEOUT TIMEOUTを使用すると、エラー条件が修復されるまで操作を停止する時間を秒単位で指定できます。エラー条件がTIMEOUTで指定した時間までに修復されない場合は、停止操作は異常終了します。

NAME NAMEを使用すると、ユーザー定義のテキスト文字列を指定することができ、再開可能モードのセッション中に発行される文の識別に有効です。USER_RESUMABLEデータ・ディクショナリ・ビューおよびDBA_RESUMABLEデータ・ディクショナリ・ビューに、テキスト文字列が挿入されます。NAMEを指定しない場合は、デフォルト文字列「User username(userid), Session sessionid, Instance instanceid」が挿入されます。

関連項目:
データ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

DISABLE RESUMABLE

この句を使用すると、セッションに対する再開可能な領域割当てを使用禁止にできます。

SYNC WITH PRIMARY

この句を使用すると、フィジカル・スタンバイ・データベース上のREDO Applyをプライマリ・データベースに同期できます。この句をALTER SESSION文とともに使用すると、文の発行時にスタンバイによって受信されたすべてのREDOデータがREDO Applyで適用されるまでブロックされます。スタンバイ・データベースのREDO転送状態がSYNCHRONIZEDでない場合、またはREDO Applyがアクティブでない場合、この句はエラーを戻し、同期は実行されません。

関連項目:
このセッション・パラメータの詳細は、『Oracle Data Guard概要および管理』を参照してください。

alter_session_set_clause

alter_session_set_clauseを使用すると、現行セッションの初期化パラメータ値またはエディションを設定できます。

初期化パラメータ この句では、2種類のパラメータを設定できます。

- ALTER SESSION文の有効範囲内で動的な初期化パラメータ(「初期化パラメータおよびALTER SESSION」を参照)

- セッション・パラメータ(「セッション・パラメータおよびALTER SESSION」を参照)

同じalter_session_set_clauseで複数のパラメータに対する値を設定できます。

EDITION EDITION = editionを指定すると、指定したエディションをデータベース・セッションのエディションとして設定できます。editionに対するUSEオブジェクト権限が必要であり、editionは、あらかじめ作成されている必要があります。このエディションはUSABLEである必要があります。

この文が正常に実行された場合、エディション化可能なパッケージに対応するPL/SQLパッケージ状態はデータベースにより廃棄されますが、エディション化が可能でないパッケージに対応するパッケージ状態は保持されます。

また、SQL*Plus CONNECTコマンドのEDITIONパラメータを使用すると、起動時に現行セッションのエディションを設定できます。ただし、再帰的SQLまたはPL/SQLブロックでは、ALTER SESSION SET EDITION文を指定できません。

次の問合せを使用して、現行セッションで使用中のエディションを確認できます。

SELECT SYS_CONTEXT('USERENV', 'CURRENT_EDITION_NAME') FROM DUAL;

関連項目:
エディションの詳細は「CREATE EDITION」、エディションをUSABLEに指定する方法の詳細は『Oracle Database PL/SQL言語リファレンス』を参照してください。

CONTAINER マルチテナント・コンテナ・データベース(CDB)でこの句を使用すると、container_nameで指定したコンテナに切り替えることができます。

この句を使用するには、SET CONTAINER権限(共通に付与されている権限か、container_nameでローカルに付与されている権限のいずれか)を持つ共通ユーザーである必要があります。

container_nameには、次のいずれかを指定します。

- ルートに切り替えるにはCDB$ROOT

- シードに切り替えるにはPDB$SEED

- プラガブル・データベース(PDB)に切り替えるにはPDB名。CDB内のPDBの名前を表示するには、DBA_PDBSビューを問い合せます。

現行のセッションの接続先のコンテナを確認するには、SQL*Plus SHOW CON_NAMEコマンドまたは次のSQL問合せを使用します。

SELECT SYS_CONTEXT('USERENV', 'CON_NAME') FROM DUAL;

関連項目:
特定のコンテナへの切替えの詳細は、『Oracle Database管理者ガイド』を参照してください。

ROW ARCHIVAL VISIBILITY この句を使用すると、セッションに対する行アーカイブの可視性を構成できます。この句によりインデータベース・アーカイブを実装でき、表の行をアクティブまたはアーカイブ済として指定できます。その後、表内のアクティブな行のみを対象に問合せを実行できます。

- ACTIVEを指定すると、行アーカイブが有効な表の問合せ実行時にアクティブな行のみが考慮されます。これはデフォルトです。

- ALLを指定すると、行アーカイブが有効な表の問合せ実行時にすべての行が考慮されます。

この句は、行アーカイブが無効な表の問合せには影響しません。

関連項目:

- 新しい表の行アーカイブを有効にする方法は、「CREATE TABLE」の「ROW ARCHIVAL」句を参照してください。

- 既存の表の行アーカイブを有効または無効にする方法は、「ALTER TABLE」の「[NO] ROW ARCHIVAL」句を参照してください。

- インデータベース・アーカイブの詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

初期化パラメータおよびALTER SESSION

初期化パラメータの中には、ALTER SESSIONの有効範囲内で動的であるものがあります。このようなパラメータをALTER SESSIONを使用して設定したときに、設定した値が有効であるのは現行セッションの終了までとなります。パラメータをALTER SESSION文を使用して変更できるかどうかを調べるには、V$PARAMETER動的パフォーマンス・ビューのISSES_MODIFIABLE列を問い合せます。

注意:
初期化パラメータの値を変更する前に、『Oracle Databaseリファレンス』を参照してください。

ALTER SESSIONで設定可能な一部のパラメータは、初期化パラメータではありません。初期化パラメータ・ファイルではなく、ALTER SESSIONでのみ設定可能です。これらのセッション・パラメータの詳細は、「セッション・パラメータおよびALTER SESSION」を参照してください。

セッション・パラメータおよびALTER SESSION

次のパラメータは、セッション・パラメータであり、初期化パラメータではありません。

CONSTRAINT[S]

構文:

CONSTRAINT[S] = { IMMEDIATE | DEFERRED | DEFAULT }

CONSTRAINT[S]は、遅延可能制約によって指定された条件を、いつ適用するかを指定します。

- IMMEDIATEを設定すると、遅延可能な制約によって指定される条件は、各DML文の直後にチェックされます。これは、セッションの各トランザクションの開始時に、SET CONSTRAINTS ALL IMMEDIATE文を発行することと同じです。

- DEFERREDを設定すると、遅延可能な制約によって指定される条件は、トランザクションのコミット時にチェックされます。これは、セッションの各トランザクションの開始時に、SET CONSTRAINTS ALL DEFERRED文を発行することと同じです。

- DEFAULTを設定すると、すべての制約は各トランザクションの開始時に、DEFERREDまたはIMMEDIATEの初期状態にリストアされます。

CURRENT_SCHEMA

構文:

CURRENT_SCHEMA = schema

CURRENT_SCHEMAは、セッションの現行のスキーマを、指定したスキーマに変更します。セッション中のスキーマ・オブジェクトに対する後続の未修飾の参照は、この指定したスキーマ内でオブジェクトに変換されます。この設定は、現行のセッションの存続期間中、またはALTER SESSION SET CURRENT_SCHEMA文を再発行するまで保持されます。

この設定を利用すると、現行のユーザーのものではないスキーマにあるオブジェクトに対する操作を実行するときも、オブジェクトをスキーマ名で修飾することは不要になります。この設定を指定すると、現行スキーマは変更されますが、セッション・ユーザーや現行ユーザーが変更されることはなく、セッションに対する追加のシステム権限やオブジェクト権限がセッション・ユーザーに付与されることもありません。

ERROR_ON_OVERLAP_TIME

構文:

ERROR_ON_OVERLAP_TIME = {TRUE | FALSE}

ERROR_ON_OVERLAP_TIMEパラメータには、Oracle Databaseが不明瞭な境界日時値(日時が標準か夏時間かが明確でない場合)を処理する方法を指定します。

- TRUEを指定すると、不明瞭なオーバーラップ・タイムスタンプに対してエラーが戻されます。

- FALSEを指定すると、不明瞭なオーバーラップ・タイムスタンプは標準時刻のデフォルトになります。これはデフォルトです。

境界日時値の詳細は、「夏時間のサポート」を参照してください。

FLAGGER

構文:

FLAGGER = { ENTRY | OFF }

FLAGGERパラメータは、FIPSのフラグ付け(Federal Information Processing Standard 127-2で規定)を指定するものであり、このフラグを設定すると、SQL-92のエントリ・レベル(正式には、ANSI X3.135-1992。現在、この規格はSQL:2008に置き換えられています)の拡張であるSQL文が発行されたときにエラー・メッセージが生成されます。FLAGGERはセッション・パラメータであり、初期化パラメータではありません。

セッションでフラグ付けが設定されると、これに続くALTER SESSION SET FLAGGER文は成功しますが、ORA-00097のメッセージが生成されます。このため、セッションを切断しなくてもFIPSのフラグ付けを変更できます。OFFを設定した場合、フラグ付けの使用は停止されます。

関連項目:
現行のANSI SQL規格に対するOracleの準拠については、付録C「Oracleと標準SQL」を参照してください。

INSTANCE

構文:

INSTANCE = integer

INSTANCEパラメータを設定すると、自分のインスタンスに接続している場合と同様に、別のインスタンスにもアクセスできます。INSTANCEはセッション・パラメータであり、初期化パラメータではありません。Oracle Real Application Clusters(Oracle RAC)環境では、このパラメータの設定に基づき、各Oracle RACインスタンスで、最適なDMLパフォーマンスを実現するようにディスク領域の静的または動的な所有権が保持されます。

ISOLATION_LEVEL

構文:

ISOLATION_LEVEL = {SERIALIZABLE | READ COMMITTED}

ISOLATION_LEVELパラメータは、データベースを変更するトランザクションがどのように処理されるかを指定します。ISOLATION_LEVELはセッション・パラメータであり、初期化パラメータではありません。

- SERIALIZABLEを設定すると、セッション内のトランザクションは、SQL規格に規定されているとおりシリアル化可能トランザクション分離モードを使用します。シリアル化可能トランザクションが行を更新するDML文を実行する場合、現在の更新対象の行がそのシリアル化可能トランザクションの開始時にコミットされていない別のトランザクションによって更新されていたときは、そのDML文は失敗します。シリアル化可能トランザクションは、同一トランザクション内で行った更新を確認できます。

- READ COMMITTEDを設定すると、セッション内のトランザクションは、Oracle Databaseトランザクションのデフォルトの動作を行います。別のトランザクションで行ロックを保持しておく必要があるDMLがトランザクションに指定されていると、DML文は行ロックが解除されるまで待ち状態になります。

注意:
シリアル化可能トランザクションは、遅延セグメント作成または時間隔パーティションでは動作しません。セグメントが作成されていない空の表、またはセグメントが存在しない時間隔パーティション表のパーティションにデータを挿入しようとすると、エラーになります。

STANDBY_MAX_DATA_DELAY

構文:

STANDBY_MAX_DATA_DELAY =  { integer | NONE }

Active Data Guard環境では、このセッション・パラメータを設定すると、管理ユーザー以外のユーザーがリアルタイム問合せモードのフィジカル・スタンバイ・データベースに発行した問合せに関して、セッション固有の適用ラグの許容値を秒単位で指定できます。この機能によって、スタンバイ・データベースが許容できないほど失効したかどうかを検出できるため、プライマリ・データベースからフィジカル・スタンバイ・データベースに問合せを安全に移動できます。

STANDBY_MAX_DATA_DELAYがデフォルト値NONEに設定されている場合、フィジカル・スタンバイ・データベースに発行された問合せは、そのデータベースの適用ラグに関係なく実行されます。

STANDBY_MAX_DATA_DELAYを0(ゼロ)以外の値に設定すると、フィジカル・スタンバイ・データベースに発行された問合せは、適用ラグがSTANDBY_MAX_DATA_DELAY以下の場合のみ実行されます。それ以外の場合、ORA-3172エラーが戻され、適用ラグが大きすぎることがクライアントに警告されます。

STANDBY_MAX_DATA_DELAYを0に設定すると、フィジカル・スタンバイ・データベースに発行された問合せは、プライマリ・データベースに対して発行された場合と同じ結果を戻すことが保証されます。ただし、スタンバイ・データベースがプライマリ・データベースよりも遅れている場合、ORA-3172エラーが戻されます。

関連項目:
Active Data Guardおよびこのセッション・パラメータの使用方法の詳細は、『Oracle Data Guard概要および管理』を参照してください。

TIME_ZONE

構文:

TIME_ZONE =  '[+ | -] hh:mi'
| LOCAL
| DBTIMEZONE
| 'time_zone_region'

TIME_ZONEパラメータには、現行のSQLセッションのデフォルトのローカル・タイムゾーン・オフセットまたは地域名を指定します。TIME_ZONEはセッション・パラメータであり、初期化パラメータではありません。現行のセッションのタイムゾーンを確認するには、組込み関数SESSIONTIMEZONEを問い合せます(「SESSIONTIMEZONE」を参照)。

- UTCの前または後の時間および分を示す書式マスク('[+|-]hh:mi')を指定します。hh:miの有効範囲は、-12:00から+14:00です。

- LOCALを指定すると、現行のSQLセッションのデフォルトのローカル・タイムゾーン・オフセットが、現行のSQLセッションを起動したときに構築された、元のデフォルトのローカル・タイムゾーン・オフセットに設定されます。

- DBTIMEZONEを指定すると、現行セッションのタイムゾーンはデータベースのタイムゾーンの値と一致するように設定されます。この設定を指定した場合は、DBTIMEZONEファンクションによってデータベースのタイムゾーンがUTCオフセットまたはタイムゾーン地域名として戻されるようになりますが、どちらで戻されるかはデータベースのタイムゾーンの設定によって決まります。

- 有効なtime_zone_regionを指定します。有効なタイムゾーン地域名を表示するには、V$TIMEZONE_NAMES動的パフォーマンス・ビューのTZNAME列を問い合せます。この設定を指定する場合、SESSIONTIMEZONEファンクションは地域の名前を戻します。

注意:
夏時間機能には、タイムゾーン地域名が必要です。この名前は、大小2つのタイムゾーン・ファイルに格納されます。これらのファイルのうち、使用する環境および使用するOracle Databaseのリリースに応じて、いずれか一方がデフォルトのファイルになります。タイムゾーン・ファイルおよびタイムゾーン名の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

関連項目:
両方のファイル内のすべてのタイムゾーン地域名のリストは、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

注意:
環境変数ORA_SDTZを使用して、クライアント・セッションのデフォルトのタイムゾーンを設定することもできます。この変数の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

USE_PRIVATE_OUTLINES

構文:

USE_PRIVATE_OUTLINES = { TRUE | FALSE | category_name }

USE_PRIVATE_OUTLINESパラメータを使用すると、プライベート・アウトラインの使用を制御することができます。このパラメータが使用可能で、アウトライン化されたSQL文が発行された場合、オプティマイザは、USE_STORED_OUTLINESが使用可能なときに使用されるパブリック領域ではなく、そのセッションのプライベート領域からアウトラインを検索します。そのセッションのプライベート領域にアウトラインが存在しない場合、オプティマイザは、文のコンパイルにアウトラインを使用しません。USE_PRIVATE_OUTLINESは、初期化パラメータではありません。

- TRUEに設定すると、要求をコンパイルするときに、オプティマイザはDEFAULTカテゴリのストアド・プライベート・アウトラインを使用します。

- FALSEに設定すると、オプティマイザはストアド・プライベート・アウトラインを使用しません。これはデフォルトです。USE_STORED_OUTLINESが使用可能な場合、オプティマイザはストアド・パブリック・アウトラインを使用します。

- category_nameに設定すると、要求をコンパイルするときに、オプティマイザはcategory_nameカテゴリのストアド・アウトラインを使用します。

USE_PRIVATE_OUTLINESの制限事項: USE_STORED_OUTLINESが使用可能な場合は、このパラメータを使用可能にできません。

USE_STORED_OUTLINES

注意:
ストアド・アウトラインは非推奨になりました。ストアド・アウトラインは、下位互換性を保つために今でもサポートされています。ただし、かわりにSQL計画管理を使用することをお薦めします。SQL計画管理の詳細は、Oracle Database SQLチューニング・ガイドを参照してください。

構文:

USE_STORED_OUTLINES = { TRUE | FALSE | category_name }

USE_STORED_OUTLINESパラメータは、オプティマイザが実行計画を生成するためにストアド・パブリック・アウトラインを使用するかどうかを決定します。USE_STORED_OUTLINESは、初期化パラメータではありません。

- TRUEに設定すると、要求をコンパイルするときに、オプティマイザはDEFAULTカテゴリのストアド・アウトラインを使用します。

- FALSEに設定すると、オプティマイザはストアド・アウトラインを使用しません。これはデフォルトです。

- category_nameに設定すると、要求をコンパイルするときに、オプティマイザはcategory_nameカテゴリのストアド・アウトラインを使用します。

USED_STORED_OUTLINESの制限事項: USE_PRIVATE_OUTLINESが使用可能な場合は、このパラメータを使用可能にできません。

例

パラレルDMLを使用可能にする例: 次の文は、現行のセッションでパラレルDMLモードを使用可能にします。

ALTER SESSION ENABLE PARALLEL DML;

分散トランザクションを強制的に実行する例: 次のトランザクションは、データベース・リンクremoteによって識別されるデータベース上のemployees表に従業員のレコードを挿入し、localによって識別されるデータベース上のemployees表から従業員のレコードを削除します。

ALTER SESSION
ADVISE COMMIT;

INSERT INTO employees@remote
VALUES (8002, 'Juan', 'Fernandez', 'juanf@example.com', NULL,
TO_DATE('04-OCT-1992', 'DD-MON-YYYY'), 'SA_CLERK', 3000,
NULL, 121, 20);

ALTER SESSION
ADVISE ROLLBACK;

DELETE FROM employees@local
WHERE employee_id = 8002;

COMMIT;

このトランザクションには、ADVISE句を指定したALTER SESSION文が2つあります。このトランザクションが状態不明(インダウト)になった場合、remoteには、最初に指定したALTER SESSION文によってアドバイス'COMMIT'が送信され、localには、2番目の文によってアドバイス'ROLLBACK'が送信されます。

データベース・リンクをクローズする例: 次の文は、データベース・リンクを使用しているlocalデータベース上のjobs表を更新し、このトランザクションをコミットして、データベース・リンクを明示的にクローズします。

UPDATE jobs@local SET min_salary = 3000
WHERE job_id = 'SH_CLERK';

COMMIT;

ALTER SESSION
CLOSE DATABASE LINK local;

日付書式の動的な変更例: 次の文は、セッションのデフォルトの日付書式を'YYYY MM DD-HH24:MI:SS'に動的に変更します。

ALTER SESSION
SET NLS_DATE_FORMAT = 'YYYY MM DD HH24:MI:SS';

変更後は、新しい日付書式が次のように適用されます。

SELECT TO_CHAR(SYSDATE) Today
FROM DUAL;

TODAY
-------------------
2001 04 12 12:30:38

日付言語の動的な変更例: 次の文は、日付書式要素の言語をフランス語に変更します。

ALTER SESSION
SET NLS_DATE_LANGUAGE = French;

SELECT TO_CHAR(SYSDATE, 'Day DD Month YYYY') Today
FROM DUAL;

TODAY
---------------------------
Jeudi    12 Avril     2001

ISO通貨の変更例: 次の文は、ISO通貨記号をアメリカ合衆国のISO通貨記号に動的に変更します。

ALTER SESSION
SET NLS_ISO_CURRENCY = America;

SELECT TO_CHAR( SUM(salary), 'C999G999D99') Total
FROM employees;

TOTAL
------------------
USD694,900.00

小数点文字と桁区切りの変更例: 次の文は、小数点文字をカンマ(,)に、桁区切りをピリオド(.)に動的に変更します。

ALTER SESSION SET NLS_NUMERIC_CHARACTERS = ',.' ;

これらの数値書式要素を使用した場合、新しい文字が戻ります。

ALTER SESSION SET NLS_CURRENCY = 'FF';

SELECT TO_CHAR( SUM(salary), 'L999G999D99') Total FROM employees;

TOTAL
---------------------
FF694.900,00

NLS通貨の変更例: 次の文は、各国通貨記号を'DM'に動的に変更します。

ALTER SESSION
SET NLS_CURRENCY = 'DM';

SELECT TO_CHAR( SUM(salary), 'L999G999D99') Total
FROM employees;

TOTAL
---------------------
DM694.900,00

NLS言語の変更例: 次の文は、表示されたエラー・メッセージの言語をフランス語に動的に変更します。

ALTER SESSION
SET NLS_LANGUAGE = FRENCH;

Session modifiee.

SELECT * FROM DMP;

ORA-00942: Table ou vue inexistante

言語のソート順の変更例: 次の文は、言語ソート順序をスペイン語に動的に変更します。

ALTER SESSION
SET NLS_SORT = XSpanish;

これによって、文字の値はスペイン語のソート順序に基づいてソートされます。

クエリー・リライトを使用可能にする例: 次の文は、明示的に使用禁止にされていないすべてのマテリアライズド・ビューに対する現行のセッションのクエリー・リライトを使用可能にします。

ALTER SESSION
SET QUERY_REWRITE_ENABLED = TRUE;

ALTER SYNONYM

用途

ALTER SYNONYM文を使用すると、既存のシノニムを変更できます。

前提条件

他のユーザーのスキーマに含まれるシノニムを変更する場合は、CREATE ANY SYNONYMシステム権限とDROP ANY SYNONYMシステム権限が必要です。

PUBLICシノニムを変更する場合、CREATE PUBLIC SYNONYMシステム権限とDROP PUBLIC SYNONYMシステム権限が必要です。

構文

alter_synonym::=

セマンティクス

PUBLIC

synonymがパブリック・シノニムの場合は、PUBLICを指定します。この句は、パブリック・シノニムをプライベート・シノニムに変更する(または、その逆に変更する)場合には使用できません。

schema

シノニムが含まれているスキーマを指定します。schemaを指定しない場合、シノニムは自分のスキーマ内にあるとみなされます。

synonym

変更するシノニムの名前を指定します。

EDITIONABLE | NONEDITIONABLE

この句を使用すると、schemaのスキーマ・オブジェクト・タイプSYNONYMのエディショニングが後で有効化されたときに、そのシノニムをエディション・オブジェクトにするか非エディション・オブジェクトにするかを指定できます。デフォルトは、EDITIONABLEです。エディション・オブジェクトと非エディション・オブジェクトの変更の詳細は、『Oracle Database開発ガイド』を参照してください。

EDITIONABLE | NONEDITIONABLEの制限事項: これらの句は、パブリック・シノニムには指定できません。PUBLICスキーマのオブジェクト・タイプSYNONYMについては、エディショニングが常に有効化されています。

COMPILE

この句を使用すると、synonymをコンパイルできます。シノニムによってシノニムのターゲット・オブジェクトへの依存関係が設定され、ターゲット・オブジェクトが変更または削除されるとシノニムも無効になります。無効のシノニムをコンパイルすると、そのシノニムは再度有効になります。

注意:
シノニムが有効か無効かを判断するには、ALL_、DBA_、およびUSER_OBJECTSデータ・ディクショナリ・ビューのSTATUS列を問い合せます。

例

次の例では、「CREATE SYNONYM」の「例」で作成したシノニムを変更します。

次の文では、シノニムofficesをコンパイルします。

ALTER SYNONYM offices COMPILE;

次の文では、パブリック・シノニムemp_tableをコンパイルします。

ALTER PUBLIC SYNONYM emp_table COMPILE;

次の文では、シノニムofficesを含むスキーマのスキーマ・オブジェクト・タイプSYNONYMのエディショニングが後から有効化されたときにも、シノニムofficesが非エディション・オブジェクトの状態を維持するようにします。

ALTER SYNONYM offices NONEDITIONABLE;

ALTER SYSTEM

用途

ALTER SYSTEM文を使用すると、Oracle Databaseインスタンスを動的に変更できます。この設定は、データベースがマウントされているかぎり有効です。

マルチテナント・コンテナ・データベース(CDB)でALTER SYSTEM文を使用する場合、CDB全体を変更する句および特定のプラガブル・データベース(PDB)を変更する句を指定できます。

関連項目:
CDBでのALTER SYSTEM文の使用方法の詳細は、『Oracle Database管理者ガイド』を参照してください。

前提条件

RELOCATE CLIENT句を指定するには、AS SYSASMとして認証されている必要があります。

他をすべての句を指定するには、ALTER SYSTEMシステム権限が必要です。

CDBに接続しているときには、次の条件が適用されます。

- CDB全体を変更する場合は、現在のコンテナがルートである必要があります。また、共通に付与されているALTER SYSTEM権限が必要です。

- PDBを変更する場合は、現在のコンテナがそのPDBである必要があります。また、ALTER SYSTEM権限(共通に付与されている権限か、そのPDBでローカルに付与されている権限のいずれか)が必要です。

構文

alter_system::=

(archive_log_clause ::=, checkpoint_clause::=, check_datafiles_clause::=, distributed_recov_clauses::=, end_session_clauses::=, quiesce_clauses::=, rolling_migration_clauses::=, rolling_patch_clauses::=, security_clauses::=, shutdown_dispatcher_clause::=, alter_system_set_clause::=, alter_system_reset_clause::=を参照)

archive_log_clause ::=

checkpoint_clause::=

check_datafiles_clause::=

distributed_recov_clauses::=

end_session_clauses::=

quiesce_clauses::=

rolling_migration_clauses::=

rolling_patch_clauses::=

security_clauses::=

set_encryption_key::=

shutdown_dispatcher_clause::=

alter_system_set_clause::=

set_parameter_clause::=

alter_system_reset_clause::=

セマンティクス

archive_log_clause

archive_log_clauseを使用すると、REDOログ・ファイルを手動でアーカイブしたり、自動アーカイブを使用可能または使用禁止にすることができます。この句を使用する場合、インスタンスでデータベースをマウントする必要があります。特に指定がないかぎり、データベースはオープンまたはクローズできます。

INSTANCE句

この句が関係するのは、Oracle Real Application Clusters(Oracle RAC)を使用している場合のみです。REDOログ・ファイル・グループをアーカイブするインスタンスの名前を指定します。インスタンス名は最大80文字の文字列です。指定したインスタンスにマップするスレッドはOracle Databaseによって自動的に決定され、対応するREDOログ・ファイル・グループがアーカイブされます。指定したインスタンスにマップされているスレッドがない場合、エラーが戻されます。

SEQUENCE句

SEQUENCEを指定すると、指定したスレッド内のログ順序番号integerによって識別されるオンラインREDOログ・ファイル・グループを手動でアーカイブできます。THREADパラメータを指定しなかった場合、インスタンスに割り当てられているスレッドから、指定したグループがアーカイブされます。

CHANGE句

CHANGEを指定すると、指定されたスレッド内の、integerで指定されたシステム変更番号(SCN)を持つREDOログ・エントリが格納されているオンラインREDOログ・ファイル・グループを、手動でアーカイブできます。このSCNが現行のREDOログ・ファイル・グループ内にある場合は、ログ・スイッチが実行されます。THREADパラメータを省略した場合は、使用可能な状態にあるすべてのスレッドから、このSCNが含まれているグループがアーカイブされます。

インスタンスでデータベースをオープンしている場合にのみ、この句を使用できます。

CURRENT句

CURRENTを指定すると、ログ・スイッチを強制的に発生させ、指定したスレッドの現行のREDOログ・ファイル・グループを手動でアーカイブできます。THREADパラメータを指定しない場合、すべての使用可能なスレッドから、現行のログ以前のログも含むすべてのREDOログ・ファイル・グループがアーカイブされます。データベースがオープンしているときのみ、CURRENTを指定できます。

NOSWITCH NOSWITCHを指定すると、ログ・スイッチの強制実行なしで現行のREDOログ・ファイル・グループを手動でアーカイブできます。この設定は、プライマリ・データベースが停止したときに、データ分岐が発生しないようにするために、主にスタンバイ・データベースで使用されます。データ分岐は、プライマリ・データベースに障害が発生した場合に、データが消失する可能性があることを意味します。

インスタンスでデータベースがマウントされているがオープンされていない場合にのみ、NOSWITCH句を使用できます。データベースがオープンしている場合は、この操作によってデータベースは自動的にクローズされます。再オープンする前にデータベースを手動で停止する必要があります。

GROUP句

GROUPを指定すると、GROUPの値がintegerで指定した値に等しいオンラインREDOログ・ファイル・グループを手動でアーカイブできます。REDOログ・ファイル・グループのGROUP値を判別するには、動的パフォーマンス・ビューV$LOGを問い合せます。THREADパラメータとGROUPパラメータの両方を指定する場合は、指定したREDOログ・ファイル・グループが指定したスレッド内に含まれている必要があります。

LOGFILE句

LOGFILEを指定すると、filenameで指定した名前のREDOログ・ファイル・メンバーが含まれるオンラインREDOログ・ファイル・グループを手動でアーカイブできます。THREADパラメータとLOGFILEパラメータの両方を指定する場合は、指定したREDOログ・ファイル・グループが指定したスレッド内に含まれている必要があります。

データベースがバックアップ制御ファイルでマウントされている場合は、USING BACKUP CONTROLFILEを指定し、現行のログ・ファイルを含むすべてのオンライン・ログ・ファイルのアーカイブを許可します。

LOGFILE句の制限事項: REDOログ・ファイル・グループは、一杯になった順にアーカイブする必要があります。LOGFILEパラメータを使用してREDOログ・ファイル・グループのアーカイブを指定した場合、それ以前のREDOログ・ファイル・グループがアーカイブされていないとエラー・メッセージが戻ります。

NEXT句

NEXTを指定すると、一杯になってもアーカイブされていない次のオンラインREDOログ・ファイル・グループを、指定したスレッドから手動でアーカイブできます。THREADパラメータを指定しない場合、使用可能な任意のスレッド上の、アーカイブされていない最初のREDOログ・ファイル・グループがアーカイブされます。

ALL句

ALLを指定すると、一杯になってもアーカイブされていないすべてのオンラインREDOログ・ファイル・グループを、指定したスレッドから手動でアーカイブできます。THREADパラメータを指定しない場合、使用可能なすべてのスレッドから、一杯でアーカイブされていないすべてのREDOログ・ファイル・グループがアーカイブされます。

TO location句

TO 'location'を指定すると、REDOログ・ファイル・グループがアーカイブされる位置を指定できます。このパラメータの値には、オペレーティング・システムの規則に従って、ファイルの位置を完全に指定する必要があります。このパラメータを指定しない場合、REDOログ・ファイル・グループは初期化パラメータLOG_ARCHIVE_DESTまたはLOG_ARCHIVE_DEST_nに指定された場所に格納されます。

checkpoint_clause

CHECKPOINTを指定すると、チェックポイントを明示的に強制処理して、コミット済のトランザクションによる変更をディスク上のデータファイルに書き込むことができます。インスタンスでデータベースがオープンしている場合にのみ、この句を指定できます。チェックポイントが完了するまで、ユーザーに制御は戻りません。

GLOBAL Oracle Real Application Clusters(Oracle RAC)環境で、データベースをオープンしているすべてのインスタンスに対してチェックポイントを実行します。これはデフォルトです。

LOCAL Oracle RAC環境で、文を発行するインスタンスのREDOログ・ファイル・グループのスレッドに対してのみチェックポイントを実行します。

関連項目:
「チェックポイントの発生例:」

check_datafiles_clause

Oracle RAC環境などの分散データベース・システムで、データベース制御ファイルからインスタンスのSGAを更新し、すべてのオンライン・データファイルに情報を反映します。

- GLOBALを指定すると、データベースをオープンしているすべてのインスタンスに対して、この同期化を実行できます。これはデフォルトです。

- LOCALを指定すると、ローカル・インスタンスに対してのみこの同期化を実行できます。

インスタンスでデータベースをオープンしておく必要があります。

end_session_clauses

end_session_clausesを使用すると、現行のセッションを終了することができます。

DISCONNECT SESSION句

DISCONNECT SESSION句を使用すると、専用サーバー・プロセス(共有サーバーによって接続が確立されていた場合は、仮想回路)を破棄することによって、現行のセッションが切断されます。この句を使用する場合、インスタンスでデータベースをオープンする必要があります。次の両方の値をV$SESSIONビューで確認して、このセッションを識別する必要があります。

- integer1には、SID列の値を指定します。

- integer2には、SERIAL#列の値を指定します。

システム・パラメータを適切に設定した場合、アプリケーション・フェイルオーバーが有効になります。

- POST_TRANSACTIONを設定すると、セッションが切断される前に、実行中のトランザクションを完了できます。セッションに実行中のトランザクションがない場合、この句は、後述のKILL SESSIONと同様の効果があります。

- IMMEDIATEを設定すると、実行中のトランザクションの完了を待たずにセッションを切断し、すぐにセッション全体の状態をリカバリできます。

- POST_TRANSACTIONを指定した場合、セッションに実行中のトランザクションがあれば、IMMEDIATEキーワードは無視されます。

- POST_TRANSACTIONを指定しない場合、またはPOST_TRANSACTIONを指定していてもセッションに実行中のトランザクションがない場合、この句は、後述のKILL SESSION IMMEDIATEと同様の効果があります。

関連項目:
「セッションの切断例:」

KILL SESSION句

KILL SESSION句を指定すると、セッションの状態は終了済となり、実行中のトランザクションがロールバックされ、すべてのセッション・ロックが解放され、セッション・リソースの部分的リカバリが行われます。この句を使用する場合、インスタンスでデータベースをオープンする必要があります。integer3を指定しない場合は、自セッションおよび終了されるセッションは、同じインスタンスにある必要があります。次の値をV$SESSIONビューで確認して、このセッションを識別する必要があります。

- integer1には、SID列の値を指定します。

- integer2には、SERIAL#列の値を指定します。

- オプションのinteger3には、終了されるターゲット・セッションが存在するインスタンスのIDを指定します。GV$表を問い合せることによって、インスタンスIDを確認することができます。

完了する必要があるアクティビティ(リモート・データベースからの応答の待機やトランザクションのロールバックなど)がセッションで実行されている場合、Oracle Databaseはそのアクティビティが完了するのを待機し、セッションに終了のマークを付けてから、ユーザーに制御を戻します。待機が数分間続く場合、セッションに終了予定のマークが付けられ、セッションに終了予定のマークを付けたというメッセージとともにユーザーに制御が戻されます。アクティビティが完了すると、PMONバックグラウンド・プロセスは、セッションに終了済のマークを付けます。

セッションに実行中のトランザクションがあるかどうかにかかわらず、セッション・ユーザーがセッションに要求を発行してセッションが終了されたことを示すメッセージを受け取るまで、Oracle Databaseは、セッション全体の状態をリカバリしません。

関連項目:
「セッションの終了例:」

IMMEDIATE IMMEDIATEを指定すると、実行中のトランザクションをロールバックしてすべてのセッション・ロックを解放し、セッション全体の状態をリカバリしてから、すぐにユーザーに制御を戻すようにOracle Databaseに指示できます。

NOREPLAY この句は、アプリケーション・コンティニュイティを使用している場合にのみ有効です。アプリケーション・コンティニュイティが有効なサービスに接続しているとき(つまり、FAILOVER_TYPE = TRANSACTION)、セッションが失敗したり強制終了されると、セッションがリカバリされます。終了したセッションをリカバリする必要がない場合は、NOREPLAYを指定します。

distributed_recov_clauses

DISTRIBUTED RECOVERY句を使用すると、分散リカバリを使用可能または使用禁止にできます。この句を使用する場合、インスタンスでデータベースをオープンする必要があります。

ENABLE ENABLEを指定すると、分散リカバリを使用可能にできます。シングルプロセス環境では、分散リカバリを開始する場合にこの句を使用する必要があります。

トランザクションに関係があるリモート・ノードにアクセスできない場合、インダウト・トランザクションをリカバリするには、ENABLE DISTRIBUTED RECOVERY文を複数回発行する必要がある場合もあります。インダウト・トランザクションは、データ・ディクショナリ・ビューDBA_2PC_PENDINGに表示されます。

関連項目:
「分散リカバリを使用可能にする例:」

DISABLE DISABLEを指定すると、分散リカバリを使用禁止にできます。

FLUSH SHARED_POOL句

FLUSH SHARED_POOL句を指定すると、システム・グローバル領域(SGA)の共有プール上のデータが消去されます。共有プールは次のものを格納します。

- キャッシュされたデータ・ディクショナリ情報

- SQL文の共有SQL領域、共有PL/SQL領域、ストアド・プロシージャ、ファンクション、パッケージおよびトリガー。

この文は、グローバル・アプリケーション・コンテキスト情報を消去せず、また現在実行中のアイテムで共有SQL領域およびPL/SQL領域を消去しません。インスタンスでデータベースがマウントされていてもディスマウントされていても、またはオープン状態でもクローズ状態でも、この句を使用できます。

関連項目:
「共有プールの消去例:」

FLUSH GLOBAL CONTEXT句

FLUSH GLOBAL CONTEXT句を指定すると、すべてのグローバル・アプリケーション・コンテキスト情報がシステム・グローバル領域(SGA)の共有プール上からフラッシュされます。インスタンスでデータベースがマウントされていてもディスマウントされていても、またはオープン状態でもクローズ状態でも、この句を使用できます。

FLUSH BUFFER_CACHE句

FLUSH BUFFER_CACHE句を指定すると、KEEP、RECYCLEおよびDEFAULTバッファ・プールを含め、システム・グローバル領域(SGA)のバッファ・キャッシュ上のすべてのデータを消去できます。

注意:
この句は、テスト・データベース上のみで使用することを目的としています。この句を本番データベース上で使用しないでください(この文を実行すると、それ以降の問合せでは結果が何も戻されなくなるため)。

この句は、リライトされた問合せ、または同一の開始点からの一連の問合せのパフォーマンスを測定する必要がある場合に有効です。

FLUSH REDO句

FLUSH REDO句を指定すると、プライマリ・データベースからスタンバイ・データベースにREDOデータをフラッシュできます。また、オプションで、フラッシュされたREDOデータがフィジカル・スタンバイ・データベースまたはロジカル・スタンバイ・データベースに適用されるのを待機することもできます。

この句により、プライマリ・データベースが生成したすべてのREDOデータをスタンバイ・データベースにフラッシュできれば、プライマリ・データベースがデータ非消失データ保護モードでない場合でも、データを失うことなくターゲット・スタンバイ・データベースにフェイルオーバーを実行できます。

FLUSH REDO句は、マウントされている(ただし、オープンされていない)プライマリ・データベースで発行する必要があります。

target_db_name

target_db_nameには、プライマリ・データベースからフラッシュされるREDOデータを受け取るスタンバイ・データベースのDB_UNIQUE_NAMEを指定します。

ターゲット・スタンバイ・データベースに対応するLOG_ARCHIVE_DEST_nデータベース初期化パラメータの値は、DB_UNIQUE_NAME属性を含む必要があります。また、その属性の値は、ターゲット・スタンバイ・データベースのDB_UNIQUE_NAMEに一致する必要があります。

NO CONFIRM APPLY

この句を指定すると、スタンバイ・データベースがフラッシュされたすべてのREDOデータを受け取るまで、ALTER SYSTEM文は完了しません。ターゲット・スタンバイ・データベースがスナップショット・スタンバイ・データベースである場合は、この句を指定する必要があります。

CONFIRM APPLY

この句を指定すると、ターゲット・スタンバイ・データベースがフラッシュされたすべてのREDOデータを受け取って適用するまで、ALTER SYSTEM文は完了しません。これは、NO CONFIRM APPLYを指定しない場合のデフォルトの動作です。ターゲット・スタンバイ・データベースがスナップショット・スタンバイ・データベースである場合は、この句を指定できません。

関連項目:
FLUSH REDO句およびフェイルオーバーの詳細は、『Oracle Data Guard概要および管理』を参照してください。

SWITCH LOGFILE句

SWITCH LOGFILE句を指定すると、現行のREDOログ・ファイル・グループのファイルが一杯であるかどうかにかかわらず、新しいREDOログ・ファイル・グループへの書込みを明示的かつ強制的に開始できます。ログ・スイッチを強制的に発生させると、チェックポイントが実行されますが、チェックポイントが完了する前に、すぐに制御が戻されます。この句を使用する場合、インスタンスでデータベースをオープンする必要があります。

関連項目:
「ログ・スイッチの発生例:」

SUSPEND | RESUME

SUSPEND句を指定すると、すべてのI/O(データファイル、制御ファイルおよびファイル・ヘッダー)および問合せを停止し、すべてのインスタンスで実行中のトランザクションを処理せずにデータベースのコピーが作成可能になります。

SUSPENDおよびRESUMEの制限事項: SUSPENDとRESUMEには、次の制限事項があります。

- ホット・バックアップ・モードでデータベースの表領域を確保するまで、この句は使用できません。

- ALTER SYSTEM SUSPEND文を発行したセッションは終了しないでください。システムが一時停止しているときに再接続しようとすると、SYSログイン中に実行される再帰的SQLが原因となって接続が失敗することがあります。

- システムが停止中に新しいインスタンスを起動する場合、この新しいインスタンスは停止しません。

RESUME句を指定すると、問合せおよびI/Oに対して、再度、データベースが使用可能になります。

quiesce_clauses

QUIESCE RESTRICTED句およびUNQUIESCE句を使用すると、データベースを静止状態にしたり、静止状態から戻すことができます。この状態では、データベース管理者は、トランザクション、問合せまたはPL/SQL操作が同時に存在する状態では安全に実行できない管理操作を実行することができます。

注意:
QUIESCE RESTRICTED句は、データベース・リソース・マネージャがインストールされている場合、およびデータベースをオープンしたインスタンスでデータベースが起動された後、リソース・マネージャが継続的にアクティブになっている場合のみ有効です。

複数のQUIESCE RESTRICTED文またはUNQUIESCE文が異なるセッションまたはインスタンスで同時に発行された場合、1つを除いた他のすべてのセッションまたはインスタンスにエラーが戻されます。

QUIESCE RESTRICTED

QUIESCE RESTRICTEDを指定すると、データベースを静止状態にできます。この句は、データベースがオープン中のすべてのインスタンスに次の影響を与えます。

- Oracle Databaseは、すべてのインスタンスのデータベース・リソース・マネージャに、アクティブでないすべてのセッション(SYSおよびSYSTEM以外)をアクティブにしないように指示します。SYSおよびSYSTEM以外のユーザーは、新しいトランザクション、問合せ、フェッチまたはPL/SQL操作を開始できません。

- Oracle Databaseは、すべてのインスタンスの既存のトランザクションのうち、起動したユーザーがSYSでもSYSTEMでもないものがすべて終了(コミットまたは異常終了)するまで待機します。また、Oracle Databaseは、すべてのインスタンスの実行中の問合せ、フェッチおよびPL/SQLプロシージャのうち、開始したユーザーがSYSでもSYSTEMでもなく、トランザクション内にもないものがすべて完了するまで待機します。連続する複数のOCIのフェッチによって問合せが実行される場合、Oracle Databaseはすべてのフェッチが終了するまで待機しません。現行のフェッチが終了するまで待機し、次のフェッチの実行をブロックします。さらに、Oracle Databaseは、エンキューなどの共有リソースを保持するセッション(SYSおよびSYSTEMのものを除く)すべてがそのリソースを解放するまで待機します。これらの操作がすべて完了すると、データベースが静止状態になり、QUIESCE RESTRICTED文の実行が終了します。

- 共有サーバー・モードでインスタンスを実行している場合、Oracle Databaseは、SYSまたはSYSTEM以外のユーザーがそのインスタンスにログインすることを阻止するようにデータベース・リソース・マネージャに指示します。非共有サーバー・モードでインスタンスを実行している場合、そのインスタンスへのユーザー・ログインに制限はありません。

静止状態中、すべてのインスタンスにおいてリソース・マネージャのプランは変更できません。

UNQUIESCE

UNQUIESCEを指定すると、データベースを静止状態から戻すことができます。これによって、SYSまたはSYSTEM以外のユーザーによって開始された、トランザクション、問合せ、フェッチおよびPL/SQLプロシージャを再開できます。UNQUIESCE文は、QUIESCE RESTRICTED文を発行したセッションと同じセッションで起動する必要はありません。

rolling_migration_clauses

クラスタ化されたOracle Automatic Storage Management (Oracle ASM)環境内でこれらの句を使用すると、Oracle ASMクラスタまたはストレージにOracle ASMを使用するデータベース・クラスタの全体的な可用性に影響することなく、ノードを一度に1つずつ別のOracle ASMバージョンに移行できます。

START ROLLING MIGRATION ローリング・アップグレードを開始するときに、ASM_versionについて、次の文字列を指定する必要があります。

'<version_num>, <release_num>, <update_num>,<port_release_num>,<port_update_num>'

ASM_versionは、11.1.0.0.0以上である必要があります。一重引用符で囲む必要があります。次に、Oracle ASMは、最初に、指定されたリリースへの移行について現在のリリースに互換性があることを確認し、制限された機能モードになります。Oracle ASMは、次に、クラスタ内で均衡の再調整処理が進行中かどうかを確認します。そのような操作がある場合、文は失敗し、均衡の再調整操作の完了後に文を再発行する必要があります。

ローリング・アップグレード・モードは、クラスタ全体でインメモリーに永続的に保持される状態です。クラスタは、少なくとも1つのOracle ASMインスタンスがクラスタ内で実行中になるまで、この状態であり続けます。クラスタに参加する新しいインスタンスは、起動時にすぐに移行モードに切り替わります。クラスタ内のすべてのインスタンスが終了すると、この後にOracle ASMインスタンスを起動しても、この文を再発行してOracle ASMインスタンスのローリング・アップグレードを再開するまでは、ローリング・アップグレード・モードにはなりません。

STOP ROLLING MIGRATION この句を使用すると、ローリング・アップグレードを停止して、クラスタを通常の操作に戻すことができます。クラスタ内のすべてのインスタンスが同じソフトウェア・バージョンに移行した後にのみ、この句を指定します。クラスタがローリング・アップグレード・モードではない場合、文は失敗します。

この句を指定すると、クラスタのすべてのメンバーが同じソフトウェア・バージョンであることの検証が行われ、Oracle ASMインスタンスのローリング・アップグレード・モードが解除され、Oracle ASMクラスタの機能が完全に元に戻ります。ディスクがオフラインであるために均衡の再調整操作が保留中の場合、操作は再起動されます。ただし、そのような再起動によってASM_POWER_LIMITパラメータに違反することにならない場合にかぎります。

関連項目:
ローリング・アップグレードの詳細は、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

rolling_patch_clauses

クラスタ化されたOracle Automatic Storage Management (Oracle ASM)環境内でこれらの句を使用すると、Oracle ASMクラスタまたはストレージにOracle ASMを使用するデータベース・クラスタの全体的な可用性に影響することなく、ノードを一度に最新のパッチ・レベルに更新できます。

START ROLLING PATCH この句を使用すると、ローリング・パッチ操作を開始できます。Oracle ASMはクラスタ内のすべてのライブ・ノードが同じバージョンであることを検証してから、ローリング・パッチ・モードに移行します。このモードは、クラスタ全体でインメモリーに永続的に保持される状態です。クラスタは、すべてのライブ・ノードにパッチが適用されて最新のパッチ・レベルになるまで、この状態を保持します。

この操作中に停止していたノードにはパッチが適用されません。これは、ローリング・パッチ操作の成否には影響しません。ただし、これらのノードには開始される前にパッチを適用する必要があります。適用しないと、これらのノードがクラスタに参加できなくなります。

STOP ROLLING PATCH この句を使用すると、ローリング・パッチ操作を停止して、クラスタを通常の操作に戻すことができます。この句は、クラスタ内のすべてのライブ・ノードに最新のパッチ・レベルまでパッチが適用されてから指定してください。クラスタがローリング・パッチ・モードではない場合は、文が失敗します。

この句を指定すると、Oracle ASMインスタンスのすべてのメンバーが同じパッチ・レベルであることが検証され、インスタンスのローリング・パッチ・モードが解除され、Oracle ASMクラスタのフル機能に戻ります。クラスタのいずれかのメンバーが同じパッチ・レベルでない場合、この操作は失敗し、クラスタは限定機能モードに移行します。

次に示す問合せは、ローリング・パッチの情報を表示します。これらの問合せを実行するには、Gridホーム内のOracle ASMインスタンスに接続している必要があります。また、Grid InfrastructureホームがOracle RAC環境用のOracle Clusterwareオプションを使用して構成されている必要があります。

- クラスタがローリング・パッチ・モードであるかどうかを確認するには、次の問合せを使用します。

SELECT SYS_CONTEXT('SYS_CLUSTER_PROPERTIES', 'CLUSTER_STATE') FROM DUAL;

- クラスタのパッチ・レベルを確認するには、次の問合せを使用します。

SELECT SYS_CONTEXT('SYS_CLUSTER_PROPERTIES', 'CURRENT_PATCHLVL') FROM DUAL;

- Oracle ASMインスタンスに適用されているパッチのリストを表示するには、V$PATCHES動的パフォーマンス・ビューを問い合せます。詳細は、『Oracle Databaseリファレンス』を参照してください。

関連項目:
ローリング・パッチの詳細は、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

security_clauses

security_clausesを使用すると、インスタンスへのアクセスを制御できます。また、インスタンスで暗号化されたデータへのアクセスを許可または禁止できます。

RESTRICTED SESSION

RESTRICTED SESSION句を指定すると、Oracle Databaseにログインできるユーザーを制限できます。インスタンスでデータベースがマウントされていてもディスマウントされていても、またはオープン状態でもクローズ状態でも、この句を使用できます。

- ENABLEを指定すると、RESTRICTED SESSIONシステム権限が付与されているユーザーのみがOracle Databaseにログインできます。既存のセッションは終了しません。
この句は、現行のインスタンスのみに適用されます。そのため、Oracle RAC環境では、RESTRICTED SESSIONシステム権限を持たない認可済ユーザーも他のインスタンスでデータベースにアクセスできます。

- DISABLEを指定すると、ENABLE RESTRICTED SESSION句の効果が逆になり、CREATE SESSIONシステム権限が付与されているすべてのユーザーがOracle Databaseにログオンできるようになります。これはデフォルトです。

関連項目:
「セッションを制限する例:」

SET ENCRYPTION WALLET句

この句を使用すると、データの透過的暗号化(TDE)のマスター暗号化キーへのデータベース・アクセスを管理できます。TDEのマスター暗号化キーは、外部セキュリティ・モジュール(暗号化ウォレットまたはハードウェア・セキュリティ・モジュール(HSM))に格納されています。

この文は、キーワードALTERで始まりますが、ALTER SYSTEM SET ENCRYPTION WALLET文はDDL句ではありません。ただし、このような文はロールバックすることはできません。

この句はSETキーワードで始まりますが、初期化パラメータの値を設定するためにSETキーワードの使用を許可するalter_system_set_clauseと混同しないでください。ENCRYPTION WALLETは、初期化パラメータではありません。

OPEN この句を指定すると、データベースは指定したパスワードを使用してウォレットを開き、TDEマスター・キーをデータベース・メモリーにロードするか(この鍵はインスタンスが存続している間有効)、HSMとの接続を確立するようになります(暗号化された表/表領域キーをHSMに送信して、復号化されたものを受け取るため)。

- wallet_passwordを指定すると、暗号化ウォレットからマスター暗号化キーを取り出すことができます。ウォレットが使用できないか、すでに開いている場合は、データベースからエラーが戻ります。wallet_passwordは、二重引用符で囲む必要があります。

- HSM_auth_stringを指定すると、HSMがアクセス可能になります。HSM_auth_stringの形式は"user_id:password"で、それぞれの意味は次のとおりです。

- user_idは、HSM管理インタフェースを使用してデータベース用に作成されたユーザーIDです。

- passwordは、HSM管理インタフェースを使用してユーザーIDに対して作成されたパスワードです。

HSM_auth_stringを囲む二重引用符は必須です。

CLOSE この句を使用すると、データベースの暗号化と復号化を使用禁止にできます。暗号化ウォレットを閉じるには、wallet_passwordが必要です。HSMへのアクセスを禁止するには、HSM_auth_stringが必要です。HSM_auth_stringを指定する方法の詳細は、「OPEN」を参照してください。

自動オープン・ウォレットのみが存在する場合、自動オープン・ウォレットを閉じるためにパスワードは必要ありません。自動オープン・ウォレットと暗号化ウォレットの両方が開いている場合、自動オープン・ウォレットを閉じるためにパスワードが必要です。この場合、CLOSEでパスワードを指定すると、自動オープン・ウォレットと暗号化ウォレットが閉じます。

関連項目:
Oracle Real Application Clusters(Oracle RAC)環境での暗号化ウォレットの設定については、『Oracle Real Application Clusters管理およびデプロイメント・ガイド』を参照してください。

set_encryption_key

この句を使用すると、TDEマスター暗号化キーが存在しない場合に新規作成できます。既存のマスター・キーがHSMまたはキーストアにある場合は、この句を指定すると既存の表および表領域の新しいキーが生成され、したがってすべての表および表領域のキーが古いマスター・キーで復号化されて新しいマスター・キーで再度暗号化されます。

ALTER SYSTEM SET ENCRYPTION KEY文はDDL文です。この文は、スキーマ内で保留中のトランザクションを自動的にコミットします。

この句はSETキーワードで始まりますが、初期化パラメータの値を設定するためにSETキーワードの使用を許可するalter_system_set_clauseと混同しないでください。ENCRYPTION KEYは、初期化パラメータではありません。

IDENTIFIED BY wallet_password この句では、暗号化データにアクセスするためのTDEマスター暗号化キーを暗号化ウォレットからメモリーにロードします。

- certificate_idが必要になるのは、PKI非対称型鍵ペアをマスター暗号化キーとして使用する場合です。証明書を表す整数を指定します。この値を見つけるには、V$WALLET動的パフォーマンス・ビューのCERT_ID列を問い合せます。デフォルトである対称型鍵を使用する場合は、certificate_idを指定しないでください。

- wallet_passwordには、セキュリティ・モジュールへの接続に使用するパスワードを指定します。

指定したcertificate_idまたはwallet_passwordが無効の場合は、データベース・エラーが戻されます。certificate_idおよびwallet_passwordを囲む二重引用符は必須です。

IDENTIFIED BY wallet_passwordの制限事項 PKIベースのマスター鍵(統合マスター暗号化キーもこれに含まれます)を使用できるのは、TDE列暗号化およびOracleウォレットと組み合せる場合のみであり、HSMとともに使用することはできません。

注意:
透過的データ暗号化とPKI暗号化の併用は非推奨です。透過的データ暗号化を構成するには、ADMINISTER KEY MANAGEMENT文を使用します。詳細は、Oracle Database Advanced Securityガイドを参照してください。

IDENTIFIED BY HSM_auth_string この句を指定すると、HSM内部に格納されるマスター暗号化キーが作成されます。マスター暗号化キーは、HSM内の表キーを暗号化または復号化するために使用されます。

HSM_auth_stringの形式は"user_id:password"で、それぞれの意味は次のとおりです。

- user_idは、HSM管理インタフェースを使用してデータベース用に作成されたユーザーIDです。

- passwordは、HSM管理インタフェースを使用してユーザーIDに対して作成されたパスワードです。

HSM_auth_stringを囲む二重引用符は必須です。

すでに透過的データ暗号化をOracleウォレットとともに使用している場合に、HSMに移行するには、MIGRATE USING wallet_password句を指定します。これによって、既存の表/表領域キーがいったん復号化され、新規作成されたHSMベースのマスター暗号化キーを使用して再び暗号化されます。ウォレットはHSMへの移行後も使用されることに注意してください(このウォレットには、エクスポート・ファイルやRMANバックアップに、あるいは一時またはUNDO表領域やREDOログ・ファイル内の暗号化データに使用されたマスター暗号化キーが格納されている可能性があるため)。移行後に、次のいずれかの手順を実行します。

- ウォレット・パスワードをHSM_auth_stringに変更します(変更するにはOracle Wallet Managerまたはorapkiコマンドライン・ツールを使用)。

- ローカルの自動オープン・ウォレットを暗号化ウォレットから作成し、その後で、暗号化ウォレットの名前を変更するか、sqlnet.oraのENCRYPTION_WALLET_LOCATIONで指定されたディレクトリの外に移動します。暗号化ウォレットを削除したり、ウォレット・パスワードを忘れないよう注意してください。

関連項目:

- 透過的データ暗号化の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

- この機能を利用して表の列を暗号化する方法の詳細は、「CREATE TABLE」の「encryption_spec」を参照してください。

- 「ウォレットおよび暗号化キーの確立例:」

shutdown_dispatcher_clause

SHUTDOWN句が意味を持つのは、Oracle Databaseの共有サーバー・アーキテクチャを使用しているシステムのみです。dispatcher_nameで指定されたディスパッチャが停止します。

注意:
この句をSQL*PlusコマンドSHUTDOWN(データベース全体を停止するために使用する)と混同しないでください。

dispatcher_nameは'Dxxx'の形式の文字列で、xxxはディスパッチャの番号です。ディスパッチャ名のリストを取得するには、V$DISPATCHER動的パフォーマンス・ビューのNAME列を問い合せます。

- IMMEDIATEを指定した場合、ディスパッチャは新しい接続の受入れをすぐに中止し、そのディスパッチャによる既存の接続はすべて終了されます。すべてのセッションがクリーンアップされてから、ディスパッチャ・プロセスは停止します。

- IMMEDIATEを指定しない場合、ディスパッチャは新しい接続の受入れをすぐに中止しますが、すべてのユーザーが切断し、すべてのデータベース・リンクが終了されるのを待ちます。その後、ディスパッチャは停止されます。

REGISTER句

REGISTERを指定すると、PMONバックグラウンド・プロセスによってリスナーにインスタンスがすぐに登録されます。この句を指定しない場合、PMONが次に検出ルーチンを実行するまでインスタンスの登録は行われません。その結果、クライアントは、リスナー起動後最大60秒間サービスにアクセスできない可能性があります。

関連項目:
PMONバックグラウンド・プロセスおよびリスナーの詳細は、『Oracle Database概要』および『Oracle Database Net Services管理者ガイド』を参照してください。

alter_system_set_clause

従来のプレーン・テキストのパラメータ・ファイル(PFILE)を使用してデータベースを起動したか、サーバー・パラメータ・ファイル(SPFILE)を使用してデータベースを起動したかに応じて、現行のインスタンスの多くの初期化パラメータ値を変更できます。『Oracle Databaseリファレンス』では、各パラメータの説明で、これらのパラメータが「変更可能」というカテゴリに分類されています。PFILEを使用した場合、変更はインスタンスの存続期間中のみ保持されます。一方、SPFILEを使用してデータベースを起動した場合、SPFILE自体のパラメータの値を変更できるため、後続のインスタンスで新しい値が使用されます。

『Oracle Databaseリファレンス』には、すべての初期化パラメータが詳細に記載されています。パラメータは、次の3つのカテゴリに分類されます。

- 基本パラメータ: データベース管理者は、すべての基本パラメータについて熟知し、これらのパラメータの設定を考慮する必要があります。

- 機能のカテゴリ: 『Oracle Databaseリファレンス』には、初期化パラメータが機能のカテゴリ別にも示されています。

- アルファベット順: 『Oracle Databaseリファレンス』の目次には、すべての初期化パラメータがアルファベット順に示されています。

初期化パラメータ値を変更する権限は、従来のプレーン・テキストの初期化パラメータ・ファイル(pfile)を使用してデータベースを起動したか、サーバー・パラメータ・ファイル(spfile)を使用してデータベースを起動したかによって異なります。特定のパラメータ値を変更する権限を持っているかどうかを確認するには、V$PARAMETER動的パフォーマンス・ビューのISSYS_MODIFIABLE列を問い合せます。

set_parameter_clause

パラメータ値を設定するときに、次の設定も行えます。

COMMENT COMMENT句を使用すると、コメント文字列をパラメータ値の変更に対応付けることができます。コメント文字列には、制御文字または改行を含めることはできません。SPFILEをあわせて指定すると、パラメータ・ファイルにコメントが表示され、そのパラメータに対する直前の変更がわかります。

DEFERRED DEFERREDキーワードを指定すると、データベースに接続するその後のセッションに対するパラメータの値を設定または変更できます。現行のセッションでは変更前の値が残ります。

このパラメータのV$PARAMETERのISSYS_MODIFIABLE列の値がDEFERREDの場合は、DEFERREDを指定する必要があります。この列の値がIMMEDIATEの場合、この句のDEFERREDキーワードはオプションです。この列の値がFALSEの場合、このALTER SYSTEM文ではDEFERREDを指定できません。

関連項目:
V$PARAMETER動的パフォーマンス・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

CONTAINER CDBでパラメータ値を設定するときには、CONTAINER句を指定できます。CDBでは初期化パラメータの継承モデルが使用されます。このモデルでは、PDBがルートから初期化パラメータの値を継承します。この場合、継承は、ルートの特定のパラメータ値が個別PDBに適用されることを意味します。

一部のパラメータについては、各PDBでルートの設定を上書きできます。これは、各PDBが初期化パラメータごとにtrueまたはfalseの継承プロパティを持つことを意味します。あるパラメータでPDBがルートの値を継承する場合、そのパラメータの継承プロパティはtrueです。PDBがルートの値を継承しない場合、そのパラメータの継承プロパティはfalseです。

一部のパラメータについては、継承プロパティがtrueである必要があります。その他のパラメータでは、継承プロパティを変更できます。この変更を行うには、現在のコンテナが操作対象のPDBであるときに、ALTER SYSTEM SET文を使用してパラメータを設定します。V$SYSTEM_PARAMETERビューで初期化パラメータのISPDB_MODIFIABLE値がTRUEになっている場合、そのパラメータの継承プロパティをfalseに設定できます。

- CONTAINER = ALLを指定すると、CDB内のすべてのコンテナ(ルートとすべてのPDBを含む)にそのパラメータ設定が適用されます。現在のコンテナがルートである必要があります。
ALLを指定すると、すべてのPDB内のパラメータの継承プロパティはtrueに設定されます。

- CONTAINER = CURRENTを指定すると、現在のコンテナのみにパラメータ設定が適用されます。現在のコンテナがルートである場合は、ルートと、そのパラメータについてtrueの継承プロパティを持つすべてのPDBにそのパラメータ設定が適用されます。

この句を省略すると、CONTAINER = CURRENTがデフォルトになります。

関連項目:
CDBのパラメータの変更の詳細は、『Oracle Database管理者ガイド』を参照してください。

SCOPE SCOPE句を使用すると、変更が有効になるタイミングを指定できます。この句の動作は、非CDB、CDBルートまたはPDBのいずれに接続されているかによって異なります。

非CDBまたはCDBルートに接続しているときにALTER SYSTEM文を発行した場合、有効範囲は、データベースの起動に使用したファイルが従来のプレーン・テキストのパラメータ・ファイル(pfile)か、サーバー・パラメータ・ファイル(spfile)かによって異なります。

- MEMORYを指定すると、変更がメモリーで行われ、すぐに有効になり、データベースが停止するまで持続されます。パラメータ・ファイル(pfile)を使用してデータベースを起動した場合、この有効範囲のみを指定できます。

- SPFILEを指定すると、変更がサーバー・パラメータ・ファイルで行われます。新しい設定は、データベースが次に停止し、再起動されたときに有効になります。『Oracle Databaseリファレンス』に変更不可能と示されている静的パラメータ値を変更する場合は、SPFILEを指定する必要があります。

- BOTHを指定すると、変更がメモリーとサーバー・パラメータ・ファイルの両方で行われます。新しい設定はすぐに有効になり、データベースが停止し、再起動された後も持続します。

データベースの起動でサーバー・パラメータ・ファイルを使用した場合は、BOTHがデフォルトです。データベースの起動でパラメータ・ファイルを使用した場合は、MEMORYがデフォルトで、これ以外の有効範囲は指定できません。

PDBに接続しているときに ALTER SYSTEM文を発行した場合は、V$SYSTEM_PARAMETERビューのISPDB_MODIFIABLE列がTRUEである初期化パラメータのみを変更できます。初期化パラメータ値はPDBでのみ有効になります。初期化パラメータがPDB用に明示的に設定されていない場合、PDBではCDBルートのパラメータ値を継承します。

- MEMORYを指定すると、変更がメモリーで行われ、PDBですぐに有効になります。この設定によって、次のいずれかの場合、CDBルートで設定された値に戻ります。

- ALTER SYSTEM SET文によって、SCOPEがBOTHまたはMEMORYに等しい場合はルートのパラメータの値が設定され、PDBがクローズして再オープンされます。SCOPEがSPFILEと等しい場合、PDBをクローズして再オープンしてもPDBのパラメータ値は変更されません。

- PDBがクローズして、再オープンされます。

- CDBが停止し、再オープンされます。

- SPFILEを指定すると、変更がPDBに対して行われ、永続的に格納されます。新しい設定はPDBのみに影響し、次のいずれかの場合に有効になります。

- PDBがクローズして、再オープンされます。

- CDBが停止し、再オープンされます。

- BOTHを指定すると、変更がメモリーで行われ、PDBに対して行われて、永続的に格納されます。新しい設定はPDBで即時に有効になり、PDBがクローズして再オープンされた後、またはCDBが停止して再オープンされた後も保持されます。新しい設定は、PDBにのみ影響を及ぼします。

PDBがCDBから切断されると、SCOPE=BOTHまたはSCOPE=SPFILEを使用してPDBに指定された初期化パラメータの値は、PDBのXMLメタデータ・ファイルに追加されます。これらの値は、PDBがCDBに接続したときにPDBでリストアされます。

SID SID句を使用すると、値を有効にするインスタンスのSIDを指定できます。

- このパラメータがまだ明示的に設定されていないすべてのインスタンスに対してパラメータ値をOracle Databaseで変更する場合は、SID = '*'を指定します。

- sidのインスタンスのみでパラメータ値を変更する場合、SID = 'sid'を指定します。この設定は、SID = '*'を指定する前後のALTER SYSTEM SET文より優先されます。

この句を指定しない場合は、次のようになります。

- pfile(従来のプレーン・テキストの初期化パラメータ・ファイル)を使用してインスタンスを起動する場合、現行のインスタンスのSIDを指定したとみなされます。

- spfile(サーバー・パラメータ・ファイル)を使用してインスタンスを起動する場合、SID = '*'を指定したとみなされます。

現行のインスタンス以外のインスタンスを指定すると、そのインスタンスに、メモリーのパラメータ値の変更を通知するメッセージが送信されます。

USE_STORED_OUTLINES句

注意:
ストアド・アウトラインは非推奨になりました。ストアド・アウトラインは、下位互換性を保つために今でもサポートされています。ただし、かわりにSQL計画管理を使用することをお薦めします。SQL計画管理の詳細は、Oracle Database SQLチューニング・ガイドを参照してください。

USE_STORED_OUTLINESは、システム・パラメータであり、初期化パラメータではありません。pfileまたはspfile内に設定することはできませんが、ALTER SYSTEM文とともに設定できます。このパラメータは、オプティマイザが実行計画を生成するためにストアド・パブリック・アウトラインを使用するかどうかを指定します。

- TRUEに設定すると、要求をコンパイルするときに、オプティマイザはDEFAULTカテゴリのストアド・アウトラインを使用します。

- FALSEに設定すると、オプティマイザはストアド・アウトラインを使用しません。これはデフォルトです。

- category_nameに設定すると、要求をコンパイルするときに、オプティマイザはcategory_nameカテゴリのストアド・アウトラインを使用します。

GLOBAL_TOPIC_ENABLED

GLOBAL_TOPIC_ENABLEDは、システム・パラメータであり、初期化パラメータではありません。pfileまたはspfile内に設定することはできませんが、ALTER SYSTEM文とともに設定できます。このパラメータは、Oracle Streams AQで作成されたすべてのキューおよびトピックがLDAPサーバーに自動的に登録されるかどうかを指定します。GLOBAL_TOPIC_ENABLED = TRUEの場合、キュー表が作成、変更または削除されると、対応するLightweight Directory Access Protocol(LDAP)エントリも作成、変更または削除されます。

このパラメータは、Java Message Service(JMS)に対しても同様に機能します。LDAPを使用するようにデータベースが構成されており、GLOBAL_TOPIC_ENABLEDパラメータがTRUEに設定されている場合、すべてのJMSキューおよびトピックは作成時にLDAPサーバーに自動的に登録されます。管理者は、LDAPに登録されたキューおよびトピックの別名を作成することもできます。LDAPに登録されたキューおよびトピックは、JNDIを介してキューまたはトピックの名前または別名を使用してルックアップできます。

共有サーバー・パラメータ

インスタンスを起動すると、Oracle DatabaseはSHARED_SERVERSおよびDISPATCHERS初期化パラメータの値に基づく共有サーバー・アーキテクチャの共有サーバー・プロセスおよびディスパッチャ・プロセスを作成します。ALTER SYSTEM文でSHARED_SERVERSおよびDISPATCHERSパラメータを設定し、インスタンスの実行中に次の操作のいずれかを実行できます。

- 共有サーバー・プロセスの最小値を増やして、追加の共有サーバー・プロセスを作成します。

- 現行のコールが処理を終了した後、既存の共有サーバー・プロセスを終了します。

- 特定のプロトコルに対するディスパッチャ・プロセスをより多く作成します。プロトコル全体で、初期化パラメータMAX_DISPATCHERSによって指定される数まで作成できます。

- 現行のユーザー・プロセスがインスタンスから切断した後、特定のプロトコルに対する既存のディスパッチャ・プロセスを終了します。

alter_system_reset_clause

この句によって、任意のインスタンスについて、インスタンスの起動に使用されたspfile内の初期化パラメータの設定を削除できます。SCOPE=MEMORYもSCOPE=BOTHも許可されません。SCOPE = SPFILE句は必須ではありませんが、意味を明確にするために含まれています。この句は単一インスタンス環境で使用できますが、pfileではなくspfileを使用してインスタンスが起動された場合のみです。

SID句を使用すると、指定したインスタンスのspfileパラメータ設定を削除できます。Oracle RACを使用しない環境では、インスタンスは1つのみであるため、この句を省略できます。Oracle RAC環境では、この句を省略すると、デフォルトのSID = '*'が使用され、したがって*.parameter = value形式のパラメータの設定がすべて削除されます。

関連項目:

- Oracle Real Application Clusters環境の各インスタンス用のパラメータ値設定の詳細は、『Oracle Real Application Clusters管理およびデプロイメント・ガイド』を参照してください

- ALTER SYSTEM文の使用例は、「ライセンス・パラメータの変更例:」、「クエリー・リライトを使用可能にする例:」、「リソース制限を使用可能にする例:」、「共有サーバー・パラメータ」および「共有サーバーの設定の変更例:」を参照してください。

RELOCATE CLIENT

この句は、Oracle Flex ASMを使用している場合にのみ有効です。この句の発行は、通常のデータベース・インスタンスからではなく、Oracle ASMインスタンスから行う必要があります。

この句を使用すると、特定のクライアントを最も負荷が低いOracle ASMインスタンスに再配置できます。この句を発行すると、クライアントとの接続が終了し、クライアントは最も負荷が低いインスタンスにフェイルオーバーします。クライアントが最も負荷の低いインスタンスに現在接続している場合は、クライアントとの接続が終了し、クライアントはその同じインスタンスにフェイルオーバーします。

client_idには、次の形式の文字列を一重引用符で囲って指定します。

instance_name:db_name

ここで、instance_nameはクライアントの識別子、db_nameはクライアントのデータベース名です。これらの値を確認するには、V$ASM_CLIENT動的パフォーマンス・ビューのINSTANCE_NAME列とDB_NAME列を問い合せます。

関連項目:

- Oracle Flex ASMの管理の詳細は、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

- V$ASM_CLIENT動的パフォーマンス・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

例

REDOログの手動アーカイブの例: 次の文は、SCN 9356083のREDOログ・エントリを含むREDOログ・ファイル・グループを手動でアーカイブします。

ALTER SYSTEM ARCHIVE LOG CHANGE 9356083;

次の文は、メンバー'diskl:log6.log'を含むREDOログ・ファイル・グループを、'diska:[arch$]'という場所にあるアーカイブREDOログ・ファイルに手動でアーカイブします。

ALTER SYSTEM ARCHIVE LOG
LOGFILE 'diskl:log6.log'
TO 'diska:[arch$]';

クエリー・リライトを使用可能にする例: 次の文は、クエリー・リライトが明示的に使用禁止にされていないすべてのマテリアライズド・ビューに対するすべてのセッションで、クエリー・リライトを使用可能にします。

ALTER SYSTEM SET QUERY_REWRITE_ENABLED = TRUE;

セッションを制限する例: たとえば、アプリケーションのメンテナンス中は、RESTRICTED SESSIONシステム権限が付与されているアプリケーション開発者のみがログインできるようにセッションを制限できます。このためには、次の文を発行します。

ALTER SYSTEM
ENABLE RESTRICTED SESSION;

次に、ALTER SYSTEM文のKILL SESSION句を使用すると、既存のセッションをどれでも終了できます。

アプリケーションのメンテナンスが終了した後で、次の文を発行することによって、CREATE SESSIONシステム権限が付与されているユーザーもログインできるようになります。

ALTER SYSTEM
DISABLE RESTRICTED SESSION;

ウォレットおよび暗号化キーの確立例: 次の文を使用すると、サーバー・ウォレットの情報をメモリーにロードして、データの透過的暗号化のマスター鍵を設定できます。

ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "password";
ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "password";

これらの文では、セキュリティ・モジュールが初期化済で、passwordを使用してウォレットが作成済であることを前提としています。

ウォレットを閉じる例: 次の文を使用すると、パスワードベースのウォレット情報をメモリーから削除できます。

ALTER SYSTEM SET ENCRYPTION WALLET CLOSE IDENTIFIED BY "password";

次の文を使用すると、パスワードベースのウォレット情報および自動ログイン情報(存在する場合)をメモリーから削除できます。

ALTER SYSTEM SET ENCRYPTION WALLET CLOSE;

共有プールの消去例: 共有プールを消去してから、パフォーマンス分析を開始します。共有プールを消去する場合、次の文を発行します。

ALTER SYSTEM FLUSH SHARED_POOL;

チェックポイントの発生例: 次の文は、チェックポイントを強制的に発生させます。

ALTER SYSTEM CHECKPOINT;

リソース制限を使用可能にする例: 次のALTER SYSTEM文は、リソース制限を動的に使用可能にします。

ALTER SYSTEM SET RESOURCE_LIMIT = TRUE;

共有サーバーの設定の変更例: 次の文は、共有サーバー・プロセスの最小数を25に変更します。

ALTER SYSTEM SET SHARED_SERVERS = 25;

共有サーバー・プロセスの数が25より少ない場合は追加作成されます。共有サーバー・プロセスが25より多く、25あれば負荷を管理できる場合は、現行のコールによる処理が終了した時点で、25を超える分の共有サーバー・プロセスは終了します。

次の文は、TCP/IPプロトコルのディスパッチャ・プロセス数を5に、ipcプロトコルのディスパッチャ・プロセス数を10に動的に変更します。

ALTER SYSTEM
SET DISPATCHERS =
'(INDEX=0)(PROTOCOL=TCP)(DISPATCHERS=5)',
'(INDEX=1)(PROTOCOL=ipc)(DISPATCHERS=10)';

TCPのディスパッチャ・プロセスの数が5より少ない場合、ディスパッチャ・プロセスが新しく作成されます。5より多い場合は、接続されているユーザーが接続を切断した後に、5を超える分のディスパッチャ・プロセスは終了します。

ipcのディスパッチャ・プロセスの数が10より少ない場合、ディスパッチャ・プロセスが新しく作成されます。10より多い場合は、接続されているユーザーが接続を切断した後に、10を超える分のディスパッチャ・プロセスは終了します。

これ以外のプロトコル用として既存ディスパッチャがある場合、この文は、そのディスパッチャの数に影響しません。

ライセンス・パラメータの変更例: 次の文は、インスタンスにおけるセッションの最大数を64に、セッションの警告しきい値を54に動的に変更します。

ALTER SYSTEM
SET LICENSE_MAX_SESSIONS = 64
LICENSE_SESSIONS_WARNING = 54;

セッション数が54に達した場合、後続の各セッションのALERTファイルに警告メッセージが書き込まれます。RESTRICTED SESSIONシステム権限を持つユーザーも、後続セッションを開始する場合に、警告メッセージを受け取ります。

セッション数が64に達した場合、セッション数が再び64を下回るまでは、RESTRICTED SESSIONシステム権限を持つユーザー以外は新しいセッションを開始できません。

次の文は、インスタンスのセッションの最大数を動的に使用禁止にします。この文の実行後は、インスタンスのセッション数に制限がなくなります。

ALTER SYSTEM SET LICENSE_MAX_SESSIONS = 0;

次の文は、データベースのユーザー数の制限を200に動的に変更します。この文の実行後は、データベース・ユーザー数が200を超えることはありません。

ALTER SYSTEM SET LICENSE_MAX_USERS = 200;

ログ・スイッチの発生例: 強制的なログ・スイッチが必要になるのは、たとえば現行のREDOログ・ファイル・グループまたはそのメンバーの削除や名前の変更を行う場合です(Oracle Databaseが書き込んでいるファイルの削除や名前変更はできないため)。強制ログ・スイッチの影響を受けるのは、このインスタンスのREDOログ・スレッドのみです。次の文は、ログ・スイッチを強制します。

ALTER SYSTEM SWITCH LOGFILE;

分散リカバリを使用可能にする例: 次の文は、分散リカバリを使用可能にします。

ALTER SYSTEM ENABLE DISTRIBUTED RECOVERY;

デモンストレーションまたはテストの目的で、分散リカバリを使用禁止にする場合があります。次の文は、シングルプロセス・モードとマルチプロセス・モードの両方で分散リカバリを使用禁止にします。

ALTER SYSTEM DISABLE DISTRIBUTED RECOVERY;

デモンストレーションまたはテストが終了した場合、ALTER SYSTEM文にENABLE DISTRIBUTED RECOVERY句を指定して実行すると、分散リカバリを再び使用可能にできます。

セッションの終了例: あるユーザーのセッションで、他のユーザーが必要とするリソースを使用している場合、そのユーザーのセッションを終了させる場合があります。そのユーザーは、セッションが終了したことを示すエラー・メッセージを受け取ります。そのユーザーがデータベースに対する呼出しを行うには、新しいセッションを開始する必要があります。V$SESSION動的パフォーマンス表に次のデータがあるとします(ユーザーSYSとoeの両方がセッションを開いています)。

SELECT sid, serial#, username
FROM V$SESSION;

SID    SERIAL# USERNAME
---------- ---------- ------------------------------
29         85 SYS
33          1
35          8
39         23 OE
40          1
. . .

次の文は、V$SESSIONのSID値とSERIAL#値を使用して、ユーザーscottのセッションを終了します。

ALTER SYSTEM KILL SESSION '39, 23';

セッションの切断例: 次の文は、V$SESSIONのSIDとSERIAL#の値を使用して、ユーザーscottのセッションを切断します。

ALTER SYSTEM DISCONNECT SESSION '13, 8' POST_TRANSACTION;

12 SQL文: ALTER TABLEからALTER TABLESPACE

この章では、次のSQL文について説明します。

- ALTER TABLE

- ALTER TABLESPACE

ALTER TABLE

用途

ALTER TABLE文を使用すると、非パーティション表、パーティション表、表パーティションおよび表サブパーティションの定義を変更できます。オブジェクト表またはオブジェクト列を含むリレーショナル表の場合は、ALTER TABLEを使用して型が変更された後に、表を参照する型の最新の定義に変換します。

注意:
マテリアライズド・ビュー・ログ表の操作では、可能な場合は常に、ALTER TABLE文ではなくALTER MATERIALIZED VIEW LOG文を使用することをお薦めします。

関連項目:

- 表の作成については、「CREATE TABLE」を参照してください。

- Oracle Textとともに使用するALTER TABLE文については、『Oracle Textリファレンス』を参照してください。

追加トピック:

- 前提条件

- 構文

- セマンティクス

- 例

前提条件

表が自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、その表に対するALTERオブジェクト権限またはALTER ANY TABLEシステム権限が必要です。

パーティション化操作におけるその他の前提条件 表の所有者でない場合、drop_table_partitionまたはtruncate_table_partition句を使用するには、DROP ANY TABLE権限が必要です。

add_table_partition、modify_table_partition、move_table_partitionおよびsplit_table_partition句を使用する場合、領域を確保する表領域に領域割当て制限が必要です。

パーティション化操作が子の参照パーティション表にカスケードする場合、子の参照パーティション表では権限は必要ありません。

exchange_partition_subpart句を使用する際、交換される表データにID列が含まれており、自分が交換に関与する両方の表の所有者ではない場合は、ALTER ANY SEQUENCEシステム権限が必要です。

制約およびトリガーにおけるその他の前提条件 一意キー制約または主キー制約を有効にする場合は、表に索引を作成するための権限が必要です。Oracle Databaseでは、表を含むスキーマにおいて、一意キーまたは主キーの列に索引を作成するため、この権限が必要になります。

トリガーを使用可能または使用禁止にする場合、トリガーが自分のスキーマ内にある必要があります。自分のスキーマにない場合は、ALTER ANY TRIGGERシステム権限が必要です。

関連項目:
索引を作成する場合に必要な権限については、「CREATE INDEX」を参照してください。

オブジェクト型を使用する場合のその他の前提条件 表を変更するときに列定義でオブジェクト型を使用する場合、そのオブジェクトが、変更する表と同じスキーマに属している必要があります。または、EXECUTE ANY TYPEシステム権限またはそのオブジェクト型に対するEXECUTEオブジェクト権限が必要です。

フラッシュバック・データ・アーカイブ操作におけるその他の前提条件 flashback_archive_clauseを使用して表の履歴追跡を有効にするには、履歴データが含まれるフラッシュバック・データ・アーカイブに対するFLASHBACK ARCHIVEオブジェクト権限が必要です。flashback_archive_clauseを使用して表の履歴追跡を無効にするには、FLASHBACK ARCHIVE ADMINSTERシステム権限を持っているか、またはSYSDBAとしてログインしている必要があります。

エディション・オブジェクトを参照するための追加前提条件: evaluation_edition_clauseまたはunusable_editions_clauseでエディションを指定する場合は、そのエディションに対するUSE権限が必要です。

構文

alter_table::=

注意:
tableの後に句を指定する必要があります。必須の句はありませんが、1つ以上の句を指定する必要があります。

ALTER TABLE構文のグループは、次のとおりです。

- alter_table_properties::=

- column_clauses::=

- constraint_clauses::=

- alter_table_partitioning ::=

- alter_external_table ::=

- move_table_clause ::=

- modify_opaque_type::=

- enable_disable_clause::=

各句の後には、そのコンポーネントの副次句の参照先が記載されています。

alter_table_properties::=

注意:
MODIFY CLUSTERING句を指定する場合、clustering_whenまたはzonemap_clause句のいずれかを指定する必要があります。

(physical_attributes_clause::=、logging_clause::=、table_compression ::=、inmemory_alter_table_clause::=、ilm_clause::=、supplemental_table_logging ::=、allocate_extent_clause ::=、deallocate_unused_clause::=、upgrade_table_clause ::=、records_per_block_clause ::=、parallel_clause ::=、row_movement_clause::=、flashback_archive_clause::=、shrink_clause::=、attribute_clustering_clause::=、clustering_when::=、zonemap_clause::=、alter_iot_clauses::=、alter_XMLSchema_clause::=を参照)

physical_attributes_clause::=

(storage_clause::=を参照)

logging_clause::=

table_compression::=

inmemory_alter_table_clause::=

(inmemory_parameters::=、inmemory_column_clause::=)

inmemory_parameters::=

(inmemory_memcompress::=、inmemory_priority::=、inmemory_distribute::=、inmemory_duplicate::=)

inmemory_memcompress::=

inmemory_priority::=

inmemory_distribute::=

inmemory_duplicate::=

inmemory_column_clause::=

(inmemory_memcompress::=)

ilm_clause::=

ilm_policy_clause::=

(ilm_compression_policy::=、ilm_tiering_policy::=を参照)

ilm_compression_policy::=

(table_compression ::=、ilm_time_period::=を参照)

ilm_tiering_policy::=

(ilm_time_period::=を参照)

ilm_time_period::=

supplemental_table_logging ::=

supplemental_log_grp_clause::=

supplemental_id_key_clause::=

allocate_extent_clause::=

(size_clause::=を参照)

deallocate_unused_clause::=

(size_clause::=を参照)

upgrade_table_clause ::=

(column_properties::=を参照)

records_per_block_clause ::=

row_movement_clause::=

flashback_archive_clause::=

alter_iot_clauses::=

(alter_overflow_clause ::=、alter_mapping_table_clauses ::=を参照)

index_org_table_clause::=

(mapping_table_clauses::=、prefix_compression ::=、index_org_overflow_clause ::=を参照)

mapping_table_clauses::=

index_compression::=

prefix_compression::=

advanced_index_compression::=

index_org_overflow_clause::=

(segment_attributes_clause::=を参照)

partition_extended_name::=

subpartition_extended_name::=

segment_attributes_clause::=

(physical_attributes_clause ::=、logging_clause::=を参照)

alter_overflow_clause::=

(segment_attributes_clause::=、allocate_extent_clause ::=、shrink_clause::=、deallocate_unused_clause::=を参照)

add_overflow_clause::=

(segment_attributes_clause::=を参照)

alter_mapping_table_clauses ::=

(allocate_extent_clause ::=、deallocate_unused_clause ::=を参照)

shrink_clause::=

attribute_clustering_clause::=

(clustering_join::=、cluster_clause::=、clustering_when::=、zonemap_clause::=)

clustering_join::=

cluster_clause::=

clustering_columns::=

clustering_column_group::=

clustering_when::=

zonemap_clause::=

column_clauses::=

(add_column_clause ::=, modify_column_clauses::=, drop_column_clause ::=, add_period_clause::=, drop_period_clause::=, rename_column_clause ::=, modify_collection_retrieval ::=, modify_LOB_storage_clause::=, alter_varray_col_properties::=を参照)

add_column_clause ::=

(column_definition::=、virtual_column_definition::=、column_properties::=、out_of_line_part_storage::=を参照)

column_definition::=

(identity_clause::=、encryption_spec::=、constraint::=のinline_constraintおよびinline_ref_constraintを参照)

identity_clause::=

identity_options::=

virtual_column_definition::=

(evaluation_edition_clause::=, unusable_editions_clause::=, constraint::=を参照)

evaluation_edition_clause::=

unusable_editions_clause::=

modify_column_clauses::=

(modify_col_properties::=, modify_virtcol_properties::=, modify_col_visibility::=, modify_col_substitutable::=を参照)

modify_col_properties::=

(identity_clause::=、encryption_spec::=、inline_constraint: constraint::=、LOB_storage_clause::=、alter_XMLSchema_clause::=を参照)

encryption_spec::=

modify_virtcol_properties::=

(evaluation_edition_clause::=, unusable_editions_clause::=を参照)

modify_col_visibility::=

modify_col_substitutable::=

drop_column_clause ::=

add_period_clause::=

period_definition::=

drop_period_clause::=

rename_column_clause ::=

modify_collection_retrieval ::=

constraint_clauses::=

(out_of_line_constraint::=, out_of_line_ref_constraint::=, constraint_state::=, drop_constraint_clause::=)

drop_constraint_clause::=

column_properties::=

out_of_line_part_storage::=

object_type_col_properties::=

substitutable_column_clause::=

nested_table_col_properties::=

object_properties::=

(constraint::=のinline_constraint、inline_ref_constraint、out_of_line_constraint、out_of_line_ref_constraintを参照)

supplemental_logging_props::=

(supplemental_log_grp_clause::=、supplemental_id_key_clause::=を参照)

physical_properties::=

(deferred_segment_creation::=、segment_attributes_clause::=、table_compression ::=、inmemory_table_clause::=- CREATE TABLE構文の一部、ilm_clause::=、heap_org_table_clause::=、index_org_table_clause ::=、external_table_clause ::=- CREATE TABLE構文の一部)

deferred_segment_creation::=

heap_org_table_clause::=

(table_compression ::=、inmemory_table_clause::=- CREATE TABLE構文の一部、ilm_clause::=)

varray_col_properties::=

(substitutable_column_clause::=、varray_storage_clause::=を参照)

varray_storage_clause::=

(LOB_parameters::=を参照)

LOB_storage_clause::=

(LOB_storage_parameters::=を参照)

LOB_storage_parameters::=

(LOB_parameters::=、storage_clause::=を参照)

LOB_parameters::=

(LOB_retention_clause::=、LOB_deduplicate_clause::=、LOB_compression_clause::=、encryption_spec::=、logging_clause::=を参照)

modify_LOB_storage_clause::=

modify_LOB_parameters::=

(storage_clause::=、LOB_retention_clause::=、LOB_compression_clause::=、encryption_spec::=、logging_clause::=、allocate_extent_clause ::=、shrink_clause::=、deallocate_unused_clause::=を参照)

LOB_retention_clause::=

LOB_deduplicate_clause::=

LOB_compression_clause::=

alter_varray_col_properties::=

(modify_LOB_parameters::=を参照)

LOB_partition_storage::=

(LOB_storage_clause::=、varray_col_properties::=、LOB_partitioning_storage::=を参照)

LOB_partitioning_storage::=

XMLType_column_properties::=

XMLType_storage::=

XMLSchema_spec::=

alter_XMLSchema_clause::=

alter_external_table ::=

(add_column_clause ::=、modify_column_clauses::=、drop_column_clause ::=、drop_constraint_clause::=、parallel_clause::=を参照)

external_data_properties::=

alter_table_partitioning ::=

(modify_table_default_attrs ::=、alter_interval_partitioning::=、set_subpartition_template ::=、modify_table_partition::=、modify_table_subpartition::=、move_table_partition::=、move_table_subpartition::=、add_table_partition::=、coalesce_table_partition::=、drop_table_partition::=、drop_table_subpartition ::=、rename_partition_subpart::=、truncate_partition_subpart::=、split_table_partition::=、split_table_subpartition ::=、merge_table_partitions ::=、merge_table_subpartitions ::=、exchange_partition_subpart ::=を参照)

modify_table_default_attrs ::=

(partition_extended_name::=、deferred_segment_creation::=、indexing_clause::=、segment_attributes_clause::=、table_compression ::=、inmemory_clause::=、prefix_compression::=、alter_overflow_clause ::=、LOB_parameters::=を参照)

indexing_clause::=

inmemory_clause::=

(inmemory_parameters::=)

alter_interval_partitioning::=

set_subpartition_template ::=

(range_subpartition_desc::=、list_subpartition_desc::=、individual_hash_subparts::=を参照)

modify_table_partition::=

(modify_range_partition::=、modify_hash_partition::=、modify_list_partition::=を参照)

modify_range_partition::=

(partition_extended_name::=、partition_attributes::=、add_range_subpartition ::=、add_hash_subpartition ::=、add_list_subpartition::=、coalesce_table_subpartition::=、alter_mapping_table_clauses::=、indexing_clause ::=を参照)

modify_hash_partition::=

(partition_extended_name::=、coalesce_table_subpartition::=、partition_attributes::=、alter_mapping_table_clauses ::=、indexing_clause::=)

modify_list_partition::=

(partition_extended_name::=, partition_attributes::=、add_range_subpartition ::=、add_list_subpartition::=、add_hash_subpartition ::=、coalesce_table_subpartition::=、indexing_clause::=を参照)

modify_table_subpartition::=

(subpartition_extended_name::=、allocate_extent_clause ::=、deallocate_unused_clause::=、shrink_clause::=、modify_LOB_parameters::=、indexing_clause::=を参照)

move_table_partition::=

(partition_extended_name::=、table_partition_description::=、update_index_clauses::=、parallel_clause ::=、allow_disallow_clustering::=を参照)

allow_disallow_clustering::=

move_table_subpartition::=

(subpartition_extended_name::=、indexing_clause::=、partitioning_storage_clause::=、update_index_clauses::=、parallel_clause ::=、allow_disallow_clustering::=を参照)

add_table_partition::=

(add_range_partition_clause::=、add_list_partition_clause ::=、add_system_partition_clause::=、add_hash_partition_clause ::=、dependent_tables_clause:=を参照)

add_range_partition_clause::=

(range_values_clause::=、table_partition_description::=、range_subpartition_desc::=、list_subpartition_desc::=、individual_hash_subparts::=、hash_subparts_by_quantity::=、update_index_clauses::=を参照)

add_hash_partition_clause ::=

(partitioning_storage_clause::=、update_index_clauses::=、parallel_clause::=、indexing_clause::=を参照)

add_list_partition_clause ::=

(list_values_clause::=、table_partition_description::=、range_subpartition_desc::=、list_subpartition_desc::=、individual_hash_subparts::=、hash_subparts_by_quantity::=、update_index_clauses::=を参照)

add_system_partition_clause::=

(table_partition_description::=、update_index_clauses::=を参照)

add_range_subpartition ::=

(range_subpartition_desc::=、dependent_tables_clause:=、update_index_clauses::=を参照)

add_hash_subpartition ::=

(individual_hash_subparts::=、dependent_tables_clause:=、update_index_clauses::=、parallel_clause ::=を参照)

add_list_subpartition::=

(list_subpartition_desc::=、dependent_tables_clause:=、update_index_clauses::=を参照)

dependent_tables_clause:=

(partition_spec::=を参照)

coalesce_table_partition::=

(update_index_clauses::=、parallel_clause ::=、allow_disallow_clustering::=を参照)

coalesce_table_subpartition::=

(update_index_clauses::=、parallel_clause ::=、allow_disallow_clustering::=を参照)

drop_table_partition::=

(partition_extended_names::=、update_index_clauses::=、parallel_clause::=を参照)

drop_table_subpartition ::=

(subpartition_extended_names::=、update_index_clauses::=、parallel_clause::=を参照)

rename_partition_subpart::=

(partition_extended_name::=、subpartition_extended_name::=を参照)

truncate_partition_subpart::=

(partition_extended_names::=、subpartition_extended_names::=、update_index_clauses::=、parallel_clause::=を参照)

partition_extended_names::=

subpartition_extended_names::=

split_table_partition::=

(partition_extended_name::=、range_partition_desc::=、list_partition_desc::=、partition_spec::=、split_nested_table_part::=、dependent_tables_clause:=、update_index_clauses::=、parallel_clause::=、allow_disallow_clustering::=を参照)

split_nested_table_part::=

nested_table_partition_spec::=

split_table_subpartition ::=

(subpartition_extended_name::=、range_subpartition_desc::=、list_subpartition_desc::=、subpartition_spec::=、dependent_tables_clause:=、update_index_clauses::=、parallel_clause::=、allow_disallow_clustering::=を参照)

subpartition_spec::=

merge_table_partitions ::=

(partition_or_key_value::=, partition_spec::=, dependent_tables_clause:=, update_index_clauses::=, parallel_clause::=、allow_disallow_clustering::=を参照)

partition_or_key_value::=

merge_table_subpartitions ::=

(subpartition_or_key_value::=、range_subpartition_desc::=、list_subpartition_desc::=、dependent_tables_clause:=、update_index_clauses::=、parallel_clause ::=、allow_disallow_clustering::=を参照)

subpartition_or_key_value::=

exchange_partition_subpart ::=

(partition_extended_name::=、subpartition_extended_name::=、exceptions_clause::=、update_index_clauses::=、parallel_clause::=を参照)

exceptions_clause::=

range_values_clause::=

list_values_clause::=

table_partition_description::=

(deferred_segment_creation::=, indexing_clause::=, segment_attributes_clause::=, table_compression ::=, prefix_compression::=, inmemory_clause::=, ilm_clause::=, LOB_storage_clause::=, varray_col_properties::=)

range_partition_desc::=

(range_values_clause::=、table_partition_description::=、range_subpartition_desc::=、list_subpartition_desc::=を参照)

list_partition_desc::=

(list_values_clause::=、table_partition_description::=、range_subpartition_desc::=、list_subpartition_desc::=を参照)

range_subpartition_desc::=

(range_values_clause::=、indexing_clause::=、partitioning_storage_clause::=を参照)

list_subpartition_desc::=

(list_values_clause::=、indexing_clause::=、partitioning_storage_clause::=を参照)

individual_hash_subparts::=

(indexing_clause::=、partitioning_storage_clause::=を参照)

hash_subparts_by_quantity::=

partitioning_storage_clause::=

table_compression ::=, index_compression::=, inmemory_clause::=, ilm_clause::=, LOB_partitioning_storage::=)

partition_attributes::=

(physical_attributes_clause::=、logging_clause::=、allocate_extent_clause ::=、deallocate_unused_clause::=、shrink_clause::=、table_compression ::=、inmemory_clause::=、modify_LOB_parameters::=を参照)

partition_spec::=

(table_partition_description::=を参照)

update_index_clauses::=

(update_global_index_clause ::=、update_all_indexes_clause::=を参照)

update_global_index_clause ::=

update_all_indexes_clause::=

(update_index_partition::=、update_index_subpartition::=を参照)

update_index_partition::=

(index_partition_description::=、index_subpartition_clause::=を参照)

update_index_subpartition::=

index_partition_description::=

(segment_attributes_clause::=、index_compression::=を参照)

index_subpartition_clause::=

(index_compression::=)

parallel_clause ::=

move_table_clause ::=

(segment_attributes_clause::=、table_compression ::=、index_org_table_clause ::=、LOB_storage_clause::=, varray_col_properties::=、parallel_clause::=、allow_disallow_clustering::=を参照)

modify_opaque_type::=

enable_disable_clause::=

(using_index_clause::=、exceptions_clause::=を参照)

using_index_clause::=

(create_index::=、index_properties::=を参照)

index_properties::=

(global_partitioned_index::=、local_partitioned_index ::=(「CREATE INDEX」の項)、index_attributes::=を参照。domain_index_clauseは、using_index_clauseではサポートされていません。)

index_attributes::=

(physical_attributes_clause::=、logging_clause::=、index_compression::=を参照。partial_index_clauseおよびparallel_clauseは、using_index_clauseではサポートされていません。)

セマンティクス

ALTER TABLE文の多くの句の機能は、CREATE TABLE文での機能と同じです。これらの句の詳細は、「CREATE TABLE」を参照してください。

注意:
ALTER TABLE文を実行すると、変更した表にアクセスするプロシージャおよびストアド・ファンクションが無効になる場合があります。無効になる条件および具体的な状況については、『Oracle Database開発ガイド』を参照してください。

schema

表が含まれているスキーマを指定します。schemaを指定しない場合、表は自分のスキーマ内にあるとみなされます。

table

変更する表の名前を指定します。

注意:
変更対象の表が、1つ以上のマテリアライズド・ビューのマスター表である場合は、そのマテリアライズド・ビューの状態がINVALIDに設定されます。無効なマテリアライズド・ビューは、クエリー・リライトには使用できず、リフレッシュもできません。マテリアライズド・ビューを再び有効にする方法は、「ALTER MATERIALIZED VIEW」を参照してください。

関連項目:
マテリアライズド・ビューに関する一般的な情報については、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

一時表の変更の制限事項: 一時表の変更、一時表内の列の削除または一時表の名前の変更を実行できます。ただし、一時表に対して次のことはできません。

- ネストした表型の列の追加(他の型の列は追加できます)。

- 追加または変更された列の参照整合性(外部キー)制約の指定。

- 追加または変更されたLOB列に対する次のLOB_storage_clauseの句の指定: TABLESPACE、storage_clause、logging_clause、allocate_extent_clauseまたはdeallocate_unused_clause。

- physical_attributes_clause、nested_table_col_properties、parallel_clause、allocate_extent_clause、deallocate_unused_clauseまたは索引構成表(IOT)句の指定。

- パーティション表と一時表の間でのパーティションの交換。

- logging_clauseの指定。

- MOVEの指定。

- INVISIBLEの列の追加、または既存の列をINVISIBLEにするための変更。

外部表の変更の制限事項: 外部表の列を追加、削除または変更できます。ただし、外部表に対して次のことはできません。

- LONG、LOBまたはオブジェクト型の列の追加、または外部表の列のデータ型をこれらのデータ型のいずれかに変換。

- 外部表への制約の追加。

- 外部表の記憶域パラメータの変更。

- logging_clauseの指定。

- MOVEの指定。

- INVISIBLEの列の追加、または既存の列をINVISIBLEにするための変更。

alter_table_properties

alter_table_clausesを使用すると、データベースの表を変更できます。

physical_attributes_clause

physical_attributes_clauseを使用すると、PCTFREE、PCTUSEDおよびINITRANSパラメータの値と記憶特性を変更できます。これらのパラメータおよび特性の詳細は、「physical_attributes_clause」および「storage_clause」を参照してください。

表の物理属性の変更の制限事項: 物理属性の変更には、次の制限事項があります。

- PCTUSEDパラメータは、索引構成表の索引セグメントに対して指定できません。

- ローカル管理表領域にある表の記憶域属性を変更しようとすると、Oracle Databaseエラーが発生します。ただし、パーティション表のセグメントのいくつかがローカル管理表領域にあり、それ以外のセグメントがディクショナリ管理表領域にある場合は、ディクショナリ管理表領域のセグメントの記憶域属性は変更されますが、ローカル管理表領域のセグメントの記憶域属性は変更されず、エラーも発生しません。

- 自動セグメント領域管理のセグメントの場合は、PCTUSED設定の変更は無視されます。PCTFREE設定を変更した場合、その変更をセグメントに割当て済のブロックに実装するには、DBMS_REPAIR.SEGMENT_FIX_STATUSプロシージャを実行する必要があります。

表の物理属性の変更の注意事項: この句で指定する値が表に与える影響を次に示します。

- 非パーティション表の場合、作成時に表に指定した値は新しく指定した値によって上書きされます。

- レンジ・パーティション表、リスト・パーティション表またはハッシュ・パーティション表の場合、新しく指定した値がその表のデフォルト値およびすべての既存パーティションに対する実際の値となり、そのパーティションにすでに設定されていた値は上書きされます。既存のパーティション値を上書きせずにデフォルトの表属性を変更する場合は、modify_table_default_attrs句を使用してください。

- コンポジット・パーティション表の場合、新しく指定した値がその表とその表のすべてのパーティションのデフォルト値、およびその表のすべてのサブパーティションに対する実際の値となり、そのサブパーティションにすでに設定されていた値は上書きされます。既存のサブパーティションの値を上書きせずにデフォルトのパーティション属性を変更する場合は、FOR PARTITION句とともにmodify_table_default_attrs句を使用してください。

logging_clause

logging_clauseを使用すると、表のロギング属性を変更できます。また、logging_clauseでは、後続のALTER TABLE ... MOVEおよびALTER TABLE ... SPLIT操作のログを記録するかどうかを指定します。

modify_table_default_attrs句とともにこの句を使用した場合、パーティション表のロギング属性が影響を受けます。

関連項目:

- この句の詳細は、「logging_clause」を参照してください。

- logging_clauseおよびパラレルDMLの詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

table_compression

table_compression句は、ヒープ構成表に対してのみ有効です。この句を使用すると、ディスクおよびメモリーの使用量を削減するために、データ・セグメントを圧縮するかどうかを指定できます。この句のセマンティクスの詳細および表の圧縮を使用したオブジェクトの作成方法の詳細は、「CREATE TABLE」の「table_compression」を参照してください。

注意:
初めて、圧縮データが追加されるように表を変更する場合は、表のすべてのビットマップ索引およびビットマップ索引パーティションにUNUSABLEのマークを付ける必要があります。

inmemory_alter_table_clause

この句を使用して、インメモリー列ストア(IM列ストア)の表または表の列を有効化または無効化するか、表または表の列のインメモリーのパラメータを変更します。

- INMEMORYを指定して、IM列ストアの表を有効化するか、IM列ストアにすでに有効化されている表のinmemory_parametersを変更します。

- inmemory_column_clauseを指定して、IM列ストアの表の列を有効化または無効化するか、表の列のinmemory_memcompress設定を変更します。

- NO INMEMORYを指定して、IM列ストアの表を無効化します。

このinmemory_alter_table_clauseのセマンティクスは、CREATE TABLEのinmemory_table_clauseと同じですが、次が追加されます。

- IM列ストアにすでに有効化されている表のデータ圧縮方法を変更する場合、以前に特定のデータ圧縮方法を割り当てた列にデータ圧縮方法が保持されます。

- IM列ストアの表を無効化すると、列レベル・データ圧縮方法設定が失われます。その後、IM列ストアの表を有効化すると、表を有効化するときに特に指定しないかぎり、すべての列で表のデータ圧縮方法を使用します。

inmemory_parametersおよびinmemory_column_clause句は、CREATE TABLEおよびALTER TABLEと同じセマンティクスを持ちます。これらの句のセマンティクスの詳細は、CREATE TABLEのドキュメントのinmemory_parametersおよびinmemory_column_clauseを参照してください。

inmemory_clause

この句を使用して、IM列ストアの表のパーティションを有効化または無効化するか、表のパーティションのインメモリーのパラメータを変更します。この句のセマンティクスは、CREATE TABLEおよびALTER TABLEで同じです。この句のセマンティクスの詳細は、CREATE TABLEのドキュメントのinmemory_clauseを参照してください。

ilm_clause

この句を使用すると、表の自動データ最適化ポリシーの追加、削除、有効化または無効化を実行できます。

ADD POLICY この句を指定すると、表にポリシーを追加できます。

ポリシーを指定するには、ilm_policy_clauseを使用します。この句のセマンティクスの詳細は、「ilm_policy_clause」を参照してください。

ポリシーにはPn,という形式の名前が割り当てられます。nは整数値です。

{ DELETE | ENABLE | DISABLE } POLICY これらの句を指定して、表のポリシーの削除、表のポリシーの有効化または表のポリシーの無効化をそれぞれ実行します。

ilm_policy_nameには、ポリシーの名前を指定します。ポリシー名は、DBA_ILMPOLICIESビューのPOLICY_NAME列に問い合せて確認できます。

{ DELETE_ALL, ENABLE_ALL, DISABLE_ALL } これらの句を指定して、表のすべてのポリシーの削除、表のすべてのポリシーの有効化または表のすべてのポリシーの無効化をそれぞれ実行します。

関連項目:
自動データ最適化ポリシーの管理の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

ilm_policy_clause

この句を使用すると、自動データ最適化ポリシーを指定できます。ilm_compression_policy句を使用すると圧縮ポリシーを指定、またはilm_tiering_policy句を使用するとストレージ階層化ポリシーを指定できます。

ilm_compression_policy

この句を使用すると、圧縮ポリシーが指定できます。このタイプのポリシーは、指定された条件が満たされた場合、データを圧縮するようデータベースに指示します。SEGMENT、GROUPまたはROW句を使用すると、セグメント・レベル、グループ・レベルまたは行レベルの圧縮ポリシーを指定できます。

table_compression table_compression句を使用して、圧縮タイプを指定します。この句は、セグメントレベルおよびグループレベルの圧縮ポリシーに適用されます。

現在の圧縮タイプより高い圧縮タイプを指定する必要があります。圧縮タイプを、最低のものから最高のものの順に示します。

NOCOMPRESS
ROW STORE COMPRESS BASIC
ROW STORE COMPRESS ADVANCED
COLUMN STORE COMPRESS FOR QUERY LOW
COLUMN STORE COMPRESS FOR QUERY HIGH
COLUMN STORE COMPRESS FOR ARCHIVE LOW
COLUMN STORE COMPRESS FOR ARCHIVE HIGH

この句のセマンティクスの詳細は、「table_compression」を参照してください。

SEGMENT SEGMENTを指定して、セグメントレベルの圧縮ポリシーを作成します。このタイプのポリシーは、AFTER句で指定した条件が満たされた場合またはON句で指定したPL/SQLファンクションがTRUEを返す場合に表セグメントを圧縮するようデータベースに指示します。

GROUP GROUPを指定して、グループレベルの圧縮ポリシーを作成します。このタイプのポリシーは、AFTER句で指定した条件が満たされた場合またはON句で指定したPL/SQLファンクションがTRUEを返す場合に、表とその従属オブジェクト(索引やセキュア・ファイルLOBなど)を圧縮するようデータベースに指示します。

ROW ROWを使用すると、行レベルの圧縮ポリシーを作成できます。このタイプのポリシーは、指定された期間にすべての行が変更されていないデータベース・ブロックを圧縮するようデータベースに指示します。行レベルのポリシーを作成する場合、ROW STORE COMPRESS ADVANCED圧縮およびAFTER ilm_time_period OF NO MODIFICATIONを指定する必要があります。ROW STORE COMPRESS ADVANCED句のセマンティクスの詳細は、「table_compression」を参照してください。

AFTER この句を使用すると、ポリシーを有効にするために満たす必要のある条件を定義できます。条件は、ilm_time_period句で指定する時間と、次のいずれかの条件タイプで構成されます。

- OF NO ACCESS: 指定した時間にわたってtableがアクセスされないと、ポリシーが有効になります。

- OF NO MODIFICATION: 指定した時間にわたってtableが変更されないと、ポリシーが有効になります。

- OF CREATION: tableが作成されてから指定した時間が経過すると、ポリシーが有効になります。

ilm_time_period 条件を満たすべき時間を日数、月数または年数で指定します。integerに、正の整数を指定します。DAYキーワードとDAYSキーワードは、区別なしに使用できますが、意味を明確にするために用意されています。これはMONTHキーワードとMONTHSキーワード、およびYEARキーワードとYEARSキーワードの場合も同様です。

ON この句を使用すると、ブール値を返す有効なPL/SQLファンクションを指定できます。function_nameに、ファンクションの名前を指定します。このファンクションがTRUEを返すと、ポリシーが有効になります。

ilm_tiering_policy

この句を使用すると、ストレージ階層化ポリシーが指定できます。このタイプのポリシーは、特定の条件が満たされたか、またはデータ使用量が指定された制限に達したいずれかの場合に、データを指定された表領域に移行するようデータベースに指示します。SEGMENTまたはGROUP句を使用すると、セグメント・レベルまたはグループ・レベルの圧縮ポリシーを指定できます。データは、読取り/書込み表領域または読取り専用表領域に移行できます。

TIER TO tablespace この句を使用すると、データを読取り/書込みtablespaceに移行できます。

- ON function句を指定すると、functionがTRUEを返した場合、データが移行されます。この句のセマンティクスの詳細は、「ON」句を参照してください。

- ON function句を省略すると、表領域割当てのデータ使用量がTBS_PERCENT_USEDで定義された割合に達した場合、データが移行されます。データベースは、表領域割当ての空き領域の量がTBS_PERCENT_FREEで定義された割合に達するよう、十分なデータを移行するために最善を尽くします。DBMS_ILM_ADMINパッケージの定数であるTBS_PERCENT_USEDおよびTBS_PERCENT_FREEの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

TIER TO tablespace READ ONLY この句を使用して、データを読取り専用tablespaceに移行します。データを表領域に移行する際、データベースは一時的に表領域を読取り/書込みモードにしてデータを移行し、その後表領域を読取り専用モードに戻します。

- AFTER句を指定すると、指定された条件が満たされた場合、データが移行されます。この句のセマンティクスの詳細は、「AFTER」句を参照してください

- ON function句を指定すると、functionがTRUEを返した場合、データが移行されます。この句のセマンティクスの詳細は、「ON」句を参照してください。

SEGMENT | GROUP SEGMENTを指定して、セグメントレベルの記憶域階層化ポリシーを作成します。このタイプのポリシーは、表セグメントをtablespaceに移行するようデータベースに指示します。GROUPを指定して、グループレベルの記憶域階層化ポリシーを作成します。このタイプのポリシーは、表とその従属オブジェクト(索引やセキュア・ファイルLOBなど)をtablespaceに移行するようデータベースに指示します。デフォルトはSEGMENTです。

supplemental_table_logging

supplemental_table_logging句を使用すると、REDOログ・グループ、またはサプリメンタル・ログが記録されるREDOログ・グループの1つ以上の列を追加または削除できます。

- ADD句でsupplemental_log_grp_clauseを使用すると、指定したサプリメンタル・ログ・グループを作成できます。supplemental_id_key_clauseを使用すると、システム生成のログ・グループを作成できます。

- DROP句でGROUP log_group構文を使用すると、指定したサプリメンタル・ログ・グループを削除できます。supplemental_id_key_clauseを使用すると、システム生成のログ・グループを削除できます。

supplemental_log_grp_clauseおよびsupplemental_id_key_clauseは、CREATE TABLE文およびALTER TABLE文で同じセマンティクスを持ちます。これらの句の詳細は、「CREATE TABLE」の「supplemental_log_grp_clause」および「supplemental_id_key_clause」を参照してください。

関連項目:
サプリメンタルREDOログ・グループの詳細は、『Oracle Data Guard概要および管理』を参照してください。

allocate_extent_clause

allocate_extent_clauseを使用すると、表、パーティション、サブパーティション、オーバーフロー・データ・セグメント、LOBデータ・セグメントまたはLOB索引に新しいエクステントを明示的に割り当てることができます。

表のエクステントの割当ての制限事項: 一時表、レンジ・パーティション表またはコンポジット・パーティション表にエクステントを割り当てることはできません。

関連項目:
この句の詳細は、「allocate_extent_clause」および「エクステントの割当て例:」を参照してください。

deallocate_unused_clause

deallocate_unused_clauseを使用すると、表、パーティション、サブパーティション、オーバーフロー・データ・セグメント、LOBデータ・セグメントまたはLOB索引の最後にある未使用領域の割当てを明示的に解除できます。解放された領域は、表領域の他のセグメントから利用できます。

関連項目:
この句の詳細は、「deallocate_unused_clause」および「未使用領域の解放例:」を参照してください。

CACHE | NOCACHE

CACHE句およびNOCACHE句のセマンティクスは、CREATE TABLE文およびALTER TABLE文で同じです。これらの句の詳細は、「CREATE TABLE」の「CACHE | NOCACHE | CACHE READS」を参照してください。ALTER TABLE文でこれらの句をいずれも省略した場合、既存の値は変更されません。

RESULT_CACHE

RESULT_CACHE句は、CREATE TABLE文およびALTER TABLE文と同じセマンティクスを持ちます。この句の詳細は、「CREATE TABLE」の「RESULT_CACHE句」を参照してください。ALTER TABLE文でこの句を指定しない場合、既存の設定は変更されません。

upgrade_table_clause

upgrade_table_clauseが意味を持つのは、オブジェクト表や、オブジェクト列を持つリレーショナル表に対して使用する場合です。ターゲットとなる表のメタデータが、参照される型それぞれの最新バージョンに準拠するように変換されます。表がすでに有効なものである場合は、表のメタデータは変更されません。

オブジェクト表およびオブジェクト列の更新の制限事項: この句の中では、object_type_col_propertiesをcolumn_properties句として指定できません。

INCLUDING DATA INCLUDING DATAを指定すると、表のデータを型の最新バージョンの形式に変換できます。column_propertiesおよびLOB_partition_storageを使用して表を更新する間に、新しいすべての列の記憶域を定義できます。これはデフォルトです。

ALTER TYPE文のdependent_handling_clauseにCASCADE INCLUDING TABLE DATAを指定すると、型の更新時に表のデータを変換できます。この句の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。表が古いバージョンの型に基づくデータを含むかどうかを確認するには、USER_TAB_COLUMNSデータ・ディクショナリ・ビューのDATA_UPGRADED列を参照します。

NOT INCLUDING DATA NOT INCLUDING DATAを指定すると、列データは変更されません。

NOT INCLUDING DATAの制限事項: 表にOracle8リリース8.0.xのイメージ・フォーマットの列が含まれる場合、NOT INCLUDING DATAは指定できません。表がこのような列を含むかどうかを確認するには、USER_TAB_COLUMNSデータ・ディクショナリ・ビューのV80_FMT_IMAGE列を参照します。

関連項目:

- データ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

- 表が依存する型を変更する際に、依存表のデータを変換する場合の詳細は、「ALTER TYPE」を参照してください。

records_per_block_clause

records_per_block_clauseを使用すると、1ブロックに格納できるレコード数を制限するかどうかを指定できます。この句によって、この後、表に作成されるビットマップ索引はできるだけ縮小されます。

ブロック内のレコードの制限事項: record_per_block_clauseには、次の制限事項があります。

- 表にすでにビットマップ索引が定義されている場合は、MINIMIZEまたはNOMINIMIZEのいずれも指定できません。まず、ビットマップ索引を削除する必要があります。

- この句は、索引構成表またはネストした表に対して指定できません。

MINIMIZE MINIMIZEを指定すると、表の各ブロックの最大レコード数を計算し、ブロックに含まれるレコード数がその数を超えないように挿入操作を制限できます。

MINIMIZEを指定する前に、表にデータのサンプル・セットを定義しておくことをお薦めします。表の圧縮を使用している場合(「table_compression」を参照)、圧縮データのサンプル・セットは、すでに表に存在している必要があります。

MINIMIZEの制限事項: MINIMIZEは、空の表に対して指定できません。

NOMINIMIZE NOMINIMIZEを指定すると、MINIMIZE機能が無効になります。これはデフォルトです。

row_movement_clause

親表でも行の移動が無効化されている場合を除き、参照パーティション表で行の移動を無効にすることはできません。それ以外では、この句のセマンティクスは、CREATE TABLE文およびALTER TABLE文で同じです。これらの句の詳細は、「CREATE TABLE」の「row_movement_clause」を参照してください。

flashback_archive_clause

この句を指定するには、指定されたフラッシュバック・データ・アーカイブに対するFLASHBACK ARCHIVEオブジェクト権限が必要です。この句を使用すると、表の履歴追跡を有効または無効にできます。

- 表の追跡を有効にするには、FLASHBACK ARCHIVEを指定します。flashback_archiveを指定すると、この表に特定のフラッシュバック・データ・アーカイブを指定できます。指定するフラッシュバック・データ・アーカイブは、すでに存在している必要があります。
アーカイブ名を指定しない場合、データベースは、システムに指定されたデフォルトのフラッシュバック・データ・アーカイブを使用します。システムにデフォルトのフラッシュバック・データ・アーカイブが指定されていない場合は、flashback_archiveを指定する必要があります。

FLASHBACK ARCHIVEを指定して、この表のフラッシュバック・データ・アーカイブを変更することはできません。かわりに、まずALTER TABLE文にNO FLASHBACK ARCHIVE句を付けて実行し、次に、ALTER TABLE文にFLASHBACK ARCHIVE句を付けて実行します。

- 表の追跡を無効にするには、NO FLASHBACK ARCHIVEを指定します。

関連項目:
追跡が有効な表の作成の詳細は、「CREATE TABLE」の「flashback_archive_clause」を参照してください。デフォルトのフラッシュバック・データ・アーカイブの作成の詳細は、「CREATE FLASHBACK ARCHIVE」を参照してください。

RENAME TO

RENAME句を使用すると、表の名前をnew_table_nameに変更できます。

この句を使用した場合、依存するすべてのマテリアライズド・ビューは無効になります。マテリアライズド・ビューの詳細は、「CREATE MATERIALIZED VIEW」および『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

表にドメイン索引が定義されている場合、ODCIIndexAlter()メソッドがRENAMEオプション付きで起動されます。この操作によって、索引タイプ・メタデータと実表の間の対応が確立されます。

shrink_clause

shrink_clauseを使用すると、表、索引構成表またはそのオーバーフロー・セグメント、索引、パーティション、サブパーティション、LOBセグメント、マテリアライズド・ビューまたはマテリアライズド・ビュー・ログの領域を手動で縮小できます。この句は、自動セグメント管理を使用した表領域のセグメントに対してのみ有効です。デフォルトでは、セグメントが縮小されて最高水位標が調整され、再生領域がすぐに解放されます。

セグメントの縮小では、行移動が必要です。したがって、この句を指定する前に、縮小するオブジェクトの行移動を使用可能にする必要があります。また、アプリケーションでROWIDに基づいたトリガーを使用している場合、この句を発行する前にこのトリガーを使用禁止にする必要があります。

注意:
shrink_clauseを指定する前に、索引構成表に対して行の移動を有効にしないでください。索引構成表のROWIDは、その主キーであり、変更できません。このため、そのような表に対して行の移動は関係なく、有効でもありません。

COMPACT COMPACTを指定すると、セグメント領域のデフラグのみが行われ、後で領域を解放できるように表の行が縮小されます。最高水位標の再調整および領域の解放は、すぐに行われません。操作を完了するには、後で別のALTER TABLE ... SHRINK SPACE文を発行する必要があります。この句は、1回の長い手順のかわりに2回の短い手順で縮小操作を実行する場合に便利です。

索引や索引構成表の場合は、ALTER [INDEX | TABLE] ... SHRINK SPACE COMPACTを指定することはALTER [INDEX | TABLE ... COALESCEを指定することと同じです。shrink_clauseはカスケード実行できます(次のCASCADE句を参照)。また結合操作の場合よりもセグメントを高密度に圧縮できるため、パフォーマンスが向上します。ただし、未使用領域を解放しない場合は、適切なCOALESCE句を使用します。

CASCADE CASCADEを指定すると、tableのすべての依存オブジェクト(索引構成表の2次索引を含む)に対して同じ操作を実行できます。

shrink_clauseの制限事項: shrink_clauseには、次の制限事項があります。

- 同じALTER TABLE文で、この句と別の句を組み合せて使用することはできません。
この句は、クラスタ、クラスタ化表またはLONG列を含むすべてのオブジェクトには指定できません。

- セグメントの縮小は、ファンクション索引、ドメイン索引またはビットマップ結合索引を含む表ではサポートされません。

- CASCADEを指定しても、この句では索引構成表のマッピング表を縮小できません。

- この句は、高度な行圧縮が有効な(ROW STORE COMPRESS ADVANCED)表に対して指定できます。その他の種類の表圧縮が有効な表に対しては、この句を指定できません。

- ON COMMITマテリアライズド・ビューのマスター表は縮小できません。ROWIDマテリアライズド・ビューは、縮小操作の実行後に再構築する必要があります。

READ ONLY | READ WRITE

READ ONLYを指定すると、表を読取り専用モードに設定できます。表がREAD ONLYモードの場合は、表に影響するDML文またはSELECT ... FOR UPDATE文は発行できません。表データを変更しないDDL文は発行できます。表がREAD ONLYモードの場合は、表に関連する索引の操作は可能です。

READ WRITEを指定すると、読取り専用表を読取り/書込みモードに戻すことができます。

REKEY encryption_spec

REKEY句を使用すると、新しい暗号化キーの生成または異なるアルゴリズム間の切替えができます。この操作は、表内のLOB列を含むすべての暗号化された列が再度暗号化された後にのみ戻されます。

[NO] ROW ARCHIVAL

この句を指定すると、tableの行アーカイブを有効化または無効化できます。

- tableの行アーカイブを有効にするには、ROW ARCHIVALを指定します。非表示列ORA_ARCHIVE_STATEが表に作成されます。テーブルにデータがすでに移入されている場合、表内の既存の各行でORA_ARCHIVE_STATEの値が0に設定されます。その後、UPDATE文を使用して、アーカイブする行のORA_ARCHIVE_STATEの値を1に設定できます。

- tableの行アーカイブを無効にするには、NO ROW ARCHIVALを指定します。非表示列ORA_ARCHIVE_STATEが表から削除されます。

[NO] ROW ARCHIVALの制限事項: この句には、次の制限事項があります。

- ROW ARCHIVAL句は、ORA_ARCHIVE_STATEという名前の列がすでに含まれている表に対しては指定できません。

- NO ROW ARCHIVAL句は、SYSが所有する表に対しては指定できません。

関連項目:

- この句のセマンティクスの詳細は、「CREATE TABLE」の「ROW ARCHIVAL」句を参照してください。

- インデータベース・アーカイブの詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

attribute_clustering_clause

ADD attribute_clustering_clauseを使用して、属性クラスタリングの表を有効化します。attribute_clustering_clauseは、ALTER TABLEおよびCREATE TABLEと同じセマンティクスを持ちます。CREATE TABLEのドキュメントのattribute_clustering_clauseを参照してください。

MODIFY CLUSTERING

この句を使用して、ダイレクト・パス・インサート操作またはデータ移動操作中の表の属性クラスタリングを許可または禁止します。表の属性クラスタリングを有効化する必要があります。clustering_when句およびzonemap_clauseは、ALTER TABLEおよびCREATE TABLEと同じセマンティクスを持ちます。CREATE TABLEのドキュメントのclustering_when句およびzonemap_clauseを参照してください。

DROP CLUSTERING

この句を使用して、属性クラスタリングの表を無効化します。

CREATE TABLEまたはALTER TABLEのWITH MATERIALIZED ZONEMAP句を使用して表のゾーン・マップが作成された場合、ゾーン・マップが削除されます。CREATE MATERIALIZED ZONEMAP文を使用して表のゾーン・マップが作成された場合、ゾーン・マップが削除されません。

alter_iot_clauses

index_org_table_clause

この句を使用すると、既存の索引構成表の特性の一部を変更できます。索引構成表は主キーでデータをソートするため、主キーベースのアクセスおよび操作に最適です。CREATE TABLEのコンテキストで、index_org_table_clauseを参照してください。

関連項目:
「索引構成表の変更例:」

prefix_compression

prefix_compression句を使用して、表の接頭辞圧縮を有効化します。COMPRESSを指定すると、ブロックを再利用するために、索引構成表の主キー索引ブロックを空きブロックに結合できます(可能な場合)。この句はparallel_clauseとあわせて指定できます。NOCOMPRESSを指定して、表の接頭辞圧縮を無効化します。

PCTTHRESHOLD integer CREATE TABLEの「PCTTHRESHOLD integer」を参照してください。

INCLUDING column_name CREATE TABLEの「INCLUDING column_name」を参照してください。

overflow_attributes

overflow_attributesを使用すると、索引構成表に対して、変更するオーバーフロー・データ・セグメントの物理記憶域属性およびロギング属性を指定できます。この句に指定するパラメータの値は、オーバーフロー・データ・セグメントにのみ適用されます。

関連項目:
「CREATE TABLE」

add_overflow_clause

add_overflow_clauseを使用すると、指定した索引構成表にオーバーフロー・データ・セグメントを追加できます。また、この句を使用すると、エクステントを明示的に割り当てたり、既存のオーバーフロー・セグメントから未使用領域の割当てを解除することができます。

STORE IN tablespace句を使用すると、オーバーフロー・セグメント全体に対する表領域の記憶域を指定できます。PARTITION句を使用すると、パーティションによるセグメントに対する表領域の記憶域を指定できます。

パーティション化された索引構成表の場合、次の点に注意してください。

- PARTITIONを指定しない場合、それぞれのパーティションに自動的にオーバーフロー・セグメントが割り当てられます。これらのセグメントの物理属性は表のレベルから継承されます。

- 1つ以上のパーティションに別々の物理属性を指定する場合は、その属性を表のすべてのパーティションに対して指定する必要があります。パーティションの名前を指定する必要はありませんが、パーティションが作成された順番で属性を指定する必要があります。

パーティションの順番を確認するには、USER_IND_PARTITIONSビューのPARTITION_NAMEおよびPARTITION_POSITION列を問い合せます。

TABLESPACEを指定していないパーティションがある場合、表に対して指定された表領域が使用されます。表レベルでTABLESPACEを指定していない場合は、そのパーティションの主キー索引セグメントの表領域が使用されます。

オーバーフロー属性の制限事項: segment_attributes_clauseでは、次のことに注意します。

- physical_attributes_clauseのOPTIMALパラメータを指定できません。

- この句を使用して、オーバーフロー・セグメントの表領域の記憶域を指定できません。非パーティション表の場合、ALTER TABLE ... MOVE ... OVERFLOWを使用して、セグメントを異なる表領域に移動します。パーティション表の場合、ALTER TABLE ... MODIFY DEFAULT ATTRIBUTES ... OVERFLOWを使用して、オーバーフロー・セグメントのデフォルト表領域を変更します。

tableがローカル管理表領域にある場合、表領域のセグメント属性の中にはデータベースによって自動的に管理されるものがあるため、制限事項が追加されます。

関連項目:
add_overflow_clause句の詳細は、「allocate_extent_clause」および「deallocate_unused_clause」を参照してください。

alter_overflow_clause

alter_overflow_clauseを使用すると、既存の索引構成表のオーバーフロー・セグメントの定義を変更できます。

add_overflow_clauseの制限事項は、alter_overflow_clauseにも適用されます。

注意:
索引構成表に列を追加した場合、各列の最大サイズが評価され、行の最大値が計算されます。オーバーフロー・セグメントが必要で、OVERFLOWを指定していない場合は、エラーが発生しALTER TABLE文は実行されません。このチェック機能によって、索引構成表に対する後続のDML操作が、オーバーフロー・セグメントがないために失敗することを回避できます。

alter_mapping_table_clauses

alter_mapping_table_clausesは、tableが索引構成されており、マッピング表を持つ場合にのみ有効です。

allocate_extent_clause allocate_extent_clauseを使用すると、新しいエクステントを索引構成表のマッピング表の終わりに割り当てることができます。この句の詳細は、「allocate_extent_clause」を参照してください。

deallocate_unused_clause deallocate_unused_clauseを指定すると、索引構成表のマッピング表の終わりにある未使用領域の割当てを解除できます。この句の詳細は、「deallocate_unused_clause」を参照してください。

マッピング表またはそのパーティションに関する他のすべての属性は、自動的に管理されます。

COALESCE句

COALESCEを指定すると、ブロックを再利用するために、索引構成表の管理に使用される索引の索引ブロックの内容を空きブロックにマージできます(可能な場合)。この句とshrink_clauseの関係については、「shrink_clause」を参照してください。

alter_XMLSchema_clause

この句は、BINARY XML記憶域のXMLType表を変更する場合にのみ、alter_table_propertiesの一部として有効です。ALLOWおよびDISALLOW句の詳細は、「CREATE TABLE」の「XMLSchema_spec」を参照してください。

column_clauses

これらの句を指定すると、列を追加、削除または変更できます。

add_column_clause

add_column_clauseを使用すると、表に列を追加できます。

関連項目:
この句のキーワードとパラメータの詳細は、「CREATE TABLE」および「表の列の追加例:」を参照してください。

column_definition

既存の表に列を追加するときのcolumn_definitionの要素の動作は、この項で特に述べられていないかぎり、新しい表の作成時に列を追加するときの動作と同じです。詳細は、「column_definition」を参照してください。

column_definitionの制限事項 SORTパラメータは、新しい表を作成する場合にのみ有効です。ALTER TABLE ... ADD文のcolumn_definitionでは、SORTを指定できません。

列を追加するときに、DEFAULT句を指定していないと、新しい列の各行の初期値はNULLになります。

パーティション化された索引構成表の各パーティションには、オーバーフロー・データ・セグメントを追加できます。

非パーティションおよびパーティション表にLOB列を追加できます。表、およびパーティションまたはサブパーティションのレベルでLOB記憶域を指定できます。

SELECT *構文を使用して、表からすべての列を選択するように指定した問合せを使用してビューを作成した場合、tableに列を追加しても、新しい列がビューに自動的に追加されることはありません。ビューに新しい列を追加する場合、CREATE VIEW文にOR REPLACE句を指定してビューを再作成してください。詳細は、「CREATE VIEW」を参照してください。

列の追加の制限事項: 列の追加には、次の制限事項があります。

- LOB列またはINVISIBLEの列は、クラスタ表には追加できません。

- LOB列をハッシュ・パーティション表に追加する場合、新しいパーティションに対して指定できる属性は、TABLESPACEのみです。

- tableに行がある場合、DEFAULT句を指定しないかぎり、NOT NULL制約のある列を追加できません。

- 索引構成表にこの句を指定した場合、同じ文では他の句を指定できません。

DEFAULT

DEFAULT句を使用すると、新しい列にデフォルト値を指定したり、既存の列に新しいデフォルト値を指定することができます。後続のINSERT文で列に値を指定しない場合、この値が自動的に割り当てられます。

この式のデータ型は、列に指定したデータ型と一致している必要があります。列には、この式を保持できる大きさが必要です。

DEFAULT式には、リテラル引数、列の参照またはネストしたファンクションの起動を戻さない、任意のSQLファンクションを含めることができます。

このDEFAULT式には、順序疑似列のCURRVALとNEXTVALを含めることができます。ただし、順序が存在していて、その順序にアクセスするために必要な権限を所持している必要があります。それ以降に、DEFAULT式を使用して挿入を実行するユーザーには、表に対するINSERT権限と、順序に対するSELECT権限が必要になります。その後で順序が削除されると、それ以降のDEFAULT式を使用する挿入文でエラーが発生します。新しい列を表に追加すると、既存の各行に割り当てられるNEXTVALの順序は、非決定的になります。順序の所有者を指定して完全修飾(例: SCOTT.SEQ1)していない場合、Oracle Databaseは、ALTER TABLE文を発行したユーザーを順序のデフォルトの所有者にします。たとえば、ユーザーMARYがSCOTT.TABLEに列を追加して、SEQ2のように完全修飾していない順序を参照すると、その列は順序MARY.SEQ2を使用するようになります。順序に対するシノニムは完全に名前解決され、完全修飾された順序としてデータ・ディクショナリに格納されます。これは、パブリック・シノニムとプライベート・シノニムに当てはまります。たとえば、ユーザーBETHが、パブリック・シノニムまたはプライベート・シノニムのSYN1を参照する列を追加したときに、そのシノニムがPETER.SEQ7を参照していると、その列はデフォルトとしてPETER.SEQ7を格納するようになります。

列にDEFAULT句を指定すると、デフォルト値はメタデータとして格納されますが、列自体にはデータは移入されません。ただし、デフォルト値が結果セットに戻されるように、新しい列を指定する後続の問合せは再書込みされます。この最適化された動作には、次の制限事項があります。

- 表にLOB列を持つことはできません。対象となる表は、索引構成化したり、一時表またはクラスタ化された表にすることはできません。また、キュー表、オブジェクト表またはマテリアライズド・ビューのコンテナ表にすることもできません。

- 表が仮想プライベート・データベース(VPD)ポリシーを持つ場合、ALTER TABLE ... ADD文を発行するユーザーにEXEMPT ACCESS POLICYシステム権限がないかぎり、最適化された動作は有効ではありません。

- 追加する列は暗号化できず、オブジェクト列、ネストした表の列またはLOB列にすることはできません。

- このDEFAULT式には、順序疑似列のCURRVALまたはNEXTVALを含めることができません。

前述の制限事項のために最適な動作が実行できない場合、Oracle Databaseは、新しく作成した列の各行をデフォルト値で更新します。この場合、データベースは表に定義されたUPDATEトリガーを起動しません。

列のデフォルト値の制限事項: 列のデフォルト値には、次の制限事項があります。

- DEFAULT式に、PL/SQLファンクション、他の列、疑似列LEVEL、PRIORおよびROWNUMへの参照または完全に指定されていない日付定数は指定できません。

- 式には、スカラー副問合せ式を除くすべての書式を使用できます。

ON NULL ON NULL句を指定すると、Oracle Databaseは、それ以降のINSERT文でNULLに評価される値を割り当てようとするときに、DEFAULTの列値を割り当てるようになります。

ON NULLを指定すると、NOT NULL制約と、NOT DEFERRABLE制約状態が暗黙的に指定されます。NOT NULLおよびNOT DEFERRABLEと競合する表内制約を指定すると、エラーが発生します。

関連項目:
「デフォルト列値の指定例:」

identity_clause

identity_clauseはID列を追加する場合、ID列を作成する場合と同じセマンティクスを持ちます。詳細は、CREATE TABLEの「identity_clause」を参照してください。

新しいID列を追加すると、既存のすべての行は順序ジェネレータを使用して更新されます。既存の各行に割り当てられる値の順序は、非決定的になります。

identity_options

identity_options句を使用すると、順序ジェネレータを構成できます。identity_options句のパラメータは、CREATE SEQUENCE文と同じです。これらのパラメータと特性の詳細は、「CREATE SEQUENCE」を参照してください。identity_optionsに固有のSTART WITH LIMIT VALUEは例外であり、ALTER TABLE MODIFYでのみ使用できます。詳細は、「identity_options」を参照してください。

inline_constraint

inline_constraintを使用すると、新しい列に制約を追加できます。

inline_ref_constraint

inline_ref_constraintを使用すると、新しいREF型の列を定義できます。制約の型の構文や制限などの詳細は、「constraint」を参照してください。

virtual_column_definition

virtual_column_definitionは列を追加する場合、列を作成する場合と同じセマンティクスを持ちます。

関連項目:
詳細は、「CREATE TABLE」の「virtual_column_definition」および「仮想表の列の追加例:」を参照してください。

仮想列の追加の制限事項: 仮想列のSQL式にOracle Data Redactionポリシーが定義されている列が関与するときには、仮想列は追加できません。

column_properties

column_propertiesの句を使用すると、オブジェクト型、ネストした表、VARRAYまたはLOB列の記憶特性を指定できます。

object_type_col_properties この句は新しいオブジェクト型列や属性を追加する場合にのみ有効です。modify_column_clausesを使用すると、既存のオブジェクト型列のプロパティを変更できます。この句のセマンティクスは、特に指定がないかぎり、CREATE TABLEと同じです。

object_type_col_properties句を使用すると、新しいオブジェクト列、オブジェクト属性、コレクション列およびコレクション属性の要素に対する記憶特性を指定できます。

この句の詳細は、「CREATE TABLE」の「object_type_col_properties」を参照してください。

nested_table_col_properties nested_table_col_properties句を使用すると、ネストした表に対して別の記憶特性を指定し、そのネストした表を索引構成表として定義できます。ネストした表の型を持つ列または列属性付きで表を作成する場合は、この句を挿入する必要があります。(この句の中で、親オブジェクト表に対する場合と同じ働きをする句は、ここでは繰り返されません。これらの句の詳細は、「CREATE TABLE」の句「nested_table_col_properties」を参照してください。)

- nested_itemには、型がネストした表である列(または、ネストした表のオブジェクト型の最上位の属性)の名前を指定します。
ネストした表がマルチレベル・コレクションで、内部のネストした表には名前が割り当てられていない場合、nested_item名のかわりにCOLUMN_VALUEを指定します。

- storage_tableには、nested_itemの行を含む表の名前を指定します。記憶表は、親表と同じスキーマ、および親表と同じ表領域内に作成されます。

ネストした表の列のプロパティの制限事項: ネストした表の列のプロパティには、次の制限事項があります。

- parallel_clauseは指定できません。

- physical_properties句の一部としてCLUSTERを指定できません。

関連項目:
「ネストした表の例:」

varray_col_properties varray_col_propertiesを使用すると、VARRAY型のデータが格納されているLOBに対して、別の記憶特性を指定できます。この句を指定する場合、表内に格納できるほど小さい値でも、VARRAYは必ずLOBに格納されます。varray_itemがマルチレベル・コレクションの場合、varray_item内にネストされたすべてのコレクション項目は、常にvarray_itemと同じLOBに格納されます。

VARRAY列のプロパティの制限事項: VARRAY列に対し、LOB_parametersの一部としてTABLESPACEを指定することはできません。VARRAYに対するLOB表領域のデフォルトは、表を含む表領域になります。

out_of_line_part_storage

この句を使用すると、新しく追加した列に対し、パーティション表内のパーティションまたはサブパーティションごとに記憶域属性を指定できます。この句で指定しないパーティションまたはサブパーティションについては、新しい列の記憶域属性は、表レベルのnested_table_col_propertiesで指定したものと同じになります。

LOB_storage_clause

LOB_storage_clauseを使用すると、新しく追加したLOB列、LOBパーティション、LOBサブパーティションまたはLONG列からLOB列への変換時のLOB記憶特性を指定できます。この句では、既存のLOBを変更できません。かわりに、modify_LOB_storage_clauseを使用する必要があります。

この項で特に指定がない場合は、LOB_storage_clauseおよびmodify_LOB_storage_clause内のすべてのLOBパラメータは、ALTER TABLE文で、CREATE TABLE文と同じセマンティクスを持ちます。この句の詳細は、「CREATE TABLE」の「LOB_storage_clause」を参照してください。

LOBパラメータの制限事項: ハッシュ・パーティションまたはハッシュ・サブパーティションに指定できるLOB_parametersのパラメータは、TABLESPACEのみです。

CACHE READS句 新しいLOB列を追加するときに、ロギング属性をCACHE READSを使用して指定できます(作成時にLOB列を定義するときと同様)。この句の詳細は、CREATE TABLEの句「CACHE READS」を参照してください。

ENABLE | DISABLE STORAGE IN ROW STORAGE IN ROWは、一度設定すると変更できません。したがって、この句はmodify_col_properties句の一部には指定できません。ただし、新しい列を追加するとき(add_column_clause )、または表を移動するとき(move_table_clause)に、この設定を変更できます。この句の詳細は、「CREATE TABLE」の句「ENABLE STORAGE IN ROW」を参照してください。

CHUNK integer modify_col_properties句を使用して、設定後のCHUNKの値を変更することはできません。作成後の列に異なるCHUNK値が必要な場合は、ALTER TABLE … MOVEを使用します。詳細は、「CREATE TABLE」の句「CHUNK integer」を参照してください。

RETENTION BasicFiles LOBについては、データベースが自動UNDOモードで稼働している場合、旧バージョンのLOBを保持するには、PCTVERSIONではなくRETENTIONを指定します。この句によって、PCTVERSIONのこれまでの設定が上書きされます。このパラメータの詳細は、「CREATE TABLE」の句「LOB_retention_clause」を参照してください。

FREEPOOLS integer データベースが自動UNDOモードで稼働している場合、BasicFiles LOBに対してこの句を使用するとLOBの空きリスト・グループ数を指定できます。この句によって、FREELIST GROUPSのこれまでの設定が上書きされます。このパラメータの詳細は、「CREATE TABLE」の句「FREEPOOLS integer」を参照してください。SecureFiles LOBの場合は、データベースはこのパラメータを無視します。

LOB_partition_storage

1つのALTER TABLE文で指定できるLOB_partition_storage句のリストは1つのみであり、すべてのLOB_storage_clausesおよびvarray_col_properties句はLOB_partition_storage句のリストの前に指定する必要があります。この句の詳細および制限事項については、CREATE TABLEの句「LOB_partition_storage」を参照してください。

XMLType_column_properties この句の詳細は、「CREATE TABLE」の句「XMLType_column_properties」を参照してください。

関連項目:

- LOB_segnameおよびLOB_parameters句の詳細は、「LOB_storage_clause」を参照してください。

- オブジェクト・リレーショナル表におけるXMLType列の例は、「XMLType列の例:」を参照してください。XMLスキーマの作成例は、「SQL文でのXMLの使用方法」を参照してください。

- XMLType列と表およびXMLスキーマの作成の詳細は、『Oracle XML DB開発者ガイド』を参照してください。

modify_column_clauses

modify_column_clausesを使用すると、既存の列のプロパティ、既存の列の可視性、または既存のオブジェクト型列の代替性を変更できます。

関連項目:
「表の列の変更例:」

modify_col_properties

この句を使用すると、列のプロパティを変更できます。この句で省略した列定義のオプション部分(データ型、デフォルト値、制約)は、変更されません。

datatype 列のすべての行がNULLの場合、列のデータ型を変更できます。ただし、マテリアライズド・ビューのコンテナ表にある列のデータ型を変更した場合、それに対応するマテリアライズド・ビューが無効になります。

参照整合性制約の外部キーの一部として、文で列が指定されている場合のみ、データ型を省略できます。参照整合性制約の参照キーに対応する列のデータ型が、その列に自動的に割り当てられます。

すべての行にNULL値が存在するどうかにかかわらず、文字型またはRAW型の列のサイズ、または数値型の列の精度は、いつでも大きくすることができます。変更対象のデータに変更の必要がない場合は、列のデータ型のサイズを削減できます。データベースは、既存のデータをスキャンして、新しい長さ制限を超過するデータが存在する場合はエラーを返します。

VARCHAR2、NVARCHAR2、またはRAWの列のサイズが4,000バイトを超えるように拡大すると、Oracle Databaseはインプレースで長さの拡張を実行し、表内記憶域を外部LOB記憶域に移行しなくなります。これにより、大きい表の連続移行が可能になり、特に移行後に拡張データ型を活用できます。ただし、列の表内記憶域は、CREATE TABLE ... AS SELECT、エクスポート、インポート、オンライン再定義などの表の再編成操作時には保存されません。拡張データ型列の新しい表外記憶域に移行する場合は、前述の方法のいずれかを使用して表を再作成する必要があります。列の表内記憶域は、表またはパーティションの移動操作時(ALTER TABLE MOVE [[SUB]PARTITION]など)およびパーティションのメンテナンス操作時(ALTER TABLE SPLIT [SUB]PARTITION、ALTER TABLE MERGE [SUB]PARTITIONS、ALTER TABLE COALESCE [SUB]PARTITIONSなど)に保存されます。

注意:
VARCHAR2、NVARCHAR2、またはRAWの列のサイズは、次の理由から、4,000バイトを超える過度の拡大は避けるようにしてください。

- 行の変更が発生する場合があります。

- 表内に格納されているデータは、列が選択されているかどうかにかかわらず、全体を読み込むことが必要になります。そのため、表内に格納される拡張データ型の列は、パフォーマンスに悪影響を与えることがあります。

変更対象のデータに変更の必要がない場合は、列のデータ型のサイズを削減できます。データベースは、既存のデータをスキャンして、新しい長さ制限を超過するデータが存在する場合はエラーを返します。

DATE列をTIMESTAMPまたはTIMESTAMP WITH LOCAL TIME ZONE列に、TIMESTAMPまたはTIMESTAMP WITH LOCAL TIME ZONE列をDATE列に変更できます。次のルールが適用されます。

- TIMESTAMPまたはTIMESTAMP WITH LOCAL TIME ZONE列をDATE列に変更する場合、秒に0以外の小数部が含まれる各列の値が最も近い秒に丸めて更新されます。そのような値の更新時に60以上の分フィールドがある場合(夏時間の規則が切り換えられた場合に境界で発生)、分フィールドから60を引いてフィールドが更新されます。

- TIMESTAMP WITH LOCAL TIME ZONE列をDATE列に変更しても、列の値はデータベースのタイムゾーンで示したローカル時間を示します。ただし、データベースのタイムゾーンは値とは関連付けされなくなります。SQL*Plusで問い合せた場合、値がセッションのタイムゾーンに自動で調整されることはなくなります。列の値を処理するアプリケーションが特定のタイムゾーンで値を解析することになります。

表が空の場合、日時列または期間列の先行フィールドまたは秒の小数部を増やすことも減らすこともできます。表が空でない場合、日時列または期間列の先行フィールドまたは秒の小数部を増やすことのみできます。

TO_LOBファンクションを使用すると、LONG列をCLOB列またはNCLOB列に、LONG RAW列をBLOB列に変更できます。ただし、PL/SQLパッケージ内からはTO_LOBファンクションを使用できません。かわりに、TO_CLOBファンクションまたはTO_BLOBファンクションを使用してください。

- 変更されたLOB列は、元のLONG列で定義されたすべての制約およびトリガーを継承します。いずれかの制約を変更する場合、後続のALTER TABLE文で変更する必要があります。

- ドメイン索引がLONG列で定義されている場合、列をLOBに変更する前に削除する必要があります。

- 変更後、表のすべての列にある他のすべての索引を再構築する必要があります。

TO_CLOBファンクションを使用すると、NCLOB列をCLOB列に変換できます。

関連項目:

- LONGからLOBへの移行の詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。

- 索引の削除および再構築の詳細は、「ALTER INDEX」を参照してください。

CHARおよびVARCHAR2列の場合、CHAR(元々バイトで指定されていた列に対するキャラクタ・セマンティクス)またはBYTE(元々文字で指定されていた列に対するバイト・セマンティクス)を指定すると、長さセマンティクスを変更できます。既存の列の長さセマンティクスを確認するには、ALL_TAB_COLUMNS、USER_TAB_COLUMNSまたはDBA_TAB_COLUMNSデータ・ディクショナリ・ビューのCHAR_USED列を問い合せます。

関連項目:

- バイト・セマンティクスおよびキャラクタ・セマンティクスの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

- データ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

identity_clause identity_clauseを使用すると、ID列のプロパティを変更できます。この句は、ID列ではない列に対しては指定できません。ALWAYSまたはBY DEFAULTを省略すると、現在の生成タイプが保持されます。ALWAYSおよびBY DEFAULTの詳細は、CREATE TABLEの「identity_clause」を参照してください。

identity_options identity_options句を使用すると、順序ジェネレータを構成できます。identity_options句のパラメータは、CREATE SEQUENCE文と同じです。これらのパラメータと特性の詳細は、「CREATE SEQUENCE」を参照してください。例外は次のとおりです。

- identity_optionsに固有のSTART WITH LIMIT VALUEは、ALTER TABLE MODIFYでのみ使用できます。START WITH LIMIT VALUEを指定すると、Oracle Databaseは表をロックして、表内で最大のID列の値(増加する順序の場合)、または最小のID列の値(減少する順序の場合)を検出して、その値を順序ジェネレータの最高水位標として割り当てます。順序ジェネレータが返す次の値は、増加する順序の場合は最高水位標 + INCREMENT BY integerになり、減少する順序の場合は最高水位標 - INCREMENT BY integerになります。

- START WITHの値を変更すると、この句内のその他すべてのパラメータにデフォルトの値が使用されるようになります。ただし、別の値が指定されている場合を除きます。

DROP IDENTITY この句を使用すると、列からIDプロパティを削除できます。このプロパティには、順序ジェネレータや、NOT NULL制約、NOT DEFERRABLE制約などが含まれます。既存の行のID列の値には影響しません。

ENCRYPT encryption_spec | DECRYPT この句は、暗号化された列の復号化や暗号化されていない列の暗号化を行うとき、および暗号化された列の整合性アルゴリズムやSALTオプションを変更するときに使用します。

encryption_specを指定して既存の列を暗号化する場合は、同じ表内で暗号化されている他の列の暗号化仕様と一致させることが必要です。encryption_specの詳細や制限事項は、「CREATE TABLE」の句「encryption_spec」を参照してください。

マテリアライズド・ビュー・ログが表に対して定義されている場合は、この句内で暗号化または復号化される列が、マテリアライズド・ビュー・ログ内でも暗号化または復号化されます。

ENCRYPT encryption_spec | DECRYPTの制限事項: この句には、次の制限事項があります。

- 新規または既存の列がLOB列の場合は、列をSecureFiles LOBとして格納する必要があり、SALTオプションは指定できません。

- 暗号化または復号化する列に対して、UPDATE文のファイングレイン監査ポリシーが有効化されていてはなりません。ただし、ファイングレイン監査ポリシーをいったん無効にしてその列を暗号化または復号化し、その後でファイングレイン監査ポリシーを有効にすることは可能です。

関連項目:
「データの暗号化例:」

inline_constraint この句を使用すると、変更する列に対する制約を追加できます。既存の列に設定されている既存の制約の状態を変更する場合は、constraint_clausesを使用します。

LOB_storage_clause LOB_storage_clauseは、LONG列をLOB列に変換する場合のみ、modify_col_properties内で使用できます。この場合のみ、LOB_storage_clauseを使用して列に対するLOB記憶域を指定できます。ただし、指定できるのは、1つの列(LOB_item)のみです。LOB_storage_clauseで省略したすべての属性には、デフォルトのLOB記憶域属性が適用されます。

alter_XMLSchema_clause この句は、BINARY XML記憶域のXMLType表のmodify_col_properties内でのみ有効です。ALLOWおよびDISALLOW句の詳細は、「CREATE TABLE」の「XMLSchema_spec」を参照してください。

列のプロパティの変更の制限事項: 列のプロパティの変更には、次の制限事項があります。

- LOB列のデータ型は変更できません。

- 列にドメイン索引が定義されている場合は、表の列を変更できません。最初にドメイン索引を削除してから列を変更する必要があります。

- 表または索引のパーティション化キーまたはサブパーティション化キーの一部である列の長さまたはデータ型は、変更できません。

- CHAR型の列をVARCHAR2(またはVARCHAR)型に変更またはVARCHAR2(またはVARCHAR)型の列をCHAR型に変更できるのは、BLANK_TRIMMING初期化パラメータがTRUEに設定され、列のサイズが同じまたは増加する場合のみです。BLANK_TRIMMING初期化パラメータがTRUEに設定されている場合、列のサイズを切捨て後のデータの最大値以上の値まで減らすこともできます。

- 表がクラスタの一部である場合は、LONGまたはLONG RAW列をLOBに変更できません。LONGまたはLONG RAW列をLOBに変更する場合は、同じALTER TABLE文では、DEFAULT句およびLOB_storage_clause以外は指定できません。

- LONGまたはLONG RAW列をLOBに変更する場合のみ、LOB_storage_clauseをmodify_col_propertiesの一部として指定できます。

- 索引構成表に対してROWIDデータ型の列は指定できませんが、UROWID型の列は指定できます。

- 列のデータ型をREFに変更できません。

関連項目:
マテリアライズド・ビューの再検証の詳細は、「ALTER MATERIALIZED VIEW」を参照してください。

modify_virtcol_properties

この句は、エディション化されたPL/SQLファンクションを参照する仮想列に対してのみ有効です。この句を使用すると、仮想列の評価エディションまたは使用不可エディションを変更できます。仮想列を変更する場合のevaluation_edition_clauseおよびunusable_editions_clauseのセマンティクスは、仮想列を作成する場合と同じです。詳細は、「CREATE TABLE」のevaluation_edition_clauseおよびunusable_editions_clauseを参照してください。

仮想列の変更の制限事項

索引が仮想列で定義されている場合に、その評価エディションまたは使用禁止エディションを変更すると、データベースによってその仮想列のすべての索引が無効化されます。仮想列の他のプロパティを変更しようとすると、エラーが発生します。

modify_col_visibility

この句を使用すると、columnの可視性を変更できます。詳細は、CREATE TABLEの「VISIBLE | INVISIBLE」を参照してください。

列の可視性の変更の制限事項 SYSが所有する表でVISIBLE列をINVISIBLEに変更することはできません。

modify_col_substitutable

この句を使用すると、既存のオブジェクト型列の代替性を設定または変更できます。

FORCEキーワードを指定すると、型ID情報またはサブタイプ属性に関するデータが含まれる非表示列が削除されます。オブジェクト型の列または属性がFINALでない場合、FORCEを指定する必要があります。

列の代替性の変更の制限事項: 列の代替性の変更には、次の制限事項があります。

- ALTER TABLE文には、この句を一度のみ指定できます。

- オブジェクト表自体の代替性が設定されている場合、オブジェクト表の列の代替性は変更できません。

- この句は、列がIS OF TYPE構文を使用して作成または追加されたものである場合は指定できません(この構文を使用すると、オブジェクト列や属性で使用できるサブタイプの範囲が、特定のサブタイプに限定されます)。IS OF TYPE構文の詳細は、CREATE TABLEの「substitutable_column_clause」を参照してください。

- 列の属性にネストしたオブジェクト型(FINAL以外)が含まれる場合、FORCEを指定しても、VARRAY列をNOT SUBSTITUTABLEに変更できません。

drop_column_clause

drop_column_clauseを使用すると、不要になった列を削除したり、将来、システム・リソースへの要求が少なくなったときに削除するように列にマークを付けることによって、データベースの領域を解放できます。

- ネストした表の列を削除すると、その記憶表も削除されます。

- LOB列を削除すると、LOBデータおよび対応するLOB索引セグメントも削除されます。

- BFILE列を削除すると、その列に格納されたロケータのみ削除され、ロケータによって参照されるファイルは削除されません。

- INCLUDING列として定義した列を削除(または未使用とマーク)すると、この列の直前に格納された列が新しいINCLUDING列になります。

SET UNUSED句

SET UNUSEDを使用すると、1つ以上の列が未使用としてマーク付けされます。内部ヒープ構成表の場合は、この句を指定しても、対象の列が表の各行から実際に削除されることはありません。その列に使用されているディスク領域がリストアされることはありません。したがって、応答時間はDROP句を実行したときよりも短縮されます。

外部表内の列に対してこの句を指定すると、句は透過的にALTER TABLE ... DROP COLUMN文に変換されます。その理由は、外部表に対する操作はメタデータのみの操作であるため、2つのコマンドのパフォーマンスに違いがないためです。

UNUSEDのマークが付いた列を持つすべての表は、データ・ディクショナリ・ビューUSER_UNUSED_COL_TABS、DBA_UNUSED_COL_TABSおよびALL_UNUSED_COL_TABSで参照できます。

関連項目:
データ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

未使用列のデータは表の行に残っていますが、この列は削除されたものとして扱われます。UNUSEDのマークが付けられた列にはアクセスできなくなります。SELECT *問合せでも、未使用列からデータを取り出すことはできません。また、UNUSEDのマークが付けられた列の名前および型は、DESCRIBEコマンドでは表示されず、未使用列と同じ名前の新しい列を表に追加できます。

注意:
これらの列を実際に削除するまでは、表当たり1000列の制限に対して、これらの列もカウント対象になります。ただし、すべてのDDL文と同様に、この句の結果をロールバックすることはできません。SET UNUSED列を取り出すために、対応するSET USEDを発行することはできません。1000列の制限の詳細は、「CREATE TABLE」を参照してください。
また、LONG列にUNUSEDのマークを付けた場合、この未使用のLONG列を実際に削除しないかぎり、その表には別のLONG列を追加できません。

ONLINE ONLINEを指定すると、列にUNUSEDのマークを付けて、表に対するDML操作を可能にすることを指定できます。

未使用の列のマーク付けの制限事項 SET UNUSED句には、次の制限事項が適用されます。

- ONLINE句は、DEFERRABLE制約で列をUNUSEDとしてマークする場合は指定できません。

- SYSが所有する表の列にUNUSEDのマークを付けることはできません。

DROP句

DROPを指定すると、表のそれぞれの行から、対象となる列に関連付けられた列記述子およびデータを削除できます。特定の列を明示的に削除した場合、対象の表でUNUSEDのマークが付いている列もすべて同時に削除されます。

列データを削除した場合、次のものが削除されます。

- 対象の列に定義されているすべての索引。

- 対象の列を参照しているすべての制約。

- 対象の列に統計タイプが関連付けられている場合、FORCEオプションによって、関連付けは解除され、その統計タイプを使用して収集したすべての統計情報は削除されます。

注意:
対象の列が対象でない列の親キーである場合またはCHECK制約が対象である列と対象でない列の両方を参照している場合は、Oracle Databaseはエラーを戻し、CASCADE CONSTRAINTS句を指定しないかぎり、列を削除しません。この句を指定した場合、対象である列を参照しているすべての制約が削除されます。

関連項目:
統計タイプの関連付けの解除方法の詳細は、「DISASSOCIATE STATISTICS」を参照してください。

DROP UNUSED COLUMNS句

DROP UNUSED COLUMNSを指定すると、未使用とマークされているすべての列を表から削除できます。表の未使用の列からディスク領域を回収する場合に、この文を使用します。表に未使用の列がない場合でも、エラーは戻されません。

column 未使用として設定または削除する1つ以上の列を指定します。列を1つのみ指定する場合にかぎり、COLUMNキーワードを使用します。列リストを指定する場合、リストには重複する列を指定できません。

CASCADE CONSTRAINTS CASCADE CONSTRAINTSを指定すると、削除する列に定義されている主キーおよび一意キーを参照する外部キー制約をすべて削除したり、削除する列に定義されているすべての複数列制約を削除することができます。他の表の列、または対象である表の他の列が参照している制約がある場合は、CASCADE CONSTRAINTSを指定する必要があります。CASCADE CONSTRAINTSを指定しない場合、その文は異常終了し、エラーが戻されます。

INVALIDATE INVALIDATEキーワードはオプションです。ビュー、トリガー、ストアド・プログラム・ユニットなどのすべての依存オブジェクトが自動的に無効になります。オブジェクトの無効化は再帰的プロセスです。したがって、すべての直接的な依存オブジェクトおよび間接的な依存オブジェクトが無効になります。ただし、データベースでは、リモート依存性をローカル依存性と別に管理しているため、ローカル依存性のみが無効になります。

この文によって無効となったオブジェクトは、次に参照された際に自動的に再検証されます。オブジェクトを参照する前に、オブジェクトに存在するエラーは、すべて修正しておく必要があります。

関連項目:
依存性の詳細は、『Oracle Database概要』を参照してください。

CHECKPOINT CHECKPOINTを指定すると、DROP COLUMN操作でinteger行が処理された後にチェックポイントが適用されます。integerはオプションであり、1以上である必要があります。integerが表の行数より大きい場合は、すべての行が処理された後にチェックポイントが適用されます。integerを指定しない場合は、デフォルトの512に設定されます。チェックポイントを適用すると、DROP COLUMN操作中に蓄積されるUNDOログの量が削減されるため、UNDO領域の不足を回避できます。ただし、この文が中断されたときにすでにチェックポイントが適用されていた場合は、表は使用禁止の状態のままになります。使用禁止状態の表に対して実行可能な操作は、DROP TABLE、TRUNCATE TABLEおよびALTER TABLE DROP ... COLUMNS CONTINUE(後述)のみです。

この句は列データを削除しないため、SET UNUSEDと同時に使用できません。

DROP COLUMNS CONTINUE句

DROP COLUMNS CONTINUEを指定すると、中断されたところから列削除操作を続行できます。表が無効な状態にあるときにこの文を発行すると、エラーになります。

列の削除の制限事項: 列の削除には、次の制限事項があります。

- この句の各部分は、文の中で1回のみ指定でき、他のALTER TABLE句と同時に使用することはできません。たとえば、次のような文は許可されません。

ALTER TABLE t1 DROP COLUMN f1 DROP (f2);
ALTER TABLE t1 DROP COLUMN f1 SET UNUSED (f2);
ALTER TABLE t1 DROP (f1) ADD (f2 NUMBER);
ALTER TABLE t1 SET UNUSED (f3)
ADD (CONSTRAINT ck1 CHECK (f2 > 0));

- オブジェクト型の列は、エンティティとしてのみ削除できます。オブジェクト型の列から属性を削除するには、ALTER TYPE ... DROP ATTRIBUTE文をCASCADE INCLUDING TABLE DATA句とともに使用します。属性の削除は、すべての依存オブジェクトに影響することに注意してください。詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

- 索引構成表からは、主キー列でない場合にかぎり、列を削除できます。索引構成表の主キー制約は削除できないため、CASCADE CONSTRAINTSを指定しても主キー列は削除できません。

- 削除した列または未使用の列を含む表をエクスポートできます。ただし、エクスポート・ファイルに指定されたすべての列が表に存在する(これらの列のいずれも削除または未使用のマークを付けられていない)場合のみ、その表をインポートできます。そうでない場合は、エラーが戻ります。

- COMPRESS BASICを使用する表の列を未使用として設定できますが、その列を削除することはできません。ただし、drop_column_clauseのすべての句は、ROW STORE COMPRESS ADVANCEDを使用する表に対して有効です。詳細は、「table_compression」のセマンティクスを参照してください。

- ドメイン索引が構築されている列は削除できません。

- REF列からはSCOPE表制約およびWITH ROWID制約を削除できません。

- 次のものは、この句を使用して削除できません。

- 疑似列、クラスタ列またはパーティション列。パーティションが作成されたすべての表領域がオンラインで読取り/書込みモードである場合、パーティション表から非パーティション列を削除できます。

- ネストした表の列、オブジェクト表の列またはSYSが所有する表の列。

関連項目:
「列の削除例:」

add_period_clause

add_period_clauseを使用すると、有効な時間ディメンションをtableに追加できます。

ALTER TABLEのperiod_definition句は、CREATE TABLEと同じセマンティクスを持ちます。ただし、次の例外と追加事項があります。

- valid_time_columnがtableにすでに存在していてはいけません。

- start_time_columnとend_time_columnを指定する場合、これらの列がtableにすでに存在する必要があります。または、これらの各列に対してadd_column_clauseを指定する必要があります。

- start_time_columnとend_time_columnを指定した場合で、これらの列がtableにすでに存在し、データが移入されているときは、この両方の列の値がNULLでないすべての行で、start_time_columnの値がend_time_columnの値より前である必要があります。

関連項目:
この句のセマンティクスの詳細は、CREATE TABLE period_definitionを参照してください。

drop_period_clause

drop_period_clauseを使用すると、有効な時間ディメンションをtableから削除できます。

valid_time_columnには、削除する有効な時間ディメンションの名前を指定します。

この句には次のような効果があります。

- valid_time_columnがtableから削除されます。

- CREATE TABLE ... period_definitionまたはALTER TABLE ... add_period_clauseを使用して有効な時間ディメンションを作成したときに開始時間列と終了時間列が自動的に作成された場合は、これらの列が削除されます。それ以外の場合、これらの列はtableに残り、通常の表の列に戻ります。

関連項目:
valid_time_column、開始時間列、終了時間列の詳細は、CREATE TABLE period_definitionを参照してください。

rename_column_clause

rename_column_clauseを使用すると、tableの列名を変更できます。新しい列には、table内の他の列と同じ名前を指定しないでください。

列名を変更すると、依存オブジェクトは次のように処理されます。

- 名前が変更された列に依存するファンクション索引およびCHECK制約は、引き続き有効です。

- 依存するビュー、トリガー、ファンクション、プロシージャおよびパッケージは無効になります。これらのオブジェクトが次回アクセスされたときに、Oracle Databaseによって再有効化が試行されますが、再有効化に失敗した場合は、管理者がそのオブジェクトを変更して新しい列名を指定する必要があります。

- 名前を変更する列にドメイン索引を定義している場合、ODCIIndexAlterメソッドがRENAMEオプション付きで起動されます。この操作によって、索引タイプ・メタデータと実表の間の対応が確立されます。

列名の変更の制限事項: 列名の変更には、次の制限事項があります。

- 同じ文の中で、この句を他のcolumn_clausesと同時に使用することはできません。

- 結合索引の定義に使用される列名は変更できません。列名を変更する場合、索引を削除し、列名を変更してから、索引を再作成する必要があります。

関連項目:
「列名の変更例:」

modify_collection_retrieval

modify_collection_retrieval句を使用すると、データベースからコレクション型の項目が取り出されたときの戻り値を変更できます。

collection_item ネストした表型またはVARRAY型の列修飾属性の名前を指定します。

RETURN AS 問合せの結果として何を戻り値とするかを指定します。

- LOCATORは、ネストした表に対して一意のロケータを戻すことを指定します。

- VALUEは、ネストした表のコピーをそのまま戻すことを指定します。

関連項目:
「コレクションの取出し例:」

modify_LOB_storage_clause

modify_LOB_storage_clauseを使用すると、LOB_itemの物理属性を変更できます。各modify_LOB_storage_clauseに対して、LOB_itemを1つのみ指定できます。

以降の項では、modify_LOB_parametersに固有のパラメータのセマンティクスについて説明します。この項で特に指定がない場合は、残りのLOBパラメータのセマンティクスは、表の作成時と表の変更時で同じです。詳細は、この項の最後にある制限と、「CREATE TABLE」の句「LOB_storage_parameters」を参照してください。

注意:

- LOB記憶域に変更を加えるには、ALTER TABLE文を使用する方法と、DBMS_REDEFINITIONパッケージを使用したオンライン再定義による方法があります。LOB暗号化、圧縮または重複除外を作成時に有効にしなかった場合は、作成後にオンライン再定義を使用してこれらを有効にすることをお薦めします(この3つのパラメータの変更に対しては、この方法の方がディスク領域の効率の点で優れているため)。DBMS_REDEFINITIONの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

- LOBの記憶域の種類を変換することはできません。かわりに、オンライン再定義またはパーティション交換を使用して、SecureFileまたはBasicFileを移行する必要があります。

PCTVERSION integer この句の詳細は、「CREATE TABLE」の句「PCTVERSION integer」を参照してください。

LOB_retention_clause データベースが自動UNDOモードで稼働している場合、旧バージョンのLOBを保持するには、PCTVERSIONではなくRETENTIONを指定します。この句によって、PCTVERSIONのこれまでの設定が上書きされます。

FREEPOOLS integer データベースが自動UNDOモードで稼働している場合、BasicFiles LOBに対してこの句を使用するとLOBの空きリスト・グループ数を指定できます。この句によって、FREELIST GROUPSのこれまでの設定が上書きされます。このパラメータの詳細は、「CREATE TABLE」の句「FREEPOOLS integer」を参照してください。SecureFiles LOBの場合は、データベースはこのパラメータを無視します。

REBUILD FREEPOOLS この句はBasicFiles LOBにのみ適用され、SecureFiles LOBには適用されません。REBUILD FREEPOOLS句を指定すると、LOB列から古いバージョンのデータがすべて削除されます。この句が役に立つのは、1つのLOBセグメント内に保持されている古いバージョンの領域をすべて削除する場合です(その領域が解放されて、すぐに新しいLOBデータに使用できるようになります)。

LOB_deduplicate_clause この句は、SecureFiles LOBに対してのみ有効です。KEEP_DUPLICATESは、LOB重複除外を無効にします。DEDUPLICATEは、LOB重複除外を有効にします。セグメント内のすべてのLOBが読み取られ、一致するLOBがある場合は重複が除外されてから戻されます。

LOB_compression_clause この句は、 SecureFiles LOBに対してのみ有効です。COMPRESSは、セグメント内のすべてのLOBを圧縮して戻します。NOCOMPRESSは、セグメント内のすべてのLOBを圧縮解除して戻します。

ENCRYPT | DECRYPT LOB暗号化は、一般に列の暗号化と同じセマンティクスを持ちます。詳細は、「ENCRYPT encryption_spec | DECRYPT」を参照してください。

CACHE、NOCACHE、CACHE READS CACHEまたはNOCACHEからCACHE READSへ、またはCACHE READSからCACHEまたはNOCACHEへLOB列を変更するときに、ロギング属性を変更できます。LOGGINGまたはNOLOGGINGを指定しない場合、LOB列の現行ロギング属性がデフォルトになります。CACHE、NOCACHEまたはCACHE READSを指定しない場合、Oracle Databaseは、LOB属性の既存の値を保持します。

LOB記憶域の変更の制限事項: LOB記憶域の変更には、次の制限事項があります。

- LOB記憶域属性を変更する場合、storage_clauseのINITIALパラメータの値は変更できません。

- 同じ文でallocate_extent_clauseとdeallocate_unused_clauseの両方を指定することはできません。

- PCTVERSIONパラメータとRETENTIONパラメータの両方を指定することはできません。

- shrink_clauseは、SecureFiles LOBに対して指定できません。

関連項目:
LOBパラメータの設定の詳細は、「CREATE TABLE」の「LOB_storage_clause」および「LOB列の例:」を参照してください。

alter_varray_col_properties

alter_varray_col_properties句を使用すると、VARRAYが格納されている既存のLOBの記憶特性を変更できます。

VARRAY列のプロパティ変更の制限事項: LOB_parametersのTABLESPACE句は、この句の一部として指定できません。VARRAYに対するLOB表領域のデフォルトは、表を含む表領域になります。

REKEY encryption_spec

REKEY句を指定すると、データベースの新しい暗号化キーが生成されます。表内の暗号化されている列はすべて、新しいキーを使用して再度暗号化され、このときに、encryption_specのUSING句が指定されている場合は新しい暗号化アルゴリズムが使用されます。この句は、このALTER TABLE文の中の他の句と組み合せることはできません。

関連項目:
列の透過的な暗号化の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

constraint_clauses

constraint_clausesを使用すると、表外宣言を使用して新しい制約を追加、既存の制約の状態を変更、および制約を削除できます。表外制約およびconstraint_stateのすべてのキーワードとパラメータの詳細は、「constraint」を参照してください。

制約の追加

ADD句を使用すると、表外制約または表外REF制約を表に追加できます。

関連項目:
「CHECK制約を使用禁止にする例:」、「オブジェクト識別子の指定例:」および「REF列の例:」を参照してください。

制約の変更

MODIFY CONSTRAINT句を使用すると、既存の制約の状態を変更できます。

CASCADEキーワードは、外部キー制約が定義されている一意制約または主キー制約を使用禁止にする場合にのみ有効です。この場合、CASCADEを指定することによって、一意制約または主キー制約とその依存するすべての外部キー制約を使用禁止にする必要があります。

制約の変更の制限事項: 制約の変更には、次の制限事項があります。

- NOT DEFERRABLE制約は、INITIALLY DEFERREDには変更できません。

- 索引構成表にこの句を指定した場合、同じ文では他の句を指定できません。

- 参照パーティション表の外部キー列のNOT NULL制約は変更できません。また、参照パーティション表の参照制約のパーティション化状態は変更できません。

関連項目:
「制約状態の変更例:」

制約名の変更

RENAME CONSTRAINT句を使用すると、tableの既存の制約名を変更できます。新しい制約名は、同一スキーマ内にあるオブジェクトの既存の制約と同じ名前にはできません。制約に依存するすべてのオブジェクトは、引き続き有効です。

関連項目:
「制約名の変更例:」

drop_constraint_clause

drop_constraint_clauseを使用すると、データベースの整合性制約を削除できます。制約の適用を中止し、データ・ディクショナリから制約が削除されます。各drop_constraint_clauseには、制約を1つのみ指定できますが、1つの文の中では、複数のdrop_constraint_clauseを指定できます。

PRIMARY KEY PRIMARY KEYを指定すると、tableの主キー制約を削除できます。

UNIQUE UNIQUEを指定すると、指定した列の一意制約を削除できます。

ビットマップ結合索引が定義されている列から主キー制約または一意制約を削除すると、索引は無効になります。ビットマップ結合索引の詳細は、「CREATE INDEX」を参照してください。

CONSTRAINT CONSTRAINT constraint_nameを指定すると、主キー制約または一意制約以外の整合性制約を削除できます。

CASCADE CASCADEを指定すると、削除する整合性制約に依存するその他の整合性制約もすべて削除できます。

KEEP INDEX | DROP INDEX KEEP INDEXまたはDROP INDEXを指定すると、PRIMARY KEYまたはUNIQUE制約の適用に使用する索引を残すか削除するかを指定できます。

ONLINE ONLINEを指定すると、制約を削除して表に対するDML操作が許可されるようになります。

制約削除の制限事項: 制約の削除には、次の制限事項があります。

- 参照整合性制約の一部の主キー制約または一意キー制約は、外部キーを削除しないと削除できません。参照されたキーと外部キーをともに削除する場合は、CASCADE句を使用してください。CASCADEを省略すると、外部キーによって参照される主キー制約および一意制約は削除されません。

- 主キーをオブジェクト識別子(OID)として使用している表では、主キー制約は(CASCADE句を使用しても)削除できません。

- REF列の参照整合性制約を削除した場合、REF列の有効範囲には参照先の表が含まれたままになります。

- REF列の有効範囲は削除できません。

- 参照パーティション表の外部キー列のNOT NULL制約は削除できません。また、参照パーティション表のパーティション化参照制約は削除できません。

- 列に対するNOT NULL制約は、その列のデフォルトの列値がON NULL句を使用して定義されていると削除できません。

- ONLINE句は、DEFERRABLE制約を削除しているときには指定できません。

関連項目:
「制約の削除例:」

alter_external_table

alter_external_table句を使用すると、外部表の特性を変更できます。この句は、外部データには影響しません。parallel_clause、enable_disable_clause、external_data_propertiesおよびREJECT LIMIT句の構文およびセマンティクスは、CREATE TABLEの内容と同じです。「CREATE TABLE」の「external_table_clause」を参照してください。

PROJECT COLUMN句 この句を使用すると、後続の問合せで、アクセス・ドライバが外部表に含まれる行を検証する方法を指定できます。デフォルトはPROJECT COLUMN ALLで、この場合、アクセス・ドライバは、選択されている列にかかわらず、すべての列の値を処理し、列のエントリが有効な行のみを検証します。いずれかの列の値でデータ型変換エラーなどのエラーが発生すると、その列がSELECT構文のリスト内で参照されていない場合でも、行が拒否されます。PROJECT COLUMN REFERENCEDを指定すると、アクセス・ドライバはSELECT構文のリスト内の列のみを処理します。

ALL設定の場合、一貫した結果セットが保証されます。REFERENCED設定の場合、後続の問合せで参照される列の数に応じて、戻される行の数が異なる可能性がありますが、ALL設定よりも高速です。後続の問合せで外部表のすべての列が選択されている場合、2つの設定の動作は同じになります。

外部表の変更の制限事項: 外部表の変更には、次の制限事項があります。

- この句以外の句を使用して外部表を変更できません。

- LONG、VARRAYまたはオブジェクト型の列は外部表に追加できません。また、外部表の列のデータ型を、これらの型に変更できません。

- 制約は外部表に追加できません。

- 外部表の記憶域パラメータは変更できません。

alter_table_partitioning

ここで説明する句は、パーティション表にのみ適用されます。1つのALTER TABLE文の中では、パーティション操作を他のパーティション操作または実表での操作と組み合せて使用することはできません。

表パーティションの変更の制限事項: 表パーティションの変更には、次の注意事項があります。

- 1つ以上のマテリアライズド・ビューのマスター表で、パーティションを削除、交換、切捨て、移動、変更または分割した場合、その表に関する大量の既存ロード情報が削除されます。したがって、前述の操作のいずれかを行う前に、必ず依存するマテリアライズド・ビューをすべてリフレッシュしてください。

- tableにビットマップ結合索引が定義されている場合、tableのパーティションの変更操作を実行すると、索引にUNUSABLEのマークが付けられます。

- alter_table_partitioningの句のうち、参照パーティション表に対して指定できるのはmodify_table_default_attrs、move_table_[sub]partition、truncate_partition_subpartおよびexchange_partition_subpartのみです。これらの操作が参照パーティション表の子表に対してカスケードすることはありません。これ以外のパーティション・メンテナンス操作は、参照パーティション表に対しては有効ではありませんが、参照パーティション表の親表に対して指定することは可能であり、その操作は子である参照パーティション表にカスケードします。

- パーティションまたはサブパーティションを追加する際、表ごとに指定できるパーティションとサブパーティションの合計は1024K-1です。

- 表のパーティションまたはサブパーティションを追加するときにパーティション名を省略すると、「一般的なパーティション化の注意事項:」で説明されているルールに従い、データベースによって名前が生成されます。

- 表のパーティションまたはサブパーティションに対して、移動、追加(ハッシュのみ)、結合、削除、分割、マージ、名前の変更、または切捨てを行った場合、その表を参照するプロシージャ、ファンクション、パッケージ、パッケージ本体、ビュー、型本体およびトリガーは、引き続き有効です。他の依存オブジェクトはすべて無効になります。

- LOB列を使用した表に新規セグメントを作成するパーティションのメンテナンス操作の遅延セグメント作成は、サポートされていません。セグメントは含まれる(サブ)パーティションに常に作成されます。

関連するCONTEXTドメイン索引が含まれる表におけるパーティション操作の詳細は、『Oracle Textリファレンス』を参照してください。

ブロック・サイズが異なる表領域のパーティション化されたデータベース・エンティティの記憶域には、制限事項があります。これらの制限事項については、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

modify_table_default_attrs

modify_table_default_attrs句を使用すると、tableの属性に対する新しいデフォルト値を指定できます。文に指定した属性のみが影響を受けます。その後に作成するパーティションおよびLOBパーティションは、パーティションまたはLOBパーティションの作成時に明示的に上書きしないかぎり、この値を継承します。既存のパーティションおよびLOBパーティションは、この句の影響を受けません。

文の中で指定した属性のみが影響を受けます。指定されたデフォルト値は、個々のパーティションまたはLOBパーティションのレベルで指定された属性で上書きされます。

- FOR partition_extended_nameは、コンポジット・パーティション表にのみ適用されます。この句は、partition_extended_nameで指定されたパーティションの属性に新しいデフォルト値を指定します。その後に作成するパーティションのサブパーティションおよびLOBパーティションは、サブパーティションまたはLOBパーティションの作成時に明示的に上書きしないかぎり、この値を継承します。既存のサブパーティションは、この句の影響を受けません。

- PCTTHRESHOLD、prefix_compressionおよびalter_overflow_clauseは、パーティション化された索引構成表にのみ有効です。

- 表レベルで接頭辞圧縮がすでに指定されている場合にかぎり、prefix_compression句を指定できます。また、COMPRESSキーワードの後にint型を指定することはできません。接頭辞の長さは、表の作成時にのみ指定できます。

- 索引構成表の索引セグメントに対しては、segment_attributes句でPCTUSEDパラメータを指定できません。

- indexing_clauseを使用すると、表に対するデフォルトの索引付けプロパティを変更できます。新しいデフォルトの索引付けプロパティは、それ以降に表に追加されたパーティションまたはサブパーティションに割り当てられます。ただし、この動作は、新しいパーティションまたはサブパーティションに索引付けプロパティを指定することで上書きされます。表のデフォルトの索引付けプロパティを変更しても、その表内に既存のパーティションまたはサブパーティションの索引付けプロパティが変更されることはありません。この句のセマンティクスの詳細は、CREATE TABLEの「indexing_clause」を参照してください。

alter_interval_partitioning

次の場合にこの句を使用します。

- 既存のレンジ・パーティション表を時間隔パーティションに変換する場合。データベースにより、最後のレンジ・パーティションの最大値を超えるデータの必要に応じて、指定した数値範囲または日時間隔のパーティションが自動的に作成されます。その表に子の参照パーティション表が存在する場合、その子表は子の時間隔参照パーティション表に変換されます。

- 既存の時間隔パーティション表の時間隔を変更する場合。データベースは、先に既存の時間隔パーティションをレンジ・パーティションに変換し、定義されたレンジ・パーティションの上限の値を決定します。次に、データベースにより、上限を超えたデータの必要に応じて、指定した数値範囲または日時間隔のパーティションが自動的に作成されます。

- 既存の時間隔パーティション表の表領域の記憶域を変更する場合。その表に子の時間隔参照パーティション表が存在する場合、新しい表領域の記憶域は、専用の表レベルのデフォルト表領域を持たない子表に継承されます。

- 時間隔パーティション表をレンジ・パーティション表に戻す場合。SET INTERVAL ()を使用して、時間隔パーティションを無効にします。データベースは、作成されるレンジ・パーティションの上限として、作成済の時間隔パーティションの上限を使用し、既存の時間隔パーティションをレンジ・パーティションに変換します。その表に子の時間隔参照パーティション表が存在する場合、その子表は通常の子の参照パーティション表に変換されます。

exprには、有効な数値または期間式を指定します。

関連項目:
時間隔パーティションの詳細は、「CREATE TABLE」の「INTERVAL句」および『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

set_subpartition_template

set_subpartition_template句は、個々の表パーティションのデフォルトのレンジ、リストまたはハッシュ・サブパーティション定義を作成するときや、既存の定義を置き換えるときに使用します。この句は、コンポジット・パーティション表に対してのみ有効です。既存のサブパーティション・テンプレートが置き換えられますが、テンプレートがまだ作成されていない場合は新規作成されます。既存のサブパーティションや、既存のローカルおよびグローバルの索引に影響が及ぶことはありません。ただし、以降のパーティション化操作(追加やマージなどの操作)には、新しいテンプレートが使用されます。

既存のサブパーティション・テンプレートを削除するには、ALTER TABLE table SET SUBPARTITION TEMPLATE ()を指定します。

set_subpartition_template句は、CREATE TABLEのsubpartition_template句と同じセマンティクスを持ちます。詳細は、CREATE TABLEのsubpartition_template句を参照してください。

modify_table_partition

modify_table_partition句を使用すると、レンジ・パーティション、ハッシュ・パーティション、リスト・パーティションまたはシステム・パーティションの実際の物理属性を変更できます。そのパーティションの1つ以上のLOB項目の記憶域属性を任意に変更できます。物理属性(制限事項については後述)、ロギングおよび記憶域パラメータに対して、新しい値を指定できます。

すべてのタイプのパーティションについて、パーティションを変更した結果、使用不可能になったローカル索引の処理方法も指定できます。「UNUSABLE LOCAL INDEXES句」を参照してください。

パーティション化された索引構成表の場合、パーティションの変更時にマッピング表も同時に更新できます。「alter_mapping_table_clauses」を参照してください。

indexing_clause indexing_clauseを使用すると、表パーティションの索引付けプロパティを変更できます。この索引付けプロパティにより、パーティションが表の部分索引に含まれるかどうかが決まります。indexing_clauseは、modify_range_partition句、modify_hash_partition句、およびmodify_list_partition句に指定できます。

INDEXING ONを指定すると、表パーティションの索引付けプロパティをONに変更できます。この操作は、表の全索引には作用しません。表の部分索引に対して、次のように作用します。

- ローカルの部分索引: 表パーティションが、索引に含まれます。それに対応する索引パーティションは、再構築されてからUSABLEのマークが付けられます。

- グローバルのパーティション索引: 表パーティションは、索引に含まれます。表パーティションの索引エントリは、定期の索引メンテナンスの一環として索引に追加されます。

INDEXING OFFを指定すると、表パーティションの索引付けプロパティをOFFに変更できます。この操作は、表の全索引には作用しません。表の部分索引に対して、次のように作用します。

- ローカルの部分索引: 表パーティションが、索引から除外されます。それに対応する索引パーティションは、再構築されてからUNUSABLEのマークが付けられます。

- グローバルの部分索引: 表パーティションが、索引から除外されます。表パーティションの索引エントリは、索引から削除されます。これは、メタデータ専用の操作であるため、索引エントリは索引内に物理的に格納され続けます。このような孤立した索引エントリは、ALTER INDEX文またはmodify_index_partition句で、COALESCE CLEANUPを指定すると削除できます。

indexing_clauseの制限事項: この句は、単純なパーティション表にのみ指定できます。コンポジット・パーティション表の場合は、表サブパーティション・レベルでindexing_clauseを指定できます。詳細は、「modify_table_subpartition」を参照してください。

表パーティションの変更の制限事項: レンジ、リストおよびハッシュ表パーティションの操作に、次の制限事項が適用されます。

- すべてのタイプの表パーティションについて、partition_attributes句でshrink_clauseを使用すると、各パーティションのセグメントを縮小できます。この句の詳細は、「shrink_clause」を参照してください。

- システム・パーティションを変更する構文およびセマンティクスは、ハッシュ・パーティションを変更する場合と同じです。「modify_hash_partition」を参照してください。

- tableがコンポジット・パーティション化されている場合:

- allocate_extent_clauseを指定すると、partitionのそれぞれのサブパーティションにエクステントが割り当てられます。

- deallocate_unused_clauseを指定すると、partitionのそれぞれのサブパーティションから未使用の記憶域の割当てが解除されます。

- この句で変更された他の属性は、partitionのサブパーティションでも変更され、既存の値は上書きされます。既存のサブパーティションの属性が変更されないようにするには、modify_table_default_attrsのFOR PARTITION句を使用します。

- パーティション化されているネストした表を含む表パーティションのpartition_attributesを変更した場合、その変更内容は、変更した表パーティションに対応するネストした表パーティションには適用されません。ただし、ALTER TABLE文を使用すると、ネストした表パーティションの記憶表を直接変更できます。

- 特に指定がないかぎり、partition_attributesの残りの句の動作は、パーティション表の作成時と同じです。詳細は、「CREATE TABLE」の「table_partitioning_clauses」を参照してください。

関連項目:
「表のパーティションの変更例:」

modify_range_partition

この句を使用すると、レンジ・パーティションの特性を変更できます。

add_range_subpartition  この句が有効であるのは、レンジ-レンジ・コンポジット・パーティションに対してのみです。これにより、1つ以上のレンジ・サブパーティションをpartitionに追加できます。

レンジ・サブパーティションを追加する場合の制限事項: tableが索引構成表の場合は、一度に追加できるレンジ・サブパーティションは1つのみになります。

add_hash_subpartition  この句は、レンジ-ハッシュ・コンポジット・パーティションに対してのみ有効です。add_hash_subpartition句を使用すると、ハッシュ・サブパーティションをpartitionに追加できます。Oracle Databaseは、ハッシュ・ファンクションによってpartitionの他のサブパーティションから再ハッシュされた行を、新しいサブパーティションに移入します。ロード・バランシングを最適化する場合、サブパーティションの合計数は2の累乗にする必要があります。

partitioning_storage_clauseでサブパーティションに対して指定できる句は、TABLESPACE句のみです。TABLESPACEを指定しなかった場合、新しいサブパーティションはpartitionのデフォルトの表領域に格納されます。

選択したパーティションに対応するローカル索引パーティションが追加されます。

追加したパーティションに対応するローカル索引パーティションにUNUSABLEのマークが付けられます。ヒープ構成表のすべての索引が無効になります。update_index_clausesを使用し、操作中にこれらの索引を更新できます。

add_list_subpartition この句は、レンジ-リストおよびリスト-リスト・コンポジット・パーティションに対してのみ有効です。これにより、1つ以上のリスト・サブパーティションをpartitionに追加できます。ただし、DEFAULTのサブパーティションが作成されていない場合に限られます。

- この操作にはlist_values_clauseが必要です。また、list_values_clauseには、partitionのその他のサブパーティションには存在していない値を指定する必要があります。ただし、他のパーティションのサブパーティションで使用されている値は指定できます。

- partitioning_storage_clauseでサブパーティションに対して指定できる句は、TABLESPACE句および表の圧縮のみです。

追加されたサブパーティションごとに、Oracle Databaseは、表のすべてのローカル索引パーティションに、同じ値リストを持つサブパーティションも追加します。表の既存のローカル索引パーティションおよびグローバル索引パーティションは影響を受けません。

リスト・サブパーティションを追加する場合の制限事項 リスト・サブパーティションを追加するときには、次の制限事項が適用されます。

- この句は、このパーティションにDEFAULTのサブパーティションが作成されている場合は指定できません。その場合、split_list_subpartition句を使用して、DEFAULTパーティションを分割する必要があります。

- tableが索引構成表の場合は、一度に追加できるリスト・サブパーティションは1つのみになります。

coalesce_table_subpartition COALESCE SUBPARTITIONは、ハッシュ・サブパーティションにのみ適用されます。COALESCE SUBPARTITIONを使用すると、最後のハッシュ・サブパーティションが選択され、その内容が1つ以上の残りのサブパーティション(ハッシュ・ファンクションが決定)に分散された後、選択されたサブパーティションが削除されます。

- 選択したパーティションに対応するローカル索引パーティションが削除されます。

- 1つ以上の吸収パーティションに対応するローカル索引パーティションにUNUSABLEのマークが付けられます。ヒープ構成表のすべてのグローバル索引が無効になります。update_index_clausesを使用し、操作中にこれらの索引を更新できます。

modify_hash_partition

ハッシュ・パーティションに変更を加えるときは、partition_attributes句の中で指定できるのはallocate_extent_clauseおよびdeallocate_unused_clauseのみです。パーティションのそれ以外の属性はすべて、表レベルのデフォルトから継承されますが、TABLESPACEは作成時のままとなります。

modify_list_partition

リスト・パーティションを変更するときに使用できる句のセマンティクスは、レンジ・パーティションを変更するときと同じです。リスト・パーティションを変更する場合、次の句も使用できます。

ADD | DROP VALUES句 これらの句は、コンポジット・パーティションを変更する場合のみ有効です。これらの句によって、表のローカル索引とグローバル索引が影響を受けることはありません。

- ADD VALUES句を使用すると、partitionのpartition_key_valueリストが拡張され、追加した値が含まれます。追加するパーティションの値は、「CREATE TABLE」の句「list_partitions」に示すすべての規則および制限事項に準拠する必要があります。

- DROP VALUES句を使用すると、1つ以上のpartition_key_valueが削除され、partitionのpartition_key_valueリストが縮小されます。この句を指定すると、Oracle Databaseはこの値の行が存在しないことを検証します。そのような行が存在する場合は、エラーが戻されます。

注意:
表にローカル同一キー索引が定義されている場合、DEFAULTリスト・パーティションのある表ではADD VALUES操作およびDROP VALUES操作が改善されます。

リスト値の追加と削除の制限事項: リスト値の追加と削除には、次の制限事項があります。

- DEFAULTリスト・パーティションに対して値を追加または値を削除することはできません。

- tableにDEFAULTパーティションが定義されている場合、デフォルト・パーティション以外に値を追加しようとすると、その値がDEFAULTパーティションに存在しているかどうかが確認されます。 DEFAULTパーティションにその値が存在する場合、エラーが戻されます。

modify_table_subpartition

この句は、コンポジット・パーティション表にのみ適用されます。その副次句によって、個別のレンジ、リストまたはハッシュ・サブパーティションの特性を変更できます。

shrink_clauseを使用すると、サブパーティションの各セグメントを縮小できます。この句の詳細は、「shrink_clause」を参照してください。

また、パーティションを変更した結果、使用不可能になったローカル索引の処理方法も指定できます。「UNUSABLE LOCAL INDEXES句」を参照してください。

indexing_clauseを使用すると、表サブパーティションの索引付けプロパティを変更できます。索引付けプロパティにより、表の部分索引にサブパーティションを含めるかどうかが決まります。表サブパーティションの索引付けプロパティの変更による索引サブパーティションへの影響は、表パーティションの索引付けプロパティの変更による索引パーティションへの影響と同じです。詳細は、modify_table_partitionの「indexing_clause」を参照してください。

ハッシュ・サブパーティションの変更の制限事項 modify_LOB_parametersのうち、subpartitionに対して指定できるのはallocate_extent_clauseおよびdeallocate_unused_clauseのみです。

ADD | DROP VALUES句 これらの句は、リスト・サブパーティションを変更する場合のみ有効です。これらの句によって、表のローカル索引とグローバル索引が影響を受けることはありません。

- ADD VALUES句を使用すると、subpartitionのsubpartition_key_valueリストが拡張され、追加した値が含まれます。追加するパーティションの値は、「CREATE TABLE」の句「list_partitions」に示すすべての規則および制限事項に準拠する必要があります。

- DROP VALUES句を使用すると、1つ以上のsubpartition_key_valueが削除され、subpartitionのsubpartition_key_valueリストが縮小されます。この句を指定すると、Oracle Databaseはこの値の行が存在しないことを検証します。そのような行が存在する場合は、エラーが戻されます。

また、パーティションを変更した結果、使用不可能になったローカル索引の処理方法も指定できます。「UNUSABLE LOCAL INDEXES句」を参照してください。

リスト・サブパーティションの変更の制限事項 modify_LOB_parametersのうち、subpartitionに対して指定できるのはallocate_extent_clauseおよびdeallocate_unused_clauseのみです。

move_table_partition

move_table_partition句を使用すると、partitionを別のセグメントへ移動できます。パーティション・データの別の表領域への移動、断片化を削減するためのデータの再クラスタ化、および作成時の物理属性の変更ができます。

表にLOB列が含まれている場合、LOB_storage_clauseを使用して、このパーティションに関連付けられたLOBデータおよびLOB索引セグメントを移動できます。この場合、指定したLOBのみが影響を受けます。特定のLOB列にLOB_storage_clauseを指定しなかった場合、その列のLOBデータおよびLOB索引セグメントは移動されません。

ネストした表の列が表に含まれる場合、table_partition_descriptionのnested_table_col_properties句を使用すると、このパーティションに関連付けられているネストした表のセグメントを移動できます。この場合、指定しているネストした表のみが影響を受けます。特定のネストした表の列に対しtable_partition_descriptionのnested_table_col_properties句を指定しなかった場合、そのセグメントは移動されません。

指定したパーティションに対応するローカル索引パーティションが、Oracle Databaseによって移動されます。移動したパーティションが空でない場合、UNUSABLEのマークが付けられます。ヒープ構成表のグローバル索引が無効になります。update_index_clausesを使用し、操作中にこれらの索引を更新できます。

LOBデータ・セグメントを移動する場合、古いデータ・セグメントおよび対応する索引セグメントが削除され、新しい表領域を指定しない場合でも、新しいセグメントが作成されます。

移動操作では、parallel_clause(指定されている場合)からパラレル属性が取得されます。parallel_clauseが指定されていない場合は、表のデフォルトのパラレル属性があれば、これが使用されます。いずれも指定されていない場合は、シリアルに移動が行われます。

MOVE PARTITIONでparallel_clauseを指定した場合、tableのデフォルトのパラレル属性は変更されません。

注意:
索引構成表の場合、主キーのアドレスおよびその値を使用して、論理ROWIDが構成されます。論理ROWIDは、表の2次索引に格納されます。索引構成表のパーティションを移動した場合、ROWIDのアドレス部分が変更され、パフォーマンスの障害になる場合があります。最適なパフォーマンスを維持するには、移動したパーティションの2次索引を再構築し、ROWIDを更新してください。

関連項目:
「表のパーティションの移動例:」

MAPPING TABLE MAPPING TABLE句は、マッピング表が定義されている索引構成表のみに有効です。マッピング表は、索引構成表のパーティションとともに移動されます。マッピング表のパーティションは、移動した索引構成表のパーティションの物理属性を継承します。これは、マッピング表のパーティションの属性を変更する唯一の方法です。この句を省略した場合、マッピング表のパーティションでは、元の属性が保持されます。

対応するすべてのビットマップ索引パーティションにはUNUSABLEのマークが付けられます。

この句の詳細は、「CREATE TABLE」の「mapping_table_clauses」を参照してください。

ONLINE ONLINEを指定すると、表パーティションの移動中に、表パーティションに対するDML操作が許可されるようになります。

ONLINE句の制限事項: ONLINE句には、表パーティションの移動時に次の制限事項があります。

- ONLINE句は、SYSが所有する表に対しては指定できません。

- ONLINE句は、索引構成表には指定できません。

- ONLINE句は、オブジェクト・タイプを格納するヒープ構成表や、ビットマップ結合索引またはドメイン索引が定義されているヒープ構成表には指定できません。

- ONLINE句は、データベース・レベルのサプリメンタル・ロギングがデータベースに対して有効な場合は指定できません。この制限は、Oracle Databaseリリース12cリリース1(12.1.0.2)以降ではなくなっています。

- パラレルDMLおよびダイレクト・パスINSERT操作は、表に対する排他的ロックを必要とします。したがって、これらの操作は、競合するロックにより、実行中のオンライン・パーティションMOVEと同時にはサポートされません。

表パーティションの移動の制限事項: 表パーティションの移動には、次の制限事項があります。

- partitionがハッシュ・パーティションである場合、この句にTABLESPACEの属性以外は指定できません。

- この句は、サブパーティションを含むパーティションに対して指定できません。ただし、move_table_subpartition句を使用してサブパーティションを移動できます。

move_table_subpartition

move_table_subpartition句を使用して、subpartition_extended_nameで識別されるサブパーティションを別のセグメントに移動します。TABLESPACEを指定しない場合、サブパーティションは同じ表領域に残ります。

サブパーティションが空でない場合、移動したサブパーティションに対応するすべてのローカル索引サブパーティションにUNUSABLEのマークが付けられます。update_index_clausesを使用し、操作中にヒープ構成表のすべての索引を更新できます。

表にLOB列が含まれている場合、LOB_storage_clauseを使用して、このサブパーティションに関連付けられたLOBデータおよびLOB索引セグメントを移動できます。この場合、指定したLOBのみが影響を受けます。特定のLOB列にLOB_storage_clauseを指定しなかった場合、その列のLOBデータおよびLOB索引セグメントは移動されません。

LOBデータ・セグメントを移動する場合、古いデータ・セグメントおよび対応する索引セグメントが削除され、新しい表領域を指定しない場合でも、新しいセグメントが作成されます。

ONLINE ONLINE句を指定すると、表サブパーティションの移動中に、表サブパーティションに対するDML操作が許可されるようになります。

ONLINE句の制限事項: 表のサブパーティションを移動するためのONLINE句には、 表のパーティションを移動するためのONLINEと同じ制限事項があります。ONLINE句の制限事項を参照してください。

表サブパーティションの移動の制限事項: 指定できるpartitioning_storage_clauseの句は、TABLESPACEおよびtable_compressionのみです。

add_table_partition

add_table_partition句を使用すると、1つ以上のレンジ・パーティション、リスト・パーティション、またはシステム・パーティションをtableに追加できます。または、1つのハッシュ・パーティションをtableに追加できます。

追加されたパーティションごとに、Oracle Databaseは、tableに定義されているローカル索引に、実表のパーティションと同じ名前で新しいパーティションを追加します。索引に同じ名前のパーティションがすでに存在する場合、SYS_Pnという形式でパーティションの名前が生成されます。

tableが索引構成されている場合、追加されたパーティションごとに、Oracle Databaseは、表に定義されたすべてのマッピング表およびオーバーフロー領域にパーティションを追加します。

tableが参照パーティション表の親表の場合は、dependent_tables_clauseを使用して、この文に指定するパーティション・メンテナンス操作を参照パーティション表のすべての子表に伝播できます。

tableのデフォルトの索引付けプロパティは、新しい表パーティションに継承されます。これは、table_partition_description句にindexing_clauseを使用して、リスト・パーティション、レンジ・パーティション、またはシステム・パーティションの索引付けプロパティを設定するか、add_hash_partition_clauseにindexing_clauseを使用して、ハッシュ・パーティションの索引付けプロパティを設定することで上書きできます。

コンポジット・パーティション表に追加されたパーティションごとに、Oracle Databaseは、同じサブパーティション記述を持つ新しい索引パーティションを、tableに定義されたすべてのローカル索引に追加します。tableのグローバル索引が影響を受けることはありません。新しい表パーティションに索引付けプロパティを指定すると、新しいサブパーティションは、そのパーティションの索引付けプロパティを継承します。それ以外の場合、新しいサブパーティションは、表のデフォルトの索引付けプロパティを継承します。これは、range_subpartition_desc句、individual_hash_subparts句、およびlist_subpartition_desc句でindexing_clauseを使用して、サブパーティションの索引付けプロパティを設定することで上書きできます。

BEFORE句 オプションのBEFORE句は、システム・パーティションをtableに追加するときにのみ指定できます。この句を使用すると、新しいパーティションを追加する場所を、既存のパーティションとの関係で指定できます。システム・パーティションは分割できません。そのため、この句は、既存の1つのパーティションの内容を複数の新しいパーティションに分割する場合に有効です。この句を省略した場合、新しいパーティションは既存のパーティションの後に追加されます。

表パーティションを追加する場合の制限事項: tableが索引構成表の場合や、ローカル・ドメイン索引がtableに定義されている場合は、一度に追加できるパーティションは1つのみになります。

関連項目:
「LOBおよびネストした表の記憶域を持つ表パーティションの追加例:」および「表への複数のパーティションの追加例:」

add_range_partition_clause

add_range_partition_clauseを使用すると、新しいレンジ・パーティションをレンジ・パーティション表またはコンポジット・レンジ・パーティション表の一番上(最後の既存のパーティションの後)に追加できます。

ドメイン索引がtableで定義されている場合、IN_PROGRESSまたはFAILEDのマークが付いていると無効になります。

レンジ・パーティションの追加の制限事項: レンジ・パーティションの追加には、次の制限事項があります。

- 既存の上位パーティションにある各パーティション化キーのパーティションの上限がMAXVALUEの場合、表にパーティションを追加できません。そのかわり、split_table_partition句を使用して、表の始めまたは中間にパーティションを追加します。

- prefix_compressionおよびOVERFLOW句は、パーティション化された索引構成表に対してのみ有効です。表レベルで接頭辞圧縮が使用可能な場合にかぎり、prefix_compressionを指定できます。パーティション表にすでにオーバーフロー・セグメントが存在する場合にかぎり、OVERFLOWを指定できます。

- PCTUSEDパラメータは、索引構成表の索引セグメントに対して指定できません。

range_values_clause 新しいパーティションの上限を指定します。value_listは、パーティション・キー列に対応するリテラル値を順序どおりにカンマで区切ったリストです。value_listの値は、表内にある既存の最上位パーティションのパーティション境界より大きくする必要があります。

table_partition_description この句を使用すると、新しいパーティションに作成時の物理属性を指定できます。表にLOB列が含まれている場合、1つ以上のLOB項目にパーティション・レベルの属性を指定することもできます。

サブパーティションの定義 これらの句は、コンポジット・パーティション表に対してのみ有効です。新しいパーティションのサブパーティションを指定する場合は、range_subpartition_desc、list_subpartition_desc、individual_hash_subpartsまたはhash_subparts_by_quantity句を適切に使用します。この句によって、表レベルでsubpartition_templateに定義された任意のサブパーティションの設定は上書きされます。

add_hash_partition_clause

add_hash_partition_clauseを使用すると、ハッシュ・パーティション表の一番上に新しいハッシュ・パーティションを追加できます。Oracle Databaseは、ハッシュ・ファンクションによってtableの他のパーティションから再ハッシュされた行を、新しいパーティションに移入します。ロード・バランシングを最適化する場合、パーティションの合計数は2の累乗にする必要があります。

パーティションの名前を指定でき、パーティションが格納される表領域を指定することもできます。名前を指定しない場合は、SYS_Pnという形式のパーティション名が割り当てられます。TABLESPACEを指定しない場合は、新しいパーティションは表のデフォルトの表領域に格納されます。それ以外の属性は常に、表レベルのデフォルトから継承されます。

この操作によってパーティション間でデータが再ハッシュされると、対応するすべてのローカル索引パーティションにUNUSABLEのマークが付けられます。update_index_clausesを使用し、操作中にヒープ構成表のすべての索引を更新できます。

parallel_clauseを使用すると、新しいパーティションの作成をパラレル化するかどうかを指定できます。

indexing_clauseを使用すると、パーティションに索引付けプロパティを指定できます。この句を省略すると、そのパーティションはtableのデフォルトの索引付けプロパティを継承します。

関連項目:
ハッシュ・パーティション化の詳細は、「CREATE TABLE」および『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

add_list_partition_clause

add_list_partition_clauseを使用すると、パーティションの新しい一連の値を使用して、tableに新しいパーティションを追加できます。新しいパーティションに作成時の物理属性を指定できます。表にLOB列が含まれている場合、1つ以上のLOB項目にパーティション・レベルの属性を指定することもできます。

リスト・パーティションの追加の制限事項 表の DEFAULTパーティションがすでに定義されている場合は、リスト・パーティションを追加できません。その場合、split_table_partition句を使用して、DEFAULTパーティションを分割する必要があります。

関連項目:

- リスト・パーティションの詳細および制限事項については、「CREATE TABLE」の「list_partitions」を参照してください。

- 「デフォルト・リスト・パーティションの使用例:」

add_system_partition_clause

この句を使用すると、パーティションをシステム・パーティション表に追加できます。表に定義されているすべてのローカル索引に、対応する索引パーティションが追加されます。

table_partition_descriptionによって、新しいパーティションのパーティション・レベルの属性を指定できます。指定しない属性の値は、表レベルの値から継承されます。

システム・パーティションの追加の制限事項: システム・パーティションを追加する場合、OVERFLOW句は指定できません。

関連項目:
システム・パーティションの詳細は、「CREATE TABLE」の句「system_partitioning」を参照してください。

coalesce_table_partition

COALESCEは、ハッシュ・パーティションにのみ適用されます。coalesce_table_partition句を使用すると、最後のハッシュ・パーティションが選択され、その内容がハッシュ・ファンクションによって決定される1つ以上の残りのパーティションに分散された後、選択されたパーティションが削除されます。

選択したパーティションに対応するローカル索引パーティションが削除されます。1つ以上の吸収パーティションに対応するローカル索引パーティションにUNUSABLEのマークが付けられます。ヒープ構成表のすべての索引が無効になります。update_index_clausesを使用すると、操作中にすべての索引を更新できます。

表パーティションの結合の制限事項: update_all_indexes_clauseを使用してグローバル索引を更新する場合、副次句ではなくUPDATE INDEXESキーワードのみを指定できます。

drop_table_partition

drop_table_partition句は、パーティション表から、パーティションと、そのパーティションに含まれるデータを削除します。データを表に残したままパーティションを削除する場合は、そのパーティションを隣接するパーティションにマージする必要があります。

関連項目:
merge_table_partitions

partition_extended_names句を使用して、1つ以上のパーティションを削除するように指定します。複数のパーティションを指定する場合は、構文図の上位ブランチに示すようにすべてのパーティションを名前で指定するか、構文図の下位ブランチに示すようにFOR句を使用してすべてのパーティションを指定する必要があります。両方のタイプの構文を1回の削除操作で使用することはできません。

- tableにLOB列が存在する場合は、削除される表パーティションに対応するLOBデータ、LOB索引パーティション、およびサブパーティションも削除されます。

- tableにパーティション化されているネストした表の列が含まれる場合は、削除される表パーティションに対応するネストした表パーティションも削除されます。

- tableが索引構成されており、定義されたマッピング表を持つ場合、対応するマッピング表のパーティションも同様に削除されます。

- ローカル索引パーティションおよび削除されるパーティションに対応するサブパーティションは、UNUSABLEのマークが付いている場合でも削除されます。

update_index_clausesを使用し、操作中にtableの索引を更新できます。グローバル索引の更新は、メタデータ専用のため、削除操作で削除されるレコードの索引エントリは索引に物理的に格納されたままになります。このような孤立した索引エントリは、ALTER INDEX文またはmodify_index_partition句で、COALESCE CLEANUPを指定すると削除できます。

update_index_clausesとともにparallel_clauseを指定すると、削除操作ではなく、索引の更新がパラレル化されます。

レンジ・パーティションを削除し、その後、削除したパーティションに属していた行を挿入した場合、1つ上位のパーティションに行が格納されます。ただし、そのパーティションが最上位のパーティションである場合、削除したパーティションが表していた値の範囲が表に対して無効になるため、挿入は失敗します。

表パーティションの削除の制限事項: 表パーティションの削除には、次の制限事項があります。

- ハッシュ・パーティション表のパーティションは削除できません。かわりに、coalesce_table_partition句を使用してください。

- 表のすべてのパーティションを削除できません。かわりに表を削除します。

- update_all_indexes_clauseを使用してグローバル索引を更新する場合、副次句ではなくUPDATE INDEXESキーワードのみを指定できます。

- tableが索引構成表の場合や、ローカル・ドメイン索引がtableに定義されている場合は、一度に削除できるパーティションは1つのみになります。

関連項目:
「表のパーティションの削除例:」

drop_table_subpartition

この句を使用すると、レンジ、リスト、またはハッシュ・コンポジット・パーティション表からレンジまたはリスト・サブパーティションを削除できます。削除対象のサブパーティション内の行はすべて削除されます。

subpartition_extended_names句を使用して、1つ以上のサブパーティションを削除するように指定します。複数のサブパーティションを指定する場合は、構文図の上位ブランチに示すようにすべてのサブパーティションを名前で指定するか、構文図の下位ブランチに示すようにFOR句を使用してすべてのサブパーティションを指定する必要があります。両方のタイプの構文を1回の削除操作で使用することはできません。

ローカル索引の対応するサブパーティションは、自動的に削除されます。その他の索引サブパーティションには影響がありません。update_global_index_clauseまたはupdate_all_indexes_clauseを指定しないかぎり、グローバル索引にはUNUSABLEのマークが付けられます。グローバル索引の更新は、メタデータ専用のため、削除操作で削除されるレコードの索引エントリは索引に物理的に格納されたままになります。このような孤立した索引エントリは、ALTER INDEX文またはmodify_index_partition句で、COALESCE CLEANUPを指定すると削除できます。

表サブパーティションの削除の制限事項: 表サブパーティションの削除には、次の制限事項があります。

- ハッシュ・サブパーティションは削除できません。かわりに、MODIFY PARTITION ... COALESCE SUBPARTITION構文を使用してください。

- パーティションのすべてのサブパーティションを削除できません。かわりに、drop_table_partition句を使用してください。

- グローバル索引を更新する場合、update_all_indexes_clauseのオプションの副次句を指定することはできません。

- tableが索引構成表の場合は、一度に削除できるサブパーティションは1つのみになります。

- 複数のサブパーティションを削除する場合、すべてのサブパーティションは同じパーティションにある必要があります。

rename_partition_subpart

rename_partition_subpart句を使用すると、表パーティションまたは表サブパーティションの名前をnew_nameに変更できます。パーティションおよびサブパーティションのどちらの場合も、new_nameは同じ表に存在するすべてのパーティションおよびサブパーティションと異なる値である必要があります。

tableが索引構成されている場合、対応する主キー索引パーティションに、既存のオーバーフロー・パーティションおよびマッピング表パーティションと同じ名前が割り当てられます。

関連項目:
「表のパーティション名の変更例:」

truncate_partition_subpart

TRUNCATE partition_extended_namesを指定すると、partition_extended_namesで指定したパーティションからすべての行を削除することができ、表がコンポジット・パーティション化されている場合は、それらのパーティションのサブパーティションからすべての行が削除されます。個別のサブパーティションからすべての行を削除するには、TRUNCATE subpartition_extended_namesを指定します。tableが索引構成されている場合、対応するすべてのマッピング表のパーティションおよびオーバーフロー領域のパーティションが切り捨てられます。

複数のパーティションを指定する場合は、partition_extended_names構文図の上位ブランチに示すようにすべてのパーティションを名前で指定するか、構文図の下位ブランチに示すようにFOR句を使用してすべてのパーティションを指定する必要があります。両方のタイプの構文を1回の切捨て操作で使用することはできません。subpartition_extended_names句で複数のサブパーティションを指定する場合も同じルールが適用されます。

指定された各パーティションまたはサブパーティションについて、次の事項が適用されます。

- 切り捨てるパーティションまたはサブパーティションにデータが含まれている場合は、まず、その表の参照整合性制約を使用禁止にする必要があります。また、別の方法として、行を削除してからパーティションを切り捨てる方法もあります。

- tableにLOB列が存在する場合、このパーティションのLOBデータおよびLOB索引セグメントも切り捨てられます。tableがコンポジット・パーティション化されている場合、このパーティションのサブパーティションのLOBデータおよびLOB索引セグメントは切り捨てられます。

- tableにパーティション化されているネストした表が含まれる場合、親パーティションに対応するネストした表パーティションが空でないかぎり、親パーティションを切り捨てることはできません。

- tableでドメイン索引が定義されている場合、索引にIN_PROGRESSまたはFAILEDのマークが付いていると無効になります。また、切り捨てられる表パーティションに対応する索引パーティションにIN_PROGRESSのマークが付いていると無効になります。

切り捨てられるそれぞれのパーティションまたはサブパーティションでは、対応するローカル索引パーティションおよびサブパーティションも切り捨てられます。これらの索引パーティションまたはサブパーティションにUNUSABLEのマークが付いている場合、これらは切り捨てられ、UNUSABLEのマークはVALIDにリセットされます。

update_index_clausesを使用し、操作中にtableの索引を更新できます。グローバル索引の更新は、メタデータ専用のため、切捨て操作で削除されるレコードの索引エントリは索引に物理的に格納されたままになります。このような孤立した索引エントリは、ALTER INDEX文またはmodify_index_partition句で、COALESCE CLEANUPを指定すると削除できます。

update_index_clausesとともにparallel_clauseを指定すると、切捨て操作ではなく、索引の更新がパラレル化されます。

DROP STORAGE DROP STORAGEを指定すると、MINEXTENTSパラメータで割り当てられた領域を除き、削除された行からすべての領域の割当てを解除できます。この領域は、後で表領域内の他のオブジェクトで使用できます。

DROP ALL STORAGE DROP ALL STORAGEを指定すると、MINEXTENTSパラメータで割り当てられた領域も含め、削除された行からすべての領域の割当てを解除できます。パーティションまたはサブパーティションのすべてのセグメント、およびそれらの依存オブジェクトのすべてのセグメントも、割当てが解除されます。

DROP ALL STORAGEの制限事項: この句には、「遅延セグメント作成の制限事項」に示されているものと同じ制限事項があります。

REUSE STORAGE REUSE STORAGEを指定すると、削除した行が占有していた領域をパーティションまたはサブパーティションに割り当てることができます。この領域は、そのパーティションまたはサブパーティションに対する、それ以降の挿入および更新のためにのみ使用できます。

CASCADE CASCADEを指定すると、tableに含まれるすべての子の参照パーティション表で、対応するパーティションまたはサブパーティションを切捨てできます。

表パーティションおよびサブパーティションの切捨ての制限事項: 表パーティションおよびサブパーティションの切捨てには、次の制限事項が適用されます。

- update_all_indexes_clauseを使用してグローバル索引を更新する場合、副次句ではなくUPDATE INDEXESキーワードのみを指定できます。

- tableが索引構成表の場合や、ローカル・ドメイン索引がtableに定義されている場合は、一度に切捨てできる表パーティションまたは表サブパーティションは1つのみになります。

関連項目:
「表のパーティションの切捨て例:」

split_table_partition

split_table_partition句を使用すると、partition_extended_nameによって指定されるパーティションから新しいセグメント、物理属性および初期エクステントをそれぞれ含む、複数の新しいパーティションが作成されます。現行パーティションに対応付けられたセグメントは、廃棄されます。

新しいパーティションは、指定されていないすべての物理属性を現行パーティションから継承します。

注意:
一定の条件が満たされると、SPLIT PARTITIONおよびSPLIT SUBPARTITION操作を最適化して処理速度を上げることができます。これらの操作の最適化の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

- DEFAULTのリスト・パーティションを分割すると、最終的な結果のパーティションは、DEFAULTの値を保持するようになります。それ以外の結果のパーティションは、指定した分割値を保持するようになります。

- tableが索引構成表である場合は、対応するマッピング表のパーティションが分割されて、親の索引構成表のパーティションと同じ表領域に配置されます。対応するオーバーフロー領域も分割されるので、OVERFLOW句を使用して新しいオーバーフロー領域のセグメント属性を指定できます。

- tableにLOB列がある場合、LOB_storage_clauseを使用して、分割の結果生成されたLOBデータ・セグメントに対して個々のLOB記憶域属性を指定できます。現行パーティションのLOBデータおよびLOB索引セグメントが削除された後、新しい表領域を指定しなくても、各パーティションの各LOB列に新しいセグメントが作成されます。

- tableにネストした表の列が含まれる場合、split_nested_table_part句を使用して、分割の結果生成されたネストした表セグメントに対して、記憶表名およびセグメント属性を指定できます。現行パーティションのネストした表セグメントが削除された後、各パーティションのネストした表の列ごとに新しいセグメントが作成されます。この句により、親表には、複数レベルのネストした表の列のみでなく、複数のネストした表の列を含めることが可能になります。

対応するローカル索引パーティションにUNUSABLEのマークが付いている場合でも、それらは分割されます。UNUSABLEのマークが付けられ、ユーザーは、分割パーティションに対応するローカル索引パーティションを再構築する必要があります。新しい索引パーティションの属性は、分割されたパーティションから継承されます。新しい索引パーティションは、分割された索引パーティションのデフォルト表領域に格納されます。索引パーティションにデフォルト表領域が定義されていない場合、基礎となる新しい表のパーティションの表領域が使用されます。

AT句 AT句は、レンジ・パーティションにのみ適用されます。この句を使用すると、1つのレンジ・パーティションを2つのレンジ・パーティションに分割できます。新しい2つのパーティションのうちの最初の方に、新しい上限(境界を含まない)を指定します。値リストは、現行パーティションの元のパーティション境界より小さく、その次に小さいパーティション(そのようなパーティションがある場合)のパーティション境界より大きい値にする必要があります。

VALUES句 VALUES句は、リスト・パーティションにのみ適用されます。この句を使用すると、1つのリスト・パーティションを2つのリスト・パーティションに分割できます。新しい2つのパーティションのうち、最初のものに含めるパーティション値を指定します。新しいパーティションのうち、最初のものは指定のパーティション値リストを使用して作成され、2つ目のパーティションは、現行パーティションの残りのパーティション値を使用して作成されます。このため、値リストには現行パーティションのすべてのパーティション値を含めることはできません。また、現行パーティションに存在しないパーティション値も含めることはできません。

INTO句 INTO句を使用すると、分割の結果生成される新しいパーティションについて記述できます。

- AT ... INTO句を使用すると、1つのレンジ・パーティションを2つのレンジ・パーティションに分割することによって生成されるパーティションについて記述できます。range_partition_descには、分割の結果としての2つのパーティションについて、オプションの名前と物理属性の指定を省略している場合でも、キーワードPARTITIONが必要になります。新しいパーティション名を指定しない場合、SYS_Pnという形式の名前が割り当てられます。指定しないすべての属性は、現行パーティションから継承されます。

- VALUES ... INTO句を使用すると、1つのリスト・パーティションを2つのリスト・パーティションに分割することによって生成されるパーティションについて記述できます。list_partition_descには、分割の結果としての2つのパーティションについて、オプションの名前と物理属性の指定を省略している場合でも、キーワードPARTITIONが必要になります。新しいパーティション名を指定しない場合、SYS_Pnという形式の名前が割り当てられます。指定しないすべての属性は、現行パーティションから継承されます。

- INTO句を使用すると、1つのレンジ・パーティションを2つ以上のレンジ・パーティションに分割できます。または、1つのリスト・パーティションを2つ以上のリスト・パーティションに分割できます。新しいパーティション名を指定しない場合、SYS_Pnという形式の名前が割り当てられます。指定しないすべての属性は、現行パーティションから継承されます。

- 各レンジ・パーティションは、それらのパーティション境界を昇順で指定する必要があります。最初に指定するレンジ・パーティションのパーティション境界は、その次に低いパーティションが表内に存在する場合、そのパーティション境界よりも大きくする必要があります。最後のレンジ・パーティションのパーティション境界は指定できません。これは、現在のパーティションのパーティション境界を継承します。

- リスト・パーティションの場合は、新しいパーティションに指定されたすべてのパーティション値が、現在のパーティション内に存在する必要があります。最後のパーティションには、パーティション値を指定できません。Oracle Databaseは、残りのパーティション値を使用して、現在のパーティションから最後のパーティションを作成します。

レンジ-ハッシュ・コンポジット・パーティション表の場合、新しいパーティションにサブパーティションを指定するとき、サブパーティションに対してTABLESPACEおよび表の圧縮のみを指定できます。他のすべての属性は、現行パーティションから継承されます。新しいパーティションにサブパーティション化を指定しない場合は、表領域も現行パーティションから継承されます。

レンジ-リストおよびリスト-リスト・コンポジット・パーティション表の場合、新しいパーティションにサブパーティションを指定できません。分割パーティションのリスト・サブパーティションでは、サブパーティションの数および値リストは現行パーティションから継承されます。

新しく作成したサブパーティションに対して名前を指定しなかったすべてのコンポジット・パーティション表では、次のように名前が親パーティションから継承されます。

- 親パーティション内のサブパーティションがpartition_nameアンダースコア(_)subpartition_nameという形式の名前(たとえば、P1_SUBP1)を持つ場合、新しいパーティション名に基づいて、サブパーティションの名前が生成されます(たとえば、P1A_SUB1やP1B_SUB1)。

- 親パーティション内のサブパーティションがその他の形式の名前を持つ場合、SYS_SUBPnという形式のサブパーティション名が生成されます。

索引にUNUSABLEのマークが付いている場合でも、tableで定義されている各ローカル索引の対応するパーティションが分割されます。

ヒープ構成表のすべての索引が無効になります。update_index_clausesを使用し、操作中にこれらの索引を更新できます。

tableが参照パーティション表の親表の場合は、dependent_tables_clauseを使用して、この文に指定するパーティション・メンテナンス操作を参照パーティション表のすべての子表に伝播できます。

parallel_clauseを使用すると、表のデフォルトのパラレル属性を変更せずに、分割操作をパラレル化できます。

表パーティションの分割の制限事項: 表パーティションの分割には、次の制限事項が適用されます。

- この句は、ハッシュ・パーティションには指定できません。

- parallel_clauseは、索引構成表には指定できません。

- tableが索引構成表の場合や、ローカル・ドメイン索引がtableに定義されている場合は、パーティションは2つの新しいパーティションにのみ分割可能です。

関連項目:
「表パーティションの分割例:」

split_table_subpartition

この句を使用すると、1つのサブパーティションを、重複しない値リストを持つ複数の新しいサブパーティションに分割できます。

注意:
一定の条件が満たされると、SPLIT PARTITIONおよびSPLIT SUBPARTITION操作を最適化して処理速度を上げることができます。これらの操作の最適化の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

AT句 AT句は、レンジ・サブパーティションに対してのみ有効です。新しい2つのサブパーティションのうちの1つ目に、新しく上限(この値は含まない)を指定します。値リストは、subpartition_extended_nameで指定されるサブパーティションの元のサブパーティション境界より小さく、その次に小さいサブパーティション(そのようなパーティションがある場合)のパーティション境界より大きい値にする必要があります。

VALUES句 VALUES句が有効であるのは、リスト・サブパーティションに対してのみです。指定したサブパーティション値は、新しい2つのサブパーティションのうち最初のものに使用されます。NULLを指定できるのは、まだ同じパーティション内の別のサブパーティションに対してNULLが指定されていない場合です。新しいサブパーティションのうち、最初のものは指定のサブパーティション値リストを使用して作成され、2つ目のパーティションは、現行サブパーティションの残りのパーティション値を使用して作成されます。このため、値リストには現行のサブパーティションのすべてのパーティション値を含めることはできません。また、現行のサブパーティションに存在しないパーティション値も含めることはできません。

INTO句 INTO句を使用すると、分割の結果生成される新しいサブパーティションについて記述できます。

- AT ... INTO句を使用すると、1つのレンジ・パーティションを2つのレンジ・パーティションに分割することによって生成される2つのサブパーティションについて記述できます。2つの新しいサブパーティションのオプションの名前と属性を指定しない場合でも、range_subpartition_descには、キーワードSUBPARTITIONが必要になります。新しいサブパーティションの名前を省略すると、Oracle Databaseは、SYS_SUBPnの形式の名前を割り当てます。指定されていない属性があると、その属性は現在のサブパーティションから継承されます。

- VALUES ... INTO句を使用すると、1つのリスト・パーティションを2つのリスト・パーティションに分割することによって生成される2つのサブパーティションについて記述できます。2つの新しいサブパーティションについてのオプションの名前と属性を指定しない場合でも、list_subpartition_descには、キーワードSUBPARTITIONが必要になります。新しいサブパーティションの名前を省略すると、Oracle Databaseは、SYS_SUBPnの形式の名前を割り当てます。指定されていない属性があると、その属性は現在のサブパーティションから継承されます。

- INTO句を使用すると、1つのレンジ・サブパーティションを2つ以上のレンジ・サブパーティションに分割できます。または、1つのリスト・サブパーティションを2つ以上のリスト・サブパーティションに分割できます。新しいサブパーティション名を指定しない場合、SYS_SUBPnという形式の名前が割り当てられます。指定しないすべての属性は、現行のサブパーティションから継承されます。

- 各レンジ・サブパーティションは、それらのサブパーティション境界を昇順で指定する必要があります。最初に指定するレンジ・サブパーティションのサブパーティション境界は、その次に低いサブパーティションが存在する場合、そのサブパーティション境界よりも大きくする必要があります。最後のレンジ・サブパーティションのサブパーティション境界は指定できません。これは、現在のサブパーティションのパーティション境界を継承します。

- リスト・サブパーティションの場合は、新しいサブパーティションに指定されたすべてのサブパーティション値が、現在のサブパーティション内に存在する必要があります。最後のサブパーティションには、サブパーティション値を指定できません。Oracle Databaseは、残りのパーティション値を使用して、現在のサブパーティションから最後のサブパーティションを作成します。

対応するローカル索引サブパーティションにUNUSABLEのマークが付いている場合でも、それらは分割されます。新しい索引サブパーティションに名前があらかじめ指定されていないかぎり、新しい表のサブパーティションの名前が継承されます。この場合、SYS_SUBPnという形式の新しい索引サブパーティション名が割り当てられます。新しい索引サブパーティションの物理属性は、親サブパーティションから継承されます。親サブパーティションにデフォルトのTABLESPACE属性が定義されていない場合、対応する新しい表のサブパーティションの表領域が継承されます。

ヒープ構成表の索引が無効になります。update_index_clausesを使用し、これらの索引を更新できます。

表サブパーティションの分割の制限事項: 表サブパーティションの分割には、次の制限事項があります。

- この句は、ハッシュ・サブパーティションに対して指定できません。

- サブパーティションの定義で指定できるpartitioning_storage_clauseの句は、TABLESPACEおよび表の圧縮のみです。

- parallel_clauseは、索引構成表には指定できません。

- tableが索引構成表の場合は、そのサブパーティションは2つの新しいサブパーティションにのみ分割可能です。

merge_table_partitions

merge_table_partitions句を使用すると、tableの2つ以上のレンジ・パーティション、リスト・パーティション、またはシステム・パーティションの内容を1つの新しいパーティションにマージして、元のパーティションを削除できます。この句はハッシュ・パーティションでは無効です。かわりに、coalesce_table_partition句を使用してください。

マージする2つ以上のレンジ・パーティション、リスト・パーティション、またはシステム・パーティションのカンマ区切りリストを指定します。TO句を使用すると、マージする2つ以上の隣接しているレンジ・パーティションを指定できます。

各パーティションに、partitionを使用してパーティション名を指定するか、またはFOR句を使用して名前なしでパーティションを指定します。FOR句の詳細は、「パーティション表と索引の参照」を参照してください。

- マージするパーティションは、隣接している必要があり、そのパーティションがレンジ・パーティションの場合は、パーティション境界を昇順で指定する必要があります。リスト・パーティションおよびシステム・パーティションをマージする場合は、隣接している必要はありません。

- レンジ・パーティションをマージすると、新しいパーティションは、元のパーティションのうち上位のパーティションのパーティション境界を継承します。

- リスト・パーティションをマージする場合、結果のパーティションの値リストは、マージされるパーティションの値リストの集合をあわせたものです。DEFAULTのリスト・パーティションを別のリスト・パーティションとマージすると、結果のパーティションはDEFAULTパーティションになり、DEFAULT値が含まれます。

- コンポジット・レンジ・パーティションまたはコンポジット・リスト・パーティション、レンジ-リストまたはリスト-リスト・コンポジット・パーティションをマージする場合、サブパーティションの定義は指定できません。サブパーティション化情報は、サブパーティション・テンプレートから取得できます。サブパーティションのテンプレートが指定されていない場合は、1つのMAXVALUEサブパーティションがレンジ・サブパーティションから、または1つのDEFAULTサブパーティションがリスト・サブパーティションから作成されます。

新しいパーティションに対して明示的に指定しなかった属性は、表レベルのデフォルトから継承されます。ただし、新しいパーティションに対してパーティション名を再利用すると、表レベルのデフォルト値ではなく、名前が再利用されたパーティションの値が新しいパーティションに継承されます。

選択したパーティションに対応するローカル索引パーティションは削除され、マージされたパーティションに対応するローカル索引パーティションにUNUSABLEのマークが付けられます。ヒープ構成表のすべてのグローバル索引にも、UNUSABLEのマークが付けられます。update_index_clausesを使用し、操作中にこれらすべての索引を更新できます。

tableが参照パーティション表の親表の場合は、dependent_tables_clauseを使用して、この文に指定するパーティション・メンテナンス操作を参照パーティション表のすべての子表に伝播できます。

表パーティションをマージする場合の制限事項: tableが索引構成表の場合や、ローカル・ドメイン索引がtableに定義されている場合は、一度にマージできるパーティションは2つのみになります。

関連項目:
「2つの表パーティションのマージ例:」、「隣接する4つのレンジ・パーティションのマージ例:」、および「デフォルト・リスト・パーティションの使用例:」

merge_table_subpartitions

merge_table_subpartitions句を使用すると、tableの2つ以上のレンジ・サブパーティションまたはリスト・サブパーティションの内容を1つの新しいサブパーティションにマージして、元のサブパーティションを削除できます。この句はハッシュ・サブパーティションでは無効です。かわりに、coalesce_hash_subpartition句を使用してください。

マージする2つ以上のレンジ・サブパーティション、またはリスト・サブパーティションのカンマ区切りリストを指定します。TO句を使用すると、マージする2つ以上の隣接しているレンジ・サブパーティションを指定できます。

各サブパーティションに、subpartitionを使用してサブパーティション名を指定するか、またはFOR句を使用して名前なしでサブパーティションを指定します。FOR句の詳細は、「パーティション表と索引の参照」を参照してください。

マージされるサブパーティションは、同じパーティションに属している必要があります。レンジ・サブパーティションである場合は、隣接している必要があります。リスト・サブパーティションである場合は、隣接している必要はありません。マージの結果生成されるサブパーティション内のデータは、マージされたサブパーティションのデータが結合されたものです。

INTO句を指定する場合、range_subpartition_descまたはlist_subpartition_descで、それぞれrange_values_clauseまたはlist_values_clauseを指定することはできません。また、partitioning_storage_clauseに指定できる句は、TABLESPACEおよびtable_compressionのみです。

新しいサブパーティションに対して明示的に指定しなかった属性は、パーティション・レベルの値から継承されます。ただし、新しいサブパーティションに対してサブパーティション名を再利用すると、パーティション・レベルのデフォルト値ではなく、名前が再利用されたサブパーティションの値が新しいサブパーティションに継承されます。

対応するローカル索引のサブパーティションがマージされ、結果として生成される索引サブパーティションにはUNUSABLEのマークが付けられます。また、ヒープ構成表のパーティション化されたグローバル索引とパーティション化されていないグローバル索引の両方に対して、UNUSABLEのマークが付けられます。update_index_clausesを使用すると、操作中にすべての索引を更新できます。

表サブパーティションのマージの制限事項: tableが索引構成表の場合は、一度にマージできるサブパーティションは2つのみになります。

exchange_partition_subpart

EXCHANGE PARTITION句またはEXCHANGE SUBPARTITION句を使用すると、次のデータおよび索引セグメントを交換できます。

- 1つの非パーティション表と、次のいずれかを交換できます。

- 1つのレンジ・パーティション、リスト・パーティションまたはハッシュ・パーティション

- 1つのレンジ・サブパーティション、リスト・サブパーティションまたはハッシュ・サブパーティション

- 1つのレンジ・パーティション表とレンジ-レンジまたはリスト-レンジ・コンポジット・パーティション表パーティションのレンジ・サブパーティション

- 1つのハッシュ・パーティション表とレンジ-ハッシュまたはリスト-ハッシュのコンポジット・パーティション表パーティションのハッシュ・サブパーティション

- 1つのリスト・パーティション表とレンジ-リストまたはハッシュ-リストのコンポジット・パーティション表パーティションのリスト・サブパーティション

交換対象の表、パーティションおよびサブパーティションの構造は、パーティション・キーを含め常に同じである必要があります。リスト・パーティションとリスト・サブパーティションの場合、対応する値リストも一致している必要があります。

この句をトランスポータブル表領域とともに使用すると、高速データ・ロードが容易になります。

関連項目:
トランスポータブル表領域の詳細は、『Oracle Database管理者ガイド』を参照してください。

tableにLOB列がある場合、各LOB列のLOBデータ、およびLOB索引パーティション・セグメントまたはLOB索引サブパーティション・セグメントは、tableの対応するLOBデータおよびLOB索引セグメントと交換されます。

tableにネストした表の列が含まれる場合、そのような各列のネストした表パーティション・セグメントは、非パーティション表の対応するネストした表セグメントと交換されます。

tableにID列が格納されている場合、パーティションまたはサブパーティションが交換されることになります。その逆も同様になります。順序ジェネレータは、増加または減少になります。順序ジェネレータは交換されないため、tableとパーティションまたはサブパーティションは、同じ順序ジェネレータを引き続き使用することになります。両方の順序ジェネレータの最高水位標は、新しいID列の値が既存の値と競合しないようにが調整されます。

2つのオブジェクトのすべてのセグメント属性(表領域およびロギングを含む)も交換されます。

パーティション表に交換される表の既存の統計情報は、交換されます。ただし、パーティション化された表のグローバル統計は変更されません。DBMS_STATS.GATHER_TABLE_STATSプロシージャを使用すると、グローバル統計を再作成できます。GRANULARITY属性をAPPROX_GLOBAL AND PARTITIONと同じに設定して、処理速度を上げ、既存のパーティション統計に基づいて新しいグローバル統計情報を集計できます。このパッケージ・プロシージャの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

交換されるオブジェクトのすべてのグローバル索引は、無効になります。update_global_index_clauseまたはupdate_all_indexes_clauseを使用し、パーティションが交換された表のグローバル索引を更新できます。update_all_indexes_clauseには、副次句ではなくUPDATE INDEXESキーワードのみを指定できます。交換される表のグローバル索引は、無効のままになります。update_global_index_clauseおよびupdate_all_indexes_clauseは、交換操作中にローカル索引を更新しません。INCLUDING | EXCLUDING INDEXES句を使用して、ローカル索引メンテナンスを指定できます。これらの句とともにparallel_clauseを指定すると、交換操作ではなく、索引の更新がパラレル化されます。

関連項目:
「パーティションまたはサブパーティションの交換の注意事項:」

WITH TABLE パーティションまたはサブパーティションを交換する表を指定します。schemaを指定しない場合、その表は自分のスキーマ内にあるとみなされます。

INCLUDING | EXCLUDING INDEXES INCLUDING INDEXESを指定すると、ローカル索引パーティションまたはサブパーティションを対応する表索引(非パーティション表の場合)またはローカル索引(ハッシュ・パーティション化表の場合)と交換できます。EXCLUDING INDEXESを指定すると、交換された表のすべての標準索引、索引パーティションおよびパーティションに対応するすべての索引パーティションまたはサブパーティションにUNUSABLEのマークを付けることができます。この句を指定しない場合、EXCLUDING INDEXESがデフォルトになります。

WITH | WITHOUT VALIDATION WITH VALIDATIONを指定すると、交換された表にあるいずれかの行が交換されたパーティションまたはサブパーティションにマップされない場合にエラーが戻されます。WITHOUT VALIDATIONを指定すると、交換された表にある行が正しくマップされたかどうかがチェックされません。この句を指定しない場合、WITH VALIDATIONがデフォルトになります。

exceptions_clause  この句の詳細は、「制約の例外の処理」を参照してください。パーティション交換のコンテキストでは、この句は、パーティション表がUNIQUE制約を使用して定義されている場合にのみ有効です。また、制約はDISABLE VALIDATEの状態である必要があります。この句は、サブパーティションではなくパーティション交換に対してのみ有効です。

CASCADE CASCADEを指定すると、tableに含まれるすべての子の参照パーティション表で、対応するパーティションまたはサブパーティションを交換できます。参照パーティション表の階層は、ソースとターゲットで一致している必要があります。

CASCADEの制限事項: 参照パーティション表階層の親キーが、複数のパーティション化の制約で参照されている場合、CASCADEは指定できません。

関連項目:

- SQLスクリプトの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』のDBMS_IOTパッケージを参照してください。

- 移行行および連鎖行の削除については、『Oracle Database管理者ガイド』を参照してください。

- 制約の確認の詳細は、「constraint」および「索引構成表の例外表の作成例:」を参照してください。

パーティションまたはサブパーティションの交換の注意事項: パーティションとサブパーティションの交換時には、次の点に注意します。

- 交換される両方の表は同じ主キーを含む必要があり、参照表が空でないかぎり、どちらの表も有効な外部キーを参照できません。

- パーティション化された索引構成表の交換時には、次の点に注意します。

- ソースおよびターゲットの表およびパーティションは、その主キーが同じ列に同じ順序で設定されている必要があります。

- 接頭辞圧縮が使用可能な場合は、ソースおよびターゲットの両方で使用可能で、接頭辞の長さは同じである必要があります。

- ソースおよびターゲットの両方は、索引構成されている必要があります。

- ソースおよびターゲットの両方に、オーバーフロー・セグメントが必要です。または、ソースおよびターゲットの両方がオーバーフロー・セグメントを持ってはいけません。また、ソースおよびターゲットの両方ともマッピング表を含むか、または両方とも含まない必要があります。

- ソースおよびターゲットの両方は、LOB列に対して記憶域属性が同一である必要があります。

関連項目:
「表パーティションの交換例:」

dependent_tables_clause

この句は、参照パーティション表の親表を変更する場合にのみ有効です。この句では、親表の子の参照パーティション表の操作によって作成されるパーティションの属性を指定できます。

- 親表がコンポジット・パーティションではない場合、1つ以上の子表を指定し、子表ごとに、親表内に作成された各パーティションの1つのpartition_specを指定します。

- 親表がコンポジットの場合、1つ以上の子表を指定し、子表ごとに、親表内に作成された各サブパーティションの1つのpartition_specを指定します。

関連項目:
参照パーティション表の作成の詳細は、「CREATE TABLE」の句「reference_partitioning」を参照してください。参照によるパーティション化の概要は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

UNUSABLE LOCAL INDEXES句

この2つの句を使用すると、パーティションとサブパーティションのどちらを変更するかに応じて、partitionに対応するローカル索引パーティションおよび索引サブパーティションの属性を変更できます。

- UNUSABLE LOCAL INDEXESを指定すると、partitionに関連付けられたローカル索引パーティションまたは索引サブパーティションに、UNUSABLEのマークが付けられます。

- REBUILD UNUSABLE LOCAL INDEXESを指定すると、partitionに関連付けられたUNUSABLEのローカル索引パーティションまたは索引サブパーティションが再構築されます。

UNUSABLE LOCAL INDEXES句の制限事項: この句には、次の制限事項があります。

- この句をmodify_table_partitionの他の句と同時に指定することはできません。

- サブパーティションが含まれるパーティションに対しては、modify_table_partitionでこの句を指定できません。ただし、modify_table_subpartition句では指定できます。

update_index_clauses

update_index_clausesを使用すると、表のパーティション化操作の一部としてtableの索引を更新できます。表パーティションでDDL文を実行する場合、tableに索引が定義されていると、DDL文を実行中のパーティションだけでなく索引全体が無効になります。この句を使用すると、変更する索引パーティションをDDL操作中に更新できるため、DDL文の後で索引を再構築する必要がなくなります。

パーティション化された索引構成表では、update_index_clausesは不要であり、無効です。索引構成表は主キー・ベースであるため、値を変更せずにデータを移動する操作では、グローバル索引はUSABLEのままです。

update_global_index_clause

この句を指定すると、tableのグローバル索引のみを更新できます。tableのすべてのローカル索引には、UNUSABLEのマークが付けられます。

UPDATE GLOBAL INDEXES UPDATE GLOBAL INDEXESを指定すると、tableで定義したグローバル索引を更新できます。

グローバル索引の更新の制限事項: グローバル索引がLOB列のグローバル・ドメイン索引として定義されている場合、ドメイン索引は、更新されるのではなくUNUSABLEのマークが付けられます。

INVALIDATE GLOBAL INDEXES INVALIDATE GLOBAL INDEXESを指定すると、tableで定義したグローバル索引を無効にできます。

どちらも指定しない場合、グローバル索引は無効になります。

グローバル索引の無効化の制限事項 この句がサポートされるのは、グローバル索引に対してのみです。索引構成表に対してはサポートされません。また、この句によって更新されるのは、USABLEおよびVALIDの索引のみです。UNUSABLEの索引は使用禁止のままになり、INVALIDのグローバル索引は無視されます。

update_all_indexes_clause

この句を使用すると、tableのすべての索引を更新できます。

update_index_partition この句は、表パーティションの操作に対してのみ有効で、ローカル索引にのみ影響を与えます。

- index_partition_descriptionを使用すると、各ローカル索引のそれぞれのパーティションの物理属性、表領域の記憶域およびロギングを指定できます。PARTITIONキーワードのみを指定すると、索引のパーティションは次のように更新されます。

- 単一の表パーティションに対する操作(MOVE PARTITION、SPLIT PARTITIONなど)の場合、対応する索引パーティションは処理された索引表パーティションの属性を継承します。索引パーティションの名前は生成されないため、この操作によって作成された新しい索引パーティションは、対応する新しい表パーティションから名前を継承します。

- MERGE PARTITION操作の場合、この操作によって作成されたローカル索引パーティションは、作成された表パーティションの名前とローカル索引の属性を継承します。

ドメイン索引の場合、PARAMETERS句を使用すると、未解析のまま適切なODCI索引タイプ・ルーチンに渡すパラメータ文字列を指定できます。PARAMETERS句は、ドメイン索引に対してのみ有効であり、ドメイン索引について指定できるindex_partition_descriptionの唯一の部分です。

関連項目:
ドメイン索引の詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。

- コンポジット・パーティション索引の場合、index_subpartition_clauseを使用すると、各サブパーティションに対して表領域の記憶域を指定できます。update_index_partition句のこのコンポーネントの詳細は、「CREATE INDEX」の「index_subpartition_clause」を参照してください。

USABLEキーワードとUNUSABLEキーワードの詳細は、ALTER INDEX ... USABLE | UNUSABLEを参照してください。

update_index_subpartition この句が有効であるのは、操作の対象がコンポジット・パーティション表のサブパーティションの場合のみであり、この句の影響を受けるのはコンポジット・パーティション表のローカル索引のみです。1つ以上のサブパーティションに対して、格納する表領域を指定できます。

すべての索引の更新の制限事項 次の制限事項は、update_all_indexes_clauseに適用されます。

- この句は、索引構成表に対して指定できません。

- exchange_partition_subpart句を使用してパーティションまたはサブパーティションを交換する場合、update_all_indexes_clauseは、グローバル索引にのみ適用可能です。このため、update_index_partitionまたはupdate_index_subpartition句を指定できません。ただし、INCLUDING | EXCLUDING INDEXES句を使用して、交換操作中にローカル索引メンテナンスを指定できます。

関連項目:
「グローバル索引の更新例:」および「パーティション索引の更新例:」を参照してください。

parallel_clause

parallel_clauseを使用すると、表の問合せおよびDMLに対するデフォルトの並列度を変更できます。

この句の詳細は、「CREATE TABLE」の「parallel_clause」を参照してください。

表の並列化の変更の制限事項: 表の並列化の変更には、次の制限事項があります。

- tableにLOB型またはユーザー定義オブジェクト型の列が含まれている場合、このtableでのINSERT、UPDATEおよびDELETEは、通知なしに逐次実行されます。ただし、後続の問合せはパラレルで実行されます。

- parallel_clauseをmove_table_clauseと組み合せて指定する場合、このパラレル化は移動のみに適用され、後続の表でのDML操作および問合せには適用されません。

関連項目:
「パラレル処理の指定例:」

allow_disallow_clustering

この句は、属性クラスタリングを使用する表に有効です。move_table_clauseで指定された表の移動操作とcoalesce_table_[sub]partition、merge_table_[sub]partitions、move_table_[sub]partitionおよびsplit_table_[sub]partition句で指定された表のパーティションおよびサブパーティション・メンテナンス操作中に発生するデータ移動の属性クラスタリングを許可または禁止できます。

- ALLOW CLUSTERINGを指定して、データ移動の属性クラスタリングを許可します。この句は、表を作成または変更したDDLのNO ON DATA MOVEMENT設定をオーバーライドします。

- DISALLOW CLUSTERINGを指定して、データ移動の属性クラスタリングを禁止します。この句は、表を作成または変更したDDLのYES ON DATA MOVEMENT設定をオーバーライドします。

属性クラスタリングを使用しない表に指定する場合、allow_disallow_clustering句は影響しません。

関連項目:
NO ON DATA MOVEMENTおよびYES ON DATA MOVEMENT句の詳細は、CREATE TABLEのclustering_when句を参照してください。

move_table_clause

move_table_clauseを使用すると、非パーティション表のデータまたはパーティション表のパーティションのデータを新しいセグメントに再配置できます。オプションとして、別の表領域への配置および記憶域属性の変更を行うこともできます。

LOB_storage_clause句およびvarray_col_properties句を使用して、表またはパーティションに関連付けられたLOBデータ・セグメントを移動することもできます。この句で指定していないLOB項目は移動できません。

表を別の表領域に移動する場合、COMPATIBLEパラメータが10.0以上に設定されていると、ネストした表の列に対する記憶表は、その表が作成された表領域に残ります。COMPATIBLEが10.0未満に設定されている場合、表と記憶表は新しい表領域に自動的に移動します。

ONLINE句 この句は、トップレベルの索引構成表、および索引構成済のネストした表の記憶表に対してのみ有効です。ONLINEを指定すると、表の主キー索引の再構築中に、索引構成表に対するDML操作を実行できます。

表のオンライン化の制限事項: 表のオンライン化には、次の制限事項があります。

- 同じ文でこの句と他の句は結合できません。

- この句は、パーティション化された索引構成表に対して指定できません。

- パラレルDMLおよびダイレクト・パスINSERT操作は、表に対する排他的ロックを必要とします。したがって、ロックが競合するため、これらの操作は実行中のオンライン表MOVEと同時にサポートされません。

- 索引構成表にLOB、VARRAY、Oracleが提供する型またはユーザー定義オブジェクト型の列が含まれている場合には、この句は指定できません。

index_org_table_clause

索引構成表の場合は、move_table_clauseのindex_org_table_clauseを使用するとオーバーフロー・セグメント属性も指定できます。move_table_clauseを指定すると、索引構成表の主キー索引が再構築されます。オーバーフロー・データ・セグメントは、OVERFLOWキーワードが明示的に指定されていないかぎり、再構築されません。ただし、次の場合は例外です。

- ALTER TABLE文の一部としてPCTTHRESHOLDの値またはINCLUDING列を変更する場合は、オーバーフロー・データ・セグメントが再構築されます。

- 索引構成表内の表外列(LOB列、VARRAY列、ネストした表の列)のいずれかを明示的に移動する場合は、オーバーフロー・データ・セグメントも再構築されます。

LOB列の索引およびデータ・セグメントは、LOB列をALTER TABLE文の一部として明示的に指定しないかぎり、再構築されません。

mapping_table_clause MAPPING TABLEを指定すると、マッピング表が存在していない場合にマッピング表を作成できます。マッピング表がすでに存在する場合、マッピング表は索引構成表とともに移動され、すべてのビットマップ索引にはUNUSABLEのマークが付けられます。新しいマッピング表は、親表と同じ表領域に作成されます。

NOMAPPINGを指定すると、既存のマッピング表が削除されます。

この句の詳細は、「CREATE TABLE」の「mapping_table_clauses」を参照してください。

表のマッピングの制限事項: tableでビットマップ索引が定義されている場合は、NOMAPPINGを指定できません。

prefix_compression prefix_compression句を使用すると、索引構成表の接頭辞圧縮を使用可能または使用禁止にできます。

- COMPRESSを指定すると、接頭辞圧縮が使用可能になり、その結果、索引構成表における主キー列の値が重複しなくなります。integerを使用して、接頭辞の長さ(圧縮する接頭辞列数)を指定します。
接頭辞の長さの有効範囲は、1から(主キー列数-1)までです。デフォルトでは(主キー列数-1)になります。

- NOCOMPRESSを指定すると、索引構成表での接頭辞圧縮が使用禁止になります。これはデフォルトです。

TABLESPACE tablespace 再構築した索引構成表を格納する表領域を指定します。

LOB_storage_clause この句を使用すると、LOBセグメントを別の表領域に移動できます。表にLONG列が含まれている場合は、この句を使用してLOBセグメントを移動することはできません。かわりに、LONG列をLOBに変換するか、または表をエクスポートし、LOB列に必要な表領域の記憶域を指定する表を再作成して表データを再インポートする必要があります。

表の移動の制限事項: 表の移動には、次の制限事項があります。

- MOVEを指定する場合は、ALTER TABLE文の最初の句にする必要があります。この句以外では、physical_attributes_clause、parallel_clauseおよびLOB_storage_clauseのみが指定できます。

- LONGまたはLONG RAW列を含む表は、移動できません。

- パーティション表(ヒープ表または索引構成表)全体の移動はできません。個々のパーティションまたはサブパーティションを移動してください。

LOBについての注意:
move_table_clauseで指定するすべてのLOB列については、次のことに注意してください。

- 新しい表領域が指定されていない場合でも、古いLOBデータ・セグメントとこれに対応する索引セグメントは削除され、新しいセグメントが作成されます。

- tableのLOB索引がそのLOBデータと異なる表領域にある場合、移動後のLOB索引は、LOBデータと同じ表領域にまとめて格納されます。

関連項目:
「move_table_partition」および「move_table_subpartition」を参照してください。

modify_opaque_type

modify_opaque_type句を使用すると、指定した抽象データ型またはXMLTypeをアンパック記憶域を使用してANYDATA列に格納するようにデータベースに指示できます。

この句には、任意の抽象データ型を指定できます。ただし、従来型の記憶域を使用することではANYDATA列に格納できない、次のデータ型を指定できることが主な利点になります。

- XMLType

- XMLType型、CLOB型、BLOB,型、またはNCLOB型の1つ以上の属性を含む抽象データ型。

アンパック記憶域を使用すると、データ型は、ANYDATA列に関連付けられたシステム生成の非表示列に格納されます。これらのデータ型は、従来型記憶域を使用してANYDATA列に格納されたデータ型と同じように挿入および問合せできます。

anydata_column ANYDATA型の列の名前を指定します。type_nameが、XMLType型、CLOB型、BLOB型、またはNCLOB型の属性を含まない抽象データ型の場合、anydata_columnは空にする必要があります。

type_name 1つ以上の抽象データ型またはXMLTypeの名前を指定します。この抽象データ型には、XMLType型、CLOB型、BLOB型、またはNCLOB型の属性を含めることができます。この型は、EDITIONABLEにすることができます。これらのデータ型を、その後でanydata_columnに挿入すると、そのデータ型はアンパック記憶域を使用するようになります。この句を以前に同一のanydata_columnに指定していた場合、以前に指定したデータ型と新しく指定したデータ型に、アンパック記憶域が引き続き使用されます。

関連項目:
ANYDATA型の詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』と「ANYDATA列のアンパック記憶域の例:」を参照してください。

enable_disable_clause

enable_disable_clauseを使用すると、Oracle Databaseが整合性制約を適用するかどうか、およびその方法を指定できます。DROPおよびKEEP句は、一意制約または主キー制約を使用禁止にする場合のみに有効です。

関連項目:

- この句の詳細、関連する注意および制限事項については、「CREATE TABLE」の「enable_disable_clause」を参照してください。

- 索引の使用方法と制約の適用方法の詳細は、「索引による制約の適用」を参照してください。

TABLE LOCK DDL操作中にロックされた表にのみDDL操作を実行できます。このような表ロックは、DML操作中は必要ありません。

注意:
一時表に表ロックを適用することはできません。

- ENABLE TABLE LOCKを指定すると、表ロックが有効になり、表に対するDDL操作が実行可能になります。現在実行中のすべてのトランザクションは、表ロックが有効になる前にコミットまたはロールバックする必要があります。

注意:
Oracle Databaseは、表をロックする前に、データベース内のアクティブなDMLトランザクションが完了するまで待機します。その結果、遅延が生じる可能性があることに注意してください。

- DISABLE TABLE LOCKを指定すると、表ロックが無効になり、表に対するDDL操作が実行できなくなります。

注意:
ターゲット表の表ロックが使用禁止の場合、パラレルDML操作は実行されません。

ALL TRIGGERS ALL TRIGGERS句を使用すると、表に関連するすべてのトリガーを使用可能または使用禁止にできます。

- ENABLE ALL TRIGGERSを指定すると、表に関連するすべてのトリガーが使用可能になります。トリガー条件が満たされた場合に、トリガーが起動されます。
1つのトリガーを使用可能にする場合は、ALTER TRIGGERのenable_clauseを使用してください。

関連項目:
「CREATE TRIGGER」、「ALTER TRIGGER」および「トリガーを使用可能にする例:」を参照してください。

- DISABLE ALL TRIGGERSを指定すると、表に関連するすべてのトリガーが使用禁止になります。トリガー条件が満たされた場合でも、使用禁止のトリガーは起動されません。

例

コレクションの取出し例: 次の文は、サンプル表sh.print_mediaのネストした表の列ad_textdocs_ntabを変更し、問合せ時にロケータのかわりに実値を戻します。

ALTER TABLE print_media MODIFY NESTED TABLE ad_textdocs_ntab
RETURN AS VALUE;

パラレル処理の指定例: 次の文は、サンプル表oe.customersへの問合せに対してパラレル処理を指定します。

ALTER TABLE customers
PARALLEL;

制約状態の変更例: 次の文は、employees表のemp_manager_fkという名前の整合性制約をENABLE VALIDATE状態にします。

ALTER TABLE employees
ENABLE VALIDATE CONSTRAINT emp_manager_fk
EXCEPTIONS INTO exceptions;

Oracle Databaseが制約を使用可能にするためには、employees表の各行がこの制約を満たしている必要があります。制約に違反する行があれば、制約は使用禁止のままになります。すべての例外は、exceptions表に記述されます。次の文で、employees表の例外を検出することもできます。

SELECT e.*
FROM employees e, exceptions ex
WHERE e.rowid = ex.row_id
AND ex.table_name = 'EMPLOYEES'
AND ex.constraint = 'EMP_MANAGER_FK';

次の文は、employees表の2つの制約をENABLE NOVALIDATE状態にします。

ALTER TABLE employees
ENABLE NOVALIDATE PRIMARY KEY
ENABLE NOVALIDATE CONSTRAINT emp_last_name_nn;

この文には、次の2つのENABLE句が含まれています。

- 1番目のENABLE句は、表の主キー制約をENABLE NOVALIDATE状態にします。

- 2番目のENABLE句は、emp_last_name_nnという制約をENABLE NOVALIDATE状態にします。

この例では、表のそれぞれの行が2つの制約を満たす場合にかぎり、その制約が使用可能になります。どちらかの制約に違反する行があった場合、エラーが戻され、どちらの制約も使用禁止のままになります。

departments表のlocation_id列の外部キー制約について考えます。ここでは、locations表の主キーを参照しています。次の文は、locations表の主キーを使用禁止にします。

ALTER TABLE locations
MODIFY PRIMARY KEY DISABLE CASCADE;

locations表の一意キーは、departments表の外部キーによって参照されるため、この主キーを使用禁止にする場合は、CASCADE句を指定します。この句によって、外部キーも使用禁止になります。

索引構成表の例外表の作成例: 次の例は、主キー制約に違反する索引構成表hr.countriesからの行を保持するexcept_table表を作成します。

EXECUTE DBMS_IOT.BUILD_EXCEPTIONS_TABLE ('hr', 'countries', 'except_table');

ALTER TABLE countries
ENABLE PRIMARY KEY
EXCEPTIONS INTO except_table;

例外表を指定する場合は、この表に行を挿入する権限が必要です。検出された例外を調べる場合、例外表を問い合せる権限が必要です。

関連項目:
表に行を挿入するために必要な権限の詳細は、「INSERT」および「SELECT」を参照してください。

CHECK制約を使用禁止にする例: 次の文は、employees表にCHECK制約を定義し、その制約を使用禁止にします。

ALTER TABLE employees ADD CONSTRAINT check_comp
CHECK (salary + (commission_pct*salary) <= 5000)
DISABLE;

check_comp制約は、給与総額が$5000を超える従業員がいないことを保証します。ただし、この制約が使用禁止になっているため、従業員の給与をこの制限以上に増やすことができます。

トリガーを使用可能にする例: 次の文は、employees表に対応付けられているすべてのトリガーを使用可能にします。

ALTER TABLE employees
ENABLE ALL TRIGGERS;

未使用領域の解放例: 次の文は、employees表で再利用できるように最高水位標がMINEXTENTSを超えるすべての未使用領域を解放します。

ALTER TABLE employees
DEALLOCATE UNUSED;

列名の変更例: 次の文は、サンプル表oe.customersの列名をcredit_limitからcredit_amountに変更します。

ALTER TABLE customers
RENAME COLUMN credit_limit TO credit_amount;

列の削除例: 次の文は、CASCADE CONSTRAINTSが指定されているdrop_column_clauseです。表t1が次のように作成されているとします。

CREATE TABLE t1 (
pk NUMBER PRIMARY KEY,
fk NUMBER,
c1 NUMBER,
c2 NUMBER,
CONSTRAINT ri FOREIGN KEY (fk) REFERENCES t1,
CONSTRAINT ck1 CHECK (pk > 0 and c1 > 0),
CONSTRAINT ck2 CHECK (c2 > 0)
);

次の文に対してエラーが戻されます。

/* The next two statements return errors:
ALTER TABLE t1 DROP (pk);  -- pk is a parent key
ALTER TABLE t1 DROP (c1);  -- c1 is referenced by multicolumn
-- constraint ck1

次の文を発行すると、列pk、主キー制約、外部キー制約riおよびCHECK制約ck1が削除されます。

ALTER TABLE t1 DROP (pk) CASCADE CONSTRAINTS;

削除される列に対して定義されている制約で参照されている列も、すべて削除される場合は、CASCADE CONSTRAINTSは必要ありません。たとえば、列pkを他の表から参照する参照制約が他に存在しない場合は、次の文を指定するときにCASCADE CONSTRAINTS句がなくてもエラーにはなりません。

ALTER TABLE t1 DROP (pk, fk, c1);

索引構成表の変更例: 次の文は、hr.countriesに基づく索引構成表countries_demoの索引セグメントのINITRANSパラメータを変更します。

ALTER TABLE countries_demo INITRANS 4;

次の文は、オーバーフロー・データ・セグメントを索引構成表countriesに追加します。

ALTER TABLE countries_demo ADD OVERFLOW;

次の文は、索引構成表countriesのオーバーフロー・データ・セグメントのINITRANSパラメータを変更します。

ALTER TABLE countries_demo OVERFLOW INITRANS 4;

表のパーティションの分割例: 次の文は、サンプル表sh.salesの古いパーティションsales_q4_2000を分割して2つの新しいパーティションを作成し、1つにはsales_q4_2000bという名前を付け、もう1つには旧パーティションの名前を再利用します。

ALTER TABLE sales SPLIT PARTITION SALES_Q4_2000
AT (TO_DATE('15-NOV-2000','DD-MON-YYYY'))
INTO (PARTITION SALES_Q4_2000, PARTITION SALES_Q4_2000b);

次の文では、元のパーティションsales_q1_2002を、新しい3つのパーティションsales_jan_2002、sales_feb_2002、およびsales_mar_2002に分割します。

ALTER TABLE sales SPLIT PARTITION SALES_Q1_2002 INTO (
PARTITION SALES_JAN_2002 VALUES LESS THAN (TO_DATE('01-FEB-2002','DD-MON-YYYY')),
PARTITION SALES_FEB_2002 VALUES LESS THAN (TO_DATE('01-MAR-2002','DD-MON-YYYY')),
PARTITION SALES_MAR_2002);

次の文は、pm.print_media表のパーティション・バージョンを作成します。print_media表のLONG列はLOBに変換されています。表は、「Oracle Managed Filesの作成例:」で作成された表領域に格納されます。ad_textdocs_ntab列およびad_header列の基礎となるオブジェクト型は、pmサンプル・スキーマを作成するスクリプトで作成されます。

CREATE TABLE print_media_part (
product_id NUMBER(6),
ad_id              NUMBER(6),
ad_composite       BLOB,
ad_sourcetext      CLOB,
ad_finaltext       CLOB,
ad_fltextn         NCLOB,
ad_textdocs_ntab   TEXTDOC_TAB,
ad_photo           BLOB,
ad_graphic         BFILE,
ad_header          ADHEADER_TYP)
NESTED TABLE ad_textdocs_ntab STORE AS textdoc_nt
PARTITION BY RANGE (product_id)
(PARTITION p1 VALUES LESS THAN (100),
PARTITION p2 VALUES LESS THAN (200));

次の文は、表のパーティションp2をパーティションp2aとp2bに分割します。

ALTER TABLE print_media_part
SPLIT PARTITION p2 AT (150) INTO
(PARTITION p2a TABLESPACE omf_ts1
LOB (ad_photo, ad_composite) STORE AS (TABLESPACE omf_ts2),
PARTITION p2b
LOB (ad_photo, ad_composite) STORE AS (TABLESPACE omf_ts2))
NESTED TABLE ad_textdocs_ntab INTO (PARTITION nt_p2a, PARTITION nt_p2b);

p2aとp2bのパーティションでは、列ad_photoとad_compositeに対するLOBセグメントが表領域omf_ts2内に作成されます。パーティションp2aのその他の列に対するLOBセグメントは、表領域omf_ts1に保存されます。パーティションp2bのその他の列に対するLOBセグメントは、このALTER文の実行前の表領域で保持されます。ただし、LOBデータおよびLOB索引セグメントが新しい表領域に移動されない場合でも、これらの新しいセグメントが作成されます。

また、ネストした表の列ad_textdocs_ntabに対する新しいセグメントも作成されます。これらの新しいセグメントの記憶表は、nt_p2aおよびnt_p2bです。

2つの表パーティションのマージ例: 次の文は、パーティション(「表のパーティションの分割例:」で作成)をマージして、1つのパーティションに戻します。

ALTER TABLE sales
MERGE PARTITIONS sales_q4_2000, sales_q4_2000b
INTO PARTITION sales_q4_2000;

次の文は、「表のパーティションの分割例:」の例を無効にします。

ALTER TABLE print_media_part
MERGE PARTITIONS p2a, p2b INTO PARTITION p2ab TABLESPACE example
NESTED TABLE ad_textdocs_ntab STORE AS nt_p2ab;

隣接する4つのレンジ・パーティションのマージ例

次の文では、隣接する4つのレンジ・パーティションsales_q1_2000、sales_q2_2000、sales_q3_2000、およびsales_q4_2000を、1つのパーティションsales_all_2000にマージします。

ALTER TABLE sales
MERGE PARTITIONS sales_q1_2000 TO sales_q4_2000
INTO PARTITION sales_all_2000;

LOBおよびネストした表の記憶域を持つ表パーティションの追加例: 次の文は、パーティションp3をprint_media_part表に追加し(前述の例を参照)、BLOB、CLOB、およびその表のネストした表の列の記憶特性を指定します。

ALTER TABLE print_media_part ADD PARTITION p3 VALUES LESS THAN (400)
LOB(ad_photo, ad_composite) STORE AS (TABLESPACE omf_ts1)
LOB(ad_sourcetext, ad_finaltext) STORE AS (TABLESPACE omf_ts2)
NESTED TABLE ad_textdocs_ntab STORE AS nt_p3;

パーティションp3の列ad_photoおよびad_compositeに対するLOBデータとLOB索引セグメントは、表領域omf_ts1に格納されます。LOB列の他の属性は、まず表レベルのデフォルトから継承され、次に表領域のデフォルトから継承されます。

列ad_source_textおよびad_finaltextのLOBデータ・セグメントは、omf_ts2表領域に格納され、他のすべての属性は、まず表レベルのデフォルト値から継承され、次に表領域のデフォルト値から継承されます。

実表のパーティションp3に対応する、ネストした表の記憶列ad_textdocs_ntabの記憶表のパーティションの名前はnt_p3になり、他のすべての属性は、まず表レベルのデフォルト値から継承され、次に表領域のデフォルト値から継承されます。

表への複数のパーティションの追加例: 次の文では、「表パーティションの分割例:」で作成した表print_media_partに、3つのパーティションを追加します。

ALTER TABLE print_media_part ADD
PARTITION p3 values less than (300),
PARTITION p4 values less than (400),
PARTITION p5 values less than (500);

デフォルト・リスト・パーティションの使用例: 次の文は、リスト・パーティション表(「リスト・パーティション化の例:」で作成)を使用します。最初の文は、既存のデフォルト・パーティションを新規のsouthパーティションとデフォルト・パーティションに分割します。

ALTER TABLE list_customers SPLIT PARTITION rest
VALUES ('MEXICO', 'COLOMBIA')
INTO (PARTITION south, PARTITION rest);

次の文は、結果のデフォルト・パーティションをasiaパーティションとマージします。

ALTER TABLE list_customers
MERGE PARTITIONS asia, rest INTO PARTITION rest;

次の文は、デフォルト・パーティションを分割して、asiaパーティションを再作成します。

ALTER TABLE list_customers SPLIT PARTITION rest
VALUES ('CHINA', 'THAILAND')
INTO (PARTITION asia, PARTITION rest);

表のパーティションの削除例: 次の文は、パーティションp3(「LOBおよびネストした表の記憶域を持つ表パーティションの追加例:」で作成)を削除します。

ALTER TABLE print_media_part DROP PARTITION p3;

表パーティションの交換例 この例では、「リスト・パーティション化の例:」で作成したlist_customers表のパーティションと同じ構造を持つ表exchange_table表を作成します。次に、表list_customersのパーティションrestを表exchange_tableに置き換えますが、ローカル索引パーティションと対応するexchange_tableの索引との交換は行わず、exchange_table内のデータがパーティションrestの範囲内にあるかどうかの検証も行いません。

CREATE TABLE exchange_table (
customer_id     NUMBER(6),
cust_first_name VARCHAR2(20),
cust_last_name  VARCHAR2(20),
cust_address    CUST_ADDRESS_TYP,
nls_territory   VARCHAR2(30),
cust_email      VARCHAR2(40));

ALTER TABLE list_customers
EXCHANGE PARTITION rest WITH TABLE exchange_table
WITHOUT VALIDATION;

表のパーティションの変更例: 次の文は、list_customers表のパーティションasiaに対応するすべてのローカル索引パーティションに、UNUSABLEのマークを付けます。

ALTER TABLE list_customers MODIFY PARTITION asia
UNUSABLE LOCAL INDEXES;

次の文は、UNUSABLEのマークが付けられたすべてのローカル索引パーティションを再構築します。

ALTER TABLE list_customers MODIFY PARTITION asia
REBUILD UNUSABLE LOCAL INDEXES;

表のパーティションの移動例: 次の文は、パーティションp2b(「表のパーティションの分割例:」で作成)を表領域omf_ts1に移動します。

ALTER TABLE print_media_part
MOVE PARTITION p2b TABLESPACE omf_ts1;

表のパーティション名の変更例: 次の文は、sh.sales表のパーティションの名前を変更します。

ALTER TABLE sales RENAME PARTITION sales_q4_2003 TO sales_currentq;

表のパーティションの切捨て例: 次の文では、「LOB列のあるパーティション表の例:」で作成したprint_media_demo表を使用します。p1パーティション内のデータがすべて削除され、解放された領域の割当てが解除されます。

ALTER TABLE print_media_demo
TRUNCATE PARTITION p1 DROP STORAGE;

グローバル索引の更新例: 次の文は、サンプル表sh.salesのパーティションsales_q1_2000を分割し、定義されているグローバル索引を更新します。

ALTER TABLE sales SPLIT PARTITION sales_q1_2000
AT (TO_DATE('16-FEB-2000','DD-MON-YYYY'))
INTO (PARTITION q1a_2000, PARTITION q1b_2000)
UPDATE GLOBAL INDEXES;

パーティション索引の更新例: 次の文は、サンプル表sh.costsのパーティションcosts_Q4_2003を分割し、定義されているローカル索引を更新します。使用される表領域は、「基本的な一時表領域の作成例:」で作成されたものです。

CREATE INDEX cost_ix ON costs(channel_id) LOCAL;

ALTER TABLE costs
SPLIT PARTITION costs_q4_2003 at
(TO_DATE('01-Nov-2003','dd-mon-yyyy'))
INTO (PARTITION c_p1, PARTITION c_p2)
UPDATE INDEXES (cost_ix (PARTITION c_p1 tablespace tbs_02,
PARTITION c_p2 tablespace tbs_03));

オブジェクト識別子の指定例: 次の文は、オブジェクト型、主キーに基づくオブジェクト識別子に対応するオブジェクト表、およびユーザー定義REF列を持つ表を作成します。

CREATE TYPE emp_t AS OBJECT (empno NUMBER, address CHAR(30));

CREATE TABLE emp OF emp_t (
empno PRIMARY KEY)
OBJECT IDENTIFIER IS PRIMARY KEY;

CREATE TABLE dept (dno NUMBER, mgr_ref REF emp_t SCOPE is emp);

次の文は、emp表を参照する制約およびユーザー定義REF列を追加します。

ALTER TABLE dept ADD CONSTRAINT mgr_cons FOREIGN KEY (mgr_ref)
REFERENCES emp;
ALTER TABLE dept ADD sr_mgr REF emp_t REFERENCES emp;

表の列の追加例: 次の文は、NUMBERデータ型の列duty_pct、サイズが3のVARCHAR2データ型の列visa_neededおよびCHECK整合性制約をcountries表に追加します。

ALTER TABLE countries
ADD (duty_pct     NUMBER(2,2)  CHECK (duty_pct < 10.5),
visa_needed  VARCHAR2(3));

仮想表の列の追加例: 次の文は、hr.employees表のコピーにincomeという列(給与と歩合の合計)を追加します。給与と歩合はどちらもNUMBER型の列であるため、文の中でデータ型が指定されていなくても、仮想列はNUMBER型の列として作成されます。

CREATE TABLE emp2 AS SELECT * FROM employees;

ALTER TABLE emp2 ADD (income AS (salary + (salary*commission_pct)));

表の列の変更例: 次の文は、duty_pct列のサイズを増やします。

ALTER TABLE countries
MODIFY (duty_pct NUMBER(3,2));

MODIFY句には列の定義が1つのため、定義を囲むカッコは任意指定です。

次の文は、employees表のPCTFREEパラメータとPCTUSEDパラメータの値を、それぞれ30と60に変更します。

ALTER TABLE employees
PCTFREE 30
PCTUSED 60;

データの暗号化例: 次の文は、暗号化アルゴリズムAES256を使用して、hr.employees表のsalary列を暗号化します。前述の「セマンティクス」で説明したように、まず、透過的データ暗号化を有効にする必要があります。

ALTER TABLE employees
MODIFY (salary ENCRYPT USING 'AES256' 'NOMAC');

次の文は、デフォルトの暗号化アルゴリズムAES192を使用して、暗号化された新しい列online_acct_pwをoe.customers表に追加します。NO SALTを指定すると、Bツリー索引をこの列に対して作成できるようになります。

ALTER TABLE customers
ADD (online_acct_pw VARCHAR2(8) ENCRYPT 'NOMAC' NO SALT);

次の例は、customer.online_acct_pw列を復号化します。

ALTER TABLE customers
MODIFY (online_acct_pw DECRYPT);

エクステントの割当て例: 次の文は、employees表に5KBのエクステントを割り当て、そのエクステントをインスタンス4が使用できるようにします。

ALTER TABLE employees
ALLOCATE EXTENT (SIZE 5K INSTANCE 4);

この文には、DATAFILEパラメータが指定されていないため、エクステントはemployees表が入っている表領域に属するデータファイルの1つに割り当てられます。

デフォルト列値の指定例: 次の文は、product_information表のmin_price列のデフォルト値を10に変更します。

ALTER TABLE product_information
MODIFY (min_price DEFAULT 10);

続いてmin_price列に値を指定せずに、product_information表に新しい行を追加する場合、min_price列の値は自動的に10(ゼロ)になります。

INSERT INTO product_information (product_id, product_name,
list_price)
VALUES (300, 'left-handed mouse', 40.50);

SELECT product_id, product_name, list_price, min_price
FROM product_information
WHERE product_id = 300;

PRODUCT_ID PRODUCT_NAME         LIST_PRICE  MIN_PRICE
---------- -------------------- ---------- ----------
300 left-handed mouse          40.5         10

以前に指定したデフォルト値を中止して、新しく追加する行にその値が自動的に挿入されないようにする場合、次の文に示すように、デフォルト値をNULLに置き換えます。

ALTER TABLE product_information
MODIFY (min_price DEFAULT NULL);

MODIFY句で指定する必要があるのは、列名と、定義のうち変更される部分のみです(列の定義をすべて指定する必要はありません)。この文は、既存の行の既存の値には影響しません。

次の例では、DEFAULT ON NULLで定義した列を表に追加します。DEFAULTの列値には、順序疑似列NEXTVALが含まれます。

次に示すように、順序s1と表t1を作成します。

CREATE SEQUENCE s1 START WITH 1;

CREATE TABLE t1 (name VARCHAR2(10));
INSERT INTO t1 VALUES('Kevin');
INSERT INTO t1 VALUES('Julia');
INSERT INTO t1 VALUES('Ryan');

列idを追加します。この列のデフォルトは、s1.NEXTVALに設定されます。idのデフォルトの列値は、表内に既存の各行に割り当てられます。s1.NEXTVALが各行に割り当てられる順序は、非決定的になります。

ALTER TABLE t1 ADD (id NUMBER DEFAULT ON NULL s1.NEXTVAL NOT NULL);

SELECT id, name FROM t1 ORDER BY id;

ID NAME
---------- ----------
1 Kevin
2 Julia
3 Ryan

それ以降に新しい行を表に追加して、id列にNULL値を指定すると、DEFAULT ON NULL式のs1.NEXTVALが挿入されます。

INSERT INTO t1(id, name) VALUES(NULL, 'Sean');

SELECT id, name FROM t1 ORDER BY id;

ID NAME
---------- ----------
1 Kevin
2 Julia
3 Ryan
4 Sean

XMLType表への制約の追加例: 次の例は、xwarehouses表(「XMLTypeの例」で作成)に主キー制約を追加します。

ALTER TABLE xwarehouses
ADD (PRIMARY KEY(XMLDATA."WarehouseID"));

この疑似列の詳細は、「XMLDATA疑似列」を参照してください。

制約名の変更例: 次の文は、サンプル表oe.customersの制約名をcust_fname_nnからcust_firstname_nnに変更します。

ALTER TABLE customers RENAME CONSTRAINT cust_fname_nn
TO cust_firstname_nn;

制約の削除例: 次の文は、departments表の主キーを削除します。

ALTER TABLE departments
DROP PRIMARY KEY CASCADE;

PRIMARY KEY制約の名前がpk_deptであることがわかっている場合は、次のように指定しても削除できます。

ALTER TABLE departments
DROP CONSTRAINT pk_dept CASCADE;

CASCADE句によって、主キーを参照するすべての外部キーが削除されます。

次の文は、employees表のemail列の一意キーを削除します。

ALTER TABLE employees
DROP UNIQUE (email);

この文のDROP句ではCASCADE句を省略します。CASCADEオプションを省略することによって、一意キーを参照する外部キーがある場合、その一意キーは削除されません。

LOB列の例: 次の文は、CLOB列のresumeをemployee表に追加し、新しい列のLOB記憶特性を指定します。

ALTER TABLE employees ADD (resume CLOB)
LOB (resume) STORE AS resume_seg (TABLESPACE example);

次の文は、キャッシュを使用できるようにLOB列のresumeを変更します。

ALTER TABLE employees MODIFY LOB (resume) (CACHE);

次の文は、SecureFiles CLOB column resume to the employee表に追加し、この新しい列のLOB記憶特性を指定します。SecureFiles LOBを格納する表領域に対しては、自動セグメント領域管理が行われている必要があります。したがって、この例のLOBデータはauto_seg_ts表領域(「表領域に対してセグメント領域管理を指定する場合の例:」で作成した表領域)に格納します。

ALTER TABLE employees ADD (resume CLOB)
LOB (resume) STORE AS SECUREFILE resume_seg (TABLESPACE auto_seg_ts);

次の文は、LOB列のresumeをキャッシュを使用しないように変更します。

ALTER TABLE employees MODIFY LOB (resume) (NOCACHE);

ネストした表の例: 次の文は、ネストした表の列skillsをemployees表に追加します。

ALTER TABLE employees ADD (skills skill_table_type)
NESTED TABLE skills STORE AS nested_skill_table;

また、ネストした表の記憶特性も変更できます。変更する場合、nested_table_col_propertiesに指定した記憶表の名前を使用してください。記憶表では、問合せまたはDML文を実行することはできません。記憶表は、ネストした表の列の記憶特性を変更するためにのみ使用します。

次の文は、ネストした表の列clientと記憶表client_tabを使用して、表vet_serviceを作成します。ネストした表client_tabを変更して制約を指定します。

CREATE TYPE pet_t AS OBJECT
(pet_id NUMBER, pet_name VARCHAR2(10), pet_dob DATE);
/

CREATE TYPE pet AS TABLE OF pet_t;
/

CREATE TABLE vet_service (vet_name VARCHAR2(30),
client   pet)
NESTED TABLE client STORE AS client_tab;

ALTER TABLE client_tab ADD UNIQUE (pet_id);

次の文は、REF値のネストした表用の記憶表を変更して、REFの範囲が限定されることを指定します。

CREATE TYPE emp_t AS OBJECT (eno number, ename char(31));
CREATE TYPE emps_t AS TABLE OF REF emp_t;
CREATE TABLE emptab OF emp_t;
CREATE TABLE dept (dno NUMBER, employees emps_t)
NESTED TABLE employees STORE AS deptemps;
ALTER TABLE deptemps ADD (SCOPE FOR (COLUMN_VALUE) IS emptab);

同様に、次の文は、REFをROWIDとともに格納することを指定します。

ALTER TABLE deptemps ADD (REF(column_value) WITH ROWID);

これらのALTER TABLE文を正確に実行するためには、記憶表deptempsが空である必要があります。また、ネストした表は、スカラー値(REF値)の表として定義されるため、Oracle Databaseは、暗黙的に列名COLUMN_VALUEを記憶表に設定します。

関連項目:

- ネストした表の記憶域の詳細は、「CREATE TABLE」を参照してください。

- ネストした表の詳細は、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。

REF列の例: 次の文では、オブジェクト型dept_tを作成し、その後に表staffを作成します。

CREATE TYPE dept_t AS OBJECT
(deptno NUMBER, dname VARCHAR2(20));
/

CREATE TABLE staff
(name   VARCHAR2(100),
salary NUMBER,
dept   REF dept_t);

オブジェクト表officesを次のように作成します。

CREATE TABLE offices OF dept_t;

dept列は、任意の表に格納されたdept_tのオブジェクトに参照を格納できます。次のようにdept列に有効範囲制約を追加することによって、departments表に格納されたオブジェクトのみが参照されるように制限できます。

ALTER TABLE staff
ADD (SCOPE FOR (dept) IS offices);

前述のALTER TABLE文は、staff表が空である場合のみ正常に実行されます。

次の文は、staffのdept列にREF値を格納する際、ROWIDも同時に格納します。

ALTER TABLE staff
ADD (REF(dept) WITH ROWID);

ANYDATA列のアンパック記憶域の例:

この例では、ANYDATAの列を含む表を作成し、アンパック記憶域を使用してOPAQUEデータ型をANYDATAの列に格納してから、そのデータ型を問い合せます。この例では、データベースにユーザーhrとして接続していると仮定しています。

表t1を作成します。この表は、NUMBERの列nと、ANYDATAの列xを格納します。

CREATE TABLE t1 (n NUMBER, x ANYDATA);

CLOB属性を含む、オブジェクト・タイプclob_typを作成します。

CREATE OR REPLACE TYPE clob_typ AS OBJECT (c clob);
/

表t1のANYDATAの列xに含まれるOPAQUEデータ型のXMLTypeとclob_typのアンパック記憶域を有効にします。

ALTER TABLE t1 MODIFY OPAQUE TYPE x STORE (XMLType, clob_typ) UNPACKED;

XMLTypeオブジェクトとclob_typオブジェクトを、表t1に挿入します。これらの型は、アンパック記憶域を使用するようになります。

INSERT INTO t1
VALUES(1, anydata.convertobject(XMLType('<Test>This is test XML</Test>')));

INSERT INTO t1
VALUES(2, anydata.convertobject(clob_typ(TO_CLOB('This is a test CLOB'))));

表t1を問い合せて、ANYDATAの列xに格納されたタイプの名前を確認します。

SELECT t1.*, anydata.getTypeName(t1.x) typename FROM t1;

N X()                  TYPENAME
----- -------------------- --------------------
1 ANYDATA()            SYS.XMLTYPE
2 ANYDATA()            HR.CLOB_TYP

XMLTypeデータ型とclob_typデータ型に格納された値を問い合せることができる、ファンクションを作成します。

CREATE FUNCTION get_xmltype (ad IN ANYDATA) RETURN VARCHAR2 AS
rtn_val PLS_INTEGER;
my_xmltype XMLType;
string_val VARCHAR2(30);
BEGIN
rtn_val := ad.getObject(my_xmltype);
string_val := my_xmltype.getstringval();
return (string_val);
END;
/

CREATE FUNCTION get_clob_typ (ad IN ANYDATA) RETURN VARCHAR2 AS
rtn_val PLS_INTEGER;
my_clob_typ clob_typ;
string_val VARCHAR2(30);
BEGIN
rtn_val := ad.getObject(my_clob_typ);
string_val := (my_clob_typ.c);
return (string_val);
END;
/

表t1を問い合せて、ANYDATAの列xの各データ型に格納された値を確認します。

SELECT t1.*, anydata.getTypeName(t1.x) typename,
CASE
WHEN anydata.gettypename(t1.x) = 'SYS.XMLTYPE' THEN get_xmltype(t1.x)
WHEN anydata.gettypename(t1.x) = 'HR.CLOB_TYP' THEN get_clob_typ(t1.x)
END string_value
FROM t1;

N X()                  TYPENAME             STRING_VALUE
----- -------------------- -------------------- ------------------------------
1 ANYDATA()            SYS.XMLTYPE          <Test>This is test XML</Test>
2 ANYDATA()            HR.CLOB_TYP          This is a test CLOB

追加の例: ALTER TABLE文を使用した整合性制約の定義例は、「constraint」を参照してください。

表の記憶域パラメータの変更例は、「storage_clause」を参照してください。

ALTER TABLESPACE

用途

ALTER TABLESPACE文を使用すると、既存の表領域、1つ以上のデータファイルまたは一時ファイルを変更できます。

この句では、ディクショナリ管理表領域をローカル管理表領域に変換することはできません。変換するには、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』に記載されているDBMS_SPACE_ADMINパッケージを使用してください。

関連項目:
表領域作成の詳細は、『Oracle Database管理者ガイド』および「CREATE TABLESPACE」を参照してください。

前提条件

SYSAUX表領域を変更する場合は、SYSDBAシステム権限が必要です。

ALTER TABLESPACEシステム権限を持っている場合、すべてのALTER TABLESPACE操作を実行できます。MANAGE TABLESPACEシステム権限を持っている場合は、次の操作のみを実行できます。

- 表領域をオンラインまたはオフラインにする。

- バックアップを開始または終了する。

- 表領域を読取り専用または読み書き両用にする。

- 表領域の状態をPERMANENTまたはTEMPORARYに変更する。

- 表領域のデフォルト・ロギング・モードをLOGGINGまたはNOLOGGINGに設定する。

- 表領域で強制ロギング・モードを有効または無効にする。

- 表領域または表領域データ・ファイルの名前を変更する。

- UNDO表領域に対するRETENTION GUARANTEEまたはRETENTION NOGUARANTEEを指定する。

- 表領域のデータ・ファイルのサイズを変更する。

- 表領域内のデータ・ファイルに対する自動拡張を使用可能または使用禁止にする。

- 一時表領域または一時ファイルによって使用される領域の大きさを縮小する。

表領域を読取り専用にする場合、次の条件が満たされている必要があります。

- 表領域がオンラインになっている。

- 表領域にアクティブなロールバック・セグメントがない。SYSTEM表領域にはSYSTEMロールバック・セグメントがあるため、読取り専用にはできません。また、読取り専用表領域のロールバック・セグメントにはアクセスできないため、ロールバック・セグメントを削除してから、表領域を読取り専用にすることをお薦めします。

- 表領域がオープン・バックアップに使用されていない。バックアップの終わりに表領域内のすべてのデータファイルのヘッダー・ファイルが更新されるためです。

これらの条件を満たすために、制限モードでこの機能を実行すると有効です。制限モードでは、RESTRICTED SESSIONシステム権限を持つユーザーのみがログインできます。

構文

alter_tablespace::=

注意:
DEFAULT句を指定する場合、table_compression、inmemory_clause、ilm_clauseまたはstorage_clause句のいずれかを指定する必要があります。

(table_compression ::=—ALTER TABLEの一部、inmemory_clause::=—CREATE TABLESPACEの一部、ilm_clause::=—ALTER TABLEの一部、storage_clause::=、size_clause::=、datafile_tempfile_clauses ::=、tablespace_logging_clauses ::=、tablespace_group_clause::=、tablespace_state_clauses::=、autoextend_clause ::=、flashback_mode_clause ::=、tablespace_retention_clause::=を参照)

datafile_tempfile_clauses ::=

(file_specification::=を参照)。

tablespace_logging_clauses ::=

(logging_clause::=を参照)

tablespace_group_clause::=

tablespace_state_clauses::=

autoextend_clause::=

(size_clause::=を参照)

maxsize_clause::=

(size_clause::=を参照)

flashback_mode_clause ::=

tablespace_retention_clause::=

セマンティクス

tablespace

変更する表領域の名前を指定します。

表領域の変更の制限事項: 表領域の変更には、次の制限事項があります。

- tablespaceがUNDO表領域の場合、この文ではADD DATAFILE、RENAME DATAFILE、RENAME TO(表領域の名前の変更)、DATAFILE ... ONLINE、DATAFILE ... OFFLINE、BEGIN BACKUPおよびEND BACKUPのみが指定可能です。

- SYSTEM表領域を、読取り専用または一時表領域にしたり、オフラインにすることはできません。

- ローカル管理の一時表領域に対してこの文で指定できるのは、ADD句のみです。

関連項目:
自動UNDO管理およびUNDO表領域の詳細は、『Oracle Database管理者ガイド』を参照してください。

DEFAULT句

この句を使用すると、表領域の新しいデフォルト・パラメータを指定できます。新しいデフォルト・パラメータは、後で表領域に作成されるオブジェクトに適用されます。

table_compression、inmemory_clause、ilm_clauseおよびstorage_clause句は、CREATE TABLESPACEおよびALTER TABLESPACEと同じセマンティクスを持ちます。これらの句の詳細は、CREATE TABLESPACEの「DEFAULT句」を参照してください。

MINIMUM EXTENT

この句は、永続的なディクショナリ管理表領域に対してのみ有効です。MINIMUM EXTENT句を指定すると、表領域内のすべての使用済エクステントまたは未使用エクステントの大きさが、size_clauseで指定したサイズ以上であること、およびその倍数であることが保証され、表領域における空き領域の断片化を制御できます。

MINIMUM EXTENTの制限事項: この句は、ローカル管理の表領域またはディクショナリ管理の一時表領域に対して指定できません。

関連項目:
この句の詳細は、「size_clause」を参照してください。MINIMUM EXTENTを使用した領域の断片化の制御の詳細は、『Oracle Database管理者ガイド』を参照してください。

RESIZE句

この句が有効であるのは、bigfile表領域に対してのみです。1つのデータファイルのサイズを指定のサイズまで拡張または縮小できます。K、M、GまたはTを使用して、それぞれKB、MB、GBまたはTB単位で指定することもできます。

smallfile表領域に新しく追加されたデータファイルまたは一時ファイルのサイズを変更するには、ALTER DATABASE ... autoextend_clauseを使用します(「database_file_clauses」を参照)。

関連項目:
bigfile表領域については、「BIGFILE | SMALLFILE」を参照してください。

COALESCE

この句を使用すると、表領域内の各データファイルで、連続する未使用エクステントをすべて結合し、連続するより大きいエクステントを作成します。

SHRINK SPACE句

この句が有効であるのは、一時表領域に対してのみです。表領域に使用される領域の大きさを縮小できます。任意指定のKEEP句では、size_clauseで表領域の縮小後サイズの下限を定義します。これは、自動拡張可能な表領域のMAXSIZEとは逆の機能です。KEEP句を省略した場合は、表領域は他の記憶域属性が満たされることを条件として可能なかぎり縮小されます。

RENAME句

この句を指定すると、tablespaceの名前を変更できます。この句は、tablespaceおよびそのすべてのデータファイルがオンラインで、COMPATIBLEパラメータが10.0.0以上に設定されている場合にのみ有効です。名前の変更は、永続表領域および一時表領域の両方に対して実行できます。

tablespaceが読取り専用の場合、データファイルのヘッダーは更新されず、新しい名前は反映されません。アラート・ログに、データファイルのヘッダーが更新されなかったことが記録されます。

注意:
バックアップからリストアしたデータファイルを使用して制御ファイルを再作成する場合、データファイルのヘッダーに古い表領域の名前が反映されていると、再作成された制御ファイルにも古い表領域の名前が反映されます。ただし、データベースが完全にリカバリされた後は、制御ファイルに新しい名前が反映されます。

tablespaceが、Oracle Real Application Clusters(Oracle RAC)環境のインスタンスに対するUNDO表領域として指定されており、データベースの起動にサーバー・パラメータ・ファイルが使用されている場合、そのサーバー・パラメータ・ファイル(SPFILE)で、インスタンスに対するUNDO_TABLESPACEパラメータの値は、新しい表領域の名前を反映するように変更されます。単一インスタンス・データベースで、spfileのかわりにパラメータ・ファイル(pfile)が使用されている場合、データベース管理者にpfile内の値を手動で変更することを推奨するメッセージがアラート・ログに書き込まれます。

注意:
RENAME句は、実行中のインスタンスのUNDO_TABLESPACEパラメータの値を変更しません。これはUNDO表領域の機能に影響しませんが、次の文を発行してインスタンスの実行中にUNDO_TABLESPACEの値を新しい表領域名に手動で変更することをお薦めします。

ALTER SYSTEM SET UNDO_TABLESPACE = new_tablespace_name SCOPE = MEMORY;

この文は一度だけ発行する必要があります。UNDO_TABLESPACEパラメータがpfileまたはspfileの新しい表領域名に設定されている場合、次にインスタンスを再起動するときにパラメータが正しく設定されます。

表領域の名前の変更の制限事項: SYSTEM表領域またはSYSAUX表領域の名前は変更できません。

BACKUP句

この句を使用すると、表領域のすべてのデータファイルをオンライン(ホット)・バックアップ・モードにしたり、このモードから戻すことができます。

関連項目:

- メディア・リカバリなしでデータベースを再起動する場合の詳細は、『Oracle Database管理者ガイド』を参照してください。

- データベース内のすべてのデータファイルに対するオンライン・バックアップ・モードの設定または解除の詳細は、「ALTER DATABASE」の「BACKUP句」を参照してください。

- 個々のデータファイルをオンライン・バックアップ・モードから解除する場合の詳細は、「ALTER DATABASE」の「alter_datafile_clause」を参照してください。

BEGIN BACKUP

BEGIN BACKUPを指定すると、表領域を構成するデータファイルのオープン・バックアップを実行することを示すことができます。この句を指定することによって、ユーザーがこの表領域にアクセスできなくなることはありません。オープン・バックアップを開始する前に、この句を指定してください。

表領域のバックアップ開始の制限事項: 表領域のバックアップ開始には、次の制限事項があります。

- この句は、読取り専用の表領域またはローカル管理の一時表領域に対して指定できません。

- バックアップ中は、表領域のオフラインへの正常な切替え、インスタンスの停止または表領域の別のバックアップ処理の開始は実行できません。

関連項目:
「表領域のバックアップ例:」

END BACKUP

END BACKUPを指定すると、表領域のオンライン・バックアップが完了したことを示すことができます。オンライン・バックアップの完了後、できるだけ早くこの句を指定してください。インスタンスに障害またはSHUTDOWN ABORTが発生した場合、次のインスタンス起動時にメディア・リカバリ(必要に応じて、アーカイブREDOログも)が必要であるとみなされます。

表領域のバックアップ終了の制限事項: この句は、読取り専用表領域に対して使用できません。

datafile_tempfile_clauses

datafile_tempfile_clausesを使用すると、データファイルまたは一時ファイルを追加および変更できます。

ADD句

ADDを指定すると、file_specificationによって指定されたデータファイルまたは一時ファイルを表領域に追加できます。オペレーティング・システムのファイル・システム内の標準データファイルと一時ファイル、またはOracle Automatic Storage Managementディスク・グループのファイルを指定するには、file_specificationのdatafile_tempfile_spec書式(「file_specification」を参照)を使用します。

この句は、ローカル管理の一時表領域に対して、どんな場合でも指定できる唯一の句です。

file_specificationを指定しないと、AUTOEXTENDが有効になった100MBのOracle管理ファイルが作成されます。

データファイルまたは一時ファイルを、オンラインのローカル管理表領域、またはオンラインまたはオフラインのディクショナリ管理表領域に追加できます。なお、そのデータファイルが別のデータベースで使用中でないことを確認してください。

データファイルおよび一時ファイルの追加における制限事項: データファイルまたは一時ファイルを1つしか含まない表領域など、bigfile(単一ファイル)表領域にはこの句を指定できません。

注意:
オペレーティング・システムによっては、一時ファイルのブロックが実際にアクセスされるまで、一時ファイル用の領域が割り当てられない場合があります。領域の割当ての遅延のため、一時ファイルの作成およびサイズ変更が速くなります。ただし、後で一時ファイルが使用されるときに、十分なディスク領域を使用可能にする必要があります。問題を回避するには、一時ファイルの作成またはサイズ変更の前に、ディスクの空き領域が、新しく作成する一時ファイルまたはサイズ変更後の一時ファイルのサイズよりも大きいことを確認してください。ディスク領域に余裕を持たせておくと、関連のない操作による、予期されるディスク使用量の増加にも対応できます。その後で、作成またはサイズ変更操作を実行してください。

関連項目:
「file_specification」、「データファイルおよび一時ファイルの追加例と削除例:」および「Oracle Managed Filesのデータファイルの追加例:」を参照してください。

DROP句

DROPを指定すると、filenameやfile_numberによって指定された空のデータファイルまたは一時ファイルを表領域から削除できます。この句は、データファイルまたは一時ファイルをデータ・ディクショナリから削除し、オペレーティング・システムから削除します。この句を指定するときには、データベースがオープンしている必要があります。

ALTER TABLESPACE ... DROP TEMPFILE文は、ALTER DATABASE TEMPFILE ... DROP INCLUDING DATAFILESを指定することと同じです。

ファイル削除の制限事項: データファイルまたは一時ファイルを削除するには、ファイルが次の条件を満たしている必要があります。

- 空であること。

- 表領域内で最初に作成されたファイルではないこと。この場合、かわりに表領域が削除されます。

- ローカル管理されるディクショナリから移行された読取り専用表領域でないこと。他のすべての読取り専用表領域からのデータファイルの削除はサポートされています。

- オフラインでないこと。

関連項目:

- 一時ファイルの削除の詳細は、「ALTER DATABASE」の「alter_tempfile_clause」を参照してください。

- データファイル番号の詳細と、データファイルの管理ガイドラインの詳細は、『Oracle Database管理者ガイド』を参照してください。

- 「データファイルおよび一時ファイルの追加例と削除例:」

SHRINK TEMPFILE句

この句が有効であるのは、一時表領域を変更する場合のみです。指定した一時ファイルに使用される領域の大きさを縮小できます。任意指定のKEEP句では、size_clauseで一時ファイルの縮小後サイズの下限を定義します。これは、自動拡張可能な表領域のMAXSIZEとは逆の機能です。KEEP句を省略した場合は、一時ファイルは他の記憶域属性が満たされることを条件として可能なかぎり縮小されます。

RENAME DATAFILE句

RENAME DATAFILEを指定すると、表領域の1つ以上のデータファイルの名前を変更できます。データベースをオープンしておくこと、および名前の変更前に表領域をオフラインにすることが必要です。それぞれのfilenameには、ご使用のオペレーティング・システムのファイル名の表記規則に従って、データファイル名を完全に指定してください。

この句では、表領域を古いファイルではなく新しいファイルに対応付けます。オペレーティング・システムのファイル名は実際には変更されません。このため、オペレーティング・システム上でこのファイル名を変更する必要があります。

関連項目:
「表領域の移動および名前の変更例:」

ONLINE | OFFLINE句

これらの句を使用すると、表領域のすべてのデータファイルまたは一時ファイルを、オフラインまたはオンラインにできます。これらの句は、表領域のONLINEまたはOFFLINE状態には影響しません。

データベースは、マウントされている必要があります。tablespaceがSYSTEM、UNDO表領域、またはデフォルトの一時表領域の場合、データベースをオープンしないでおく必要があります。

tablespace_logging_clauses

この句を使用すると、表領域のロギング特性を設定または変更できます。

logging_clause

LOGGINGを指定すると、表領域内のすべての表、索引およびパーティションのロギング属性を指定できます。表レベル、索引レベルおよびパーティション・レベルでのロギング指定によって、表領域レベルのロギング属性を上書きできます。

既存の表領域のロギング属性をALTER TABLESPACE文によって変更した場合、この文の実行後に作成されたすべての表、索引およびパーティションに、新しいデフォルトのロギング属性(これは後で上書きもできます)が適用されます。既存のオブジェクトのロギング属性は変更されません。

FORCE LOGGINGモードの表領域がある場合、この文でNOLOGGINGを指定すると、表領域のデフォルト・ロギング・モードをNOLOGGINGに設定できます。ただし、この設定によって表領域のFORCE LOGGINGモードは解除されません。

[NO] FORCE LOGGING

この句を使用すると、表領域で強制ロギング・モードを有効または無効にできます。データベースをオープンし、READ WRITEモードにしておく必要があります。この設定により、表領域のデフォルトLOGGINGモードまたはNOLOGGINGモードは変更されません。

強制ロギング・モードの制限事項: FORCE LOGGINGは、UNDO表領域および一時表領域に対して指定できません。

関連項目:
FORCE LOGGINGモードの使用の詳細は、『Oracle Database管理者ガイド』および「表領域のロギング属性の変更例:」を参照してください。

tablespace_group_clause

この句は、ローカル管理の一時表領域に対してのみ有効です。この句を使用すると、tablespace_group_name表領域グループに対してtablespaceを追加または削除できます。

- グループ名を指定すると、tablespaceがその表領域グループのメンバーであることを示すことができます。tablespace_group_nameが存在しない場合、表領域を変更して表領域グループのメンバーにすると、その表領域グループが暗黙的に作成されます。

- 空の文字列(' ')を指定すると、tablespace_group_name表領域グループからtablespaceを削除できます。

表領域グループの制限事項: 表領域グループは、永続表領域またはディクショナリ管理の一時表領域には指定できません。

関連項目:
表領域グループの詳細は、『Oracle Database管理者ガイド』および「表領域グループの割当て例:」を参照してください。

tablespace_state_clauses

この句を使用すると、表領域の状態を設定または変更できます。

ONLINE | OFFLINE

ONLINEを指定すると、表領域をオンラインにできます。OFFLINEを指定すると、表領域をオフラインにし、そのセグメントへの後続のアクセスを禁止できます。表領域をオフラインにすると、そのすべてのデータファイルもオフラインになります。

提案:
表領域を長期間オフラインにする前に、デフォルト表領域または一時表領域としてその表領域が割り当てられているユーザーに対して、表領域の割当てを変更することを検討します。表領域をオフラインにしている間は、これらのユーザーは、その表領域内でオブジェクトに対して領域を割り当てたり、領域をソートすることはできません。ユーザーへの表領域の割当ての詳細は、「ALTER USER」を参照してください。

表領域をオフラインにする場合の制限事項: 一時表領域はオフラインにできません。

OFFLINE NORMAL NORMALを指定すると、システム・グローバル領域(SGA)以外にある表領域のすべてのデータファイルにあるすべてのブロックをフラッシュできます。データファイルをオンラインに戻す前に、表領域のメディア・リカバリを行う必要はありません。これはデフォルトです。

OFFLINE TEMPORARY TEMPORARYを指定すると、Oracle Databaseは表領域内のすべてのオンライン・データファイルに対してチェックポイントを実行しますが、すべてのファイルに対して書込みを実行できるかどうかは保証しません。この文の発行時にオフラインであったファイルは、表領域をオンラインに戻す前に、メディア・リカバリを行う必要があります。

OFFLINE IMMEDIATE IMMEDIATEを指定した場合は、表領域のファイルが使用可能であることは保証されず、チェックポイントも実行されません。表領域をオンラインに戻す前に、メディア・リカバリを行う必要があります。

注意:
ALTER TABLESPACE ... OFFLINEに対するFOR RECOVER設定は、非推奨になっています。この構文は、下位互換性を保つためにのみサポートされています。ただし、表領域のリカバリにはトランスポータブル表領域機能を使用することをお薦めします。

関連項目:
メディア・リカバリを実行するトランスポータブル表領域の使用の詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

READ ONLY | READ WRITE

READ ONLYを指定すると、表領域を読取り専用遷移モードに設定できます。この状態では、既存のトランザクションは完了(コミットまたはロールバック)できますが、表領域内のブロックを変更した既存のトランザクションをロールバックすること以外は、その表領域に対してさらにDML操作を行うことはできません。SYSAUX、SYSTEMまたは一時表領域は、READ ONLYに設定できません。

表領域が読取り専用の場合は、そのファイルを読取り専用メディアにコピーできます。その場合、SQL文のALTER DATABASE ... RENAMEを使用して、新しいファイル位置を示すように制御ファイル内のデータファイルの名前を変更する必要があります。

関連項目:

- 読取り専用の表領域の詳細は、『Oracle Database概要』を参照してください。

- 「ALTER DATABASE」

READ WRITEを指定すると、読取り専用に指定されている表領域に対して書込み操作を実行できるようになります。

PERMANENT | TEMPORARY

PERMANENTを指定すると、一時表領域を永続表領域に変換できます。永続表領域とは、永続的なデータベース・オブジェクトを格納できる場所です。表領域を作成するときのデフォルトです。

TEMPORARYを指定すると、永続表領域を一時表領域に変換できます。一時表領域とは、永続的なデータベース・オブジェクトを格納できない表領域です。一時表領域の中のオブジェクトはセッション中のみ保持されます。

一時表領域の制限事項: 一時表領域には、次の制限事項があります。

- SYSAUX表領域には、TEMPORARYを指定できません。

- tablespaceを標準的なブロック・サイズで作成しなかった場合、永続表領域を一時表領域に変換できません。

- FORCE LOGGINGモードでは、表領域に対してTEMPORARYを指定できません。

autoextend_clause

この句は、bigfile(単一ファイル)表領域に対してのみ有効です。この句を使用すると、表領域内の単一のデータファイルに対して自動拡張を使用可能または使用禁止にできます。smallfile表領域に新しく追加されたデータファイルまたは一時ファイルの自動拡張を使用可能または使用禁止にするには、ALTER DATABASE文でautoextend_clauseを使用します(「database_file_clauses」を参照)。

関連項目:

- bigfile(単一ファイル)表領域については、『Oracle Database管理者ガイド』を参照してください。

- autoextend_clauseの詳細は、「file_specification」を参照してください。

flashback_mode_clause

この句を使用すると、後続のFLASHBACK DATABASE操作でこの表領域を使用するかどうかを指定できます。

- FLASHBACKモードをオンにするには、データベースはマウント済で、クローズ状態である必要があります。

- FLASHBACKモードをオフにするには、データベースはマウント済(READ WRITEのオープン状態またはクローズ状態)である必要があります。

この句は一時表領域では無効です。

この句の詳細は、「CREATE TABLESPACE」を参照してください。

関連項目:
データベースのフラッシュバックの詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

tablespace_retention_clause

この句のセマンティクスは、CREATE TABLESPACE文およびALTER TABLESPACE文で同じです。「CREATE TABLESPACE」の「tablespace_retention_clause」を参照してください。

例

表領域のバックアップ例: 次の文は、バックアップの開始をデータベースに通知します。

ALTER TABLESPACE tbs_01
BEGIN BACKUP;

次の文は、バックアップが終了したことをデータベースに通知します。

ALTER TABLESPACE tbs_01
END BACKUP;

表領域の移動および名前の変更例: 次の例は、tbs_02表領域(「表領域の自動拡張を使用可能にする場合の例:」で作成)に関連付けられたデータファイルを、diskb:tbs_f5.dbfからdiska:tbs_f5.dbfに移動して、名前を変更します。

1. OFFLINE句を指定したALTER TABLESPACE文を使用して、この表領域をオフラインにします。

ALTER TABLESPACE tbs_02 OFFLINE NORMAL;

2. オペレーティング・システムのコマンドを使用して、このファイルをdiskb:tbs_f5.dbfからdiska:tbs_f5.dbfにコピーします。

3. RENAME DATAFILE句を指定したALTER TABLESPACE文を使用して、このデータファイルの名前を変更します。

ALTER TABLESPACE tbs_02
RENAME DATAFILE 'diskb:tbs_f5.dbf'
TO              'diska:tbs_f5.dbf';

4. ONLINE句を指定したALTER TABLESPACE文を使用して、この表領域をオンラインに戻します。

ALTER TABLESPACE tbs_02 ONLINE;

データファイルおよび一時ファイルの追加例と削除例: 次の文は、表領域にデータファイルを追加します。さらに多くの領域が必要な場合、10KBの新しいエクステントが最大100KBまで追加されます。

ALTER TABLESPACE tbs_03
ADD DATAFILE 'tbs_f04.dbf'
SIZE 100K
AUTOEXTEND ON
NEXT 10K
MAXSIZE 100K;

次の文は、空のデータファイルを削除します。

ALTER TABLESPACE tbs_03
DROP DATAFILE 'tbs_f04.dbf';

次の文は、「一時表領域の作成例:」で作成された一時表領域に一時ファイルを追加してから削除します。

ALTER TABLESPACE temp_demo ADD TEMPFILE 'temp05.dbf' SIZE 5 AUTOEXTEND ON;

ALTER TABLESPACE temp_demo DROP TEMPFILE 'temp05.dbf';

一時表領域の領域の管理例: 次の文では、「一時表領域の作成例:」で作成した一時表領域の領域を、SHRINK SPACE句を使用して管理します。KEEP句が省略されているので、表領域の大きさは、表領域の他の記憶域属性を満たしていることを条件として可能なかぎり縮小されます。

ALTER TABLESPACE temp_demo SHRINK SPACE;

Oracle Managed Filesのデータファイルの追加例: 次の例は、Oracle Managed Filesのデータファイルをomf_ts1表領域に追加します(この表領域の作成の詳細は、「Oracle Managed Filesの作成例:」を参照してください)。新しいデータファイルは100MBで、最大サイズが制限なしで自動拡張されます。

ALTER TABLESPACE omf_ts1 ADD DATAFILE;

表領域のロギング属性の変更例: 次の例は、表領域のデフォルトのロギング属性をNOLOGGINGに変更します。

ALTER TABLESPACE tbs_03 NOLOGGING;

表領域のロギング属性を変更した場合でも、その表領域内の既存のスキーマ・オブジェクトのロギング属性には影響しません。表レベル、索引レベルおよびパーティション・レベルでのロギング指定によって、表領域レベルのロギング属性を上書きできます。

UNDOデータの保持の変更例: 次の文は、undots1表領域のUNDOデータの保持を、通常のUNDOデータの動作に変更します。

ALTER TABLESPACE undots1
RETENTION NOGUARANTEE;

次の文は、undots1表領域のUNDOデータの保持を、期限が切れていないUNDOデータを保持する動作に変更します。

ALTER TABLESPACE undots1
RETENTION GUARANTEE;

13 SQL文: ALTER TRIGGERからCOMMIT

この章では、次のSQL文について説明します。

- ALTER TRIGGER

- ALTER TYPE

- ALTER USER

- ALTER VIEW

- ANALYZE

- 「ASSOCIATE STATISTICS」

- AUDIT (従来型監査)

- AUDIT (統合監査)

- CALL

- COMMENT

- 「COMMIT」

ALTER TRIGGER

用途

トリガーはPL/SQLを使用して定義されます。このため、この項では一般的な情報について説明します。構文およびセマンティクスの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

ALTER TRIGGER文を使用すると、データベース・トリガーを使用可能化、使用禁止化またはコンパイルできます。

注意:
この文を使用して既存のトリガーの宣言や定義は変更できません。トリガーを再宣言または再定義する場合は、OR REPLACEキーワードを指定したCREATE TRIGGER文を使用します。

関連項目:

- トリガーの作成については、「CREATE TRIGGER」を参照してください。

- トリガーの削除については、「DROP TRIGGER」を参照してください。

- トリガーの概要は、『Oracle Database概要』を参照してください。

前提条件

トリガーが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、ALTER ANY TRIGGERシステム権限が必要です。

DATABASE上のトリガーを変更する場合は、ADMINISTER DATABASE TRIGGER権限が必要です。

関連項目:
DATABASEトリガーに基づいたトリガーの詳細は、「CREATE TRIGGER」を参照してください。

構文

alter_trigger::=

(trigger_compile_clause: この句の構文の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。)

セマンティクス

schema

トリガーが含まれているスキーマを指定します。schemaを指定しない場合、トリガーは自分のスキーマ内にあるとみなされます。

trigger_name

変更するトリガーの名前を指定します。

trigger_compile_clause

この句の構文とセマンティクスの詳細およびトリガーの作成とコンパイルの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

ENABLE | DISABLE

ENABLEを指定すると、トリガーを使用可能にできます。また、ALTER TABLEのENABLE ALL TRIGGERS句を使用することによって、表に対応付けられたすべてのトリガーを使用可能にできます。「ALTER TABLE」を参照してください。

DISABLEを指定すると、トリガーを使用禁止にできます。また、ALTER TABLEのDISABLE ALL TRIGGERS句を使用することによって、表に対応付けられたすべてのトリガーを使用禁止にできます。

RENAME句

RENAME TO new_nameを指定すると、トリガーの名前を変更できます。トリガーの名前は変更され、名前が変更される前と同じ状態になります。

トリガーの名前を変更すると、USER_SOURCE、ALL_SOURCEおよびDBA_SOURCEデータ・ディクショナリ・ビューに記憶されているトリガーのソースが再構築されます。その結果、トリガー・ソースが変更されていなくても、これらのビューのTEXT列のコメントおよび書式設定が変更される場合があります。

EDITIONABLE | NONEDITIONABLE

この句を使用すると、schemaのスキーマ・オブジェクト・タイプTRIGGERのエディショニングが後で有効化されたときに、そのトリガーをエディション・オブジェクトにするか非エディション・オブジェクトにするかを指定できます。デフォルトは、EDITIONABLEです。エディション・オブジェクトと非エディション・オブジェクトの変更の詳細は、『Oracle Database開発ガイド』を参照してください。

NONEDITIONABLEの制限事項: crosseditionトリガーには、NONEDITIONABLEを指定できません。

ALTER TYPE

用途

オブジェクト型はPL/SQLを使用して定義されます。このため、この項では一般的な情報について説明します。構文およびセマンティクスの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

ALTER TYPE文を使用すると、メンバー属性またはメソッドを追加または削除できます。オブジェクト型の既存のプロパティ(FINALまたはINSTANTIABLE)、または型のスカラー属性も変更できます。

この文を使用すると、新しいオブジェクト・メンバーのサブプログラム仕様を追加することによって、型の仕様部または本体を再コンパイルしたり、オブジェクト型の仕様を変更することができます。

前提条件

オブジェクト型が自分のスキーマ内にあり、CREATE TYPEかCREATE ANY TYPE権限を持っている必要があります。または、ALTER ANY TYPEシステム権限が必要です。

構文

alter_type::=

(alter_type_clause: この句の構文の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。)

セマンティクス

schema

型が含まれているスキーマを指定します。schemaを指定しない場合、この型は現行のスキーマ内にあるとみなされます。

type_name

オブジェクト型、ネストした表型またはVARRAY型の名前を指定します。

type_nameの制限事項 エディション化されたオブジェクト型を展開することはできません。次のいずれかに該当する場合は、ORA-22348が発生してALTER TYPE文は失敗します。

- typeがエディション化されたオブジェクト型であり、ALTER TYPE文にtype_compile_clauseがない。ALTER TYPE文は、エディション化されたオブジェクト型の再コンパイルには使用できますが、他の目的には使用できません。

- typeに依存するエディション化されたオブジェクト型が存在し、ALTER TYPE文にCASCADE句がある。

type_compile_clauseおよびCASCADE句の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

alter_type_clause

この句の構文とセマンティクスの詳細およびオブジェクト型の作成とコンパイルの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

EDITIONABLE | NONEDITIONABLE

この句を使用すると、schemaのスキーマ・オブジェクト・タイプTYPEのエディショニングが後で有効化されたときに、その型をエディション・オブジェクトにするか非エディション・オブジェクトにするかを指定できます。デフォルトは、EDITIONABLEです。エディション・オブジェクトと非エディション・オブジェクトの変更の詳細は、『Oracle Database開発ガイド』を参照してください。

ALTER USER

用途

ALTER USERを使用すると、次の操作を実行できます。

- データベース・ユーザーの認証またはデータベース・リソースの特性を変更します。

- プロキシ・サーバーが認証なしでクライアントとして接続することを許可します。

- Oracle Automatic Storage Management (Oracle ASM)クラスタで、ユーザーのパスワードを現在のノードのOracle ASMインスタンスに対してローカルなパスワード・ファイルで変更します。

関連項目:
ユーザーの認証方式の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

前提条件

通常、ALTER USERシステム権限が必要です。ただし、現行ユーザーはこの権限がない場合でも自分のパスワードは変更できます。

Oracle ASMインスタンス・パスワード・ファイルで自分以外のユーザーのパスワードを変更するには、AS SYSASMとして認証されている必要があります。

CONTAINER句を指定する場合は、マルチテナント・コンテナ・データベース(CDB)に接続している必要があります。現在のコンテナがルートである場合は、CONTAINER = ALLまたはCONTAINER = CURRENTを指定できます。現在のコンテナがプラガブル・データベース(PDB)である場合は、CONTAINER = CURRENTのみ指定可能です。

container_data_clauseを使用してCONTAINER_DATA属性を設定および変更する場合は、CDBに接続している必要があります。また、現在のコンテナがルートである必要があります。

構文

alter_user::=

(size_clause::=を参照)

proxy_clause ::=

db_user_proxy_clauses::=

container_data_clause::=

セマンティクス

この項で説明するキーワード、パラメータおよび句は、ALTER USER独自のものと、CREATE USERにもあるが、セマンティクスが異なるものがあります。その他のキーワード、パラメータおよび句には、CREATE USER文と同じ意味があります。

注意:
ユーザー名およびパスワードは、ご使用のプラットフォームに応じて、ASCIIまたはEBCDIC文字のみでエンコードすることをお薦めします。

関連項目:
キーワードおよびパラメータについては、「CREATE USER」を参照してください。ユーザーにデータベース・リソースへの制限を割り当てる方法については、「CREATE PROFILE」を参照してください。

IDENTIFIED句

BY password BY passwordを指定すると、ユーザーの新しいパスワードを指定できます。パスワードは、大/小文字が区別されます。この後に、ユーザーをデータベースに接続するために使用されるCONNECT文字列は、このALTER USER文で使用されているものと同じ文字(大文字、小文字または混在)を使用してパスワードを指定する必要があります。パスワードには、データベース・キャラクタ・セットから、シングルバイト文字、マルチバイト文字または両方を含めることができます。

注意:
異なるタイムスタンプで特定のパスワードを再設定する必要があります。1秒以内に1つのパスワードを複数回再設定した場合(たとえば、スクリプトを使用して一連のパスワードの設定を繰り返した場合)、データベースはパスワードが再利用できないというエラー・メッセージを戻すことがあります。このため、パスワードの再設定には、スクリプトを使用しないことをお薦めします。

自分のパスワードを設定する場合、またはALTER USERシステム権限を持っていて、他のユーザーのパスワードを変更する場合は、REPLACE句を省略できます。ただし、ALTER USERシステム権限を持たないかぎり、複雑なパスワードの検証機能が使用可能な場合は、UTLPWDMG.SQLスクリプトを実行するか、またはユーザーに割り当てられたプロファイルのPASSWORD_VERIFY_FUNCTIONパラメータに検証機能を指定して、常にREPLACE句を指定する必要があります。

Oracle ASMクラスタで、この句を使用して、ユーザーのパスワードを、現行のノードのOracle ASMインスタンスに対してローカルなパスワード・ファイルで変更できます。REPLACE old_password句を使用せずにIDENTIFIED BY passwordを指定するには、AS SYSASMとして認証されている必要があります。AS SYSASMとして認証されていない場合は、REPLACE old_passwordを指定して自分のパスワードのみを変更できます。

以前のパスワードをREPLACE句に指定した場合でも、自分以外の既存のパスワードを変更している場合は、以前のパスワードはチェックされません。

関連項目:
パスワード作成のガイドラインに関しては『Oracle Databaseセキュリティ・ガイド』を参照してください

GLOBALLY この句の詳細は、「CREATE USER」を参照してください。

ユーザー・アクセスの検証方法は、IDENTIFIED GLOBALLYからIDENTIFIED BY passwordまたはIDENTIFIED EXTERNALLYのいずれかに変更できます。ユーザーのアクセス検証方法を他のいずれかの検証方法からIDENTIFIED GLOBALLYに変更できるのは、ユーザーに明示的に付与されたすべての外部ロールが取り消された場合のみです。

EXTERNALLY この句の詳細は、「CREATE USER」を参照してください。

関連項目:
グローバルまたは外部で識別されるユーザーの詳細は、『Oracle Databaseエンタープライズ・ユーザー・セキュリティ管理者ガイド』を参照してください。また、「ユーザー識別の変更例:」および「ユーザー認証の変更例:」も参照してください。

DEFAULT TABLESPACE句

この句を使用すると、ユーザーの永続セグメントの表領域の割当てまたは再割当てを行うことができます。この句は、データベース用に指定されているデフォルトの表領域を上書きします。

デフォルトの表領域の制限事項: ローカル管理の一時表領域(UNDO表領域を含む)またはディクショナリ管理の一時表領域は、ユーザーのデフォルトの表領域として指定できません。

TEMPORARY TABLESPACE句

この句を使用すると、ユーザーの一時セグメントの表領域または表領域グループの割当てまたは再割当てを行うことができます。

- tablespaceに、ユーザーの一時セグメント表領域を指定します。CDBに接続しているときに、CDB$DEFAULTを指定すると、CDB全体のデフォルト一時表領域を使用できます。

- tablespace_group_nameを指定すると、ユーザーは、tablespace_group_nameで指定された表領域グループ内の任意の表領域に一時セグメントを保存できるようになります。

ユーザーの一時表領域の制限事項: ユーザーの一時表領域として割り当てる表領域、または再度割り当てる表領域は、標準的なブロック・サイズの一時表領域である必要があります。

関連項目:
「表領域グループの割当て例:」

DEFAULT ROLE句

ログイン時にデフォルトによってユーザーに付与されるロールを指定します。この句では、GRANT文を使用してユーザーに直接付与されているロール、またはCREATE ROLE権限を持つユーザーが作成したロールのみ指定できます。DEFAULT ROLE句を使用して次のロールを指定することはできません。

- ユーザーに付与されていないロール

- 他のロールを介して付与されているロール

- 外部サービス(オペレーティング・システムなど)またはOracle Internet Directoryによって管理されるロール

- パスワード認証されるロールや保護アプリケーション・ロールなど、SET ROLE文によって使用可能になるロール

関連項目:
CREATE ROLE

CDBの共通ユーザーへのデフォルト・ロールの割当て 現在のコンテナや、CDB内のすべてのコンテナの共通ユーザーに割り当てられたデフォルト・ロールを変更できます。

すべてのコンテナの共通ユーザーにデフォルト・ロールを割り当てているときには、roleは、共通ユーザーに共通に付与された共通ロールにする必要があります。

現在のコンテナの共通ユーザーにデフォルト・ロールを割り当てているときには、roleは、次のいずれかのロールにする必要があります。

- 現在のコンテナの共通ユーザーに付与されたローカル・ロール

- 共通ユーザーに付与された共通ロール(共通に付与されたものか、現在のコンテナでローカルに付与されたもののいずれか)

ENABLE EDITIONS

この句は元に戻すことができません。ENABLE EDITIONSを指定すると、ユーザーは、エディションを使用しているスキーマ内で、エディション化可能なオブジェクトの複数のバージョンを作成できるようになります。エディションが有効でないスキーマ内のエディション化可能なオブジェクトは、エディション化できません。

FOR句を使用すると、ユーザーが作成できるエディション化可能オブジェクトについて、1つ以上のオブジェクト・タイプを指定できます。object_typeの有効な値のリストを表示するには、V$EDITIONABLE_TYPES動的パフォーマンス・ビューを問い合せます。FOR句を省略すると、ユーザーは、すべてのエディション化可能オブジェクト・タイプのエディション化可能オブジェクトを作成できるようになります。

関連項目:
V$EDITIONABLE_TYPES動的パフォーマンス・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

エディションを有効にするスキーマ内にエディション化が可能でないオブジェクトが含まれており、そのオブジェクトがスキーマ内のエディション化可能なオブジェクトに依存している場合は、FORCEを指定して、このスキーマのエディションを有効にする必要があります。この場合、エディションを有効にするスキーマ内にある、エディション化可能なタイプのオブジェクトに依存するオブジェクトのうち、エディション化が可能でないオブジェクトは、すべて無効になります。

CONTAINER句

現在のコンテナがPDBである場合、CONTAINER = CURRENTを指定すると、現在のコンテナ内で、ローカル・ユーザーの属性、または共通ユーザーのコンテナ固有の属性(デフォルト表領域など)を変更できます。現在のコンテナがルートである場合は、CONTAINER = ALLを指定することによって、CDB全体の共通ユーザーの属性を変更できます。現在のコンテナがPDBであるときにこの句を省略した場合、デフォルトはCONTAINER = CURRENTです。現在のコンテナがルートであるときにこの句を省略した場合、デフォルトはCONTAINER = ALLです。

CDBの共通ユーザー変更の制限事項: 共通ユーザーの特定の属性は、CDB内の一部のコンテナに限定するのではなく、すべてのコンテナに対して変更する必要があります。そのため、次のいずれかの句を使用して共通ユーザーを変更にするときには、ルートに接続し、CONTAINER=ALLを指定することによって、すべてのコンテナを変更するようにしてください。

- IDENTIFIED句

- PASSWORD句

container_data_clause

container_data_clauseを使用すると、共通ユーザーのCONTAINER_DATA属性を設定および変更できます。FOR句を使用すると、デフォルトのCONTAINER_DATA属性を設定または変更するのか、オブジェクト固有のCONTAINER_DATA属性を設定または変更するのかを指定できます。これらの属性によって決定されるコンテナ・セット(このセットからのルートの除外は不可)のデータが、現在のセッションがルートであるときに、CONTAINER_DATAオブジェクトを介して、指定した共通ユーザーに表示されます。

container_data_clauseを指定するには、現在のセッションがルートである必要があります。また、CONTAINER = CURRENTを指定する必要があります。

SET CONTAINER_DATA この句を使用すると、デフォルトのCONTAINER_DATA属性、または共通ユーザーのオブジェクト固有のCONTAINER_DATA属性を設定できます。この句を使用すると、CONTAINER_DATA属性に既存の値がある場合は、その値が置換されます。

container_nameを使用すると、ユーザーがアクセスできるようになる1つ以上のコンテナを指定できます。

ALLを使用すると、ユーザーは、CDBに含まれる現在または将来のすべてのコンテナにアクセスできるようになります。

DEFAULTを使用すると、次に示すデフォルトの動作を指定できます。

- デフォルトのCONTAINER_DATA属性の場合、ユーザーは、現在のコンテナ(つまり、ルート)と、CDB全体にアクセスできるようになります。

- オブジェクト固有のCONTAINER_DATA属性の場合、データベースはユーザーのデフォルトのCONTAINER_DATA属性を使用します。

注意:
CONTAINER_DATA属性はDEFAULTに設定されていると、DBA_CONTAINER_DATAビューに表示されません。

ADD CONTAINER_DATA この句を使用すると、デフォルトのCONTAINER_DATA属性、または共通ユーザーのオブジェクト固有のCONTAINER_DATA属性にコンテナを追加できます。container_nameを使用すると、追加するコンテナを1つ以上指定できます。

この句は、デフォルトのCONTAINER_DATA属性にALLを設定しているときには指定できません。デフォルトのCONTAINER_DATA属性にDEFAULTを設定しているときに、この句を使用すると、コンテナのセットにCDB$ROOTが自動的に追加されます(このセットにCDB$ROOTがすでに含まれていない場合)。

この句は、オブジェクト固有のCONTAINER_DATA属性をALLまたはDEFAULTに設定されているときには使用できません。

REMOVE CONTAINER_DATA この句を使用すると、デフォルトのCONTAINER_DATA属性、または共通ユーザーのオブジェクト固有のCONTAINER_DATA属性からコンテナを削除できます。container_nameを使用すると、削除するコンテナを1つ以上指定できます。

この句は、デフォルトのCONTAINER_DATA属性またはオブジェクト固有のCONTAINER_DATA属性をALLまたはDEFAULTに設定しているときには使用できません。

FOR container_data_object FOR句を指定すると、共通ユーザーのcontainer_data_objectのオブジェクト固有のCONTAINER_DATA属性を設定および変更できます。container_data_objectは、CONTAINER_DATA表またはビューであることが必要です。schemaを省略すると、そのcontainer_data_objectは自分のスキーマ内にあるとみなされます。

FOR句を省略すると、共通ユーザーのデフォルトのCONTAINER_DATA属性を設定および変更できるようになります。

関連項目:
PDBオブジェクトに関する情報が共通ユーザーに表示されるようにする方法の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

proxy_clause

proxy_clauseを使用すると、エンタープライズ・ユーザー(データベースの外側のユーザー)またはデータベース・プロキシ(別のデータベース・ユーザー)が、変更対象のデータベース・ユーザーとして、どのように接続できるようにするかを制御できます。

GRANT CONNECT THROUGH

GRANT CONNECT THROUGHを指定すると、接続を許可できます。

REVOKE CONNECT THROUGH

REVOKE CONNECT THROUGHを指定すると、接続を禁止できます。

ENTERPRISE USER

この句を使用すると、userを、エンタープライズ・ユーザーがプロキシ使用できるように公開できます。Oracle Internet Directoryを担当する管理者は、userの代理として作業するエンタープライズ・ユーザーに権限を適切に付与する必要があります。

db_user_proxy

この句を使用すると、userを、データベース・ユーザーdb_user_proxy (プロキシ)がプロキシ使用できるように公開できます。

- プロキシは、userに直接付与されたすべての権限を持ちます。

- db_user_proxy_clausesのWITH句を指定してプロキシをuserの一部のロールまたはロールなしに制限した場合を除き、プロキシはuserに関連付けられているすべてのロールを持ちます。プロキシに関連付けられている各ロールについて、デフォルトでログイン時にuserに対してロールが有効化される場合、プロキシに対してもデフォルトでログイン時にそのロールが有効化されます。

db_user_proxy_clauses

WITH句を指定して、プロキシをuserに関連付けられている一部のロールまたはロールなしに制限し、AUTHENTICATION REQUIRED句を使用して、認証が必要かどうかを指定します。

WITH ROLE WITH ROLE role_nameを使用すると、プロキシは指定したユーザーとして接続でき、role_nameで指定されたロールのみをアクティブにできます。この句は、userに関連付けられたロールのみを含みます。

WITH ROLE ALL EXCEPT WITH ROLE ALL EXCEPT role_nameを使用すると、プロキシは指定したユーザーとして接続でき、role_nameで指定されたロール以外の、このユーザーに関連付けられたすべてのロールをアクティブにできます。この句は、userに関連付けられたロールのみを含みます。

WITH NO ROLES WITH NO ROLESを使用すると、プロキシは指定したユーザーとして接続できますが、接続後にそのユーザーのロールを1つでもアクティブにすることは禁止されます。

AUTHENTICATION REQUIRED  AUTHENTICATION REQUIRED句を指定した場合を除き、Oracle Databaseはユーザーの認証にプロキシを想定しません。この句は、ユーザーが指定されたプロキシを介して認証される場合に、ユーザーの認証資格証明が提示される必要があることを示しています。資格証明は、パスワードです。

AUTHENTICATED USING  AUTHENTICATED USING句は、以前のリリースの構文で使用されていましたが、非推奨になり、必要ではありません。AUTHENTICATED USING PASSWORD句を指定した場合、AUTHENTICATION REQUIRED句に変換されます。AUTHENTICATED USING CERTIFICATE句またはAUTHENTICATED USING DISTINGUISHED NAME句を指定することは、AUTHENTICATION REQUIRED句を省略することと同じです。

関連項目:

- データベース・セキュリティの概要および中間層システムおよびプロキシ認証の詳細は、『Oracleセキュリティ概要』を参照してください。

- プロキシおよびデータベースの使用については、『Oracle Databaseセキュリティ・ガイド』および「プロキシ・ユーザー例:」を参照してください。

- アプリケーション・ユーザーのプロキシ認証の詳細は、『Oracle Database開発ガイド』を参照してください

例

ユーザー識別の変更例: 次の文は、ユーザーsidney(「データベース・ユーザーの作成例:」で作成)のパスワードをsecond_2nd_pwdに、デフォルト表領域を表領域exampleに変更します。

ALTER USER sidney
IDENTIFIED BY second_2nd_pwd
DEFAULT TABLESPACE example;

次の文は、new_profileプロファイル(「プロファイルの作成例:」で作成)をサンプル・ユーザーshに割り当てます。

ALTER USER sh
PROFILE new_profile;

後続のセッションでは、shはnew_profileプロファイルの制限に従います。

次の文は、shに直接付与されているすべてのロール(dw_managerロールを除く)をデフォルト・ロールに設定します。

ALTER USER sh
DEFAULT ROLE ALL EXCEPT dw_manager;

shの次のセッションの開始時には、dw_manager以外でshに直接付与されているすべてのロールが使用可能になります。

ユーザー認証の変更例: 次の文は、ユーザーapp_user1(「データベース・ユーザーの作成例:」で作成)の認証メカニズムを変更します。

ALTER USER app_user1 IDENTIFIED GLOBALLY AS 'CN=tom,O=oracle,C=US';

次の文は、ユーザーsidneyのパスワードを期限切れにします。

ALTER USER sidney PASSWORD EXPIRE;

PASSWORD EXPIREを使用してデータベース・ユーザーのパスワードを期限切れにした場合、そのユーザー(またはDBA)は、期限切れの後でデータベースにログインする際、パスワードを変更する必要があります。ただし、SQL*Plusなどのツール製品を使用した場合、期限切れの後の最初のログイン時に、パスワードを変更できます。

表領域グループの割当て例: 次の文は、tbs_grp_01(「表領域グループへの一時表領域の追加例:」で作成)を表領域グループとしてユーザーshに割り当てます。

ALTER USER sh
TEMPORARY TABLESPACE tbs_grp_01;

プロキシ・ユーザー例: 次の文は、ユーザーapp_user1を変更します。例では、app_user1がプロキシ・ユーザーshを使用して接続できます。また、プロキシshを使用して接続したときに、app_user1がwarehouse_userロール(「ロールの作成例:」で作成)を使用可能にできます。

ALTER USER app_user1
GRANT CONNECT THROUGH sh
WITH ROLE warehouse_user;

基本的な構文を示すため、サンプル・データベースSales Historyのユーザー(sh)をプロキシとして使用します。通常、プロキシ・ユーザーは、アプリケーション・サーバーまたは中間層のエンティティに存在します。アプリケーション・サーバーを経由して、アプリケーション・ユーザーとデータベースの間のインタフェースを作成する場合の詳細は、『Oracle Call Interfaceプログラマーズ・ガイド』を参照してください。

関連項目:

- app_userユーザーの作成方法については、「外部データベース・ユーザーの作成例:」を参照してください。

- dw_userロールの作成方法については、「ロールの作成例:」を参照してください。

次の文は、ユーザーapp_user1がプロキシ・ユーザーshを使用して接続する権限を取り消します。

ALTER USER app_user1 REVOKE CONNECT THROUGH sh;

次の仮想例は、プロキシ認証の他の方法を示します。

ALTER USER sully GRANT CONNECT THROUGH OAS1
AUTHENTICATED USING PASSWORD;

次の例では、ユーザーapp_user1をエンタープライズ・ユーザーがプロキシ使用できるように公開します。エンタープライズ・ユーザーは、Oracle Internet Directory管理者が適切な権限を付与するまでは、app_user1の代理として作業することができません。

ALTER USER app_user1
GRANT CONNECT THROUGH ENTERPRISE USERS;

ALTER VIEW

用途

ALTER VIEWを使用すると、無効なビューを明示的に再コンパイルしたり、ビューの制約を変更することができます。明示的に再コンパイルすると、実行前にコンパイル・エラーを検査できます。再コンパイルは、ビューの実表を変更した後で、その変更がビューまたはそのビューに依存するオブジェクトに影響していないかどうかを確認するときに便利です。

ALTER VIEWを使用して、制約のビューを定義、変更または削除することもできます。

この文を使用して既存のビュー定義を変更することはできません。また、ビューの実表に対するDDL変更によってビューが無効になる場合、この文を使用して無効なビューをコンパイルすることはできません。このような場合は、CREATE VIEWにOR REPLACEキーワードを指定して使用し、ビューを再定義する必要があります。

ALTER VIEW文を発行した場合、指定したビューは有効か無効かにかかわらず再コンパイルされます。また、そのビューに依存するすべてのローカル・オブジェクトが無効になります。

1つ以上のマテリアライズド・ビューが参照しているビューを変更した場合、これらのマテリアライズド・ビューは無効になります。無効なマテリアライズド・ビューは、クエリー・リライトには使用できず、リフレッシュもできません。

関連項目:

- ビューの再定義の詳細は、「CREATE VIEW」を参照してください。無効なマテリアライズド・ビューの再検証の詳細は、「ALTER MATERIALIZED VIEW」を参照してください。

- データ・ウェアハウスの概要は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

- スキーマ・オブジェクト間の依存性については、『Oracle Database概要』を参照してください。

前提条件

ビューが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、ALTER ANY TABLEシステム権限が必要です。

構文

alter_view::=

(out_of_line_constraint::=(「constraint::=」構文の一部)を参照)

セマンティクス

schema

ビューが含まれているスキーマを指定します。schemaを指定しない場合、ビューは自分のスキーマ内にあるとみなされます。

view

再コンパイルするビューの名前を指定します。

ADD句

ADD句を使用すると、viewに制約を追加できます。ビュー制約および制限事項については、「constraint」を参照してください。

MODIFY CONSTRAINT句

MODIFY CONSTRAINT句を使用すると、既存のビュー制約のRELYまたはNORELY設定を変更できます。この設定の使用方法の詳細は「RELY句」を、ビュー制約の概要は「ビュー制約の注意事項」を参照してください。

制約の変更の制限事項: 一意制約または主キー制約が参照整合性制約の一部である場合、外部キーの削除またはviewの設定にあわせた変更をせずに、設定を変更することはできません。

DROP句

DROPを使用すると、既存のビューの制約を削除できます。

制約の削除の制限事項: 一意制約または主キー制約がビューの参照整合性制約の一部である場合は削除できません。

COMPILE

COMPILEキーワードを指定すると、ビューを再コンパイルできます。

{ READ ONLY | READ WRITE }

これらの句は、エディショニング・ビューに対してのみ有効です。

- READ ONLYを指定すると、エディショニング・ビューを更新禁止にできます。

- READ WRITEを指定すると、読取り専用エディショニング・ビューを読取り/書込みステータスに戻すことができます。

これらの句を指定すると、依存オブジェクトは無効になりませんが、カーソルが無効になることがあります。

EDITIONABLE | NONEDITIONABLE

この句を使用すると、schemaのスキーマ・オブジェクト・タイプVIEWのエディショニングが後で有効化されたときに、そのビューをエディション・オブジェクトにするか非エディション・オブジェクトにするかを指定できます。デフォルトは、EDITIONABLEです。エディション・オブジェクトと非エディション・オブジェクトの変更の詳細は、『Oracle Database開発ガイド』を参照してください。

関連項目:
エディショニング・ビューの詳細は、「CREATE VIEW」を参照してください。

例

ビューの変更例: 次の文は、ビューcustomer_ro(「読取り専用ビューの作成例:」で作成)を再コンパイルします。

ALTER VIEW customer_ro
COMPILE;

customer_roの再コンパイル時にエラーが発生しなければ、customer_roは有効になります。再コンパイル・エラーが発生した場合はエラーが戻り、customer_roは無効のままとなります。

依存するオブジェクトもすべて無効になります。依存オブジェクトとは、customer_roを参照する、プロシージャ、ファンクション、パッケージ本体、ビューなどです。その後、明示的に再コンパイルせずに、これらのオブジェクトを参照した場合、データベースは実行時にそれらを暗黙的に再コンパイルします。

ANALYZE

用途

ANALYZE文を使用すると、統計情報を収集して、次のような操作を実行できます。

- 索引または索引パーティション、表または表パーティション、索引構成表、クラスタまたはスカラー・オブジェクト属性の統計情報を収集または削除します。

- 索引または索引パーティション、表または表パーティション、索引構成表、クラスタまたはオブジェクト参照(REF)の構造を検証します。

- 表またはクラスタの移行行と連鎖行を識別します。

注意:
ほとんどの統計の収集にはDBMS_STATSパッケージを使用します。このパッケージでは、パラレルでの統計の収集、パーティション化されたオブジェクトのグローバル統計の収集、その他の方法での統計収集の微調整を行うことができます。DBMS_STATSパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
次のようなコスト・ベースのオプティマイザとは関係のない統計情報の収集には、(DBMS_STATSではなく)ANALYZE文を使用します。

- VALIDATE句、LIST CHAINED ROWS句の使用

- 空きリストのブロックに関する情報の収集

前提条件

分析するスキーマ・オブジェクトがローカルである必要があります。自分のスキーマ内にない場合は、ANALYZE ANYシステム権限が必要です。

表またはクラスタの連鎖行をリスト表へ入れる場合、このリスト表が自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、そのリスト表のINSERT権限またはINSERT ANY TABLEシステム権限が必要です。

パーティション表の妥当性チェックを行う場合は、分析したROWIDを入れる表に対するINSERTオブジェクト権限またはINSERT ANY TABLEシステム権限が必要です。

構文

analyze::=

partition_extension_clause::=

validation_clauses::=

into_clause::=

セマンティクス

schema

表、索引またはクラスタが含まれているスキーマを指定します。schemaを指定しない場合、表、索引またはクラスタは自分のスキーマ内にあるとみなされます。

TABLE table

分析する表を指定します。表を分析すると、すべてのファンクション索引に発生する式について統計情報が収集されます。したがって、表を分析する前に、必ずファンクション索引を作成してください。ファンクション索引の詳細は、「CREATE INDEX」を参照してください。

表を分析すると、LOADINGまたはFAILEDのマークが付いたドメイン索引はすべてスキップされます。

索引構成表の場合、マッピング表が分析され、そのPCT_ACCESSS_DIRECT統計情報も計算されます。これらの統計情報は、マッピング表のローカルROWIDの一部として格納されたと推測されるデータ・ブロック・アドレスの精度を評価します。

表については、次の統計情報が収集されます。アスタリスクが付いた統計情報は、常に厳密に計算されます。表の統計情報(ドメイン索引の状態を含む)は、データ・ディクショナリ・ビューUSER_TABLES、ALL_TABLESおよびDBA_TABLESのカッコで示す列に表示されます。

- 行数(NUM_ROWS)

- 最高水位標を下回るデータ・ブロックの数(現在データを含むか含まないかにかかわらず、データを格納するようにフォーマットされているデータ・ブロックの数)(BLOCKS)*

- 未使用の表に対して割り当てられているデータ・ブロックの数(EMPTY_BLOCKS)*

- 各データ・ブロックにおける使用可能な空き領域サイズの平均値(バイト単位)(AVG_SPACE)

- 連鎖行の数(CHAIN_COUNT)

- 行のオーバーヘッドを含む、バイト単位での行の平均の長さ(AVG_ROW_LEN)

表の分析の制限事項: 表の分析には、次の制限事項があります。

- ANALYZEを使用して、データ・ディクショナリ表の統計情報を収集しないでください。

- ANALYZEを使用して、外部表の統計情報を収集しないでください。かわりに、DBMS_STATSパッケージを使用する必要があります。

- ANALYZEを使用して、一時表のデフォルト統計情報を収集しないでください。ただし、すでに一時表の1つ以上の列とユーザー定義統計タイプを対応付けている場合、ANALYZEを使用して一時表のユーザー定義統計情報を収集できます。

- REF列型、VARRAY、ネストした表、LOB列型(LOB列型は分析されずにスキップされる)、LONG列型、オブジェクト型などの列型の統計情報は計算または推定できません。ただし、このような列に統計タイプが対応付けられている場合は、ユーザー定義統計情報が収集されます。

関連項目:

- 「ASSOCIATE STATISTICS」

- データ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

partition_extension_clause

統計情報を収集するパーティションまたはサブパーティション、あるいはパーティション値またはサブパーティション値を指定します。クラスタの分析時にこの句は使用できません。

tableがコンポジット・パーティションのときにPARTITIONを指定した場合、指定したパーティション内ですべてのサブパーティションが分析されます。

INDEX index

分析する索引を指定します。

索引については、次の統計情報が収集されます。アスタリスクが付いた統計情報は、常に厳密に計算されます。従来索引について統計情報を計算または推定する場合、統計情報は、データ・ディクショナリ・ビューUSER_INDEXES、ALL_INDEXESおよびDBA_INDEXESのカッコで示す列に表示されます。

- ルート・ブロックからリーフ・ブロックまでの索引の深さ(BLEVEL)*

- リーフ・ブロックの数(LEAF_BLOCKS)

- 個別索引値の数(DISTINCT_KEYS)

- 索引の値ごとのリーフ・ブロックの平均数(AVG_LEAF_BLOCKS_PER_KEY)

- (表に対する索引の)索引の値ごとのデータ・ブロックの平均数(AVG_DATA_BLOCKS_PER_KEY)

- クラスタ係数(索引付きの値についての行が、どれだけ効率的に順序付けられているか)(CLUSTERING_FACTOR)

ドメイン索引の場合、索引に関連付けられた統計タイプで指定したユーザー定義統計収集ファンクションが、この文によって起動されます(「ASSOCIATE STATISTICS」を参照)。ドメイン索引に関連付けられた統計タイプがない場合、その索引タイプに関連付けられた統計タイプが使用されます。索引またはその索引タイプの統計タイプがない場合、ユーザー定義統計情報は収集されません。ユーザー定義索引統計情報は、データ・ディクショナリ・ビューUSER_USTATS、ALL_USTATSおよびDBA_USTATSのSTATISTICS列に表示されます。

注意:

- 多数の行が削除されている索引を分析する場合、統計情報操作としてESTIMATEを要求しても、COMPUTE統計情報操作が実行され、全表スキャンが行われることがあります。このような操作は、非常に時間がかかる場合があります。

- ANALYZE文で索引を分析すると、完了までかなりの時間がかかる場合があります。この場合、SQL問合せを使用して索引を検証できます。問合せにより表と索引間に不整合があると判定された場合、索引を詳細に分析するためにANALYZE文を使用できます。詳細は、『Oracle Database管理者ガイド』を参照してください。

索引の分析の制限事項: IN_PROGRESSまたはFAILEDのマークが付いたドメイン索引は分析できません。

関連項目:

- ドメイン索引の詳細は、「CREATE INDEX」を参照してください。

- データ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

- 「索引の分析例:」

CLUSTER cluster

分析するクラスタを指定します。クラスタの統計情報を収集すると、すべてのクラスタ表、およびクラスタ索引を含むすべての索引の統計情報も自動的に収集されます。

索引クラスタとハッシュ・クラスタには、単一クラスタ・キー(AVG_BLOCKS_PER_KEY)が使用するデータ・ブロックの平均数が収集されます。これらの統計情報は、データ・ディクショナリ・ビューALL_CLUSTERS、USER_CLUSTERSおよびDBA_CLUSTERSに表示されます。

関連項目:
データ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』および「クラスタの分析例:」を参照してください。

validation_clauses

validation_clausesを使用すると、REF値および分析したオブジェクトの構造を検証できます。

関連項目:
表、索引、クラスタおよびマテリアライズド・ビューの検証の詳細は、『Oracle Database管理者ガイド』を参照してください。

VALIDATE REF UPDATE句

VALIDATE REF UPDATEを指定すると、指定した表内のREF値の妥当性チェックを行って、個々のREFのROWID部分を検査し、真のROWIDと比較して、必要に応じて修正できます。この句を使用できるのは、表を分析する場合のみです。

表の所有者が参照先オブジェクトに対するREADまたはSELECTオブジェクト権限を持っていない場合、このオブジェクトは無効とみなされ、NULLに設定されます。その結果、オブジェクトに対して適切な権限を持つユーザーによって発行された問合せであっても、問合せでこれらのREF値を使用することはできません。

SET DANGLING TO NULL SET DANGLING TO NULLを指定すると、指定した表内のREF値が(範囲が限定されるかどうかにかかわらず)無効なオブジェクトまたは存在しないオブジェクトを指している場合に、REF値がNULLに設定されます。

VALIDATE STRUCTURE

VALIDATE STRUCTUREを指定すると、分析対象オブジェクトの構造を検証できます。この句で収集された統計情報はOracle Databaseオプティマイザでは使用されません。

関連項目:
「表の検証例:」

- 表に対して、それぞれのデータ・ブロックと行の整合性が検証されます。索引構成表の場合、表の主キー索引に対する圧縮統計情報(最適なプレフィックス圧縮件数)も生成されます。

- クラスタに対して、自動的にクラスタ表の構造が検証されます。

- パーティション表の場合、行が適切なパーティションに属するかどうかが検証されます。行が正しく照合されなかった場合は、ROWIDがINVALID_ROWS表に挿入されます。

- 一時表に対して、現行のセッション中に表の構造および索引が検証されます。

- 索引に対して、索引のそれぞれのデータ・ブロックの整合性が検証され、ブロックの破損がチェックされます。この句は、表のそれぞれの行が索引エントリを持っていること、またはそれぞれの索引エントリが表の行を指していることを確認するわけではありません。これらを確認する場合は、CASCADE句を使用して表の構造を検証します。
通常のすべての索引用の圧縮統計情報(最適なプレフィックス圧縮件数)も計算されます。

索引の統計情報は、データ・ディクショナリ・ビューINDEX_STATSおよびINDEX_HISTOGRAMに格納されます。

関連項目:
これらのビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

オブジェクトの構造に障害がある場合は、エラー・メッセージが戻ります。この場合、オブジェクトを削除して作成しなおす必要があります。

CASCADE CASCADEを指定すると、表またはクラスタに関連付けられた索引の構造を検証できます。表を検証するときにこの句を指定すると、その表に定義された索引も検証されます。クラスタを検証するときにこの句を指定した場合、クラスタ表のすべての索引(クラスタ索引を含む)が検証されます。

デフォルトでは、CASCADEを指定すると完全な検証(COMPLETE)が実行されますが、この処理はリソースを大量に消費する可能性があります。FASTを指定すると、破損の有無の検査が行われますが、破損の詳細はレポートされません。FASTを指定したときに破損が検出された場合は、CASCADEオプションをFAST句なしで使用すると、破損の場所を特定してその詳細を知ることができます。

この句を使用して使用可能な(以前は使用禁止であった)ファンクション索引を検証すると、検証エラーになる場合があります。この場合は、索引を再構築する必要があります。

ONLINE | OFFLINE ONLINEを指定すると、Oracle DatabaseがオブジェクトのDML操作中に検証を実行できるようになります。データベースは、並行して操作が行える程度に、実行する検証の量を減らします。

注意:
OFFLINE指定でオブジェクトの構造を検証する場合と同様に、ONLINE指定でオブジェクトの構造を検証する場合、Oracle Databaseは統計情報を収集しません。

OFFLINEを指定すると、実行する検証の量が最大になります。この設定は、検証中にINSERT、UPDATEおよびDELETE文がオブジェクトに平行してアクセスすることを防ぎますが、問合せは許可されます。これはデフォルトです。

ONLINEの制限事項: ONLINEは、クラスタを分析する場合には指定できません。

INTO VALIDATE STRUCTUREのINTO句は、パーティション表のみに有効です。正しく照合されなかった行を持つパーティションのROWIDを格納するリスト表を指定します。schemaを指定しない場合、リストは自分のスキーマ内にあるとみなされます。この句自体を指定しない場合、表の名前はINVALID_ROWSになります。この表を作成するために使用するSQLスクリプトはUTLVALID.SQLです。

LIST CHAINED ROWS

LIST CHAINED ROWSを指定すると、分析した表またはクラスタの移行行および連鎖行を識別できます。索引の分析時にこの句は使用できません。

INTO句には、移行行および連鎖行をリストする表を指定します。schemaを指定しない場合、連鎖行表は自分のスキーマ内にあるとみなされます。この句自体を指定しない場合、表の名前はCHAINED_ROWSになります。連鎖行表は、ローカル・データベース内にある必要があります。

次のいずれかのスクリプトを使用して、CHAINED_ROWS表を作成できます。

- UTLCHAIN.SQL: 物理ROWIDを使用します。そのため、行は、索引構成表からではなく従来表から収集されます。(次の注意を参照。)

- UTLCHN1.SQL: ユニバーサルROWIDを使用します。そのため、行は、従来表および索引構成表の両方から収集されます。

独自の連鎖行表を作成する場合、この2つのスクリプトのいずれかで規定されるフォーマットに従う必要があります。

分析対象の索引構成表が、ユニバーサルROWIDではなく主キーに基づくものである場合は、表の主キーを格納するために、索引構成表ごとに別の連鎖行表を作成する必要があります。SQLスクリプトDBMSIOTC.SQLおよびPRVTIOTC.PLBを使用してBUILD_CHAIN_ROWS_TABLEプロシージャを定義してから、このプロシージャを実行して、索引構成表ごとにIOT_CHAINED_ROWS表を作成します。

関連項目:

- パッケージ化されたSQLスクリプトの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』のDBMS_IOTパッケージを参照してください。

- 「連鎖行のリスト例:」

DELETE STATISTICS

DELETE STATISTICSを指定すると、現在データ・ディクショナリに格納されている、分析したオブジェクトの統計情報を削除できます。Oracle Databaseに統計情報を使用させないようにする場合、この文を使用します。

表を指定してこの句を使用した場合、指定した表に定義されたすべての索引の統計情報も自動的に削除されます。クラスタを指定してこの句を使用した場合、指定したクラスタのすべての表、およびこれらの表のすべての索引(クラスタ索引を含む)の統計情報も自動的に削除されます。

ユーザー定義統計情報ではなく、システム統計情報のみを削除する場合は、SYSTEMを指定します。SYSTEMを指定しないと、オブジェクトのユーザー定義列または索引統計情報が収集された場合、データベースは、統計情報を収集するために使用された情報タイプに指定されている統計削除ファンクションを起動して、ユーザー定義統計情報も削除します。

関連項目:
「統計情報の削除例:」

例

統計情報の削除例: 次の文は、サンプル表oe.ordersとデータ・ディクショナリにあるそのすべての索引の統計情報を削除します。

ANALYZE TABLE orders DELETE STATISTICS;

索引の分析例: 次の文は、サンプル索引oe.inv_product_ixの構造を検証します。

ANALYZE INDEX inv_product_ix VALIDATE STRUCTURE;

表の検証例: 次の文は、サンプル表hr.employeesおよびそのすべての索引を分析します。

ANALYZE TABLE employees VALIDATE STRUCTURE CASCADE;

表の場合は、VALIDATE REF UPDATE句を指定すると、指定した表内のREF値が検証され、REF値それぞれのROWID部分が検査された後で、真のROWIDと比較されます。その結果、ROWIDが誤っていることが判明した場合は、ROWID部分が正しくなるようにREFが更新されます。

次の文は、サンプル表oe.customersのREF値を検証します。

ANALYZE TABLE customers VALIDATE REF UPDATE;

次の文は、DML操作を同時に実行することを許可して、サンプル表oe.customersの構造を検証します。

ANALYZE TABLE customers VALIDATE STRUCTURE ONLINE;

クラスタの分析例: 次の文は、personnelクラスタ(「クラスタの作成例:」で作成)、そのすべての表、クラスタ索引を含むすべての索引を分析します。

ANALYZE CLUSTER personnel
VALIDATE STRUCTURE CASCADE;

連鎖行のリスト例: 次の文は、orders表のすべての連鎖行についての情報を収集します。

ANALYZE TABLE orders
LIST CHAINED ROWS INTO chained_rows;

前述の文では、情報は表chained_rowsに格納されます。次の問合せでその行を検証できます(表に連鎖行が含まれない場合は、行は戻されません)。

SELECT owner_name, table_name, head_rowid, analyze_timestamp
FROM chained_rows
ORDER BY owner_name, table_name, head_rowid, analyze_timestamp;

OWNER_NAME  TABLE_NAME  HEAD_ROWID         ANALYZE_TIMESTAMP
----------  ----------  ------------------ -----------------
OE          ORDERS      AAAAZzAABAAABrXAAA 25-SEP-2000

ASSOCIATE STATISTICS

用途

ASSOCIATE STATISTICS文を使用すると、統計収集、選択性またはコストに関するファンクションが含まれた統計タイプ(またはデフォルトの統計)を、1つ以上の列、スタンドアロン・ファンクション、パッケージ、型、ドメイン索引または索引タイプに関連付けることができます。

現在のすべての統計タイプの関連付けのリストについては、USER_ASSOCIATIONSデータ・ディクショナリ・ビューを問い合せます。統計情報に関連付けるオブジェクトを分析する場合、USER_USTATSビューでその関連性を問い合せることができます。

関連項目:
ANALYZEが関連性で使用する優先順位については、「ANALYZE」を参照してください。

前提条件

この文を発行する場合は、ベース・オブジェクト(表、ファンクション、パッケージ、型、ドメイン索引または索引タイプ)を変更する適切な権限が必要です。さらに、デフォルト統計情報のみを関連付けていないかぎり、統計タイプに対する実行権限が必要です。統計タイプは、すでに定義されている必要があります。

関連項目:
型の定義の詳細は、「CREATE TYPE」を参照してください。

構文

associate_statistics::=

column_association::=

function_association::=

using_statistics_type::=

default_cost_clause::=

default_selectivity_clause::=

storage_table_clause::=

セマンティクス

column_association

1つ以上の表の列を指定します。schemaを指定しない場合、表は自分のスキーマ内にあるとみなされます。

function_association

1つ以上のスタンドアロン・ファンクション、パッケージ、ユーザー定義データ型、ドメイン索引または索引タイプを指定します。schemaを指定しない場合、オブジェクトは自分のスキーマ内にあるとみなされます。

- FUNCTIONSは、スタンドアロン・ファンクションのみを参照し、メソッド型または組込みファンクションは参照しません。

- TYPESはユーザー定義型のみを参照し、組込みSQLデータ型は参照しません。

function_associationの制限事項: すでに関連性を定義してあるオブジェクトには指定できません。まず、このオブジェクトと統計情報の関連性を取り消す必要があります。

関連項目:
「DISASSOCIATE STATISTICS」および「統計情報の関連付け例:」

using_statistics_type

列、ファンクション、パッケージ、型、ドメイン索引または索引タイプと関連付ける統計タイプ(または型のシノニム)を指定します。statistics_typeは作成済である必要があります。

NULLキーワードが有効であるのは、統計情報を列または索引に関連付ける場合のみです。統計タイプをオブジェクト型に関連付けると、そのオブジェクト型の列は統計タイプを継承します。同様に、統計タイプを索引タイプに関連付けると、その索引タイプの索引インスタンスは統計タイプを継承します。この継承を無効にするには、その列または索引に別の統計タイプを関連付けます。その列や索引に統計タイプが何も関連付けられていない状態にするには、using_statistics_type句の中でNULLを指定します。

統計タイプの指定の制限事項: ファンクション、パッケージ、型または索引タイプにはNULLを指定できません。

関連項目:
統計収集ファンクションの作成の詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。

default_cost_clause

スタンドアロン・ファンクション、パッケージ、型、ドメイン索引または索引タイプのデフォルトのコストを指定します。この句を指定する場合、CPUコスト、I/Oコスト、ネットワーク・コストの順でそれぞれに対して1つの数を指定する必要があります。それぞれのコストは、ファンクションまたはメソッドを一度実行した場合、またはドメイン索引に一度アクセスした場合の値です。指定できる値は0(ゼロ)以上の整数です。

default_selectivity_clause

スタンドアロン・ファンクション、型、パッケージまたはユーザー定義演算子が指定された述語に対するデフォルトの選択性をパーセントで指定します。default_selectivity_clauseは、0から100の数値である必要があります。範囲外のものは無視されます。

default_selectivity_clause句の制限事項: DEFAULT SELECTIVITYは、ドメイン索引または索引タイプに指定できません。

関連項目:
「デフォルト・コストの指定例:」

storage_table_clause

この句は、INDEXTYPEの統計に対してのみ有効です。

- WITH SYSTEM MANAGED STORAGE TABLESを指定すると、統計データの格納がシステムで管理されます。statistics_typeに指定するタイプによって、システムで保持される表に統計関連の情報が格納されます。また、指定する索引タイプはすでに登録済であるか、またはWITH SYSTEM MANAGED STORAGE TABLES句をサポートするように変更されている必要があります。

- WITH USER MANAGED STORAGE TABLESを指定すると、ユーザー定義の統計情報を格納する表は、ユーザーによって管理されます。これはデフォルトの動作です。

例

統計情報の関連付け例: 次の文は、スタンドアロン・パッケージemp_mgmtへの関連性を作成します。このパッケージを作成する例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。

ASSOCIATE STATISTICS WITH PACKAGES emp_mgmt DEFAULT SELECTIVITY 10;

デフォルト・コストの指定例: 次の文は、ドメイン索引salary_index(「拡張索引作成機能の使用方法」で作成)を使用して任意の述語を実装した場合、常にCPUコストは100、I/Oコストは5、およびネットワーク・コストは0になるように指定します。

ASSOCIATE STATISTICS WITH INDEXES salary_index DEFAULT COST (100,5,0);

オプティマイザは、コスト・ファンクションをコールするかわりに、これらのデフォルト・コストを使用します。

AUDIT (従来型監査)

この項では、従来型監査のAUDIT文について説明します。 これは、Oracle Database 12cより前のリリースで使用されていた監査機能と同じものです。

Oracle Database 12cから、高度な監査機能を完備した統合監査が導入されました。下位互換性を確保するために、従来型監査も引き続きサポートされています。ただし、既存の監査設定から新しい統合監査ポリシー構文への移行を計画することをお薦めします。新しい監査要件については、新しい統合監査を使用してください。従来型監査は、将来のメジャー・リリースでサポート対象外になる可能性があります。

関連項目:
統合監査用のAUDIT文の詳細は、「AUDIT (統合監査)」を参照してください。

用途

AUDIT文を使用すると、次の操作を実行できます。

- 後続のユーザー・セッションでのSQL文の発行の監査。特定のSQL文、または特定のシステム権限によって許可されたすべてのSQL文の発行を監査できます。SQL文操作の監査は、後続セッションにのみ適用され、現行のセッションには適用されません。

- 特定のスキーマ・オブジェクトに対する操作の監査。スキーマ・オブジェクト操作の監査は、後続のセッションと同様に、現行のセッションにも適用されます。

関連項目:

- 値に基づいた監査方針を作成および管理するDBMS_FGAパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

- 「NOAUDIT (従来型監査)」

前提条件

SQL文の発行を監査するには、AUDIT SYSTEMシステム権限が必要です。ただし、IN SESSION CURRENT句を使用する場合はAUDIT SYSTEMシステム権限は必要ありません。

監査結果を収集するには、初期化パラメータAUDIT_TRAILをデフォルトの設定であるNONE以外の値に設定して、監査を有効にする必要があります。監査オプションは、監査が使用可能であるかどうかにかかわらず指定できます。ただし、監査を有効にしないと、監査レコードは作成されません。

スキーマ・オブジェクト操作を監査するためには、監査対象のオブジェクトが自分のスキーマにある必要があります。自分のスキーマにない場合は、AUDIT ANYシステム権限が必要です。また、監査の対象とするオブジェクトがディレクトリ・オブジェクトの場合は、それが自分で作成したものであっても、AUDIT ANYシステム権限が必要です。

マルチテナント・コンテナ・データベース(CDB)に接続している場合、この項で説明されている権限(現在のコンテナでローカルに付与されているか共通に付与されているいずれかの権限)が必要です。

CONTAINER句を指定する場合は、マルチテナント・コンテナ・データベース(CDB)に接続している必要があります。CONTAINER = CURRENTを指定するには、現在のコンテナがプラガブル・データベース(PDB)である必要があります。CONTAINER = ALLを指定する場合は、現在のコンテナがルートである必要があります。

注意:
AUDIT ANYシステム権限によって、権限受領者は、SYSスキーマを除く任意のスキーマ内の任意のオブジェクトを監査できます。O7_DICTIONARY_ACCESSIBILITY初期化パラメータをTRUEに設定することによって、そのような権限受領者がSYSスキーマ内のオブジェクトを監査できるようにすることができます。セキュリティ上の理由のため、この設定の使用には注意が必要です。

関連項目:
AUDIT_TRAILパラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

構文

audit::=

audit_operation_clause::=

auditing_by_clause::=

audit_schema_object_clause::=

auditing_on_clause::=

セマンティクス

CDBでのAUDIT文の使用についての注意

CDBでAUDIT文を発行すると、データベースは次のように監査を実行します。

- 現在のコンテナがPDBの場合にAUDIT文を発行すると、データベースはそのPDBで監査を実行します。auditing_by_clauseを指定する場合、userは、PDBのローカル・ユーザーまたは共通ユーザーにする必要があります。audit_schema_object_clauseを指定する場合、オブジェクトはPDBのローカル・オブジェクトにする必要があります。

- 現在のコンテナがルートの場合にAUDIT文を発行すると、データベースはCDB全体つまりルートおよびすべてのPDBで監査を実行します。auditing_by_clauseを指定する場合、userは、共通ユーザーにする必要があります。auditing_by_clauseを省略すると、各PDBのすべてのローカル・ユーザーおよびすべての共通ユーザーが監査されます。audit_schema_object_clauseを指定する場合、オブジェクトはルートまたは共通オブジェクトのローカル・オブジェクトにする必要があります。

audit_operation_clause

audit_operation_clauseを使用すると、操作の影響を受けるスキーマ・オブジェクトに関係なく、指定された操作を監査できます。

sql_statement_shortcut

ショートカットを指定すると、特定のSQL文の使用を監査できます。表13-1および表13-2に、ショートカットおよびそれらが監査するSQL文を示します。

注意:
SQL文ショートカットとシステム権限を混同しないでください。次に例を示します。

- AUDIT USER文は、SQLのCREATE USER、ALTER USERおよびDROP USER文のすべてを監査するUSERショートカットを指定します。この場合の監査には、ユーザーがALTER USER文で自分のパスワードを変更する操作が含まれています。

- AUDIT ALTER USER文では、ALTER USERシステム権限を指定して、そのシステム権限を使用するすべての操作を監査できるようにします。この場合の監査には、ユーザーが自分のパスワードを変更する操作は含まれません。これは、その操作には、ALTER USERシステム権限は必要ないためです。

監査されるたびに、次の情報を持つ監査レコードが生成されます。

- 操作を行ったユーザー

- 操作の種類

- 操作に関連するオブジェクト

- 操作の日付と時刻

監査レコードは、監査証跡に書き込まれます。監査証跡とは、監査レコードが入っているデータベースの表です。データ・ディクショナリ・ビューを問い合せて監査証跡を調べることによって、データベース・アクティビティを再検討できます。

関連項目:

- 監査証跡データ・ディクショナリ・ビューのリストの詳細は、『Oracle Databaseセキュリティ・ガイド11gリリース2(11.2)』を参照してください。Oracle Database 11g Release 2 (11.2)のドキュメントを見つける方法は、『Oracle Databaseアップグレード・ガイド』を参照してください。

- データ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

- 「ロールに関連するSQL文の監査例:」

system_privilege

システム権限を指定すると、そのシステム権限で許可されているSQL文およびその他の操作を監査できます。

注意:
ANYキーワードを含むシステム権限の使用の監査は、ANYキーワードを含まない同じ権限の使用の監査より限定的です。次に例を示します。

- AUDIT CREATE PROCEDUREは、CREATE PROCEDUREまたはCREATE ANY PROCEDURE権限を使用して発行された文を監査します。

- AUDIT CREATE ANY PROCEDUREは、CREATE ANY PROCEDURE権限を使用して発行された文のみを監査します。

多くの個々のシステム権限を指定するのではなく、ロールCONNECT、RESOURCEおよびDBAを指定できます。これは、そのロールに付与されているすべてのシステム権限を監査することと同じです。

Oracle Databaseには、システム権限と文オプションをまとめて指定するための、次の3つのショートカットが用意されています。

ALL ALLを指定すると、表13-1のすべての文オプションを監査できます。ただし、表13-2の追加文オプションは監査しません。

ALL STATEMENTS ALL STATEMENTSを指定すると、実行されるすべてのトップレベルSQL文を監査できます。トップレベルSQL文は、ユーザーによって直接発行される文です。PL/SQLプロシージャ内またはファンクション内から実行されるSQL文は、トップレベルの文とはみなされません。そのため、この句では、PL/SQLプロシージャ内またはファンクション内から実行される文は監査されません。ただし、PL/SQLプロシージャまたはファンクション自体の実行は監査されます。この句は、システム全体またはユーザー固有の他の監査構成に関係なく、特定の環境内の文をすべて監査する場合に有効です。

ALL PRIVILEGES ALL PRIVILEGESを指定すると、システム権限を監査できます。

注意:
ロールまたはショートカットでなく、監査に個々のシステム権限および文オプションを指定することをお薦めします。ロールおよびショートカットに含まれるシステム権限および文オプションは、リリースごとに異なり、Oracle Databaseの今後のバージョンでサポートされない場合があります。

関連項目:

- すべてのシステム権限とそれによって許可される操作のリストは、表18-1「システム権限(操作対象のデータベース・オブジェクト別)」を参照してください。

- CONNECT、RESOURCEおよびDBAロールの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

- 「問合せおよび更新を行うSQL文の監査例:」、「削除の監査例:」および「ディレクトリに関連する文の監査例:」を参照してください。

auditing_by_clause

auditing_by_clauseを指定すると、特定のユーザーによって発行されたSQL文のみを監査するように制限できます。この句を指定しない場合、すべてのユーザー文が監査されます。

IN SESSION CURRENT

この句を使用すると、監査を現行のセッションに制限できます。監査はセッションが終了するまで続行し、NOAUDIT文を使用して停止することはできません。

audit_schema_object_clause

audit_schema_object_clauseを使用すると、特定のスキーマ・オブジェクトの操作を監査できます。

audit_schema_object_clauseの制限事項 CDBに接続している場合、audit_schema_object_clauseを指定できますが、CONTAINER句も指定することはできません。この制限事項は、CONTAINER句で使用できる値がデフォルト値のみのため、機能を制限することはありません。詳細は、CONTAINER句を参照してください。

sql_operation

監査するSQL操作を指定します。表13-3に、監査できるオブジェクトのタイプ、およびオブジェクトごとに監査できるSQL文を示します。たとえば、ALTER操作を指定して表の監査を選択した場合、その表に対して発行されるALTER TABLE文がすべて監査されます。また、SELECT操作を指定して順序の監査を選択した場合、その順序の値を使用するすべての文が監査されます。

ALL

ALLをショートカットに指定することは、オブジェクト・タイプに適用できるSQL操作をすべて指定することと同じです。

auditing_on_clause

auditing_on_clauseを使用すると、監査する特定のスキーマ・オブジェクトを指定できます。

関連項目:
「表の問合せの監査例:」、「表の挿入および更新の監査例:」および「順序の操作の監査例:」を参照してください。

schema 監査の対象として選択されたオブジェクトが定義されているスキーマを指定します。schemaを指定しない場合、オブジェクトは自分のスキーマ内にあるとみなされます。

object 監査するオブジェクトの名前を指定します。オブジェクトは、表、ビュー、順序、ストアド・プロシージャ、ストアド・ファンクション、パッケージ、マテリアライズド・ビュー、マイニング・モデルまたはライブラリのいずれかである必要があります。

表、ビュー、順序、ストアド・プロシージャ、ストアド・ファンクション、パッケージ、マテリアライズド・ビューまたはユーザー定義型については、それぞれシノニムも指定できます。

ON DIRECTORY ON DIRECTORY句を使用すると、監査するディレクトリ名を指定できます。

ON MINING MODEL ON MINING MODEL句を使用すると、監査するマイニング・モデル名を指定できます。

ON SQL TRANSLATION PROFILE

ON SQL TRANSLATION PROFILE句を使用すると、監査対象にするSQL翻訳プロファイルを指定できます。

ON DEFAULT ON DEFAULTを指定すると、それ以降に作成したオブジェクトのデフォルト・オブジェクト・オプションとして使用する、指定のオブジェクト・オプションを作成できます。デフォルトの監査オプションが確立されると、その後作成されるオブジェクトに対して、これらのオプションが自動的に適用され、監査が行われます。ビューに対するデフォルト監査オプションは、常に、そのビューの実表に対する監査オプションの論理和となります。ALL_DEF_AUDIT_OPTSデータ・ディクショナリ・ビューを問い合せることによって、現在のデフォルト監査オプションを表示できます。

デフォルト監査オプションを変更した場合でも、以前作成したオブジェクトの監査オプションはそのまま残ります。AUDIT文のON句にオブジェクトを指定した場合のみ、既存のオブジェクトの監査オプションを変更できます。

関連項目:
「デフォルト監査オプションの設定例:」

NETWORK

この句を使用すると、ネットワーク・レイヤーの内部的な障害を検出できます。

関連項目:
ネットワーク監査の詳細は、『Oracle Databaseセキュリティ・ガイド11gリリース2(11.2)』を参照してください。Oracle Database 11g Release 2 (11.2)のドキュメントを見つける方法は、『Oracle Databaseアップグレード・ガイド』を参照してください。

DIRECT_PATH LOAD

この句を使用すると、SQL*Loaderのダイレクト・パス・ロードを監査できます。

BY SESSION

以前のリリースでは、BY SESSIONを指定すると、データベースによって、同一セッションの同一スキーマ・オブジェクトで実行された同じ種類のすべてのSQL文または操作に対して1つのレコードが書き込まれました。このリリースのOracle Databaseからは、BY SESSIONおよびBY ACCESSを指定すると、監査された文および操作ごとに1つの監査レコードが書き込まれます。BY ACCESSと比較すると、BY SESSIONでは引き続き異なる値が監査証跡に移入されます。すべてのAUDIT文にBY ACCESS句を指定し、より詳細な監査レコードを書き込むことをお薦めします。どちらの句も指定しない場合は、BY ACCESSがデフォルトになります。

注意:
この句は、データ定義言語(DDL)文以外のSQL文を監査するスキーマ・オブジェクト監査オプション、文オプションおよびシステム権限にのみ適用されます。DDL文を監査するすべてのBY ACCESS SQL文およびシステム権限は、データベースによって常に監査されます。

BY ACCESS

BY ACCESSを指定すると、監査された各文および操作について、1つのレコードを書き込むことができます。

注意:
データ定義言語(DDL)文を監査するSQL文ショートカットまたはシステム権限を指定した場合は、常にアクセスごとに監査されます。それ以外のすべての場合、データベースはBY SESSIONまたはBY ACCESSの指定に従います。

DDL文以外のSQL文を監査する文オプションとシステム権限には、BY SESSIONまたはBY ACCESSのいずれかを指定できます。BY ACCESSがデフォルトです。

WHENEVER [NOT] SUCCESSFUL

WHENEVER SUCCESSFULを指定すると、正常に実行されたSQL文および操作のみを監査できます。

WHENEVER NOT SUCCESSFULを指定すると、失敗またはエラーが発生したSQL文および操作のみを監査できます。

この句を指定しない場合、処理結果にかかわらず監査が行われます。

CONTAINER句

CONTAINER句は、CDBに接続している場合にのみ適用されます。この句を使用すると、AUDIT文の有効範囲を指定できます。ただし、デフォルト値が使用できる唯一の値であるため、CONTAINER句を指定する必要はありません。

- 現在のコンテナがPDBであるときにAUDIT文を発行する場合は、オプションで、デフォルトのCONTAINER = CURRENTを指定できます。

- 現在のコンテナがルートであるときにAUDIT文を発行する場合は、オプションで、デフォルトのCONTAINER = ALLを指定できます。

監査オプションの表

表13-1 監査のSQL文ショートカット

SQL文ショートカット

監査済のSQL文と操作

ALTER SYSTEM

ALTER SYSTEM

CLUSTER

CREATE CLUSTER

ALTER CLUSTER

DROP CLUSTER

TRUNCATE CLUSTER

CONTEXT

CREATE CONTEXT

DROP CONTEXT

DATABASE LINK

CREATE DATABASE LINK

ALTER DATABASE LINK

DROP DATABASE LINK

DIMENSION

CREATE DIMENSION

ALTER DIMENSION

DROP DIMENSION

DIRECTORY

CREATE DIRECTORY

DROP DIRECTORY

INDEX

CREATE INDEX

ALTER INDEX

ANALYZE INDEX

DROP INDEX

MATERIALIZED VIEW

CREATE MATERIALIZED VIEW

ALTER MATERIALIZED VIEW

DROP MATERIALIZED VIEW

NOT EXISTS

指定したオブジェクトが存在しない場合に失敗するすべてのSQL文。

OUTLINE

CREATE OUTLINE

ALTER OUTLINE

DROP OUTLINE

PLUGGABLE DATABASE

CREATE PLUGGABLE DATABASE

ALTER PLUGGABLE DATABASE

DROP PLUGGABLE DATABASE

PROCEDURE(表の後の「注意」を参照)

CREATE FUNCTION

CREATE LIBRARY

CREATE PACKAGE

CREATE PACKAGE BODY

CREATE PROCEDURE

DROP FUNCTION

DROP LIBRARY

DROP PACKAGE

DROP PROCEDURE

PROFILE

CREATE PROFILE

ALTER PROFILE

DROP PROFILE

PUBLIC DATABASE LINK

CREATE PUBLIC DATABASE LINK

ALTER PUBLIC DATABASE LINK

DROP PUBLIC DATABASE LINK

PUBLIC SYNONYM

CREATE PUBLIC SYNONYM

DROP PUBLIC SYNONYM

ROLE

CREATE ROLE

ALTER ROLE

DROP ROLE

SET ROLE

ROLLBACK SEGMENT

CREATE ROLLBACK SEGMENT

ALTER ROLLBACK SEGMENT

DROP ROLLBACK SEGMENT

SEQUENCE

CREATE SEQUENCE

DROP SEQUENCE

SESSION

Logons

SYNONYM

CREATE SYNONYM

DROP SYNONYM

SYSTEM AUDIT

AUDIT sql_statements

NOAUDIT sql_statements

SYSTEM GRANT

GRANT system_privileges_and_roles

REVOKE system_privileges_and_roles

TABLE

CREATE TABLE

DROP TABLE

TRUNCATE TABLE

TABLESPACE

CREATE TABLESPACE

ALTER TABLESPACE

DROP TABLESPACE

TRIGGER

CREATE TRIGGER

ALTER TRIGGER

ENABLEおよびDISABLE句付き

DROP TRIGGER

ALTER TABLE

ENABLE ALL TRIGGERS句付き

DISABLE ALL TRIGGERS句付き

TYPE

CREATE TYPE

CREATE TYPE BODY

ALTER TYPE

DROP TYPE

DROP TYPE BODY

USER

CREATE USER

ALTER USER

DROP USER

注意:

- AUDIT USERは、これら3つのSQL文を監査します。AUDIT ALTER USERを使用すると、ALTER USERシステム権限を必要とする文を監査できます。

- AUDIT ALTER USER文は、自分のパスワードを変更するユーザーを監査しません。これは、このアクティビティにはALTER USERシステム権限は必要ではないためです。

VIEW

CREATE VIEW

DROP VIEW

注意:
Javaスキーマ・オブジェクト(ソース、クラスおよびリソース)は、SQL文の監査ではプロシージャと同じであるとみなされます。

表13-2 監査のその他のSQL文ショートカット

SQL文ショートカット

監査済のSQL文と操作

ALTER SEQUENCE

ALTER SEQUENCE

ALTER TABLE

ALTER TABLE

COMMENT TABLE

COMMENT ON TABLE table, view, materialized view

COMMENT ON COLUMN table.column, view.column, materialized view.column

DELETE TABLE

DELETE FROM table, view

EXECUTE PROCEDURE

CALL

プロシージャやファンクションの実行、またはパッケージ内の変数、ライブラリまたはカーソルへのアクセス。

GRANT DIRECTORY

GRANT privilege ON directory

REVOKE privilege ON directory

GRANT PROCEDURE

GRANT privilege ON procedure, function, package

REVOKE privilege ON procedure, function, package

GRANT SEQUENCE

GRANT privilege ON sequence

REVOKE privilege ON sequence

GRANT TABLE

GRANT privilege ON table, view, materialized view

REVOKE privilege ON table, view, materialized view

GRANT TYPE

GRANT privilege ON TYPE

REVOKE privilege ON TYPE

INSERT TABLE

INSERT INTO table, view

LOCK TABLE

LOCK TABLE table, view

SELECT SEQUENCE

sequence.CURRVALまたはsequence.NEXTVALを含む文

SELECT TABLE

SELECT FROM table, view, materialized view

UPDATE TABLE

UPDATE table, view

表13-3 スキーマ・オブジェクト監査オプション

オブジェクト

SQL操作

表

ALTER
AUDIT
COMMENT
DELETE
FLASHBACK(注意1)
GRANT
INDEX
INSERT
LOCK
RENAME
SELECT
UPDATE

ビュー

AUDIT
COMMENT
DELETE
FLASHBACK(注意1)
GRANT
INSERT
LOCK
RENAME
SELECT
UPDATE

順序

ALTER
AUDIT
GRANT
SELECT

プロシージャ、ファンクション、パッケージ(注意2)

AUDIT
EXECUTE (注意3および4)
GRANT

マテリアライズド・ビュー(注意5)

ALTER
AUDIT
COMMENT
DELETE
INDEX
INSERT
LOCK
SELECT
UPDATE

マイニング・モデル

AUDIT
COMMENT
GRANT
RENAME
SELECT

ディレクトリ

AUDIT
GRANT
READ

ライブラリ

EXECUTE
GRANT

オブジェクト型

ALTER
AUDIT
GRANT

注意1: FLASHBACK監査オブジェクト・オプションは、フラッシュバック問合せに対してのみ適用されます。

注意2: Javaスキーマ・オブジェクト(ソース、クラスおよびリソース)は、監査オプションではプロシージャ、ファンクションおよびパッケージと同じであるとみなされます。

注意3: PL/SQLストアド・プロシージャまたはストアド・ファンクションでのEXECUTE操作を監査する場合は、監査目的での操作の成否を判断する際に、プロシージャまたはファンクションを検索してその実行を認証する機能のみが監査対象となります。したがって、WHENEVER NOT SUCCESSFUL句を指定すると、無効なオブジェクト・エラー、存在しないオブジェクト・エラー、および認証の失敗が監査されます。プロシージャまたはファンクションの実行時に検出されたエラーは監査されません。WHENEVER SUCCESSFUL句を指定すると、実行時にエラーが検出されたかどうかに関係なく、無効なオブジェクト・エラー、存在しないオブジェクト・エラー、および認証の失敗が監査されます。

注意4: PL/SQLストアド・プロシージャまたはストアド・ファンクション内の再帰的なSQL操作の失敗を監査するには、SQL操作の監査を構成します。

注意5: INSERT、UPDATEおよびDELETE操作の監査は、更新可能なマテリアライズド・ビューに対してのみ可能です。

例

ロールに関連するSQL文の監査例: 次の文は、ロールの作成、変更、削除または設定を行う各SQL文が正常に終了したかどうかにかかわらず、それらの文について監査を行います。

AUDIT ROLE;

次の文は、ロールの作成、変更、削除または設定を行う、正常に終了したSQL文ごとに監査を行います。

AUDIT ROLE
WHENEVER SUCCESSFUL;

次の文は、Oracle Databaseエラーが発生したCREATE ROLE文、ALTER ROLE文、DROP ROLE文またはSET ROLE文について監査を行います。

AUDIT ROLE
WHENEVER NOT SUCCESSFUL;

問合せおよび更新を行うSQL文の監査例: 次の文は、表の問合せまたは更新を実行する文について監査を行います。

AUDIT SELECT TABLE, UPDATE TABLE;

次の文は、ユーザーhrおよびoeが発行する、表やビューの問合せまたは更新を実行する文について監査を行います。

AUDIT SELECT TABLE, UPDATE TABLE
BY hr, oe;

削除の監査例: 次の文は、DELETE ANY TABLEシステム権限で発行された文について監査を行います。

AUDIT DELETE ANY TABLE;

ディレクトリに関連する文の監査例: 次の文は、CREATE ANY DIRECTORYシステム権限で発行された文について監査を行います。

AUDIT CREATE ANY DIRECTORY;

CREATE ANY DIRECTORYシステム権限を使用しないCREATE DIRECTORY(およびDROP DIRECTORY)文を監査する場合は、次の文を発行します。

AUDIT DIRECTORY;

次の文は、bfile_dirディレクトリからファイルを読み込む各文について監査を行います。

AUDIT READ ON DIRECTORY bfile_dir;

表の問合せの監査例: 次の文は、スキーマhr内のemployees表を問い合せる各SQL文について監査を行います。

AUDIT SELECT
ON hr.employees;

次の文は、スキーマhr内のemployees表を問い合せて正常に終了した各文について監査を行います。

AUDIT SELECT
ON hr.employees
WHENEVER SUCCESSFUL;

次の文は、スキーマhr内のemployees表を問い合せてOracle Databaseエラーが発生した各文について監査を行います。

AUDIT SELECT
ON hr.employees
WHENEVER NOT SUCCESSFUL;

表の挿入および更新の監査例: 次の文は、スキーマoe内のcustomers表に対して行を挿入または更新する各文について監査を行います。

AUDIT INSERT, UPDATE
ON oe.customers;

順序の操作の監査例: 次の文は、スキーマhr内のemployees_seq順序に対する操作を行う各文について監査を行います。

AUDIT ALL
ON hr.employees_seq;

この文では、順序に対して操作を行う次の文について監査を行うため、ALLショートカットを使用しています。

- ALTER SEQUENCE

- AUDIT

- GRANT

- 疑似列CURRVALまたはNEXTVALを使用して、順序の値にアクセスするすべての文

デフォルト監査オプションの設定例: 次の文は、以降に作成されるオブジェクトのデフォルト監査オプションを指定します。

AUDIT ALTER, GRANT, INSERT, UPDATE, DELETE
ON DEFAULT;

以降に作成されるオブジェクトは、指定したオプションによって自動的に監査用に構成されます。

- 表を作成した場合、その表に対して発行されるALTER文、GRANT文、INSERT文、UPDATE文またはDELETE文の監査オプションが自動的に構成されます。

- ビューを作成した場合、そのビューに対するGRANT文、INSERT文、UPDATE文またはDELETE文の監査オプションが自動的に構成されます。

- 順序を作成した場合、その順序に対するALTER文またはGRANT文の監査オプションが自動的に構成されます。

- プロシージャ、パッケージまたはファンクションを作成した場合、それらに対するALTER文またはGRANT文の監査オプションが自動的に構成されます。

AUDIT (統合監査)

この項では、統合監査のAUDIT文について説明します。この種類の監査は、Oracle Database 12cで新たに導入されたもので、完全かつ高度な監査機能を提供します。統合監査の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

用途

AUDIT文は、次の目的に使用します。

- すべてのユーザーまたは特定のユーザーに対する統合監査ポリシーを有効にする。

- 監査対象イベントが失敗または成功(または、その両方)した場合に、監査レコードを作成するかどうかを指定する。

- アプリケーション・コンテキスト属性を指定する(属性値が監査レコードに記録されます)。

この文で実行される操作は、現行のセッションではなく、それ以降のユーザー・セッションで有効になります。

関連項目:

- NOAUDIT (統合監査)

- CREATE AUDIT POLICY (統合監査)

- ALTER AUDIT POLICY (統合監査)

- DROP AUDIT POLICY (統合監査)

前提条件

AUDIT SYSTEMシステム権限、またはAUDIT_ADMINロールが必要になります。

マルチテナント・コンテナ・データベース(CDB)に接続している場合、共通の統合監査ポリシーを有効にするには、現在のコンテナがルートである必要があります。また、共通に付与されているAUDIT SYSTEM権限またはAUDIT_ADMIN共通ロールが必要です。ローカルの統合監査ポリシーを有効にするには、現在のコンテナが、その監査ポリシーが作成されたコンテナである必要があります。また、共通に付与されているAUDIT SYSTEM権限またはAUDIT_ADMIN共通ロールを保有しているか、そのコンテナでローカルに付与されているAUDIT SYSTEM権限またはAUDIT_ADMINローカル・ロールを保有している必要があります。

CDBに接続しているときにAUDIT CONTEXT ...文を指定するには、共通に付与されているAUDIT SYSTEM権限またはAUDIT_ADMIN共通ロールを保有しているか、現在のセッションのコンテナでローカルに付与されているAUDIT SYSTEM権限またはAUDIT_ADMINローカル・ロールを保有している必要があります。

構文

unified_audit::=

セマンティクス

ポリシー

有効にする統合監査ポリシーの名前を指定します。このポリシーは、CREATE AUDIT POLICY文を使用して作成されている必要があります。

すべての統合監査ポリシーの説明を検索するには、AUDIT_UNIFIED_POLICIESビューを問い合わせます。すべての有効な統合監査ポリシーの説明を検索するには、AUDIT_UNIFIED_ENABLED_POLICIESビューを問い合わせます。

統合監査ポリシーを有効にすると、その有効にしたポリシーで指定されているシステム権限、アクションまたはロールの監査オプションに合致するすべてのSQL文および操作が監査されます。つまり、統合監査レコードがUNIFIED_AUDIT_TRAILビューに作成されます。1つのSQL文または操作が複数の有効なポリシーに合致する場合、統合監査レコードは1つのみ作成され、合致するすべての監査ポリシーの名前がUNIFIED_AUDIT_TRAILビューのUNIFIED_AUDIT_POLICIES列にカンマ区切りリストで表示されます。

関連項目:

- CREATE AUDIT POLICY (統合監査)

- AUDIT_UNIFIED_POLICIESビュー、AUDIT_UNIFIED_ENABLED_POLICIESビューおよびUNIFIED_AUDIT_TRAILビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

BY | EXCEPT

BY句を指定すると、指定したユーザーに対してのみpolicyを有効にできます。

EXCEPT句を指定すると、指定したユーザーを除くすべてのユーザーに対してpolicyを有効にできます。

BY句とEXCEPT句を省略すると、すべてのユーザーに対してpolicyが有効になります。

policyが共通の統合監査ポリシーの場合、userは共通ユーザーにする必要があります。policyがローカルの統合監査ポリシーの場合、userは共通ユーザーまたは接続先のコンテナのローカル・ユーザーにする必要があります。

BY句とEXCEPT句の注意事項: BY句とEXCEPT句の注意事項は次のとおりです。

- 同じ統合監査ポリシーに対して複数のAUDIT ... BY ... 文を指定した場合、そのポリシーは各文で指定したユーザーの和集合に対して有効になります。

- 同じ統合監査ポリシーに対して複数のAUDIT ... EXCEPT ... 文を指定した場合、最後に指定した文のみが作用します。つまり、最後のAUDIT ... EXCEPT ... 文で指定したユーザーを除くすべてのユーザーに対してポリシーが有効になります。

- BY句を使用して有効化されたポリシーを、EXCEPT句を使用して有効にする場合、まずNOAUDIT ... BY ... 文を使用して、そのポリシーが現在有効になっているすべてのユーザーに対してポリシーを無効にしてから、AUDIT ... EXCEPT ... 文でポリシーを有効にする必要があります。

- EXCEPT句を使用して有効化されてたポリシーを、BY句を使用して有効にする場合、まずNOAUDIT文を使用してその監査ポリシーを無効にする必要があります。EXCEPT句はNOAUDIT文では指定できません。次に、AUDIT ... BY ... 文でポリシーを有効にします。

BY句とEXCEPT句の制限事項: 同じ統合監査ポリシーに対してAUDIT ... BY ... 文とAUDIT ... EXCEPT ... 文の両方は指定できません。指定すると、エラーが発生します。

WHENEVER [NOT] SUCCESSFUL

WHENEVER SUCCESSFULを指定すると、正常に実行されたSQL文および操作のみを監査できます。

WHENEVER NOT SUCCESSFULを指定すると、失敗またはエラーが発生したSQL文および操作のみを監査できます。

この句を指定しない場合、処理結果にかかわらず監査が行われます。

CONTEXT句

CONTEXT句を指定すると、監査レコードにコンテキスト属性の値を含めることができます。

- namespaceには、コンテキスト・ネームスペースを指定します。

- attributeには、監査レコードに含める値を持つ1つ以上のコンテキスト属性を指定します。

- オプションのBY user句を使用すると、指定したユーザーが実行したイベントについての監査レコードにのみ、コンテキスト属性の値が含まれるようになります。BY句を省略すると、コンテキスト属性の値がすべての監査レコードに含まれるようになります。

現在のコンテナがCDBのルートであるときにCONTEXT句を指定すると、ルートで実行されたイベントについての監査レコードにのみ、コンテキスト属性の値が含まれるようになります。オプションのBY句を指定する場合、userは共通ユーザーにする必要があります。

現在のコンテナがプラガブル・データベース(PDB)であるときにCONTEXT句を指定すると、PDBで実行されたイベントについての監査レコードにのみ、コンテキスト属性の値が含まれるようになります。オプションのBY句を指定する場合、userは、共通ユーザーまたはそのPDBのローカル・ユーザーにする必要があります。

監査証跡に取得されるように構成されている、アプリケーション・コンテキストの属性を調べるには、AUDIT_UNIFIED_CONTEXTSビューを問い合わます。

関連項目:
AUDIT_UNIFIED_CONTEXTSビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

例

次の例では、CREATE AUDIT POLICYの「例」で作成した統合監査ポリシーを有効にします。

すべてのユーザーに対して統合監査ポリシーを有効にする例: 次の文は、すべてのユーザーに対して統合監査ポリシーtable_polを有効にします。

AUDIT POLICY table_pol;

次の文は、table_polがすべてのユーザーに対して有効になっていることを確認します。

SELECT policy_name, enabled_opt, user_name
FROM audit_unified_enabled_policies
WHERE policy_name = 'TABLE_POL';

POLICY_NAME  ENABLED_OPT  USER_NAME
-----------  -----------  ---------
TABLE_POL    BY           ALL USERS

特定のユーザーに対して統合監査ポリシーを有効にする例: 次の文は、ユーザーhrとshに対してのみ統合監査ポリシーdml_polを有効にします。

AUDIT POLICY dml_pol BY hr, sh;

次の文は、dml_polがユーザーhrとshに対してのみ有効になっていることを確認します。

SELECT policy_name, enabled_opt, user_name
FROM audit_unified_enabled_policies
WHERE policy_name = 'DML_POL'
ORDER BY user_name;

POLICY_NAME  ENABLED_OPT  USER_NAME
-----------  -----------  ---------
DML_POL      BY           HR
DML_POL      BY           SH

次の文は、統合監査ポリシーread_dir_polをhr以外のすべてのユーザーに対して有効にします。

AUDIT POLICY read_dir_pol EXCEPT hr;

次の文は、read_dir_polがhr以外のすべてのユーザーに対して有効になっていることを確認します。

SELECT policy_name, enabled_opt, user_name
FROM audit_unified_enabled_policies
WHERE policy_name = 'READ_DIR_POL';

POLICY_NAME   ENABLED_OPT  USER_NAME
------------  -----------  ---------
READ_DIR_POL  EXCEPT       HR

次の文は、統合監査ポリシーsecurity_polをユーザーhrに対して有効にして、失敗したSQL文および操作のみを監査します。

AUDIT POLICY security_pol BY hr WHENEVER NOT SUCCESSFUL;

次の文は、統合監査ポリシーsecurity_polがユーザーhrに対してのみ有効になっており、失敗したSQL文および操作のみが監査対象になることを確認します。

SELECT policy_name, enabled_opt, user_name, success, failure
FROM audit_unified_enabled_policies
WHERE policy_name = 'SECURITY_POL';

POLICY_NAME   ENABLED_OPT           USER_NAME   SUCCESS  FAILURE
------------  --------------------  ----------  -------  -------
SECURITY_POL  BY                    HR          NO       YES

コンテキスト属性の値を監査レコードに追加する例: 次の文は、ネームスペースUSERENVの属性CURRENT_USERとDB_NAMEの値を、ユーザーhrについてのすべての監査レコードに含めるようにデータベースに指示します。

AUDIT CONTEXT NAMESPACE userenv
ATTRIBUTES current_user, db_name
BY hr;

CALL

用途

CALL文を使用すると、SQL内からルーチン(スタンドアロン・プロシージャ、スタンドアロン・ファンクション、あるいは型またはパッケージ内で定義されたプロシージャまたはファンクション)を実行できます。

注意:
「ファンクション式」に指定されているユーザー定義ファンクション式の制限は、CALL文にも適用されます。

関連項目:
これらのルーチンの作成の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

前提条件

スタンドアロンのルーチン上、またはルーチンが定義されている型やパッケージ上で、EXECUTE権限を持っている必要があります。

構文

call::=

routine_clause::=

object_access_expression::=

セマンティクス

ルーチンは2つの方法で実行できます。routine_clauseを使用してルーチン自体を名前でコールするか、またはobject_access_expressionを使用して式の型の中でルーチンをコールします。

schema

スタンドアロン・ルーチン(または、ルーチンが含まれている型またはパッケージ)が存在するスキーマを指定します。schemaを指定しない場合、ルーチンは自分のスキーマ内にあるとみなされます。

typeまたはpackage

ルーチンが定義されている型またはパッケージを指定します。

routine_clause

コールするファンクション名またはプロシージャ名、またはファンクションまたはプロシージャに変換されるシノニムを指定します。

型のメンバー・ファンクションまたはメンバー・プロシージャをコールする場合、最初の引数(SELF)がNULLのIN OUTの場合は、エラーが戻されます。SELFがNULLのINの場合には、NULLが戻されます。どちらの場合も、ファンクションまたはプロシージャはコールされません。

ファンクションの制限事項: ルーチンがファンクションの場合、INTO句は必須です。

@dblink

分散データベース・システムで、スタンドアロン・ルーチンが含まれているデータベース、またはルーチンが含まれているパッケージまたはファンクションの名前を指定します。dblinkを指定しない場合、ローカル・データベースを指定したとみなされます。

関連項目:
直接ルーチンをコールする例については、「プロシージャのコール例:」を参照してください。

object_access_expression

型コンストラクタ、バインド変数などのオブジェクト型の式を使用している場合は、この形式の式を使用して、型内で定義されたルーチンをコールできます。このコンテキストでは、object_access_expressionはメソッドのコールに制限されます。

関連項目:
この形式の式の構文およびセマンティクスについては、「オブジェクト・アクセス式」を参照してください。オブジェクト型の式を使用してルーチンをコールする例については、「オブジェクト型の式を使用したプロシージャのコール例:」を参照してください。

argument

ルーチンに引数が必要な場合に、ルーチンの1つ以上の引数を指定します。argumentを、位置表記法、名前表記法および混合表記法で表記できます。たとえば、次の表記はすべて正しい表記です。

CALL my_procedure(arg1 => 3, arg2 => 4)

CALL my_procedure(3, 4)

CALL my_procedure(3, arg2 => 4)

ルーチンへの引数の適用の制限事項: argumentには、次の制限事項があります。

- CALL文によって渡されるパラメータのデータ型は、SQLのデータ型であることが必要です。BOOLEANなど、PL/SQL専用のデータ型は使用できません。

- 引数には、疑似列、オブジェクト参照ファンクションVALUEおよびREFは指定できません。

- ルーチンのIN OUT引数またはOUT引数であるすべての引数は、ホスト変数の式に対応している必要があります。

- すべての戻り引数を含む引数の数は、1000に制限されています。

- 4KBを超える文字データ型またはRAWデータ型(CHAR、VARCHAR2、NCHAR、NVARCHAR2、RAW、LONG RAW)の引数はバインドできません。

INTO :host_variable

INTO句は関数のコールにのみ適用されます。ファンクションの戻り値を格納するホスト変数を指定します。

:indicator_variable

ホスト変数の値または状態を指定します。

関連項目:
ホスト変数および標識変数の詳細は、『Pro*C/C++プログラマーズ・ガイド』を参照してください。

例

プロシージャのコール例: 次の文は、remove_deptプロシージャを使用して、娯楽部門(「順序値の挿入例:」で作成)を削除します。このプロシージャを作成する例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。

CALL emp_mgmt.remove_dept(162);

オブジェクト型の式を使用したプロシージャのコール例: 次の例では、CALL文のオブジェクト型の式を使用したプロシージャのコール方法を示します。この例では、サンプルの注文入力スキーマOEでwarehouse_typオブジェクト型を使用しています。

ALTER TYPE warehouse_typ
ADD MEMBER FUNCTION ret_name
RETURN VARCHAR2
CASCADE;

CREATE OR REPLACE TYPE BODY warehouse_typ
AS MEMBER FUNCTION ret_name
RETURN VARCHAR2
IS
BEGIN
RETURN self.warehouse_name;
END;
END;
/
VARIABLE x VARCHAR2(25);

CALL warehouse_typ(456, 'Warehouse 456', 2236).ret_name()
INTO :x;

PRINT x;
X
--------------------------------
Warehouse 456

次の例では、外部ファンクションを使用したプロシージャのコール方法を示します。

CREATE OR REPLACE FUNCTION ret_warehouse_typ(x warehouse_typ)
RETURN warehouse_typ
IS
BEGIN
RETURN x;
END;
/
CALL ret_warehouse_typ(warehouse_typ(234, 'Warehouse 234',
2235)).ret_name()
INTO :x;

PRINT x;

X
--------------------------------
Warehouse 234

COMMENT

用途

COMMENT文を使用すると、表または表の列、統合監査ポリシー、エディション、索引タイプ、マテリアライズド・ビュー、マイニング・モデル、演算子またはビューに関するコメントを、データ・ディクショナリに追加できます。

データベースからコメントを削除する場合、空の文字列' 'を設定します。

関連項目:

- SQL文およびスキーマ・オブジェクトへのコメントの関連付けの詳細は、「コメント」を参照してください。

- コメントを表示するデータ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

前提条件

コメントを追加するオブジェクトが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、次の条件を満たす必要があります。

- 表、ビューまたはマテリアライズド・ビューにコメントを追加する場合は、COMMENT ANY TABLEシステム権限を持っている。

- 統合監査ポリシーにコメントを追加する場合は、AUDIT SYSTEMシステム権限またはAUDIT_ADMINロールが必要です。

- エディションにコメントを追加する場合は、直接またはロールを介して付与されたCREATE ANY EDITIONシステム権限を持っている。

- 索引タイプにコメントを追加する場合は、CREATE ANY INDEXTYPEシステム権限を持っている。

- マイニング・モデルにコメントを追加する場合は、COMMENT ANY MINING MODELシステム権限が必要です。

- 演算子にコメントを追加する場合は、CREATE ANY OPERATORシステム権限を持っている。

構文

comment::=

セマンティクス

AUDIT POLICY句

コメントする統合監査ポリシーの名前を指定します。

AUDIT_UNIFIED_POLICY_COMMENTSデータ・ディクショナリ・ビューを問い合せると、特定の統合監査ポリシーに対するコメントを表示できます。

COLUMN句

コメントする表、ビューまたはマテリアライズド・ビューの列の名前を指定します。schemaを指定しない場合、この表、ビューおよびマテリアライズド・ビューは自分のスキーマ内にあるとみなされます。

データ・ディクショナリ・ビューUSER_TAB_COMMENTS、DBA_TAB_COMMENTS、ALL_TAB_COMMENTS、USER_COL_COMMENTS、DBA_COL_COMMENTSまたはALL_COL_COMMENTSを問い合せることによって、特定の表または列に関するコメントを表示できます。

EDITION句

コメントする既存のエディションの名前を指定します。

データ・ディクショナリ・ビューALL_EDITION_COMMENTSを問い合せると、現在のユーザーがアクセスできるエディションに関連付けられたコメントを表示できます。DBA_EDITION_COMMENTSを問い合せると、データベース内のすべてのエディションに関連付けられたコメントを表示できます。

TABLE句

コメントする表またはマテリアライズド・ビューの名前とスキーマを指定します。schemaを指定しない場合、この表およびマテリアライズド・ビューは自分のスキーマ内にあるとみなされます。

注意:
以前のリリースでは、この句を使用してマテリアライズド・ビューにコメントを作成できました。今回のリリースでは、マテリアライズド・ビューに、COMMENT ON MATERIALIZED VIEW句を使用する必要があります。

INDEXTYPE句

コメントする索引タイプの名前を指定します。schemaを指定しない場合、この索引タイプは自分のスキーマ内にあるとみなされます。

データ・ディクショナリ・ビューUSER_INDEXTYPE_COMMENTS、DBA_INDEXTYPE_COMMENTSまたはALL_INDEXTYPE_COMMENTSを問い合せることによって、特定の索引タイプに関するコメントを表示できます。

MATERIALIZED VIEW句

コメントするマテリアライズド・ビューの名前を指定します。schemaを指定しない場合、このマテリアライズド・ビューは自分のスキーマ内にあるとみなされます。

データ・ディクショナリ・ビューUSER_MVIEW_COMMENTS、DBA_MVIEW_COMMENTSまたはALL_MVIEW_COMMENTSを問い合せることによって、特定のマテリアライズド・ビューに関するコメントを表示できます。

MINING MODEL

コメントするマイニング・モデルの名前を指定します。

USER_MINING_MODELS、DBA_MINING_MODELSまたはALL_MINING_MODELSデータ・ディクショナリ・ビューのCOMMENTS列を問い合せると、特定のマイニング・モデルに対するコメントを表示できます。

OPERATOR句

コメントする演算子の名前を指定します。schemaを指定しない場合、その演算子は自分のスキーマ内にあるとみなされます。

データ・ディクショナリ・ビューUSER_OPERATOR_COMMENTS、DBA_OPERATOR_COMMENTSまたはALL_OPERATOR_COMMENTSを問い合せることによって、特定の演算子に関するコメントを表示できます。

IS 'string'

コメントのテキストを指定します。'string'の構文の詳細は、「テキスト・リテラル」を参照してください。

例

コメントの作成例: 次の文は、employees表のjob_id列にコメントを挿入します。

COMMENT ON COLUMN employees.job_id
IS 'abbreviated job title';

次の文は、データベースからこのコメントを削除します。

COMMENT ON COLUMN employees.job_id IS '';

COMMIT

用途

COMMIT文を使用すると、現行のトランザクションを終了し、トランザクションで実行したすべての変更を確定できます。トランザクションとは、Oracle Databaseが1つの単位として扱う一連のSQL文です。また、この文によって、トランザクション内のセーブポイントがすべて消去され、トランザクション・ロックが解除されます。

トランザクションのコミット前:

- 変更された表を問い合せることで、トランザクション中に加えた変更内容を確認する。ただし、他のユーザーは変更内容を参照できません。トランザクションをコミットすると、コミット後に実行される他のユーザーの文に変更が表示されるようになります。

- トランザクション中に行った変更を、ROLLBACK文でロールバックする(元に戻す)。「ROLLBACK」を参照してください。

次のような状況では、Oracle Databaseによって暗黙的なCOMMITが発行されます。

- 構文が有効なデータ定義言語(DDL)文の前(文がエラーになる場合も同様)

- エラーが発生することなく完了するデータ定義言語(DDL)文の後

この文を使用して次の操作を実行することもできます。

- インダウト分散トランザクションを手動でコミットします。

- SET TRANSACTION文で開始した読取り専用トランザクションを終了します。

Oracle Databaseとの接続を切断する前に、最新のトランザクションを含むアプリケーション・プログラムのすべてのトランザクションを、COMMIT文またはROLLBACK文を使用して明示的に終了することをお薦めします。トランザクションを明示的にコミットしなかった場合にプログラムが異常終了すると、コミットされていない最後のトランザクションは、自動的にロールバックされます。

OracleユーティリティおよびOracleのツール製品が正常に終了すると、現行のトランザクションがコミットされます。Oracleプリコンパイラ・プログラムが正常に終了した場合は、トランザクションはコミットされず、現行のトランザクションがOracle Databaseによってロールバックされます。

関連項目:

- トランザクションの詳細は、『Oracle Database概要』を参照してください。

- トランザクションの特性の指定の詳細は、「SET TRANSACTION」を参照してください。

前提条件

現行のトランザクションをコミットするために、必要な権限は特にありません。

自分がコミットしたインダウト分散トランザクションを手動でコミットする場合は、FORCE TRANSACTIONシステム権限が必要です。別のユーザーがコミットしたインダウト分散トランザクションを手動でコミットする場合は、FORCE ANY TRANSACTIONシステム権限が必要です。

構文

commit::=

セマンティクス

COMMIT

COMMITキーワードに続く句は、すべてオプションです。COMMITのみを指定した場合、デフォルトはCOMMIT WORK WRITE WAIT IMMEDIATEです。

WORK

標準SQLに準拠するために、WORKキーワードがサポートされています。COMMIT文とCOMMIT WORK文は同じです。

COMMENT句

この句は、下位互換性を保つためにのみサポートされています。コミット・コメントのかわりに名前付きトランザクションを使用することをお薦めします。

関連項目:
名前付きトランザクションの詳細は、「SET TRANSACTION」および『Oracle Database概要』を参照してください。

現行のトランザクションに関するコメントを指定します。'text'は引用符で囲まれた最大255バイトのリテラルで、分散トランザクションの状態が不明(インダウト)になった場合に、そのトランザクションIDとともに、データ・ディクショナリ・ビューDBA_2PC_PENDINGに格納されます。このコメントは、分散トランザクションの障害を診断するときに役立ちます。

関連項目:
SQL文へのコメントの追加の詳細は、「COMMENT」を参照してください。

WRITE句

この句を使用すると、コミット操作で生成されるREDO情報をREDOログに書き込む優先度を指定できます。この句によって、待機時間を減らしREDOログへのI/Oを待機しないようにすることで、パフォーマンスを向上させることができます。この句は、レスポンス時間に対する要件が厳しい次のような環境下でのレスポンス時間を改善するために使用します。

- 更新トランザクションの量が多く、REDOログを頻繁にディスクに書き込む必要がある。

- アプリケーションが、非同期でコミットされるトランザクションの消失を許容できる。

- REDOログの書込みの発生を待つ待機時間が、全体のレスポンス時間に大きく影響する。

WAIT | NOWAITおよびIMMEDIATE | BATCH句を任意の順序で指定できます。

注意:
この句を省略したときのコミット操作は、COMMIT_LOGGINGおよびCOMMIT_WAIT初期化パラメータで制御されます(パラメータが設定されている場合)。

WAIT | NOWAIT この句を使用すると、制御をいつユーザーに戻すかを指定できます。

- WAITパラメータを指定すると、対応するREDOがオンラインREDOログで永続的になった後にのみコミットが戻ります。BATCHモードでもIMMEDIATEモードでも、このCOMMIT文から正常にクライアントに戻ったときは、トランザクションは永続メディアにコミットされています。ログへの正常な書込みの後で障害が発生した場合、成功のメッセージがクライアントに戻らない場合があります。この場合には、トランザクションがコミットされたかどうかはクライアントにはわかりません。

- NOWAITパラメータを指定すると、REDOログへの書込みが完了したかどうかに関係なく、コミットはクライアントに戻ります。この動作はトランザクションのスループットを向上させます。WAITパラメータを指定すると、コミット・メッセージを受け取った場合にデータの損失がないことがわかります。

注意:
NOWAITを指定すると、コミット・メッセージを受け取った後で、REDOログ・レコードが書き込まれる前に障害が発生した場合、その変更が永続的であることをトランザクションに誤って示す場合があります。

この句を指定しない場合、トランザクションはWAITの動作でコミットされます。

IMMEDIATE | BATCH この句を使用すると、REDOをいつログに書き込むかを指定できます。

- IMMEDIATEパラメータを指定すると、ログ・ライター・プロセス(LGWR)によって、トランザクションのREDO情報がログに書き込まれます。この操作オプションはディスクI/Oを強制するため、トランザクションのスループットは低下します。

- BATCHパラメータを指定すると、同時に実行されている他のトランザクションとともに、REDOがREDOログにバッファされます。十分なREDO情報が収集されると、REDOログのディスク書込みが開始されます。この動作はグループ・コミットと呼ばれます。複数のトランザクションのREDOが一度のI/O操作でログに書き込まれるためです。

この句を指定しない場合、トランザクションはIMMEDIATEの動作でコミットされます。

関連項目:
非同期のコミットの詳細は、『Oracle Database概要』を参照してください。

FORCE句

分散データベース・システムでは、FORCE string [, integer]句によって、手動でインダウト分散トランザクションをコミットできます。このトランザクションは、ローカル・トランザクションIDまたはグローバル・トランザクションIDを含む'string'で識別されます。このトランザクションのIDを確認する場合は、データ・ディクショナリ・ビューDBA_2PC_PENDINGを問い合せます。また、integerを指定することによって、このトランザクションにシステム変更番号(SCN)を具体的に割り当てることもできます。integerを指定しない場合、このトランザクションは現行のSCNを使用してコミットされます。

注意:
FORCE句を指定してCOMMIT文を発行した場合、指定したトランザクションのみがコミットされます。この文は、現行のトランザクションには影響しません。

関連項目:
前述の項目の詳細は、『Oracle Database管理者ガイド』を参照してください。

例

挿入のコミット例: 次の文は、hr.regions表に行を挿入してこの変更をコミットします。

INSERT INTO regions VALUES (5, 'Antarctica');

COMMIT WORK;

同じ挿入操作をコミットし、データベースに対して、ディスクI/Oを開始せずに変更をREDOログにバッファするよう指示するには、次のCOMMIT文を使用します。

COMMIT WRITE BATCH;

COMMITのコメント例: 次の文は、現行のトランザクションをコミットして、コメントを関連付けます。

COMMIT
COMMENT 'In-doubt transaction Code 36, Call (415) 555-2637';

ネットワーク障害またはマシン障害によって分散トランザクションを適切にコミットできない場合、トランザクションIDとともにデータ・ディクショナリにコメントが格納されます。そのコメントには、障害が発生したアプリケーション部分が示されており、トランザクションがコミットされたデータベースの管理者に連絡する情報が提供されています。

強制インダウト・トランザクションの例: 次の文は、不確定なインダウト分散トランザクションを手動でコミットします。V$CORRUPT_XID_LISTデータ・ディクショナリ・ビューを問い合せて、破損トランザクションのトランザクションIDを検索します。V$CORRUPT_XID_LISTを表示し、この文を発行するには、DBA権限が必要です。

COMMIT FORCE '22.57.53';

14 SQL文: CREATE AUDIT POLICYからCREATE JAVA

この章では、次のSQL文について説明します。

- CREATE AUDIT POLICY (統合監査)

- CREATE CLUSTER

- CREATE CONTEXT

- CREATE CONTROLFILE

- 「CREATE DATABASE」

- CREATE DATABASE LINK

- CREATE DIMENSION

- 「CREATE DIRECTORY」

- CREATE DISKGROUP

- CREATE EDITION

- CREATE FLASHBACK ARCHIVE

- CREATE FUNCTION

- 「CREATE INDEX」

- CREATE INDEXTYPE

- 「CREATE JAVA」

CREATE AUDIT POLICY (統合監査)

この項では、統合監査のCREATE AUDIT POLICY文について説明します。この種類の監査は、Oracle Database 12cで新たに導入されたもので、完全かつ高度な監査機能を提供します。統合監査の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

用途

CREATE AUDIT POLICY文を使用すると、統合監査ポリシーを作成できます。

関連項目:

- ALTER AUDIT POLICY (統合監査)

- DROP AUDIT POLICY (統合監査)

- AUDIT (統合監査)

- NOAUDIT (統合監査)

前提条件

AUDIT SYSTEMシステム権限、またはAUDIT_ADMINロールが必要になります。

CONTAINER句を指定する場合は、マルチテナント・コンテナ・データベース(CDB)に接続している必要があります。共通の統合監査ポリシーを作成する場合は、共通に付与されているAUDIT SYSTEM権限またはAUDIT_ADMIN共通ロールが必要です。ローカルの統合監査ポリシーを作成する場合は、共通に付与されているAUDIT SYSTEM権限またはAUDIT_ADMIN共通ロールを保有しているか、接続先のコンテナでローカルに付与されているAUDIT SYSTEM権限またはAUDIT_ADMINローカル・ロールを保有している必要があります。

構文

create_audit_policy::=

注意:
少なくともprivilege_audit_clause句、action_audit_clause句、またはrole_audit_clause句のいずれか1つを指定する必要があります。

(privilege_audit_clause::=、action_audit_clause::=、role_audit_clause::=を参照)

privilege_audit_clause::=

action_audit_clause::=

注意:
standard_actions句とcomponent_actions句は単独で指定することも、どちらかの順序で指定することもできますが、それぞれの句を指定できるのは1回のみです。

standard_actions::=

component_actions::=

role_audit_clause::=

セマンティクス

ポリシー

作成する統合監査ポリシーの名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。すべての監査ポリシーの名前を確認するには、AUDIT_UNIFIED_POLICIESビューを問い合せます。

関連項目:
AUDIT_UNIFIED_POLICIESビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

privilege_audit_clause

この句を使用すると、1つ以上のシステム権限を監査できます。このシステム権限が必要になるSQL文が監査されます。system_privilegeには、有効なシステム権限を指定します。すべての有効なシステム権限を確認するには、SYSTEM_PRIVILEGE_MAPビューのNAME列を問い合せます。

システム権限の監査の制限事項: システム権限のINHERIT ANY PRIVILEGES、SYSASM、SYSBACKUP、SYSDBA、SYSDG、SYSKM、SYSOPERおよびTRANSLATE ANY SQLは監査できません。

action_audit_clause

この句を使用すると、1つ以上のアクションを監査対象に指定できます。standard_actions句を使用すると、標準RDBMSオブジェクトに対するアクションおよびデータベースに対する標準RDBMSシステム・アクションを監査できます。component_actions句を使用すると、コンポーネントに対するアクションを監査できます。

standard_actions

この句を使用すると、標準RDBMSオブジェクトに対するアクションおよびデータベースに対する標準RDBMSシステム・アクションを監査できます。

object_action ON この句を使用すると、指定したオブジェクトに対するアクションを監査できます。object_actionには、監査するアクションを指定します。表14-1は、各オブジェクト・タイプについて監査可能なアクションの一覧です。

ALL ON この句を使用すると、指定したオブジェクトに対するすべてのアクションを監査できます。ON句で指定したオブジェクトのタイプについて、表14-1に一覧されたすべてのアクションが監査されます。

ON句 ON句を使用すると、監査するオブジェクトを指定できます。ディレクトリとデータ・マイニング・モデルは、個別のネームスペースに含まれるため個別に識別されます。ディレクトリに対するアクションを監査する場合は、ON DIRECTORY directory_nameを指定します。データ・マイニング・モデルに対するアクションを監査する場合は、ON MINING MODEL object_nameを指定します。表14-1に一覧されたその他のオブジェクトのタイプに対するアクションを監査する場合は、ON object_nameを指定します。object_nameをschemaで修飾しなかった場合、そのオブジェクトは自分のスキーマ内にあるとみなされます。

表14-1 統合監査の対象オブジェクトとアクション

オブジェクトのタイプ

アクション

ディレクトリ

AUDIT、GRANT、READ

ファンクション

AUDIT、EXECUTE (注意1と2)、GRANT

Javaスキーマ・オブジェクト(ソース、クラス、リソース)

AUDIT、EXECUTE、GRANT

ライブラリ

EXECUTE、GRANT

マテリアライズド・ビュー

ALTER、AUDIT、COMMENT、DELETE、INDEX、INSERT、LOCK、SELECT、UPDATE

マイニング・モデル

AUDIT、COMMENT、GRANT、RENAME、SELECT

オブジェクト・タイプ

ALTER、AUDIT、GRANT

パッケージ

AUDIT、EXECUTE、GRANT

プロシージャ

AUDIT、EXECUTE (注意1と2)、GRANT

順序

ALTER、AUDIT、GRANT、SELECT

表

ALTER、AUDIT、COMMENT、DELETE、FLASHBACK、GRANT、INDEX、INSERT、LOCK、RENAME、SELECT、UPDATE

ビュー

AUDIT、DELETE、FLASHBACK、GRANT、INSERT、LOCK、RENAME、SELECT、UPDATE

注意1: PL/SQLストアド・プロシージャまたはストアド・ファンクションでのEXECUTE操作を監査する場合は、監査目的での操作の成否を判断する際に、プロシージャまたはファンクションを検索してその実行を認証する機能のみが監査対象となります。したがって、WHENEVER NOT SUCCESSFUL句を指定すると、無効なオブジェクト・エラー、存在しないオブジェクト・エラー、および認証の失敗が監査されます。プロシージャまたはファンクションの実行時に検出されたエラーは監査されません。WHENEVER SUCCESSFUL句を指定すると、実行時にエラーが検出されたかどうかに関係なく、無効なオブジェクト・エラー、存在しないオブジェクト・エラー、および認証の失敗が監査されます。

注意2: PL/SQLストアド・プロシージャまたはストアド・ファンクション内の再帰的なSQL操作の失敗を監査するには、SQL操作の監査を構成します。

system_action この句を使用すると、データベースに対するシステム・アクションを監査できます。system_actionに有効な値を確認するには、COMPONENTが'Standard'であるAUDITABLE_SYSTEM_ACTIONSビューのNAME列を問い合せます。

ALL この句を使用すると、データベースに対するシステムのすべてのアクションを監査できます。

component_actions

この句を使用すると、各コンポーネント(Oracle Data Pump、Oracle SQL*Loader Direct Path Load、Oracle Label Security、Oracle Database Real Application Security、Oracle Database Vault)に対するアクションを監査できます。

DATAPUMP この句を使用すると、Oracle Data Pumpに対するアクションを監査できます。component_actionには、監査するアクションを指定します。Oracle Data Pumpの有効なアクションを確認するには、COMPONENTがDatapumpであるAUDITABLE_SYSTEM_ACTIONSビューのNAME列を問い合せます。次に例を示します。

SELECT name FROM auditable_system_actions WHERE component = 'Datapump';

Oracle Data Pumpの監査方法の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

DIRECT_LOAD この句を使用すると、Oracle SQL*Loader Direct Path Loadに対するアクションを監査できます。component_actionには、監査するアクションを指定します。Oracle SQL*Loader Direct Path Loadの有効なアクションを確認するには、COMPONENTがDirect path APIであるAUDITABLE_SYSTEM_ACTIONSビューのNAME列を問い合せます。次に例を示します。

SELECT name FROM auditable_system_actions WHERE component = 'Direct path API';

Oracle SQL*Loader Direct Path Loadの監査方法の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

OLS この句を使用すると、Oracle Label Securityに対するアクションを監査できます。component_actionには、監査するアクションを指定します。Oracle Label Securityの有効なアクションを確認するには、COMPONENTがLabel SecurityであるAUDITABLE_SYSTEM_ACTIONSビューのNAME列を問い合せます。次に例を示します。

SELECT name FROM auditable_system_actions WHERE component = 'Label Security';

Oracle Label Securityの監査方法の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

XS この句を使用すると、Oracle Database Real Application Securityに対するアクションを監視できます。component_actionには、監査するアクションを指定します。Oracle Database Real Application Securityの有効なアクションを確認するには、COMPONENTがXSであるAUDITABLE_SYSTEM_ACTIONSビューのNAME列を問い合せます。次に例を示します。

SELECT name FROM auditable_system_actions WHERE component = 'XS';

Oracle Database Real Application Securityの監査方法の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

DV この句を使用すると、Oracle Database Vaultに対するアクションを監査できます。component_actionには、監査するアクションを指定します。Oracle Database Vaultの有効なアクションを確認するには、COMPONENTがDatabase VaultであるAUDITABLE_SYSTEM_ACTIONSビューのNAME列を問い合せます。次に例を示します。

SELECT name FROM auditable_system_actions WHERE component = 'Database Vault';

object_nameには、監査するDatabase Vaultオブジェクトの名前を指定します。

Oracle Database Vaultの監査方法の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

role_audit_clause

この句を使用すると、監査するロールを1つ以上指定できます。ロールを監査すると、そのロールに直接付与されたすべてのシステム権限が監査されます。このシステム権限が必要になるSQL文が監査されます。roleには、ユーザー定義(ローカルまたは外部)のロール、または事前定義されたロールを指定します。事前定義されているロールのリストは、『Oracle Databaseセキュリティ・ガイド』を参照してください。

WHEN句

この句を使用すると、統合監査ポリシーが適用される時間を制御できます。

audit_condition 統合監査ポリシーが適用されているかどうかを判断する条件を指定します。audit_conditionの評価がTRUEの場合は、ポリシーが適用されています。FALSEの場合は、ポリシーが適用されていません。

audit_conditionの最大長は4,000文字です。これには、式だけでなく、次のファンクションと条件を含めることができます。

- 数値ファンクション: BITAND、CEIL、FLOOR、POWER

- 文字値を返す文字ファンクション: CONCAT、LOWER、UPPER

- 数値を返す文字ファンクション: INSTR、LENGTH

- 環境および識別子ファンクション: SYS_CONTEXT、UID

- 比較条件: =、!=、<>、<、>、<=、>=

- 論理条件: AND、OR

- NULL条件: IS [NOT] NULL

- [NOT] BETWEEN条件

- [NOT] IN条件

audit_conditionは、一重引用符で囲む必要があります。audit_conditionに一重引用符が含まれているときには、そのかわりに2つの一重引用符を指定します。たとえば、次の条件を指定するとします。

SYS_CONTEXT('USERENV', 'CLIENT_IDENTIFIER') = 'myclient'

'audit_condition'は、次のように指定します。

'SYS_CONTEXT(''USERENV'', ''CLIENT_IDENTIFIER'') = ''myclient'''

EVALUATE PER STATEMENT この句を指定すると、監査可能な文ごとにaudit_conditionを評価できます。audit_conditionの評価がTRUEの場合、統合監査ポリシーが文に適用されます。FALSEの場合、統合監査ポリシーは文に適用されません。

EVALUATE PER SESSION この句を指定すると、セッション中にaudit_conditionを1回評価します。audit_conditionは、セッション中に実行される最初の監査可能な文に対して評価されます。audit_conditionの評価がTRUEの場合、統合監査ポリシーは、その後のセッション中に該当するすべての文に適用されます。FALSEの場合、統合監査ポリシーは、その後のセッション中に該当するすべての文に適用されません。

EVALUATE PER INSTANCE この句を指定すると、インスタンスの存続期間中にaudit_conditionを1回評価します。audit_conditionは、インスタンスの存続期間中に実行される最初の監査可能な文に対して評価されます。audit_conditionの評価がTRUEの場合、統合監査ポリシーは、インスタンスのその後の存続期間中に該当するすべての文に適用されます。FALSEの場合、統合監査ポリシーは、インスタンスのその後の存続期間中に該当するすべての文に適用されません。

CONTAINER句

CONTAINER句を使用すると、統合監査ポリシーの有効範囲を指定できます。

- CONTAINER = ALLを指定すると、共通の統合監査ポリシーを作成できます。このタイプのポリシーは、CDB内のすべてのプラガブル・データベース(PDB)に使用できます。現在のコンテナがルートである必要があります。ACTIONS object_action ONまたはACTIONS ALL ON句を指定する場合は、共通オブジェクトを指定する必要があります。

- CONTAINER = CURRENTを指定すると、接続先のコンテナにローカルの統合監査ポリシーを作成できます。現在のコンテナは、ルートまたはPDBにできます。現在のコンテナがルートの場合、句ACTIONS system_action、ACTIONS ALLまたはprivilege_audit_clauseを指定できません。

現在のコンテナがルートであるときにCONTAINER句を省略した場合、デフォルトはCONTAINER = ALLです。現在のコンテナがプラガブル・データベース(PDB)であるときにCONTAINER句を省略した場合、デフォルトはCONTAINER = CURRENTです。

注意:
統合監査ポリシーは、作成後に有効範囲を変更できません。

例

システム権限の監査例: 次の文は、統合監査ポリシーtable_polを作成します。このポリシーでは、システム権限のCREATE ANY TABLEとDROP ANY TABLEを監査します。

CREATE AUDIT POLICY table_pol
PRIVILEGES CREATE ANY TABLE, DROP ANY TABLE;

次の文は、table_polがAUDIT_UNIFIED_POLICIESビューにあるこを確認します。

SELECT *
FROM audit_unified_policies
WHERE policy_name = 'TABLE_POL';

オブジェクトに対するアクションの監査例: 次の文は、統合監査ポリシーdml_polを作成します。このポリシーは、表hr.employeesに対するDELETE、INSERTおよびUPDATEの各アクションを監査し、表hr.departmentsに対する監査可能なすべてのアクションを監査します。

CREATE AUDIT POLICY dml_pol
ACTIONS DELETE on hr.employees,
INSERT on hr.employees,
UPDATE on hr.employees,
ALL on hr.departments;

次の文は、統合監査ポリシーread_dir_polを作成します。このポリシーは、ディレクトリbfile_dir (「ディレクトリの作成例:」で作成したディレクトリ)に対するREADアクションを監査します。

CREATE AUDIT POLICY read_dir_pol
ACTIONS READ ON DIRECTORY bfile_dir;

システム・アクションの監査例: 次の問い合せは、データベースに対する監査可能な標準RDBMSシステム・アクションを表示します。

SELECT name FROM auditable_system_actions
WHERE component = 'Standard'
ORDER BY name;

NAME
----
ADMINISTER KEY MANAGEMENT
ALL
ALTER ASSEMBLY
ALTER AUDIT POLICY
ALTER CLUSTER
...

次の文は、統合監査ポリシーsecurity_polを作成します。このポリシーは、システム・アクションADMINISTER KEY MANAGEMENTを監査します。

CREATE AUDIT POLICY security_pol
ACTIONS ADMINISTER KEY MANAGEMENT;

次の文は、統合監査ポリシーall_actions_polを作成します。このポリシーは、データベースに対するすべての標準RDBMSシステム・アクションを監査します。

CREATE AUDIT POLICY all_actions_pol
ACTIONS ALL;

コンポーネント・アクションの監査例: 次の問合せは、Oracle Data Pumpに対する監査可能なアクションを表示します。

SELECT name FROM auditable_system_actions
WHERE component = 'Datapump';

NAME
----
EXPORT
IMPORT
ALL

次の文は、統合監査ポリシーdp_actions_polを作成します。このポリシーは、Oracle Data Pumpに対するIMPORTアクションを監査します。

CREATE AUDIT POLICY dp_actions_pol
ACTIONS COMPONENT = datapump IMPORT;

ロールの監査例: 次の文は、統合監査ポリシーjava_polを作成します。このポリシーは、事前定義されたロールjava_adminとjava_deployを監査します。

CREATE AUDIT POLICY java_pol
ROLES java_admin, java_deploy;

システム権限、アクションおよびロールの監査例: 次の文は、統合監査ポリシーhr_admin_polを作成します。このポリシーは、複数のシステム権限、アクションおよびロールを監査します。

CREATE AUDIT POLICY hr_admin_pol
PRIVILEGES CREATE ANY TABLE, DROP ANY TABLE
ACTIONS DELETE on hr.employees,
INSERT on hr.employees,
UPDATE on hr.employees,
ALL on hr.departments,
LOCK TABLE
ROLES audit_admin, audit_viewer;

統合監査ポリシーを適用するタイミングの制御例: 次の文は、統合監査ポリシーorder_updates_polを作成します。このポリシーは、表oe.ordersに対するUPDATEアクションを監査します。このポリシーは、外部ユーザーが監査可能な文を発行したときのみ適用されます。監査条件は、セッションごとに1回検査されます。

CREATE AUDIT POLICY order_updates_pol
ACTIONS UPDATE ON oe.orders
WHEN 'SYS_CONTEXT(''USERENV'', ''IDENTIFICATION_TYPE'') = ''EXTERNAL'''
EVALUATE PER SESSION;

次の文は、統合監査ポリシーemp_updates_polを作成します。このポリシーは、表hr.employeesに対するDELETE、INSERT、UPDATEアクションを監査します。このポリシーは、UIDが100、105、または107ではないユーザーが監査可能な文を発行したときにのみ適用されます。監査条件は、監査可能な文ごとに検査されます。

CREATE AUDIT POLICY emp_updates_pol
ACTIONS DELETE on hr.employees,
INSERT on hr.employees,
UPDATE on hr.employees
WHEN 'UID NOT IN (100, 105, 107)'
EVALUATE PER STATEMENT;

ローカルの統合監査ポリシーの作成例: 次の文は、ローカルの統合監査ポリシーlocal_table_polを作成します。このポリシーは、現在のコンテナでシステム権限のCREATE ANY TABLEおよびDROP ANY TABLEを監査します。

CREATE AUDIT POLICY local_table_pol
PRIVILEGES CREATE ANY TABLE, DROP ANY TABLE
CONTAINER = CURRENT;

共通の統合監査ポリシーの作成例: 次の文は、共通の統合監査ポリシーcommon_role1_polを作成します。このポリシーは、CDB全体で共通のロールc##role1(CREATE ROLEの「例」で作成したロール)を監査します。

CREATE AUDIT POLICY common_role1_pol
ROLES c##role1
CONTAINER = ALL;

CREATECLUSTER

用途

CREATE CLUSTER文を使用すると、クラスタを作成できます。クラスタとは、1つ以上の表のデータが含まれているスキーマ・オブジェクトのことです。

- 索引クラスタには複数の表が含まれている必要があり、クラスタ内のすべての表には1つ以上の共通の列があります。Oracle Databaseは、同じクラスタ・キーを共有するすべての表のすべての行をまとめて格納します。

- ハッシュ・クラスタ(1つ以上の表を含むことが可能)には、同一のハッシュ・キー値を持つ行がまとめて格納されます。

既存のクラスタの情報を取得するには、データ・ディクショナリ・ビューUSER_CLUSTERS、ALL_CLUSTERSおよびDBA_CLUSTERSを問い合せます。

関連項目:

- クラスタの概要は、『Oracle Database概要』を参照してください。

- クラスタを使用するタイミングについては、『Oracle Database SQLチューニング・ガイド』を参照してください。

- データ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

前提条件

自分のスキーマにクラスタを作成する場合は、CREATE CLUSTERシステム権限が必要です。他のユーザーのスキーマ内にクラスタを作成する場合は、CREATE ANY CLUSTERシステム権限が必要です。また、クラスタを設定するスキーマの所有者は、クラスタが定義されている表領域に対する領域の割当て制限、またはUNLIMITED TABLESPACEシステム権限のいずれかが必要です。

クラスタを最初に作成する場合は、Oracle Databaseはクラスタに対する索引を自動的に作成しません。このため、CREATE INDEX文でクラスタ索引を作成するまでは、索引クラスタのクラスタ表に対して、データ操作言語(DML)文を発行できません。

構文

create_cluster::=

(physical_attributes_clause::=、size_clause::=、cluster_range_partitions::=を参照)

physical_attributes_clause::=

(storage_clause::=を参照)

parallel_clause ::=

cluster_range_partitions::=

(range_values_clause::=、table_partition_description::=を参照)

セマンティクス

schema

作成するクラスタが定義されるスキーマを指定します。schemaを指定しない場合、現行のスキーマにクラスタが作成されます。

cluster

作成するクラスタの名前を指定します。

クラスタを作成した後、そのクラスタに表を追加します。クラスタには、最大32個の表を指定できます。オブジェクト表、およびLOB列またはOracleが提供するAny*型の列を含む表はクラスタの一部にはできません。クラスタを作成し、そのクラスタに表を追加しても、クラスタを意識する必要はありません。クラスタ化されていない表と同様に、SQL文を使用してクラスタ化表にアクセスできます。

関連項目:
クラスタへの表の追加については、「CREATE TABLE」、「クラスタの作成例:」および「クラスタへの表の追加例:」を参照してください。

column

クラスタ・キーに1つ以上の列名を指定します。最大16個のクラスタ・キー列を指定できます。これらの列は、データ型およびサイズについて、各クラスタ化表の列と対応している必要があります。名前は対応している必要はありません。

クラスタ・キー列の定義の一部として整合性制約は指定できません。そのかわり、クラスタに属している表に整合性制約を対応付けることができます。

関連項目:
「クラスタ・キーの例:」

データ型

各クラスタ・キー列のデータ型を指定します。

クラスタのデータ型の制限事項: クラスタのデータ型には、次の制限事項があります。

- データ型がLONG、LONG RAW、REF、ネストした表、VARRAY、BLOB、CLOB、BFILE、Oracleが提供する型Any*またはユーザー定義オブジェクト型であるクラスタ・キー列は指定できません。

- ROWID型の列を指定することはできますが、それらの列の値が有効な行IDであることは保証されません。

関連項目:
データ型の詳細は、「データ型」を参照してください。

SORT

SORTキーワードは、ハッシュ・クラスタを作成する場合にのみ有効です。この句を指定すると、DML操作を実行するときに、Oracle Databaseに対して、ハッシュ・ファンクションを適用した後でこの列でクラスタの行をソートするように指示できます。これによって、クラスタ化データでの後続の問合せ時に、応答時間が短縮される場合があります。ハッシュ・クラスタの作成については、「HASHKEYS句」を参照してください。

ソートされたハッシュ・クラスタの制限事項 ソートされたハッシュ・クラスタでは、行の依存がサポートされません。

physical_attributes_clause

physical_attributes_clauseを使用すると、クラスタの記憶特性を指定できます。クラスタ内の各表もこれらの記憶特性を使用します。これらのパラメータの値を指定しない場合、次のデフォルトが使用されます。

- PCTFREE: 10

- PCTUSED: 40

- INITRANS: 2、またはクラスタを含む表領域のデフォルト値のいずれか大きい方

関連項目:
これらの句の詳細は、「physical_attributes_clause」および「storage_clause」を参照してください。

SIZE

同一クラスタ・キー値または同一ハッシュ値を持つすべての行を格納するために確保する領域を、バイト単位で指定します。次に、この領域によって、データ・ブロックごとに格納されるクラスタやハッシュ値の最大値が決まります。SIZEの値がデータ・ブロック・サイズの約数でない場合、Oracle Databaseは、次に大きい約数を使用します。SIZEがデータ・ブロック・サイズより大きい場合、データベースは、クラスタまたはハッシュ値ごとに、1つ以上のデータ・ブロックを確保し、オペレーティング・システムのブロック・サイズを採用します。

また、データベースは、クラスタ・キー値を持つ行に対して確保する必要がある領域を決定する際に、クラスタ・キーの長さを考慮します。クラスタ・キーが大きければ、それに必要なサイズも大きくなります。実際のサイズを参照するには、USER_CLUSTERSデータ・ディクショナリ・ビューのKEY_SIZE列を問い合せます。(ハッシュ値は実際にはクラスタ内に格納されていないため、この値はハッシュ・クラスタには適用されません。)

このパラメータを指定しない場合、クラスタ・キー値またはハッシュ値ごとにデータ・ブロックが1つ確保されます。

TABLESPACE

クラスタを作成する表領域を指定します。

INDEX句

INDEXを指定すると、索引クラスタを作成できます。索引クラスタには、同一のクラスタ・キー値が指定されている行がまとめて格納されます。それぞれのクラスタ・キー値は、そのキーを持つ表および行の数に関係なく、各データ・ブロックに1回のみ格納されます。INDEXもHASHKEYSも指定しない場合は、デフォルトで索引クラスタが作成されます。

索引クラスタの作成後、クラスタ内の表に対してデータ操作言語(DML)文を発行する前に、そのクラスタ・キーに索引を作成する必要があります。この索引をクラスタ索引と呼びます。

ハッシュ・クラスタに対してクラスタ索引は作成できないため、ハッシュ・クラスタ・キーで索引を作成する必要はありません。

関連項目:
クラスタ索引の作成方法の詳細は「CREATE INDEX」、索引クラスタの概要は『Oracle Database概要』を参照してください。

HASHKEYS句

HASHKEYSを指定すると、ハッシュ・クラスタを作成し、ハッシュ・クラスタのハッシュ値の数を指定できます。ハッシュ・クラスタには、同一のハッシュ・キー値を持つ行がまとめて格納されます。それぞれの行のハッシュ値は、そのクラスタのハッシュ・ファンクションが戻す値です。

Oracle Databaseは、ハッシュ値の実際の数を決めるため、HASHKEYS値を一番近い次の素数に切り上げます。このパラメータの最小値は2です。INDEX句とHASHKEYSパラメータの両方を指定しないとき、デフォルトで索引クラスタが作成されます。

ハッシュ・クラスタの作成時に、データベースは、SIZEパラメータおよびHASHKEYSパラメータの値に基づいて、クラスタに領域を割り当てます。

関連項目:
Oracle Databaseがクラスタに領域を割り当てる方法の詳細は、『Oracle Database概要』および「ハッシュ・クラスタの例:」を参照してください。

SINGLE TABLE SINGLE TABLEは、クラスタが1つの表のみを含むタイプのハッシュ・クラスタであることを示します。この句によって、表の行へのアクセスがより高速になります。

単一表クラスタの制限事項: 同時にクラスタに存在できる表は1つのみです。ただし、表を削除して、同一のクラスタに別の表を作成することはできます。

関連項目:
「単一表ハッシュ・クラスタの例:」

HASH IS expr ハッシュ・クラスタに対するハッシュ・ファンクションとして使用する式を指定します。式には、次の制限事項があります。

- 正の値に評価される必要があります。

- 式全体の値が位取り0(ゼロ)の数になる場合は、任意のデータ型の列が参照される1つ以上の列を持つ必要があります。たとえば、number_column * LENGTH(varchar2_column)です。

- ユーザー定義のPL/SQLファンクションを参照できません。

- 疑似列LEVELまたはROWNUMを参照できません。

- ユーザー関連ファンクション(USERENV、UIDおよびUSER)または日時ファンクション(CURRENT_DATE、CURRENT_TIMESTAMP、DBTIMEZONE、EXTRACT(日時)、FROM_TZ、LOCALTIMESTAMP、NUMTODSINTERVAL、NUMTOYMINTERVAL、SESSIONTIMEZONE、SYSDATE、SYSTIMESTAMP、TO_DSINTERVAL、TO_TIMESTAMP、TO_DATE、TO_TIMESTAMP_TZ、TO_YMINTERVALおよびTZ_OFFSET)を参照できません。

- 定数に評価されることはありません。

- スカラー副問合せ式には指定できません。

- (クラスタ名ではなく)スキーマ名またはオブジェクト名で修飾された列を持つことができません。

HASH IS句を指定しない場合、Oracle Databaseはハッシュ・クラスタに対して内部ハッシュ・ファンクションを使用します。

既存のハッシュ・ファンクションの詳細は、データ・ディクショナリ表USER_CLUSTER_HASH_EXPRESSIONS、ALL_CLUSTER_HASH_EXPRESSIONSおよびDBA_CLUSTER_HASH_EXPRESSIONSに問い合せます。

ハッシュ列のクラスタ・キーは、任意のデータ型で構成される1つ以上の列を持つことができます。複合クラスタ・キー、または整数以外の列で構成されるクラスタ・キーを持つハッシュ・クラスタに対しては、内部ハッシュ・ファンクションを使用する必要があります。

関連項目:
データ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

parallel_clause

parallel_clauseを使用すると、クラスタの作成をパラレル化できます。

この句の詳細は、「CREATE TABLE」の「parallel_clause」を参照してください。

NOROWDEPENDENCIES | ROWDEPENDENCIES

この句のクラスタに対する動作は、表に対する動作と同じです。詳細は、CREATE TABLEの「NOROWDEPENDENCIES | ROWDEPENDENCIES」を参照してください。

CACHE | NOCACHE

CACHE CACHEを指定すると、全表スキャンの実行時に、このクラスタに対して取り出されたブロックを、バッファ・キャッシュ内の最高使用頻度(LRU)リストの最高使用頻度側に入れることができます。この句は、小規模な参照表で有効です。

NOCACHE NOCACHEを指定すると、全表スキャンの実行時に、このクラスタに対して取り出されたブロックを、バッファ・キャッシュ内のLRUリストの最低使用頻度側に入れることができます。これはデフォルトの動作です。

NOCACHEは、storage_clauseにKEEPを指定したクラスタには影響しません。

cluster_range_partitions

Oracle Database 12cリリース1 (12.1.0.2)以降、cluster_range_partitions句を指定して、レンジ・パーティション・ハッシュ・クラスタを作成できます。この句を指定する場合は、HASHKEYS句も指定する必要があります。

cluster_range_partitions句を使用すると、列リストの値の範囲でクラスタをパーティション化できます。レンジ・パーティション・ハッシュ・クラスタに表を追加すると、この表は、そのクラスタと同じパーティション数で、同じ列の同じパーティション境界に自動的にパーティション化されます。Oracle Databaseは、表パーティションにシステム生成の名前を割り当てます。

INTERVAL句を指定できない点を除いて、cluster_range_partitions句は、CREATE TABLEのrange_partitions句と同じセマンティクスを持ちます。詳細は、CREATE TABLEのドキュメントのrange_partitionsを参照してください。

関連項目:
「レンジ・パーティション・ハッシュ・クラスタの例:」

例

クラスタの作成例: 次の文は、クラスタ・キー列department、クラスタ・サイズ512バイトおよび記憶域パラメータ値を指定したクラスタpersonnelを作成します。

CREATE CLUSTER personnel
(department NUMBER(4))
SIZE 512
STORAGE (initial 100K next 50K);

クラスタ・キーの例: 次の文は、personnelのクラスタ・キーにクラスタ索引を作成します。

CREATE INDEX idx_personnel ON CLUSTER personnel;

クラスタ索引の作成後、索引に表を追加し、その表に対してDML操作を行うことができます。

クラスタへの表の追加例: 次の文は、サンプル表hr.employeesから部門表を作成し、前述の例で作成したpersonnelクラスタに追加します。

CREATE TABLE dept_10
CLUSTER personnel (department_id)
AS SELECT * FROM employees WHERE department_id = 10;

CREATE TABLE dept_20
CLUSTER personnel (department_id)
AS SELECT * FROM employees WHERE department_id = 20;

ハッシュ・クラスタの例: 次の文は、クラスタ・キー列cust_language、最大ハッシュ・キー値10(各サイズ512バイト)および記憶域パラメータ値を指定したハッシュ・クラスタlanguageを作成します。

CREATE CLUSTER language (cust_language VARCHAR2(3))
SIZE 512 HASHKEYS 10
STORAGE (INITIAL 100k next 50k);

この文では、HASH IS句を指定していないため、Oracle Databaseは、そのクラスタに対して内部ハッシュ・ファンクションを採用します。

次の文は、postal_codeとcountry_id列で構成されるクラスタ・キーを持つaddressという名前のハッシュ・クラスタを作成し、これらの列を含むSQL式をハッシュ・ファンクションに使用します。

CREATE CLUSTER address
(postal_code NUMBER, country_id CHAR(2))
HASHKEYS 20
HASH IS MOD(postal_code + country_id, 101);

単一表ハッシュ・クラスタの例: 次の文は、クラスタ・キーcustomer_idおよび最大ハッシュ・キー値100(各サイズ512バイト)を指定した単一表ハッシュ・クラスタcust_ordersを作成します。

CREATE CLUSTER cust_orders (customer_id NUMBER(6))
SIZE 512 SINGLE TABLE HASHKEYS 100;

レンジ・パーティション・ハッシュ・クラスタの例: 次の文では、販売額を基準にして5つの範囲にパーティション化された、salesというレンジ・パーティション・ハッシュ・クラスタを作成します。クラスタ・キーは、amount_sold列とprod_id列で構成されます。このクラスタは、ハッシュ・ファンクション(amount_sold * 10 + prod_id)を使用して、最大100,000個のハッシュ・キー値を保持します。このキー値には、それぞれ300バイトが割り当てられます。

CREATE CLUSTER sales (amount_sold NUMBER, prod_id NUMBER)
HASHKEYS 100000
HASH IS (amount_sold * 10 + prod_id)
SIZE 300
TABLESPACE example
PARTITION BY RANGE (amount_sold)
(PARTITION p1 VALUES LESS THAN (2001),
PARTITION p2 VALUES LESS THAN (4001),
PARTITION p3 VALUES LESS THAN (6001),
PARTITION p4 VALUES LESS THAN (8001),
PARTITION p5 VALUES LESS THAN (MAXVALUE));

CREATE CONTEXT

用途

CREATE CONTEXT文を使用すると、次の操作を実行できます。

- コンテキスト(アプリケーションを検証および保護するアプリケーション定義の一連の属性)のネームスペースを作成します。

- ネームスペースを、コンテキストを設定する外部作成パッケージと関連付けます。

専用パッケージのDBMS_SESSION.SET_CONTEXTプロシージャを使用して、コンテキスト属性を設定または再設定できます。

関連項目:

- コンテキストについては、『Oracle Databaseセキュリティ・ガイド』を参照してください。

- DBMS_SESSION.set_contextプロシージャの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

前提条件

コンテキスト・ネームスペースを作成する場合、CREATE ANY CONTEXTシステム権限が必要です。

構文

create_context::=

セマンティクス

OR REPLACE

OR REPLACEを指定すると、異なるパッケージを使用して既存のコンテキスト・ネームスペースを再定義できます。

namespace

作成または変更するコンテキスト・ネームスペース名を指定します。コンテキスト・ネームスペースは、常にスキーマSYSに格納されます。

関連項目:
コンテキスト・ネームスペースのネーミングに関するガイドラインは、「データベース・オブジェクトのネーミング規則」を参照してください。

schema

packageを所有するスキーマを指定します。schemaを指定しない場合、Oracle Databaseは現行のスキーマを使用します。

package

ユーザー・セッションのネームスペースに基づくコンテキスト属性を設定または再設定するPL/SQLパッケージを指定します。

柔軟に設計できるように、Oracle Databaseは、コンテキスト作成時のスキーマの存在またはパッケージの妥当性を検証しません。

INITIALIZED句

INITIALIZED句を使用すると、コンテキスト・ネームスペースを初期化するOracle Database以外のエンティティを指定できます。

EXTERNALLY EXTERNALLYを使用すると、セッション確立時にOCIインタフェースを使用してネームスペースを初期化できます。

関連項目:
OCIを使用したセッション確立の詳細は、『Oracle Call Interfaceプログラマーズ・ガイド』を参照してください。

GLOBALLY GLOBALLYを指定すると、グローバル・ユーザーがデータベースへ接続するときに、LDAPディレクトリによってネームスペースを初期化できます。

セッション確立後、設定したPL/SQLパッケージのみがネームスペースのすべての属性に書込みを行うコマンドを発行することができます。

関連項目:

- グローバルに初期化されるコンテキストの確立の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

- LDAPディレクトリを介したデータベースへの接続の詳細は、『Oracle Internet Directory管理者ガイド』を参照してください。

ACCESSED GLOBALLY

この句を使用すると、namespaceに設定したすべてのアプリケーション・コンテキストによるインスタンス全体へのアクセスを許可できます。この設定によって、複数のセッションがアプリケーション属性を共有できます。

例

アプリケーション・コンテキストの作成例: この例では、人事管理アプリケーションを検証および保護するPL/SQLパッケージemp_mgmtを使用します。このパッケージを作成する例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。次の文は、コンテキスト・ネームスペースhr_contextを作成し、emp_mgmtパッケージに関連付けます。

CREATE CONTEXT hr_context USING emp_mgmt;

SYS_CONTEXTファンクションを使用して、このコンテキストに基づいて、データ・アクセスを制御できます。たとえば、emp_mgmtパッケージで、特定の部門識別子として、属性department_idが定義されているとします。次のコマンドを実行し、department_idの値に基づいてアクセスを制限するビューを作成して、employees実表を保護できます。

CREATE VIEW hr_org_secure_view AS
SELECT * FROM employees
WHERE department_id = SYS_CONTEXT('hr_context', 'department_id');

関連項目:
アプリケーション・コンテキストを使用したユーザー情報の取得の詳細は、「SYS_CONTEXT」および『Oracle Databaseセキュリティ・ガイド』を参照してください。

CREATE CONTROLFILE

注意:
この文を使用する前に、データベース内のすべてのファイルの全体バックアップを実行することをお薦めします。詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

用途

CREATE CONTROLFILE文は、ごく限られた状況でのみ使用します。データベースによって使用されているすべての制御ファイルが失われ、かつバックアップ制御ファイルが存在しない場合に、この文を使用して制御ファイルを再作成します。この文を使用して、REDOログ・ファイル・グループ、REDOログ・ファイル・メンバー、アーカイブREDOログ・ファイル、データファイル、またはデータベースを同時にマウントおよびオープンするインスタンスの最大数を変更することもできます。

データベースの名前を変更するには、CREATE CONTROLFILE文ではなく、DBNEWIDユーティリティを使用することをお薦めします。データベース名の変更後にOPEN RESETLOGS操作が必要ないため、DBNEWIDの方が適しています。

関連項目:

- DBNEWIDユーティリティの詳細は、『Oracle Databaseユーティリティ』を参照してください。

- 既存のデータベース制御ファイルに基づくスクリプトの作成の詳細は、「ALTER DATABASE」の「BACKUP CONTROLFILE句」を参照してください。

前提条件

制御ファイルを作成する場合は、SYSDBAシステム権限またはSYSBACKUPシステム権限が必要です。

データベースをマウントしているインスタンスがあってはいけません。制御ファイルが正常に作成された後、CLUSTER_DATABASEパラメータで指定したモードでデータベースがマウントされます。続いて、DBAは、データベースをオープンする前にメディア・リカバリを行う必要があります。データベースをOracle Real Application Clusters(Oracle RAC)と併用している場合、次のインスタンスが起動する前に、データベースを停止してSHAREDモード(CLUSTER_DATABASE初期化パラメータの値にTRUEを設定)で再マウントする必要があります。

構文

create_controlfile::=

(storage_clause::=を参照)

logfile_clause::=

(file_specification::=を参照)

character_set_clause::=

セマンティクス

CREATE CONTROLFILE文を発行すると、この文に指定した情報に基づいて、新しい制御ファイルが作成されます。制御ファイルは、CONTROL_FILES初期化パラメータで指定した場所に格納されます。このパラメータに値を指定していない場合、Oracle Managed Filesの制御ファイルは、次のいずれか(優先度の高い順に示します)のとおり、制御ファイルのデフォルトの格納先に作成されます。

1. DB_CREATE_ONLINE_LOG_DEST_n初期化パラメータで指定されている1つ以上の制御ファイル。最初のディレクトリに作成されたファイルが主制御ファイルになります。DB_CREATE_ONLINE_LOG_DEST_nを指定している場合、DB_CREATE_FILE_DESTまたはDB_RECOVERY_FILE_DEST(高速リカバリ領域)には制御ファイルが作成されません。

2. DB_CREATE_ONLINE_LOG_DEST_nに値が指定されていない場合で、DB_CREATE_FILE_DESTおよびDB_RECOVERY_FILE_DESTの両方に値が設定されている場合は、それぞれの場所に1つの制御ファイルが作成されます。DB_CREATE_FILE_DESTに指定された場所が主制御ファイルの場所になります。

3. DB_CREATE_FILE_DESTに対してのみ値が指定されている場合は、その場所に1つの制御ファイルが作成されます。

4. DB_RECOVERY_FILE_DESTに対してのみ値が指定されている場合は、その場所に1つの制御ファイルが作成されます。

これらのパラメータのいずれにも値を設定していない場合、データベースが稼働しているオペレーティング・システムのデフォルトの場所に制御ファイルが作成されます。この制御ファイルはOracle Managed Fileではありません。

句を指定しない場合、Oracle Databaseは、以前の制御ファイルに対する値ではなく、デフォルト値を使用します。制御ファイルが正常に作成された後、Oracle Databaseは、初期化パラメータCLUSTER_DATABASEで指定したモードでデータベースをマウントします。パラメータが設定されていないときのデフォルト値はFALSEで、その場合はEXCLUSIVEモードでデータベースがマウントされます。その後、インスタンスを停止し、データベースのすべてのファイルの全体バックアップを取ることをお薦めします。

関連項目:
『Oracle Databaseバックアップおよびリカバリ・アドバンスト・ユーザーズ・ガイド』

REUSE

REUSEを指定すると、初期化パラメータCONTROL_FILESによって特定される既存の制御ファイルを再利用可能にできます。このとき、それらの制御ファイルに現在格納されている情報は上書きされます。この句を指定しないと、既存の制御ファイルがある場合に、エラーが戻されます。

DATABASE句

データベース名を指定します。このパラメータの値は、事前にCREATE DATABASE文またはCREATE CONTROLFILE文で設定した既存のデータベース名である必要があります。

SET DATABASE句

SET DATABASEを使用すると、データベース名を変更できます。データベース名には最大8バイトの名前を指定できます。

この句を指定する場合は、RESETLOGSも指定する必要があります。データベースの名前を変更し、既存のログ・ファイルを保持する場合は、このCREATE CONTROLFILE文を発行した後、ALTER DATABASE RECOVER USING BACKUP CONTROLFILE文を使用して、全データベースのリカバリを完了する必要があります。

logfile_clause

logfile_clauseを使用すると、データベースのREDOログ・ファイルを指定できます。すべてのREDOログ・ファイル・グループのすべてのメンバーを指定する必要があります。

オペレーティング・システムのファイル・システム内の標準REDOログ・ファイル、またはOracle ASMディスク・グループのREDOログ・ファイルをリスト表示するには、file_specificationのredo_log_file_spec書式(「file_specification」を参照)を使用します。ASM_filenameの書式を使用する場合、redo_log_file_specのautoextend_clauseは指定できません。

この句にRESETLOGSを指定する場合、ASM_filenameのいずれかのファイル作成形式を使用する必要があります。NORESETLOGSを指定する場合、ASM_filenameのいずれかの参照書式を指定する必要があります。

関連項目:
構文の様々な書式は、「ASM_filename」を参照してください。Oracle ASMの使用方法の概要は、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

GROUP integer ログ・ファイル・グループ番号を指定します。GROUP値を指定した場合、データベースが前回オープンされたときのGROUP値を基にして、この値が検証されます。

この句を指定しない場合、システムのデフォルト値を使用してログ・ファイルが作成されます。また、DB_CREATE_ONLINE_LOG_DEST_n初期化パラメータまたはDB_CREATE_FILE_DEST初期化パラメータのいずれかを設定した場合、およびRESETLOGSを指定した場合は、DB_CREATE_ONLINE_LOG_DEST_nパラメータで指定したログ・ファイルのデフォルトの格納先に2つのログが作成されます。このパラメータを設定していない場合は、DB_CREATE_FILE_DESTパラメータで指定した格納先に作成されます。

関連項目:
この句の詳細は、「file_specification」を参照してください。

RESETLOGS RESETLOGSを指定すると、Oracle DatabaseにLOGFILE句にリストされたファイルの内容を無視させることができます。LOGFILE句に指定したファイルは、存在していなくてもかまいません。SET DATABASE句を指定した場合、この句を指定する必要があります。

LOGFILE句の各redo_log_file_specで、SIZEパラメータを指定する必要があります。データベースでは、スレッド1にすべてのオンラインREDOログ・ファイル・グループを割り当てることによって、このスレッドを任意のインスタンスで共通に使用できるようにします。この句を使用した後は、RESETLOGS句を指定したALTER DATABASE文を使用してデータベースをオープンする必要があります。

NORESETLOGS NORESETLOGSを指定すると、LOGFILE句に指定したすべてのファイルが、前回データベースをオープンしたときの状態で使用されるようになります。これらのファイルは存在している必要があります。また、バックアップからのリストアではなく、現行のオンラインREDOログ・ファイルである必要があります。前回割り当てたスレッドに、REDOログ・ファイル・グループが再度割り当てられ、そのスレッドが前回と同じく再度使用可能になります。

SET DATABASE句を指定してデータベースの名前を変更した場合は、NORESETLOGSを指定することはできません。詳細は、「SET DATABASE句」を参照してください。

DATAFILE句

データベースのデータファイルを指定します。すべてのデータファイルを指定する必要があります。これらのファイルは既存のファイルである必要がありますが、メディア・リカバリを必要とするリストア・バックアップでもかまいません。

DATAFILE句には、読取り専用の表領域のデータファイルを含めないでください。これらのタイプのファイルは、後でデータベースに追加できます。また、この句には、一時データファイル(一時ファイル)も含めないでください。

オペレーティング・システムのファイル・システム内の標準データファイルと一時ファイル、またはOracle ASMディスク・グループのファイルを指定するには、file_specificationのdatafile_tempfile_spec書式(「file_specification」を参照)を使用します。ASM_filenameの書式を使用する場合、ASM_filenameのいずれかの参照書式を使用する必要があります。構文の様々な書式は、「ASM_filename」を参照してください。

関連項目:
Oracle ASMの使用方法の概要は、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

DATAFILEの制限事項: このDATAFILE句では、file_specificationのautoextend_clauseは指定できません。

MAXLOGFILES句

データベースに対して作成可能なオンラインREDOログ・ファイル・グループの最大数を指定します。Oracle Databaseは、この値を基にして、制御ファイル内でREDOログ・ファイル名に割り当てる領域の量を決定します。デフォルト値や最大値は、使用するオペレーティング・システムによって異なります。指定する値は、すべてのREDOログ・ファイル・グループのGROUPの最大値以上である必要があります。

MAXLOGMEMBERS句

REDOログ・ファイル・グループのメンバー(同一コピー)の最大数を指定します。Oracle Databaseは、この値を基にして、制御ファイル内でREDOログ・ファイル名に割り当てる領域の量を決定します。最小値は1です。最大値およびデフォルト値は、使用するオペレーティング・システムによって異なります。

MAXLOGHISTORY句

このパラメータは、Oracle DatabaseをARCHIVELOGモードで使用している場合にのみ有効です。データベースの自動メディア・リカバリに必要なアーカイブREDOログ・ファイル・グループの現在見積もられている最大数を指定します。この値を基にして、制御ファイル内でアーカイブREDOログ・ファイル名に割り当てられる領域が決定されます。

最小値は0(ゼロ)です。デフォルト値はMAXINSTANCES値の倍数で、使用するオペレーティング・システムによって異なります。最大値は、制御ファイルの最大サイズの制限のみを受けます。必要に応じてデータベースによって制御ファイルの該当セクションに引き続き領域が追加されるため、元の構成で十分でなくなった場合でも制御ファイルを再作成する必要はありません。その結果、このパラメータの実際の値は、指定した値を超える場合があります。

MAXDATAFILES句

CREATE DATABASEまたはCREATE CONTROLFILE実行時の、制御ファイルのデータファイル・セクションの初期サイズを指定します。値がMAXDATAFILESより大きく、DB_FILES以下のファイルを追加した場合、データファイル・セクションにさらに多くのファイルを格納できるように、Oracleの制御ファイルが自動的に拡張されます。

インスタンスでアクセスできるデータファイルの数は、初期化パラメータDB_FILESの制限を受けます。

MAXINSTANCES句

データベースを同時にマウントおよびオープンできるインスタンスの最大数を指定します。この値は、初期化パラメータINSTANCESの値より優先されます。最小値は1です。最大値およびデフォルト値は、使用するオペレーティング・システムによって異なります。

ARCHIVELOG | NOARCHIVELOG

ARCHIVELOGを指定すると、REDOログ・ファイルを再利用する前に、ファイルの内容をアーカイブできます。この句を指定した場合、インスタンスまたはシステム障害リカバリのみでなく、メディア・リカバリも実行できるようになります。

ARCHIVELOG句およびNOARCHIVELOG句を指定しない場合、デフォルトでNOARCHIVELOGモードが選択されます。制御ファイルの作成後に、ALTER DATABASE文を使用して、ARCHIVELOGモードとNOARCHIVELOGモードを切り替えることができます。

FORCE LOGGING

この句を使用すると、制御ファイルの作成後にデータベースをFORCE LOGGINGモードにできます。データベースがこのモードで実行されている場合、一時表領域および一時セグメントへの変更以外のすべてのデータベース内の変更が記録されます。この設定は、各表領域で指定するNOLOGGINGまたはFORCE LOGGING設定、および各データベース・オブジェクトで指定するNOLOGGING設定より優先され、これらの設定には影響されません。この句を指定しない場合、制御ファイルの作成後にデータベースはFORCE LOGGINGモードになりません。

注意:
FORCE LOGGINGモードは、パフォーマンスに影響する場合があります。この設定を使用する状況の詳細は、『Oracle Database管理者ガイド』を参照してください。

character_set_clause

キャラクタ・セットを指定した場合、制御ファイルのキャラクタ・セット情報が再構成されます。データベースのメディア・リカバリが後で必要となる場合、データベースがオープンする前にこの情報が使用可能になり、リカバリ時に表領域名が正しく解析されます。この句は、デフォルト以外のキャラクタ・セットを使用している場合にのみ必要です。デフォルトはオペレーティング・システムによって異なります。現行のデータベース・キャラクタ・セットは、起動時に$ORACLE_HOME/logのアラート・ログに出力されます。

表領域のリカバリにRecovery Managerを使用して制御ファイルを再作成する場合、およびデータ・ディクショナリに格納されているキャラクタ・セットとは異なるキャラクタ・セットを指定した場合、表領域のリカバリは失敗します。ただし、データベースのオープン時、制御ファイルのキャラクタ・セットは、データ・ディクショナリの正しいキャラクタ・セットに更新されます。

この句ではデータベース・キャラクタ・セットを変更できません。

関連項目:
表領域のリカバリの詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

例

制御ファイルの作成例: この文は、制御ファイルを再作成します。この文のデータベースdemoは、WE8DECキャラクタ・セットで作成されています。この例のpathには、ご使用のシステムでの適切なOracle Databaseディレクトリへのパスを挿入してください。

STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE "demo" NORESETLOGS NOARCHIVELOG
MAXLOGFILES 32
MAXLOGMEMBERS 2
MAXDATAFILES 32
MAXINSTANCES 1
MAXLOGHISTORY 449
LOGFILE
GROUP 1 '/path/oracle/dbs/t_log1.f'  SIZE 500K,
GROUP 2 '/path/oracle/dbs/t_log2.f'  SIZE 500K
# STANDBY LOGFILE
DATAFILE
'/path/oracle/dbs/t_db1.f',
'/path/oracle/dbs/dbu19i.dbf',
'/path/oracle/dbs/tbs_11.f',
'/path/oracle/dbs/smundo.dbf',
'/path/oracle/dbs/demo.dbf'
CHARACTER SET WE8DEC
;

CREATE DATABASE

注意:
この文を実行すると、データベースの初期設定が行われ、指定ファイル内の現行のデータは消去されます。そのことを十分理解したうえで、この文を使用してください。

セキュリティ拡張に関する注意:
このリリースのOracle Databaseと以降のリリースで、デフォルトのデータベース・ユーザー・アカウントのセキュリティを確保するために、セキュリティ機能が拡張されています。このリリースのセキュリティ・チェックリストは、『Oracle Databaseセキュリティ・ガイド』にあります。このチェックリストを参照し、その内容に従ってデータベースを構成してください。

用途

CREATE DATABASE文を使用すると、汎用的なデータベースを作成できます。

この文を実行すると、データベースの初期使用に備えて、指定した既存のデータファイル上のデータがすべて消去されます。したがって、既存のデータベースに対してこの文を実行した場合、データファイル上のすべてのデータが失われます。

この文を指定した場合、データベースの作成後、データベースは排他モードまたはパラレル・モード(初期化パラメータCLUSTER_DATABASEの値に依存する)でマウントおよびオープンされ、通常の用途に使用可能になります。その後、データベースの表領域を作成できます。

関連項目:

- データベースの変更の詳細は、「ALTER DATABASE」を参照してください。

- Oracle Java Virtual Machineの作成の詳細は、『Oracle Database Java開発者ガイド』を参照してください。

- 表領域の作成については、「CREATE TABLESPACE」を参照してください。

前提条件

データベースを作成する場合は、SYSDBAシステム権限が必要です。作成するデータベースの名前を持つ初期化パラメータ・ファイルが使用可能である必要があります。また、STARTUP NOMOUNTモードになっている必要があります。

構文

create_database::=

(database_logging_clauses::=、tablespace_clauses::=、set_time_zone_clause ::=、datafile_tempfile_spec::=、enable_pluggable_database::=を参照)

database_logging_clauses::=

(file_specification::=を参照)

tablespace_clauses::=

(file_specification::=、default_tablespace ::=、default_temp_tablespace ::=、undo_tablespace ::=を参照)

default_tablespace::=

default_temp_tablespace::=

(file_specification::=を参照)

extent_management_clause::=

(size_clause::=を参照)

undo_tablespace::=

(file_specification::=を参照)

set_time_zone_clause::=

enable_pluggable_database::=

file_name_convert::=

tablespace_datafile_clauses::=

(size_clause::=, autoextend_clause::=を参照)

セマンティクス

database

作成するデータベースの名前を指定します。名前は、DB_NAME初期化パラメータの値と一致する必要があります。名前の長さは最大8バイトです。データベース名には、ASCII文字のみを指定できます。Oracle Databaseは、この名前を制御ファイルに書き込みます。後で、データベース名を明示的に指定するALTER DATABASE文を発行すると、制御ファイル内の名前に基づいて、そのデータベース名が検証されます。

データベース名は、大文字と小文字が区別されず、大文字のASCII文字で保存されます。データベース名を引用識別子として指定した場合、引用符は特に警告もなく無視されます。

注意:
データベース名には、ヨーロッパやアジアのキャラクタ・セットの中の特殊文字は使用できません。たとえば、ウムラウト付きの文字は使用できません。

CREATE DATABASE文でデータベース名を指定しない場合、DB_NAME初期化パラメータで指定した名前が採用されます。DB_NAME初期化パラメータは、データベースの初期化パラメータ・ファイルに設定する必要があります。そのパラメータの値とは異なる名前を指定した場合、データベースはエラーを戻します。データベース名のその他の規則については、「データベース・オブジェクトのネーミング規則」を参照してください。

USER SYS ...、USER SYSTEM ...

これらの句を使用すると、SYSおよびSYSTEMユーザーのパスワードを設定できます。これらの句は今回のリリースでは必須ではありません。ただし、いずれか一方の句を指定した場合は、もう一方の句も指定する必要があります。

これらの句を指定しない場合、Oracle Databaseは、デフォルト・パスワードとして、ユーザーSYSにはchange_on_installを、ユーザーSYSTEMにはmanagerを作成します。これらのパスワードは、後でALTER USER文を使用して変更できます。また、データベース作成後に、ALTER USERを使用してパスワード管理属性を追加することもできます。

関連項目:
ALTER USER

CONTROLFILE REUSE句

CONTROLFILE REUSEを指定すると、初期化パラメータCONTROL_FILESによって特定される既存の制御ファイルを再利用可能にできます。このとき、それらの制御ファイルに現在格納されている情報は上書きされます。通常、この句は、初めてデータベースを作成する際ではなく、データベースを再作成する際に使用します。データベースを初めて作成する場合、制御ファイルはデフォルトの格納先に作成されます。この場所は、いくつかの初期化パラメータの値によって決まります。「CREATE CONTROLFILE」の「セマンティクス」を参照してください。

制御ファイルを既存のファイルより大きくするためのパラメータ値もあわせて指定する場合、この句は使用できません。MAXLOGFILES、MAXLOGMEMBERS、MAXLOGHISTORY、MAXDATAFILESおよびMAXINSTANCESがこのようなパラメータです。

この句を指定しないと、CONTROL_FILESで指定した制御ファイルのいずれかがすでに存在する場合、エラーが戻ります。

MAXDATAFILES句

CREATE DATABASEまたはCREATE CONTROLFILE実行時の、制御ファイルのデータファイル・セクションの初期サイズを指定します。値がMAXDATAFILESより大きく、DB_FILES以下のファイルを追加した場合、データファイル・セクションにさらに多くのファイルを格納できるように、Oracle Databaseの制御ファイルが自動的に拡張されます。

インスタンスでアクセスできるデータファイルの数は、初期化パラメータDB_FILESの制限を受けます。

MAXINSTANCES句

データベースを同時にマウントおよびオープンできるインスタンスの最大数を指定します。この値は、初期化パラメータINSTANCESの値より優先されます。最小値は1です。最大値は1055です。デフォルトは、使用するオペレーティング・システムによって異なります。

CHARACTER SET句

データベースにデータを格納するときのキャラクタ・セットを指定します。サポートされているキャラクタ・セットおよびこのパラメータのデフォルト値は、使用するオペレーティング・システムによって異なります。

CHARACTER SETの制限事項: AL16UTF16キャラクタ・セットは、データベース・キャラクタ・セットとして指定できません。

関連項目:
キャラクタ・セットの選択の詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

NATIONAL CHARACTER SET句

データ型がNCHAR、NCLOBまたはNVARCHAR2として定義された列にデータを格納する際に使用する各国語キャラクタ・セットを指定します。有効な値は、AL16UTF16およびUTF8です。デフォルトはAL16UTF16です。

関連項目:
Unicodeデータ型のサポートについては、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

SET DEFAULT TABLESPACE句

この句を使用すると、以降に作成される表領域、およびSYSTEMとSYSAUX表領域のデフォルトの型を指定できます。以降に作成される表領域のデフォルトの型をbigfileまたはsmallfileに設定するには、BIGFILEまたはSMALLFILEを指定します。

- bigfile表領域に格納されるのは、1つのデータファイルまたは一時ファイルのみであり、このファイルには最大約40億(2^32)ブロックを格納できます。データファイルまたは一時ファイル1つ当たりの最大サイズは、32Kブロックの表領域の場合は128TB、8Kブロックの表領域の場合は32TBです。

- smallfile表領域は、Oracleの従来の表領域であり、1022のデータファイルまたは一時ファイルを含めることができます。それぞれのファイルは、最大で約400万(2^22)のブロックを格納できます。

この句を指定しない場合、デフォルトでsmallfile表領域が作成されます。

関連項目:

- bigfile表領域の詳細は、『Oracle Database管理者ガイド』を参照してください。

- この構文の使用例は、「表領域のデフォルト・タイプの設定例:」を参照してください。

database_logging_clauses

database_logging_clausesを使用すると、データベースのREDOログ・ファイルの処理方法を指定できます。

LOGFILE句

REDOログ・ファイルとして使用する1つ以上のファイルを指定します。オペレーティング・システムのファイル・システム内の標準REDOログ・ファイル、またはOracle ASMディスク・グループのREDOログ・ファイルを作成するには、file_specificationのredo_log_file_spec書式を使用します。ASM_filenameの書式を使用する場合、redo_log_file_specのautoextend_clauseは指定できません。

redo_log_file_spec句には、1つ以上のREDOログ・ファイルのメンバー(コピー)を含むREDOログ・ファイル・グループを指定します。CREATE DATABASE文に指定したすべてのREDOログ・ファイルは、REDOログのスレッド番号1に追加されます。

関連項目:
この句の詳細は、「file_specification」を参照してください。

LOGFILE句を指定しない場合、Oracle Managed Filesのログ・ファイル・メンバーは、(優先度の高い順に示している)次のいずれかのとおり、デフォルトの格納先に作成されます。

- DB_CREATE_ONLINE_LOG_DEST_nを設定している場合、指定した各ディレクトリに、MAXLOGMEMBERS初期化パラメータの値までログ・ファイル・メンバーが作成されます。

- DB_CREATE_ONLINE_LOG_DEST_nパラメータを設定しておらず、DB_CREATE_FILE_DESTおよびDB_RECOVERY_FILE_DEST初期化パラメータの両方を設定している場合、それぞれの場所に1つのOracle Managed Filesのログ・ファイル・メンバーが作成されます。DB_CREATE_FILE_DESTアーカイブ先のログ・ファイルが最初のメンバーです。

- DB_CREATE_FILE_DEST初期化パラメータのみを指定している場合、その場所にログ・ファイル・メンバーが作成されます。

- DB_RECOVERY_FILE_DEST初期化パラメータのみを指定している場合、その場所にログ・ファイル・メンバーが作成されます。

いずれの場合でも、パラメータ設定では、オペレーティング・システムのファイル名または作成書式Oracle ASMのファイル名を正確に指定する必要があります。

これらのパラメータのいずれにも値を設定していない場合、データベースが稼働しているオペレーティング・システムのデフォルトの場所にログ・ファイルが作成されます。このログ・ファイルはOracle Managed Fileではありません。

GROUP integer REDOログ・ファイル・グループの識別番号を指定します。integerの値は1からMAXLOGFILESパラメータの値の範囲です。データベースには、2つ以上のREDOログ・ファイル・グループが必要です。同一のGROUP値を持つREDOログ・ファイル・グループは複数指定できません。このパラメータを指定しない場合、値が自動的に生成されます。REDOログ・ファイル・グループのGROUP値は、動的パフォーマンス・ビューV$LOGで確認できます。

MAXLOGFILES句

データベースに対して作成可能なREDOログ・ファイル・グループの最大数を指定します。Oracle Databaseは、この値を基にして、制御ファイル内でREDOログ・ファイル名に割り当てる領域の量を決定します。デフォルト値、最小値および最大値は、使用するオペレーティング・システムによって異なります。

MAXLOGMEMBERS句

REDOログ・ファイル・グループのメンバー(コピー)の最大数を指定します。Oracle Databaseは、この値を基にして、制御ファイル内でREDOログ・ファイル名に割り当てる領域の量を決定します。最小値は1です。最大値およびデフォルト値は、使用するオペレーティング・システムによって異なります。

MAXLOGHISTORY句

このパラメータが有用なのは、Oracle Real Application Clusters(Oracle RAC)でOracle DatabaseをARCHIVELOGモードで使用している場合のみです。Oracle RACの自動メディア・リカバリに使用するアーカイブREDOログ・ファイルの最大数を指定します。この値を基にして、制御ファイル内でアーカイブREDOログ・ファイル名に割り当てられる領域が決定されます。最小値は0(ゼロ)です。デフォルト値はMAXINSTANCES値の倍数で、使用するオペレーティング・システムによって異なります。最大値は、制御ファイルの最大サイズの制限のみを受けます。

ARCHIVELOG

ARCHIVELOGを指定すると、REDOログ・ファイル・グループを再利用する前に、グループの内容をアーカイブできます。この句を指定すると、メディア・リカバリを実行できるようになります。

NOARCHIVELOG

NOARCHIVELOGを指定すると、REDOログ・ファイル・グループを再利用する前に、グループの内容がアーカイブされません。この句を指定した場合、メディア・リカバリは実行できません。

デフォルトはNOARCHIVELOGモードです。データベースの作成後に、ALTER DATABASE文を使用して、ARCHIVELOGモードとNOARCHIVELOGモードを切り替えることができます。

FORCE LOGGING

この句を使用すると、データベースをFORCE LOGGINGモードにできます。一時表領域および一時セグメントへの変更以外のすべてのデータベース内の変更が記録されます。この設定は、各表領域で指定するNOLOGGINGまたはFORCE LOGGING設定、および各データベース・オブジェクトで指定するNOLOGGING設定より優先され、これらの設定には影響されません。

FORCE LOGGINGモードは、データベースのインスタンスで永続的です。データベースを停止し、再起動しても、データベースはFORCE LOGGINGモードのままです。ただし、制御ファイルを再作成した場合は、CREATE CONTROLFILE文でFORCE LOGGINGを指定しないかぎり、データベースはFORCE LOGGINGモードではなくなります。

注意:
FORCE LOGGINGモードは、パフォーマンスに影響する場合があります。この設定を使用する状況の詳細は、『Oracle Database管理者ガイド』を参照してください。

関連項目:
CREATE CONTROLFILE

tablespace_clauses

tablespace_clausesを使用すると、SYSTEMおよびSYSAUX表領域を構成したり、デフォルトの一時表領域とUNDO表領域を指定することができます。

extent_management_clause

この句を使用すると、ローカル管理SYSTEM表領域を作成できます。この句を指定しない場合、SYSTEM表領域はディクショナリ管理となります。

注意:
ローカル管理SYSTEM表領域を作成すると、この表領域をディクショナリ管理に変更することはできません。このデータベース内に別のディクショナリ管理表領域を作成することもできません。

この句を指定した場合、ローカル管理のSYSTEM表領域には一時セグメントを格納できないため、データベースにデフォルトの一時表領域が必要になります。

- EXTENT MANAGEMENT LOCALを指定して、DATAFILE句を指定しない場合は、default_temp_tablespace句を省略できます。Oracle Databaseは、データファイル・サイズが10MBで、自動拡張を使用禁止にした状態で、TEMPという一時表領域を作成します。

- EXTENT MANAGEMENT LOCALおよびDATAFILE句の両方を指定する場合は、default_temp_tablespace句も指定し、その一時表領域の一時ファイルを明示的に指定する必要があります。

インスタンスを自動UNDOモードでオープンしている場合も、データベースUNDO表領域には同様の要件があります。

- EXTENT MANAGEMENT LOCALを指定して、DATAFILE句を指定しない場合は、undo_tablespace句を省略できます。Oracle Databaseは、SYS_UNDOTBSというUNDO表領域を作成します。

- EXTENT MANAGEMENT LOCALおよびDATAFILEの両方の句を指定する場合は、undo_tablespaceを指定し、その表領域のデータファイルを明示的に指定する必要があります。

関連項目:
ローカル管理表領域およびディクショナリ管理表領域の詳細は、『Oracle Database管理者ガイド』を参照してください。

DATAFILE句

データファイルとして使用する1つ以上のファイルを指定します。ファイルは、すべてSYSTEM表領域の一部となります。オペレーティング・システムのファイル・システム内の標準データファイルと一時ファイル、またはOracle ASMディスク・グループのファイルを作成するには、file_specificationのfile_tempfile_spec書式を使用します。

注意:
undo_tablespace句のDATAFILE句と同様に、この句はオプションです。したがって、あいまいさを回避するために、この句でSYSTEM表領域のデータファイルを指定する場合は、オプションのDATAFILE句を含まないundo_tablespace句の直後にこの句を指定しないでください。指定した場合、Oracle DatabaseはDATAFILE句をundo_tablespace句の一部と認識します。

SYSTEM表領域のデータファイルを指定する構文は、Oracle ASMを使用してファイルを格納する場合も、ファイル・システムに格納する場合も、表領域の作成時にCREATE TABLESPACE文を使用してデータファイルを指定する構文と同じです。

関連項目:
データファイルの指定の詳細は、「CREATE TABLESPACE」を参照してください。

自動UNDOモードでデータベースを実行し、SYSTEM表領域のデータファイル名を指定した場合、すべての表領域に対してデータファイルを生成するものとみなされます。Oracle Managed Filesを使用する場合(DB_CREATE_FILE_DEST初期化パラメータに値を設定している場合)、データファイルは自動的に生成されます。ただし、Oracle Managed Filesを使用しないでこの句を指定する場合は、undo_tablespace句およびdefault_temp_tablespace句も指定する必要があります。

この句を指定しない場合、次のようになります。

- DB_CREATE_FILE_DEST初期化パラメータを設定している場合、このパラメータで指定したデフォルトのファイル格納先に、サイズが100MBでシステムが生成する名前を持つ、Oracle Managed Filesのデータファイルが作成されます。

- DB_CREATE_FILE_DEST初期化パラメータを設定していない場合、1つのデータファイルが作成されます。そのファイル名およびサイズは、使用するオペレーティング・システムによって異なります。

関連項目:
構文の詳細は、「file_specification」を参照してください。

SYSAUX句

Oracle Databaseは、すべてのデータベースに、SYSTEMとSYSAUXの両方の表領域を作成します。Oracle Managed Filesを使用しておらず、SYSAUX表領域の1つ以上のデータファイルを指定する場合、この句を使用します。

DATAFILE句を使用してSYSTEM表領域の1つ以上のデータファイルを指定した場合は、この句を指定する必要があります。Oracle Managed Filesを使用している場合、この句を指定しないと、SYSAUXデータファイルがOracle Managed Filesに設定されたデフォルトの場所に作成されます。

Oracle Managed Filesを使用可能にした場合にSYSAUX句を省略すると、SYSAUX表領域が、オンライン表領域、永続表領域およびローカル管理表領域として作成されます。この表領域は、100MBの1つのデータファイルを持ち、ロギングおよび自動セグメント領域管理が有効になっています。

SYSAUX表領域のデータファイルを指定する構文は、Oracle ASMを使用してファイルを格納する場合も、ファイル・システムに格納する場合も、表領域の作成時にCREATE TABLESPACE文を使用してデータファイルを指定する構文と同じです。

関連項目:

- データベースのアップグレード時のSYSAUX表領域の作成方法、および表領域のデータファイルの指定方法は、「CREATE TABLESPACE」を参照してください。

- SYSAUX表領域作成の詳細は、『Oracle Database管理者ガイド』を参照してください。

default_tablespace

この句を指定すると、データベースのデフォルトの永続表領域を作成できます。Oracle Databaseは、smallfile表領域を作成し、その後、この表領域に対して、別の永続表領域を指定していない、SYSTEM以外のユーザーを割り当てます。この句を指定しない場合、SYSTEM以外のユーザーに対するデフォルトの永続表領域はSYSTEM表領域です。

DATAFILE句およびextent_management_clauseは、CREATE TABLESPACE文で同じセマンティクスを持ちます。これらの句の詳細は、「DATAFILE | TEMPFILE句」および「extent_management_clause」を参照してください。

default_temp_tablespace

この句を指定すると、データベースのデフォルトの一時表領域を作成できます。Oracle Databaseは、この一時表領域に対して、別の一時表領域を指定していないユーザーを割り当てます。この句を指定しないと、データベースがローカル管理のSYSTEM表領域の作成時に、デフォルトの一時表領域を自動的に作成しない場合、SYSTEM表領域がデフォルトの一時表領域になります。

デフォルトの一時表領域がbigfileかsmallfileかを指定するには、BIGFILEまたはSMALLFILEを指定します。これらの句は、「SET DEFAULT TABLESPACE句」と同じセマンティクスを持ちます。

DB_CREATE_FILE_DEST初期化パラメータを設定してOracle Managed Filesを使用可能にした場合、この句のTEMPFILE句の部分はオプションです。このパラメータの値を指定していない場合は、TEMPFILE句を指定する必要があります。BIGFILEを指定した場合、この句で指定できるのは1つの一時ファイルのみです。

デフォルトの一時表領域の一時ファイルを指定する構文は、Oracle ASMを使用してファイルを格納する場合も、ファイル・システムに格納する場合も、一時表領域の作成時にCREATE TABLESPACE文を使用して一時ファイルを指定する構文と同じです。

関連項目:
一時ファイルの指定の詳細は、「CREATE TABLESPACE」を参照してください。

注意:
オペレーティング・システムによっては、一時ファイルのブロックが実際にアクセスされるまで、一時ファイル用の領域が割り当てられない場合があります。領域の割当ての遅延のため、一時ファイルの作成およびサイズ変更が速くなります。ただし、後で一時ファイルが使用されるときに、十分なディスク領域を使用可能にする必要があります。問題を回避するには、一時ファイルの作成またはサイズ変更の前に、ディスクの空き領域が、新しく作成する一時ファイルまたはサイズ変更後の一時ファイルのサイズよりも大きいことを確認してください。ディスク領域に余裕を持たせておくと、関連のない操作による、予期されるディスク使用量の増加にも対応できます。その後で、作成またはサイズ変更操作を実行してください。

デフォルトの一時表領域の制限事項: デフォルトの一時表領域には、次の制限事項があります。

- この句では、SYSTEM表領域を指定できません。

- デフォルトの一時表領域は、標準的なブロック・サイズである必要があります。

extent_management_clause句のセマンティクスは、CREATE DATABASEおよびCREATE TABLESPACE文で同じです。この句の詳細は、「CREATE TABLESPACE」の「extent_management_clause」を参照してください。

undo_tablespace

インスタンスを自動UNDOモードでオープンした場合(UNDO_MANAGEMENT初期化パラメータをデフォルトのAUTOに設定した場合)、undo_tablespaceを指定して、UNDOデータで使用する表領域を作成できます。自動UNDOモードを使用することをお薦めします。ただし、UNDO領域管理をロールバック・セグメントによって処理する場合、この句は指定しないでください。UNDO_TABLESPACE初期化パラメータの値を設定した場合も、この句を省略できます。パラメータが設定されており、この句を指定した場合、tablespaceはそのパラメータ値と同じである必要があります。

- UNDO表領域をbigfile表領域にする場合は、BIGFILEを指定します。bigfile表領域には、1つのデータファイルのみが含まれます。このファイルの最大サイズは8EB(8,000,000TB)です。

- UNDO表領域をsmallfile表領域にする場合は、SMALLFILEを指定します。smallfile表領域は、Oracle Databaseの従来の表領域であり、1022のデータファイルまたは一時ファイルを含めることができます。それぞれのファイルは、最大で約400万(2^22)のブロックを格納できます。

- DB_CREATE_FILE_DEST初期化パラメータを設定してOracle Managed Filesを使用可能にした場合、この句のDATAFILE句の部分はオプションです。このパラメータの値を指定していない場合は、DATAFILE句を指定する必要があります。BIGFILEを指定した場合、この句で指定できるのは1つのデータファイルのみです。

UNDO表領域のデータファイルを指定する構文は、Oracle ASMを使用してファイルを格納する場合も、ファイル・システムに格納する場合も、表領域の作成時にCREATE TABLESPACE文を使用してデータファイルを指定する構文と同じです。

関連項目:
データファイルの指定の詳細は、「CREATE TABLESPACE」を参照してください。

この句を指定すると、tablespaceという名前のUNDO表領域、およびUNDO表領域の一部として指定したデータファイルが作成され、インスタンスのUNDO表領域としてこの表領域が割り当てられます。Oracle Databaseは、このUNDO表領域を使用してUNDOデータを管理します。この句のDATAFILE句は、「DATAFILE句」と同様に動作します。

初期化パラメータ・ファイル内のUNDO_TABLESPACE初期化パラメータの値を指定している場合は、データベースをマウントする前に、この句で同じ名前を指定する必要があります。この名前が異なると、データベースのオープン時にエラーが戻されます。

この句を指定しないと、SYS_UNDOTBSという名前のデフォルトのsmallfileのUNDO表領域を持つデフォルトのデータベースが作成され、インスタンスのUNDO表領域としてこのデフォルトの表領域が割り当てられます。このUNDO表領域は、CREATE DATABASE文で使用するデフォルトのファイルから、初期エクステントが10MBのディスク領域を割り当てます。Oracle Databaseは、システムが生成したデータファイルを処理します(「DATAFILE句」を参照)。Oracle DatabaseがUNDO表領域を作成できない場合、CREATE DATABASE操作全体が失敗します。

関連項目:

- 自動UNDO管理およびUNDO表領域の詳細は、『Oracle Database管理者ガイド』を参照してください。

- データベースの作成後にUNDO表領域を作成する方法は、「CREATE TABLESPACE」を参照してください。

set_time_zone_clause

SET TIME_ZONE句を使用すると、データベースのタイムゾーンを設定できます。次の2つ方法でタイムゾーンを設定します。

- UTC(協定世界時、以前のグリニッジ標準時)からの時差を指定。hh:miの有効範囲は、-12:00から+14:00です。

- タイムゾーン地域を指定。有効なタイムゾーン地域名を表示するには、V$TIMEZONE_NAMES動的パフォーマンス・ビューのTZNAME列を問い合せます。

注意:
データベースのタイムゾーンをUTC(0:00)に設定することをお薦めします。これによって、タイムゾーンの変換が不要になるため、特にデータベース間のパフォーマンスを向上できます。

関連項目:
動的パフォーマンス・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

すべてのTIMESTAMP WITH LOCAL TIME ZONEデータは、ディスクに格納されるときにデータベースのタイムゾーンに正規化されます。SET TIME_ZONE句を指定しない場合、サーバーのオペレーティング・システムのタイムゾーンが使用されます。オペレーティング・システムのタイムゾーンがOracle Databaseで有効でない場合、データベースのタイムゾーンは、デフォルトでUTCになります。

USER_DATA TABLESPACE句

この句では、ユーザー・データおよびデータベース・オプション(Oracle XML DBなど)の格納に使用する表領域を作成できます。

- マルチテナント・コンテナ・データベース(CDB)の作成時にこの句を指定すると、シードの一部として表領域が作成されます。シードを使用してその後に作成されるプラガブル・データベース(PDB)には、この表領域とそのデータファイルが含まれます。この句で指定された表領域およびデータファイルは、ルートでは使用されません。

- 非CDBの作成時にこの句を指定すると、非CDBの一部として表領域が作成されます。

表領域がbigfileかsmallfileかを指定するには、BIGFILEまたはSMALLFILEを指定します。これらの句を指定しないと、SET DEFAULT TABLESPACE句で指定したタイプの表領域が作成されます。SET DEFAULT TABLESPACE句を使用しない場合、smallfile表領域が作成されます。これらの句は、「SET DEFAULT TABLESPACE句」と同じセマンティクスを持ちます。

datafile_tempfile_spec句を使用して、その表領域の1つ以上のデータファイルを指定できます。この句のセマンティクスの詳細は、「datafile_tempfile_spec」を参照してください。

enable_pluggable_database

この句を指定すると、CDBを作成できます。CREATE DATABASEを発行する前に、ENABLE_PLUGGABLE_DATABASE初期化パラメータをTRUEに設定する必要があります。CREATE DATABASE文によって、ルートおよびシード・コンテナを格納するCDBが作成されます。その後、CREATE PLUGGABLE DATABASE文を使用して、このCDB内にPDBを作成できます。enable_pluggable_database句を省略すると、非CDBが作成されます。これにはコンテナは何も格納できません。

関連項目:

- CDBの作成手順の詳細は、『Oracle Database管理者ガイド』を参照してください。

- CREATE PLUGGABLE DATABASE

- 「CDBの作成例:」

file_name_convert

file_name_convert句を使用すると、シードの関連ファイル(データファイルやウォレット・ファイルなど)の名前を、ルートの関連ファイルの名前を使用して生成する方法を指定できます。

- filename_patternには、ルートの関連ファイル名にある文字列を指定します。

- replacement_filename_patternには、置換文字列を指定します。

シードの関連ファイルの名前の生成時にfilename_patternがreplacement_filename_patternに置換されます。

Oracle Managed Filesで管理されているファイルまたはディレクトリと一致するファイル名のパターンは指定できません。

FILE_NAME_CONVERT = NONEを指定できます。これは、この句を省略した場合と同じになります。この句を省略すると、データベースはまずOracle Managed Filesを使用してシード・ファイル名を生成しようとします。Oracle Managed Filesを使用している場合は、PDB_FILE_NAME_CONVERT初期化パラメータを使用してファイル名が生成されます。このパラメータが設定されていないと、エラーが発生します。

tablespace_datafile_clauses

これらの句を使用して、シードPDB内のSYSTEM表領域とSYSAUX表領域を構成するすべてのデータファイルの属性を指定できます。SIZE size_clauseを指定しないと、その表領域のデータファイル・サイズは、対応するルートのデータファイル・サイズの事前定義された割合に設定されます。autoextend_clauseを指定しないと、それらの値はルートから継承されます。

これらの句のセマンティクスの詳細は、「size_clause」および「autoextend_clause」を参照してください。

例

データベースの作成例: 次の文は、すべての引数を指定してデータベースを作成します。

CREATE DATABASE sample
CONTROLFILE REUSE
LOGFILE
GROUP 1 ('diskx:log1.log', 'disky:log1.log') SIZE 50K,
GROUP 2 ('diskx:log2.log', 'disky:log2.log') SIZE 50K
MAXLOGFILES 5
MAXLOGHISTORY 100
MAXDATAFILES 10
MAXINSTANCES 2
ARCHIVELOG
CHARACTER SET AL32UTF8
NATIONAL CHARACTER SET AL16UTF16
DATAFILE
'disk1:df1.dbf' AUTOEXTEND ON,
'disk2:df2.dbf' AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
DEFAULT TEMPORARY TABLESPACE temp_ts
UNDO TABLESPACE undo_ts
SET TIME_ZONE = '+02:00';

この例では、初期化パラメータ・ファイルのDB_CREATE_FILE_DESTパラメータに値を設定して、Oracle Managed Filesを使用可能にしている状態を想定しています。したがって、DEFAULT TEMPORARY TABLESPACEおよびUNDO TABLESPACE句にファイル指定は必要ありません。

CDBの作成例: 次の文は、newcdbというCDBを作成します。ENABLE PLUGGABLE DATABASE句は、CDBを作成することを示します。このCDBには、ルート(CDB$ROOT)とシード(PDB$SEED)が格納されます。FILE_NAME_CONVERT句は、ルートに関連付けられたファイルの名前に含まれる/u01/app/oracle/oradata/newcdbを/u01/app/oracle/oradata/pdbseedに置換することによって、シードのファイルの名前を生成することを指定します。

CREATE DATABASE newcdb
USER SYS IDENTIFIED BY sys_password
USER SYSTEM IDENTIFIED BY system_password
LOGFILE GROUP 1 ('/u01/logs/my/redo01a.log','/u02/logs/my/redo01b.log')
SIZE 100M BLOCKSIZE 512,
GROUP 2 ('/u01/logs/my/redo02a.log','/u02/logs/my/redo02b.log')
SIZE 100M BLOCKSIZE 512,
GROUP 3 ('/u01/logs/my/redo03a.log','/u02/logs/my/redo03b.log')
SIZE 100M BLOCKSIZE 512
MAXLOGHISTORY 1
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 1024
CHARACTER SET AL32UTF8
NATIONAL CHARACTER SET AL16UTF16
EXTENT MANAGEMENT LOCAL
DATAFILE '/u01/app/oracle/oradata/newcdb/system01.dbf'
SIZE 700M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
SYSAUX DATAFILE '/u01/app/oracle/oradata/newcdb/sysaux01.dbf'
SIZE 550M REUSE AUTOEXTEND ON NEXT 10240K MAXSIZE UNLIMITED
DEFAULT TABLESPACE deftbs
DATAFILE '/u01/app/oracle/oradata/newcdb/deftbs01.dbf'
SIZE 500M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED
DEFAULT TEMPORARY TABLESPACE tempts1
TEMPFILE '/u01/app/oracle/oradata/newcdb/temp01.dbf'
SIZE 20M REUSE AUTOEXTEND ON NEXT 640K MAXSIZE UNLIMITED
UNDO TABLESPACE undotbs1
DATAFILE '/u01/app/oracle/oradata/newcdb/undotbs01.dbf'
SIZE 200M REUSE AUTOEXTEND ON NEXT 5120K MAXSIZE UNLIMITED
ENABLE PLUGGABLE DATABASE
SEED
FILE_NAME_CONVERT = ('/u01/app/oracle/oradata/newcdb/',
'/u01/app/oracle/oradata/pdbseed/')
SYSTEM DATAFILES SIZE 125M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
SYSAUX DATAFILES SIZE 100M
USER_DATA TABLESPACE usertbs
DATAFILE '/u01/app/oracle/oradata/pdbseed/usertbs01.dbf'
SIZE 200M REUSE AUTOEXTEND ON MAXSIZE UNLIMITED;

CREATE DATABASE LINK

用途

CREATE DATABASE LINK文を使用すると、データベース・リンクを作成できます。データベース・リンクとは、他のデータベース上のオブジェクトにアクセスできる、データベース上のスキーマ・オブジェクトです。他のデータベースは、Oracle Databaseシステムである必要はありません。ただし、Oracle以外のシステムにアクセスする場合は、Oracle異機種間サービスを使用する必要があります。

データベース・リンクを作成した後で、表名、ビュー名またはPL/SQLオブジェクト名に@dblinkを追加し、そのリンクをSQL文で利用して、他のデータベース上の表、ビューおよびPL/SQLオブジェクトを参照できます。SELECT文を使用して、他のデータベース上の表またはビューを問い合せることができます。INSERT文、UPDATE文、DELETE文またはLOCK TABLE文を使用してもリモート表およびビューにアクセスできます。

関連項目:

- PL/SQLファンクション、プロシージャ、パッケージおよびデータ型を使用してリモート表またはビューにアクセスする方法の詳細は、『Oracle Database開発ガイド』を参照してください。

- 分散データベース・システムについては、『Oracle Database管理者ガイド』を参照してください。

- ALL_DB_LINKS、DBA_DB_LINKSおよびUSER_DB_LINKSデータ・ディクショナリ・ビューの既存のデータベース・リンクの詳細、およびV$DBLINK動的パフォーマンス・ビューを使用して既存のリンクのパフォーマンスを監視する方法については、『Oracle Databaseリファレンス』を参照してください。

- 接続または認証ユーザーのパスワードが変更された場合に、データベース・リンクを変更する方法については、「ALTER DATABASE LINK」を参照してください。

- 既存のデータベース・リンクを削除する方法については、「DROP DATABASE LINK」を参照してください。

- DML操作でリンクを使用する方法については、「INSERT」、「UPDATE」、「DELETE」および「LOCK TABLE」を参照してください。

前提条件

プライベート・データベース・リンクを作成する場合、CREATE DATABASE LINKシステム権限が必要です。パブリック・データベース・リンクを作成する場合、CREATE PUBLIC DATABASE LINKシステム権限が必要です。また、リモートのOracle Databaseに対するCREATE SESSION権限が必要です。

なお、ローカルとリモートの両方のOracle Databaseに、Oracle Netをインストールしておく必要があります。

構文

create_database_link::=

(dblink::=を参照)

dblink_authentication::=

セマンティクス

PUBLIC

PUBLICを指定すると、すべてのユーザーが参照可能なパブリック・データベース・リンクを作成できます。この句を指定しない場合、データベース・リンクはプライベートとなり、作成したユーザー専用になります。

リモート・データベース上のアクセス可能なデータは、リモート・データベースへの接続時にデータベース・リンクで使用される識別によって異なります。

- CONNECT TO user IDENTIFIED BY passwordを指定した場合、データベース・リンクは、指定されたユーザーとパスワードを使用して接続します。

- CONNECT TO CURRENT_USERを指定した場合、データベース・リンクは、そのリンクが使用される有効範囲に基づいて有効なユーザーを使用して接続します。

- いずれの句も指定しない場合、データベース・リンクは、ローカル接続されたユーザーとしてリモート・データベースに接続します。

関連項目:
「パブリック・データベース・リンクの定義例:」

SHARED

SHAREDを指定すると、ソース・データベースからターゲット・データベースへの1つのネットワーク接続を使用する複数のセッションで共有可能な1つのデータベース・リンクを作成できます。共有サーバー構成では、共有データベース・リンクによって、リモート・データベースへの接続数が多くなりすぎるのを防ぐことができます。通常、共有リンクはパブリック・データベース・リンクでもあります。ただし、多くのクライアントが同じローカル・スキーマにアクセスして同じプライベート・データベース・リンクを使用する場合は、共有プライベート・データベース・リンクが役立つ場合もあります。

共有データベース・リンクでは、ソース・データベースの複数のセッションでターゲット・データベースへの同じ接続が共有されます。ターゲット・データベースでセッションが確立されると、ソース・データベースの別のセッションで接続を使用できるように、そのセッションは接続から関連付けを解除されます。認可されていないセッションがデータベース・リンクを使用して接続できないように、SHAREDを指定するときは、データベース・リンクの使用を認可されたユーザーに対してdblink_authentication句も指定する必要があります。

関連項目:
共有データベース・リンクの詳細は、『Oracle Database管理者ガイド』を参照してください。

dblink

データベース・リンクの完全な名前または名前の一部を指定します。データベース名のみを指定した場合、ローカル・データベースのデータベース・ドメインが暗黙的に追加されます。

dblinkには、ASCII文字のみを使用してください。マルチバイト文字はサポートされていません。データベース・リンク名は、大文字と小文字が区別されず、大文字のASCII文字で保存されます。データベース名を引用識別子として指定した場合、引用符は特に警告もなく無視されます。

GLOBAL_NAMES初期化パラメータの値がTRUEの場合、データベース・リンクは、接続先のデータベースと同じ名前を持つ必要があります。GLOBAL_NAMESの値がFALSEで、データベースのグローバル名を変更した場合、グローバル名を指定できます。

Oracle RAC構成の1つのセッションまたは1つのインスタンスでオープンできるデータベース・リンクの最大数は、OPEN_LINKSおよびOPEN_LINKS_PER_INSTANCE初期化パラメータの値で指定します。

データベース・リンク作成の制限事項 他のユーザーのスキーマ内にはデータベース・リンクを作成できません。また、dblinkはスキーマ名を付けて指定できません。データベース・リンク名にはピリオドを指定できるため、ralph.linktosalesのような名前を付けた場合、スキーマralphのlinktosalesという名前のデータベース・リンクと解析されるのではなく、名前全体が自分のスキーマにあるデータベース・リンク名と解析されます。

関連項目:

- データベース・リンクのネーミングのガイドラインについては、「リモート・データベース内のオブジェクトの参照」を参照してください。

- GLOBAL_NAMES、OPEN_LINKSおよびOPEN_LINKS_PER_INSTANCE初期化パラメータについては、『Oracle Databaseリファレンス』を参照してください。

- データベースのグローバル名の変更については、「ALTER DATABASE」の「RENAME GLOBAL_NAME句」を参照してください。

CONNECT TO句

CONNECT TO句を使用すると、リモート・データベースへの接続に使用するユーザーおよび資格証明がある場合は、それらを指定できます。

CURRENT_USER句

CURRENT_USERを指定すると、現行のユーザーのデータベース・リンクを作成できます。現行ユーザーは、リモート・データベースに対し有効なアカウントを持つグローバル・ユーザーである必要があります。

データベース・リンクがストアド・オブジェクト内からではなく直接使用される場合、現行のユーザーは接続ユーザーと同じです。

データベース・リンクを開始するストアド・オブジェクト(プロシージャ、ビュー、トリガーなど)を実行する場合、CURRENT_USERは、ストアド・オブジェクトを所有するユーザーの名前であり、オブジェクトをコールしたユーザーの名前ではありません。たとえば、データベース・リンクが(scottによって作成された)プロシージャscott.p内にあり、ユーザーjaneがプロシージャscott.pをコールした場合、現行のユーザーはscottになります。

ただし、ストアド・オブジェクトが実行者権限ファンクション、プロシージャまたはパッケージである場合、実行者認可IDはリモート・ユーザーとしての接続に使用されます。たとえば、権限を持つデータベース・リンクがプロシージャscott.p(scottによって作成された実行者権限プロシージャ)内にあり、ユーザーJaneがプロシージャscott.pをコールした場合、CURRENT_USERはjaneであり、プロシージャは、Janeの権限で実行されます。

関連項目:

- 実行者権限ファンクションの詳細は、「CREATE FUNCTION」を参照してください。

- 「CURRENT_USERデータベース・リンクの定義例:」

user IDENTIFIED BY password

固定ユーザー・データべース・リンクを使用して、リモート・データベースに接続するためのユーザー名およびパスワードを指定できます。この句を指定しない場合、データベース・リンクでは、データベースに接続している各ユーザーのユーザー名およびパスワードが使用されます。これを接続ユーザー・データベース・リンクといいます。

関連項目:
「固定ユーザー・データベース・リンクの定義例:」

dblink_authentication

共有データベース・リンクを作成する場合(SHARED句を指定した場合)にのみ、この句を指定できます。ターゲット・インスタンスのユーザー名およびパスワードを指定します。この句は、リモート・サーバーに対してユーザーを認証するもので、セキュリティ上必要です。指定するユーザー名およびパスワードは、リモート・インスタンスで有効なユーザー名およびパスワードである必要があります。ユーザー名およびパスワードは、認証用としてのみ使用されます。このユーザーを対象とした認証以外の操作はありません。

USING 'connect string'

リモート・データベースのサービス名を指定します。データベース名のみを指定した場合、接続文字列にデータベース・ドメインが暗黙的に追加され、完全なサービス名が作成されます。したがって、リモート・データベースのデータベース・ドメインが現行のデータベース・ドメインと異なる場合は、完全なサービス名を指定する必要があります。

関連項目:
リモート・データベースの指定の詳細は、『Oracle Database管理者ガイド』を参照してください。

例

次の例では、localという名前のデータベースとremoteという名前の2つのデータベースを使用することを想定しています。この例では、Oracle Databaseドメインを使用します。ご使用のドメインとは異なります。

パブリック・データベース・リンクの定義例: 次の例では、remoteという共有パブリック・データベース・リンクを定義します。このデータベース・リンクは、サービス名remoteで指定されたデータベースと対応しています。

CREATE PUBLIC DATABASE LINK remote
USING 'remote';

このデータベース・リンクによって、localデータベース上のユーザーhrがリモート・データベース上の表を更新できます(hrに適切な権限があることを想定しています)。

UPDATE employees@remote
SET salary=salary*1.1
WHERE last_name = 'Baer';

固定ユーザー・データベース・リンクの定義例: 次の例では、リモート・データベース上のユーザーhrが、localデータベース上のhrスキーマに、localという名前の固定ユーザー・データベース・リンクを定義します。

CREATE DATABASE LINK local
CONNECT TO hr IDENTIFIED BY password
USING 'local';

このデータベース・リンクが作成されると、hrは、次のようにlocalデータベース上のスキーマhrの表を問い合せることができます。

SELECT * FROM employees@local;

ユーザーhrは、次のDML文を使用して、localデータベース上のデータを変更することもできます。

INSERT INTO employees@local
(employee_id, last_name, email, hire_date, job_id)
VALUES (999, 'Claus', 'sclaus@example.com', SYSDATE, 'SH_CLERK');

UPDATE jobs@local SET min_salary = 3000
WHERE job_id = 'SH_CLERK';

DELETE FROM employees@local
WHERE employee_id = 999;

この固定データベース・リンクを使用すると、remoteデータベース上のユーザーhrは、同じデータベース上の他のユーザーが所有する表にもアクセスできます。この文は、ユーザーhrがoe.customers表に対するREADまたはSELECT権限を持っていることを想定しています。この文では、localデータベースのユーザーhrに接続した後で、次のようにoe.customers表への問合せが行われます。

SELECT * FROM oe.customers@local;

CURRENT_USERデータベース・リンクの定義例: 次の文は、リンク名としてサービス名全体を使用して、remoteデータベースに対する現行のユーザーのデータベース・リンクを定義します。

CREATE DATABASE LINK remote.us.example.com
CONNECT TO CURRENT_USER
USING 'remote';

この文を発行するユーザーは、LDAPディレクトリ・サービスに登録されたグローバル・ユーザーである必要があります。

特定の表がremoteデータベース上にあることを示さないように、シノニムを作成できます。次の文によって、これ以降にemp_tableを参照すると、リモート・データベース上のhrが所有するemployees表にアクセスします。

CREATE SYNONYM emp_table
FOR oe.employees@remote.us.example.com;

CREATE DIMENSION

用途

CREATE DIMENSION文を使用すると、ディメンションを作成できます。ディメンションは、列集合の組の親子関係を定義します。列集合の列は、すべて同じ表から得られたものである必要があります。ただし、1つの列集合(レベル)の列は、別の集合の列とは異なる表から得ることができます。オプティマイザは、マテリアライズド・ビューとの関係を使用してクエリー・リライトを行います。SQLアクセス・アドバイザは、この関係に基づいて、特定のマテリアライズド・ビューの作成を推奨します。

注意:
Oracle Databaseは、ディメンションの作成中に宣言する関係の妥当性チェックを自動的には行いません。hierarchy_clauseおよびCREATE DIMENSIONのdimension_join_clauseで指定する関係の妥当性チェックを行うには、DBMS_OLAP.VALIDATE_DIMENSIONプロシージャを実行する必要があります。

関連項目:

- マテリアライズド・ビューの詳細は、「CREATE MATERIALIZED VIEW」を参照してください。

- クエリー・リライト、オプティマイザおよびSQLアクセス・アドバイザの詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。

前提条件

自分のスキーマ内にディメンションを作成する場合は、CREATE DIMENSIONシステム権限が必要です。他のユーザーのスキーマ内にディメンションを作成する場合は、CREATE ANY DIMENSIONシステム権限が必要です。どちらの場合も、ディメンションで参照されるオブジェクトに対して、READまたはSELECTオブジェクト権限が必要です。

構文

create_dimension::=

level_clause::=

hierarchy_clause::=

dimension_join_clause::=

attribute_clause::=

extended_attribute_clause::=

セマンティクス

schema

ディメンションを作成するスキーマを指定します。schemaを指定しない場合、自分のスキーマにそのディメンションが作成されます。

dimension

ディメンション名を指定します。名前は、スキーマ内で一意であり、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。

level_clause

level_clauseでは、ディメンションのレベルを指定します。レベルは、ディメンション階層および属性を定義します。

level レベル名を指定します。

level_table . level_column レベル内の列を指定します。最大32列を指定できます。この句で指定する表は、すでに存在している必要があります。

SKIP WHEN NULL この句を指定すると、指定したレベルがNULLの場合、そのレベルはスキップされます。この句を使用すると、指定したレベルをスキップする代替パスによって、親子関係の階層のつながりを維持できます。「hierarchy_clause」を参照してください。

ディメンション・レベル列の制限事項: ディメンション・レベル列には、次の制限事項があります。

- レベルの列は、すべて同じ表から得られたものである必要があります。

- 異なるレベルの列が異なる表から得られる場合、dimension_join_clauseを指定する必要があります。

- 指定する列の集合は、このレベルに一意である必要があります。

- 指定する列は、他のディメンションでは指定できません。

- レベルがSKIP WHEN NULLで指定されていないかぎり、各level_columnは、NULL以外である必要があります。NULL以外の列にNOT NULL制約を指定する必要はありません。SKIP WHEN NULLを指定する列に、NOT NULL制約を指定することはできません。

hierarchy_clause

hierarchy_clauseでは、ディメンションのレベルの線形階層を定義します。各階層が、ディメンションのレベル間で親子関係の連鎖を形成します。ディメンションの階層は、互いに依存していません。階層は、共通の列を持つことができます。

ディメンションの各レベルは、句の中で最高1回指定され、level_clauseで名前を付けておく必要があります。

hierarchy 階層名を指定します。この名前は、ディメンションで一意である必要があります。

child_level 親レベルとn:1の関係を持つレベルの名前を指定します。child_levelのlevel_columnsはNULL以外である必要があります。各child_level値は、次の名前付きparent_levelの値を一意に定義します。

子level_tableが親level_tableと異なる場合、dimension_join_clauseでそれらの結合関係を指定する必要があります。

parent_level レベル名を指定します。

dimension_join_clause

dimension_join_clauseを使用すると、複数の表に列が含まれるディメンションに内部等価結合関係を指定できます。この句は、階層で指定されたすべての列が同じ表にあるとはかぎらない場合にのみ指定する必要があり、このときのみ指定できます。

child_key_column

親レベルの列と結合互換性のある1つ以上の列を指定します。

スキーマおよび各child_columnの表を指定しない場合、hierarchy_clauseのCHILD OF関係からスキーマおよび表が判断されます。child_key_columnのスキーマおよび列を指定する場合は、hierarchy_clauseのparent_levelの子のスキーマおよび列の表と一致している必要があります。

parent_level

レベル名を指定します。

ディメンションの結合の制限事項: ディメンションの結合には、次の制限事項があります。

- 同じ階層の既存のレベルの組に対して、1つのdimension_join_clauseのみを指定できます。

- child_key_columnsはNULL以外であり、親キーが一意でNULL以外である必要があります。条件を適用するために制約を定義する必要はありません。ただし、条件を満たさない場合、問合せが不適切な結果を戻すことがあります。

- 各子キーは、parent_level表のキーと結合する必要があります。

- 自己結合は使用できません。child_key_columnsを、parent_levelと同じ表に置くことはできません。

- 子キー列は、すべて同じ表から得られたものである必要があります。

- 子キー列数は、parent_levelの列数と一致し、列は結合可能である必要があります。

- 親レベルが複数の列で構成されている場合のみ、子キー列を指定します。

attribute_clause

attribute_clauseを使用すると、階層レベルによって一意に定義されている列を指定できます。levelの列は、dependent_columnsと同じ表からすべて得る必要があります。dependent_columnsは、level_clauseで指定されている必要はありません。

たとえば、階層レベルが市、都道府県名、および国の場合、市は市長、都道府県名は知事、国は首相を決定します。

extended_attribute_clause

この句を使用すると、1つ以上のレベルと列の関係に属性名を指定できます。この句で作成する属性の種類は、attribute_clauseを使用して作成される属性の種類と同じです。唯一の違いは、属性にレベル名とは異なる名前を割り当てることができることです。

例

ディメンションの作成例: 次の文は、サンプル・スキーマshにcustomers_dimディメンションを作成します。

CREATE DIMENSION customers_dim
LEVEL customer   IS (customers.cust_id)
LEVEL city       IS (customers.cust_city)
LEVEL state      IS (customers.cust_state_province)
LEVEL country    IS (countries.country_id)
LEVEL subregion  IS (countries.country_subregion)
LEVEL region     IS (countries.country_region)
HIERARCHY geog_rollup (
customer      CHILD OF
city          CHILD OF
state         CHILD OF
country       CHILD OF
subregion     CHILD OF
region
JOIN KEY (customers.country_id) REFERENCES country
)
ATTRIBUTE customer DETERMINES
(cust_first_name, cust_last_name, cust_gender,
cust_marital_status, cust_year_of_birth,
cust_income_level, cust_credit_limit)
ATTRIBUTE country DETERMINES (countries.country_name)
;

拡張属性を持つディメンションの作成例: また、次の例のように、attribute_clauseのかわりにextended_attribute_clauseを使用することもできます。

CREATE DIMENSION customers_dim
LEVEL customer   IS (customers.cust_id)
LEVEL city       IS (customers.cust_city)
LEVEL state      IS (customers.cust_state_province)
LEVEL country    IS (countries.country_id)
LEVEL subregion  IS (countries.country_subregion)
LEVEL region     IS (countries.country_region)
HIERARCHY geog_rollup (
customer      CHILD OF
city          CHILD OF
state         CHILD OF
country       CHILD OF
subregion     CHILD OF
region
JOIN KEY (customers.country_id) REFERENCES country
)
ATTRIBUTE customer_info LEVEL customer DETERMINES
(cust_first_name, cust_last_name, cust_gender,
cust_marital_status, cust_year_of_birth,
cust_income_level, cust_credit_limit)
ATTRIBUTE country DETERMINES (countries.country_name);

NULL列値を持つディメンションの作成例 次の例は、レベル列のいずれかがNULLの場合に、階層のつながりを維持する際のディメンションの作成方法を示しています。この例では、簡単に説明するためにcust_marital_status列を使用しています。この列はNOT NULL列ではありません。この制約がある場合は、SKIP WHEN NULL句を使用する前にこの制約を使用禁止にする必要があります。

CREATE DIMENSION customers_dim
LEVEL customer IS (customers.cust_id)
LEVEL status IS (customers.cust_marital_status) SKIP WHEN NULL
LEVEL city IS (customers.cust_city)
LEVEL state IS (customers.cust_state_province)
LEVEL country IS (countries.country_id)
LEVEL subregion IS (countries.country_subregion) SKIP WHEN NULL
LEVEL region IS (countries.country_region)
HIERARCHY geog_rollup (
customer CHILD OF
city CHILD OF
state CHILD OF
country CHILD OF
subregion CHILD OF
region
JOIN KEY (customers.country_id) REFERENCES country
)
ATTRIBUTE customer DETERMINES
(cust_first_name, cust_last_name, cust_gender,
cust_marital_status, cust_year_of_birth,
cust_income_level, cust_credit_limit)
ATTRIBUTE country DETERMINES (countries.country_name)
;

CREATE DIRECTORY

用途

CREATE DIRECTORY文を使用すると、ディレクトリ・オブジェクトを作成できます。ディレクトリ・オブジェクトは、外部バイナリ・ファイルLOB(BFILE)および外部表データが存在するサーバー・ファイル・システム上のディレクトリの別名を示します。PL/SQLコードおよびOCIコールでBFILEを参照する際、管理の汎用性のために、オペレーティング・システムのパス名をハード・エンコードせずにディレクトリ名を使用できます。

すべてのディレクトリは1つのネームスペースに作成され、個別のスキーマでは所有されません。ディレクトリに対するオブジェクト権限を特定ユーザーに付与することによって、そのディレクトリ構造内に格納されているBFILEへのアクセスを制限できます。

関連項目:

- BFILEオブジェクトの詳細は、「ラージ・オブジェクト(LOB)・データ型」を参照してください。

- オブジェクト権限の付与の詳細は、「GRANT」を参照してください。

- 「CREATE TABLE」の「external_table_clause ::=」を参照してください。

前提条件

ディレクトリを作成するには、CREATE ANY DIRECTORYシステム権限が必要です。

ディレクトリを作成すると、そのディレクトリに対するREAD、WRITEおよびEXECUTEオブジェクト権限が自動的に付与され、他のユーザーおよびロールにこれらの権限を付与できます。DBAも、これらの権限を他のユーザーおよびロールに付与できます。

ディレクトリに対するWRITE権限は、外部表との接続に便利です。これによって、権限受領者は、外部表のエージェントがディレクトリに書き込めるのがログ・ファイルなのか不良ファイルなのかを判断できます。

ファイルの記憶域用に、それに応じたオペレーティング・システムのディレクトリ、Oracle Automatic Storage Management (Oracle ASM)ディスク・グループ、またはOracle ASMディスク・グループ内のディレクトリを作成する必要もあります。システム管理者およびデータベース管理者は、このオペレーティング・システムのディレクトリに、Oracle Databaseプロセスに対する読取り権限および書込み権限が正しく設定されていることを確認する必要があります。

ディレクトリに対して付与される権限は、オペレーティング・システムのディレクトリ用に定義されたアクセス権限とは無関係に作成されるため、これらの権限は完全に対応しない場合があります。たとえば、サンプル・ユーザーhrに、ディレクトリ・オブジェクトに対するREAD権限が付与されていても、それに対応するオペレーティング・システムのディレクトリにOracle Databaseプロセスに対するREAD権限が付与されていない場合は、エラーが発生します。

構文

create_directory::=

セマンティクス

OR REPLACE

OR REPLACEを指定すると、既存のディレクトリ・データベース・オブジェクトを再作成できます。この句を指定した場合、既存のディレクトリに付与されているデータベース・オブジェクト権限を削除、再作成および再付与しなくても、そのディレクトリの定義を変更できます。

再定義したディレクトリに対する権限が付与されていたユーザーは、権限が再付与されなくてもそのディレクトリにアクセスできます。

関連項目:
データベースからのディレクトリの削除については、「DROP DIRECTORY」を参照してください。

directory

作成するディレクトリ・オブジェクトの名前を指定します。directoryの最大長は30バイトです。ディレクトリ・オブジェクトは、スキーマ名で修飾できません。

指定したディレクトリが実際に存在するかどうかは検証されません。このため、オペレーティング・システムに存在するディレクトリを指定してください。また、オペレーティング・システムでパス名の大/小文字が区別される場合は、正しい形式でディレクトリ名を指定する必要があります。パス名の終わりにスラッシュを指定する必要はありません。

ディレクトリ名で親ディレクトリを参照しないでください。たとえば、次の構文は有効です。

CREATE DIRECTORY mydir AS '/scratch/data/file_data';

ただし、次の構文は無効です。

CREATE DIRECTORY mydir AS '/scratch/../file_data';

path_name

ファイルがあるサーバーのオペレーティング・システム・ディレクトリのフル・パス名を指定します。一重引用符が必要です。その結果、パス名の大/小文字が区別されます。

例

ディレクトリの作成例: 次の文は、サーバーのディレクトリを示す、ディレクトリのデータベース・オブジェクトを作成します。

CREATE DIRECTORY admin AS '/disk1/oracle/admin';

次の文は、オペレーティング・システムのディレクトリusr/bin/bfile_dirに格納されているBFILEにアクセスできるように、ディレクトリのデータベース・オブジェクトbfile_dirを再定義します。

CREATE OR REPLACE DIRECTORY bfile_dir AS '/usr/bin/bfile_dir';

CREATE DISKGROUP

注意:
このSQL文は、Oracle ASMを使用しており、Oracle ASMインスタンスを起動している場合にのみ有効です。この文の発行は、通常のデータベース・インスタンスからではなく、Oracle ASMインスタンスから行う必要があります。Oracle ASMインスタンスの起動の詳細は、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

用途

CREATE DISKGROUP句を使用すると、ディスクのグループに名前を付け、そのグループをOracle Databaseが管理するように指定できます。Oracle Databaseは、ディスク・グループを論理単位として管理し、I/Oの均衡を保つために各ファイルを均等に分散します。また、Oracle Databaseでは、ディスク・グループで使用可能なすべてのディスクにデータベース・ファイルが自動的に分散され、記憶域構成が変わると常に、記憶域が自動的にリバランスされます。

この文を使用すると、ディスク・グループが作成され、1つ以上のディスクがディスク・グループに割り当てられ、ディスク・グループの初めてのマウントが実行されます。CREATE DISKGROUPは、ローカル・ノードのディスク・グループのみマウントします。後続のインスタンスで、Oracle ASMによって自動的にディスク・グループをマウントさせる場合は、初期化パラメータ・ファイルのASM_DISKGROUPS初期化パラメータの値に、そのディスク・グループ名を追加する必要があります。SPFILEを使用している場合、そのディスク・グループは自動的に初期化パラメータに追加されます。

関連項目:

- ディスク・グループの変更については、「ALTER DISKGROUP」を参照してください。

- Oracle ASMおよびディスク・グループを使用してデータベース管理を簡略化する方法については、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

- 初期化パラメータ・ファイルへのディスク・グループ名の追加の詳細は、「ASM_DISKGROUPS」を参照してください。

- Oracle ASM操作を監視する方法については、「V$ASM_OPERATION」を参照してください。

- ディスク・グループの削除については、「DROP DISKGROUP」を参照してください。

前提条件

この文を発行するには、SYSASMシステム権限が必要です。

この文を発行する前に、オペレーティング・システムのフォーマット・ユーティリティを使用して、ディスクをフォーマットしておく必要があります。また、Oracle Databaseユーザーが読取り/書込み権限を持ち、ASM_DISKSTRINGを使用してディスクが検出可能であることを確認します。

ファイル・システムではなく、Oracle ASMディスク・グループにデータベース・ファイルを格納している場合、Oracle ASMインスタンスを構成および起動してディスク・グループを管理しないと、データベース・インスタンスがディスク・グループのファイルにアクセスできません。

各データベース・インスタンスは、データベースと同じノード上にある1つのOracle ASMインスタンスと通信します。同じノード上にある複数のデータベース・インスタンスが、1つのOracle ASMインスタンスと通信できます。

構文

create_diskgroup::=

qualified_disk_clause::=

(size_clause::=を参照)

セマンティクス

diskgroup_name

ディスク・グループ名を指定します。ディスク・グループには、データベース・スキーマ・オブジェクトと同じネーミング規則および制限が適用されます。データベース・オブジェクト名の詳細は、「データベース・オブジェクトのネーミング規則」を参照してください。ただし、ディスク・グループはスキーマ・オブジェクトではありません。ディスク・グループ名は、引用符で囲んだ場合も、大/小文字が区別されません。それらは常に内部的には大文字で格納されます。

注意:
ディスク・グループ名には引用識別子を使用しないことをお薦めします。SQL*PlusでCREATE DISKGROUP文を発行する場合はこのような引用識別子は許可されていますが、ディスク・グループを管理する他のツールでは有効でない場合があります。

REDUNDANCY句

REDUNDANCY句を使用すると、ディスク・グループの冗長レベルを指定できます。

- NORMAL REDUNDANCYの場合、2つ以上の障害グループが存在する必要があります(次の「FAILGROUP句」を参照)。Oracle ASMでは、ディスク・グループ・テンプレートで指定された属性に従って、ディスク・グループのすべてのファイルの冗長性が提供されます。NORMAL REDUNDANCYディスク・グループでは、1つのグループが消失してもリカバリできます。ディスク・グループ・テンプレートの詳細は、「ALTER DISKGROUP」の「diskgroup_template_clauses」を参照してください。
REDUNDANCY句を指定しない場合、NORMAL REDUNDANCYがデフォルトになります。したがって、この句を指定しない場合、2つ以上の障害グループを作成する必要があります。それを作成しないと、作成操作は正常に実行されません。

- HIGH REDUNDANCYの場合、少なくとも3つの障害グループが存在する必要があります。Oracle ASMでは、エクステントごとにミラー化された2つのコピーが存在する3方向ミラー化でミラーリングが行われます。HIGH REDUNDANCYディスク・グループでは、2つの障害グループが消失してもリカバリできます。

- EXTERNAL REDUNDANCYは、Oracle ASMでディスク・グループの冗長性が提供されないことを示します。ディスク・グループを構成する各ディスクで冗長性を確保する(たとえばストレージ・アレイを使用する)か、ディスク障害が発生した場合にはディスク・グループのデータ損失を想定しておく(テスト環境など)必要があります。EXTERNAL REDUNDANCYを指定する場合、FAILGROUP句は指定できません。

ディスク・グループの作成後は、冗長性レベルを変更できません。

QUORUM | REGULAR

これらのキーワードを使用すると、障害グループまたはディスク指定を修飾できます。

- REGULARディスク、またはクォーラム以外の障害グループ内のディスクには、任意のファイルを含めることができます。

- QUORUMディスクまたはクォーラム障害グループ内のディスクには、データベース・ファイル、Oracle Cluster Registry(OCR)または動的ボリュームを含めることはできません。ただし、QUORUMディスクにCluster Synchronization Services(CSS)の投票ファイルは含めることができます。Oracle ASMは可能な場合は常に、投票ファイル用に、クォーラム・ディスクまたはクォーラム障害グループ内のディスクを使用します。
クォーラム障害グループ内のディスクは、冗長性要件の確認時に考慮されません。

いずれのキーワードも指定しない場合、デフォルトでREGULARが使用されます。

障害グループを明示的に指定する場合は、キーワードFAILGROUPの前にQUORUMまたはREGULARを指定します。暗黙的に作成した障害グループとともにディスク・グループを作成する場合は、キーワードDISKの前にこれらのキーワードを指定します。

関連項目:
クォーラム・ディスクと標準ディスクおよび障害グループの詳細は、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

FAILGROUP句

この句を使用すると、1つ以上の障害グループの名前を指定できます。NORMALまたはHIGH REDUNDANCYを指定している場合にこの句を省略すると、Oracle Databaseは、自動的にディスク・グループの各ディスクを障害グループに追加します。障害グループの暗黙的な名前は、オペレーティング・システムに依存しないディスク名と同じです(「NAME句」を参照)。

EXTERNAL REDUNDANCYディスク・グループを作成している場合、この句は指定できません。

qualified_disk_clause

DISK qualified_disk_clauseを指定すると、ディスク・グループにディスクを追加できます。

search_string  ディスク・グループに追加するディスクごとに、オペレーティング・システム依存の検索文字列を指定します。Oracle ASMでは、この文字列を使用してディスクが検索されます。search_stringは、ASM_DISKSTRING初期化パラメータの文字列を使用した検索で戻されるディスクのサブセットを指している必要があります。search_stringが、Oracle Databaseユーザーが読取り/書込み権限を持っているディスクを指していない場合、Oracle ASMはエラーを戻します。また、異なるディスク・グループに割り当てられている1つ以上のディスクを指している場合、FORCEを指定していなければ、エラーが戻されます。

Oracle ASMでは、有効な追加候補のディスクごとにディスク・ヘッダーがフォーマットされ、このディスクが新規のディスク・グループのメンバーであることが示されます。

関連項目:
検索文字列の指定の詳細は、「ASM_DISKSTRING」初期化パラメータを参照してください。

NAME句 NAME句は、search_stringが1つのディスクを指す場合にのみ有効です。この句を使用すると、オペレーティング・システムに依存しないディスクの名前を指定できます。名前は、最大30文字の英数字で指定できます。最初の文字は、英字にする必要があります。ASMLIBでディスクにラベルを割り当てている場合にこの句を省略すると、ディスク名としてそのラベルが使用されます。ASMLIBでラベルを割り当てていない場合にこの句を省略すると、Oracle ASMは、「diskgroupname_####」(####はディスク番号)という書式のデフォルト名を作成します。この名前を使用して、後続のOracle ASM操作でディスクを参照できます。

SIZE句 この句を使用すると、ディスクのサイズをバイト単位で指定できます。ディスク容量を超えるサイズを指定すると、Oracle ASMはエラーを戻します。ディスク容量よりも小さいサイズを指定した場合、Oracle ASMで使用されるディスク領域が制限されます。サイズ値は、1つのディスク・グループ内のすべてのディスクで同一にする必要があります。この句を指定しない場合、Oracle ASMはプログラム的にディスクのサイズを決定します。

FORCE FORCEを指定すると、Oracle ASMで、別のディスク・グループのメンバーであるディスクをディスク・グループに追加できます。

注意:
この方法でFORCEを使用すると、既存のディスク・グループが破棄される可能性があります。

この句を有効にするには、ディスクはディスク・グループのメンバーである必要があり、ディスクがマウントされたディスク・グループの一部であってはなりません。

NOFORCE NOFORCEを指定すると、Oracle ASMで、ディスクが別のディスク・グループのメンバーである場合にエラーを戻すことができます。デフォルトはNOFORCEです。

ATTRIBUTE句

この句を使用すると、ディスク・グループの属性値を設定できます。V$ASM_ATTRIBUTEビューを問い合せることによって、現在の属性値を確認できます。表14-2に、この句で設定できる属性を示します。属性値はすべて文字列です。

表14-2 ディスク・グループの属性

属性

有効値

説明

ACCESS_CONTROL.ENABLED

trueまたはfalse

ディスク・グループでOracle ASMのファイル・アクセス制御を有効にするかどうかを指定します。trueに設定した場合、Oracle ASMファイルへのアクセスがアクセス制御の対象になります。falseに設定した場合、すべてのユーザーがディスク・グループ内のすべてのファイルにアクセスできます。他のすべての操作は、この属性とは関係なく動作します。デフォルト値はfalseです。

compatible.rdbms属性とcompatible.asm属性が両方とも11.2以上に設定されている場合、ALTER DISKGROUP ... SET ATTRIBUTE文でこの属性を設定できます。この属性は、ディスク・グループの作成時には設定できません。

ファイル・アクセス制御を既存のディスク・グループに対して設定した場合、作成済のファイルはすべてのユーザーからアクセス可能なままになります。これを避けるには、ALTER DISKGROUP SET PERMISSION文を実行して権限を制限します。

注意: この属性は、Oracle ASMのファイル・アクセス制御を管理するためにACCESS_CONTROL.UMASKとともに使用します。ACCESS_CONTROL.ENABLEDディスク属性を設定したら、ACCESS_CONTROL.UMASK属性で権限を設定する必要があります。

ACCESS_CONTROL.UMASK

3桁の数(各桁は0(ゼロ)、2または6)。

Oracle ASMファイルの作成時に、そのファイルを所有するユーザー(最初の桁)、同じユーザー・グループ内のユーザー(2桁目)、およびそのユーザー・グループに属さない他のユーザー(3桁目)に対してマスクする権限を指定します。この属性は、ディスク・グループ内のすべてのファイルに適用されます。0(ゼロ)に設定すると、何もマスクされません。2に設定すると、書込み権限がマスクされます。6に設定すると、読取り権限と書込み権限の両方がマスクされます。デフォルト値は066です。

compatible.rdbms属性とcompatible.asm属性が両方とも11.2以上に設定されている場合、ALTER DISKGROUP ... SET ATTRIBUTE文でこの属性を設定できます。この属性は、ディスク・グループの作成時には設定できません。

ファイル・アクセス制御を既存のディスク・グループに対して設定した場合、作成済のファイルはすべてのユーザーからアクセス可能なままになります。これを避けるには、ALTER DISKGROUP SET PERMISSION文を実行して権限を制限します。

注意: この属性は、Oracle ASMのファイル・アクセス制御を管理するためにACCESS_CONTROL.ENABLEDとともに使用します。ACCESS_CONTROL.UMASKを設定する前に、ACCESS_CONTROL.ENABLEDをtrueに設定する必要があります。

AU_SIZE

サイズ(バイト単位)。有効な値は、1Mから64Mの2の累乗です。例: 4M、4194304

割当て単位サイズを指定します。この属性は、ディスク・グループの作成時にのみ設定でき、ALTER DISKGROUP文で変更することはできません。

COMPATIBLE.ADVM

有効なOracle Databaseバージョン番号脚注 1

ディスク・グループにOracle ADVMボリュームを含めることができるかどうかを決定します。11.2以上の値を設定する必要があります。この属性を設定する前に、COMPATIBLE.ASMの値を11.2以上に設定しておく必要があります。また、Oracle ADVMボリューム・ドライバをロードしておく必要があります。

デフォルトでは、COMPATIBLE.ADVM属性の値は、設定するまでは空です。

COMPATIBLE.ASM

有効なOracle Databaseバージョン番号脚注 1

Oracle ASMインスタンスでディスク・グループを使用するために必要な最小ソフトウェア・バージョンを指定します。この設定は、ディスク上のOracle ASMメタデータのデータ構造の形式にも影響します。

Oracle Database 11gのOracle ASMでは、CREATE DISKGROUP SQL文、ASMCMD mkdgコマンド、およびOracle Enterprise Managerの「ディスク・グループの作成」ページを使用する場合のCOMPATIBLE.ASM属性のデフォルト設定は10.1です。ASMCAを使用してディスク・グループを作成する場合、デフォルト設定は11.2です。

COMPATIBLE.RDBMS

有効なOracle Databaseバージョン番号脚注 1

すべてのデータベース・インスタンスでディスク・グループを使用するために必要なCOMPATIBLEデータベース初期化パラメータの最小設定を指定します。

COMPATIBLE.RDBMS属性を設定する前に、そのディスク・グループにアクセスするすべてのデータベースで、COMPATIBLE初期化パラメータの値がCOMPATIBLE.RDBMSの新しい設定値以上に設定されていることを確認します。たとえば、データベースのCOMPATIBLE初期化パラメータが11.1または11.2に設定されている場合、COMPATIBLE.RDBMSは、10.1から11.1の間(これらの値を含む)の任意の値に設定できます。

Oracle Database 11gのOracle ASMでは、SQLのCREATE DISKGROUP文、ASMCMD mkdgコマンド、ASMCAの「ディスク・グループの作成」ページ、およびOracle Enterprise Managerの「ディスク・グループの作成」ページを使用する場合のCOMPATIBLE.RDBMS属性のデフォルト設定は10.1です。

CONTENT.CHECK

trueまたはfalse

ディスク・グループのリバランスのためにデータ・コピー操作を実行する際のコンテンツ・チェックを有効化(true)または無効化(false)します。デフォルト値はfalseです。この属性は、ディスク・グループの作成時には設定できません。

DISK_REPAIR_TIME

0から136年

ディスクは、オフラインに切り替えられると、デフォルトの時間が経過した後にOracle ASMによって削除されます。compatible.rdbmsとcompatible.asmの両方の属性が11.1以上に設定されている場合、ディスクを修復してオンラインに戻すことができるように、ALTER DISKGROUP ... SET ATTRIBUTE文でdisk_repair_time属性を設定して、そのデフォルトの時間を変更できます。この属性は、ディスク・グループの作成時には設定できません。

時間は分単位(M)または時間単位(H)で指定できます。指定した経過時間は、ディスク・グループがマウントされているときにのみ加算されます。単位を省略した場合、デフォルトはHになります。この属性を省略し、compatible.rdbmsとcompatible.asmの両方が11.1以上に設定されている場合、デフォルトは3.6Hになります。それ以外の場合、ディスクは即時に削除されます。この属性は、ALTER DISKGROUP ... OFFLINE DISK文およびDROP AFTER句によって上書きできます。

注意: disk_repair_timeの現行の値を使用してディスクがオフラインに切り替えられ、その後この属性の値が変更された場合、変更された値がOracle ASMによってディスク・オフライン・ロジックで使用されます。

参照: 詳細は、「ALTER DISKGROUP」の「disk_offline_clause」および『Oracle Automatic Storage Management管理者ガイド』を参照してください。

FAILGROUP_REPAIR_TIME

<number>m (分数)または<number>h (時間数)

ディスク・グループ内の障害グループのデフォルトの修復時間を指定します。Oracle ASMで障害グループ全体が失敗したと判別される場合、障害グループの修復時間が使用されます。デフォルト値は、24時間(24h)です。

ALTER DISKGROUP OFFLINE DISK文のDROP AFTER句などでディスクに指定された修復時間がある場合は、そのディスク修復時間が障害グループの修復時間に優先します。

この属性は、ディスク・グループの変更時にのみ設定でき、標準冗長性および高冗長性のディスク・グループにのみ適用できます。

PHYS_META_REPLICATED

trueまたはfalse

ディスク・グループのレプリケーション・ステータスを追跡します。ディスク・グループのOracle ASM互換性が12.0以降に昇格されていると、各ディスクの物理メタデータ(ディスク・ヘッダー、表のブロックの空き領域、表のブロックの割当てなど)がレプリケートされます。このレプリケーションは、オンライン非同期で実行されます。ディスク・グループに含まれる各ディスクの物理メタデータがレプリケートされると、Oracle ASMはPHYS_META_REPLICATEDをtrueに設定します。

このディスク・グループ属性は、Oracle ASMディスク・グループ互換性(COMPATIBLE.ASM)が12.0以上に設定されているディスク・グループでのみ定義されています。この属性は読取り専用であり、情報提供のみを目的としています。この値は、設定や変更ができません。

SECTOR_SIZE

ディスク・グループ内のディスクのセクター・サイズ。有効な値は、'512'、'4096'および'4K'。

ディスク・グループ内のすべてのディスクのセクター・サイズは、指定した属性値と同じである必要があります。CREATE DISKGROUP文の処理時に、Oracle ASMは、この文で指定したすべてのディスクがディスク・グループに追加される前に、そのセクター・サイズをオペレーティング・システムに問い合せて、ディスク・グループが同じセクター・サイズを持つディスクによって構成されるよう確認します。この属性で指定したサイズと異なるセクター・サイズを持つディスクが検出された場合、文は正常に実行されません。ディスク・グループのマウント時にも、同様のチェックが実行されます。CREATE DISKGROUP文でこの属性を指定しなかった場合、指定したすべてのディスクのセクター・サイズが同一であるかぎり、Oracle ASMは作成操作を続行し、そのサイズがディスク・グループのセクター・サイズとみなされます。

ALTER DISKGROUP ... ADD DISK文を使用して既存のディスク・グループに新規ディスクを追加する場合も、新規ディスクのセクター・サイズはディスク・グループ属性と同じ値である必要があります。Oracle ASMはこれを検証し、追加するディスクのいずれかが異なるセクター・サイズであることが検出されると、ALTER DISKGROUP文は正常に実行されません。

この属性の値を設定することで、Oracle ASMがディスク・グループ内のすべてのディスクの値を想定することなく、ディスク・グループに任意のセクター・サイズを設定できます。結果として、ユーザーは、V$ASM_ATTRIBUTEビューのSECTOR_SIZE列を問い合せて、ディスク・グループに新規ディスクを追加する前にセクター・サイズを確認できます。

THIN_PROVISIONED

trueまたはfalse

ディスク・グループのリバランスの完了後に未使用の記憶域領域を破棄する機能を有効化(true)または無効化(false)します。デフォルト値はfalseです。

脚注 1 有効なOracle Databaseリリース番号の最初の2桁以上を指定してください。有効なバージョン番号の指定の詳細は、『Oracle Database管理者ガイド』を参照してください。たとえば、compatibilityを'11.2'または'12.1'として指定できます。

関連項目:
これらの属性設定の管理の詳細は、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

例

次の例では、ASM_DISKSTRINGパラメータは/devices/disks/c*のスーパーセットであり、/devices/disks/c*がOracle ASMディスクとして使用される1つ以上のデバイスを指し、Oracle Databaseユーザーはディスクに対する読取り/書込み権限を持っていることを想定しています。

関連項目:
Oracle ASMおよびディスク・グループを使用してデータベース管理を簡略化する方法については、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

ディスク・グループの作成例: 次の文は、Oracle ASMディスク・グループdgroup_01を作成します。このディスク・グループには、Oracle ASMによって冗長性が提供されておらず、search_stringと一致するすべてのディスクが含まれています。

CREATE DISKGROUP dgroup_01
EXTERNAL REDUNDANCY
DISK '/devices/disks/c*';

CREATE EDITION

用途

この文は、既存のエディションの子として新規エディションを作成します。エディションによって、データベース内に同じエディション化可能なオブジェクトを2バージョン以上保持できるようになります。エディションを作成すると、このエディションは、その親エディションのエディション化可能なオブジェクトのすべてを即座に継承します。次のオブジェクト型は、エディション化可能です。

- シノニム

- ビュー

- ファンクション

- プロシージャ

- パッケージ(仕様部および本体)

- タイプ(仕様部および本体)

- ライブラリ

- トリガー

エディション化可能なオブジェクトは、エディションが有効化されたスキーマ内にある、前述のいずれかのエディション化可能なオブジェクト型です。データベース内にこのような複数バージョンのオブジェクトを含めることができるため、オンラインのアプリケーション・アップグレードが大幅に簡略化されます。

注意:
前述のリストにないすべてのデータベース・オブジェクト型は、エディション化可能ではありません。エディション化可能でないオブジェクト型に対する変更内容は、データベース内のすべてのエディションからすぐに参照可能になります。

新規作成またはアップグレードされたOracle Databaseにはそれぞれ、ORA$BASEという名前のデフォルトのエディションがあり、それは、CREATE EDITION文により作成される最初のエディションの親として機能します。その後に、ALTER DATABASE DEFAULT EDITION文を使用して、ユーザー定義のエディションをデータベースのデフォルト・エディションとして指定できます。

関連項目:

- エディション化可能なオブジェクト・タイプおよびエディションの詳細は、『Oracle Database開発ガイド』を参照してください。

- エディションをデータベースのデフォルト・エディションとして指定する方法については、「ALTER DATABASE」の「DEFAULT EDITION句」を参照してください。

前提条件

エディションを作成する場合は、直接またはロールを介して付与されたCREATE ANY EDITIONシステム権限が必要です。エディションを他のエディションの子として作成する場合は、親エディションに対するUSEオブジェクト権限が必要です。

構文

create_edition::=

セマンティクス

edition

作成するエディションの名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている規則を満たしている必要があります。データベースに対して作成済のエディションを確認する場合は、DBA_OBJECTSまたはALL_OBJECTSデータ・ディクショナリ・ビューのEDITION_NAME列を問い合せます。

エディションを作成すると、作成したエディションに対するWITH GRANT OPTION付きのUSEオブジェクト権限がシステムにより自動的に付与されます。

注意:
エディションに、ORA、ORACLE、SYS、DBAおよびDBMSの接頭辞を含む名前を付けないことをお薦めします。これらの接頭辞は内部使用のために確保されているためです。

AS CHILD OF句

この句を使用した場合、新規エディションはparent_editionの子として作成されます。この句を指定しない場合、新規エディションはリーフ・エディションの子として作成されます。新規エディションは、作成時に、その親エディションからエディショニングされたすべてのオブジェクトを継承します。

エディションの制限事項: エディションは、1つの子エディションのみ持つことができます。parent_editionにすでに子エディションを持つエディションを指定した場合、エラーが戻されます。

例

次の簡単な例は、エディションの作成および使用のための構文を示すためのものです。エディションの現実的な使用例については、『Oracle Database開発ガイド』を参照してください。

次の文で、ユーザーHRには、エディションを作成および使用するために必要な権限が付与されます。

GRANT CREATE ANY EDITION, DROP ANY EDITION to HR;
Grant succeeded.

ALTER USER hr ENABLE EDITIONS;
User altered.

HRは、テストの目的で新規のエディションTEST_EDを作成します。

CREATE EDITION test_ed;

次に、HRは、最初に現行のエディションがデフォルト・エディションであることを確認し、テストの目的で、デフォルト・エディションORA$BASE内にエディショニング・ビューed_viewを作成します。

SELECT SYS_CONTEXT('userenv', 'current_edition_name') FROM DUAL;
SYS_CONTEXT('USERENV','CURRENT_EDITION_NAME')
--------------------------------------------------------------------------------
ORA$BASE
1 row selected.

CREATE EDITIONING VIEW e_view AS
SELECT last_name, first_name, email FROM employees;
View created.

DESCRIBE e_view
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
LAST_NAME                                 NOT NULL VARCHAR2(25)
FIRST_NAME                                         VARCHAR2(20)
EMAIL                                     NOT NULL VARCHAR2(25)

その後、HRがTEST_EDエディションを使用して異なる書式でビューを再作成すると、ビューはTEST_EDエディション内で実体化されます。

ALTER SESSION SET EDITION = TEST_ED;
Session altered.

CREATE OR REPLACE EDITIONING VIEW e_view AS
SELECT last_name, first_name, email, salary FROM employees;

View created.

TEST_EDエディション内のビューには、次の追加の列が含まれます。

DESCRIBE e_view
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
LAST_NAME                                 NOT NULL VARCHAR2(25)
FIRST_NAME                                         VARCHAR2(20)
EMAIL                                     NOT NULL VARCHAR2(25)
SALARY                                             NUMBER(8,2)

ORA$BASEエディション内のビューは、テスト環境から孤立したままです。

ALTER SESSION SET EDITION = ora$base;
Session altered.

DESCRIBE e_view;

Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
LAST_NAME                                 NOT NULL VARCHAR2(25)
FIRST_NAME                                         VARCHAR2(20)
EMAIL                                     NOT NULL VARCHAR2(25)

テスト環境からビューを削除しても、ビューはORA$BASEエディション内に残ります。

ALTER SESSION SET EDITION = TEST_ED;
Session altered.

DROP VIEW e_view;
View dropped.

ALTER SESSION SET EDITION = ORA$BASE;
Session altered.

DESCRIBE e_view;
Name                                      Null?    Type
----------------------------------------- -------- ----------------------------
LAST_NAME                                 NOT NULL VARCHAR2(25)
FIRST_NAME                                         VARCHAR2(20)
EMAIL                                     NOT NULL VARCHAR2(25)

TEST_EDエディションを必要とするアップグレードのテストが完了したら、エディションを削除できます。

DROP EDITION TEST_ED;

CREATE FLASHBACK ARCHIVE

用途

CREATE FLASHBACK ARCHIVE文を使用すると、フラッシュバック・データ・アーカイブを作成できます。フラッシュバック・データ・アーカイブによって、指定したデータベース・オブジェクトへのトランザクションでのデータ変更を自動的に追跡およびアーカイブできます。フラッシュバック・データ・アーカイブは複数の表領域で構成され、追跡対象の表に対するすべてのトランザクションの履歴データが格納されます。データは内部履歴表に格納されます。

フラッシュバック・データ・アーカイブには、RETENTIONパラメータで指定した期間の履歴データが格納されます。履歴データは、フラッシュバック問合せのAS OF句を使用して問い合せることができます。指定した保存期間を超えた古いアーカイブ済履歴データは、自動的に消去されます。

フラッシュバック・データ・アーカイブには、フラッシュバック・データ・アーカイブ用に使用される表に対するデータ定義言語(DDL)の変更があっても、履歴データが保持されます。フラッシュバック・データ・アーカイブは、多くの一般的なDDL文をサポートします。これには、表の定義を変更したりデータ移動を伴ういくつかのDDL文が含まれます。サポートされていないDDL文を実行すると、ORA-55610エラーが戻されます。

関連項目:

- フラッシュバック・データ・アーカイブの使用方法の概要は、『Oracle Database開発ガイド』を参照してください。

- 表を追跡対象の表として指定する方法の詳細は、「CREATE TABLE」の「flashback_archive_clause」を参照してください。

- フラッシュバック・データ・アーカイブの割当て制限属性と保存属性の変更およびフラッシュバック・データ・アーカイブにおける表領域の記憶域の追加と変更の詳細は、「ALTER FLASHBACK ARCHIVE」を参照してください。

前提条件

フラッシュバック・データ・アーカイブを作成するには、FLASHBACK ARCHIVE ADMINISTERシステム権限が必要です。また、フラッシュバック・データ・アーカイブを作成するにはCREATE TABLESPACEシステム権限が必要であり、履歴情報が格納される表領域に十分な割当て制限も必要です。フラッシュバック・データ・アーカイブをシステムのデフォルトのフラッシュバック・データ・アーカイブとして指定するには、SYSDBAとしてログインしている必要があります。

構文

create_flashback_archive::=

flashback_archive_quota::=

flashback_archive_retention::=

セマンティクス

DEFAULT

DEFAULTを指定するには、SYSDBAとしてログインしている必要があります。この句を使用すると、このフラッシュバック・データ・アーカイブをデータベースのデフォルトのフラッシュバック・データ・アーカイブとして指定できます。CREATE TABLE文またはALTER TABLE文に、フラッシュバック・データ・アーカイブ名を指定しないでflashback_archive_clauseが指定されている場合は、データベースはデフォルトのフラッシュバック・データ・アーカイブを使用して、該当する表のデータを格納します。

デフォルトのフラッシュバック・データ・アーカイブがすでに存在する場合は、この句を指定することはできません。ただし、ALTER FLASHBACK ARCHIVE ... SET DEFAULT句を使用して、既存のデフォルトのフラッシュバック・データ・アーカイブを置き換えることはできます。

関連項目:
詳細は、「CREATE TABLE」の「flashback_archive_clause」を参照してください。

flashback_archive

フラッシュバック・データ・アーカイブの名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。

TABLESPACE句

このフラッシュバック・データ・アーカイブのアーカイブ・データが格納される表領域を指定します。この句では表領域を1つのみ指定できます。ただし、ALTER FLASHBACK ARCHIVE文を使用して、後で表領域をフラッシュバック・データ・アーカイブに追加できます。

flashback_archive_quota

アーカイブ・データ用に確保する初期表領域の領域を指定します。フラッシュバック・データ・アーカイブ内のアーカイブ用の領域が一杯になると、このフラッシュバック・データ・アーカイブを使用する追跡対象の表でのDML操作は失敗します。フラッシュバック・データ・アーカイブの内容が指定された割当て制限の90%になると、領域不足のアラートがデータベースから発行され、古いデータを消去するか、割当て制限を追加する時間が与えられます。この句を省略すると、指定された表領域でフラッシュバック・データ・アーカイブの割当て制限が無制限になります。

[NO] OPTIMIZE DATA

フラッシュバック・データ・アーカイブの履歴表の最適化を有効化するには、OPTIMIZE DATAを指定します。これにより、高度な行圧縮、高度なLOB圧縮、高度なLOB重複除外、セグメント・レベルの圧縮階層化および行レベルの圧縮階層化のいずれかの機能を使用して、履歴表のデータ記憶域を最適化するようデータベースに指示します。この句を指定するには、拡張圧縮オプションのライセンスが必要です。

履歴表のデータ記憶域を最適化しないようにするには、NO OPTIMIZE DATAを指定します。これはデフォルトです。

flashback_archive_retention

アーカイブされたデータがフラッシュバック・データ・アーカイブに保持される時間の長さを月、日または年単位で指定します。指定した時間でフラッシュバック・データ・アーカイブが一杯になると、データベースは「flashback_archive_quota」で説明されているように応答します。

例

次の文では、2つのフラッシュバック・データ・アーカイブがテストのために作成されます。最初のフラッシュバック・データ・アーカイブは、データベースのデフォルトとして指定されます。どちらも、領域割当て制限は1MBであり、アーカイブの保存は1日です。

CREATE FLASHBACK ARCHIVE DEFAULT test_archive1
TABLESPACE example
QUOTA 1 M
RETENTION 1 DAY;

CREATE FLASHBACK ARCHIVE test_archive2
TABLESPACE example
QUOTA 1 M
RETENTION 1 DAY;

次の文では、デフォルトのフラッシュバック・データ・アーカイブを変更して、保存期間を1か月に延長します。

ALTER FLASHBACK ARCHIVE test_archive1
MODIFY RETENTION 1 MONTH;

次の文では、oe.customers表の追跡を指定します。フラッシュバック・データ・アーカイブが指定されていないため、データはデフォルトのフラッシュバック・データ・アーカイブtest_archive1にアーカイブされます。

ALTER TABLE oe.customers
FLASHBACK ARCHIVE;

次の文では、oe.orders表の追跡を指定します。この場合、データは指定したフラッシュバック・データ・アーカイブtest_archive2にアーカイブされます。

ALTER TABLE oe.orders
FLASHBACK ARCHIVE test_archive2;

次の文では、test_archive2フラッシュバック・データ・アーカイブを削除します。

DROP FLASHBACK ARCHIVE test_archive2;

CREATE FUNCTION

用途

ファンクションはPL/SQLを使用して定義されます。このため、この項では一般的な情報について説明します。構文およびセマンティクスの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

CREATE FUNCTION文を使用すると、スタンドアロン・ストアド・ファンクションまたはコール仕様を作成できます。

- ストアド・ファンクション(ユーザー・ファンクションまたはユーザー定義ファンクション)は、名前でコールできるPL/SQL文の集合です。ストアド・ファンクションは、プロシージャとよく似ていますが、ファンクションは、コールした環境に値を戻す点で異なります。ストアド・ファンクションは、SQL式の一部として使用できます。

- コール仕様は、PL/SQLからコールできるように、Javaメソッドまたは第三世代言語(3GL)ルーチンを宣言します。CALL SQL文を使用して、そのようなメソッドまたはルーチンをコールすることもできます。コール仕様は、コールされたときに起動するJavaメソッドまたは共有ライブラリの名前付きファンクションをOracle Databaseに指示します。また、引数および戻り値に対して実行する型変換もデータベースに指示します。

注意:
CREATE PACKAGE文を使用して、パッケージの一部としてファンクションを作成することもできます。

関連項目:

- プロシージャおよびファンクションの概要は、「CREATE PROCEDURE」を参照してください。パッケージの作成については、「CREATE PACKAGE」を参照してください。ファンクションの変更および削除については、「ALTER FUNCTION」および「DROP FUNCTION」を参照してください。

- 共有ライブラリについては、「CREATE LIBRARY」を参照してください。

- 外部ファンクションの登録の詳細は、『Oracle Database開発ガイド』を参照してください。

前提条件

自分のスキーマ内にファンクションを作成または再作成する場合は、CREATE PROCEDUREシステム権限が必要です。他のユーザーのスキーマ内にファンクションを作成または再作成する場合は、CREATE ANY PROCEDUREシステム権限が必要です。

構文

ファンクションはPL/SQLを使用して定義されます。このため、このマニュアルの構文図ではSQLキーワードのみを示します。PL/SQLの構文、セマンティクスおよび例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。

create_function::=

(plsql_function_source: 『Oracle Database PL/SQL言語リファレンス』を参照。)

セマンティクス

OR REPLACE

OR REPLACEを指定すると、既存のファンクションを再作成できます。この句を指定した場合、既存のファンクションに付与されているオブジェクト権限を削除、再作成および再付与しなくても、そのファンクションの定義を変更できます。ファンクションを再定義した場合、そのファンクションは再コンパイルされます。

再定義したファンクションに対して権限が付与されていたユーザーは、権限を再付与されなくても、そのファンクションにアクセスできます。

ファンクション索引がファンクションに依存している場合、索引にDISABLEDのマークが付きます。

関連項目:
SQLを使用したファンクションの再コンパイルについては、「ALTER FUNCTION」を参照してください。

[ EDITIONABLE | NONEDITIONABLE ]

この句を使用すると、schemaのスキーマ・オブジェクト・タイプFUNCTIONのエディショニングが有効化されたときに、そのファンクションをエディション・オブジェクトにするか非エディション・オブジェクトにするかを指定できます。デフォルトは、EDITIONABLEです。エディション・オブジェクトと非エディション・オブジェクトの詳細は、『Oracle Database開発ガイド』を参照してください。

plsql_function_source

plsql_function_sourceの構文、セマンティクスおよび例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。

CREATE INDEX

用途

CREATE INDEX文を使用すると、次のものに索引を作成できます。

- 表の1つ以上の列、パーティション表、索引構成表またはクラスタ

- 表またはクラスタの1つ以上のスカラー型オブジェクト属性

- ネストした表の列の索引を作成するためのネストした表の記憶表

索引は、表またはクラスタの索引列に表示されるそれぞれの値のエントリが含まれるスキーマ・オブジェクトであり、行に対する直接かつ高速のアクセスを提供します。単一の索引エントリの最大サイズは、データベースのブロック・サイズによって異なります。

Oracle Databaseは次のタイプの索引をサポートしています。

- 通常の索引。(デフォルトではBツリー索引が作成されます。)

- ビットマップ索引。キー値に関連付けられたROWIDをビットマップとして格納します。

- パーティション索引。表の索引付き列に表示される各値のエントリを含むパーティションで構成されます。

- ファンクション索引。式をベースとしています。式によって戻される値を評価する問合せを構成できます。その式には、組込みファンクションまたはユーザー定義ファンクションを含めることができます。

- ドメイン索引。アプリケーション固有のindextype索引タイプのインスタンスです。

関連項目:

- 索引については、『Oracle Database概要』を参照してください。

- 索引サイズに関連する制限の詳細は、『Oracle Databaseリファレンス』を参照してください。

- 「ALTER INDEX」および「DROP INDEX」を参照してください。

追加トピック

- 前提条件

- 構文

- セマンティクス

- 例

前提条件

自分のスキーマ内に索引を作成する場合は、次のいずれかの条件が満たされている必要があります。

- 索引を作成する表またはクラスタが自分のスキーマ内に定義されている。

- 索引を作成する表に対するINDEXオブジェクト権限を持っている。

- CREATE ANY INDEXシステム権限を持っている。

他のユーザーのスキーマ内に索引を作成する場合は、CREATE ANY INDEXシステム権限が必要です。また、索引が定義されているスキーマの所有者には、UNLIMITED TABLESPACEシステム権限、あるいはその索引または索引パーティションを格納するための表領域の割当て制限のいずれかが必要です。

自分のスキーマにドメイン索引を作成する場合、従来索引の作成の前提条件の他に、索引タイプに対するEXECUTEオブジェクト権限が必要です。他のユーザーのスキーマにドメイン索引を作成する場合、索引の所有者にも索引タイプおよびその基礎となる実装タイプに対するEXECUTEオブジェクト権限が必要です。ドメイン索引を作成する前に、索引タイプを定義する必要があります。

関連項目:
CREATE INDEXTYPE

ファンクション索引を作成する場合は、従来索引の作成の前提条件の他に、索引がユーザー定義ファンクションに基づいている場合は、ファンクションにDETERMINISTICのマークを付ける必要があります。また、これらのファンクションが他のユーザーに所有されている場合、ファンクション索引で使用されるユーザー定義ファンクションに対する、EXECUTEオブジェクト権限を持っている必要があります。

構文

create_index::=

(cluster_index_clause ::=、table_index_clause ::=、bitmap_join_index_clause ::=を参照)

cluster_index_clause::=

(index_attributes::=を参照)

table_index_clause::=

(index_properties::=を参照)

bitmap_join_index_clause::=

(local_partitioned_index ::=、index_attributes::=を参照)

index_expr::=

index_properties::=

(global_partitioned_index::=、local_partitioned_index ::=、index_attributes::=、domain_index_clause ::=、XMLIndex_clause::=を参照)

index_attributes::=

(physical_attributes_clause ::=、logging_clause::=、index_compression::=、partial_index_clause::=、parallel_clause::=を参照)

physical_attributes_clause::=

(storage_clause::=を参照)

logging_clause::=

index_compression::=

prefix_compression::=

advanced_index_compression::=

partial_index_clause::=

domain_index_clause::=

(parallel_clause ::=を参照)

local_domain_index_clause::=

XMLIndex_clause::=

(XMLIndex_parameters_clauseについては、『Oracle XML DB開発者ガイド』を参照してください。)

local_XMLIndex_clause::=

(XMLIndex_parameters_clauseについては、『Oracle XML DB開発者ガイド』を参照してください。)

global_partitioned_index::=

(index_partitioning_clause::=、individual_hash_partitions::=、hash_partitions_by_quantity::=を参照)

individual_hash_partitions::=

(indexing_clauseを参照。table_index_clause、partitioning_storage_clause::=ではサポートされません)

partitioning_storage_clause::=

(table_compression、inmemory_clauseおよびilm_clauseは、CREATE INDEX、index_compression::=、LOB_partitioning_storage::=でサポートされません)

LOB_partitioning_storage::=

hash_partitions_by_quantity::=

index_partitioning_clause::=

(segment_attributes_clause::=を参照)

local_partitioned_index::=

(on_range_partitioned_table ::=、on_list_partitioned_table::=、on_hash_partitioned_table ::=、on_comp_partitioned_table ::=を参照)

on_range_partitioned_table::=

(segment_attributes_clause::=を参照)

on_list_partitioned_table::=

(segment_attributes_clause::=を参照)

segment_attributes_clause::=

(physical_attributes_clause ::=、logging_clause::=を参照)

on_hash_partitioned_table::=

on_comp_partitioned_table::=

(segment_attributes_clause::=、index_compression::=、index_subpartition_clause::=を参照)

index_subpartition_clause::=

parallel_clause::=

セマンティクス

UNIQUE

UNIQUEを指定すると、索引のベースとなっている列の値が一意である必要があることを指定できます。

一意索引の制限事項: 一意索引には、次の制限事項があります。

- UNIQUEおよびBITMAPは同時に指定できません。

- ドメイン索引にはUNIQUEを指定できません。

関連項目:
一意制約を満たす条件については、「一意制約」を参照してください。

BITMAP

BITMAPを指定すると、indexが各行を分割した索引付けではなく、各個別キーのビットマップで作成されることを指定できます。ビットマップ索引では、キー値にビットマップとして関連付けられたROWIDが格納されます。ビットマップ内の各ビットは、使用可能なROWIDに対応しています。ビットが設定されていれば、それに対応するROWIDを持つ行に、キー値が設定されていることになります。ビットマップの内部表現は、データ・ウェアハウスなど、低レベルの同時実行トランザクションが実行されるアプリケーションに最適です。

注意:
Oracleでは、すべてのキー列がNULLの表の行には索引を付けません(ただし、ビットマップ索引の場合を除きます)。したがって、表のすべての行に索引を作成する場合、索引のキー列にNOT NULL制約を指定するか、またはビットマップ索引を作成する必要があります。

ビットマップ索引の制限事項: ビットマップ索引には、次の制限事項があります。

- グローバル・パーティション索引の作成にはBITMAPを指定できません。

- 索引構成表がビットマップ化した2次索引に対応するマッピング表を持たない場合、索引構成表にビットマップ化した2次索引を作成できません。

- UNIQUEおよびBITMAPは同時に指定できません。

- ドメイン索引にはBITMAPを指定できません。

- ビットマップ索引には最大30列を指定できます。

関連項目:

- ビットマップ索引の使用の詳細は、『Oracle Database概要』および『Oracle Database SQLチューニング・ガイド』を参照してください。

- マッピング表の詳細は、「CREATE TABLE」を参照してください。

- 「ビットマップ索引の例」

schema

索引を作成するスキーマを指定します。schemaを指定しない場合、自分のスキーマ内に索引が作成されます。

index

作成する索引の名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。

関連項目:
「索引の作成例:」および「XMLType表の索引の作成例:」を参照してください。

cluster_index_clause

cluster_index_clauseを使用すると、クラスタ索引を作成するクラスタを指定できます。clusterをschemaで修飾しない場合、そのクラスタは自分のスキーマ内にあるとみなされます。ハッシュ・クラスタにはクラスタ索引を作成できません。

関連項目:
「CREATE CLUSTER」および「クラスタ索引の作成例:」を参照してください。

table_index_clause

索引を定義する表を指定します。tableをschemaで修飾しない場合、その表は自分のスキーマにあるとみなされます。

ネストした表の記憶表に索引を作成することによって、ネストした表の列に索引を作成します。記憶表のNESTED_TABLE_ID疑似列を組み込んだUNIQUE索引を作成することは、ネストした表の値を持つ行がそれぞれ確実に異なるようにする有効な手段です。

関連項目:
「ネストした表の索引の例:」

セッションがバインドされていない場合にのみ、一時表でDDL操作(ALTER TABLE、DROP TABLE、CREATE INDEXなど)を実行できます。セッションを一時表にバインドするには、一時表でINSERT操作を実行します。セッションを一時表からアンバインドするには、TRUNCATE文を発行するか、セッションを終了します。また、トランザクション固有の一時表からアンバインドするには、COMMITまたはROLLBACK文を発行します。

table_index_clauseの制限事項: この句には、次の制限事項があります。

- indexがローカル・パーティション索引の場合は、tableをパーティション化する必要があります。

- tableが索引構成表の場合、この文は2次索引を作成します。この索引には、索引構成表の索引キーおよび論理ROWIDが含まれます。論理ROWIDは、索引キーにも含まれる列を除外します。この2次索引には、REVERSEを指定できません。索引キーおよび論理ROWIDの結合サイズは、ブロック・サイズ未満にする必要があります。

- tableが一時表の場合、indexもtableと同様の有効範囲(セッションまたはトランザクション)を持つ一時的なものとなります。一時表の索引には、次の制限があります。

- index_propertiesで指定できるのは、index_attributesの部分のみです。

- index_attributesでは、physical_attributes_clause、parallel_clause、logging_clauseまたはTABLESPACEを指定できません。

- 一時表には、ドメイン索引またはパーティション索引は作成できません。

- 外部表に索引を作成することはできません。

関連項目:
一時表の詳細は、「CREATE TABLE」および『Oracle Database概要』を参照してください。

t_alias

索引を作成する表に対して相関名(別名)を指定します。

注意:
index_exprがオブジェクト型属性またはオブジェクト型メソッドを参照する場合、この別名が必要になります。「型メソッドのファンクション索引の作成例:」および「置換可能な列の索引の作成例:」を参照してください。

index_expr

index_exprでは、索引のベースとなる列または列式を指定します。

次の条件を満たしている場合には、同じ列のセット、同じ列式のセットまたはその両方に、複数の索引を作成できます。

- 索引の種類が異なる場合、索引に異なるパーティション化を使用する場合、または索引に異なる一意のプロパティがある場合。

- 常にVISIBLEである索引が1つのみである場合。

関連項目:
複数の索引の作成の詳細は、『Oracle Database管理者ガイド』を参照してください。

column 表内の1つ以上の列の名前を指定します。ビットマップ索引には最大30列を指定できます。他の索引には最大32列を指定できます。これらの列は索引キーを定義します。

一意索引がローカル非同一キー索引(「local_partitioned_index」を参照)の場合、索引キーはパーティション・キーを含んでいる必要があります。

関連項目:
同一キー索引および非同一キー索引の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

スカラー・オブジェクト属性列またはネストした表の記憶表のシステム定義のNESTED_TABLE_ID列には索引を作成できます。オブジェクト属性列を指定する場合、列名を表名で修飾する必要があります。ネストした表の列属性を指定する場合は、この属性は、一番外側の表の名前、ネストした表が定義されている列の名前、およびそのネストした表の列属性となるすべての中間属性の名前で修飾する必要があります。

拡張データ型の列に対する索引の作成 columnが拡張データ型列の場合は、索引を作成しようとすると、「最大キー長を超過しました」というエラーが通知されることがあります。索引の最大キー長は、データベース・ブロック・サイズと、ブロック内に格納された追加の索引メタデータによって異なります。たとえば、Oracle標準の8Kのブロック・サイズを使用するデータベースでは、最大キー長は約6400バイトです。

この状況を回避するには、索引付けする値の長さを次のいずれかの方法で短くする必要があります。

- ファンクション索引を作成し、その索引定義に使用される式の一部である拡張データ型の列に格納される値を短くします。

- 仮想列を作成して、その仮想列定義に使用される式の一部である拡張データ型の列に格納される値を短くし、その仮想列で通常の索引を構築します。仮想列の使用時には、統計の収集や制約およびトリガーの使用など、通常の索引用の機能を活用することもできます。

どちらの方法でも、SUBSTRまたはSTANDARD_HASHファンクションを使用して拡張データ型の列の値を短くし、索引を構築できます。これらの方法には、次のメリットとデメリットがあります。

- SUBSTRファンクションを使用すると、索引キーに許容される長さのcolumnのサブストリングまたは接頭辞が返されます。このタイプの索引は、元の列に対する等価性、INリストおよび範囲述語用に使用できます。この場合、述語の一部としてSUBSTR列を指定する必要はありません。詳細は、「SUBSTR」を参照してください。

- STANDARD_HASHファンクションを使用した場合、サブストリングを基にした索引よりも縮小された索引が作成される可能性があり、その結果、索引への不要なアクセスが減少することがあります。このタイプの索引は、元の列に対する等価性およびINリスト述語用に使用できます。この場合、述語の一部としてSUBSTR列を指定する必要はありません。詳細は、「STANDARD_HASH」を参照してください。

次の例は、拡張データ型の列にファンクション索引を作成する方法を示しています。

CREATE INDEX index ON table (SUBSTR(column, 0, n));

nには、columnのそれぞれの値を区別するために十分な接頭辞の長さを指定します。

次の例は、拡張データ型の列の仮想列を作成し、その後この仮想列に索引を作成する方法を示しています。

ALTER TABLE table ADD (new_hash_column AS (STANDARD_HASH(column)));
CREATE INDEX index ON table (new_hash_column);

関連項目:
拡張データ型の詳細は、「拡張データ型」を参照してください。

索引列の制限事項 索引列には、次の制限事項があります。

- Oracle Databaseでサポートされている、SCOPE句で定義したREF型の列または属性の索引を除き、ユーザー定義型、LONG、LONG RAW、LOBまたはREF型の列または属性に索引を作成できません。

- 暗号化された列には、標準の(Bツリー)索引しか作成できません。これらの索引は、等価検索にのみ使用できます。

column_expression tableの列、定数、SQLファンクションおよびユーザー定義ファンクションから作成された式を指定します。column_expressionを指定した場合、ファンクション索引が作成されます。

関連項目:
「列式」、「ファンクション索引の注意事項:」、「ファンクション索引の制限事項:」および「ファンクション索引の例」を参照してください。

ファンクションの名前解決は、索引作成者のスキーマに基づきます。column_expressionで使用されるユーザー定義ファンクションは、CREATE INDEX操作中に完全に名前解決されます。

ファンクション索引の作成後、DBMS_STATSパッケージを使用して、索引と実表の両方に関する統計情報を収集します。これらの統計によって、いつ索引を使用するかをOracle Databaseで正確に決定できます。

ファンクションの一意索引は、列または列の組合せに対して条件付きの一意制約を定義する場合に便利なことがあります。例については、「ファンクション索引の使用による条件付き一意性の定義例:」を参照してください。

関連項目:
DBMS_STATSパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

ファンクション索引の注意事項: ファンクション索引には、次の注意事項があります。

- ファンクション索引を使用する表を後で問い合せる場合、問合せでNULLが除外されないかぎり索引は使用されません。ただし、WHERE句に指定した列の順序が、ファンクション索引を定義したcolumn_expressionでの順序と異なる場合でも、問合せにファンクション索引が使用されます。

関連項目:
「ファンクション索引の例」

- 索引のベースになるファンクションが無効であるか、または削除された場合は、索引にDISABLEDのマークが付けられます。オプティマイザが索引の使用を選択した場合、DISABLED索引の問合せは失敗します。索引にUNUSABLEのマークも付けて、パラメータSKIP_UNUSABLE_INDEXESをtrueに設定しないかぎり、DISABLED索引のDML操作は失敗します。このパラメータの詳細は、「ALTER SESSION」を参照してください。

- ファンクション、パッケージまたは型のパブリック・シノニムがcolumn_expressionで使用され、後で同じ名前の実際のオブジェクトが表の所有者のスキーマに作成された場合、ファンクション索引は使用禁止になります。その後、ALTER INDEX ... ENABLEまたはALTER INDEX ... REBUILDを使用してファンクション索引を使用可能にした場合、column_expressionで使用されているファンクション、パッケージまたは型は、引き続き、パブリック・シノニムが最初に指していたファンクション、パッケージまたは型に変換されます。新しいファンクション、パッケージまたは型への変換は行われません。

- ファンクション索引の定義によって文字データに内部変換が生成される場合に、NLSパラメータの設定を変更するときは注意が必要です。ファンクション索引は、NLSパラメータの現行のデータベース設定を使用します。セッション・レベルでパラメータを再設定した場合、ファンクション索引を使用して問合せを行うと、無効な結果が戻る場合があります。2つの照合パラメータ(NLS_SORTおよびNLS_COMP)は例外です。これらがセッション・レベルで再設定された場合でも、Oracle Databaseは正常に変換を処理します。

- 変換が明示的に要求された場合でも、Oracle Databaseはすべての場合にデータを変換できるわけではありません。たとえば、TO_NUMBERファンクションを使用して文字列'105 lbs'をVARCHAR2からNUMBERに変換しようとすると、エラーが発生して失敗します。したがって、column_expressionにTO_NUMBERやTO_DATEなどのデータ変換ファンクションが含まれており、後続のINSERTまたはUPDATE文に変換ファンクションで変換できないデータが含まれている場合、INSERTまたはUPDATE文は索引が原因で失敗します。

- column_expressionに日時書式モデルが含まれている場合、列を定義するファンクション索引式では、指定の要素とは異なる書式要素が使用されることがあります。たとえば、次のように、yyyy日時書式要素を使用してファンクション索引を定義します。

CREATE INDEX cust_eff_ix ON customers
(NVL(cust_eff_to, TO_DATE('9000-01-01 00:00:00', 'yyyy-mm-dd hh24:mi:ss')));

ALL_IND_EXPRESSIONSビューを問い合せると、列を定義するファンクション索引式でsyyyy日時書式要素が使用されていることがわかります。

SELECT column_expression
FROM all_ind_expressions
WHERE index_name='CUST_EFF_IX';

COLUMN_EXPRESSION
------------------------------------------------------------------------------
NVL("CUST_EFF_TO",TO_DATE(' 9000-01-01 00:00:00', 'syyyy-mm-dd hh24:mi:ss'))

ファンクション索引の制限事項: ファンクション索引には、次の制限事項があります。

- column_expressionで参照されるファンクションが戻す値には、Bツリー索引の索引列と同じ制限があります。「索引列の制限事項」を参照してください。

- column_expressionで参照されるユーザー定義ファンクションは、DETERMINISTICとして宣言されている必要があります。

- グローバル・パーティション・ファンクション索引では、column_expressionがパーティション・キーであってはいけません。

- column_expressionには、「列式」で説明されているすべての形式の式を指定できます。

- パラメータがない場合も、すべてのファンクションをカッコで指定する必要があります。カッコで指定していない場合は、列名として解析されます。

- column_expressionで指定するファンクションは、リピータブル値を戻す必要があります。たとえば、SYSDATEやUSERファンクションまたはROWNUM疑似列は指定できません。

関連項目:
「CREATE FUNCTION」および『Oracle Database PL/SQL言語リファレンス』を参照してください。

ASC | DESC

ASCまたはDESCを使用すると、索引を昇順で作成するか降順で作成するかを指定できます。文字データの索引は、データベース・キャラクタ・セットの文字値の昇順または降順で作成されます。

Oracle Databaseは、降順索引をファンクション索引として扱います。他のファンクション索引のように、最初に索引および索引が定義されている表を分析するまで、降順索引は使用しません。「column_expression」句を参照してください。

昇順の一意索引は、複数のNULL値を含むことができます。ただし、降順の一意索引の場合は、複数のNULL値は重複した値として扱われるため、許可されていません。

昇順索引および降順索引の制限事項: これらの句は、ドメイン索引に対して指定できません。逆索引にはDESCを指定できません。indexをビットマップ化したり、COMPATIBLE初期化パラメータに8.1.0未満の値を設定すると、DESCは無視されます。

index_attributes

オプションの索引属性を指定します。

physical_attributes_clause physical_attributes_clauseを使用すると、索引の物理特性および記憶特性の値を設定できます。

この句を指定しない場合、PCTFREEが10、INITRANSが2に設定されます。

索引の物理属性の制限事項: PCTUSEDパラメータは、索引に対して指定できません。

関連項目:
これらの句の詳細は、「physical_attributes_clause」および「storage_clause」を参照してください。

TABLESPACE tablespaceには、索引、索引パーティションまたは索引サブパーティションを格納する表領域の名前を指定します。この句を指定しない場合、その索引を定義しているスキーマの所有者のデフォルトの表領域内に索引が作成されます。

ローカル索引の場合、tablespaceのかわりにキーワードDEFAULTを指定できます。ローカル索引に追加される新規パーティションまたはサブパーティションは、基礎となる表の対応するパーティションまたはサブパーティションと同じ表領域内に作成されます。

index_compression

index_compression句を使用すると、索引の索引圧縮を有効化または無効化できます。prefix_compressionのCOMPRESS句を指定して索引の接頭辞圧縮を有効化するか、advanced_index_compressionのCOMPRESS ADVANCED LOW句を指定して索引の拡張索引圧縮を有効化するか、prefix_compressionまたはadvanced_index_compressionのNOCOMPRESS句を指定して索引の圧縮を無効化します。デフォルトはNOCOMPRESSです。

Oracle Databaseでは、索引(一意でない索引または2列以上の一意索引)が圧縮されます。パーティション索引の圧縮を使用する場合は、索引レベルで圧縮を有効にして索引を作成する必要があります。そのようなパーティション索引の個々のパーティションの圧縮設定は、後で有効および無効にすることができます。個々のパーティションを再作成するときに圧縮を有効および無効にできます。索引の再作成時にのみ、既存の非パーティション索引を変更して圧縮を有効または無効にできます。

prefix_compression COMPRESSを指定して、キー列値の繰返しを排除するキー圧縮ともいうprefix compressionを有効化します。integerを使用して、接頭辞の長さ(圧縮する接頭辞列数)を指定します。

- 一意の索引の場合、接頭辞の長さの有効範囲は、1からキー列の数から1を引いた数までです。デフォルトの接頭辞の長さは、(キー列の数-1)です。

- 一意でない索引の場合、接頭辞の長さの有効範囲は、1からキー列の数までです。接頭辞の長さのデフォルト値は、キー列の数です。

advanced_index_compression COMPRESS ADVANCED LOWを指定して、advanced index compressionを有効化します。拡張索引圧縮では、索引の効率的なアクセスを維持しながら圧縮率を大幅に向上します。このため、拡張索引圧縮は、接頭辞圧縮の適切な候補ではない索引を含むすべてのサポートされている索引で正常に動作します。

索引圧縮の制限事項 次の制限事項は、索引圧縮に適用されます。

- ビットマップ索引または単一列の一意の索引に接頭辞圧縮または拡張索引圧縮は指定できません。

- 索引構成表に拡張索引圧縮を指定できません。

関連項目:

- 接頭辞圧縮および拡張索引圧縮の詳細は、『Oracle Database管理者ガイド』を参照してください。

- 「索引の圧縮例:」

partial_index_clause この句は、パーティション表に対する索引を作成するときにのみ指定できます。INDEXING FULLを指定すると、全索引を作成できます。INDEXING PARTIALを指定すると、部分索引を作成できます。デフォルトは、INDEXING FULLです。

全索引には、索引付けのプロパティとは関係なく、基になる表のすべてのパーティションが含まれます。部分索引には、基になる表で索引付けのプロパティがONのパーティションのみが含まれます。

部分索引がローカル・パーティション索引の場合、索引付けプロパティがONの表パーティションに対応する索引パーティションには、USABLEのマークが付けられます。索引付けプロパティがOFFの表パーティションに対応する索引パーティションには、UNUSABLEのマークが付きます。

基になる表がコンポジット・パーティション表の場合は、索引パーティションと表パーティションについての前述の条件が、索引サブパーティションと表サブパーティションに適用されます。

部分索引の制限事項 部分索引には、次の制限事項が適用されます。

- 部分索引の基になる表は、非パーティション表にすることはできません。

- 一意索引は、部分索引することができません。これは、CREATE UNIQUE INDEX文で作成された索引と、1つ以上の列に一意制約を指定して暗黙的に作成された索引に適用されます。

関連項目:
索引付けプロパティの詳細は、CREATE TABLEの「indexing_clause」を参照してください。

SORT | NOSORT  索引の作成時に、Oracle Databaseはデフォルトで索引を昇順ソートします。NOSORTを指定すると、索引の作成時に、データベース内ですでに昇順で格納されている行のソートを行わないようにできます。索引列の行または列が昇順に格納されていない場合、データベースはエラーを戻します。ソート時間および領域を削減するため、列を表へ初期ロードした直後にこの句を使用します。これらのキーワードのいずれも指定しない場合、デフォルトでSORTが使用されます。

NOSORTの制限事項: このパラメータには、次の制限事項があります。

- この句は、REVERSEと同時には指定できません。

- この句を使用して、クラスタ索引、パーティション索引またはビットマップ索引を作成することはできません。

- 索引構成表の2次索引には、この句を指定できません。

REVERSE REVERSEを指定すると、ROWID以外の索引ブロックのバイトを逆順に格納できます。

逆索引の制限事項: 逆索引には、次の制限事項があります。

- この句は、NOSORTと同時には指定できません。

- ビットマップ索引または索引構成表の索引は逆順にできません。

VISIBLE | INVISIBLE  この句を使用すると、オプティマイザで索引を参照可能にするかどうかを指定できます。参照不可の索引はDML操作によってメンテナンスされますが、パラメータOPTIMIZER_USE_INVISIBLE_INDEXESをセッションまたはシステム・レベルで明示的にTRUEに設定しないと、問合せ時にオプティマイザによって使用されません。

既存の索引がオプティマイザによって参照可能か参照不可かを確認するには、USER_、DBA_、ALL_INDEXESデータ・ディクショナリ・ビューのVISIBILITY列を問い合せます。

関連項目:
この機能の詳細は、『Oracle Database管理者ガイド』を参照してください。

logging_clause 索引作成を、REDOログ・ファイル内に記録する(LOGGING)か記録しない(NOLOGGING)かを指定します。この設定によって、索引に対する後続のダイレクト・ローダー(SQL*Loader)およびダイレクト・パスINSERT操作を記録するか記録しないかも決定されます。デフォルトはLOGGINGです。

indexが非パーティション索引の場合、この句は索引のロギング属性を指定します。

indexがパーティション索引の場合、この句は次の値を決定します。

- CREATE文で指定されたすべてのパーティションのデフォルト値(PARTITION記述句でlogging_clauseを指定している場合を除く)

- 索引パーティションに関連付けられたセグメントに対するデフォルト値

- 後続のALTER TABLE ... ADD PARTITION操作中に暗黙的に追加されたローカル索引パーティションまたはサブパーティションに対するデフォルト値

索引のロギング属性は、その実表の属性に依存しません。

この句を指定しない場合、ロギング属性は表が存在する表領域の属性になります。

関連項目:

- この句の詳細は、「logging_clause」を参照してください。

- ロギングおよびパラレルDMLの詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

- 「NOLOGGINGモードでの索引の作成例:」

ONLINE ONLINEを指定すると、索引作成中の表でのDML操作を許可できます。

オンライン索引の作成の制限事項: オンライン索引の作成には、次の制限事項があります。

- オンライン索引の作成中は、パラレルDMLはサポートされません。ONLINEを指定し、パラレルDML文を発行すると、Oracle Databaseはエラーを戻します。

- ビットマップ索引またはクラスタ索引には、ONLINEを指定できません。

- UROWID列の従来索引には、ONLINEを指定できません。

- 索引構成表の一意でない2次索引の場合、索引構成表内の索引キー列の数と論理ROWIDの主キー列の数の合計は、32以下にする必要があります。論理ROWIDは、索引キーに含まれる列を除外します。

関連項目:
オンライン索引の作成および再作成については、『Oracle Database概要』を参照してください。

parallel_clause

parallel_clauseを指定すると、索引の作成をパラレル化できます。

この句の詳細は、「CREATE TABLE」の「parallel_clause」を参照してください。

Index Partitioning句

global_partitioned_index句およびlocal_partitioned_index句を使用すると、indexをパーティション化できます。

ブロック・サイズが異なる表領域のパーティション化されたデータベース・エンティティの記憶域には、制限事項があります。これらの制限事項については、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

関連項目:
「パーティション索引の例」

global_partitioned_index

global_partitioned_indexを使用すると、索引のパーティション化がユーザー定義であり、基礎となる表と同一レベルでパーティション化されないことを指定できます。デフォルトでは、非パーティション索引はグローバル索引です。

グローバル索引には、レンジ・パーティション化またはハッシュ・パーティション化を実行できます。どちらの場合でも、パーティション・キー列に最大32列を指定できます。列リストをパーティション化する場合、索引の列リストの左の接頭辞を指定する必要があります。索引が列a、bおよびcに定義されている場合は、列に(a, b, c)、(a, b)または(a, c)は指定できますが、(b, c)、(c)または(b, a)は指定できません。パーティション名を省略すると、SYS_Pnの形式で名前が生成されます。

GLOBAL PARTITION BY RANGE この句を使用すると、レンジ・パーティション・グローバル索引を作成できます。列リストに指定した表の列の値の範囲に基づいて、グローバル索引がパーティション化されます。

関連項目:
「レンジ・パーティション・グローバル索引の作成例:」

GLOBAL PARTITION BY HASH この句を使用すると、ハッシュ・パーティション・グローバル索引を作成できます。パーティション・キー列の値にハッシュ・ファンクションを使用して、行がパーティションに割り当てられます。

関連項目:
ハッシュ・パーティションの2つの方法については、「CREATE TABLE」句の「hash_partitions」および「ハッシュ・パーティション・グローバル索引の作成例:」を参照してください。

グローバル・パーティション索引の制限事項: グローバル・パーティション索引には、次の制限事項があります。

- パーティション・キー列リストには、ROWID類似列またはROWID型の列は指定できません。

- ハッシュ・パーティションに指定できるプロパティは、表領域の記憶域のみです。そのため、individual_hash_partitionsのpartitioning_storage_clauseにLOBまたはVARRAYの記憶域句を指定できません。

- hash_partitions_by_quantityのOVERFLOW句は、索引構成表のパーティションに対してのみ指定できます。

- partitioning_storage_clauseでは、table_compressionまたはinmemory_clauseは指定できませんが、index_compressionは指定できます。

注意:
異なるキャラクタ・セットを使用してデータベースを使用しているか、使用する予定がある場合は、キャラクタ列を分割する際に注意してください。文字のソート順序は、すべてのキャラクタ・セットで同一ではありません。

関連項目:
キャラクタ・セット・サポートの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

index_partitioning_clause この句を使用すると、個々の索引パーティションを記述できます。この句が繰り返される数によってパーティションの数が決まります。partitionを指定しない場合、名前はSYS_Pnの形式で生成されます。

VALUES LESS THAN(value_list)には、グローバル索引の現在のパーティションの境界は含まない上限を指定します。値のリストは、global_partitioned_index句の列リストに対応するリテラル値を含む、カンマで区切られた順序リストです。最後のパーティションの値としては、必ずMAXVALUEを指定します。

注意:
索引がDATE列でパーティション化されている場合、および日付書式で年の最初の2桁の数字が指定されていない場合、年の4文字書式マスクでTO_DATEファンクションを使用する必要があります。日付書式は、NLS_TERRITORYによって暗黙的に決定され、NLS_DATE_FORMATによって明示的に決定されます。これらの初期化パラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

関連項目:
「レンジ・パーティション化の例:」

local_partitioned_index

local_partitioned_index句を使用すると、tableと同じパーティション数および同じパーティション境界を使用し、同じ列で索引をパーティション化できます。コンポジット・パーティション表では、この句を使用すると、tableと同じパーティション数および同じパーティション境界を使用し、同じ列で索引をパーティション化できます。基礎となる表が再パーティション化された場合、ローカル索引のパーティションは自動的に保持されます。

キーワードLOCALのみを指定して、副次句を指定しない場合、Oracle Databaseは対応する表パーティションとして、同じ表領域に各索引パーティションを作成し、対応する表パーティションと同じ名前を割り当てます。表がコンポジット・パーティション表である場合、Oracle Databaseは対応する表サブパーティションとして、同じ表領域に各索引パーティションを作成して、対応する表サブパーティションと同じ名前を割り当てます。

on_range_partitioned_table この句を使用すると、レンジ・パーティション表の索引パーティションの名前および属性を指定できます。この句を指定する場合、PARTITION句は、表パーティションと同一の数と順序である必要があります。partitionを指定しない場合、対応する表のパーティションと一貫した名前が生成されます。その名前が既存の索引パーティション名と競合する場合は、SYS_Pnの形式が使用されます。

索引に接頭辞圧縮が指定されていない場合、索引パーティションに接頭辞圧縮を指定することはできません。

USABLE句とUNUSABLE句の詳細は、「USABLE | UNUSABLE」を参照してください。

on_list_partitioned_table on_list_partitioned_table句は、「on_range_partitioned_table」と同一です。

on_hash_partitioned_table この句を使用すると、ハッシュ・パーティション表の索引パーティションの名前および表領域の記憶域を指定できます。

PARTITION句を指定する場合、これらの句の数は表パーティションの数と同一である必要があります。partitionを指定しない場合、対応する表のパーティションと一貫した名前が生成されます。その名前が既存の索引パーティション名と競合する場合は、SYS_Pnの形式が使用されます。オプションで、1つ以上の個々のパーティションに表領域の記憶域を指定できます。この句またはSTORE IN句に表領域の記憶域を指定しない場合、各索引パーティションが、対応する表パーティションと同じ表領域に格納されます。

STORE IN句を使用して、すべての索引ハッシュ・パーティションを分散させる1つ以上の表領域を指定できます。表領域の数は、索引パーティションの数と等しくなる必要はありません。索引パーティションの数が表領域の数より多い場合は、表領域名が繰り返し使用されます。

USABLE句とUNUSABLE句の詳細は、「USABLE | UNUSABLE」を参照してください。

on_comp_partitioned_table  この句を使用すると、コンポジット・パーティション表の索引パーティションの名前および属性を指定できます。

STORE IN句は、レンジ-ハッシュまたはリスト-ハッシュ・コンポジット・パーティション表に対してのみ有効です。すべてのパーティションのすべての索引ハッシュ・サブパーティションを分散させる1つ以上のデフォルト表領域を指定できます。index_subpartition_clauseの第2 STORE IN句で個々のパーティションのサブパーティションに対して異なるデフォルト表領域の記憶域を指定すると、この記憶域を上書きできます。

レンジ-レンジ、レンジ-リストおよびリスト-リスト・コンポジット・パーティション表に対しては、PARTITION句に指定したレンジまたはリスト・サブパーティションのデフォルトの属性を指定できます。index_subpartition_clauseのSUBPARTITION句の個々のパーティションのレンジまたはリスト・サブパーティションに異なる属性を指定すると、この記憶域を上書きできます。

索引に接頭辞圧縮が指定されていない場合、索引パーティションに接頭辞圧縮を指定することはできません。

USABLE句とUNUSABLE句の詳細は、「USABLE | UNUSABLE」を参照してください。

index_subpartition_clause この句を使用すると、コンポジット・パーティション表の索引サブパーティションに名前および表領域の記憶域を指定できます。

STORE IN句は、レンジ-ハッシュおよびリスト-ハッシュ・コンポジット・パーティション表のハッシュ・サブパーティションに対してのみ有効です。すべての索引ハッシュ・サブパーティションを分散させる1つ以上の表領域を指定できます。SUBPARTITION句は、すべてのサブパーティション・タイプに対して有効です。

SUBPARTITION句を指定する場合、これらの句の数は表サブパーティションの数と同一である必要があります。subpartitionを指定しない場合、対応する表のサブパーティションと一貫した名前が生成されます。その名前が既存の索引サブパーティション名と競合する場合は、SYS_SUBPnの形式が使用されます。

表領域の数は、索引サブパーティションの数と等しくなる必要はありません。索引サブパーティションの数が表領域の数より多い場合は、表領域名が繰り返し使用されます。

on_comp_partitioned_table句またはindex_subpartition_clauseにサブパーティションの表領域の記憶域を指定しない場合、indexに指定された表領域が使用されます。indexに表領域の記憶域を指定しない場合、サブパーティションが、対応する表サブパーティションと同じ表領域に格納されます。

USABLE句とUNUSABLE句の詳細は、CREATE INDEX ... USABLE | UNUSABLEを参照してください。

domain_index_clause

domain_index_clauseを使用して、indexが、アプリケーション固有のindextype索引タイプのインスタンスであるドメイン索引であることを示します。

ドメイン索引を作成する前に、複数の操作を行う必要があります。まず、索引タイプの実装タイプを作成します。また、ファンクション実装を作成し、そのファンクションを使用する演算子も作成します。次に、演算子と実装タイプを関連付ける索引タイプを作成します。最後にこの句を使用してドメイン索引を作成します。付録F「詳細な例」に、これらのすべての操作を含んだ単純なドメイン索引の作成例を記載しています。

index_expr index_expr(table_index_clause内)に、索引が定義されている表の列またはオブジェクトの属性を指定します。基礎となる索引タイプが異なり、その索引タイプがユーザー定義操作の分割セットをサポートする場合のみ、1つの列に複数のドメイン索引を定義できます。

ドメイン索引の制限事項: ドメイン索引には、次の制限事項があります。

- index_expr(table_index_clause内)には1つの列のみ指定でき、データ型がREF、VARRAY、ネストした表、LONGまたはLONG RAWの列は指定できません。

- ビットマップ索引または一意ドメイン索引は作成できません。

- 一時表には、ドメイン索引は作成できません。

- ローカル・ドメイン索引は、レンジ・パーティション表、リスト・パーティション表、ハッシュ・パーティション表または時間隔パーティション表にのみ作成できます。

indextype indextypeでは、索引タイプの名前を指定します。名前は、作成済の有効なスキーマ・オブジェクトである必要があります。

Oracle Textをインストールしている場合、様々な組込み索引タイプを使用して、Oracle Textドメイン索引を作成できます。Oracle TextおよびOracle Textが使用する索引の詳細は、『Oracle Textリファレンス』を参照してください。

関連項目:
CREATE INDEXTYPE

local_domain_index_clause この句を使用すると、パーティション表のローカル索引を索引にするように指定できます。

- PARTITIONS句を使用すると、索引パーティションの名前を指定できます。指定するパーティション数は、実表内のパーティション数と一致する必要があります。この句を省略すると、SYS_Pnという形式のシステム生成の名前でパーティションが作成されます。

- PARAMETERS句を使用すると、個々のパーティション固有のパラメータ文字列を指定できます。この句を省略した場合、索引に関連付けられたパラメータ文字列はパーティションにも関連付けられます。

parallel_clause parallel_clauseを使用すると、ドメイン索引の作成をパラレル化できます。非パーティション・ドメイン索引の場合、Oracle Databaseは明示的またはデフォルトの並列度をODCIIndexCreateカートリッジ・ルーチンに渡し、ODCIIndexCreateカートリッジ・ルーチンが索引の並列性を確立します。ローカル・ドメイン索引の場合、この句によって索引パーティションはパラレルに作成されます。

関連項目:
Oracle Data Cartridge Interface(ODCI)ルーチンの詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。

PARAMETERS PARAMETERS句で、未解析のまま適切なODCI索引タイプ・ルーチンに渡されたパラメータ文字列を指定します。パラメータ文字列の最大長は1,000文字です。

構文の最上位でこの句を指定した場合、パラメータは索引パーティションのデフォルトのパラメータになります。local_domain_index_clauseの一部としてこの句を指定すると、個々のパーティションのパラメータでデフォルトのパラメータを上書きできます。

ドメイン索引が作成されると、適切なODCIルーチンがコールされます。ルーチンが正常に戻らない場合、ドメイン索引はFAILEDのマークが付けられます。失敗したドメイン索引でサポートされる操作は、DROP INDEXおよびREBUILD INDEX(非ローカル索引用)のみです。

関連項目:
Oracle Data Cartridge Interface(ODCI)ルーチンの詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。

XMLIndex_clause

XMLIndex_clauseを使用すると、一般にはXMLデータが含まれる列に、XMLIndex索引を定義できます。XMLIndex索引は、特にXMLデータのドメイン用に設計されたドメイン索引の一種です。

XMLIndex_parameters_clause この句を使用すると、XMLIndexのコンポーネントに対応するパス表と2次索引の情報を指定できます。また、この句を使用すると、索引の構造化コンポーネントの詳細を指定できます。パラメータ文字列の最大長は1,000文字です。

構文の最上位でこの句を指定した場合、パラメータは索引のパラメータおよび索引パーティションのデフォルトのパラメータになります。local_xmlindex_clause句の一部としてこの句を指定すると、個々のパーティションのパラメータでデフォルトのパラメータを上書きできます。

関連項目:
XMLIndex_parameters_clauseの構文およびセマンティクスの詳細、およびXMLIndexの使用の詳細は、『Oracle XML DB開発者ガイド』を参照してください。

bitmap_join_index_clause

bitmap_join_index_clauseを使用すると、ビットマップ結合索引を定義できます。ビットマップ結合索引は、単一の表に定義します。ディメンション表の列で構成される索引キーには、そのキーに対応するファクト表のROWIDが格納されます。データ・ウェアハウス環境では、一般的に、索引を定義する表をファクト表といい、ファクト表と結合した表をディメンション表といいます。ただし、結合索引の作成にはスター・スキーマは必須ではありません。

ON ON句には、まずファクト表を指定し、次に索引を定義するディメンション表の列をカッコ内に指定します。

FROM FROM句には、結合した表を指定します。

WHERE WHERE句には、結合条件を指定します。

基礎となるファクト表がパーティション化されている場合、local_partitioned_index句(「local_partitioned_index」を参照)のいずれかを指定する必要があります。

ビットマップ結合索引の制限事項: 一般的なビットマップ索引の制限事項(「BITMAP」を参照)に加え、ビットマップ結合索引には次の制限事項があります。

- 一時表にはビットマップ結合索引は作成できません。

- FROM句で表を2回指定できません。

- ファンクション結合索引は作成できません。

- ディメンション表の列は、主キー列であるか、または一意制約を含む必要があります。

- ディメンション表が複合主キーを含む場合、主キーの各列は結合の一部である必要があります。

- ファクト表がパーティション化されていない場合は、local_partitioned_index句を指定できません。

関連項目:
ファクト表とディメンション表、およびデータ・ウェアハウス環境でのビットマップ索引の使用については、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

USABLE | UNUSABLE

USABLEキーワードとUNUSABLEキーワードは、次の項目に指定できます。

- CREATE INDEX文内の索引

- on_range_partitioned_table句、on_list_partitioned_table句、on_hash_partitioned_table句、およびon_comp_partitioned_table句内の索引パーティション

- index_subpartition_clause内の索引サブパーティション

非パーティション索引の場合、UNUSABLEを指定すると、使用禁止状態で索引を作成できます。使用禁止の索引を使用可能にする場合、再構築するか、または削除して再作成する必要があります。USABLEを指定すると、使用可能状態で索引を作成できます。USABLEは、デフォルトです。

パーティション索引の場合は、次のようにUSABLEまたはUNUSABLEを指定します。

- この索引にUNUSABLEを指定すると、すべての索引パーティションにUNUSABLEのマークが付きます。

- この索引にUSABLEを指定すると、すべての索引パーティションにUSABLEのマークが付きます。

- この索引にUSABLEまたはUNUSABLEを指定していないと、すべての索引パーティションにUSABLEのマークが付きます。ただし、ローカルの部分索引を除きます。LOCAL句とINDEXING PARTIAL句を指定するときに、USABLEまたはUNUSABLEを省略すると、各索引パーティションには、それに対応する表パーティションの索引付けプロパティがONの場合にUSABLEのマークが付けられ、対応する表パーティションの索引付けプロパティがOFFの場合にUNUSABLEのマークが付けられます。

前述の条件は、特定の索引パーティションにUSABLEまたはUNUSABLEを指定することで上書きできます。

基になる表がコンポジット・パーティション表の場合は、索引パーティションと表パーティションについての前述の条件が、索引サブパーティションと表サブパーティションに適用されます。

パーティション索引の作成後には、特定の索引パーティションまたはサブパーティションをUSABLEにするように再構築できます。これは、一部の索引パーティションまたはサブパーティションのみで索引を維持する場合に有効です。たとえば、新しいパーティションでは索引アクセスを有効にするものの、古いパーティションでは有効にしない場合などに有効です。

索引または索引の一部のパーティションまたはサブパーティションにUNUSABLEのマークが付けられている場合は、その使用禁止のオブジェクトにはセグメントは割り当てられません。使用禁止の索引または索引パーティションは、データベース内で領域を使用しません。

索引、または索引の一部のパーティションやサブパーティションにUNUSABLEのマークが付けられている場合は、2つの条件を満たすときにのみ、索引はオプティマイザによってアクセス・パスとみなされます。1つは、オプティマイザがアクセス対象のパーティションをコンパイル時に認識していること、もう1つは、アクセス対象のすべてのパーティションにUSABLEのマークが付けられていることです。そのため、問合せにバインド変数を含めることはできません。

USABLE | UNUSABLEの制限事項: 索引にUSABLEまたはUNUSABLEマークを付けるときには、次の制限事項が適用されます。

- この句は、一時表の索引に対して指定できません。

- 次の状況では、使用禁止の索引または索引パーティションにもセグメントが割り当てられます。

- 索引(または索引パーティション)がSYS、SYSTEM、PUBLIC、OUTLNまたはXDBによって所有されている場合

- 索引(または索引パーティション)がディクショナリ管理表領域に格納されている場合

- パーティションのメンテナンス操作が行われているため、パーティション表のグローバル・パーティション索引または非パーティション索引が使用禁止になっている場合

例

一般的な索引の例

索引の作成例: 次の文は、サンプル表oe.ordersのcustomer_id列にサンプル索引ord_customer_ixを作成します。

CREATE INDEX ord_customer_ix
ON orders (customer_id);

索引の圧縮例: 次の文は、COMPRESS句を使用して索引ord_customer_ix_demoを作成します。

CREATE INDEX ord_customer_ix_demo
ON orders (customer_id, sales_rep_id)
COMPRESS 1;

索引は、customer_id列値の繰返し項目を圧縮します。

NOLOGGINGモードでの索引の作成例: サンプル表ordersが高速パラレル・ロードで作成された場合(すべての行がソート済である場合)、次の文は、迅速に索引を作成します。

/* Unless you first sort the table oe.orders, this example fails
because you cannot specify NOSORT unless the base table is
already sorted.
*/
CREATE INDEX ord_customer_ix_demo
ON orders (order_mode)
NOSORT
NOLOGGING;

クラスタ索引の作成例: 次の文は、personnelクラスタ(「クラスタの作成例:」で作成)に対して索引を作成します。

CREATE INDEX idx_personnel ON CLUSTER personnel;

クラスタ・キーのすべての列にクラスタ索引が自動的に作成されるため、索引列は指定しません。クラスタ索引の場合は、すべての行に索引が付きます。

XMLType表の索引の作成例: 次の例は、xwarehouses表(「XMLType表の例:」で作成)の領域要素に索引を作成します。

CREATE INDEX area_index ON xwarehouses e
(EXTRACTVALUE(VALUE(e),'/Warehouse/Area'));

この索引によって、たとえば、次の文にあるような倉庫の面積(平方フィート)に基づいた表から選択する問合せのパフォーマンスが大幅に向上します。

SELECT e.getClobVal() AS warehouse
FROM xwarehouses e
WHERE EXISTSNODE(VALUE(e),'/Warehouse[Area>50000]') = 1;

関連項目:
「EXISTSNODE」および「VALUE」を参照してください。

ファンクション索引の例

次の例では、ファンクション索引を作成および使用する方法を示します。

ファンクション索引の作成例: 次の文は、last_name列の大文字評価に基づくemployees表にファンクション索引を作成します。

CREATE INDEX upper_ix ON employees (UPPER(last_name));

ファンクション索引の作成に必要な権限およびパラメータ設定の詳細は、「前提条件」を参照してください。

全表スキャンを実行するのではなく、索引が使用される可能性を高めるには、ファンクションが戻す値を後続の問合せでNULL以外にします。たとえば、次の文では、オプティマイザの動作を阻止する条件が他に存在しないかぎり、索引が使用されます。

SELECT first_name, last_name
FROM employees WHERE UPPER(last_name) IS NOT NULL
ORDER BY UPPER(last_name);

WHERE句を指定しないと、全表スキャンが実行される場合があります。

索引の作成および後続の問合せを示す次の文では、問合せで列の順序が逆であっても、Oracle Databaseはincome_ixを使用します。

CREATE INDEX income_ix
ON employees(salary + (salary*commission_pct));

SELECT first_name||' '||last_name "Name"
FROM employees
WHERE (salary*commission_pct) + salary > 15000
ORDER BY employee_id;

LOB列のファンクション索引の作成例: 次の文は、text_lengthファンクションを使用し、サンプル・スキーマpmのLOB列にファンクション索引を作成します。このファンクションを作成する例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。例では、CLOB列が1000字未満のサンプル表print_mediaから行を検索します。

CREATE INDEX src_idx ON print_media(text_length(ad_sourcetext));

SELECT product_id FROM print_media
WHERE text_length(ad_sourcetext) < 1000
ORDER BY product_id;

PRODUCT_ID
----------
2056
2268
3060
3106

型メソッドのファンクション索引の作成例: この例には、2つの数値属性(lengthおよびwidth)を含むオブジェクト型rectangleが必要です。area()メソッドは、四角形の面積を計算します。

CREATE TYPE rectangle AS OBJECT
( length   NUMBER,
width    NUMBER,
MEMBER FUNCTION area RETURN NUMBER DETERMINISTIC
);

CREATE OR REPLACE TYPE BODY rectangle AS
MEMBER FUNCTION area RETURN NUMBER IS
BEGIN
RETURN (length*width);
END;
END;

rectangle型の表rect_tabを作成する場合、次のようにarea()メソッドにファンクション索引を作成できます。

CREATE TABLE rect_tab OF rectangle;
CREATE INDEX area_idx ON rect_tab x (x.area());

この索引を効率的に使用して、次の形式の問合せを評価できます。

SELECT * FROM rect_tab x WHERE x.area() > 100;

ファンクション索引の使用による条件付き一意性の定義例: 次の文は、oe.orders表に一意なファンクション索引を作成して、プロモーションID 2(大規模なセール)を顧客が2回以上利用できないようにします。

CREATE UNIQUE INDEX promo_ix ON orders
(CASE WHEN promotion_id =2 THEN customer_id ELSE NULL END,
CASE WHEN promotion_id = 2 THEN promotion_id ELSE NULL END);

INSERT INTO orders (order_id, order_date, customer_id, order_total, promotion_id)
VALUES (2459, systimestamp, 106, 251, 2);
1 row created.

INSERT INTO orders (order_id, order_date, customer_id, order_total, promotion_id)
VALUES (2460, systimestamp+1, 106, 110, 2);
insert into orders (order_id, order_date, customer_id, order_total, promotion_id)
*
ERROR at line 1:
ORA-00001: unique constraint (OE.PROMO_IX) violated

promotion_idが2以外の行を索引から削除するようにします。Oracle Databaseでは、すべてのキーがNULLの行は索引内に格納されません。したがって、この例では、promotion_idが2である場合以外は、customer_idとpromotion_idの両方がNULLにマップされます。その結果、customer_id値が同じ2つの行についてpromotion_idが2の場合にのみ、索引の制約に違反することになります。

パーティション索引の例

レンジ・パーティション・グローバル索引の作成例: 次の文は、コストの範囲を3つのグループに分割した3つのパーティションを含むサンプル表sh.salesにグローバル同一キー索引cost_ixを作成します。

CREATE INDEX cost_ix ON sales (amount_sold)
GLOBAL PARTITION BY RANGE (amount_sold)
(PARTITION p1 VALUES LESS THAN (1000),
PARTITION p2 VALUES LESS THAN (2500),
PARTITION p3 VALUES LESS THAN (MAXVALUE));

ハッシュ・パーティション・グローバル索引の作成例: 次の文は、4つのパーティションを持つサンプル表sh.customersに、ハッシュ・パーティション・グローバル索引cust_last_name_ixを作成します。

CREATE INDEX cust_last_name_ix ON customers (cust_last_name)
GLOBAL PARTITION BY HASH (cust_last_name)
PARTITIONS 4;

ハッシュ・パーティション表の索引の作成例: 次の文は、hash_productsパーティション表(「ハッシュ・パーティション化の例:」で作成)のcategory_id列にローカル索引を作成します。LOCALの直後に記述されたSTORE IN句は、hash_productsがハッシュ・パーティション化されていることを示します。Oracle Databaseは、tbs1表領域とtbs2表領域にハッシュ・パーティションを分散させます。

CREATE INDEX prod_idx ON hash_products(category_id) LOCAL
STORE IN (tbs_01, tbs_02);

索引を作成するには、指定する表領域に対して割当て制限を持つ必要があります。表領域tbs_01およびtbs_02を作成する例は、「CREATE TABLESPACE」を参照してください。

コンポジット・パーティション表の索引の作成例: 次の文は、composite_sales表(「コンポジット・パーティション表の例:」で作成)にローカル索引を作成します。STORAGE句では、索引のデフォルトの記憶域属性を指定します。ただし、別のTABLESPACE記憶域が指定されているため、このデフォルトは、パーティションq3_2000およびq4_2000の5つのサブパーティションに上書きされます。

索引を作成するには、指定する表領域に対して割当て制限を持つ必要があります。表領域tbs_02およびtbs_03を作成する例は、「CREATE TABLESPACE」を参照してください。

CREATE INDEX sales_ix ON composite_sales(time_id, prod_id)
STORAGE (INITIAL 1M)
LOCAL
(PARTITION q1_1998,
PARTITION q2_1998,
PARTITION q3_1998,
PARTITION q4_1998,
PARTITION q1_1999,
PARTITION q2_1999,
PARTITION q3_1999,
PARTITION q4_1999,
PARTITION q1_2000,
PARTITION q2_2000
(SUBPARTITION pq2001, SUBPARTITION pq2002,
SUBPARTITION pq2003, SUBPARTITION pq2004,
SUBPARTITION pq2005, SUBPARTITION pq2006,
SUBPARTITION pq2007, SUBPARTITION pq2008),
PARTITION q3_2000
(SUBPARTITION c1 TABLESPACE tbs_02,
SUBPARTITION c2 TABLESPACE tbs_02,
SUBPARTITION c3 TABLESPACE tbs_02,
SUBPARTITION c4 TABLESPACE tbs_02,
SUBPARTITION c5 TABLESPACE tbs_02),
PARTITION q4_2000
(SUBPARTITION pq4001 TABLESPACE tbs_03,
SUBPARTITION pq4002 TABLESPACE tbs_03,
SUBPARTITION pq4003 TABLESPACE tbs_03,
SUBPARTITION pq4004 TABLESPACE tbs_03)
);

ビットマップ索引の例

次の文は、表oe.hash_products(「ハッシュ・パーティション化の例:」で作成)にビットマップ索引を作成します。

CREATE BITMAP INDEX product_bm_ix
ON hash_products(list_price)
LOCAL(PARTITION ix_p1 TABLESPACE tbs_01,
PARTITION ix_p2,
PARTITION ix_p3 TABLESPACE tbs_02,
PARTITION ix_p4 TABLESPACE tbs_03)
TABLESPACE tbs_04;

hash_productsはパーティション表であるため、ビットマップ結合索引はローカル・パーティションである必要があります。この例では、指定する表領域に対して割当て制限を持つ必要があります。表領域tbs_01、tbs_02、tbs_03およびtbs_04を作成する例は、「CREATE TABLESPACE」を参照してください。

次の一連の文は、結合とディメンション表を使用してファクト表上にビットマップ結合索引を作成する方法を示します。

CREATE TABLE hash_products
( product_id          NUMBER(6)
, product_name        VARCHAR2(50)
, product_description VARCHAR2(2000)
, category_id         NUMBER(2)
, weight_class        NUMBER(1)
, warranty_period     INTERVAL YEAR TO MONTH
, supplier_id         NUMBER(6)
, product_status      VARCHAR2(20)
, list_price          NUMBER(8,2)
, min_price           NUMBER(8,2)
, catalog_url         VARCHAR2(50)
, CONSTRAINT          pk_product_id PRIMARY KEY (product_id)
, CONSTRAINT          product_status_lov_demo
CHECK (product_status in ('orderable'
,'planned'
,'under development'
,'obsolete')
) )
PARTITION BY HASH (product_id)
PARTITIONS 5
STORE IN (example);

CREATE TABLE sales_quota
( product_id          NUMBER(6)
, customer_name       VARCHAR2(50)
, order_qty           NUMBER(6)
,CONSTRAINT u_product_id UNIQUE(product_id)
);

CREATE BITMAP INDEX product_bm_ix
ON hash_products(list_price)
FROM hash_products h, sales_quota s
WHERE h.product_id = s.product_id
LOCAL(PARTITION ix_p1 TABLESPACE example,
PARTITION ix_p2,
PARTITION ix_p3 TABLESPACE example,
PARTITION ix_p4,
PARTITION ix_p5 TABLESPACE example)
TABLESPACE example;

ネストした表の索引の例:

サンプル表pm.print_mediaには、記憶表textdocs_nestedtabに格納されたネストした表の列ad_textdocs_ntabが含まれます。次の文は、記憶表textdocs_nestedtabに一意索引を作成します。

CREATE UNIQUE INDEX nested_tab_ix
ON textdocs_nestedtab(NESTED_TABLE_ID, document_typ);

疑似列NESTED_TABLE_IDを組み込むことによって、ネストした表の列ad_textdocs_ntab内に固有の行が確保されます。

置換可能な列の索引の作成例:

置換可能な列を宣言した型の属性に、索引を作成できます。また、適切なTREATファンクションの使用によって、サブタイプの属性を参照できます。次の例では、表books(「置換可能な表および列のサンプル:」で作成)を使用します。この文は、books表の、すべてのemployee_t型のauthorのsalary属性に索引を作成します。

CREATE INDEX salary_i
ON books (TREAT(author AS employee_t).salary);

TREATファンクションの引数のターゲットとなる型は、参照する属性を追加した型である必要があります。例では、TREATのターゲットは、employee_tで、salary属性を追加した型です。

この条件を満たさない場合、TREATファンクションがファンクションの定義式として解析され、ファンクション索引が作成されます。たとえば、次の文は、パートタイム従業員のsalary属性にファンクション索引を作成し、型の階層に含まれる他のすべての型のインスタンスにNULLを割り当てます。

CREATE INDEX salary_func_i ON persons p
(TREAT(VALUE(p) AS part_time_emp_t).salary);

SYS_TYPEIDファンクションの使用によって、置換可能な列を基礎とする型判別式の列に索引を作成できます。

注意:
Oracle Databaseは型判別式の列を使用し、IS OF type条件を含む問合せを評価します。型ID列のカーディナリティが通常低い場合、ビットマップ索引を作成することをお薦めします。

次の文は、books表のauthor列の型IDにビットマップ索引を作成します。

CREATE BITMAP INDEX typeid_i ON books (SYS_TYPEID(author));

関連項目:

- books表を基礎とする型の階層の作成については、『Oracle Database PL/SQL言語リファレンス』を参照してください。

- 「TREAT」、「SYS_TYPEID」および「IS OF type条件」を参照してください。

CREATE INDEXTYPE

用途

CREATE INDEXTYPE文を使用すると、(アプリケーション固有の)ドメイン索引を管理するルーチンを指定するオブジェクトである索引タイプを作成できます。索引タイプは、表、ビューおよび他のスキーマ・オブジェクトと同じネームスペースにあります。この文は、索引タイプ名を実装タイプに結合し、順番に索引タイプを実装するユーザー定義索引ファンクションおよびプロシージャを指定し、参照します。

関連項目:
索引タイプの実装の詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。

前提条件

自分のスキーマに索引タイプを作成する場合は、CREATE INDEXTYPEシステム権限が必要です。他のユーザーのスキーマ内に索引タイプを作成する場合は、CREATE ANY INDEXTYPEシステム権限が必要です。どちらの場合も、実装タイプおよびサポートしている演算子に対するEXECUTEオブジェクト権限が必要です。

索引タイプは、1つ以上の演算子をサポートしているため、索引タイプを作成する前に、サポートする演算子を設計し、これらの演算子に機能的な実装を提供する必要があります。

関連項目:
「CREATE OPERATOR」

構文

create_indextype::=

using_type_clause::=

array_DML_clause ::=

storage_table_clause::=

セマンティクス

schema

索引タイプが存在するスキーマ名を指定します。schemaを指定しない場合、自分のスキーマ内に索引タイプが作成されます。

indextype

作成する索引タイプの名前を指定します。

FOR句

FOR句を使用すると、索引タイプでサポートされる演算子のリストを指定できます。

- schemaには、演算子を含むスキーマを指定します。schemaを指定しない場合、その演算子は自分のスキーマ内にあるとみなされます。

- operatorには、索引タイプによってサポートされる演算子の名前を指定します。
この句に指定するすべての演算子は有効な演算子である必要があります。

- parameter_typeには、演算子へのパラメータ・タイプを指定します。

using_type_clause

USING句を使用すると、新しい索引タイプを実装するタイプを指定できます。

implementation_typeには、適切なOracle Data Cartridge Interface(ODCI)を実装するタイプ名を指定します。

- ODCIでルーチンを実装する有効なタイプを指定する必要があります。

- 実装タイプは、索引タイプと同じスキーマに存在する必要があります。

関連項目:
このインタフェースの詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。

WITH LOCAL PARTITION

この句を使用すると、レンジ・パーティション表、リスト・パーティション表、ハッシュ・パーティション表、および時間隔パーティション表に対するローカル・ドメイン索引の作成に、索引タイプが使用できることを指定できます。この句は、複数の方法でstorage_table_clauseと組み合せて使用します(storage_table_clauseを参照)。

- WITH LOCAL PARTITION WITH SYSTEM MANAGED STORAGE TABLESを指定する方法をお薦めします。この組合せでは、システム管理記憶域表を使用しますが、これは推奨の記憶域管理であり、レンジパーティション表、リスト・パーティション表、ハッシュ・パーティション表、および時間隔パーティション表にローカル・ドメイン索引を作成できます。RANGEキーワードは、WITH LOCAL PARTITION WITH SYSTEM MANAGED STORAGE TABLESを指定すると不要となるため、この場合はオプションとなり無視されます。

- WITH LOCAL RANGE PARTITION(RANGEキーワードを含む)を指定してstorage_table句を省略することができます。レンジ・パーティション表上のローカル・ドメイン索引は、ユーザー管理記憶表で、下位互換性のためにサポートされています。この組合せは効率性の低いユーザー管理記憶表を使用するため、お薦めしません。

この句を完全に省略すると、後でこの索引タイプを使用してレンジ・パーティション表、リスト・パーティション表、ハッシュ・パーティション表、時間隔パーティション表にローカル・ドメイン索引を作成することができなくなります。

storage_table_clause

この句を使用すると、この索引タイプに基づいて作成された索引の記憶表およびパーティション・メンテナンス操作の管理方法を指定できます。

- WITH SYSTEM MANAGED STORAGE TABLESを指定すると、統計データの格納がシステムで管理されます。statistics_typeに指定するタイプによって、システムで保持される表に統計関連の情報が格納されます。また、指定する索引タイプはすでに登録済であるか、またはWITH SYSTEM MANAGED STORAGE TABLES句をサポートするように変更されている必要があります。

- WITH USER MANAGED STORAGE TABLESを指定すると、ユーザー定義の統計情報を格納する表は、ユーザーによって管理されます。これはデフォルトの動作です。

関連項目:
ドメイン索引の記憶表の詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。

array_DML_clause

この句を使用すると、索引タイプでODCIIndexInsertメソッドの配列インタフェースをサポートできるようになります。

typeおよびvarray_type 索引付けする列のデータ型がユーザー定義のオブジェクト型である場合、この句を指定して、Oracleがtypeの列値を保持するために使用するVARRAYのvarray_typeを識別する必要があります。索引タイプで型のリストがサポートされている場合、対応するVARRAY型のリストを指定できます。typeまたはvarray_typeでschemaを省略した場合、型が自分のスキーマ内に定義されているとみなされます。

索引付けする列のデータ型が組込みシステム型である場合、その索引タイプに指定されたVARRAY型は、システムで定義されたODCI型よりも優先されます。

関連項目:
ODCI配列インタフェースの詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。

例

索引タイプの作成例: 次の文は、position_indextypeという名前の索引タイプを作成し、その索引タイプでサポートされているposition_between演算子、および索引インタフェースを実装するposition_imタイプを指定します。この索引タイプを使用する拡張索引作成機能の使用例については、「拡張索引作成機能の使用方法」を参照してください。

CREATE INDEXTYPE position_indextype
FOR position_between(NUMBER, NUMBER, NUMBER)
USING position_im;

CREATE JAVA

用途

CREATE JAVAを使用すると、Javaソース、クラスまたはリソースを含むスキーマ・オブジェクトを作成できます。

関連項目:

- Javaの概要およびJavaストアド・プロシージャの詳細は、『Oracle Database Java開発者ガイド』を参照してください。

- JDBCについては、『Oracle Database JDBC開発者ガイド』を参照してください。

前提条件

自分のスキーマにJavaソース、クラスまたはリソースを含むスキーマ・オブジェクトを作成または再作成する場合は、CREATE PROCEDUREシステム権限が必要です。他のユーザーのスキーマ内にスキーマ・オブジェクトを作成または再作成する場合は、CREATE ANY PROCEDUREシステム権限が必要です。

構文

create_java::=

invoker_rights_clause::=

セマンティクス

OR REPLACE

OR REPLACEを指定すると、既存のJavaクラス、ソースまたはリソースを含むスキーマ・オブジェクトを再作成できます。この句を指定した場合、付与されているオブジェクト権限を削除、再作成および再付与しなくても、既存のオブジェクトの定義を変更できます。

Javaスキーマ・オブジェクトを再定義し、RESOLVEまたはCOMPILEを指定した場合、そのオブジェクトが再コンパイルまたは変換されます。正常に変換またはコンパイルされたかどうかにかかわらず、Javaスキーマ・オブジェクトを参照するクラスは有効になります。

再定義したファンクションに対して権限が付与されていたユーザーは、権限を再付与されなくても、そのファンクションにアクセスできます。

関連項目:
その他の情報は、「ALTER JAVA」を参照してください。

RESOLVE | COMPILE

RESOLVEおよびCOMPILEは、同義のキーワードです。この文が正常に実行された場合に作成されるJavaスキーマ・オブジェクトを変換することを指定します。

- クラスに適用された場合、他のクラス・スキーマ・オブジェクトに対する参照名に変換されます。

- ソースに適用された場合、ソースがコンパイルされます。

RESOLVEおよびCOMPILEの制限事項: Javaリソースには、これらのキーワードを指定できません。

NOFORCE

RESOLVEまたはCOMPILEを指定しても、正常に変換またはコンパイルできない場合は、NOFORCEを指定するとCREATEコマンドの結果をロールバックできます。このオプションを指定しないと、正常に変換またはコンパイルできない場合でも何も処理が行われず、作成されたスキーマ・オブジェクトはそのままです。

JAVA SOURCE句

JAVA SOURCEを指定すると、Javaソース・ファイルをロードできます。

JAVA CLASS句

JAVA CLASSを指定すると、Javaクラス・ファイルをロードできます。

JAVA RESOURCE句

JAVA RESOURCEを指定すると、Javaリソース・ファイルをロードできます。

NAMED句

NAMED句は、Javaソースまたはリソースの場合に指定します。primary_nameは、二重引用符で囲む必要があります。長さの上限は、データベース・キャラクタ・セットで4000バイトです。

- Javaソースの場合、この句にはソース・コードが保持されているスキーマ・オブジェクト名を指定します。正常なCREATE JAVA SOURCE文は、ソースによって定義されたJavaクラスをそれぞれ保持するために、追加スキーマ・オブジェクトも作成します。

- Javaリソースの場合、この句にはJavaリソースを保持するスキーマ・オブジェクト名を指定します。

primary_nameの小文字、または大文字と小文字の組合せを保持するには、二重引用符を使用します。

schemaを指定しない場合、自分のスキーマにそのオブジェクトが作成されます。

NAMED Javaクラスの制限事項: NAMED句には、次の制限事項があります。

- Javaクラスには、NAMEDを指定できません。

- primary_nameは、データベース・リンクを含むことはできません。

SCHEMA句

SCHEMA句は、Javaクラスにのみ適用されます。このオプションは、Javaファイルを含むオブジェクトが存在するスキーマを指定します。この句を指定しない場合、自分のスキーマにそのオブジェクトが作成されます。

invoker_rights_clause

invoker_rights_clauseを使用すると、クラスを所有するユーザーのスキーマ内で、そのユーザーの権限を使用してクラスのメソッドが実行されるか、または、CURRENT_USERのスキーマ内で、そのユーザーの権限を使用してクラスのメソッドを実行するかを指定できます。

また、この句は、問合せ、DML操作、およびその型のメンバー・ファンクションおよびプロシージャ内の動的SQL文の外部名の変換方法も定義します。

AUTHID CURRENT_USER

CURRENT_USERを使用すると、クラスのメソッドがCURRENT_USER権限で実行されることを指定できます。この句はデフォルトで、実行者権限クラスを作成します。

また、この句は、問合せ、DML操作、および動的SQL文の外部名をCURRENT_USERのスキーマで変換することも指定します。他のすべての文における外部名は、メソッドを含むスキーマで変換します。

AUTHID DEFINER

DEFINERを使用すると、クラスが存在するスキーマの所有者権限でクラスのメソッドを実行すること、およびクラスが存在するスキーマで外部名を変換することを指定できます。この句によって定義者権限クラスが作成されます。

関連項目:

- 『Oracle Database Java開発者ガイド』

- CURRENT_USERの判断方法については、『Oracle Database PL/SQL言語リファレンス』を参照してください。

RESOLVER句

RESOLVER句を使用すると、Javaスキーマ・オブジェクトに対する完全修飾Java名のマッピングを指定できます。ここでは次のとおりです。

- match_stringは、完全修飾Java名、そのようなJava名と一致するワイルド・カードまたは任意の名前と一致するワイルド・カードを指定します。

- schema_nameは、対応するJavaスキーマ・オブジェクトを検索するスキーマを指定します。

- schema_nameの代替としてのダッシュ(-)は、match_stringが有効なJava名と一致した場合、名前が変換されないことを示します。名前の変換は成功しますが、実行時にクラスがその名前を使用することはできません。

このマッピングは、後の変換で(暗黙的に、またはALTER JAVA ... RESOLVE文で明示的に)使用されるコマンドで作成されるスキーマ・オブジェクトの定義とともに格納されます。

USING句

USINGは、Javaクラスまたはリソースに対する文字データ(CLOBまたはBFILE)またはバイナリ・データ(BLOBまたはBFILE)の順序を決定します。文字の順序を使用して、1つのファイルがJavaクラスまたはリソースに、または1つのソース・ファイルおよび1つ以上の導出クラスがJavaソースに定義されます。

BFILE句

順序を含む、オペレーティング・システム(directory_object_name)およびサーバー・ファイル(server_file_name)であらかじめ作成されているファイルのディレクトリおよびファイル名を指定します。BFILEは、通常、CREATE JAVA SOURCEによって文字順序として、CREATE JAVA CLASSまたはCREATE JAVA RESOURCEによってバイナリ順序として解析されます。

CLOB | BLOB | BFILE subquery

指定した型(CLOB、BLOBまたはBFILE)の行と列を選択する副問合せを指定します。列の値は文字列を構成します。

注意:
以前のリリースでは、USING句は暗黙的にキーワードSELECTを提供しました。今回のリリースでは提供されません。ただし、キーワードSELECTなしの副問合せは、(下位互換性のために)サポートされています。

key_for_BLOB

key_for_BLOB句は、次の暗黙的な問合せを提供します。

SELECT LOB FROM CREATE$JAVA$LOB$TABLE
WHERE NAME = 'key_for_BLOB';

key_for_BLOB句の制限事項: このパラメータを使用する場合、表CREATE$JAVA$LOB$TABLEが現行のスキーマ内にあり、BLOB型のLOB列およびVARCHAR2型のNAME列が存在する必要があります。

AS source_char

Javaソースの文字列を指定します。

例

Javaクラス・オブジェクトの作成例: 次の文は、Javaバイナリ・ファイルにある名前を使用して、Javaクラスを含むスキーマ・オブジェクトを作成します。

CREATE JAVA CLASS USING BFILE (java_dir, 'Agent.class')
/

この例では、JavaクラスAgent.classを含むオペレーティング・システム・ディレクトリを指すディレクトリ・オブジェクトjava_dirがすでに存在していると想定しています。この例では、クラス名がJavaクラス・スキーマ・オブジェクトの名前を決定します。

Javaソース・オブジェクトの作成例: 次の文は、Javaソース・スキーマ・オブジェクトを作成します。

CREATE JAVA SOURCE NAMED "Welcome" AS
public class Welcome {
public static String welcome() {
return "Welcome World";   } }
/

Javaリソース・オブジェクトの作成例: 次の文は、bfileからapptextという名前のJavaリソース・スキーマ・オブジェクトを作成します。

CREATE JAVA RESOURCE NAMED "appText"
USING BFILE (java_dir, 'textBundle.dat')
/

15 SQL文: CREATE LIBRARYからCREATE SPFILE

この章では、次のSQL文について説明します。

- CREATE LIBRARY

- CREATE MATERIALIZED VIEW

- CREATE MATERIALIZED VIEW LOG

- CREATE MATERIALIZED ZONEMAP

- 「CREATE OPERATOR」

- CREATE OUTLINE

- CREATE PACKAGE

- CREATE PACKAGE BODY

- CREATE PFILE

- CREATE PLUGGABLE DATABASE

- CREATE PROCEDURE

- CREATE PROFILE

- CREATE RESTORE POINT

- CREATE ROLE

- CREATE ROLLBACK SEGMENT

- CREATE SCHEMA

- CREATE SEQUENCE

- CREATE SPFILE

CREATE LIBRARY

用途

CREATE LIBRARY文を使用すると、オペレーティング・システム共有ライブラリに関連するスキーマ・オブジェクトを作成できます。このスキーマ・オブジェクトの名前は、CREATE FUNCTIONまたはCREATE PROCEDURE文のcall_specで使用できます。また、パッケージまたは型におけるファンクションまたはプロシージャを宣言する際にも使用できます。これによって、SQLおよびPL/SQLは、第三世代言語(3GL)ファンクションおよびプロシージャに対してコールできます。

関連項目:
ファンクションおよびプロシージャの詳細は、「CREATE FUNCTION」および『Oracle Database PL/SQL言語リファレンス』を参照してください。

前提条件

CREATE LIBRARY文は、共有ライブラリおよび動的リンクをサポートするプラットフォーム上でのみ有効です。

自分のスキーマ内にライブラリを作成する場合は、CREATE LIBRARYシステム権限が必要です。他のユーザーのスキーマ内にライブラリを作成する場合は、CREATE ANY LIBRARYシステム権限が必要です。

CREATE FUNCTION文のcall_specでライブラリを使用したり、パッケージまたは型でファンクションを宣言する際にライブラリを使用するには、ライブラリに対するEXECUTEオブジェクト権限とCREATE FUNCTIONシステム権限が必要です。CREATE FUNCTION文のcall_specの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

CREATE PROCEDURE文のcall_specでライブラリを使用したり、パッケージまたは型でプロシージャを宣言する際にライブラリを使用するには、ライブラリに対するEXECUTEオブジェクト権限とCREATE PROCEDUREシステム権限が必要です。CREATE PROCEDURE文のcall_specの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

call_specで定義したプロシージャまたはファンクション(パッケージまたは型で定義したプロシージャまたはファンクションを含む)を実行するには、そのプロシージャまたはファンクションに対するEXECUTEオブジェクト権限が必要です(ただし、ライブラリに対するEXECUTEオブジェクト権限は不要です)。

構文

ライブラリはPL/SQLを使用して定義されます。このため、このマニュアルの構文図ではSQLキーワードのみを示します。PL/SQLの構文、セマンティクスおよび例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。

create_library::=

(plsql_library_source: 『Oracle Database PL/SQL言語リファレンス』を参照。)

セマンティクス

OR REPLACE

OR REPLACEを指定すると、既存のライブラリを再作成できます。この句を指定した場合、既存のライブラリに付与されているオブジェクト権限を削除、再作成および再付与しなくても、ライブラリの定義を変更できます。

再定義したライブラリに対して権限を付与されていたユーザーは、権限を再付与されなくてもライブラリにアクセスできます。

[ EDITIONABLE | NONEDITIONABLE ]

この句を使用すると、schemaのスキーマ・オブジェクト・タイプLIBRARYのエディショニングが有効化されたときに、そのライブラリをエディション・オブジェクトにするか非エディション・オブジェクトにするかを指定できます。デフォルトは、EDITIONABLEです。エディション・オブジェクトと非エディション・オブジェクトの詳細は、『Oracle Database開発ガイド』を参照してください。

plsql_library_source

plsql_library_sourceの構文およびセマンティクスについては、『Oracle Database PL/SQL言語リファレンス』を参照してください。

CREATE MATERIALIZED VIEW

用途

CREATE MATERIALIZED VIEW文を使用すると、マテリアライズド・ビューを作成できます。マテリアライズド・ビューは、問合せ結果を含むデータベース・オブジェクトです。問合せのFROM句には、表、ビューおよびその他のマテリアライズド・ビューを指定できます。これらのオブジェクトをあわせて、マスター表(レプリケーション用語)またはディテール表(データ・ウェアハウス用語)といいます。このマニュアルでは、「マスター表」を使用します。マスター表が格納されているデータベースをマスター・データベースといいます。

注意:
下位互換性を保つために、MATERIALIZED VIEWのかわりにキーワードSNAPSHOTもサポートされています。

レプリケーションでは、マテリアライズド・ビューを使用すると、ローカル・ノード上にあるリモート・データのコピーのメンテナンスができます。コピーは、アドバンスト・レプリケーション機能によって更新可能となりますが、この機能がない場合は読取り専用です。マテリアライズド・ビューのデータを、表またはビューと同じように選択することができます。レプリケーション環境では、通常作成されるマテリアライズド・ビューは、主キー、ROWID、オブジェクトおよび副問合せのマテリアライズド・ビューです。

関連項目:
レプリケーションのサポートに使用するマテリアライズド・ビューの詳細は、『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

データ・ウェアハウスでは、通常作成されるマテリアライズド・ビューは、マテリアライズド集計ビュー、単一表マテリアライズド集計ビューおよびマテリアライズド結合ビューです。3つのマテリアライズド・ビューはすべてクエリー・リライトで使用できます。クエリー・リライトとは、マスター表に関して記述されたユーザー要求を、1つ以上のマテリアライズド・ビューを含む意味的に同等の要求に変換するための最適化手法です。

関連項目:

- 「ALTER MATERIALIZED VIEW」

- データ・ウェアハウスのサポートに使用するマテリアライズド・ビューの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

追加トピック

- 前提条件

- 構文

- セマンティクス

- 例

前提条件

マテリアライズド・ビューの作成に必要な権限は、ロールを介してではなく、直接付与する必要があります。

自分のスキーマ内にマテリアライズド・ビューを作成する場合は、次の条件に従う必要があります。

- CREATE MATERIALIZED VIEWシステム権限と、CREATE TABLEまたはCREATE ANY TABLEのいずれかのシステム権限が必要です。

- 所有していないマテリアライズド・ビューのマスター表にアクセスする場合は、各表に対するREADまたはSELECTオブジェクト権限またはREAD ANY TABLEまたはSELECT ANY TABLEシステム権限が必要です。

他のユーザーのスキーマ内にマテリアライズド・ビューを作成する場合、次の条件に従う必要があります。

- CREATE ANY MATERIALIZED VIEWシステム権限が必要です。

- マテリアライズド・ビューの所有者には、CREATE TABLEシステム権限が必要です。スキーマ所有者が所有していないマテリアライズド・ビューの任意のマスター表(リモート・データベースに存在するマスター表など)、およびそのマスター表に定義された任意のマテリアライズド・ビュー・ログにアクセスするには、各表に対するREADまたはSELECTオブジェクト権限、あるいはREAD ANY TABLEまたはSELECT ANY TABLEシステム権限が必要です。

REFRESH ON COMMITモードのマテリアライズド・ビューを作成する場合(REFRESH ON COMMIT句を使用する場合)は、前述の権限の他に、所有していないマスター表に対するON COMMIT REFRESHオブジェクト権限、またはON COMMIT REFRESHシステム権限が必要です。

前述の権限の他にも、クエリー・リライトが使用可能なマテリアライズド・ビューを作成する場合は、次の条件に従う必要があります。

- スキーマ所有者がマスター表を所有していない場合は、そのスキーマ所有者にはGLOBAL QUERY REWRITE権限、または自分のスキーマ以外の各表に対するQUERY REWRITEオブジェクト権限が必要です。

- 事前作成コンテナにマテリアライズド・ビューを定義する(ON PREBUILT TABLE句を使用)場合は、コンテナ表に対するWITH GRANT OPTION付きのREADまたはSELECT権限が必要です。

マテリアライズド・ビューを含むスキーマのユーザーには、マテリアライズド・ビューのマスター表および索引を格納するターゲット表領域への十分な割当て制限またはUNLIMITED TABLESPACEシステム権限が必要です。

マテリアライズド・ビューを作成すると、そのマテリアライズド・ビューのスキーマ内に、1つの内部表および1つ以上の索引が作成されます。また、1つのビューが作成されることもあります。これらのオブジェクトは、マテリアライズド・ビューのデータをメンテナンスするために使用されます。ユーザーには、これらのオブジェクトを作成するための権限が必要です。

コミットSCNベース・マテリアライズド・ビュー・ログを使用するマスター表には、次のようなローカル・マテリアライズド・ビューを作成できます(ON COMMITおよびON DEMANDを含む)。

- マテリアライズド集計ビュー(単一表に対するマテリアライズド集計ビューを含む)

- マテリアライズド結合ビュー

- 主キーおよびROWIDに基づく単一表マテリアライズド・ビュー

- UNION ALLマテリアライズド・ビュー(各UNION ALLブランチはここに示したマテリアライズド・ビューのいずれかのタイプ)

コミットSCNベース・マテリアライズド・ビュー・ログを使用するマスター表には、リモート・マテリアライズド・ビューを作成できません。

異なるマテリアライズド・ビュー・ログを使用するマスター表(つまり、タイムスタンプ・ベース・マテリアライズド・ビュー・ログを使用するマスター表およびコミットSCNベース・マテリアライズド・ビュー・ログを使用するマスター表)にはマテリアライズド・ビューを作成できず、ORA-32414が戻されます。

evaluation_edition_clauseまたはunusable_editions_clauseでエディションを指定するには、そのエディションに対するUSE権限が必要になります。

関連項目:

- これらの権限については、「CREATE TABLE」、「CREATE VIEW」および「CREATE INDEX」を参照してください。

- レプリケーションのためのマテリアライズド・ビューの作成についての前提条件は、『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

- データ・ウェアハウスのためのマテリアライズド・ビューの作成についての前提条件は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

構文

create_materialized_view::=

(scoped_table_ref_constraint::=、physical_properties ::=、materialized_view_props::=、physical_attributes_clause::=、create_mv_refresh::=、evaluation_edition_clause::=、query_rewrite_clause::=、subquery::=を参照)

scoped_table_ref_constraint::=

physical_properties::=

(deferred_segment_creation::=、segment_attributes_clause::=、table_compression ::=、inmemory_table_clause::=、ilm_clauseを参照: マテリアライズド・ビューheap_org_table_clause::=、index_org_table_clause::=ではサポートされません)

materialized_view_props::=

(column_properties ::=、table_partitioning_clauses ::=(「CREATE TABLE」構文の項)、parallel_clause::=、build_clause::=を参照)

heap_org_table_clause::=

(table_compression ::=，inmemory_table_clause::=，ilm_clauseを参照: マテリアライズド・ビューではサポートされません)

index_org_table_clause::=

(mapping_table_clauseは、マテリアライズド・ビューではサポートされていません。prefix_compression::=、index_org_overflow_clause::=を参照)

prefix_compression::=

index_org_overflow_clause::=

(segment_attributes_clause::=を参照)

create_mv_refresh::=

deferred_segment_creation::=

segment_attributes_clause::=

(physical_attributes_clause ::=、logging_clause::=を参照)

physical_attributes_clause::=

(logging_clause::=を参照)

logging_clause::=

table_compression::=

inmemory_table_clause::=

(inmemory_parameters::=、inmemory_column_clause::=)

inmemory_parameters::=

(inmemory_memcompress::=、inmemory_priority::=、inmemory_distribute::=、inmemory_duplicate::=)

inmemory_memcompress::=

inmemory_priority::=

inmemory_distribute::=

inmemory_duplicate::=

inmemory_column_clause::=

(inmemory_memcompress::=)

column_properties::=

(object_type_col_properties::=、nested_table_col_properties::=、varray_col_properties::=、LOB_partition_storage::=、LOB_storage_clause::=を参照。XMLType_column_propertiesは、マテリアライズド・ビューではサポートされていません。)

object_type_col_properties::=

(substitutable_column_clause::=を参照)

substitutable_column_clause::=

nested_table_col_properties::=

(substitutable_column_clause::=、object_properties::=、physical_properties::=(「CREATE TABLE」構文の項)、column_properties ::=を参照)

varray_col_properties::=

(substitutable_column_clause::=、varray_storage_clause::=を参照)

varray_storage_clause::=

(LOB_parameters::=を参照)

LOB_storage_clause::=

(LOB_storage_parameters::=を参照)

LOB_storage_parameters::=

(LOB_parameters::=、storage_clause::=を参照)

LOB_parameters::=

(storage_clause::=、logging_clause::=を参照)

LOB_partition_storage::=

(LOB_storage_clause::=、varray_col_properties::=を参照)

parallel_clause::=

build_clause::=

evaluation_edition_clause::=

query_rewrite_clause::=

unusable_editions_clause::=

セマンティクス

schema

マテリアライズド・ビューを含めるスキーマを指定します。schemaを指定しない場合、自分のスキーマにそのマテリアライズド・ビューが作成されます。

materialized_view

作成するマテリアライズド・ビューの名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。Oracle Databaseは、マテリアライズド・ビュー名に接頭辞または接尾辞を追加して、マテリアライズド・ビューをメンテナンスするための表および索引の名前を生成します。

column_alias

マテリアライズド・ビューの各列に対して別名を指定できます。列の別名のリストによって、競合する列名が明示的に解決されます。したがって、マテリアライズド・ビューのSELECT句で別名を指定する必要がなくなります。この句で列の別名を指定する場合は、SELECT句内で参照される各データソースの別名を指定する必要があります。

ENCRYPT句 この句を使用すると、マテリアライズド・ビューの列を暗号化できます。列の暗号化の詳細は、「CREATE TABLE」の句「encryption_spec」を参照してください。

OF object_type

OF object_type句を指定すると、object_type型のオブジェクト・マテリアライズド・ビューを明示的に作成できます。

関連項目:
OF type_name句の詳細は、「CREATE TABLE」の「object_table」を参照してください。

scoped_table_ref_constraint

SCOPE FOR句を使用すると、参照の有効範囲を1つのオブジェクト表に制限できます。scope_table_nameを持つ表名または列の別名を参照できます。REF列または属性の値はscope_table_nameまたはc_alias内のオブジェクトを指し、その場所にREF列と同じ型のオブジェクト・インスタンスが格納されます。別名を指定する場合は、その別名が、マテリアライズド・ビューを定義する問合せのSELECT構文のリストの列と1対1で対応する必要があります。

関連項目:
詳細は、「REF列のSCOPE制約」を参照してください。

ON PREBUILT TABLE句

ON PREBUILT TABLE句を指定すると、既存の表を再初期化したマテリアライズド・ビューとして登録できます。この句は、データ・ウェアハウス環境において、大きいマテリアライズド・ビューを登録する場合に有効です。その表は、結果マテリアライズド・ビューと同じ名前で、同じスキーマにある必要があります。

マテリアライズド・ビューが削除されると、その既存の表は、1つの表としての元の形に戻ります。

注意:
この句は、表オブジェクトが副問合せの具体化を反映することを前提としています。マテリアライズド・ビューがそのマスター表のデータを正しく反映することを保証するために、この前提が満たされていることを確認することをお薦めします。

ON PREBUILT TABLE句は、次のような使用例で役立ちます。

- 問合せの結果を示す表があります。この表の作成コストは高く、作成に長時間かかりました。この問合せに対し、マテリアライズド・ビューを作成します。この場合、ON PREBUILT TABLE句を使用することで、問合せを実行してマテリアライズド・ビューのコンテナにデータを移入するコストを回避できます。

- マテリアライズド・ビューを一時的に破棄しますが、そのマテリアライズド・ビューのコンテナ表は保持します。このために、DROP MATERIALIZED VIEW ... PRESERVE TABLE文を使用します。その後、マテリアライズド・ビューを再度作成することにします。このとき、マテリアライズド・ビューのマスター表に変更がないことが判明しています。この場合、ON PREBUILT TABLE句を使用してこのマテリアライズド・ビューを作成できます。これにより、マテリアライズド・ビューのコンテナ表を作成してデータを移入するコストと時間を節約できます。

ON PREBUILT TABLEを指定すると、I_SNAP$索引が生成されません。この索引は、高速リフレッシュのパフォーマンスを改善します。この索引の利点を活用するには、索引を手動で作成できます。詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

WITH REDUCED PRECISION WITH REDUCED PRECISIONを指定すると、表またはマテリアライズド・ビューの列の精度が、副問合せによって戻される精度と正確に一致しない場合に、精度の低下が許可されます。

WITHOUT REDUCED PRECISION WITHOUT REDUCED PRECISIONを指定すると、表またはマテリアライズド・ビューの列の精度が、副問合せによって戻される精度と正確に一致する必要があります。一致しない場合、作成操作は失敗します。これはデフォルトです。

事前作成表の使用の制限事項: 事前作成表には、次の制限事項があります。

- subqueryの各列の別名は、事前作成表の列に対応し、対応する列のデータ型が一致している必要があります。

- この句を指定する場合、subqueryで参照されない列にデフォルト値も指定しないかぎり、その列にNOT NULL制約は指定できません。

- ROWIDマテリアライズド・ビューの作成時にON PREBUILT TABLE句を指定することはできません。

関連項目:
「事前作成したマテリアライズド・ビューの作成例:」

physical_properties_clause

physical_properties_clauseの構成要素は、マテリアライズド・ビューと表に対して同一のセマンティクスを持ちます。ただし、次の項で説明する例外および追加事項があります。

physical_properties_clauseの制限事項: マテリアライズド・ビューに対しては、ORGANIZATION EXTERNALを指定できません。

deferred_segment_creation

この句を使用すると、このマテリアライズド・ビューのセグメントを作成するタイミングを指定できます。詳細は、「CREATE TABLE」の句「deferred_segment_creation」を参照してください。

segment_attributes_clause

segment_attributes_clauseを使用すると、PCTFREE、PCTUSED、INITRANSパラメータの値、およびマテリアライズド・ビューの記憶特性の設定、表領域の割当て、ロギングが実行されるかどうかを指定できます。USING INDEX句では、PCTFREEまたはPCTUSEDは指定できません。

TABLESPACE句  マテリアライズド・ビューを作成する表領域を指定します。この句を指定しないと、マテリアライズド・ビューを含むスキーマのデフォルト表領域内にマテリアライズド・ビューが作成されます。

関連項目:
デフォルト値を含むこれらの句の詳細は、「physical_attributes_clause」および「storage_clause」を参照してください。

logging_clause LOGGINGまたはNOLOGGINGを指定すると、マテリアライズド・ビュー・ログのロギング特性を設定できます。ロギング特性は、マテリアライズド・ビューの作成およびDBMS_REFRESHパッケージによって開始される非アトミック・リフレッシュに影響します。デフォルトは、マテリアライズド・ビューが存在する表領域のロギング特性です。

関連項目:
この句の詳細は、「logging_clause」を参照してください。アトミック・リフレッシュおよび非アトミック・リフレッシュの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

table_compression

table_compression句を使用すると、ディスクおよびメモリーの使用量を削減するために、データ・セグメントを圧縮するかどうかを指定できます。この句のセマンティクスは、CREATE MATERIALIZED VIEWおよびCREATE TABLE文で同じです。この句のセマンティクスの詳細は、CREATE TABLEのドキュメントのtable_compression句を参照してください。

inmemory_table_clause

inmemory_table_clauseを使用して、インメモリー列ストア(IM列ストア)のマテリアライズド・ビューを有効化または無効化します。この句のセマンティクスは、CREATE TABLEドキュメントのinmemory_table_clauseと同じです。

inmemory_column_clause

inmemory_column_clauseを使用して、IM列ストアの特定のマテリアライズド・ビュー列を無効化し、特定の列のデータ圧縮方法を指定します。この句を指定するには、IM列ストアに対してマテリアライズド・ビューを有効化する必要があります。この句のセマンティクスは、CREATE TABLEドキュメントのinmemory_column_clauseと同じですが、次が追加されます。inmemory_column_clauseを指定する場合、マテリアライズド・ビューの各列にcolumn_aliasを指定する必要もあります。

index_org_table_clause

ORGANIZATION INDEXを指定すると、索引構成マテリアライズド・ビューを作成できます。このマテリアライズド・ビューでは、データ行は、マテリアライズド・ビューの主キーに定義した索引に格納されます。次のようなマテリアライズド・ビューの索引構成を指定できます。

- 読取り専用および更新可能なオブジェクト・マテリアライズド・ビュー。マスター表に主キーが含まれている必要があります。

- 読取り専用および更新可能な主キー・マテリアライズド・ビュー。

- 読取り専用のROWIDマテリアライズド・ビュー。

index_org_table_clauseのキーワードおよびパラメータは、CREATE TABLEと同じです。また、次の制限事項があります。

関連項目:
「CREATE TABLE」の「index_org_table_clause」を参照してください。

索引構成マテリアライズド・ビューの制限事項: 索引構成マテリアライズド・ビューには、次の制限事項があります。

- CREATE MATERIALIZED VIEWのCACHE、NOCACHE、CLUSTERまたはON PREBUILT TABLE句は指定できません。

- index_org_table_clauseには次の制限事項があります。

- mapping_table_clauseを指定できません。

- 複合主キーに基づくマテリアライズド・ビューのみにCOMPRESSを指定できます。単一主キーと複合主キーのいずれかに基づくマテリアライズド・ビューにNOCOMPRESSを指定できます。

CLUSTER句

CLUSTER句を指定すると、指定したクラスタの一部としてマテリアライズド・ビューを作成できます。クラスタ化マテリアライズド・ビューは、クラスタの領域割当てを使用します。したがって、CLUSTER句で物理属性またはTABLESPACE句を指定しないでください。

クラスタ化マテリアライズド・ビューの制限事項: CLUSTERを指定する場合、materialized_view_props内のtable_partitioning_clausesは指定できません。

materialized_view_props

これらのプロパティ句を使用すると、既存の表に基づかないマテリアライズド・ビューを定義できます。既存の表に基づくマテリアライズド・ビューを作成するには、ON PREBUILT TABLE句を使用します。

column_properties

column_properties句を使用すると、LOB、ネストした表、VARRAYまたはXMLTypeの列の記憶特性を指定できます。object_type_col_propertiesは、マテリアライズド・ビューには関連しません。

関連項目:
この句のパラメータの指定の詳細は、「CREATE TABLE」を参照してください。

table_partitioning_clauses

table_partitioning_clausesを使用すると、マテリアライズド・ビューを、指定した範囲の値またはハッシュ・ファンクションでパーティション化できます。マテリアライズド・ビューのパーティション化は、表のパーティション化と同じです。

関連項目:
「CREATE TABLE」の「table_partitioning_clauses」を参照してください。

CACHE | NOCACHE

アクセス頻度の高いデータについて、CACHEは、全表スキャンの実行時にこの表に対して取り出された各ブロックを、バッファ・キャッシュの最低使用頻度(LRU)リストの最高使用頻度側に入れることを指定します。この属性は、小規模な参照表で有効です。NOCACHEは、ブロックをLRUリストの最低使用頻度側に入れることを指定します。

注意:
NOCACHEは、storage_clauseにKEEPを指定したマテリアライズド・ビューには、影響しません。

関連項目:
CACHEまたはNOCACHEの指定の詳細は、「CREATE TABLE」を参照してください。

parallel_clause

parallel_clauseを使用すると、マテリアライズド・ビューへのパラレル操作をサポートするかどうかを指定できます。作成後にマテリアライズド・ビューに対する問合せおよびDMLのデフォルトの並列度を設定します。

この句の詳細は、「CREATE TABLE」の「parallel_clause」を参照してください。

build_clause

build_clauseを指定すると、マテリアライズド・ビューをいつ移入するかを指定できます。

IMMEDIATE IMMEDIATEを指定すると、マテリアライズド・ビューにすぐに移入できます。これはデフォルトです。

DEFERRED DEFERREDを指定すると、次のREFRESH操作でマテリアライズド・ビューに移入できます。最初の(遅延)リフレッシュは、常に、完全リフレッシュである必要があります。それ以前のマテリアライズド・ビューの値はUNUSABLEであるため、クエリー・リライトには使用できません。

USING INDEX句

USING INDEX句を使用すると、マテリアライズド・ビューのデータをメンテナンスするために使用されるデフォルトの索引のINITRANSパラメータおよびSTORAGEパラメータの値を変更できます。USING INDEXが設定されていない場合、この索引にはデフォルト値が使用されます。デフォルトの索引は、マテリアライズド・ビューの増分リフレッシュ(FAST)を高速に処理するために使用されます。

USING INDEX句の制限事項: この句では、PCTUSEDパラメータは指定できません。

USING NO INDEX句

USING NO INDEX句を指定すると、デフォルトの索引の作成を抑制できます。CREATE INDEX文を使用することによって、代替する索引を明示的に作成できます。USING NO INDEXを指定し、高速リフレッシュ(REFRESH FAST)でマテリアライズド・ビューを作成する場合は、このような索引を作成する必要があります。

create_mv_refresh

create_mv_refresh句を使用すると、マテリアライズド・ビューのデフォルトのリフレッシュ方法、リフレッシュ・モードおよびリフレッシュ時刻を指定できます。マテリアライズド・ビューのマスター表が変更された場合、マテリアライズド・ビューのデータを更新し、その時点でマスター表にあるデータを正確に反映させる必要があります。この句によって、自動的にマテリアライズド・ビューをリフレッシュする日時をスケジューリングし、リフレッシュの方法およびモードを指定できます。

同期リフレッシュの制限事項: 同期リフレッシュの方法を使用する場合は、ON DEMANDとUSING TRUSTED CONSTRAINTSを指定する必要があります。

注意:
この句では、デフォルトのリフレッシュ・オプションのみを設定します。リフレッシュを実際に行う手順は、『Oracle Databaseアドバンスト・レプリケーション』および『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

関連項目:

- 「マテリアライズド・ビューの定期的リフレッシュ例:」および「マテリアライズド・ビューの自動リフレッシュ時刻の例:」を参照してください。

- リフレッシュ方法の詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

FAST句

FASTを指定すると、高速リフレッシュ方法が使用されます。この方法では、マスター表に対して行われた変更に従ってリフレッシュを実行します。従来型DML変更の場合、変更は、マスター表に関連付けられたマテリアライズド・ビュー・ログに格納されます。ダイレクト・パスINSERT操作の変更は、ダイレクト・ローダー・ログに格納されます。

REFRESH FASTを指定すると、マテリアライズド・ビューのマスター表のマテリアライズド・ビュー・ログが存在していない場合に、CREATE文は正常に実行されません。ダイレクト・パスINSERTが行われると、ダイレクト・ローダー・ログが自動的に作成されます。手動での操作は必要ありません。

従来型DMLの変更の場合も、ダイレクト・パスINSERT操作の場合も、他の条件によって、高速リフレッシュへのマテリアライズド・ビューの適応性が制限されることがあります。

FASTリフレッシュの制限事項: FASTリフレッシュには、次の制限事項があります。

- 作成時にFASTリフレッシュを指定した場合、作成するマテリアライズド・ビューは高速リフレッシュに適応することが検証されています。ALTER MATERIALIZED VIEW文でリフレッシュ方法をFASTに変更した場合、これは検証されていません。マテリアライズド・ビューが高速リフレッシュに適応しない場合、このビューをリフレッシュしようとするとエラーが戻されます。

- 定義する問合せに分析ファンクションまたはXMLTableファンクションが含まれている場合、マテリアライズド・ビューは高速リフレッシュに適応しません。

- 定義する問合せで、XMLIndex索引が定義されている表を参照する場合、マテリアライズド・ビューは高速リフレッシュに適格となりません。

- 暗号化されている列がある場合は、マテリアライズド・ビューを高速リフレッシュできません。

関連項目:

- レプリケーション環境における高速リフレッシュの制限については、『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

- データ・ウェアハウス環境における高速リフレッシュの制限については、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

- 高速リフレッシュに関する問題の診断については、DBMS_MVIEWパッケージのEXPLAIN_MVIEWプロシージャを参照してください。高速リフレッシュの問題の修正については、DBMS_MVIEWパッケージのTUNE_MVIEWプロシージャを参照してください。

- 「分析ファンクション」

- 「高速リフレッシュ可能なマテリアライズド・ビューの作成例:」

COMPLETE句

COMPLETEを指定すると、完全リフレッシュ方法が使用されます。この方法は、マテリアライズド・ビューを定義する問合せを実行することによって実装されます。完全リフレッシュを要求すると、高速リフレッシュが実行可能であっても、完全リフレッシュが実行されます。

FORCE句

FORCEを指定すると、リフレッシュ時に、高速リフレッシュが可能な場合は高速リフレッシュを実行し、可能でない場合は完全リフレッシュを実行するように指定できます。リフレッシュ方法(FAST、COMPLETEまたはFORCE)を指定しないと、デフォルトでFORCEが指定されます。

ON COMMIT句

ON COMMITを指定すると、マテリアライズド・ビューのマスター表に対するトランザクションをコミットするときに、必ずリフレッシュが実行されるように指定できます。この句を指定すると、リフレッシュ操作がコミット処理の一部として行われるため、コミットの完了に時間がかかります。

ON COMMITおよびON DEMANDの両方を指定することはできません。ON COMMITを指定した場合、START WITHまたはNEXTを指定できません。

ON COMMITのリフレッシュの制限事項:

- この句は、オブジェクト型またはOracleが提供する型を含むマテリアライズド・ビューについてはサポートしていません。

- この句はリモート表を使用するマテリアライズド・ビューではサポートされていません。

- この句を指定すると、それ以降は、このマテリアライズド・ビューのすべてのマスター表で分散トランザクションが実行できなくなります。たとえば、リモート表から選択してマスターに挿入することはできません。ON DEMAND句の場合は、それ以降のマスター表での分散トランザクションに、このような制限はありません。

ON DEMAND句

ON DEMANDを指定すると、3つのDBMS_MVIEWリフレッシュ・プロシージャのうちのいずれかを使用してユーザーが手動でリフレッシュしないかぎりデータベースによってマテリアライズド・ビューがリフレッシュされないように指定できます。

ON COMMITおよびON DEMANDの両方を指定することはできません。ON COMMITおよびON DEMANDのどちらも指定しなかった場合、ON DEMANDがデフォルトになります。このデフォルト設定は、同じCREATE MATERIALIZED VIEW文または後続のALTER MATERIALIZED VIEW文のいずれかにSTART WITH句またはNEXT句を指定することで上書きできます。

START WITHおよびNEXTは、ON DEMANDより優先されます。このため、START WITHまたはNEXTを指定したときは、ほとんどの場合、ON DEMANDを指定しても意味がありません。

関連項目:

- これらのプロシージャの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

- REFRESH ON DEMANDを指定することによって作成できるマテリアライズド・ビューのタイプについては、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

START WITH句

最初の自動リフレッシュ時刻を表す日時式を指定します。

NEXT句

自動リフレッシュの間隔を計算するための日時式を指定します。

START WITH値およびNEXT値は、将来の時刻に評価される値です。START WITH値を省略した場合、Oracle Databaseはマテリアライズド・ビューの作成時刻に対してNEXT式を評価することによって、最初の自動リフレッシュ時刻を判断します。START WITH値を指定し、NEXT値を指定しない場合、Oracle Databaseは1回のみマテリアライズド・ビューをリフレッシュします。START WITH値およびNEXT値のどちらも指定しない場合、またはcreate_mv_refreshを指定しない場合は、マテリアライズド・ビューは自動リフレッシュされません。

WITH PRIMARY KEY句

WITH PRIMARY KEYを指定すると、主キー・マテリアライズド・ビューを作成できます。これはデフォルトであり、WITH ROWIDの項で説明する場合を除き、すべての場合に使用する必要があります。主キー・マテリアライズド・ビューを使用すると、高速リフレッシュに対するマテリアライズド・ビューの適応性に影響せずに、マテリアライズド・ビューのマスター表を再編成できます。マスター表には、使用可能な主キー制約が定義されている必要があり、マテリアライズド・ビューを定義する問合せでは、すべての主キー列が直接指定される必要があります。定義する問合せでは、UPPERなどのファンクションへの引数として主キー列を指定できません。

主キー・マテリアライズド・ビューの制限事項: この句は、オブジェクト・マテリアライズド・ビューには指定できません。WITH OBJECT IDを指定してマテリアライズドされたオブジェクトは暗黙的にリフレッシュされます。

関連項目:
主キー・マテリアライズド・ビューの詳細は、『Oracle Databaseアドバンスト・レプリケーション』および「主キー・マテリアライズド・ビューの作成例:」を参照してください。

WITH ROWID句

WITH ROWIDを指定すると、ROWIDマテリアライズド・ビューを作成できます。マテリアライズド・ビューがマスター表の主キー列をすべて含まない場合に、ROWIDマテリアライズド・ビューは有効です。ROWIDマテリアライズド・ビューは、単一表を基にしている必要があり、次のいずれも含むことができません。

- 固有ファンクションまたは集計ファンクション

- GROUP BY句または CONNECT BY句

- 副問合せ

- 結合

- 集合演算

WITH ROWID句は、定義する問合せに複数のマスター表がある場合は効果がありません。

完全リフレッシュが行われるまでは、マスター表の再編成後に、ROWIDマテリアライズド・ビューは高速リフレッシュされません。

ROWIDマテリアライズド・ビューの制限事項: この句は、オブジェクト・マテリアライズド・ビューには指定できません。WITH OBJECT IDを指定してマテリアライズドされたオブジェクトは暗黙的にリフレッシュされます。

関連項目:
「マテリアライズド集計ビューの作成例:」および「ROWIDマテリアライズド・ビューの作成例:」を参照してください。

USING ROLLBACK SEGMENT句

自動UNDOモードではロールバック・セグメントではなくUNDO表領域が使用されるため、データベースが自動UNDOモードの場合、この句は無効です。自動UNDOモードを使用することをお薦めします。この句は、ロールバック・セグメントが使用される以前のバージョンのOracle Databaseが含まれるレプリケーション環境との下位互換性のためにサポートされています。

rollback_segmentに、マテリアライズド・ビューのリフレッシュ中に使用するリモート・ロールバック・セグメントを指定します。

DEFAULT DEFAULTを使用すると、使用するロールバック・セグメントを自動的に選択できます。DEFAULTを指定した場合、rollback_segmentは指定できません。DEFAULTは、マテリアライズド・ビューを(作成ではなく)変更する場合に有効です。

関連項目:
「ALTER MATERIALIZED VIEW」

MASTER MASTERを使用すると、個々のマテリアライズド・ビュー用のリモート・マスター・サイトで使用されるリモート・ロールバック・セグメントを指定できます。

LOCAL LOCALを使用すると、マテリアライズド・ビューが含まれているローカル・リフレッシュ・グループで使用されるリモート・ロールバック・セグメントを指定できます。これはデフォルトです。

関連項目:
DBMS_REFRESHパッケージを使用するローカル・マテリアライズド・ビューのロールバック・セグメントの指定については、『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

rollback_segmentを指定しない場合、使用するロールバック・セグメントが自動的に選択されます。各マテリアライズド・ビューに対して1つのマスター・ロールバック・セグメントが格納され、マテリアライズド・ビューの作成およびリフレッシュ時に検証されます。複合マテリアライズド・ビューの場合、マスター・ロールバック・セグメントの指定は無視されます。

USING ... CONSTRAINTS句

USING ... CONSTRAINTS句を使用すると、リフレッシュ操作中にOracle Databaseでより多くのリライト・オプションを選択でき、リフレッシュをより効果的に実行できます。リフレッシュ操作中に、適用される制約のみに依存するのではなく、適用されていない制約(RELY状態のディメンションの関係や制約など)を使用できます。

USING TRUSTED CONSTRAINTS句では、NULL以外の仮想プライベート・データベース(VPD)ポリシーを持つ表の最上位にマテリアライズド・ビューを作成できます。この場合、マテリアライズド・ビューが適切に動作することを確認する必要があります。マテリアライズド・ビューの結果は、VPDポリシーによってフィルタ処理された行と列に基づいて計算されます。したがって、正しい結果を得るには、マテリアライズド・ビュー定義をVPDポリシーで調整する必要があります。USING TRUSTED CONSTRAINTS句を指定しないと、マスター表のVPDポリシーにより、マテリアライズド・ビューを作成できなくなります。

注意:
USING TRUSTED CONSTRAINTS句を指定すると、データベース管理者が信頼できると宣言したが、データベースで検証されていないディメンションおよび制約の情報を、Oracle Databaseで使用できます。ディメンションおよび制約の情報が有効であると、パフォーマンスを向上できる場合があります。ただし、この情報が無効であると、正常な状態が戻されても、リフレッシュ・プロシージャによってマテリアライズド・ビューが破損する場合があります。

この句を指定しない場合、USING ENFORCED CONSTRAINTSがデフォルトになります。

NEVER REFRESH句

NEVER REFRESHを指定すると、Oracle Databaseのリフレッシュ・メカニズムまたはパッケージ・プロシージャを使用したマテリアライズド・ビューのリフレッシュを回避できます。このようなプロシージャから発行された、マテリアライズド・ビューに対するREFRESH文は、無視されます。この句を指定すると、マテリアライズド・ビューでDML操作を実行できます。この句を無効にするには、ALTER MATERIALIZED VIEW ... REFRESH文を発行する必要があります。

FOR UPDATE句

FOR UPDATEを指定すると、副問合せ、主キー、オブジェクトまたはROWIDマテリアライズド・ビューを更新できます。アドバンスト・レプリケーションと組み合せて使用した場合、更新はマスターにも影響します。

evaluation_edition_clause

subqueryでエディショニングされたオブジェクトを参照する場合は、この句を指定する必要があります。この句を使用すると、エディショニングされたオブジェクトの名前解決時に検索されたエディション(評価エディション)を指定できます。

- CURRENT EDITIONを指定すると、このDDL文が実行されるエディションを検索できます。

- EDITION editionを指定すると、editionを検索できます。

- NULL EDITIONを指定することは、evaluation_edition_clauseを省略することと同じです。

evaluation_edition_clauseを省略すると、エディショニングされたオブジェクトは名前解決時に認識されなくなるためエラーが発生します。評価エディションを削除すると、マテリアライズド・ビューが無効になります。

関連項目:
マテリアライズド・ビューの評価エディションを指定する方法の詳細は、『Oracle Database開発ガイド』を参照してください。

query_rewrite_clause

query_rewrite_clauseを使用すると、マテリアライズド・ビューがクエリー・リライトに適格であるかどうかを指定できます。

ENABLE句 ENABLEを指定すると、クエリー・リライトでマテリアライズド・ビューを使用可能にできます。unusable_editions_clauseを同時に指定すると、使用禁止エディションでマテリアライズド・ビューがクエリー・リライトに使用されなくなります。

クエリー・リライトを使用可能にする場合の制限事項: クエリー・リライトを使用可能にする処理には、次の制限事項があります。

- マテリアライズド・ビューのすべてのユーザー定義ファンクションがDETERMINISTICである場合のみ、クエリー・リライトを使用可能にできます。

- 文内の式が反復可能な場合のみ、クエリー・リライトを使用可能にできます。たとえば、CURRENT_TIME、USER、順序値(たとえば、CURRVALまたはNEXTVAL疑似列)、またはSAMPLE句(マテリアライズド・ビューの変更内容と異なる行をサンプルとして抽出します)を含めることはできません。

注意:

- クエリー・リライトでのマテリアライズド・ビューの使用は、デフォルトでは無効です。この句を指定して、マテリアライズド・ビューをクエリー・リライトに適用できるようにする必要があります。

- マテリアライズド・ビューを作成した後は、DBMS_STATSパッケージを使用して、その統計情報を収集する必要があります。クエリー・リライトを最適化するために、このパッケージで生成した統計情報が必要です。

関連項目:

- クエリー・リライトの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

- DBMS_STATSパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

- クエリー・リライトに関する問題の診断については、DBMS_MVIEWパッケージのEXPLAIN_MVIEWプロシージャを参照してください。クエリー・リライトの問題の修正については、DBMS_MVIEWパッケージのTUNE_MVIEWプロシージャを参照してください。

- CREATE FUNCTION

DISABLE句 DISABLEを指定すると、マテリアライズド・ビューをクエリー・リライトで使用禁止にできます。使用禁止にしたマテリアライズド・ビューはリフレッシュ可能です。

unusable_editions_clause この句を使用すると、1つ以上のエディションでマテリアライズド・ビューがクエリー・リライトに適格でないことを指定できます。この句は、ENABLE句またはDISABLE句を指定しているかどうかにかかわらず指定できます。DISABLE句を指定すると、ALTER MATERIALIZED VIEW ... ENABLE QUERY REWRITE文を使用して、マテリアライズド・ビューが後にクエリー・リライトに使用できるようにされたときに、この句の効果が現れるようになります。

UNUSABLE BEFORE句 この句を使用すると、先行エディションでマテリアライズド・ビューがクエリー・リライトに適格でないことを指定できます。

- CURRENT EDITIONを指定すると、現在のエディションの先行エディションでマテリアライズド・ビューがクエリー・リライトに適格でなくなります。

- EDITION editionを指定すると、指定したeditionの先行エディションでマテリアライズド・ビューが適格でなくなります。

UNUSABLE BEGINNING WITH句 この句を使用すると、特定のエディションとそれ以降のエディションでマテリアライズド・ビューがクエリー・リライトに適格でなくなることを指定できます。

- CURRENT EDITIONを指定すると、現在のエディションとそれ以降のエディションで、マテリアライズド・ビューがクエリー・リライトに適格ではなくなります。

- EDITION editionを指定すると、指定したエディションとそれ以降のエディションで、マテリアライズド・ビューがクエリー・リライトに適格ではなくなります。

- NULL EDITIONを指定することは、UNUSABLE BEGINNING WITH句を省略することと同じです。

マテリアライズド・ビューは、クエリー・リライトに適格ではない各エディションに対する依存関係があります。これに該当するエディションが後に削除されると、依存関係が削除されます。ただし、そのマテリアライズド・ビューが無効にされることはありません。

AS subquery

マテリアライズド・ビューを定義する問合せを指定します。マテリアライズド・ビューの作成時に、この副問合せが実行され、実行結果がマテリアライズド・ビューに格納されます。この副問合せは、有効なSQL副問合せである必要があります。ただし、すべての副問合せに高速リフレッシュを適用できるわけではなく、すべての副問合せがクエリー・リライトに使用できるわけでもありません。

マテリアライズド・ビューを定義する問合せに関する注意事項:マテリアライズド・ビューには、次の注意事項があります。

- BUILD DEFERREDを指定する場合、定義する問合せはすぐには実行されません。

- マテリアライズド・ビューを定義する問合せのFROM句に指定する各表およびビューを、それを含むスキーマで修飾することをお薦めします。

- 仮想プライベート・データベース(VPD)ポリシーを持つマスター表から定義問合せが選択するマテリアライズド・ビューを作成するには、REFRESH USING TRUSTED CONSTRAINTS句を指定する必要があります。

マテリアライズド・ビューを定義する問合せに関する制限事項: マテリアライズド・ビュー問合せには、次の制限事項があります。

- マテリアライズド・ビューを定義する問合せでは、ユーザーSYSが所有する表、ビューまたはマテリアライズド・ビューから選択できますが、このようなマテリアライズド・ビューに対してQUERY REWRITEは使用できません。

- マテリアライズド・ビューを定義する問合せは、V$ビューまたはGV$ビューから選択できません。

- マテリアライズド・ビューを定義するとき、定義する問合せのSELECT構文のリストに副問合せを使用することはできません。ただし、WHERE句内など、定義する問合せの他の箇所には、副問合せを含めることができます。

- マテリアライズド・ビューを定義する問合せでは、flashback_query_clauseのAS OF句を使用することはできません。

- GROUP BY句を含むマテリアライズド結合ビューおよびマテリアライズド集計ビューは、索引構成表からは選択できません。

- マテリアライズド・ビューにLONGまたはLONG RAWのデータ型の列を含めることはできません。

- マテリアライズド・ビューに仮想列を含めることはできません。

- 一時表に対しては、マテリアライズド・ビュー・ログを作成できません。そのため、定義する問合せが一時表を参照する場合、マテリアライズド・ビューは高速リフレッシュ(FAST)に適応せず、この文でQUERY REWRITEを指定することもできません。

- 定義する問合せのFROM句が他のマテリアライズド・ビューを参照する場合、この文で作成するマテリアライズド・ビューのリフレッシュの前に、定義する問合せで参照されているマテリアライズド・ビューを常にリフレッシュしておく必要があります。

- 定義する問合せ内に結合式を持つマテリアライズド・ビューは、XMLデータ型の列を持つことができません。XMLデータ型には、XMLTypeおよびURIデータ型の列が含まれます。

クエリー・リライトが可能なマテリアライズド・ビューを作成する場合、次の制限があります。

- 定義する問合せには、ROWNUM、USER、SYSDATE、リモート表、順序、または(データベースやパッケージ状態の書込みまたは読取りを行う)PL/SQLファンクションに対する直接またはビューを介した参照を含めることはできません。

- マテリアライズド・ビューおよびマテリアライズド・ビューのマスター表はリモートにできません。

マテリアライズド・ビュー・ログを使用した高速リフレッシュ、またはステージング・ログを使用した同期リフレッシュにマテリアライズド・ビューが適格になるようにする場合は、いくつかの追加の制限事項が適用されます。

関連項目:

- 高速リフレッシュおよび同期リフレッシュに関連する制限事項については、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

- レプリケーションの制限事項は、『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

- 「マテリアライズド結合ビューの作成例:」、「副問合せマテリアライズド・ビューの作成例:」および「ネステッド・マテリアライズド・ビューの作成例:」を参照してください。

例

次の例では、「CREATE MATERIALIZED VIEW LOG」の「例」で作成したマテリアライズド・ログが必要です。

単純なマテリアライズド・ビューの作成例: 次の文は、hrスキーマ内のemployees表に基づいた非常に単純なマテリアライズド・ビューを作成します。

CREATE MATERIALIZED VIEW mv1 AS SELECT * FROM hr.employees;

デフォルトでは、REFRESH ON DEMANDのみが指定されている主キー・マテリアライズド・ビューが作成されます。マテリアライズド・ビュー・ログがemployeesに存在する場合は、高速リフレッシュできるようにmv1を変更できます。このようなログが存在しない場合は、mv1の完全リフレッシュのみが可能です。Oracle Databaseでは、mv1に対してデフォルトの記憶域プロパティが使用されます。この操作に必要な権限は、CREATE MATERIALIZED VIEWシステム権限と、hr.employeesに対するREADまたはSELECTオブジェクト権限のみです。

副問合せマテリアライズド・ビューの作成例 次の文は、リモート・データベースのshスキーマのcustomersおよびcountries表を基にした副問合せマテリアライズド・ビューを作成します。

CREATE MATERIALIZED VIEW foreign_customers FOR UPDATE
AS SELECT * FROM sh.customers@remote cu
WHERE EXISTS
(SELECT * FROM sh.countries@remote co
WHERE co.country_id = cu.country_id);

マテリアライズド集計ビューの作成例 次の文は、サンプル表sh.salesにマテリアライズド集計ビューを作成して移入し、デフォルトのリフレッシュ方法、モードおよび時刻を指定します。「高速リフレッシュ用のマテリアライズド・ビュー・ログの作成例:」で作成したマテリアライズド・ビュー・ログと、ここに示す2つの追加ログを使用します。

CREATE MATERIALIZED VIEW LOG ON times
WITH ROWID, SEQUENCE (time_id, calendar_year)
INCLUDING NEW VALUES;

CREATE MATERIALIZED VIEW LOG ON products
WITH ROWID, SEQUENCE (prod_id)
INCLUDING NEW VALUES;

CREATE MATERIALIZED VIEW sales_mv
BUILD IMMEDIATE
REFRESH FAST ON COMMIT
AS SELECT t.calendar_year, p.prod_id,
SUM(s.amount_sold) AS sum_sales
FROM times t, products p, sales s
WHERE t.time_id = s.time_id AND p.prod_id = s.prod_id
GROUP BY t.calendar_year, p.prod_id;

マテリアライズド結合ビューの作成例: 次の文は、サンプル・スキーマshの表を使用して、マテリアライズド集計ビューsales_by_month_by_stateを作成して移入します。マテリアライズド・ビューは、この文が正しく実行されるとすぐに移入されます。デフォルトで、次のマテリアライズド・ビューを定義する問合せを再実行することによって、後続のリフレッシュが行われます。

CREATE MATERIALIZED VIEW sales_by_month_by_state
TABLESPACE example
PARALLEL 4
BUILD IMMEDIATE
REFRESH COMPLETE
ENABLE QUERY REWRITE
AS SELECT t.calendar_month_desc, c.cust_state_province,
SUM(s.amount_sold) AS sum_sales
FROM times t, sales s, customers c
WHERE s.time_id = t.time_id AND s.cust_id = c.cust_id
GROUP BY t.calendar_month_desc, c.cust_state_province;

事前作成したマテリアライズド・ビューの作成例: 次の文は、既存の集計表sales_sum_tableに対するマテリアライズド集計ビューを作成します。

CREATE TABLE sales_sum_table
(month VARCHAR2(8), state VARCHAR2(40), sales NUMBER(10,2));

CREATE MATERIALIZED VIEW sales_sum_table
ON PREBUILT TABLE WITH REDUCED PRECISION
ENABLE QUERY REWRITE
AS SELECT t.calendar_month_desc AS month,
c.cust_state_province AS state,
SUM(s.amount_sold) AS sales
FROM times t, customers c, sales s
WHERE s.time_id = t.time_id AND s.cust_id = c.cust_id
GROUP BY t.calendar_month_desc, c.cust_state_province;

前述の例では、マテリアライズド・ビューは事前作成表と同じ名前を持ち、かつ事前作成表と同じデータ型で同じ数の列を持ちます。WITH REDUCED PRECISION句によって、マテリアライズド・ビュー列の精度と副問合せによって戻された値の精度の違いは許可されます。

主キー・マテリアライズド・ビューの作成例: 次の文は、サンプル表oe.product_informationに主キー・マテリアライズド・ビューcatalogを作成します。

CREATE MATERIALIZED VIEW catalog
REFRESH FAST START WITH SYSDATE NEXT SYSDATE + 1/4096
WITH PRIMARY KEY
AS SELECT * FROM product_information;

ROWIDマテリアライズド・ビューの作成例: 次の文は、サンプル表oe.ordersにROWIDマテリアライズド・ビューを作成します。

CREATE MATERIALIZED VIEW order_data REFRESH WITH ROWID
AS SELECT * FROM orders;

マテリアライズド・ビューの定期的リフレッシュ例: 次の文は、主キー・マテリアライズド・ビューemp_dataを作成し、サンプル表hr.employeesのデータを移入します。

CREATE MATERIALIZED VIEW LOG ON employees
WITH PRIMARY KEY
INCLUDING NEW VALUES;

CREATE MATERIALIZED VIEW emp_data
PCTFREE 5 PCTUSED 60
TABLESPACE example
STORAGE (INITIAL 50K)
REFRESH FAST NEXT sysdate + 7
AS SELECT * FROM employees;

前述の文にはSTART WITHパラメータが指定されていないため、Oracle Databaseでは、現行のSYSDATEを使用してNEXT値が評価され、最初の自動リフレッシュ時刻が判断されます。従業員表のマテリアライズド・ビュー・ログが作成されたため、マテリアライズド・ビュー作成の7日後から、7日ごとにマテリアライズド・ビューの高速リフレッシュが実行されます。

マテリアライズド・ビューが高速リフレッシュを行うための条件と一致するため、高速リフレッシュが行われます。また、前述の文では、マテリアライズド・ビューをメンテナンスするためにデータベースで使用される表の記憶特性も設定しています。

マテリアライズド・ビューの自動リフレッシュ時刻の例: 次の文は、remoteおよびlocalデータベースの従業員表を問い合せる複合マテリアライズド・ビューall_customersを作成します。

CREATE MATERIALIZED VIEW all_customers
PCTFREE 5 PCTUSED 60
TABLESPACE example
STORAGE (INITIAL 50K)
USING INDEX STORAGE (INITIAL 25K)
REFRESH START WITH ROUND(SYSDATE + 1) + 11/24
NEXT NEXT_DAY(TRUNC(SYSDATE), 'MONDAY') + 15/24
AS SELECT * FROM sh.customers@remote
UNION
SELECT * FROM sh.customers@local;

このマテリアライズド・ビューは、翌日の午前11:00に自動的にリフレッシュされ、その後は、毎週月曜日の午後3:00にリフレッシュされます。デフォルトのリフレッシュ方法は、FORCEです。定義する問合せにはUNION演算子が含まれますが、この演算子は高速リフレッシュでサポートされていないため、自動的に完全リフレッシュが実行されます。

前述の文では、マテリアライズド・ビューおよびこのマテリアライズド・ビューをメンテナンスするために使用される索引の記憶特性を次のように設定しています。

- 最初のSTORAGE句で、マテリアライズド・ビューの1番目と2番目のエクステントのサイズをそれぞれ50KBに設定します。

- 次のUSING INDEX句付きのSTORAGE句では、索引の1番目と2番目のエクステントのサイズをそれぞれ25KBに変更します。

高速リフレッシュ可能なマテリアライズド・ビューの作成例: 次の文は、product_informationおよびinventories表からWHERE条件で戻される行を制限するUNION集合演算子を使用して、サンプル・スキーマoeの表order_itemsから列を選択する高速リフレッシュが可能なマテリアライズド・ビューを作成します。order_itemsおよびproduct_informationのマテリアライズド・ビュー・ログは、CREATE MATERIALIZED VIEW LOGの「例」で作成されたものです。また、次の例では、oe.inventoriesのマテリアライズド・ビュー・ログが必要です。

CREATE MATERIALIZED VIEW LOG ON inventories
WITH (quantity_on_hand);

CREATE MATERIALIZED VIEW warranty_orders REFRESH FAST AS
SELECT order_id, line_item_id, product_id FROM order_items o
WHERE EXISTS
(SELECT * FROM inventories i WHERE o.product_id = i.product_id
AND i.quantity_on_hand IS NOT NULL)
UNION
SELECT order_id, line_item_id, product_id FROM order_items
WHERE quantity > 5;

マテリアライズド・ビューwarranty_ordersには、order_items(product_idを結合列とする)およびinventories(quantity_on_handをフィルタ列とする)で定義されたマテリアライズド・ビュー・ログが必要です。「マテリアライズド・ビュー・ログにフィルタ列を指定する例:」および「マテリアライズド・ビュー・ログに結合列を指定する例:」を参照してください。

ネステッド・マテリアライズド・ビューの作成例: 次の例は、前述の例のマテリアライズド・ビューをマスター表として使用し、サンプル・スキーマoeの特定の販売員で構成されるマテリアライズド・ビューを作成します。

CREATE MATERIALIZED VIEW my_warranty_orders
AS SELECT w.order_id, w.line_item_id, o.order_date
FROM warranty_orders w, orders o
WHERE o.order_id = o.order_id
AND o.sales_rep_id = 165;

CREATE MATERIALIZED VIEW LOG

用途

CREATE MATERIALIZED VIEW LOG文を使用すると、マテリアライズド・ビューのマスター表に関連する表マテリアライズド・ビュー・ログを作成できます。

注意:
下位互換性を保つために、MATERIALIZED VIEWのかわりにキーワードSNAPSHOTもサポートされています。

マテリアライズド・ビュー・ログは、高速リフレッシュと同期リフレッシュという、2種類のマテリアライズド・ビュー・リフレッシュに使用されます。

高速リフレッシュには、従来型のマテリアライズド・ビュー・ログが使用されます。高速リフレッシュ(増分リフレッシュとも呼ばれます)の実行時、マスター表のデータにDML変更が加えられていると、Oracle Databaseは、その変更を記述した行をマテリアライズド・ビュー・ログに格納し、そのマテリアライズド・ビュー・ログを使用して、マスター表に基づくマテリアライズド・ビューをリフレッシュします。

同期リフレッシュには、ステージング・ログという特別なマテリアライズド・ビュー・ログが使用されます。同期リフレッシュの実行時、DMLの変更は、最初にステージング・ログに記述されてから、マスター表とマテリアライズド・ビューに同時に適用されます。これにより、マスター表のデータとマテリアライズド・ビューのデータが、リフレッシュ・プロセス全体で同期されていることを保証できます。このリフレッシュ方法は、データ・ウェアハウス環境で役立ちます。

マテリアライズド・ビュー・ログがない場合、マテリアライズド・ビュー問合せが再実行され、マテリアライズド・ビューがリフレッシュされます。このプロセスが完全リフレッシュです。通常、完全リフレッシュを完了するまでの時間は、高速リフレッシュや同期リフレッシュよりも長くなります。

マテリアライズド・ビュー・ログは、マスター表と同一のスキーマ内のマスター・データベースにあります。マスター表に定義できるマテリアライズド・ビュー・ログは1つのみです。

マテリアライズド結合ビューを高速リフレッシュまたは同期リフレッシュする場合は、そのマテリアライズド・ビューが参照するマスター表ごとにマテリアライズド・ビュー・ログを作成する必要があります。

高速リフレッシュでは、タイムスタンプ・ベース・マテリアライズド・ビュー・ログと、コミットSCNベース・マテリアライズド・ビュー・ログという、2つのタイプのマテリアライズド・ビュー・ログをサポートします。タイムスタンプ・ベース・マテリアライズド・ビュー・ログは、タイムスタンプに基づきます。このログを使用する場合、マテリアライズド・ビューのリフレッシュを準備するためにいくつかの設定操作が必要です。コミットSCNベース・マテリアライズド・ビュー・ログは、タイムスタンプではなく、コミットSCNデータに基づきます。この場合、設定操作が必要なくなり、マテリアライズド・ビューのリフレッシュ速度を向上させることができます。COMMIT SCN句を指定すると、コミットSCNベース・マテリアライズド・ビュー・ログが作成されます。それ以外の場合は、タイムスタンプ・ベース・マテリアライズド・ビュー・ログが作成されます。COMMIT SCNを利用できるのは、新しく作成するマテリアライズド・ビュー・ログのみであることに注意してください。既存のマテリアライズド・ビュー・ログは、削除して再度作成しないかぎり、COMMIT SCNを追加するように変更できません。詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

同期リフレッシュは、タイムスタンプ・ベース・ステージング・ログのみをサポートします。

関連項目:

- マテリアライズド・ビューの概要は、「CREATE MATERIALIZED VIEW」、「ALTER MATERIALIZED VIEW」、『Oracle Database概要』、『Oracle Databaseデータ・ウェアハウス・ガイド』および『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

- マテリアライズド・ビュー・ログの変更については、「ALTER MATERIALIZED VIEW LOG」を参照してください。

- マテリアライズド・ビュー・ログの削除については、「DROP MATERIALIZED VIEW LOG」を参照してください。

- ダイレクト・ローダー・ログの使用については、『Oracle Databaseユーティリティ』を参照してください。

前提条件

マテリアライズド・ビュー・ログを作成するために必要な権限は、マテリアライズド・ビュー・ログに関連付けられた基礎となるオブジェクトの作成に必要な権限と直接関連しています。

- マスター表を所有しているユーザーにCREATE TABLE権限がある場合、関連するマテリアライズド・ビュー・ログを作成できます。

- 他のユーザーのスキーマ内に表のマテリアライズド・ビュー・ログを作成する場合は、CREATE ANY TABLEシステム権限、COMMENT ANY TABLEシステム権限、およびマスター表に対するREADまたはSELECTオブジェクト権限またはREAD ANY TABLEまたはSELECT ANY TABLEシステム権限が必要です。

どちらの場合も、マテリアライズド・ビュー・ログの所有者には、マテリアライズド・ビュー・ログを格納するための表領域への十分な割当て制限またはUNLIMITED TABLESPACEシステム権限が必要です。

関連項目:
マテリアライズド・ビュー・ログを作成する場合の前提条件については、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

構文

create_materialized_vw_log::=

(physical_attributes_clause::=、logging_clause::=、parallel_clause::=、table_partitioning_clauses ::= (「CREATE TABLE」の項)、new_values_clause::=、mv_log_purge_clause::=、for_refresh_clause::=を参照。)

physical_attributes_clause::=

(storage_clause::=を参照)

logging_clause::=

parallel_clause::=

new_values_clause::=

mv_log_purge_clause::=

for_refresh_clause::=

セマンティクス

schema

マテリアライズド・ビュー・ログのマスター表が含まれているスキーマを指定します。schemaを省略した場合、マスター表は自分のスキーマ内に含まれているとみなされます。マテリアライズド・ビュー・ログは、マスター表のスキーマ内に作成されます。なお、ユーザーSYSのスキーマ内の表に対しては、マテリアライズド・ビュー・ログを作成できません。

table

マテリアライズド・ビュー・ログを作成するマスター表の名前を指定します。マスター表内で暗号化されるマテリアライズド・ビュー・ログの列は、同じ暗号化アルゴリズムを使用して暗号化されます。

マテリアライズド・ビュー・ログのマスター表の制限事項 マテリアライズド・ビュー・ログのマスター表には、次の制限事項があります。

- 一時表またはビューに対しては、マテリアライズド・ビュー・ログを作成できません。

- 仮想列を含むマスター表に対しては、マテリアライズド・ビュー・ログを作成できません。

関連項目:
「高速リフレッシュ用のマテリアライズド・ビュー・ログの作成例:」

physical_attributes_clause

physical_attributes_clauseを使用すると、マテリアライズド・ビュー・ログにおける物理特性および記憶特性を定義できます。

関連項目:
デフォルト値を含むこれらの句の詳細は、「physical_attributes_clause」および「storage_clause」を参照してください。

TABLESPACE句

マテリアライズド・ビュー・ログを作成する表領域を指定します。この句を省略した場合、マテリアライズド・ビュー・ログのスキーマのデフォルト表領域内にマテリアライズド・ビュー・ログが作成されます。

logging_clause

LOGGINGまたはNOLOGGINGを指定すると、マテリアライズド・ビュー・ログのロギング特性を設定できます。デフォルトは、マテリアライズド・ビュー・ログが存在する表領域のロギング特性です。

関連項目:
この句の詳細は、「logging_clause」を参照してください。

CACHE | NOCACHE

アクセス頻度の高いデータについて、CACHEは、全表スキャンの実行時にこのログ用に取り出された各ブロックを、バッファ・キャッシュの最低使用頻度(LRU)リストの最高使用頻度側に入れることを指定します。この属性は、小規模な参照表で有効です。

NOCACHEは、ブロックをLRUリストの最低使用頻度側に入れることを指定します。デフォルトはNOCACHEです。

注意:
NOCACHEは、storage_clauseにKEEPを指定したマテリアライズド・ビュー・ログには、影響しません。

関連項目:
CACHEまたはNOCACHEの指定の詳細は、「CREATE TABLE」を参照してください。

parallel_clause

parallel_clauseを使用すると、パラレル操作でマテリアライズド・ビュー・ログをサポートするかどうかを指定できます。

この句の詳細は、「CREATE TABLE」の「parallel_clause」を参照してください。

table_partitioning_clauses

table_partitioning_clausesを使用すると、マテリアライズド・ビュー・ログが、指定された範囲の値またはハッシュ・ファンクションでパーティション化されることを指定できます。マテリアライズド・ビュー・ログのパーティション化は、表のパーティション化と同じです。

関連項目:
「CREATE TABLE」の「table_partitioning_clauses」を参照してください。

WITH句

WITH句を使用すると、マスター内の行の更新時に、マテリアライズド・ビュー・ログに主キー、ROWID、オブジェクトIDまたはこれらの行識別子の組合せを記録するかどうかを指定できます。また、マテリアライズド・ビュー・ログに順序を追加し、レコードに対する追加の順序情報を提供することもできます。

この句を指定すると、マテリアライズド・ビュー・ログがフィルタ列(副問合せマテリアライズド・ビューが参照する主キー以外の列)または結合列(副問合せのWHERE句で結合を定義する主キー以外の列)として参照する追加の列を記録するかどうかを指定できます。

この句を指定しない場合、またはPRIMARY KEY、ROWIDまたはOBJECT IDなしで句を指定する場合は、デフォルトで主キー値が格納されます。ただし、作成時にOBJECT IDまたはROWIDのみを指定した場合は、主キー値は暗黙的に格納されません。明示的に、またはデフォルトで作成された主キー・ログによって、主キー制約の追加の検証が実行されます。

OBJECT ID OBJECT IDを指定すると、更新されるすべての行に対するシステム生成またはユーザー定義のオブジェクト識別子をマテリアライズド・ビュー・ログに記録することを指定できます。

OBJECT IDの制限事項: OBJECT IDは、オブジェクト表のログの作成時のみに指定でき、記憶表用には指定できません。

PRIMARY KEY PRIMARY KEYを指定すると、更新されるすべての行の主キーをマテリアライズド・ビュー・ログに記録することを指定できます。

ROWID ROWIDを指定すると、更新されるすべての行のROWIDをマテリアライズド・ビュー・ログに記録することを指定できます。

SEQUENCE SEQUENCEを指定すると、追加の順序情報を提供する順序値をマテリアライズド・ビュー・ログに記録できます。更新操作後の高速リフレッシュには、順序番号が必要です。

関連項目:
マテリアライズド・ビュー・ログの順序番号の使用およびこの句の使用例については、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

COMMIT SCN COMMIT SCN句を省略すると、マテリアライズド・ビュー・ログはタイムスタンプ・ベースになり、マテリアライズド・ビューをリフレッシュするための準備にいくつかの設定操作が必要になります。COMMIT SCNを指定すると、タイムスタンプのかわりにコミットSCNデータが使用されます。この設定により、設定操作が必要なくなり、マテリアライズド・ビューのリフレッシュ速度を向上できます。

コミットSCNベース・マテリアライズド・ビュー・ログを使用するマスター表には、次のようなローカル・マテリアライズド・ビューを作成できます(ON COMMITおよびON DEMANDを含む)。

- マテリアライズド集計ビュー(単一表に対するマテリアライズド集計ビューを含む)

- マテリアライズド結合ビュー

- 主キーおよびROWIDに基づく単一表マテリアライズド・ビュー

- UNION ALLマテリアライズド・ビュー(各UNION ALLブランチはここに示したマテリアライズド・ビューのいずれかのタイプ)

コミットSCNベース・マテリアライズド・ビュー・ログを使用するマスター表には、リモート・マテリアライズド・ビューを作成できません。

COMMIT SCNの制限事項: COMMIT SCNには、次の制限事項があります。

- 1つ以上のLOB列を持つ表に対するCOMMIT SCNの使用はサポートされておらず、ORA-32421が戻されます。

- 異なるマテリアライズド・ビュー・ログを使用するマスター表(つまり、タイムスタンプ・ベース・マテリアライズド・ビュー・ログを使用するマスター表およびコミットSCNベース・マテリアライズド・ビュー・ログを使用するマスター表)にはマテリアライズド・ビューを作成できず、ORA-32414が戻されます。

- COMMIT SCNを指定すると、FOR SYNCHRONOUS REFRESHが指定できなくなります。

column 更新されるすべての行に対して、マテリアライズド・ビュー・ログに値を記録する列を指定します。通常、フィルタ列および結合列を指定します。

WITH句の制限事項: この句には、次の制限事項があります。

- 各マテリアライズド・ビュー・ログに指定できるのは、PRIMARY KEY、ROWID、OBJECT ID、SEQUENCE、および列リストを1つずつです。

- 主キー列は、マテリアライズド・ビュー・ログに暗黙的に記録されます。そのため、columnが主キー列の1つを含む場合は、次の結合はいずれも指定できません。

WITH ... PRIMARY KEY ... (column)
WITH ... (column) ... PRIMARY KEY
WITH (column)

関連項目:

- マテリアライズド・ビュー・ログに値を明示的および暗黙的に含める方法については、「CREATE MATERIALIZED VIEW」を参照してください。

- フィルタ列および結合列については、『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

- 「マテリアライズド・ビュー・ログにフィルタ列を指定する例:」および「マテリアライズド・ビュー・ログに結合列を指定する例:」を参照してください。

NEW VALUES句

NEW VALUES句を使用すると、更新DML操作で、古い値と新しい値の両方をマテリアライズド・ビュー・ログに保存するかどうかを指定できます。

関連項目:
「マテリアライズド・ビュー・ログに新しい値を追加する例:」

INCLUDING INCLUDINGを指定すると、新しい値と古い値の両方をログに保存できます。このログが単一表マテリアライズド集計ビューの表用で、マテリアライズド・ビューに高速リフレッシュを実行する場合、INCLUDINGを指定してください。

EXCLUDING EXCLUDINGを指定すると、ログに新しい値が記録されなくなります。これはデフォルトです。この句を使用すると、新しい値の記録によるオーバーヘッドを回避できます。マスター表に高速リフレッシュが可能な単一表マテリアライズド集計ビューが定義されている場合は、この句を使用しないでください。

mv_log_purge_clause

この句を使用すると、マテリアライズド・ビュー・ログのパージ時間を指定できます。

- IMMEDIATE SYNCHRONOUS: マテリアライズド・ビュー・ログは、リフレッシュの直後に消去されます。これはデフォルトです。

- IMMEDIATE ASYNCHRONOUS: マテリアライズド・ビュー・ログは、リフレッシュ操作後に、別のOracleスケジューラ・ジョブで消去されます。

- START WITH、NEXTおよびREPEAT INTERVALは、CREATEまたはALTER MATERIALIZED VIEW LOG文で開始される、マテリアライズド・ビューのリフレッシュに依存しないスケジュール実行のパージを設定します。これは、CREATEまたはALTER MATERIALIZED VIEW文の、スケジュール実行のリフレッシュ構文と似ています。

- START WITH日時式は、パージをいつ開始するかを指定します。

- NEXT日時式は、パージの次の実行時間を計算します。

REPEAT INTERVALを指定すると、次の実行時間は、SYSDATE + interval_exprとなります。

CREATE MATERIALIZED VIEW LOG文でスケジュール実行のパージを指定すると、ログ・パージを実行するOracleスケジューラ・ジョブが作成されます。このジョブは、DBMS_SNAPSHOT.PURGE_LOGプロシージャをコールして、マテリアライズド・ビュー・ログを消去します。この処理によって、マテリアライズド・ビューを何度もリフレッシュする場合のパージ・コストを軽減できます。

mv_log_purge_clauseの制限事項: この句は、一時表のマテリアライズド・ビュー・ログでは無効です。

関連項目:
マテリアライズド・ビュー・ログのパージの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

for_refresh_clause

この句を使用すると、マテリアライズド・ビュー・ログを使用するリフレッシュ方法を指定できます。指定できるリフレッシュ方法は、マスター表ごとに1つのみです。

FOR SYNCHRONOUS REFRESH この句を指定すると、同期リフレッシュに使用可能なステージング・ログを作成できます。staging_log_nameを使用すると、作成するステージング・ログの名前を指定できます。このステージング・ログは、マスター表が存在するスキーマ内に作成されます。

ステージング・ログを作成すると、マスター表に対する直接のDML操作は実行できなくなります。データの変更操作の準備と実行には、DBMS_SYNC_REFRESHパッケージに含まれるプロシージャを使用する必要があります。

同期リフレッシュの制限事項: 同期リフレッシュには、次の制限事項が適用されます。

- FOR SYNCHRONOUS REFRESHを指定すると、COMMIT SCNは指定できなくなります。

- 同期リフレッシュの対象にするには、マスター表が次の条件を満たしている必要があります。

- マスター表がファクト表の場合は、その表がパーティション化されている必要があります。

- マスター表は、キーを保持している必要があります。マスター表がディメンション表の場合は、その表に対して定義された主キーを保持している必要があります。マスター表がファクト表の場合は、そのファクト表に結合されたディメンション表の外部キーになる列のセットがキーになるとみなされます。

- マスター表は、その表に対して定義されたNULL以外の仮想プライベート・データベース(VPD)ポリシーやトリガーを保持できません。

Oracle Databaseでは、上記のすべての条件が満たされていなくても、マスター表に対するステージング・ログを作成できます。ただし、そのマスター表は同期リフレッシュの対象にはなりません。

- マスター表に対する既存のマテリアライズド・ビューは、REFRESH ON DEMANDモードのマテリアライズド・ビューであることが必要です。既存のマテリアライズド・ビューがREFRESH ON COMMITモードのマテリアライズド・ビューの場合は、ALTER MATERIALIZED VIEWのalter_mv_refresh句でREFRESH ON DEMANDモードのマテリアライズド・ビューに変換してから、ステージング・ログを作成できます。

関連項目:

- 同期リフレッシュを使用する手順の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

- DBMS_SYNC_REFRESHパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

FOR FAST REFRESH この句を指定すると、高速リフレッシュに使用可能なマテリアライズド・ビューを作成できます。このマテリアライズド・ビュー・ログは、マスター表が存在するスキーマ内に作成されます。これはデフォルトです。

例

高速リフレッシュ用のマテリアライズド・ビュー・ログの作成例: 次の文では、物理特性および記憶特性を指定するoe.customers表に対するマテリアライズド・ビュー・ログを作成します。

CREATE MATERIALIZED VIEW LOG ON customers
PCTFREE 5
TABLESPACE example
STORAGE (INITIAL 10K);

customersのマテリアライズド・ビュー・ログは、主キー・マテリアライズド・ビューの高速リフレッシュのみサポートします。

次の文は、ROWID句を指定してマテリアライズド・ビュー・ログの別のバージョンを作成します。これによって、高速リフレッシュが使用可能になるマテリアライズド・ビューのタイプが追加されます。

CREATE MATERIALIZED VIEW LOG ON customers WITH PRIMARY KEY, ROWID;

このcustomersのマテリアライズド・ビュー・ログによって、ROWIDマテリアライズド・ビューおよびマテリアライズド結合ビューに対する高速リフレッシュが実行可能になります。マテリアライズド集計ビューの高速リフレッシュを指定するには、次の例に示すとおり、SEQUENCEおよびINCLUDING NEW VALUES句も指定する必要があります。

マテリアライズド・ビュー・ログにパージの繰返し間隔を指定する例: 次の文は、oe.orders表にマテリアライズド・ビュー・ログを作成します。このログの内容は、マテリアライズド・ビュー・ログの作成日の5日後から5日間に1回、消去されます。

CREATE MATERIALIZED VIEW LOG ON orders
PCTFREE 5
TABLESPACE example
STORAGE (INITIAL 10K)
PURGE REPEAT INTERVAL '5' DAY;

マテリアライズド・ビュー・ログにフィルタ列を指定する例 次の文は、sh.sales表にマテリアライズド・ビュー・ログを作成します。この文は、「マテリアライズド集計ビューの作成例」で使用します。ここでは、このマテリアライズド・ビューで参照される表のすべての列をフィルタ列として指定します。

CREATE MATERIALIZED VIEW LOG ON sales
WITH ROWID, SEQUENCE(amount_sold, time_id, prod_id)
INCLUDING NEW VALUES;

マテリアライズド・ビュー・ログに結合列を指定する例: 次の文は、サンプル・スキーマoeのorder_items表にマテリアライズド・ビュー・ログを作成します。ログは、主キーおよび「高速リフレッシュ可能なマテリアライズド・ビューの作成例:」で結合列として使用したproduct_idを記録します。

CREATE MATERIALIZED VIEW LOG ON order_items WITH (product_id);

マテリアライズド・ビュー・ログに新しい値を追加する例: 次の例は、INCLUDING NEW VALUESを指定するoe.product_information表にマテリアライズド・ビュー・ログを作成します。

CREATE MATERIALIZED VIEW LOG ON product_information
WITH ROWID, SEQUENCE (list_price, min_price, category_id), PRIMARY KEY
INCLUDING NEW VALUES;

次の文は、マテリアライズド集計ビューを作成し、product_informationログを使用します。

CREATE MATERIALIZED VIEW products_mv
REFRESH FAST ON COMMIT
AS SELECT SUM(list_price - min_price), category_id
FROM product_information
GROUP BY category_id;

マスター表に定義されたログに古い値と新しい値の両方が含まれるため、このマテリアライズド・ビューでは、高速リフレッシュを実行できます。

同期リフレッシュ用のステージング・ログの作成例: 次の文では、sh.salesファクト表に対するステージング・ログを作成します。このステージング・ログには、mystage_logという名前が付けられ、shスキーマに格納されます。これは、同期リフレッシュに使用できます。

CREATE MATERIALIZED VIEW LOG ON sales
PCTFREE 5
TABLESPACE example
STORAGE (INITIAL 10K)
FOR SYNCHRONOUS REFRESH USING mystage_log;

CREATE MATERIALIZED ZONEMAP

注意:
CREATE MATERIALIZED ZONEMAP文は、Oracle Database 12cリリース1(12.1.0.2)から使用可能です。

用途

CREATE MATERIALIZED ZONEMAP文を使用して、ゾーン・マップを作成します。

ゾーン・マップは、ゾーンの情報を格納する特別なタイプのマテリアライズド・ビューです。ゾーンは、1つ以上の表の列の値を格納するディスク上の一連の連続したデータ・ブロックです。通常、複数のゾーンが表の列のすべての値を格納するために必要です。ゾーン・マップは、各ゾーンに格納された最小および最大の表の列値を追跡します。

ゾーン・マップによって、表スキャンのI/OおよびCPUコストを削減できます。SQL文にゾーン・マップの列の述語が含まれる場合、データベースは述語の値と各ゾーンに格納されている最小および最大の表の列値を比較して、SQL実行中に読み込まれるゾーンを判断します。

Oracle Databaseでは次の種類のゾーン・マップがサポートされます。

- 基本的なゾーン・マップは単一の表に定義され、表の指定された列のゾーン情報を保持します。
create_zonemap_on_table句を指定するか、定義する副問合せのFROM句で単一の表を指定するcreate_zonemap_as_subquery句を指定して、基本的なゾーン・マップを作成できます。

- 結合ゾーン・マップは2つ以上の結合した表に定義され、結合した表の指定された列のゾーン情報を保持します。
create_zonemap_as_subquery句を指定して、結合ゾーン・マップを作成できます。定義する副問合せのFROM句では、1つ以上の他の表と左側外部結合されている表を指定する必要があります。

ゾーン・マップは、データ・ウェアハウス環境のスター・スキーマで一般的に使用されます。ただし、ゾーン・マップの作成にはスター・スキーマは必須ではありません。どちらの場合も、このマニュアルでは、スター・スキーマという用語を使用してゾーン・マップの表を参照します。結合ゾーン・マップでは、結合の外部表は、ファクト表と呼ばれ、この表を結合する表をディメンション表と呼びます。これらの表をあわせて、ゾーン・マップ実表と呼びます。基本的なゾーン・マップでは、ゾーン・マップが定義される単一の表は、ゾーン・マップのファクト表および実表と呼ばれます。

ゾーン・マップの実表をパーティション表またはコンポジット・パーティション表にすることができます。この場合、ゾーン・マップは、各パーティション(およびサブパーティション)と各ゾーンの最小および最大の列値を保持します。

属性クラスタリングの使用に関係なくゾーン・マップを作成できます。

- 属性クラスタリングで使用するゾーン・マップを作成するには、次の方法のいずれかを使用します。

- CREATE MATERIALIZED ZONEMAP文を使用し、ゾーン・マップの属性クラスタ列を含めます。詳細は、CREATE TABLEのattribute_clustering_clauseおよびALTER TABLEのattribute_clustering_clause句を参照してください。

- 属性クラスタ表の作成時または変更時にWITH MATERIALIZED ZONEMAP句を指定します。詳細は、CREATE TABLEのzonemap_clauseおよびALTER TABLEのMODIFY CLUSTERING句を参照してください。

- 属性クラスタリングを使用しないゾーン・マップを作成するには、CREATE MATERIALIZED ZONEMAP文を使用し、ゾーン・マップにクラスタリングされている属性がない列を含めます。

関連項目:
ゾーン・マップの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

前提条件

自分のスキーマへのゾーン・マップの作成

- CREATE MATERIALIZED VIEWシステム権限と、CREATE TABLEまたはCREATE ANY TABLEのいずれかのシステム権限が必要です。

- 所有していないゾーン・マップの実表にアクセスする場合は、各表に対するREADまたはSELECTオブジェクト権限またはREAD ANY TABLEまたはSELECT ANY TABLEシステム権限が必要です。

別のユーザーのスキーマへのゾーン・マップの作成

- CREATE ANY MATERIALIZED VIEWシステム権限が必要です。

- ゾーン・マップの所有者には、CREATE TABLEシステム権限が必要です。スキーマ所有者が所有していないゾーン・マップの実表にアクセスする場合は、各表に対するREADまたはSELECTオブジェクト権限またはREAD ANY TABLEまたはSELECT ANY TABLEシステム権限が所有者に必要です。

REFRESH ON COMMITモードのゾーン・マップを作成する場合(REFRESH ON COMMIT句を使用する場合)は、前述の権限の他に、所有していない実表に対するON COMMIT REFRESHオブジェクト権限、またはON COMMIT REFRESHシステム権限が必要です。マテリアライズド・ビューと異なり、実表のマテリアライズド・ビュー・ログがなくても、REFRESH ON COMMITモードのゾーン・マップを作成できます。

ゾーン・マップを作成する場合、ゾーン・マップのすべてのスキーマに1つの内部表および少なくとも1つの索引が作成されます。これらのオブジェクトは、ゾーン・マップのデータをメンテナンスするために使用されます。これらのオブジェクトの作成に必要な権限を持つか、これらのオブジェクトを格納するターゲット表領域への十分な割当て制限があるか、UNLIMITED TABLESPACEシステム権限を持つ必要があります。

構文

create_materialized_zonemap::=

create_zonemap_on_table::=

create_zonemap_as_subquery::=

zonemap_attributes::=

zonemap_refresh_clause::=

注意:
zonemap_refresh_clauseを指定する場合、REFRESHキーワードの後に少なくとも1つの句を指定する必要があります。

セマンティクス

create_zonemap_on_table

この句を使用して、基本的なゾーン・マップを作成します。

ON句 ON句には、まずファクト表を指定し、次にゾーン・マップに含めるファクト表の1つ以上の列をカッコ内に指定します。

指定されたファクト表の列ごとに、ゾーン・マップの2つの列が作成されます。これらの2つの列には、各ゾーンのファクト表の列の最小および最大の値が含まれます。最初に指定したファクト表columnに対してMIN_1_columnおよびMAX_1_column、2番目に指定したファクト表columnに対してMIN_2_columnおよびMAX_2_columnといった形式でゾーン・マップ列の名前が生成されます。

schemaを指定しない場合、自分のスキーマ内にファクト表があるとみなされます。ファクト表には表またはマテリアライズド・ビューを指定できます。

create_zonemap_as_subquery

この句を使用して、基本的なゾーン・マップまたは結合ゾーン・マップを作成します。基本的なゾーン・マップを作成するには、定義する副問合せのFROM句の単一の実表を指定します。結合ゾーン・マップを作成するには、定義する副問合せのFROM句の1つ以上の他の表に左側外部結合される表を指定します。

column_alias ゾーン・マップに含める表の列ごとに列の別名を指定できます。列の別名のリストによって、競合する列名が明示的に解決されます。したがって、定義する副問合せのSELECTリストで別名を指定する必要がなくなります。この句で列の別名を指定する場合は、定義する副問合せのSELECTリストで各列の別名を指定する必要があります。指定する最初の列の別名は、SELECTリストの最初の列のSYS_OP_ZONE_IDファンクション式に対応するZONE_ID$である必要があります。

AS query_block ゾーン・マップの定義する副問合せを指定します。副問合せは、単一のquery_blockで構成する必要があります。query_blockのSELECT、FROM、WHEREおよびGROUP BY句のみ指定できます。それらの句は次の要件を満たす必要があります。

- SELECTリストの最初の列は、SYS_OP_ZONE_IDファンクション式である必要があります。詳細は、SYS_OP_ZONE_IDを参照してください。

- SELECTリストの残りの列は、ゾーン・マップに含める列の最小および最大の値を戻すファンクション式である必要があります。列ごとに、次の形式のファンクション式の組を指定します。

MIN([table.]column), MAX([table.]column)

tableには、列を含む表の名前または表の別名を指定します。表にはファクト表またはディメンション表を指定できます。columnには、列の名前または列の別名を指定します。

- FROM句にはファクト表のみ、またはファクト表とそれぞれがファクト表に左側外部結合されている1つ以上のディメンション表を指定できます。FROM句にLEFT [OUTER] JOIN構文を指定したり、外部結合演算子(+)をWHERE句の結合条件のディメンション表の列に適用できます。表の別名をFROM句の任意の表にオプションで指定できます。ファクト表およびディメンション表に表またはマテリアライズド・ビューを指定できます。

- WHERE句には、外部結合演算子(+)を使用した左側外部結合条件のみ指定できます。

- SELECTリストの最初の列に指定したSYS_OP_ZONE_IDファンクション式を使用して、GROUP BY句を指定する必要があります。

schema

ゾーン・マップを含むスキーマを指定します。schemaを指定しない場合、自分のスキーマにそのゾーン・マップが作成されます。

zonemap_name

変更するゾーン・マップの名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。

zonemap_attributes

この句を使用してゾーン・マップの次の属性を指定します: TABLESPACE、SCALE、PCTFREE、PCTUSEDおよびCACHEまたはNOCACHE。

TABLESPACE ゾーン・マップを作成するtablespaceを指定します。この句を省略すると、ゾーン・マップを含むスキーマのデフォルト表領域にゾーン・マップが作成されます。

SCALE この句を使用すると、ゾーンを形成する連続したディスク・ブロックの数を判断するゾーン・マップ・スケールを指定できます。このスケールは、2の累乗を表す整数値です。たとえば、10のスケールの場合、2の10乗(1024)まで連続したディスク・ブロックがゾーンを形成することを意味します。integerの場合、4から16の値(それらの値を含む)を指定します。推奨値は10です。この値はデフォルトです。

PCTFREE ゾーン・マップの各データ・ブロック内で、ゾーン・マップの行を将来更新するために確保しておく領域の割合を表すintegerを指定します。整数値の範囲は0から99の値(それらの値を含む)です。デフォルト値は10です。PCTFREEパラメータの詳細は、physical_attributes_clauseを参照してください。

PCTUSED 使用済領域のうち、ゾーン・マップのデータ・ブロックごとに確保される最小限の割合を表すintegerを指定します。整数値の範囲は0から99の値(それらの値を含む)です。デフォルト値は40です。PCTUSEDパラメータの詳細は、physical_attributes_clauseを参照してください。

CACHE | NOCACHE 頻繁にアクセスするデータの場合、CACHEを指定すると、全表スキャンの実行時、このゾーン・マップに取得されたブロックは、バッファ・キャッシュで最低使用頻度(LRU)リストの最高使用頻度側に配置されます。

NOCACHEは、ブロックをLRUリストの最低使用頻度側に入れることを指定します。デフォルトはNOCACHEです。

zonemap_refresh_clause

この句を使用して、ゾーン・マップのデフォルトのリフレッシュ方法およびモードを指定します。リフレッシュ方法(FAST、COMPLETEまたはFORCE)を指定しないと、デフォルトの方法でFORCEが指定されます。リフレッシュ・モード(ON句)を指定しない場合、ON LOAD DATA MOVEMENTがデフォルト・モードです。

FAST FASTを指定すると、高速リフレッシュ方法が使用されます。この方法では、実表に対して行われた変更に従ってリフレッシュを実行します。ゾーン・マップがマテリアライズド・ビューのタイプとして内部的に実装される場合、実表のマテリアライズド・ビュー・ログはゾーン・マップの高速リフレッシュを実行するために必要ではありません。

COMPLETE COMPLETEを指定すると、完全リフレッシュ方法が使用されます。この方法は、ゾーン・マップを定義する問合せを実行することによって実装されます。完全リフレッシュを要求すると、高速リフレッシュが実行可能であっても、完全リフレッシュが実行されます。

FORCE FORCEを指定すると、リフレッシュ時に、高速リフレッシュが可能な場合は高速リフレッシュを実行し、可能でない場合は完全リフレッシュを実行するように指定できます。これはデフォルトです。

ON DEMAND ON DEMANDを指定して、ALTER MATERIALIZED ZONEMAP ... REBUILD文を手動で発行しない場合にデータベースでゾーン・マップをリフレッシュしないことを示します。この句を指定する場合、ゾーン・マップがREFRESH ON DEMANDモードのゾーン・マップと呼ばれます。ゾーン・マップの再作成の詳細は、ALTER MATERIALIZED ZONEMAPのドキュメントのREBUILDを参照してください。

ON COMMIT ON COMMITを指定すると、ゾーン・マップの実表に対するトランザクションをコミットするときに、必ずリフレッシュが実行されるように指定できます。この句を指定する場合、ゾーン・マップがREFRESH ON COMMITモードのゾーン・マップと呼ばれます。この句を指定すると、リフレッシュ操作がコミット処理の一部として行われるため、コミットの完了に時間がかかります。

ON LOAD ON LOADを指定して、INSERT文またはMERGE操作のいずれかの結果として実行されるダイレクト・パス・インサート(シリアルまたはパラレル)の最後にリフレッシュが発生することを示します。

ON DATA MOVEMENT ON DATA MOVEMENTを指定して、次のデータ移動操作の最後にリフレッシュが発生することを示します。

- DBMS_REDEFINITIONパッケージを使用したデータの再定義

- ALTER TABLEの次の句で指定される表パーティションのメンテナンス操作: coalesce_table、merge_table_partitions、move_table_partitionおよびsplit_table_partition

ON LOAD DATA MOVEMENT ON LOAD DATA MOVEMENTを指定して、ダイレクト・パス・インサートまたはデータ移動操作の最後にリフレッシュが発生することを示します。これはデフォルトです。

ENABLE | DISABLE PRUNING

この句を使用すると、プルーニングのゾーン・マップの使用を制御できます。

- ENABLE PRUNINGを指定して、プルーニングのゾーン・マップの使用を有効化します。これはデフォルトです。

- DISABLE PRUNINGを指定して、プルーニングのゾーン・マップの使用を無効化します。オプティマイザはプルーニングのゾーン・マップを使用しませんが、データベースは継続してゾーン・マップを保持します。

設定がENABLE PRUNINGである場合、オプティマイザは、次の条件のいずれかを含むSQL操作中にプルーニングのゾーン・マップの使用を検討します。

- 比較条件: =、<=、<、>=、>
片側が列名で反対側がリテラルまたはバインド変数の簡単な比較条件である必要があります。次に例を示します。

WHERE country_name = 'United States of America'
WHERE country_name = :country1
WHERE 10000 >= salary

- IN条件
IN条件は、左側に列名、右側にリテラルまたはバインド変数の式リストを指定する必要があります。次に例を示します。

WHERE country_name IN ('Germany', 'India', 'United Kingdom')
WHERE country_name IN (:country1, :country2, :country3)
WHERE prod_id IN (20, 48, 132, 143)

- LIKE条件
LIKE条件は、左側に列名、右側にテキスト・リテラルを指定する必要があります。テキスト・リテラルはLIKE条件のパターンで、少なくとも1つのパターン一致文字を含む必要があります。有効なパターン一致文字は、1つの文字と完全に一致するアンダースコア(_)およびゼロ以上の文字と一致するパーセント記号(%)です。パターンの最初の文字にパターン一致文字を指定できません。次に例を示します。

WHERE prod_name LIKE 'DVD%'
WHERE prod_name LIKE 'Model%Cordless%Battery'
WHERE prod_name LIKE 'CD%Pack of _'

関連項目:
条件の詳細は、第6章「条件」を参照してください。

ゾーン・マップの制限事項 ゾーン・マップには、次の制限事項があります。

- 最大で1つのゾーン・マップにファクト表を指定できます。複数のゾーン・マップにディメンション表を指定できます。1つのゾーン・マップにファクト表を指定し、他のゾーン・マップにディメンション表を指定できます。

- ゾーン・マップの実表に外部表、索引構成表、リモート表、一時表またはビューを指定できません。

- ゾーン・マップの実表は、ユーザーSYSのスキーマ内に指定できません。

- ゾーン・マップはパーティション化できます。

- BFILE、BLOB、CLOB、LONG、LONG RAWまたはNCLOB以外のスカラー・データ型の列のゾーン・マップを定義できます。

- ゾーン・マップの定義する副問合せで指定されるすべての結合は、左側のファクト表の左側外部等価結合である必要があります。

- ゾーン・マップの定義する副問合せのFROM句がマテリアライズド・ビューを参照する場合、ゾーン・マップのリフレッシュの前に、マテリアライズド・ビューをリフレッシュしておく必要があります。

- ゾーン・マップで直接DML操作を実行できません。

例

次の文は、sales_zmapと呼ばれる基本的なゾーン・マップを作成します。このゾーン・マップは、表salesの列cust_idおよびprod_idを追跡します。

CREATE MATERIALIZED ZONEMAP sales_zmap
ON sales(cust_id, prod_id);

次の文は、前の例で作成されたゾーン・マップと似ているsales_zmapと呼ばれる基本的なゾーン・マップを作成します。ただし、この文は定義する副問合せを使用して、ゾーン・マップを作成します。

CREATE MATERIALIZED ZONEMAP sales_zmap
AS SELECT SYS_OP_ZONE_ID(rowid),
MIN(cust_id), MAX(cust_id),
MIN(prod_id), MAX(prod_id)
FROM sales
GROUP BY SYS_OP_ZONE_ID(rowid);

次の文は、sales_zmapと呼ばれる結合ゾーン・マップを作成します。ゾーン・マップのファクト表はsalesで、ゾーン・マップに1つのディメンション表customersがあります。このゾーン・マップは、ディメンション表の2つの列cust_state_provinceおよびcust_cityを追跡します。

CREATE MATERIALIZED ZONEMAP sales_zmap
AS SELECT SYS_OP_ZONE_ID(s.rowid),
MIN(cust_state_province), MAX(cust_state_province),
MIN(cust_city), MAX(cust_city)
FROM sales s
LEFT OUTER JOIN customers c ON s.cust_id = c.cust_id
GROUP BY SYS_OP_ZONE_ID(s.rowid);

次の文は、sales_zmapと呼ばれる結合ゾーン・マップを作成します。ゾーン・マップのファクト表はsalesで、ゾーン・マップに2つのディメンション表productsとcustomersがあります。このゾーン・マップは、products表のprod_categoryとprod_subcategory、customers表のcountry_id、cust_state_provinceおよびcust_cityのディメンション表の5個の列を追跡します。

CREATE MATERIALIZED ZONEMAP sales_zmap
AS SELECT SYS_OP_ZONE_ID(s.rowid),
MIN(prod_category), MAX(prod_category),
MIN(prod_subcategory), MAX(prod_subcategory),
MIN(country_id), MAX(country_id),
MIN(cust_state_province), MAX(cust_state_province),
MIN(cust_city), MAX(cust_city)
FROM sales s
LEFT OUTER JOIN products p ON s.prod_id = p.prod_id
LEFT OUTER JOIN customers c ON s.cust_id = c.cust_id
GROUP BY sys_op_zone_id(s.rowid);

次の文は、前の例で作成されたゾーン・マップと同じ結合ゾーン・マップを作成します。違いは、前の例がFROM句にLEFT OUTER JOIN構文を使用し、次の例がWHERE句に外部結合演算子(+)を使用しているだけです。

CREATE MATERIALIZED ZONEMAP sales_zmap
AS SELECT SYS_OP_ZONE_ID(s.rowid),
MIN(prod_category), MAX(prod_category),
MIN(prod_subcategory), MAX(prod_subcategory),
MIN(country_id), MAX(country_id),
MIN(cust_state_province), MAX(cust_state_province),
MIN(cust_city), MAX(cust_city)
FROM sales s, products p, customers c
WHERE s.prod_id = p.prod_id(+) AND
s.cust_id = c.cust_id(+)
GROUP BY sys_op_zone_id(s.rowid);

CREATE OPERATOR

用途

CREATE OPERATOR文を使用すると、新しい演算子を作成し、バインディングを定義できます。

演算子は、索引タイプ、SQL問合せおよびDML文で参照できます。それに対して演算子は、ファンクション、パッケージ、型および他のユーザー定義オブジェクトを参照します。

関連項目:
これらの依存性および演算子の概要は、『Oracle Databaseデータ・カートリッジ開発者ガイド』および『Oracle Database概要』を参照してください。

前提条件

自分のスキーマ内に演算子を作成する場合は、CREATE OPERATORシステム権限が必要です。他のユーザーのスキーマ内に演算子を作成する場合は、CREATE ANY OPERATORシステム権限が必要です。どちらの場合も、参照するファンクションおよび演算子に対するEXECUTEオブジェクト権限が必要です。

構文

create_operator::=

binding_clause::=

implementation_clause::=

context_clause::=

using_function_clause::=

セマンティクス

OR REPLACE

OR REPLACEを指定すると、演算子スキーマ・オブジェクトの定義を置換できます。

演算子の置換の制限事項: 演算子をサポートする索引タイプなどの依存オブジェクトが演算子にない場合のみ、定義を置換できます。

schema

演算子が含まれているスキーマを指定します。schemaを省略した場合、自分のスキーマ内に演算子が作成されます。

operator

作成する演算子の名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。

binding_clause

binding_clauseを使用すると、演算子をファンクションにバインドするために、1つ以上のパラメータ・データ型(parameter_type)を指定できます。各バインドのシグネチャ(対応するファンクションに対する引数のデータ型の順序)は、オーバーロードの規則に従って一意である必要があります。

parameter_type自体をオブジェクト型にできます。この場合、任意にスキーマで修飾することもできます。

演算子のバインドの制限事項: REF、LONGまたはLONG RAWはparameter_typeに指定できません。

関連項目:
オーバーロードの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

RETURN句

バインドに戻りデータ型を指定します。

return_type自体をオブジェクト型にできます。この場合、任意にスキーマで修飾することもできます。

戻りデータ型のバインドの制限事項: REF、LONGまたはLONG RAWはreturn_typeに対して指定できません。

implementation_clause

この句を使用すると、バインドの実装を指定できます。

ANCILLARY TO句

ANCILLARY TO句を使用すると、演算子バインドが、指定した主演算子バインド(primary_operator)を補助することを指定できます。この句を指定する場合は、1つのみの数値パラメータで前のバインドを指定しないでください。

context_clause

context_clauseを使用すると、主演算子バインドを補助しないバインドのファンクション実装を指定できます。

WITH INDEX CONTEXT、SCAN CONTEXT この句を使用すると、演算子のファンクション評価に、実装タイプで指定した索引およびスキャン・コンテキストが使用されるように指定できます。

COMPUTE ANCILLARY DATA COMPUTE ANCILLARY DATAを指定すると、演算子バインディングが補助データを計算するように指定できます。

WITH COLUMN CONTEXT WITH COLUMN CONTEXTを指定すると、列情報が演算子のファンクション実装に渡されるように指定できます。

この句を指定する場合は、実装するファンクションのシグネチャに、余分なODCIFuncCallInfo構造を1つ含める必要があります。

関連項目:
ODCIFuncCallInfoルーチンを使用する手順については、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。

using_function_clause

using_function_clauseを使用すると、バインディングを実装するファンクションを指定できます。function_nameには、スタンドアロン・ファンクション、パッケージ・ファンクション、型メソッドまたはこれらのシノニムを指定できます。

ファンクションが後で削除された場合は、演算子などのすべての依存オブジェクトに、INVALIDのマークが付けられます。ただし、その後ALTER OPERATOR ... DROP BINDING文を発行してバインディングを削除した場合は、後続の問合せおよびDMLで依存オブジェクトが再検証されます。

例

ユーザー定義演算子の作成例: 次の文は、非常に単純な等価性のファンクション実装を作成した後、このファンクションを使用する演算子を作成します。より詳細な例については、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。

CREATE FUNCTION eq_f(a VARCHAR2, b VARCHAR2) RETURN NUMBER AS
BEGIN
IF a = b THEN RETURN 1;
ELSE RETURN 0;
END IF;
END;
/

CREATE OPERATOR eq_op
BINDING (VARCHAR2, VARCHAR2)
RETURN NUMBER
USING eq_f;

CREATE OUTLINE

用途

注意:
ストアド・アウトラインは非推奨になりました。ストアド・アウトラインは、下位互換性を保つために今でもサポートされています。ただし、かわりにSQL計画管理を使用することをお薦めします。SQL計画管理では、ストアド・アウトラインよりも非常に安定したSQLパフォーマンスを実現するSQL計画ベースラインが作成されます。
DBMS_SPMパッケージのMIGRATE_STORED_OUTLINEファンクションまたはEnterprise Manager Cloud Controlを使用して、既存のストアド・アウトラインをSQL計画ベースラインに移行できます。移行が完了したら、ストアド・アウトラインに移行済のマークが付けられ、削除できるようになります。DBMS_SPMパッケージのDROP_MIGRATED_STORED_OUTLINEファンクションを使用して、システム上のすべての移行済ストアド・アウトラインを削除できます。

参照: SQL計画管理の詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。DBMS_SPMパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

CREATE OUTLINE文を使用すると、ストアド・アウトラインを作成できます。ストアド・アウトラインは、実行計画を生成するためにオプティマイザが使用する属性集合です。最適化に影響する要因に変更があるかどうかにかかわらず、特定のSQL文が発行された場合に、実行計画の生成に影響するアウトラインの集合を使用するように、オプティマイザに指示します。これらの要因における変更を考慮するように、アウトラインを変更することもできます。

注意:
影響を与えるSQL文には、アウトライン作成時に指定した文と一致する文字列を指定する必要があります。

関連項目:

- 実行計画の詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。

- アウトラインの変更については、「ALTER OUTLINE」を参照してください。

- USE_STORED_OUTLINESパラメータおよびUSE_PRIVATE_OUTLINESパラメータの詳細は、「ALTER SESSION」および「ALTER SYSTEM」を参照してください。

前提条件

パブリック・アウトラインまたはプライベート・アウトラインの作成には、CREATE ANY OUTLINEシステム権限が必要です。

ソース・アウトラインからクローン・アウトラインを作成するには、SELECT_CATALOG_ROLEロールも必要です。

個々のセッションまたはシステムに対して、ストアド・アウトラインを動的に使用可能または使用禁止にできます。

- USE_STORED_OUTLINESパラメータを使用可能にすると、パブリック・アウトラインが使用可能になります。

- USE_PRIVATE_OUTLINESパラメータを使用可能にすると、プライベート・ストアド・アウトラインが使用可能になります。

構文

create_outline::=

注意:
outlineの後に指定する必須の句はありません。ただし、outlineの後には1つ以上の句を指定する必要があり、FROM句またはON句のどちらかを指定する必要があります。

セマンティクス

OR REPLACE

OR REPLACEを指定すると、既存のアウトラインを同じ名前の新しいアウトラインと置き換えることができます。

PUBLIC | PRIVATE

PUBLICを指定すると、PUBLICが使用するアウトラインを作成できます。これはデフォルトです。

PRIVATEを指定すると、現行のセッションのみがプライベートに使用するアウトラインを作成できます。このアウトラインのデータは、現行のスキーマに格納されます。

outline

ストアド・アウトラインに割り当てる一意の名前を指定します。outlineを指定しない場合、データベースがアウトライン名を生成します。

関連項目:
「アウトラインの作成例:」

FROM source_outline句

FROM句を使用すると、既存のアウトラインのコピーによって新しいアウトラインを作成できます。デフォルトでは、パブリック領域のsource_categoryが検索されます。PRIVATEを指定すると、現行のスキーマのアウトラインが検索されます。

アウトラインのコピーの制限事項: FROM句を指定する場合、ON句は指定できません。

関連項目:
「プライベート・クローン・アウトラインの作成例:」および「プライベート・アウトラインのパブリック領域への公開例:」を参照してください。

FOR CATEGORY句

ストアド・アウトラインをグループ化するために使用する任意の名前を指定します。たとえば、週末に使用するアウトラインの1つのカテゴリおよび四半期末に使用する別のカテゴリを指定できます。categoryを指定しない場合、アウトラインはDEFAULTカテゴリに格納されます。

ON句

文をコンパイルする際にアウトラインが作成されるSQL文を指定します。この句は、FROM句を使用して既存のアウトラインのコピーを作成する場合のみに指定するオプションです。

指定できる文は、SELECT、DELETE、UPDATE、INSERT ... SELECTまたはCREATE TABLE ... AS SELECTのいずれかです。

ON句の制限事項: この句には、次の制限事項があります。

- ON句を指定する場合、FROM句は指定できません。

- マルチテーブルINSERT文でアウトラインを作成できません。

- ON句内のSQL文に、リモート・オブジェクトのDML操作を含めることはできません。

注意:
後続の文で、同じSQL文に対して追加のアウトラインを指定できますが、同じ文の各アウトラインはCATEGORY句で異なるカテゴリを指定する必要があります。

例

アウトラインの作成例: 次の文は、ON文をコンパイルすることによってストアド・アウトラインを作成します。アウトラインはsalariesという名前で、specialカテゴリに格納されます。

CREATE OUTLINE salaries FOR CATEGORY special
ON SELECT last_name, salary FROM employees;

USE_STORED_OUTLINESパラメータにspecialが設定されている場合、同じSELECT文が後でコンパイルされると、アウトラインsalariesを作成する場合と同様に実行計画が生成されます。

プライベート・クローン・アウトラインの作成例: 次の文は、前述の例で作成したパブリック・カテゴリsalariesに基づいて、ストアド・プライベート・アウトラインmy_salariesを作成します。

CREATE OR REPLACE PRIVATE OUTLINE my_salaries
FROM salaries;

プライベート・アウトラインのパブリック領域への公開例: 次の文は、プライベート編集の後でプライベート・アウトラインをパブリック領域にコピー(公開)します。

CREATE OR REPLACE OUTLINE public_salaries
FROM PRIVATE my_salaries;

CREATE PACKAGE

用途

パッケージはPL/SQLを使用して定義されます。このため、この項では一般的な情報について説明します。構文およびセマンティクスの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

CREATE PACKAGE文を使用すると、ストアド・パッケージの仕様部を作成できます。パッケージとは、関連するプロシージャ、ファンクション、およびデータベース上にまとめて格納されるその他のプログラム・オブジェクトの集合のことです。パッケージ仕様部でこれらのオブジェクトを宣言します。後で指定するパッケージ本体では、これらのオブジェクトを定義します。

関連項目:

- パッケージ実装の指定については、「CREATE PACKAGE BODY」を参照してください。

- スタンドアロン・ファンクションおよびプロシージャの作成については、「CREATE FUNCTION」および「CREATE PROCEDURE」を参照してください。

- パッケージの変更および削除については、「ALTER PACKAGE」および「DROP PACKAGE」を参照してください。

- パッケージの説明と使用方法の詳細は、『Oracle Database開発ガイド』と『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

前提条件

自分のスキーマ内にパッケージを作成または再作成する場合は、CREATE PROCEDUREシステム権限が必要です。他のユーザーのスキーマ内にパッケージを作成または再作成する場合は、CREATE ANY PROCEDUREシステム権限が必要です。

Oracle Databaseのプリコンパイラ・プログラム内にCREATE PACKAGE文を埋め込む場合、キーワードEND-EXECに続けて、各言語の埋込みSQL文の終了記号を記述して文を終了する必要があります。

関連項目:
詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

構文

パッケージはPL/SQLを使用して定義されます。このため、このマニュアルの構文図ではSQLキーワードのみを示します。PL/SQLの構文、セマンティクスおよび例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。

create_package::=

(plsql_package_source: 『Oracle Database PL/SQL言語リファレンス』を参照。)

セマンティクス

OR REPLACE

OR REPLACEを指定すると、既存のパッケージ仕様部を再作成できます。この句を指定した場合、パッケージに対して付与されていたオブジェクト権限を削除、再作成および再付与しなくても、既存のパッケージの仕様部を変更できます。パッケージ仕様部を変更した場合、その仕様部は自動的に再コンパイルされます。

再定義したパッケージに対して権限が付与されていたユーザーは、権限が再付与されなくてもそのパッケージにアクセスできます。

ファンクション索引がパッケージに依存している場合、索引にDISABLEDのマークが付きます。

関連項目:
パッケージ仕様部の再コンパイルについては、「ALTER PACKAGE」を参照してください。

[ EDITIONABLE | NONEDITIONABLE ]

この句を使用すると、schemaのスキーマ・オブジェクト・タイプPACKAGEのエディショニングが有効化されたときに、そのパッケージをエディション・オブジェクトにするか非エディション・オブジェクトにするかを指定できます。デフォルトは、EDITIONABLEです。エディション・オブジェクトと非エディション・オブジェクトの詳細は、『Oracle Database開発ガイド』を参照してください。

plsql_package_source

plsql_package_sourceの構文、セマンティクスおよび例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。

CREATE PACKAGE BODY

用途

パッケージ本体はPL/SQLを使用して定義されます。このため、この項では一般的な情報について説明します。構文およびセマンティクスの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

CREATE PACKAGE BODY文を使用すると、ストアド・パッケージの本体を作成できます。パッケージとは、関連するプロシージャ、ストアド・ファンクション、およびデータベース上にまとめて格納されるその他のプログラム・オブジェクトの集合のことです。パッケージ本体でこれらのオブジェクトを定義します。前述のCREATE PACKAGE文で定義したパッケージ仕様部で、これらのオブジェクトを宣言します。

一連のプロシージャやファンクションをスタンドアロンのスキーマ・オブジェクトとして作成するかわりの方法としてパッケージを使用する方法があります。

関連項目:

- スタンドアロン・ファンクションおよびプロシージャの作成については、「CREATE FUNCTION」および「CREATE PROCEDURE」を参照してください。

- 作成方法を含むパッケージの詳細は、「CREATE PACKAGE」を参照してください。

- パッケージの変更については、「ALTER PACKAGE」を参照してください。

- データベースからのパッケージの削除については、「DROP PACKAGE」を参照してください。

前提条件

自分のスキーマ内にパッケージを作成または再作成する場合は、CREATE PROCEDUREシステム権限が必要です。他のユーザーのスキーマ内にパッケージを作成または再作成する場合は、CREATE ANY PROCEDUREシステム権限が必要です。どちらの場合も、パッケージ本体はパッケージと同じスキーマ内に作成される必要があります。

Oracle Databaseのプリコンパイラ・プログラム内にCREATE PACKAGE BODY文を埋め込む場合、キーワードEND-EXECに続けて、各言語の埋込みSQL文の終了記号を記述して文を終了する必要があります。

関連項目:
『Oracle Database PL/SQL言語リファレンス』

構文

パッケージ本体はPL/SQLを使用して定義されます。このため、このマニュアルの構文図ではSQLキーワードのみを示します。PL/SQLの構文、セマンティクスおよび例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。

create_package_body::=

(plsql_package_body_source: 『Oracle Database PL/SQL言語リファレンス』を参照。)

セマンティクス

OR REPLACE

OR REPLACEを指定すると、既存のパッケージ本体を再作成できます。この句を指定した場合、パッケージに対して付与されていたオブジェクト権限を削除、再作成および再付与しなくても、既存のパッケージの本体を変更できます。パッケージ本体を変更した場合、その本体は自動的に再コンパイルされます。

再定義したパッケージに対して権限が付与されていたユーザーは、権限が再付与されなくてもそのパッケージにアクセスできます。

関連項目:
パッケージ本体の再コンパイルについては、「ALTER PACKAGE」を参照してください。

[ EDITIONABLE | NONEDITIONABLE ]

この句を省略すると、パッケージ本体は、EDITIONABLEまたはNONEDITIONABLEをパッケージ仕様部から継承します。この句を指定する場合は、パッケージ仕様部と一致させる必要があります。

plsql_package_body_source

plsql_package_body_sourceの構文およびセマンティクスについては、『Oracle Database PL/SQL言語リファレンス』を参照してください。

CREATE PFILE

用途

CREATE PFILE文を使用すると、バイナリのサーバー・パラメータ・ファイルまたは現行のインメモリーのパラメータ設定をテキストの初期化パラメータ・ファイルにエクスポートできます。テキストのパラメータ・ファイルの作成は、データベースで使用している現行のパラメータ設定リストを取得する便利な方法です。また、このファイルは、テキスト・エディタで簡単に編集でき、CREATE SPFILE文を使用してサーバー・パラメータ・ファイルに変換して戻すこともできます。

この文が正常に実行されると、サーバーにテキストのパラメータ・ファイルが作成されます。Oracle Real Application Clusters環境では、すべてのインスタンスのすべてのパラメータ設定が含まれます。サーバー・パラメータ・ファイルのパラメータ設定と同じ行のコメントも含まれます。

CDBにテキスト・パラメータ・ファイルを作成する場合の注意事項: マルチテナント・コンテナ・データベース(CDB)にテキスト・パラメータ・ファイルを作成するときには、現在のコンテナがルートまたはPDBである可能性があります。

- 現在のコンテナがルートである場合、データベースはルートのパラメータ設定を含むテキスト・ファイルを作成します。

- Oracle Database 12cリリース1(12.1.0.2)以降、現在のコンテナがPDBである場合にテキスト・パラメータ・ファイルを作成できます。この場合、pfile_nameを指定する必要があります。データベースは、PDBのパラメータ設定を含むテキスト・ファイルを作成します。

関連項目:

- サーバー・パラメータ・ファイルの詳細は、「CREATE SPFILE」を参照してください。

- テキストの初期化パラメータ・ファイルおよびバイナリのサーバー・パラメータ・ファイルの詳細は、『Oracle Database管理者ガイド』を参照してください。

- Oracle Real Application Clusters環境でのサーバー・パラメータ・ファイルの使用については、『Oracle Real Application Clusters管理およびデプロイメント・ガイド』を参照してください。

前提条件

この文を実行するには、SYSBACKUP、SYSDBA、SYSDGまたはSYSOPERシステム権限が必要です。この文は、インスタンスの起動前と起動後のいずれかで実行できます。

構文

create_pfile::=

セマンティクス

pfile_name

作成するテキストのパラメータ・ファイル名を指定します。pfile_nameを指定しないと、プラットフォーム固有のデフォルトの初期化パラメータ・ファイル名が使用されます。pfile_nameには、パス接頭辞を含めることができます。パス接頭辞を指定しない場合は、データベースによってデフォルトの格納場所(プラットフォームによって異なる)のパス接頭辞が追加されます。

spfile_name

テキストのファイルを作成する元となるバイナリのサーバー・パラメータ・ファイル名を指定します。

- spfile_nameを指定する場合、そのファイルがサーバーに存在する必要があります。ファイルがオペレーティング・システムのサーバー・パラメータ・ファイルのデフォルト・ディレクトリに存在しない場合、フルパス名を指定する必要があります。

- spfile_nameを指定しない場合は、現在インスタンスに関連付けられているspfileが使用されます。通常、これは起動時に使用されたspfileです。インスタンスにspfileが関連付けられていない場合は、プラットフォーム固有のデフォルトのサーバー・パラメータ・ファイル名が検索されます。このファイルが存在しない場合は、エラーが戻されます。

関連項目:
デフォルトのパラメータ・ファイル名については、オペレーティング・システム固有のドキュメントを参照してください。

MEMORY

MEMORYを指定すると、現行のシステム全体のパラメータ設定を使用してpfileを作成できます。Oracle RAC環境では、作成されたファイルには各インスタンスからのパラメータ設定が含まれます。

例

パラメータ・ファイルの作成例: 次の例は、バイナリのサーバー・パラメータ・ファイルs_params.oraからテキストのパラメータ・ファイルmy_init.oraを作成します。

CREATE PFILE = 'my_init.ora' FROM SPFILE = 's_params.ora';

注意:
通常、オペレーティング・システムのパラメータ・ファイルには、フルパスのファイル名を指定する必要があります。パスについては、ご使用のオペレーティング・システムのOracleマニュアルを参照してください。

CREATE PLUGGABLE DATABASE

用途

CREATE PLUGGABLE DATABASE文を使用すると、プラガブル・データベース(PDB)を作成できます。

この句で実行できるタスクは、次のとおりです。

- シードをテンプレートとして使用したPDBの作成
create_pdb_from_seed句を使用すると、マルチテナント・コンテナ・データベース(CDB)内のシードをテンプレートとして使用して、PDBを作成できます。シードに関連付けられた各ファイルが新しい場所にコピーされ、その後これらのファイルが新しいPDBに関連付けられます。

- 既存のPDBまたはCDB以外のクローニングによるPDBの作成
create_pdb_clone句を使用すると、既存のPDBまたはCDB以外をコピーし、その後このコピーをCDBに接続することによって、PDBを作成できます。既存のPDBまたはCDB以外に関連付けられたファイルは新しい場所にコピーされ、このコピーされたファイルが新しいPDBに関連付けられます。

注意:
CDB以外をクローニングしたPDBの作成は、Oracle Database 12cリリース1(12.1.0.2)より使用可能です。

- CDBへの切断されたPDBまたは非CDBの接続によるPDBの作成
create_pdb_from_xml句を使用すると、XMLメタデータ・ファイルを使用して、切断されているPDBまたは非CDBをCDBに接続できます。

注意:
新しいPDBがCDBで確立されるときに、新しいPDBによって提供されるサービスの名前が既存のサービス名と競合することがあります。競合が発生する可能性があるネームスペースは、そのCDBへのアクセスを可能にするリスナーのネームスペースです。このネームスペース内で、非CDBのデフォルト・サービス名、CDBのデフォルト・サービス名、PDBのデフォルト・サービス名およびユーザー定義サービス名の間で競合が発生することがあります。たとえば、同じコンピュータ・システム上に存在する複数のCDBが同じリスナーを使用しており、新たに確立されるPDBに含まれるサービス名がこれらのCDB内の別のPDBに含まれるサービス名と同じである場合、競合が発生します。
既存のサービス名との競合を引き起こすPDBに対する操作は試みないでください。競合する名前がPDBのデフォルト・サービス名である場合は、そのPDBの名前を変更する必要があります。競合する名前がPDB内のユーザー作成サービス名である場合は、そのサービスを削除し、そのサービスのかわりに、競合しない名前を使用して、同じプロパティを持つ同じ用途のサービスを別に作成します。

関連項目:

- PDBの概要は、『Oracle Database概要』を参照してください。

- PDBの管理の詳細は、『Oracle Database管理者ガイド』を参照してください。

- PDBの変更および削除の詳細は、「ALTER PLUGGABLE DATABASE」および「DROP PLUGGABLE DATABASE」を参照してください。

前提条件

CDBに接続している必要があります。また、現在のコンテナがルートである必要があります。

システム権限のCREATE PLUGGABLE DATABASEが必要になります。

PDBの作成先のCDBがREAD WRITEモードになっている必要があります。

create_pdb_clone句を指定するときには、次の条件が適用されます。

- src_pdb_nameが同じCDB内のPDBを指す場合は、新規PDBを作成するCDBのルートおよびクローンの作成元にするPDBにおけるCREATE PLUGGABLE DATABASEシステム権限が必要になります。

- src_pdb_nameがリモート・データベース内のPDBまたはCDB以外を指す場合は、新規PDBを作成するCDBのルートにおけるCREATE PLUGGABLE DATABASEシステム権限が必要になります。また、src_pdb_nameが指すPDBまたはCDB以外におけるCREATE PLUGGABLE DATABASEシステム権限を、リモート・ユーザーが保有している必要があります。

構文

create_pluggable_database::=

(create_pdb_from_seed::=、create_pdb_clone::=、create_pdb_from_xml::=を参照)

create_pdb_from_seed::=

(pdb_dba_roles::=、default_tablespace::=、file_name_convert::=、pdb_storage_clause::=、path_prefix_clause::=、tempfile_reuse_clause::=、user_tablespaces_clause::=、standbys_clause::=、logging_clause::=、create_file_dest_clause::=)

pdb_dba_roles::=

default_tablespace::=

(datafile_tempfile_spec::=、extent_management_clause::=を参照)

file_name_convert::=

pdb_storage_clause::=

(size_clause::=を参照)

path_prefix_clause::=

tempfile_reuse_clause::=

user_tablespaces_clause::=

standbys_clause::=

logging_clause::=

create_file_dest_clause::=

create_pdb_clone::=

(pdb_storage_clause::=、file_name_convert::=、path_prefix_clause::=、tempfile_reuse_clause::=、user_tablespaces_clause::=、standbys_clause::=、logging_clause::=、create_file_dest_clause::=)

create_pdb_from_xml::=

(source_file_name_convert::=, source_file_directory::=, file_name_convert::=, pdb_storage_clause::=, path_prefix_clause::=, tempfile_reuse_clause::=, user_tablespaces_clause::=, standbys_clause::=, logging_clause::=, create_file_dest_clause::=)

source_file_name_convert::=

source_file_directory::=

セマンティクス

pdb_name

作成するPDBの名前を指定します。PDB名の最初の文字は英数字にする必要があります。残りの文字には英数字またはアンダースコア(_)を使用できます。

PDB名はCDB内で一意にする必要があります。また、そのインスタンスが特定のリスナーを介してアクセスされるすべてのCDBのスコープ内で一意にする必要があります。

create_pdb_from_seed

この句を使用すると、CDB内のシードをテンプレートとして使用して、PDBを作成できます。

関連項目:
シードを使用したPDBの作成手順の詳細は、『Oracle Database管理者ガイド』を参照してください。

ADMIN USER句

この句を使用して、PDBに対する管理タスクを実行するために必要な権限を持つ管理ユーザーを作成できます。admin_user_nameに、作成するユーザーの名前を指定します。IDENTIFIED BY句を使用すると、admin_user_nameのパスワードを指定できます。PDBにローカル・ユーザーが作成され、このユーザーにPDB_DBAローカル・ロールが付与されます。

pdb_dba_roles

この句を使用すると、PDB_DBAロールに1つ以上のロールを付与できます。この句を使用して、PDBの管理ユーザーが必要とする権限を付与してください。roleには、事前定義されたロールを指定します。事前定義されているロールのリストは、『Oracle Databaseセキュリティ・ガイド』を参照してください。

また、GRANT文を使用して、PDBの作成後にPDB_DBAロールにロールを付与することもできます。PDB_DBAロールに適切な権限を付与するまでは、SYSユーザーおよびSYSTEMユーザーがPDB上で管理タスクを実行できます。

default_tablespace

この句を指定すると、PDBのデフォルトの永続表領域を作成できます。default_tablespace句のセマンティクスは、CREATE DATABASE文と同じです。詳細は、「CREATE DATABASE」の「default_tablespace」を参照してください。

file_name_convert

この句を使用して、PDBのファイル(データファイルやウォレット・ファイルなど)の名前をデータベースでどのように作成するかを決定できます。

- filename_patternには、シードに関連付けられたファイル名(シードを使用してPDBを作成する場合)、ソースPDBに関連付けられたファイル名(PDBをクローニングする場合)またはXMLファイル内にリストされたファイル名(PDBをCDBに接続する場合)に含まれる文字列を指定します。

- replacement_filename_patternには、置換文字列を指定します。

新規PDBに関連付けられたファイル名の生成時に、filename_patternがreplacement_filename_patternで置換されます。

Oracle Managed Filesで管理されているファイルまたはディレクトリと一致するファイル名のパターンは指定できません。

FILE_NAME_CONVERT = NONEを指定できます。これは、この句を省略した場合と同じになります。この句を省略すると、データベースはまずOracle管理ファイルを使用してファイル名を生成しようとします。Oracle Managed Filesを使用している場合は、PDB_FILE_NAME_CONVERT初期化パラメータを使用してファイル名が生成されます。このパラメータが設定されていないと、エラーが発生します。

pdb_storage_clause

この句を使用して、PDBの記憶域制限値を指定します。

- MAXSIZEを使用すると、PDB内のすべての表領域で使用可能にする記憶域の容量を、size_clauseで指定した値に制限できます。この制限には、PDBに属する表領域のデータファイルと一時ファイルのサイズも含まれます。MAXSIZE UNLIMITEDを指定すると、容量は無制限になります。

- MAX_SHARED_TEMP_SIZEを使用すると、PDBに接続したセッションで使用可能にする共有一時表領域の記憶域の容量を、size_clauseで指定した値に制限できます。MAX_SHARED_TEMP_SIZE UNLIMITEDを指定すると、容量は無制限になります。

この句を省略するかSTORAGE UNLIMITEDを指定すると、PDBの記憶域には制限がなくなります。これは、STORAGE (MAXSIZE UNLIMITED MAX_SHARED_TEMP_SIZE UNLIMITED)を指定することと同じになります。

path_prefix_clause

この句を使用して、PDBに関連付けられたディレクトリ・オブジェクトのファイル・パスを、指定したディレクトリまたはそのサブディレクトリに確実に制限できます。PDBの作成後は、この句を変更することはできません。この句は、Oracle Managed Filesによって作成されたファイルには影響しません。

- path_nameには、オペレーティング・システムのディレクトリの絶対パス名を指定します。一重引用符が必要です。その結果、パス名の大/小文字が区別されます。PDBに関連付けられているディレクトリ・オブジェクトの相対パスの接頭辞としてpath_nameが使用されます。ディレクトリ・オブジェクトが絶対パスの場合は、path_prefix_clauseは無視されます。
相対パスが付加されたときに結果として生成されるパス名が正しい書式で形成されるようにpath_nameを指定してください。たとえば、UNIXシステムでは、次に示すようにpath_nameの最後にフォワード・スラッシュ(/)を使用するようにしてください。

PATH_PREFIX = '/disk1/oracle/dba/salespdb/'

- PATH_PREFIX = NONEを指定すると、PDBに関連付けられてたディレクトリ・オブジェクトの相対パスが絶対パスとして処理され、特定のディレクトリに制限されなくなります。

path_prefix_clauseの省略は、PATH_PREFIX = NONEの指定と同じです。

tempfile_reuse_clause

PDBを作成すると、一時ファイルが新しいPDBと関連付けられます。PDBの作成方法によっては、一時ファイルはすでに存在し、使用されている場合もあります。

TEMPFILE REUSEを指定すると、新しいPDBに関連付けられている一時ファイルがすでに存在する場合は、それをフォーマットして再利用できます。この句を指定しており、一時ファイルが存在しない場合は、データベースで一時ファイルが作成されます。

TEMPFILE REUSEを指定しない場合、新しいPDBに関連付ける一時ファイルがすでに存在すると、データベースからエラーが戻され、PDBは作成されません。

user_tablespaces_clause

注意:
user_tablespaces_clauseは、Oracle Database 12cリリース1(12.1.0.2)から使用可能です。

この句を使用すると、新しいPDBで使用可能な表領域を指定できます。SYSTEM、SYSAUXおよびTEMP表領域はすべてのPDBで使用可能であり、この句に指定することはできません。

- tablespaceを指定して、新しいPDBで表領域を使用可能にします。表領域を複数指定する場合は、カンマ区切りのリストにします。

- NONEを指定して、SYSTEM、SYSAUXおよびTEMP表領域のみ新しいPDBで使用可能にします。

- ALLを指定して、新しいPDBですべての表領域を使用可能にします。これはデフォルトです。

- ALL EXCEPTを指定して、指定された表領域を除くすべての表領域を新しいPDBで使用可能にします。

PDBで使用できない表領域はPDBでオフラインです。それらの表領域に属するすべてのデータファイルは名前がなく、PDBでオフラインです。

standbys_clause

注意:
standbys_clauseは、Oracle Database 12cリリース1(12.1.0.2)から使用可能です。

この句を使用して、新しいPDBがスタンバイCDBに含まれるかどうかを指定します。

- ALLを指定して、すべてのスタンバイCDBの新しいPDBを含めます。スタンバイ・リカバリ中に、スタンバイCDBはPDBのデータファイルを検索します。データファイルが見つからない場合、スタンバイ・リカバリが停止するため、リカバリが再開する前にデータファイルを正しい場所にコピーする必要があります。これはデフォルトです。

- NONEを指定して、すべてのスタンバイCDBの新しいPDBを除外します。PDBがすべてのスタンバイCDBから除外される場合、PDBのデータファイルは名前がなく、すべてのスタンバイCDBでオフラインとマークされます。PDBのデータファイルがスタンバイに見つからない場合、スタンバイ・リカバリは停止しません。PDBの作成後に新しいスタンバイCDBをインスタンス化する場合、新しいスタンバイCDBのリカバリ用のPDBを明示的に無効化する必要があります。
データファイルを正しい場所にコピーし、PDBをオンラインにし、リカバリ用に有効とマークすることによって、スタンバイCDBから除外した後にスタンバイCDBのPDBを有効化できます。

logging_clause

注意:
logging_clauseは、Oracle Database 12cリリース1(12.1.0.2)から使用可能です。

この句を使用して、PDB内で作成する表領域のデフォルトのロギング属性を指定します。ロギング属性は、特定のDML操作がREDOログ・ファイルで記録されるかどうか(LOGGINGまたはNOLOGGING)を制御します。デフォルトはLOGGINGです。

表領域を作成する場合、CREATE TABLESPACE文のlogging_clauseを指定して、デフォルトのロギング属性をオーバーライドできます。

この句の詳細は、「logging_clause」を参照してください。

create_file_dest_clause

注意:
create_file_dest_clauseは、Oracle Database 12cリリース1(12.1.0.2)から使用可能です。

デフォルトでは、新しく作成されたPDBは、ルートからOracle Managed Files設定を継承します。ルートがOracle Managed Filesを使用する場合、PDBもOracle Managed Filesを使用します。PDBは、Oracle Managed Filesのベース・ファイル・システム・ディレクトリをルートと共有し、PDBのGUIDで名前が付けられた固有のサブディレクトリがあります。ルートがOracle Managed Filesを使用しない場合、PDBもOracle Managed Filesを使用しません。

この句を使用すると、デフォルトの動作をオーバーライドできます。PDBのOracle Managed Filesを有効化または無効化できます。PDBのファイルの別のベース・ファイル・システム・ディレクトリまたはOracle ASMディスク・グループを指定します。

- NONEを指定して、PDBのOracle Managed Filesを無効化します。

- directory_path_nameまたはdiskgroup_nameを指定して、PDBのOracle Managed Filesを有効化します。
directory_path_nameを指定して、PDBのファイルのベース・ファイル・システム・ディレクトリを指定します。オペレーティング・システム・ディレクトリの完全パス名を指定します。ディレクトリが存在する必要があり、Oracleプロセスにはディレクトリに対する適切な権限が必要です。一重引用符が必要です。その結果、パス名の大/小文字が区別されます。

diskgroup_nameを指定して、PDBのファイルのデフォルトのOracle ASMディスク・グループを指定します。

NONE以外の値を指定する場合、データベースはPDBのSCOPE=SPFILEを使用したDB_CREATE_FILE_DEST初期化パラメータを暗黙的に設定します。

create_pdb_clone

この句を使用すると、ソースとターゲットPDBのクローニングによって、新しいPDBを作成できます。ソースには、ローカルCDBのPDB、リモートCDBのPDBまたはCDB以外を指定できます。ターゲットPDBはソースのクローンです。

ソースがローカルCDBのPDBである場合、ソースPDBを接続または切断できます。ソースがリモートCDBのPDBである場合、ソースPDBを接続する必要があります。

ソースがCDB以外またはリモートCDBのPDBである場合、ソースおよびターゲットPDBを含むCDBは次の要件を満たす必要があります。

- エンディアン形式が同じであること。

- 互換性のあるキャラクタ・セットおよび各国語キャラクタ・セットが設定されていること。これは次のことを意味します。

- ソース・キャラクタ・セット内の各文字がローカルCDBのキャラクタ・セットで使用可能であること。

- ソースのキャラクタ・セット内の各文字のコード・ポイント値がローカルCDBのキャラクタ・セットのコード・ポイント値と同じであること。

- これらには、同じセットのデータベース・オプションがインストールされている必要があります。

ソース非CDBまたはPDBのデフォルト一時表領域を使用していたPDBのユーザーは、新しいPDBのデフォルト一時表領域を使用します。非CDBまたはPDB内のデフォルト以外の一時表領域を使用していたユーザーは、新しいPDB内の同じローカル一時表領域を引き続き使用します。

関連項目:
既存のPDBのクローニングによるPDBの作成手順の詳細は、『Oracle Database管理者ガイド』を参照してください。

FROM句

この句を使用して、ソースPDBまたはCDB以外を指定します。ソースはオープン・モードREAD ONLYでオープンしている必要があります。ソースに関連付けられた各ファイルが新しい場所にコピーされ、その後これらのファイルが新しいPDBに関連付けられます。

- ソースがローカルCDBのPDBである場合、src_pdb_nameを使用して、ソースPDBの名前を指定します。src_pdb_nameにはPDB$SEEDは指定できません。かわりに、create_pdb_from_seed句を使用することによって、シードをテンプレートとして使用してPDBを作成します。

- ソースがリモートCDBのPDBである場合、src_pdb_nameを使用してソースPDBの名前を指定し、dblinkを使用してリモートCDBに接続するために使用するデータベース・リンクの名前を指定します。

- ソースがCDB以外の場合、NON$CDB@dblinkを指定します。dblinkは、CDB以外に接続するために使用するデータベース・リンクの名前です。

pdb_storage_clause

この句を使用して、新規PDBの記憶域制限値を指定します。この句のセマンティクスの詳細は、「pdb_storage_clause」を参照してください。

file_name_convert

この句を使用して、新しいPDBのファイルの名前をデータベースでどのように作成するかを決定できます。この句のセマンティクスの詳細は、「file_name_convert」を参照してください。

path_prefix_clause

この句を使用して、PDBに関連付けられたすべてのディレクトリ・オブジェクト・パスを、指定したディレクトリまたはそのサブディレクトリに確実に制限できます。この句のセマンティクスの詳細は、「path_prefix_clause」を参照してください。

tempfile_reuse_clause

TEMPFILE REUSEを指定すると、新しいPDBに関連付けられている一時ファイルがすでに存在する場合は、それをフォーマットして再利用できます。このセマンティクスの詳細は、「tempfile_reuse_clause」を参照してください。

SNAPSHOT COPY

PDBをクローニングする場合のみ、SNAPSHOT COPYを指定できます。CDB以外をクローニングする場合、この句はサポートされていません。ソースPDBは、ローカルCDBとリモートCDBのどちらに存在してもかまいません。SNAPSHOT COPY句は、記憶域スナップショットを使用してソースPDBをクローニングするようデータベースに指示します。これにより、ソース・データファイルの完全なコピーを作成する必要がなくなるため、クローンを作成する時間が削減されます。

SNAPSHOT COPY句を使用してソースPDBのクローンを作成し、CLONEDB初期化パラメータをFALSEに設定する場合、ソースPDBのファイルの基になるファイル・システムが記憶域スナップショットをサポートしている必要があります。そのようなファイル・システムとして、Oracle Automatic Storage Management Cluster File System (Oracle ACFS)およびDirect NFS Client記憶域などがあります。

SNAPSHOT COPY句を使用してソースPDBのクローンを作成し、CLONEDB初期化パラメータをTRUEに設定する場合、ソースPDBのファイルの基になるファイル・システムはローカル・ファイル・システム、ネットワーク・ファイル・システム(NFS)またはDirect NFSを有効化したクラスタ・ファイル・システムの可能性があります。ただし、クローンが存在するかぎり、ソースPDBは読取り専用オープン・モードのままである必要があります。

Direct NFSクライアントにより、Oracle Databaseは、オペレーティング・システム・カーネルのNFSクライアントを使用するかわりに、ネットワーク接続記憶域(NAS)デバイスに直接アクセスできます。PDBファイルがDirect NFSクライアント記憶域に格納されている場合は、次の追加の要件が満たされている必要があります。

- ソースPDBファイルはNFSボリューム上に存在する必要があります。

- 記憶域の資格証明は、透過的データ暗号化キーストアに格納されている必要があります。

- 記憶域ユーザーは、ソースPDBファイルをホストするボリューム上でスナップショットを作成および破棄するのに必要な権限を持っている必要があります。

- 資格証明は、ADMINISTER KEY MANAGEMENT ADD SECRET SQL文を使用してキーストアに格納されている必要があります。

SNAPSHOT COPY句を使用してソースPDBのクローンを作成する場合は、クローンが存在するかぎり、次の制限がソースPDBに適用されます。

- 切断できません。

- 削除できません。

SNAPSHOT COPY句を使用して作成したPDBのクローンは、切断できません。削除のみ可能です。SNAPSHOT COPY句を使用して作成したクローンを切断しようとすると、エラーが発生します。

Oracle Real Application Clusters (Oracle RAC)環境でSNAPSHOT COPY句を使用して作成されたPDBの場合、PDBのファイルにアクセスする必要がある各ノードは、マウントされている必要があります。LinuxまたはUNIXプラットフォームで実行されているOracle RACデータベースには、基礎となるNFSボリュームがマウントされている必要があります。Oracle RACデータベースがWindowsプラットフォームで実行され、かつ、共有記憶域にDirect NFSを使用している場合は、作成したボリュームexportおよびmountのエントリを含むすべてのノード上のoranfstabファイルを更新する必要があります。

記憶域クローンには、新しいPDBのGUIDを使用して名前およびタグが付けられます。DBA_PDB_HISTORYビューのCLONETAG列を問い合せて、記憶域クローンのクローン・タグを表示できます。

NO DATA

注意:
NO DATA句は、Oracle Database 12cリリース1(12.1.0.2)から使用可能です。

PDBをクローニングする場合のみ、NO DATA句が適用されます。この句は、PDBのデータではなくソースPDBのデータ・モデル定義のクローニングを指定します。ソースPDBのディクショナリ・データがクローニングされますが、ソースPDBのすべてのユーザー作成表および索引データが廃棄されます。

NO DATA句の制限事項 次の制限事項がNO DATA句に適用されます。

- CDB以外をクローニングする場合、NO DATAを指定できません。

- ソースPDBにクラスタ表、クラスタ化表、アドバンスト・キューイング(AQ)表、索引構成表または抽象データ型列が含まれる場合、NO DATAを指定できません。

create_pdb_from_xml

この句を使用すると、切断されたPDBまたは非CDB(ソース・データベース)をCDB(ターゲットCDB)に接続することによって、PDBを作成できます。ソース・データベースが切断されたPDBである場合は、ターゲットCDBから切断されたものでも、別のCDBから切断されたものでもかまいません。

ソース・データベースとターゲットCDBが次の要件を満たしている必要があります。

- エンディアン形式が同じであること。

- 互換性のあるキャラクタ・セットおよび各国語キャラクタ・セットが設定されていること。これは次のことを意味します。

- ソース・データベースのキャラクタ・セット内の各文字がターゲットCDBのキャラクタ・セットで使用可能であること。

- ソース・データベースのキャラクタ・セット内の各文字のコード・ポイント値がターゲットCDBのキャラクタ・セットのコード・ポイント値と同じであること。

- これらには、同じセットのデータベース・オプションがインストールされている必要があります。

関連項目:

- CDBへの切断されたPDBの接続によるPDBの作成手順および非CDBを使用したPDBの作成手順の詳細は、『Oracle Database管理者ガイド』を参照してください。

- DBMS_PDBパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

AS CLONE句

この句は、同じデータファイル・セットを使用して作成されたPDBがターゲットCDBにすでに含まれている場合にのみ指定します。ソース・ファイルは切断されたPDBとして維持され、再使用可能です。また、AS CLONE句を指定すると、DBIDやGUIDなどの新しい識別子が新しいPDB用に確実に生成されるようになります。

USING句

filenameを使用して、接続するソース・データベースについて記述しているメタデータを含むXMLファイルの名前を指定できます。このXMLファイルと、ソース・データベースに関連付けられたファイルは、CDBにアクセスできる場所に存在している必要があります。このファイルは次のように取得できます。

- ソース・データベースが切断されたPDBである場合、このXMLメタデータ・ファイルはALTER PLUGGABLE DATABASEのpdb_unplug_clauseによって生成されています。

- ソース・データベースが非CDBである場合は、DBMS_PDBパッケージを使用して、このXMLメタデータ・ファイルを作成する必要があります。

source_file_name_convert

XMLファイルの内容がソース・ファイルの場所を正確に記述していない場合にのみ、この句を指定してください。ソース・データベースを接続するために使用する必要があるファイルが、XMLファイルに指定されている場所に今ではもう存在しない場合は、この句を使用して、指定されているファイル名を実際のファイル名にマップします。

- filename_patternには、XMLファイルで指定されたファイルの場所の文字列を指定します。

- replacement_filename_patternには、PDBを作成するために使用する必要のあるファイルが含まれる実際の場所の文字列を指定します。

ソース・データベース・ファイルの検索時に、filename_patternがreplacement_filename_patternに置換されます。

Oracle Managed Filesで管理されているファイルまたはディレクトリと一致するファイル名のパターンは指定できません。

PDBの作成に使用する必要のあるファイルが、XMLファイルで指定された場所に存在するときには、この句を省略してもかまいません。また、SOURCE_FILE_NAME_CONVERT=NONEを指定することもできます。

source_file_directory

注意:
source_file_directory句は、Oracle Database 12cリリース1 (12.1.0.2)以降で使用可能です。

XMLファイルの内容がソース・ファイルの場所を正確に記述しておらず、かつソース・ファイルがすべて単一ディレクトリに存在する場合にのみ、この句を指定してください。この句は、大量のデータ・ファイルがあり、source_file_name_convert句を使用した各ファイルの置換ファイル名パターンの指定が現実的でない場合に便利です。

- directory_path_nameには、ソース・ファイルを含むディレクトリの絶対パスを指定します。切断されたPDBのXMLファイルに基づいて適切なファイルを検索するためにディレクトリがスキャンされます。

この句は、Oracle Managed Filesを使用する構成とOracle Managed Filesを使用しない構成に対して指定できます。

PDBの作成に使用する必要のあるファイルが、XMLファイルで指定された場所に存在するときには、この句を省略してもかまいません。また、SOURCE_FILE_DIRECTORY=NONEを指定することもできます。

COPY句

XMLファイルにリストされたファイルを新しい場所にコピーして、新規PDB用に使用する場合は、COPYを指定します。これはデフォルトです。オプションのfile_name_convert句を使用して、新しいファイル名でパターンの置換を使用することができます。この句のセマンティクスの詳細は、「file_name_convert」を参照してください。

MOVE句

XMLファイルにリストされたファイルを新しい場所にコピーではなく移動して、新規PDB用に使用する場合は、MOVEを指定します。オプションのfile_name_convert句を使用して、新しいファイル名でパターンの置換を使用することができます。この句のセマンティクスの詳細は、「file_name_convert」を参照してください。

NOCOPY句

PDBのファイルを現在の場所に残す場合は、NOCOPYを指定します。PDBを接続するために、ファイルをコピーしたり移動したりする必要がない場合は、この句を使用してください。

pdb_storage_clause

この句を使用して、新規PDBの記憶域制限値を指定します。この句のセマンティクスの詳細は、「pdb_storage_clause」を参照してください。

path_prefix_clause

この句を使用して、PDBに関連付けられたすべてのディレクトリ・オブジェクト・パスを、指定したディレクトリまたはそのサブディレクトリに確実に制限できます。この句のセマンティクスの詳細は、「path_prefix_clause」を参照してください。

tempfile_reuse_clause

TEMPFILE REUSEを指定すると、新しいPDBに関連付けられている一時ファイルがすでに存在する場合は、それをフォーマットして再利用できます。このセマンティクスの詳細は、「tempfile_reuse_clause」を参照してください。

例

シードを使用したPDBの作成例: 次の文は、CDBに含まれているシードをテンプレートとして使用することで、PDB salespdbを作成します。管理ユーザーsalesadmが作成され、このユーザーにdbaロールが付与されます。永続表領域が割り当てられていないSYSTEM以外のユーザーには、デフォルト表領域salesが割り当てられます。新しいPDBのファイル名は、シードのファイル名の/disk1/oracle/dbs/pdbseed/を/disk1/oracle/dbs/salespdb/に置換することによって構成されます。salesに属するすべての表領域は2Gを超えてはいけません。salespdbに関連付けられているすべてのディレクトリ・オブジェクト・パスの場所が、/disk1/oracle/dbs/salespdb/ディレクトリに制限されます。

CREATE PLUGGABLE DATABASE salespdb
ADMIN USER salesadm IDENTIFIED BY password
ROLES = (dba)
DEFAULT TABLESPACE sales
DATAFILE '/disk1/oracle/dbs/salespdb/sales01.dbf' SIZE 250M AUTOEXTEND ON
FILE_NAME_CONVERT = ('/disk1/oracle/dbs/pdbseed/',
'/disk1/oracle/dbs/salespdb/')
STORAGE (MAXSIZE 2G)
PATH_PREFIX = '/disk1/oracle/dbs/salespdb/';

既存のPDBからのPDBのクローンの作成例: 次の文は、PDB pdb1をクローニングすることによって、PDB pdb2を作成します。PDB newpdbとsalespdbは同じCDB内に存在します。記憶域の制限値を明示的に指定していないため、newpdbの容量には制限がなくなります。ファイルは/disk1/oracle/dbs/salespdb/から/disk1/oracle/dbs/newpdb/にコピーされます。newpdbに関連付けられているすべてのディレクトリ・オブジェクト・パスの場所が、/disk1/oracle/dbs/newpdb/ディレクトリに制限されます。

CREATE PLUGGABLE DATABASE newpdb FROM salespdb
FILE_NAME_CONVERT = ('/disk1/oracle/dbs/salespdb/', '/disk1/oracle/dbs/newpdb/')
PATH_PREFIX = '/disk1/oracle/dbs/newpdb';

CDBへのPDBの接続: 例 この文は、以前に切断されたPDB salespdbをCDBに接続します。salespdbについて記述するメタデータの詳細は、XMLファイル/disk1/usr/salespdb.xmlに格納されています。XMLファイルでは、ファイルの現在の場所が正確に記述されていません。したがって、SOURCE_FILE_NAME_CONVERT句は、ファイルが/disk1/oracle/dbs/salespdb/ではなく/disk2/oracle/dbs/salespdb/にあることを示すために使用されます。NOCOPY句は、ファイルがすでに適切な場所に存在することを示します。salesに属するすべての表領域は2Gを超えてはいけません。ターゲットの場所に、XMLファイルで指定されている一時ファイルと同じ名前のファイルがあります。したがって、TEMPFILE REUSE句が必要です。

CREATE PLUGGABLE DATABASE salespdb
USING '/disk1/usr/salespdb.xml'
SOURCE_FILE_NAME_CONVERT =
('/disk1/oracle/dbs/salespdb/', '/disk2/oracle/dbs/salespdb/')
NOCOPY
STORAGE (MAXSIZE 2G)
TEMPFILE REUSE;

CREATE PROCEDURE

用途

プロシージャはPL/SQLを使用して定義されます。このため、この項では一般的な情報について説明します。構文およびセマンティクスの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

CREATE PROCEDURE文を使用すると、スタンドアロンのストアド・プロシージャまたはコール仕様を作成できます。

プロシージャとは、名前によってコールできるPL/SQL文の集合です。コール仕様は、SQLおよびPL/SQLからコールできるように、Javaメソッドまたは第三世代言語(3GL)ルーチンを宣言します。コール仕様は、コールされたときに起動するJavaメソッドをOracle Databaseに指示します。また、引数および戻り値に対して実行する型変換もデータベースに指示します。

ストアド・プロシージャには、開発、整合性、セキュリティ、パフォーマンスおよびメモリー割当ての面でいくつかのメリットがあります。

関連項目:

- ストアド・プロシージャのコール方法など、ストアド・プロシージャの詳細および外部プロシージャの登録については、『Oracle Database開発ガイド』を参照してください。

- プロシージャと類似点が多いファンクションの詳細は、「CREATE FUNCTION」を参照してください。

- パッケージの作成の詳細は、「CREATE PACKAGE」を参照してください。CREATE PROCEDURE文では、スタンドアロンのスキーマ・オブジェクトとしてプロシージャが作成されます。また、プロシージャをパッケージの一部としても作成できます。

- スタンドアロン・プロシージャの変更および削除については、「ALTER PROCEDURE」および「DROP PROCEDURE」を参照してください。

- 共有ライブラリについては、「CREATE LIBRARY」を参照してください。

前提条件

自分のスキーマ内にプロシージャを作成または再作成する場合は、CREATE PROCEDUREシステム権限が必要です。他のユーザーのスキーマ内にプロシージャを作成または再作成する場合は、CREATE ANY PROCEDUREシステム権限が必要です。

コール仕様を起動する場合、その他の権限が必要になることがあります。たとえば、Cコール仕様には、Cライブラリに対するEXECUTEオブジェクト権限が必要です。

Oracleプリコンパイラ・プログラム内にCREATE PROCEDURE文を埋め込む場合、キーワードEND-EXECに続けて、各言語の埋込みSQL文の終了記号を記述して文を終了する必要があります。

関連項目:
詳細は、『Oracle Database PL/SQL言語リファレンス』または『Oracle Database Java開発者ガイド』を参照してください。

構文

プロシージャはPL/SQLを使用して定義されます。このため、このマニュアルの構文図ではSQLキーワードのみを示します。PL/SQLの構文、セマンティクスおよび例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。

create_procedure::=

(plsql_procedure_source: 『Oracle Database PL/SQL言語リファレンス』を参照。)

セマンティクス

OR REPLACE

OR REPLACEを指定すると、既存のプロシージャを再作成できます。この句を指定した場合、プロシージャに付与されているオブジェクト権限を削除、再作成および再付与しなくても、既存のプロシージャの定義を変更できます。プロシージャを再定義した場合、そのプロシージャは自動的に再コンパイルされます。

再定義したプロシージャに対して権限が付与されていたユーザーは、権限が再付与されなくてもそのプロシージャにアクセスできます。

ファンクション索引がプロシージャに依存している場合、索引にDISABLEDのマークが付きます。

関連項目:
プロシージャの再コンパイルについては、「ALTER PROCEDURE」を参照してください。

[ EDITIONABLE | NONEDITIONABLE ]

この句を使用すると、schemaのスキーマ・オブジェクト・タイプPROCEDUREのエディショニングが有効化されたときに、そのプロシージャをエディション・オブジェクトにするか非エディション・オブジェクトにするかを指定できます。デフォルトは、EDITIONABLEです。エディション・オブジェクトと非エディション・オブジェクトの詳細は、『Oracle Database開発ガイド』を参照してください。

plsql_procedure_source

plsql_procedure_sourceの構文およびセマンティクスについては、『Oracle Database PL/SQL言語リファレンス』を参照してください。

CREATE PROFILE

注意:
リソース制限を設定する場合、このSQL文ではなく、データベース・リソース・マネージャを使用することをお薦めします。データベース・リソース・マネージャを使用すると、リソース使用の管理および監査を柔軟に行うことができます。データベース・リソース・マネージャの詳細は、『Oracle Database管理者ガイド』を参照してください。

用途

CREATE PROFILE文を使用すると、プロファイルを作成できます。プロファイルとは、データベース・リソースの制限の集合です。プロファイルをユーザーに割り当てた場合、そのユーザーはそれらの制限を超えることはできません。

関連項目:
パスワード管理およびパスワード保護の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

前提条件

プロファイルを作成する場合、CREATE PROFILEシステム権限が必要です。

次の方法でユーザーに対するリソース制限を指定します。

- ALTER SYSTEM文または初期化パラメータRESOURCE_LIMITで動的にリソース制限を使用可能にします。このパラメータは、パスワード・リソースには適用されません。パスワード・リソースは、常に使用可能です。

- CREATE PROFILE文を使用して、制限を定義するプロファイルを作成します。

- CREATE USERまたはALTER USER文を使用して、プロファイルを割り当てます。

CONTAINER句を指定する場合は、マルチテナント・コンテナ・データベース(CDB)に接続している必要があります。CONTAINER = ALLを指定する場合は、現在のコンテナがルートである必要があります。CONTAINER = CURRENTを指定するには、現在のコンテナがプラガブル・データベース(PDB)である必要があります。

関連項目:

- 動的にリソース制限を使用可能にする場合の詳細は、「ALTER SYSTEM」を参照してください。

- RESOURCE_LIMITパラメータについては、『Oracle Databaseリファレンス』を参照してください。

- プロファイルについては、「CREATE USER」および「ALTER USER」を参照してください。

構文

create_profile::=

resource_parameters::=

(size_clause::=を参照)

password_parameters::=

セマンティクス

profile

作成するプロファイルの名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。プロファイルを使用した場合、ユーザーが使用可能なデータベース・リソースを1つのコールまたは1つのセッションごとに制限できます。

CDB以外では、プロファイル名の先頭をC##またはc##にできません。

CDBでは、プロファイル名の要件は次のとおりです。

- Oracle Database 12cリリース1(12.1.0.1)では、共通プロファイルの名前は、C##またはc##から始める必要があり、ローカル・プロファイルの名前は、C##またはc##から始めないでください。

- Oracle Database 12cリリース1(12.1.0.2)以降:

- 共通プロファイルの名前は、COMMON_USER_PREFIX初期化パラメータで指定された接頭辞と大/小文字を区別しないで一致する文字から始める必要があります。デフォルトでは、接頭辞はC##です。

- ローカル・プロファイルの名前は、COMMON_USER_PREFIX初期化パラメータで指定された接頭辞と大/小文字を区別しないで一致する文字から始めないでください。COMMON_USER_PREFIXの値に関係なく、ローカル・プロファイルの名前の先頭にC##またはc##を使用できません。

注意:
COMMON_USER_PREFIXの値が空の文字列である場合、共通またはローカル・プロファイル名に要件はありませんが、次の1つの例外があります。ローカル・プロファイルの名前の先頭にC##またはc##を使用できません。PDBを別のCDBに接続する場合または共通ユーザーの作成時に閉じられたPDBを開く場合、ローカルおよび共通プロファイルの名前が競合する可能性があるため、空の文字列を使用しないことをお薦めします。

Oracle Databaseでは、次の方法でリソース制限を適用します。

- CONNECT_TIMEまたはIDLE_TIMEで指定したセッション・リソース制限を超えた場合、現行のトランザクションが自動的にロールバックされ、セッションが終了します。ユーザー・プロセスで次にコールを実行すると、エラーが戻ります。

- 他のセッション・リソースに対する制限を超える処理を実行しようとした場合、その処理が自動的に中断され、現行の文がロールバックされ、すぐにエラーが戻されます。この後、ユーザーは、現行のトランザクションをコミットまたはロールバックできます。そして、セッションを終了する必要があります。

- 1つのコールに対する制限を超える処理を実行しようとした場合、その処理が自動的に中断され、現行の文がロールバックされ、エラーが戻されます。この場合、現行のトランザクションは有効です。

注意:

- 日を単位として、時間を制限するすべてのパラメータに対して、分数で日数を指定できます。たとえば、1時間は1/24、1分は1/1440になります。

- リソース制限を使用可能にしているかどうかにかかわらず、ユーザーに対してリソース制限を指定できます。ただし、Oracle Databaseでは、実際にその制限が使用可能になってからリソース制限が適用されます。

関連項目:
「プロファイルの作成例:」

UNLIMITED

リソース・パラメータでUNLIMITEDを指定すると、このプロファイルを割り当てられたユーザーは無制限にリソースを使用できます。パスワード・パラメータでUNLIMITEDを指定した場合は、パラメータに制限が設定されていないことを示します。

DEFAULT

DEFAULTを指定すると、このプロファイルでリソースの制限を省略できます。このプロファイルを割り当てられたユーザーは、DEFAULTプロファイルで指定した対象リソースに対する制限を受けます。DEFAULTプロファイルは、最初に無制限のリソースを定義します。ALTER PROFILE文でこの制限を変更できます。

明示的にプロファイルが割り当てられていないユーザーは、DEFAULTプロファイルに定義されている制限を受けます。ユーザーに明示的に割り当てられているプロファイルでリソースに対する制限が省略されている場合、または制限に対してDEFAULTが指定されている場合、ユーザーはDEFAULTプロファイルで定義されているリソースに関する制限を受けます。

resource_parameters

SESSIONS_PER_USER ユーザーを制限する同時セッションの数を指定します。

CPU_PER_SESSION  1セッション当たりのCPU時間制限を指定します。この値は100分の1秒単位で指定します。

CPU_PER_CALL  1コール(解析、実行またはフェッチ)当たりのCPU時間制限を指定します。この値は100分の1秒単位で指定します。

CONNECT_TIME 1セッション当たりの合計経過時間制限を指定します。この値は分単位で指定します。

IDLE_TIME セッション中の連続的な非活動時間の長さを制限します。この値は分単位で指定します。実行時間の長い問合せおよびその他の操作には、この制限は適用されません。

LOGICAL_READS_PER_SESSION メモリーおよびディスクから読み込まれるブロックなど、1セッション中に読み込まれるデータ・ブロックの数の制限を指定します。

LOGICAL_READS_PER_CALL SQL文(解析、実行またはフェッチ)を処理する1つのコールで読み込まれるデータ・ブロックの数の制限を指定します。

PRIVATE_SGA 1つのセッションでシステム・グローバル領域(SGA)の共有プール内に割り当てることができるプライベート領域の大きさを指定します。この句の詳細は、「size_clause」を参照してください。

注意:
この制限は、共有サーバー・アーキテクチャを使用している場合のみに適用されます。SGA内のセッション用のプライベート領域には、プライベートSQLおよびPL/SQL領域が含まれますが、共有SQLおよびPL/SQL領域は含まれません。

COMPOSITE_LIMIT  1セッション当たりのリソースの総コストをサービス単位で指定します。サービス単位の合計は、CPU_PER_SESSION、CONNECT_TIME、LOGICAL_READS_PER_SESSIONおよびPRIVATE_SGAの重み付き合計として計算されます。

関連項目:

- セッション・リソースの重み付けを指定する方法については、「ALTER RESOURCE COST」を参照してください。

- 「プロファイルのリソース制限の設定の例:」

password_parameters

次の句を使用すると、パスワード・パラメータを設定できます。時間の長さを設定するパラメータ(FAILED_LOGIN_ATTEMPTSおよびPASSWORD_REUSE_MAXを除くすべてのパスワード・パラメータ)は、日数で解析されます。これらのパラメータには、テストのために、分(n/1440)または秒(n/86400)を指定できます。また、この目的のために小数値(約1時間を示す.0833など)も使用できます。最小値は1秒です。最大値は24855日です。FAILED_LOGIN_ATTEMPTSおよびPASSWORD_REUSE_MAXには、整数を指定する必要があります。

FAILED_LOGIN_ATTEMPTS ユーザー・アカウントがロックされる前に、そのアカウントへのログインに連続して失敗できる回数を指定します。この句を指定しない場合、10回がデフォルトになります。

PASSWORD_LIFE_TIME  同じパスワードを認証に使用できる日数を制限します。PASSWORD_GRACE_TIMEの値とともに設定した場合、猶予期間内にパスワードを変更しないと、そのパスワードは使用できなくなり、それ以降の接続は拒否されます。この句を指定しない場合、180日がデフォルトになります。

関連項目:
PASSWORD_LIFE_TIMEの値を短くする場合は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

PASSWORD_REUSE_TIMEおよびPASSWORD_REUSE_MAX  これら2つのパラメータは、両方を組み合せて設定する必要があります。PASSWORD_REUSE_TIMEは、パスワードを再利用できない日数を指定します。PASSWORD_REUSE_MAXは、現行のパスワードを再利用する前に必要な、パスワードの変更回数を指定します。これらのパラメータを有効にするには、両方のパラメータに値を指定する必要があります。

- 両方のパラメータに値を指定すると、PASSWORD_REUSE_TIMEに指定した日数の間は、PASSWORD_REUSE_MAXに指定した回数までパスワードが変更されなりかぎり、パスワードを再利用できません。
たとえば、PASSWORD_REUSE_TIMEに30を指定し、PASSWORD_REUSE_MAXに10を指定した場合、パスワードが10回変更されていると、30日後にパスワードを再利用できます。

- これらのパラメータのいずれかに値を指定し、他方にUNLIMITEDを指定すると、パスワードは再利用できなくなります。

- いずれかのパラメータにDEFAULTを指定すると、DEFAULTプロファイルに定義された値が使用されます。DEFAULTプロファイルでは、すべてのパラメータはデフォルトでUNLIMITEDに設定されます。DEFAULTプロファイルのデフォルト設定のUNLIMITEDを変更していない場合、パラメータの値はUNLIMITEDとして扱われます。

- 両方のパラメータをUNLIMITEDに設定すると、これらのパラメータは無視されます。これは、両方のパラメータを指定しない場合のデフォルトです。

PASSWORD_LOCK_TIME  ログインが指定された回数連続して失敗した場合、アカウントがロックされる日数を指定します。この句を指定しない場合、1日がデフォルトになります。

PASSWORD_GRACE_TIME  警告が出され、ログインが許可される猶予期間の日数を指定します。この句を指定しない場合、7日がデフォルトになります。

PASSWORD_VERIFY_FUNCTION PASSWORD_VERIFY_FUNCTION句を使用すると、PL/SQLの複雑なパスワード検証スクリプトをCREATE PROFILE文の引数として渡すことができます。Oracle Databaseにはデフォルトのスクリプトがありますが、ユーザー固有のルーチンを作成することも、サード・パーティのソフトウェアを使用することもできます。

- functionには、複雑なパスワード検証ルーチンの名前を指定します。ファンクションがSYSスキーマ内にある必要があり、ファンクションにEXECUTE権限が必要です。

- NULLを指定すると、パスワードの検証が行われないことを示します。

パスワード・パラメータにexprを指定する場合、スカラー副問合せ式を除くすべての形式の式を指定できます。

パスワード・パラメータの制限事項 外部ユーザーまたはグローバル・ユーザーにプロファイルを割り当てると、パスワード・パラメータはそのユーザーに対して無効になります。

関連項目:
「プロファイルのパスワード制限の設定例:」

CONTAINER句

CONTAINER句は、CDBに接続しているときに適用されます。ただし、デフォルト値が使用できる唯一の値であるため、CONTAINER句を指定する必要はありません。

- 共通プロファイルを作成するには、ルートに接続する必要があります。ルートに接続する場合にデフォルトのCONTAINER = ALLをオプションで指定できます。

- ローカル・プロファイルを作成するには、PDBに接続する必要があります。PDBに接続する場合にデフォルトのCONTAINER = CURRENTをオプションで指定できます。

例

プロファイルの作成例: 次の文は、プロファイルnew_profileを作成します。

CREATE PROFILE new_profile
LIMIT PASSWORD_REUSE_MAX 10
PASSWORD_REUSE_TIME 30;

プロファイルのリソース制限の設定の例: 次の文は、プロファイルapp_userを作成します。

CREATE PROFILE app_user LIMIT
SESSIONS_PER_USER          UNLIMITED
CPU_PER_SESSION            UNLIMITED
CPU_PER_CALL               3000
CONNECT_TIME               45
LOGICAL_READS_PER_SESSION  DEFAULT
LOGICAL_READS_PER_CALL     1000
PRIVATE_SGA                15K
COMPOSITE_LIMIT            5000000;

ユーザーにapp_userプロファイルを割り当てた場合、そのユーザーは、後続のセッションで次の制限を受けます。

- ユーザーは、無制限に同時セッションを使用できます。

- 1つのセッションにおいて、ユーザーはCPU時間を無制限に使用できます。

- ユーザーが作成した1つのコールで消費できるCPU時間は30秒以下です。

- 1つのセッションで継続できる時間は45分以下です。

- 1つのセッションでメモリーおよびディスクから読み込むデータ・ブロック数は、DEFAULTプロファイルで指定した制限を受けます。

- ユーザーが実行した1つのコールで、メモリーまたはディスクから読み込むことができるデータ・ブロック数の合計は1000以下です。

- 1つのセッションで割り当てることができるSGA内のメモリーは、15KB以下です。

- 1つのセッションのリソースの総コストは、サービス単位で500万を超えることはできません。リソースの総コストの計算式は、ALTER RESOURCE COST文で指定します。

- app_userプロファイルでは、IDLE_TIMEおよびパスワードに対する制限が指定されていないため、ユーザーはDEFAULTプロファイルに指定されているこれらのリソースの制限を受けます。

プロファイルのパスワード制限の設定例: 次の文は、app_user2プロファイルに、パスワード制限値を設定して作成します。

CREATE PROFILE app_user2 LIMIT
FAILED_LOGIN_ATTEMPTS 5
PASSWORD_LIFE_TIME 60
PASSWORD_REUSE_TIME 60
PASSWORD_REUSE_MAX 5
PASSWORD_VERIFY_FUNCTION verify_function
PASSWORD_LOCK_TIME 1/24
PASSWORD_GRACE_TIME 10;

この例では、Oracle Databaseのデフォルトのパスワード検証ファンクションverify_functionを使用します。この検証ファンクションの使用方法または独自の検証ファンクションの設計方法については、『Oracle Databaseセキュリティ・ガイド』を参照してください。

CREATE RESTORE POINT

用途

CREATE RESTORE POINT文を使用すると、リストア・ポイント(タイムスタンプまたはデータベースのSCNに関連付けられた名前)を作成できます。リストア・ポイントを使用すると、リストア・ポイントで指定された時点に表またはデータベースをフラッシュバックできるため、SCNまたはタイムスタンプかを判断する必要がありません。リストア・ポイントは、バックアップやデータベースの複製など、様々なRMAN操作でも有効です。RMANを使用して、アーカイブ・バックアップの実装プロセスにリストア・ポイントを作成できます。

関連項目:

- リストア・ポイントおよび保証付きリストア・ポイントの作成と使用、データベースの複製およびアーカイブ・バックアップの詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

- リストア・ポイントの使用方法および削除方法については、「FLASHBACK DATABASE」、「FLASHBACK TABLE」および「DROP RESTORE POINT」を参照してください。

前提条件

通常のリストア・ポイントを作成するには、SELECT ANY DICTIONARY、FLASHBACK ANY TABLE、SYSDBA、SYSBACKUP、SYSDGシステム権限が必要です。保証付きリストア・ポイントを作成するには、SYSDBA、SYSBACKUP、またはSYSDGシステム権限が必要です。

リストア・ポイントを表示または使用するには、SELECT ANY DICTIONARYまたはFLASHBACK ANY TABLE、SYSDBA、SYSBACKUP、またはSYSDGのいずれかのシステム権限か、SELECT_CATALOG_ROLEロールが必要です。

リストア・ポイントは、プライマリ・データベースまたはスタンバイ・データベースに作成できます。データベースは、オープンされている状態でも、マウントされているがオープンされていない状態でもかまいません。データベースがマウントされている場合、それがフィジカル・スタンバイ・データベースでなければ、整合性を保持して停止されてからマウントされている必要があります。

保証付きリストア・ポイントを作成する場合は、その前に、高速リカバリ領域を作成しておく必要があります。フラッシュバック・データベースを使用可能にしておかなくても、リストア・ポイントは作成できます。保証付きリストア・ポイントを作成する場合、データベースはARCHIVELOGモードになっていることが必要です。

構文

create_restore_point::=

セマンティクス

restore_point

リストア・ポイントの名前を指定します。名前は、最大128文字の文字値です。

データベースには、2048個以上の通常のリストア・ポイントを保持できます。通常のリストア・ポイントは、少なくとも初期化パラメータCONTROL_FILE_RECORD_KEEP_TIMEで指定された日数はデータベース内に保持されます。そのパラメータのデフォルト値は7日です。保証付きのリストア・ポイントは、ユーザーが明示的に削除するまでデータベース内に保持されます。

PRESERVEもGUARANTEE FLASHBACK DATABASEも指定しない場合、結果のリストア・ポイントによって、DB_FLASHBACK_RETENTION_TARGET初期化パラメータで設定された期間内のリストア・ポイントにデータベースをフラッシュバックできます。そのようなリストア・ポイントは、データベースによって自動的に管理されます。リストア・ポイントの数が、前述のrestore_pointで定められた最大数に達すると、最も古いリストア・ポイントが自動的に削除されます。一定の状況では長期バックアップのリストアに使用するために、リストア・ポイントはRMANリカバリ・カタログに保持されます。DROP RESTORE POINT文を使用して、リストア・ポイントを明示的に削除することもできます。

AS OF句

この句を使用すると、過去の指定した日時またはSCNでリストア・ポイントを作成できます。TIMESTAMPを指定する場合、exprは過去の日時となる有効な日時式である必要があります。SCNを指定する場合、exprは過去のデータベースの有効なSCNである必要があります。どちらの場合にも、exprはデータベースの現行のインカネーションの日時またはSCNを参照する必要があります。

PRESERVE

PRESERVEを指定すると、リストア・ポイントを明示的に削除する必要があることを指定できます。このようなリストア・ポイントは、フラッシュバック・データベースを保持するのに有効です。

GUARANTEE FLASHBACK DATABASE

保証付きリストア・ポイントの場合、初期化パラメータDB_FLASHBACK_RETENTION_TARGETの設定とは無関係に、データベースをリストア・ポイントに確定的にフラッシュバックできます。フラッシュバック機能が保証されるかどうかは、高速リカバリ領域に十分な使用可能スペースがあるかどうかによって決まります。

保証付きリストア・ポイントで保証されるのは、データベースを保証付きリストア・ポイントにフラッシュバックするのに十分なフラッシュバック・ログが、データベースに保持されるということのみです。すべての表を同じリストア・ポイントにフラッシュバックするのに十分なUNDOがデータベースに保持されるかどうかは保証されません。

保証付きリストア・ポイントは、常に保存されます。DROP RESTORE POINT文を使用してユーザーが明示的に削除する必要があります。このリストア・ポイントは、期限切れになることはありません。保証付きリストア・ポイントは、高速リカバリ領域内の領域を大量に使用する場合があります。このため、保証付きリストア・ポイントは十分に検討したうえで作成することをお薦めします。

例

リストア・ポイントを作成して使用する例: 次の例では、通常のリストア・ポイントを作成し、表を更新してから、変更した表をリストア・ポイントにフラッシュバックします。この例は、ユーザーhrがそれぞれの文を使用する適切なシステム権限を持っていることを前提としています。

CREATE RESTORE POINT good_data;

SELECT salary FROM employees WHERE employee_id = 108;

SALARY
----------
12000

UPDATE employees SET salary = salary*10
WHERE employee_id = 108;

SELECT salary FROM employees
WHERE employee_id = 108;

SALARY
----------
120000

COMMIT;

FLASHBACK TABLE employees TO RESTORE POINT good_data;

SELECT salary FROM employees
WHERE employee_id = 108;

SALARY
----------
12000

CREATE ROLE

用途

CREATE ROLE文を使用すると、ロールを作成できます。ロールは、ユーザーまたは他のロールに付与できる権限の集合です。ロールを使用して、データベース権限を管理できます。ロールに権限を追加し、そのロールをユーザーに付与することができます。その後、ユーザーはロールを有効にして、そのロールによって付与された権限を行使することができます。

ロールには、そのロールに付与されたすべての権限、およびそのロールに付与された他のロールのすべての権限が含まれています。新しく作成されたロールには、ロールや権限は付与されていません。GRANT文を使用して、ロールに様々な権限を追加します。

NOT IDENTIFIED、IDENTIFIED EXTERNALLYまたはBY passwordロールを作成した場合、そのロールはADMIN OPTION付きで付与されます。ただし、ロールIDENTIFIED GLOBALLYを作成した場合、ロールは付与されません。グローバル・ロールは、ユーザーまたはロールに対して直接付与できません。グローバル・ロールを付与する場合は、エンタープライズ・ロールを介して行う必要があります。

関連項目:

- ロールの付与については、「GRANT」を参照してください。

- ロールを使用可能にする場合は、「ALTER USER」を参照してください。

- データベースのロールの変更または削除については、「ALTER ROLE」および「DROP ROLE」を参照してください。

- 現行のセッションに対するロールの使用可能化および使用禁止化については、「SET ROLE」を参照してください。

- ロールの概要は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

- エンタープライズ・ロールの詳細は、『Oracle Databaseエンタープライズ・ユーザー・セキュリティ管理者ガイド』を参照してください。

前提条件

CREATE ROLEシステム権限が必要です。

CONTAINER句を指定する場合は、マルチテナント・コンテナ・データベース(CDB)に接続している必要があります。CONTAINER = ALLを指定する場合は、現在のコンテナがルートである必要があります。CONTAINER = CURRENTを指定するには、現在のコンテナがプラガブル・データベース(PDB)である必要があります。

構文

create_role::=

セマンティクス

role

作成するロールの名前を指定します。データベース・キャラクタ・セットにマルチバイト文字がサポートされている場合でも、ロールにはシングルバイト文字を1つ以上使用することをお薦めします。ロールの名前の最大長は30バイトです。各ユーザーに対し、一度に使用可能にできるユーザー定義のロールの最大数は148です。

CDB以外では、ロール名の先頭をC##またはc##にできません。

CDBでは、ロール名の要件は次のとおりです。

- Oracle Database 12cリリース1(12.1.0.1)では、共通ロールの名前は、C##またはc##から始める必要があり、ローカル・ロールの名前は、C##またはc##から始めないでください。

- Oracle Database 12cリリース1(12.1.0.2)以降:

- 共通ロールの名前は、COMMON_USER_PREFIX初期化パラメータで指定された接頭辞と大/小文字を区別しないで一致する文字から始める必要があります。デフォルトでは、接頭辞はC##です。

- ローカル・ロールの名前は、COMMON_USER_PREFIX初期化パラメータで指定された接頭辞と大/小文字を区別しないで一致する文字から始めないでください。COMMON_USER_PREFIXの値に関係なく、ローカル・ロールの名前の先頭にC##またはc##を使用できません。

注意:
COMMON_USER_PREFIXの値が空の文字列である場合、共通またはローカル・ロール名に要件はありませんが、次の1つの例外があります。ローカル・ロールの名前の先頭にC##またはc##を使用できません。PDBを別のCDBに接続する場合または共通ユーザーの作成時に閉じられたPDBを開く場合、ローカルおよび共通ロールの名前が競合する可能性があるため、空の文字列を使用しないことをお薦めします。

配布メディアで提供されているSQLスクリプトには、いくつかのロールが定義されています。

関連項目:
事前定義済のロールのリストについては、「GRANT」を、ユーザーに対するロールの使用可能化および使用禁止化については、「SET ROLE」を参照してください。

NOT IDENTIFIED句

NOT IDENTIFIEDを指定すると、指定するロールがデータベースによって認可され、パスワードを入力しなくてもこのロールを使用可能にできます。

IDENTIFIED句

IDENTIFIED句を使用すると、SET ROLE文によってロールを使用可能にする前に、指定したメソッドによってユーザーが認可される必要があります。

BY password BY password句を使用すると、ローカル・ロールを作成できます。また、ロールを使用可能にするときに、データベースに対するパスワードの指定を要求できます。データベース・キャラクタ・セットにマルチバイト文字が含まれている場合でも、データベース・キャラクタ・セットのシングルバイト文字のみでパスワードを指定できます。

USING package USING package句を使用すると、保護アプリケーション・ロールを作成できます。保護アプリケーション・ロールとは、認可済パッケージを使用するアプリケーションによってのみ使用可能になるロールです。schemaを指定しない場合、パッケージは自分のスキーマ内にあるとみなされます。

関連項目:
保護アプリケーション・ロールの作成については、『Oracle Databaseセキュリティ・ガイド』を参照してください。

EXTERNALLY EXTERNALLYを指定すると、外部ロールを作成できます。外部ユーザーは、ロールを使用可能にする前に、オペレーティング・システムやサード・パーティ・サービスなどの外部サービスによって認可されている必要があります。

オペレーティング・システムによっては、ユーザーがオペレーティング・システムに対してパスワードを指定しないと、ロールが使用可能にできない場合もあります。

GLOBALLY GLOBALLYを指定すると、グローバル・ロールを作成できます。グローバル・ユーザーは、ログイン時にロールの使用が可能になる前に、エンタープライズ・ディレクトリ・サービスによってロールの使用を認可されている必要があります。

NOT IDENTIFIED句およびIDENTIFIED句を両方とも省略した場合、ロールにはNOT IDENTIFIEDがデフォルト値として使用されます。

CONTAINER句

CONTAINER句は、CDBに接続しているときに適用されます。ただし、デフォルト値が使用できる唯一の値であるため、CONTAINER句を指定する必要はありません。

- 共通ロールを作成するには、ルートに接続する必要があります。ルートに接続する場合にデフォルトのCONTAINER = ALLをオプションで指定できます。

- ローカル・ロールを作成するには、PDBに接続する必要があります。PDBに接続する場合にデフォルトのCONTAINER = CURRENTをオプションで指定できます。

例

ロールの作成例: 次の文は、ロールdw_managerを作成します。

CREATE ROLE dw_manager;

この後にdw_managerロールを付与されるユーザーは、このロールに付与されているすべての権限を継承します。

次の例のように、パスワードの指定によってロールにセキュリティのレイヤーを追加できます。

CREATE ROLE dw_manager
IDENTIFIED BY warehouse;

この後、dw_managerロールを付与されたユーザーは、パスワードwarehouseを指定して、SET ROLE文でロールを使用可能にする必要があります。

次の文は、グローバル・ロールwarehouse_userを作成します。

CREATE ROLE warehouse_user IDENTIFIED GLOBALLY;

次の文は、同じロールを外部ロールとして作成します。

CREATE ROLE warehouse_user IDENTIFIED EXTERNALLY;

次の文は、現在のPDBにローカル・ロールrole1を作成します。この文を発行するときには、現在のコンテナがPDBである必要があります。

CREATE ROLE role1 CONTAINER = CURRENT;

次の文では、共通ロールc##role1を作成します。この文を発行するときには、現在のコンテナがルートである必要があります。

CREATE ROLE c##role1 CONTAINER = ALL;

CREATE ROLLBACK SEGMENT

注意:
ロールバック・セグメントを使用せずに、自動UNDO管理モードでデータベースを実行することを強くお薦めします。ロールバック・セグメントは、以前のバージョンのOracle Databaseとの互換性に必要な場合以外は使用しないでください。自動UNDO管理の詳細は、『Oracle Database管理者ガイド』を参照してください。

用途

CREATE ROLLBACK SEGMENT文を使用すると、ロールバック・セグメントを作成できます。ロールバック・セグメントとは、トランザクションによる変更を元に戻す(取り消す)ために必要なデータを格納する際にOracle Databaseが使用するオブジェクトです。

ここでは、データベースがロールバックUNDOモードで実行されている(初期化パラメータUNDO_MANAGEMENTにMANUALを設定、またはすべて設定しない)ことを前提としています。データベースを自動UNDOモード(UNDO_MANAGEMENT初期化パラメータを、デフォルト設定であるAUTOに設定します)で実行している場合は、ロールバック・セグメントは使用できません。ただし、ロールバック・セグメントでのエラーの生成は抑制されます。

また、データベースにローカル管理SYSTEM表領域がある場合、ディクショナリ管理表領域にロールバック・セグメントは作成できません。かわりに、自動UNDO管理機能を使用するか、またはローカル管理表領域を作成して、ロールバック・セグメントを保持する必要があります。

注意:
1つの表領域に複数のロールバック・セグメントを作成できます。一般に、複数のロールバック・セグメントがあると、パフォーマンスが向上します。

- 表領域にロールバック・セグメントを追加する場合、表領域は必ずオンラインである必要があります。

- ロールバック・セグメントを作成した場合、最初はオフライン状態になります。そのロールバック・セグメントをOracle Databaseインスタンスでトランザクション可能にする場合、ALTER ROLLBACK SEGMENT文を使用してオンラインの状態にしてください。データベース起動時に自動的にオンライン状態にする場合、初期化パラメータROLLBACK_SEGMENTの値にそのセグメントの名前を追加してください。

SYSTEM以外の表領域のオブジェクトを使用する場合は、次の注意事項があります。

- UNDO用にロールバック・セグメントを使用するには、1つ以上のロールバック・セグメント(SYSTEMロールバック・セグメント以外)がオンラインである必要があります。

- 自動UNDOモードでデータベースを実行するには、1つ以上のUNDO表領域がオンラインである必要があります。

関連項目:

- ロールバック・セグメントの変更については、「ALTER ROLLBACK SEGMENT」を参照してください。

- ロールバック・セグメントの削除については、「DROP ROLLBACK SEGMENT」を参照してください。

- UNDO_MANAGEMENTパラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

- 自動UNDOモードの詳細は、『Oracle Database管理者ガイド』を参照してください。

前提条件

ロールバック・セグメントを作成するには、CREATE ROLLBACK SEGMENTシステム権限が必要です。

構文

create_rollback_segment::=

(storage_clauseを参照)

セマンティクス

PUBLIC

PUBLICを指定すると、ロールバック・セグメントがパブリックとなり、すべてのインスタンスに対して使用可能にできます。この句を省略した場合、ロールバック・セグメントはプライベートになり、インスタンスの初期化パラメータROLLBACK_SEGMENTSで指定したインスタンスに対してのみ使用可能になります。

rollback_segment

作成するロールバック・セグメントの名前を指定します。

TABLESPACE

TABLESPACE句を使用すると、ロールバック・セグメントが作成される表領域を指定できます。この句を省略した場合、ロールバック・セグメントはSYSTEM表領域に作成されます。

注意:
Oracle Databaseは、頻繁にロールバック・セグメントにアクセスする必要があります。そのため、明示的または(この句を省略して)暗黙的に、ロールバック・セグメントをSYSTEM表領域に作成しないことをお薦めします。さらに、ロールバック・セグメントが含まれている表領域の競合を回避するために、この表領域には表、索引などの他のオブジェクトを含めないでください。また、エクステントの割当ておよび割当て解除は、最小限に抑える必要があります。
そのためには、自動割当てを使用禁止にしたローカル管理表領域にロールバック・セグメントを作成します。このような表領域は、EXTENT MANAGEMENT LOCAL句にUNIFORMを指定して作成します。AUTOALLOCATE設定はサポートされません。

関連項目:
「CREATE TABLESPACE」

storage_clause

storage_clauseを使用すると、ロールバック・セグメントの記憶特性を指定できます。

- storage_clauseのOPTIMALパラメータは、ロールバック・セグメントにのみ適用されるので、特に重要です。

- storage_clauseのPCTINCREASEパラメータは、CREATE ROLLBACK SEGMENTでは指定できません。

関連項目:
storage_clause

例

ロールバック・セグメントの作成例: 次の文は、適切に構成された表領域にデフォルトの記憶域値でロールバック・セグメントを作成します。

CREATE TABLESPACE rbs_ts
DATAFILE 'rbs01.dbf' SIZE 10M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 100K;

/* This example and the next will fail if your database is in
automatic undo mode.
*/
CREATE ROLLBACK SEGMENT rbs_one
TABLESPACE rbs_ts;

前述の文は、次の文と同じ結果になります。

CREATE ROLLBACK SEGMENT rbs_one
TABLESPACE rbs_ts
STORAGE
( INITIAL 10K );

CREATE SCHEMA

用途

CREATE SCHEMA文を使用すると、複数表およびビューを作成し、自分のスキーマ内に1つのトランザクションで複数の権限を付与できます。

CREATE SCHEMA文を実行すると、挿入されている個々の文が実行されます。すべての文が正常に実行された場合、そのトランザクションがコミットされます。文の結果が1つでもエラーになった場合は、すべての文がロールバックされます。

注意:
この文では、実際にスキーマが作成されるわけではありません。ユーザーを作成すると、自動的にスキーマが作成されます(「CREATE USER」を参照)。この文を実行すると、複数のトランザクションで複数のSQL文を発行しなくても、スキーマに表およびビューが移入され、これらのオブジェクトに対する権限が付与されます。

前提条件

CREATE SCHEMA文には、CREATE TABLE文、CREATE VIEW文およびGRANT文を含めることができます。CREATE SCHEMA文を発行する場合は、挿入した文を発行するための権限が必要です。

構文

create_schema::=

セマンティクス

schema

スキーマの名前を指定します。スキーマ名は、Oracle Databaseユーザー名と一致している必要があります。

create_table_statement

このCREATE SCHEMA文の一部として発行するCREATE TABLE文を指定します。この文の終わりには、セミコロン(またはその他の終了文字)を付けないでください。

関連項目:
「CREATE TABLE」

create_view_statement

このCREATE SCHEMA文の一部として発行するCREATE VIEW文を指定します。この文の終わりには、セミコロン(またはその他の終了文字)を付けないでください。

関連項目:
「CREATE VIEW」

grant_statement

このCREATE SCHEMA文の一部として発行するGRANT文を指定します。この文の終わりには、セミコロン(またはその他の終了文字)を付けないでください。この句を使用すると、所有するオブジェクトに対するオブジェクト権限を、他のユーザーに付与できます。また、WITH ADMIN OPTION付きでシステム権限を付与されている場合、それらの権限を他のユーザーに付与できます。

関連項目:
「GRANT」

CREATE SCHEMA文は、Oracle Databaseでサポートされている完全な構文ではなく、標準SQLで定義されている構文のみをサポートします。

CREATE TABLE、CREATE VIEWおよびGRANTの各文を指定する順序は重要ではありません。CREATE SCHEMA文の中の文では、既存のオブジェクトまたは同じCREATE SCHEMA文の他の文で作成したオブジェクトを参照できます。

スキーマに対する権限付与の制限事項: parallel_clause構文は、CREATE SCHEMAのCREATE TABLE文で使用できますが、オブジェクトの作成時に並列度は使用されません。

関連項目:
「CREATE TABLE」の「parallel_clause」を参照してください。

例

スキーマの作成例: 次の文は、サンプルの注文入力ユーザーoe用のoeという名前のスキーマ、表new_product、ビューnew_product_viewを作成し、サンプルの人事部門のユーザーhrにnew_product_viewに対するSELECTオブジェクト権限を付与します。

CREATE SCHEMA AUTHORIZATION oe
CREATE TABLE new_product
(color VARCHAR2(10)  PRIMARY KEY, quantity NUMBER)
CREATE VIEW new_product_view
AS SELECT color, quantity FROM new_product WHERE color = 'RED'
GRANT select ON new_product_view TO hr;

CREATE SEQUENCE

用途

CREATE SEQUENCE文を使用すると、順序を作成できます。順序とは、複数のユーザーが一意の整数を生成するときに使用できるデータベース・オブジェクトです。順序を使用すると、主キー値を自動的に生成できます。

順序番号が生成されると、順序はトランザクションのコミットやロールバックとは無関係に増加していきます。2人のユーザーが、同時に同一の順序を増加させると、ユーザーがそれぞれ順序番号を生成しているため、取得する順序番号間に違いが発生することもあります。他のユーザーが生成した順序番号は取得できません。あるユーザーが順序値を生成すると、他のユーザーがその順序を増加させたかどうかに関係なく、順序を生成したユーザーは引き続きその値にアクセスできます。

順序番号は表とは関係なく生成されるため、1つ以上の表に対して同一の順序を使用できます。順序番号が生成および使用されるトランザクションが最終的にロールバックされた場合、個々の順序番号が連続していないように見える場合があります。また、他のユーザーが同一順序を使用していることを個々のユーザーが認識しない場合もあります。

順序が作成されると、SQL文の中でCURRVAL疑似列を使用してその値にアクセスできます(この場合、その順序の現在の値が戻ります)。また、NEXTVAL疑似列を使用してもアクセスできます(この場合は、順序が増加され、新しい値が戻ります)。

順序を遅延セグメントと使用する場合の注意事項: 遅延セグメント作成を使用する表に順序値を挿入しようとすると、順序が戻す最初の値がスキップされます。

関連項目:

- CURRVALおよびNEXTVALの使用方法については、第3章「疑似列」を参照してください。

- 順序の使用については、「順序値の使用方法」を参照してください。

- 順序の変更または削除の詳細は、「ALTER SEQUENCE」または「DROP SEQUENCE」を参照してください。

前提条件

自分のスキーマ内に順序を作成する場合は、CREATE SEQUENCEシステム権限が必要です。

他のユーザーのスキーマ内に順序を作成する場合は、CREATE ANY SEQUENCEシステム権限が必要です。

構文

create_sequence::=

セマンティクス

schema

順序を含めるスキーマを指定します。schemaを省略した場合、自分のスキーマ内に順序が作成されます。

sequence

作成する順序の名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。

次の句のうちどれも指定しない場合は、1から始まる昇順の順序が作成され、上限なしで1ずつ増加していきます。INCREMENT BYに-1のみを指定した場合は、初期値を-1として、下限なしで1つずつ減少していきます。

- 昇順で、無制限に増加する順序を作成する場合は、MAXVALUEパラメータを省略するか、またはNOMAXVALUEを指定します。降順の場合は、MINVALUEパラメータを省略するか、またはNOMINVALUEを指定します。

- 昇順で、事前に定義した制限で停止する順序を作成する場合は、MAXVALUEパラメータに値を指定します。降順の場合は、MINVALUEパラメータの値を指定します。NOCYCLEも指定します。順序が制限に達したときに順序番号をさらに生成しようとした場合、エラーが発生します。

- 事前に定義した制限に達した後で初期値に戻る順序を作成する場合は、MAXVALUEパラメータとMINVALUEパラメータの両方に値を指定します。CYCLEも指定します。

INCREMENT BY 順序の番号間の増分間隔を指定します。この値は、0(ゼロ)以外の正の整数または負の整数になります。この値には、昇順の場合は28桁以内、降順の場合は27桁以内の値を指定できます。この値の絶対値は、MAXVALUEとMINVALUEの差未満である必要があります。この値が負の場合、順序は降順になります。この値が正の場合、順序は昇順になります。この句を省略した場合、デフォルトで増分間隔は1に設定されます。

START WITH  生成する順序番号の初期値を指定します。この句を指定した場合、順序の最小値より大きい値を初期値として昇順を開始することも、最大値よりも小さい値を初期値として降順を開始することもできます。昇順の場合、デフォルト値は順序の最小値になります。降順の場合、デフォルト値は順序の最大値になります。正の値の場合は28桁以内、負の値の場合は27桁以内の値を指定できます。

注意:
この値は、必ずしも、順序の最大値または最小値にそれぞれ達した後に、昇順または降順で循環する順序が戻るときの値ではありません。

MAXVALUE 順序の最大値を指定します。正の値の場合は28桁以内、負の値の場合は27桁以内の値を指定できます。MAXVALUE値は、START WITH以上で、かつMINVALUEを超える値である必要があります。

NOMAXVALUE NOMAXVALUEを指定すると、順序の最大値を、昇順の場合は10^28-1、降順の場合は-1に指定できます。これはデフォルトです。

MINVALUE 順序の最小値を指定します。正の値の場合は28桁以内、負の値の場合は27桁以内の値を指定できます。MINVALUE値は、START WITH以下で、かつMAXVALUE未満である必要があります。

NOMINVALUE NOMINVALUEを指定すると、順序の最小値を、昇順の場合は1、降順の場合は-(10^27-1)に指定できます。これはデフォルトです。

CYCLE CYCLEを指定すると、順序が最大値または最小値に達しても、引き続き値を生成できます。つまり、昇順の場合は、最大値に達すると最小値が生成されます。降順の場合は、最小値に達すると最大値が生成されます。

NOCYCLE NOCYCLEを指定すると、順序が最大値または最小値に達した場合は、それ以上値を生成しないように指定できます。これはデフォルトです。

CACHE より高速に順序番号にアクセスできるように、メモリー上に事前に割り当て、保持しておく順序番号の数を指定します。28桁以内の整数値を指定できます。このパラメータの最小値は2です。循環する順序の場合、この値は、そのサイクル内で生成される値の数未満である必要があります。指定したサイクル内で生成される順序番号の数を超える値はキャッシュできません。したがって、CACHEに指定できる値の最大値は、次の式で求められる値未満である必要があります。

(CEIL (MAXVALUE - MINVALUE)) / ABS (INCREMENT)

システム障害が発生すると、キャッシュされた順序の値のうち、コミットされたDML文で使用されていなかったものはすべて失われます。したがって、失われる可能性がある値の数は、CACHEパラメータの値と等しくなります。

注意:
Oracle Real Application Clusters環境で順序を使用する場合は、パフォーマンスを向上するために、CACHEの設定を使用することをお薦めします。

NOCACHE NOCACHEを指定すると、順序の値を事前に割り当てないように指定できます。CACHEおよびNOCACHEの両方を省略した場合、デフォルトで20の順序番号がキャッシュされます。

ORDER ORDERを指定すると、要求どおりの順序で順序番号を生成することを保証できます。順序番号をタイムスタンプとして使用する場合に、この句は有効です。通常、主キー生成用の順序については、順序どおりに生成するかどうかの保証は重要ではありません。

Oracle Real Application Clustersを使用する場合、ORDERは順序どおりの生成を確保する場合にのみ必要です。排他モードの場合、順序番号は必ず順序どおりに生成されます。

NOORDER NOORDERを指定すると、要求どおりの順で順序番号を生成することは保証されません。これはデフォルトです。

KEEP アプリケーション・コンティニュイティのための再実行中に、NEXTVALが元の値を保持するようにするには、KEEPを指定します。この動作は、アプリケーションを実行しているユーザーが、順序を含むスキーマの所有者である場合にのみ行われます。この句は、リカバリ可能なエラー後の再実行でバインド変数の一貫性を保持するために役立ちます。アプリケーション・コンティニュイティの詳細は、『Oracle Database開発ガイド』を参照してください。

NOKEEP アプリケーション・コンティニュイティのための再実行中に、NEXTVALが元の値を保持しないようにするには、NOKEEPを指定します。これはデフォルトです。

注意:
KEEP句とNOKEEP句は、順序を含むスキーマの所有者にのみ適用されます。アプリケーション・コンティニュイティのための再実行中に、その他のユーザーの元の値をNEXTVALで維持するかどうかは、順序に対するKEEP SEQUENCEオブジェクト権限を付与または取消しすることで制御できます。KEEP SEQUENCEオブジェクト権限の詳細は、「表18-2」を参照してください。

SESSION SESSIONを指定すると、セッションの順序を作成できます。この順序は、セッションから認識できるグローバル一時表に使用することを具体的に指定する特種な順序です。既存の通常の順序(対比のために「グローバルな」順序と呼びます)とは異なり、セッションの順序は、複数のセッション全体ではなく、1つのセッションに限定された順序番号の一意の範囲を返します。また、セッションの順序は永続されない点も異なります。セッションが失われると、そのセッション中にアクセスされるセッションの順序も失われます。

セッションの順序は、読取り/書込みデータベースで作成する必要がありますが、読取り/書込みデータベースまたは読取り専用の任意のデータベース(一時的に読取り専用でオープンされた通常のデータベース、またはスタンバイ・データベース)からアクセスできます。

CACHE句、NOCACHE句、ORDER句、またはNOORDER句は、SESSION句と同時に指定すると無視されます。

関連項目:
セッション順序の詳細は、『Oracle Data Guard概要および管理』を参照してください。

GLOBAL GLOBALを指定すると、グローバルな順序(つまり、通常の順序)を作成できます。これはデフォルトです。

例

順序の作成例: 次の文は、サンプル・スキーマoeに順序customers_seqを作成します。この順序は、customers表に行が追加されるときに、顧客ID番号として使用できます。

CREATE SEQUENCE customers_seq
START WITH     1000
INCREMENT BY   1
NOCACHE
NOCYCLE;

最初にcustomers_seq.nextvalを参照したときは、1000が戻されます。次に参照したときは、1001が戻されます。同様に、この後の各参照で、前回参照された値より1大きい値が戻されます。

CREATE SPFILE

用途

CREATE SPFILE文を使用すると、従来のプレーンテキストの初期化パラメータ・ファイルまたは現行のシステム全体の設定から、サーバー・パラメータ・ファイルを作成できます。サーバー・パラメータ・ファイルは、サーバーのみに存在し、データベースを起動するためにクライアントからコールされるバイナリ・ファイルです。

サーバー・パラメータ・ファイルを指定すると、個々のパラメータを永続的に変更できます。サーバー・パラメータ・ファイルを使用する場合、新しいパラメータ値を永続化するALTER SYSTEM SET parameter文を指定できます。新しい値は、現行のインスタンスのみでなく、その後で起動するすべてのインスタンスにおいて適用されます。従来のプレーンテキストのパラメータ・ファイルでは、パラメータ値を永続的に変更できません。

サーバー・パラメータ・ファイルは、サーバー上に存在するため、Oracle Databaseによる自動データベースのチューニングおよびRecovery Manager(RMAN)によるバックアップが可能です。

データベースの起動時にサーバー・パラメータ・ファイルを使用するには、CREATE SPFILE文を使用してサーバー・パラメータ・ファイルを作成する必要があります。

Oracle Real Application Clusters環境のすべてのインスタンスは、同じサーバー・パラメータ・ファイルを使用する必要があります。ただし、別途許可されている場合は、個々のインスタンスで、1つのファイル内の同じパラメータの設定値をそれぞれ変えて使用できます。インスタンス固有のパラメータ定義は、SID.parameter = valueで指定します。SIDにはインスタンス識別子を指定します。

サーバー・パラメータ・ファイルを使用したデータベースの起動方法は、作成したサーバー・パラメータ・ファイルをデフォルトで作成したか、または非デフォルトで作成したかによって異なります。サーバー・パラメータ・ファイルの使用方法については、「サーバー・パラメータ・ファイルの作成例:」を参照してください。

CDBにサーバー・パラメータ・ファイルを作成する場合の注意事項: マルチテナント・コンテナ・データベース(CDB)にサーバー・パラメータ・ファイルを作成するときには、現在のコンテナがルートまたはPDBである可能性があります。

- 現在のコンテナがルートである場合、rootの初期化パラメータに設定した値が、その他のすべてのコンテナのデフォルト値として使用されます。

- Oracle Database 12cリリース1(12.1.0.2)以降、現在のコンテナがPDBである場合にCREATE SPFILE文を発行できます。この場合、データベースはPDBの初期化パラメータ値をファイルではなく内部的に格納します。このため、spfile_nameを指定できません。PDBの初期化パラメータに設定する値は永続的で、ルートのそれらのパラメータに設定される値をオーバーライドします。

その後ALTER SYSTEM文を使用して、rootまたはPDBの初期化パラメータを変更することができます。

関連項目:

- バイナリのサーバー・パラメータ・ファイルから正規のテキストのパラメータ・ファイルを作成する場合の詳細は、「CREATE PFILE」を参照してください。

- 従来のプレーンテキストの初期化パラメータ・ファイルおよびサーバー・パラメータ・ファイルの詳細は、『Oracle Database管理者ガイド』を参照してください。

- Oracle Real Application Clusters環境でのサーバー・パラメータ・ファイルの使用については、『Oracle Real Application Clusters管理およびデプロイメント・ガイド』を参照してください。

前提条件

この文を実行するには、SYSBACKUP、SYSDBA、SYSDGまたはSYSOPERシステム権限が必要です。この文は、インスタンスの起動前と起動後のいずれかで実行できます。ただし、spfile_nameを使用して、インスタンスがすでに起動済の場合は、この文で同じspfile_nameを指定できません。

CDBにサーバー・パラメータ・ファイルを作成する場合は、現在のコンテナがルートである必要があります。また、共通に付与されているSYSBACKUP、SYSDBA、SYSDGまたはSYSOPERシステム権限が必要です。

構文

create_spfile::=

セマンティクス

spfile_name

この句を指定すると、作成するサーバー・パラメータ・ファイルの名前を指定できます。

spfile_nameを指定した場合、Oracle Databaseではデフォルト以外のサーバー・パラメータ・ファイルが作成されます。

- spfile_nameでは、従来のファイル名、Oracle ACFSファイル・システム内のファイルまたはOracle Storage Management (Oracle ASM)ファイル名を指定できます。

- 従来のファイル名またはOracle ACFSファイル・システム内のファイルを指定した場合、spfile_nameにはパス接頭辞を含めることができます。パス接頭辞を指定しない場合は、データベースによってデフォルトの格納場所(プラットフォームによって異なる)のパス接頭辞が追加されます。

- Oracle ASMファイル名構文を指定する場合、データベースはOracle ASMディスク・グループにspfileを作成します。

- デフォルト以外のサーバー・パラメータ・ファイルを使用する場合は、データベースの起動時にSTARTUPコマンドでサーバー・パラメータ・ファイルを指定する必要があります。このルールの例外は次のとおりです。

- spfile_nameとFROM PFILE句の両方を指定し、コマンドの発行元のインスタンスが実行中で、データベースがOracle Clusterwareでリソースとして定義されている場合、この文はデータベース・リソース内のSPFILEを自動的に更新します。この場合、サーバー・パラメータ・ファイルを名前で参照せずにデータベースを起動できます。コマンドの発行元のインスタンスが実行中でない場合は、データベース・リソース内のSPFILEを、srvctl modify database -d dbname -spfile spfile_pathを使用して手動で更新する必要があります。

spfile_nameを省略した場合、プラットフォーム固有のデフォルトのサーバー・パラメータ・ファイル名が使用されます。このようなファイルがサーバーにすでに存在する場合、そのファイルは上書きされます。デフォルトのサーバー・パラメータ・ファイルを使用する場合、ファイル名を参照せずにデータベースを起動できます。

spfile_nameの制限事項 PDBの接続時にサーバー・パラメータ・ファイルを作成する場合、spfile_nameを指定できません。

関連項目:

- デフォルトおよびデフォルト以外のサーバー・パラメータ・ファイルを使用したデータベースの起動の詳細は、「サーバー・パラメータ・ファイルの作成例:」を参照してください。

- 従来のファイル名およびOracle ASMファイル名の構文については「file_specification」を、Oracle ASMファイルの特性の変更の詳細は「ALTER DISKGROUP」を参照してください。

- デフォルトのパラメータ・ファイル名については、オペレーティング・システム固有のドキュメントを参照してください。

pfile_name

サーバー・パラメータ・ファイルを作成する元になる従来のプレーンテキストの初期化パラメータ・ファイル名を指定します。従来のパラメータ・ファイルは、サーバー上にある必要があります。

- pfile_nameを指定して、従来のパラメータ・ファイルがオペレーティング・システムのパラメータ・ファイルのデフォルト・ディレクトリに存在しない場合は、フルパス名を指定する必要があります。

- pfile_nameを指定しない場合、オペレーティング・システムのパラメータ・ファイルのデフォルト・ディレクトリからデフォルトのパラメータ・ファイル名が検索され、使用されます。そのディレクトリにファイルが存在しない場合、エラーが戻されます。

注意:
Oracle Real Application Clusters環境では、この文でパラメータ・ファイル名を指定してサーバー・パラメータ・ファイルを作成する前に、まず、すべてのインスタンスのパラメータ・ファイルを1つのファイルに結合する必要があります。この手順の実行の詳細は、『Oracle Real Application Clusters管理およびデプロイメント・ガイド』を参照してください。

MEMORY

MEMORYを指定すると、現行のシステム全体のパラメータ設定を使用してspfileを作成できます。Oracle RAC環境では、作成されたファイルには各インスタンスからのパラメータ設定が含まれます。

例

サーバー・パラメータ・ファイルの作成例: 次の例は、従来のプレーンテキストのパラメータ・ファイルt_init1.oraからデフォルトのサーバー・パラメータ・ファイルを作成します。

CREATE SPFILE
FROM PFILE = '$ORACLE_HOME/work/t_init1.ora';

注意:
通常、オペレーティング・システムのパラメータ・ファイルには、フルパスのファイル名を指定する必要があります。

デフォルトのサーバー・パラメータ・ファイルを作成する場合、その後のデータベースの起動は、次のようにPFILEパラメータなしでSQL*PlusのコマンドSTARTUPを実行し、サーバー・パラメータ・ファイルを使用します。

STARTUP

次の例は、従来のプレーンテキストのパラメータ・ファイルt_init1.oraからデフォルト以外のサーバー・パラメータ・ファイルs_params.oraを作成します。

CREATE SPFILE = 's_params.ora'
FROM PFILE = '$ORACLE_HOME/work/t_init1.ora';

デフォルト以外のサーバー・パラメータ・ファイルを作成する場合、次の単一行を含む以前のパラメータ・ファイルを最初に作成し、その後でデータベースを起動します。

spfile = 's_params.ora'

このパラメータ・ファイル名は、ご使用のオペレーティング・システムのネーミング規則に従う必要があります。その後、STARTUPコマンドで単一行のパラメータ・ファイルを使用します。次の例では、単一行のパラメータ・ファイルの名前がnew_param.oraであるとした場合のデータベースの起動方法を示します。

STARTUP PFILE=new_param.ora

16 SQL文: CREATE SYNONYMからCREATE TRIGGER

この章では、次のSQL文について説明します。

- CREATE SYNONYM

- 「CREATE TABLE」

- 「CREATE TABLESPACE」

- CREATE TRIGGER

CREATE SYNONYM

用途

CREATE SYNONYM文を使用すると、シノニムを作成できます。シノニムとは、表、ビュー、順序、演算子、プロシージャ、ストアド・ファンクション、パッケージ、マテリアライズド・ビュー、Javaクラス・スキーマ・オブジェクト、ユーザー定義オブジェクト型または別のシノニムに付ける別名です。シノニムによってシノニムのターゲット・オブジェクトへの依存関係が設定され、ターゲット・オブジェクトが変更または削除されるとシノニムも無効になります。

シノニムによって、データの独立性および位置の透過性を実現できます。シノニムを使用した場合、どのユーザーが表やビューを所有しているか、どのデータベースに表やビューが格納されているかに関係なく、アプリケーションは変更なしで機能します。ただし、シノニムはデータベース・オブジェクトに対する権限にかわるものではありません。シノニムを使用するユーザーに対して、適切な権限をあらかじめ付与しておく必要があります。

シノニムを参照できるDML文は、SELECT、INSERT、UPDATE、DELETE、FLASHBACK TABLE、EXPLAIN PLANおよびLOCK TABLEです。

シノニムを参照できるDDL文は、AUDIT、NOAUDIT、GRANT、REVOKEおよびCOMMENTです。

関連項目:
シノニムの概要については、『Oracle Database概要』を参照してください。

前提条件

自分のスキーマ内にプライベート・シノニムを作成する場合は、CREATE SYNONYMシステム権限が必要です。

他のユーザーのスキーマ内にプライベート・シノニムを作成する場合は、CREATE ANY SYNONYMシステム権限が必要です。

PUBLICシノニムを作成する場合は、CREATE PUBLIC SYNONYMシステム権限が必要です。

構文

create_synonym::=

セマンティクス

OR REPLACE

OR REPLACEを指定すると、既存のシノニムを再作成できます。この句を使用すると、既存のシノニムの定義をはじめに削除しなくても、その定義を変更できます。

シノニムの置換の制限事項: OR REPLACE句は、依存表または依存する有効なユーザー定義オブジェクト型を持つ型シノニムに対して使用できません。

[ EDITIONABLE | NONEDITIONABLE ]

この句を使用すると、schemaのスキーマ・オブジェクト・タイプSYNONYMのエディショニングが有効化されたときに、そのシノニムをエディション・オブジェクトにするか非エディション・オブジェクトにするかを指定できます。プライベート・シノニムの場合、デフォルトはEDITIONABLEです。パブリック・シノニムの場合、デフォルトはNONEDITIONABLEです。エディション・オブジェクトと非エディション・オブジェクトの詳細は、『Oracle Database開発ガイド』を参照してください。

PUBLIC

PUBLICを指定すると、パブリック・シノニムを作成できます。パブリック・シノニムには、すべてのユーザーがアクセスできます。ただし、シノニムを使用するには、基礎となるオブジェクトに対する適切な権限が必要です。

オブジェクトの先頭にスキーマ名が指定されておらず、オブジェクトの後にデータベース・リンクが指定されていない場合のみ、オブジェクトへの参照を変換するときに、パブリック・シノニムが使用されます。

この句を指定しない場合、シノニムはプライベートです。プライベート・シノニム名は、スキーマ内で一意である必要があります。プライベート・シノニムに所有者以外のユーザーがアクセスできるのは、基礎となるデータベース・オブジェクトに対する適切な権限がユーザーにあり、シノニム名とともにスキーマを指定する場合のみです。

パブリック・シノニムの注意事項: パブリック・シノニムには、次の注意事項があります。

- パブリック・シノニムを作成した後、依存表または依存する有効なユーザー定義オブジェクト型が存在する場合、依存オブジェクトと同じスキーマ内には、そのシノニムと同じ名前で別のデータベース・オブジェクトは作成できません。

- 既存のスキーマと同じ名前のパブリック・シノニムを作成しないでください。同じ名前のパブリック・シノニムを作成すると、その名前が使用されるすべてのPL/SQLユニットが無効になります。

schema

シノニムを含めるスキーマを指定します。schemaを省略した場合、自分のスキーマ内にシノニムが作成されます。PUBLICを指定した場合、スキーマは指定できません。

synonym

作成するシノニムの名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。

注意:
シノニム名は、30バイトを超える場合も作成および削除できます。ただし、Java名でない場合は他のSQLコマンドで機能しません。30バイトを超える名前は、データ・ディクショナリに格納するために不確定で短い文字列に変換されます。

関連項目:
「CREATE SYNONYMの例:」および「Oracle Databaseによるシノニムの変換例:」を参照してください。

FOR句

シノニムを作成するオブジェクトを指定します。シノニムを作成するスキーマ・オブジェクトには、次のものがあります。

- 表またはオブジェクト表

- ビューまたはオブジェクト・ビュー

- 順序

- ストアド・プロシージャ、ファンクションまたはパッケージ

- マテリアライズド・ビュー

- Javaクラス・スキーマ・オブジェクト

- ユーザー定義オブジェクト型

- シノニム

スキーマ・オブジェクトは、現在存在している必要はなく、スキーマ・オブジェクトへのアクセス権限も必要ありません。

FOR句の制限事項: スキーマ・オブジェクトは、パッケージに含めることはできません。

schema オブジェクトが含まれているスキーマを指定します。オブジェクトにschemaを指定しなかった場合、そのスキーマ・オブジェクトは自分のスキーマ内にあるとみなされます。

リモート・データベース上のプロシージャやファンクションに対するシノニムを作成する場合、このCREATE文でschemaを指定する必要があります。または、オブジェクトが存在するデータベースにローカル・パブリック・シノニムを作成することもできます。ただし、その後は、プロシージャやファンクションの後続のコールすべてにデータベース・リンクを組み込む必要があります。

dblink  データベース・リンクを完全に指定するか、またはデータベース・リンクの一部を指定すると、スキーマ・オブジェクトが格納されているリモート・データベース上のオブジェクトのシノニムを作成できます。dblinkを指定して、schemaを省略した場合、シノニムは、データベース・リンクで指定されたスキーマ内のオブジェクトを参照します。リモート・データベースのオブジェクトが含まれているスキーマを指定することをお薦めします。

dblinkを省略した場合、オブジェクトがローカル・データベース上にあるものとみなされます。

データベース・リンクの制限事項: dblinkは、Javaクラス・シノニムに対して指定できません。

関連項目:

- データベース・リンクの参照方法の詳細は、「リモート・データベース内のオブジェクトの参照」を参照してください。

- データベース・リンクの作成方法の詳細は、「CREATE DATABASE LINK」を参照してください。

例

CREATE SYNONYMの例: 次の文は、スキーマhr内の表locationsに対してシノニムofficesを定義します。

CREATE SYNONYM offices
FOR hr.locations;

remoteデータベース上のスキーマhr内のemployees表に対してPUBLICシノニムを作成するには、次の文を発行します。

CREATE PUBLIC SYNONYM emp_table
FOR hr.employees@remote.us.example.com;

別のスキーマ内に基礎となるオブジェクトが含まれている場合は、基礎となるオブジェクトと同じ名前をシノニムに指定することもできます。

Oracle Databaseによるシノニムの変換例 Oracle Databaseは、オブジェクトの参照を、PUBLICシノニム・レベルで変換する前に、スキーマ・レベルで変換しようとします。たとえば、スキーマoeとshの両方にcustomersという名前の表が存在するとします。次の例では、ユーザーSYSTEMが、oe.customersに対してcustomersという名前のPUBLICシノニムを作成します。

CREATE PUBLIC SYNONYM customers FOR oe.customers;

ユーザーshが次の文を発行すると、sh.customersから行数が戻されます。

SELECT COUNT(*) FROM customers;

oe.customersから行数を取得するには、ユーザーshは、customersの前にスキーマ名を指定する必要があります。(ユーザーshは、oe.customersに対するSELECT権限も持っている必要があります。)

SELECT COUNT(*) FROM oe.customers;

ユーザーhrのスキーマにcustomersという名前のオブジェクトは存在しないが、hrがoe.customersに対するSELECT権限を持つ場合、hrは、パブリック・シノニムcustomersを使用して、oeのスキーマ内のcustomers表にアクセスできます。

SELECT COUNT(*) FROM customers;

CREATE TABLE

用途

CREATE TABLE文を使用すると、次の型の表を作成できます。

- リレーショナル表。ユーザー・データを格納する基本構造です。

- オブジェクト表。列の定義にオブジェクト型を使用する表です。特定の型のオブジェクト・インスタンスを格納するように明示的に定義されます。

オブジェクト型を作成しておき、リレーショナル表の作成時に列の中でそのオブジェクト型を使用することもできます。

副問合せを指定しない場合、データを含まない表が作成されます。INSERT文を使用した場合、表に行を追加できます。表を作成した後、ALTER TABLE文でADD句を指定すると、追加する列、パーティションおよび整合性制約を定義できます。ALTER TABLE文でMODIFY句を指定すると、既存の列またはパーティションの定義を変更できます。

関連項目:

- オブジェクトの作成の詳細は、『Oracle Database管理者ガイド』および「CREATE TYPE」を参照してください。

- 表の変更および削除の詳細は、「ALTER TABLE」および「DROP TABLE」を参照してください。

追加トピック

- 前提条件

- 構文

- セマンティクス

- 例

前提条件

自分のスキーマ内にリレーショナル表を作成する場合は、CREATE TABLEシステム権限が必要です。他のユーザーのスキーマ内に表を作成する場合は、CREATE ANY TABLEシステム権限が必要です。また、表が含まれるスキーマの所有者は、表を格納するため表領域への割当て制限またはUNLIMITED TABLESPACEシステム権限が必要です。

これらの表権限に加え、オブジェクト表またはオブジェクト型の列が存在するリレーショナル表を作成する場合は、表の所有者に、表が参照するすべての型にアクセスするためのEXECUTEオブジェクト権限が付与されているかまたはEXECUTE ANY TYPEシステム権限が付与されている必要があります。これらの権限は、ロールを介して取得するのではなく、明示的に付与される必要があります。

さらに、表の所有者が表へのアクセス権限を他のユーザーに付与する場合、所有者には、参照する型に対するWITH GRANT OPTION付きのEXECUTEオブジェクト権限またはWITH ADMIN OPTION付きのEXECUTE ANY TYPEシステム権限が必要です。これらの権限を持っていない場合、表の所有者は、表へのアクセス権限を他のユーザーに付与できません。

一意キー制約または主キー制約を有効にする場合は、表に索引を作成するための権限が必要です。Oracle Databaseでは、表を含むスキーマにおいて、一意キーまたは主キーの列に索引を作成するため、この権限が必要になります。

evaluation_edition_clauseまたはunusable_editions_clauseでエディションを指定するには、そのエディションに対するUSE権限が必要になります。

zonemap_clauseを指定するには、ゾーン・マップを作成する権限が必要です。CREATE MATERIALIZED ZONEMAPのドキュメントの「前提条件」セクションを参照してください。

外部表を作成する場合は、適切なオペレーティング・システム・ディレクトリに対する、オペレーティング・システムの読取り権限および書込み権限が必要です。外部データが存在するオペレーティング・システム・ディレクトリに対応するデータベース・ディレクトリ・オブジェクトに対するREADオブジェクト権限が必要です。また、opaque_format_specでログ・ファイルまたは不良ファイルを指定する場合、またはAS subquery句を指定してデータベース表から外部表にデータをアンロードする場合、ファイルが格納されるデータベース・ディレクトリに対するWRITEオブジェクト権限が必要です。

自分のスキーマ以外のデータベース・スキーマ内にXMLType表を作成する場合は、CREATE ANY TABLE権限のみでなく、CREATE ANY INDEX権限も必要です。これは、表の作成時にOBJECT_ID列に一意索引が作成されるためです。OBJECT_ID列には、システム生成オブジェクト識別子が格納されます。

関連項目:

- 「CREATE INDEX」

- 型を使用する表の作成に必要な権限については、『Oracle Database管理者ガイド』を参照してください。

構文

create_table::=

(relational_table::=、object_table ::=、XMLType_table ::=を参照)

relational_table::=

注意:
表名の後の各句は、任意のリレーショナル表に対して任意で指定します。ただし、すべての表に対して、relational_properties句を使用して列名およびデータ型を指定するか、またはtable_properties句を使用してAS subquery句を指定する必要があります。

(relational_properties::=、physical_properties::=、table_properties::=を参照)

object_table::=

(object_table_substitution ::=、object_properties::=、oid_clause::=、oid_index_clause::=、physical_properties::=、table_properties::=を参照)

XMLType_table::=

(XMLType_storage::=、XMLSchema_spec::=、XMLType_virtual_columns::=、oid_clause::=、oid_index_clause::=、physical_properties::=、table_properties::=を参照)

relational_properties::=

注意:
これらの句はどのような順序で指定してもかまいませんが、次の例外があります。period_definitionを指定する場合、その前に1つ以上のcolumn_definitionまたはvirtual_column_definitionを指定する必要があります。period_definitionは、1回のみ指定できます。

(column_definition::=、virtual_column_definition ::=、period_definition::=、constraint::=、supplemental_logging_props ::=を参照)

column_definition::=

(identity_clause::=、encryption_spec ::=、constraint::=を参照)

identity_clause::=

identity_options::=

virtual_column_definition::=

(evaluation_edition_clause::=、unusable_editions_clause::=、constraint::=を参照)

evaluation_edition_clause::=

unusable_editions_clause::=

period_definition::=

encryption_spec::=

object_table_substitution::=

object_properties::=

(constraint::=、supplemental_logging_props ::=を参照)

oid_clause::=

oid_index_clause::=

(physical_attributes_clause::=を参照)

physical_properties::=

(deferred_segment_creation::=、segment_attributes_clause ::=、table_compression::=、inmemory_table_clause::=、ilm_clause::=、heap_org_table_clause::=、index_org_table_clause ::=、external_table_clause ::=を参照)

deferred_segment_creation::=

segment_attributes_clause::=

(physical_attributes_clause ::=、logging_clause::=を参照)

physical_attributes_clause::=

(storage_clause::=を参照)

table_compression::=

inmemory_table_clause::=

(inmemory_parameters::=、inmemory_column_clause::=)

inmemory_parameters::=

(inmemory_memcompress::=、inmemory_priority::=、inmemory_distribute::=、inmemory_duplicate::=)

inmemory_memcompress::=

inmemory_priority::=

inmemory_distribute::=

inmemory_duplicate::=

inmemory_column_clause::=

(inmemory_memcompress::=)

ilm_clause::=

ilm_policy_clause::=

(ilm_compression_policy::=、ilm_tiering_policy::=を参照)

ilm_compression_policy::=

(table_compression::=、ilm_time_period::=を参照)

ilm_tiering_policy::=

(ilm_time_period::=を参照)

ilm_time_period::=

table_properties::=

(column_properties::=、indexing_clause::=、table_partitioning_clauses ::=、attribute_clustering_clause::=、parallel_clause ::=、enable_disable_clause ::=、row_movement_clause ::=、flashback_archive_clause::=、subquery::=を参照)

column_properties::=

(object_type_col_properties::=、nested_table_col_properties ::=、varray_col_properties ::=、LOB_storage_clause::=、LOB_partition_storage::=、XMLType_column_properties ::=を参照)

object_type_col_properties::=

substitutable_column_clause::=

nested_table_col_properties::=

(substitutable_column_clause::=、object_properties::=、physical_properties::=、column_properties::=を参照)

varray_col_properties::=

(substitutable_column_clause::=、varray_storage_clause::=を参照)

varray_storage_clause::=

(LOB_parameters::=を参照)

LOB_storage_clause::=

(LOB_storage_parameters::=を参照)

LOB_storage_parameters::=

(LOB_parameters::=、storage_clause::=を参照)

LOB_parameters::=

(LOB_deduplicate_clause::=、LOB_compression_clause::=、encryption_spec::=、logging_clause::=を参照)

注意:
LOB記憶域にSecureFilesを使用する場合、いくつかのLOBパラメータは不要になります。詳細は、「LOB_storage_parameters」を参照してください。

LOB_retention_clause::=

LOB_deduplicate_clause::=

LOB_compression_clause::=

logging_clause::=

LOB_partition_storage::=

(LOB_storage_clause::=、varray_col_properties::=、LOB_partitioning_storage::=を参照)

LOB_partitioning_storage::=

XMLType_column_properties::=

(XMLType_storage::=、XMLSchema_spec::=を参照)

XMLType_storage::=

(LOB_parameters::=を参照)

XMLSchema_spec::=

XMLType_virtual_columns::=

row_movement_clause::=

flashback_archive_clause::=

heap_org_table_clause::=

(table_compression::=、inmemory_table_clause::=、ilm_clause::=を参照)

index_org_table_clause::=

(mapping_table_clauses::=、prefix_compression ::=、index_org_overflow_clause ::=を参照)

mapping_table_clauses::=

index_compression::=

prefix_compression::=

advanced_index_compression::=

index_org_overflow_clause::=

(segment_attributes_clause::=を参照)

supplemental_logging_props::=

supplemental_log_grp_clause::=

supplemental_id_key_clause::=

external_table_clause::=

(external_data_properties::=を参照)

external_data_properties::=

(opaque_format_spec: この句は、ORACLE_LOADERおよびORACLE_DATAPUMPアクセス・ドライバのすべてのアクセス・パラメータを指定します。これらのパラメータの詳細は、『Oracle Databaseユーティリティ』を参照してください。)

indexing_clause::=

table_partitioning_clauses::=

(range_partitions::=、list_partitions ::=、hash_partitions ::=、composite_range_partitions::=、composite_list_partitions::= composite_hash_partitions::=、reference_partitioning::=、system_partitioning::=を参照)

range_partitions::=

(range_values_clause::=、table_partition_description::=を参照)

hash_partitions::=

(individual_hash_partitions::=、hash_partitions_by_quantity::=を参照)

individual_hash_partitions::=

(indexing_clause::=、partitioning_storage_clause::=を参照)

hash_partitions_by_quantity::=

(table_compression::=、index_compression::=を参照)

list_partitions::=

(list_values_clause::=、table_partition_description::=を参照)

composite_range_partitions::=

(subpartition_by_range::=、subpartition_by_list::=、subpartition_by_hash::=、range_partition_desc::=を参照)

composite_hash_partitions::=

(subpartition_by_range::=、subpartition_by_list::=、subpartition_by_hash::=、individual_hash_partitions::=、hash_partitions_by_quantity::=を参照)

composite_list_partitions::=

(subpartition_by_range::=、subpartition_by_list::=、subpartition_by_hash::=、list_partition_desc::=を参照)

reference_partitioning::=

(constraint::=、reference_partition_desc::=を参照)

reference_partition_desc::=

(table_partition_description::=を参照)

system_partitioning::=

(reference_partition_desc::=を参照)

range_partition_desc::=

(range_values_clause::=、table_partition_description::=、range_subpartition_desc::=、list_subpartition_desc::=、individual_hash_subparts::=、hash_subparts_by_quantity::=を参照)

list_partition_desc::=

(list_values_clause::=、table_partition_description::=、range_subpartition_desc::=、list_subpartition_desc::=、individual_hash_subparts::=、hash_subparts_by_quantity::=を参照)

subpartition_template::=

(range_subpartition_desc::=、list_subpartition_desc::=、individual_hash_subparts::=、hash_subparts_by_quantity::=を参照)

subpartition_by_range::=

(subpartition_template::=を参照)

subpartition_by_list::=

(subpartition_template::=を参照)

subpartition_by_hash::=

(subpartition_template::=を参照)

range_subpartition_desc::=

(range_values_clause::=, indexing_clause::=, partitioning_storage_clause::=)

list_subpartition_desc::=

(list_values_clause::=、indexing_clause::=、partitioning_storage_clause::=を参照)

individual_hash_subparts::=

(indexing_clause::=、partitioning_storage_clause::=を参照)

hash_subparts_by_quantity::=

range_values_clause::=

list_values_clause::=

table_partition_description::=

(deferred_segment_creation::=、indexing_clause::=、segment_attributes_clause ::=、table_compression::=、prefix_compression::=、inmemory_clause::=、ilm_clause::=、segment_attributes_clause ::=、LOB_storage_clause::=、varray_col_properties ::=、nested_table_col_properties ::=を参照)

partitioning_storage_clause::=

(table_compression::=、index_compression::=、inmemory_clause::=、ilm_clause::=、LOB_partitioning_storage::=を参照)

inmemory_clause::=

(inmemory_memcompress::=、inmemory_parameters::=を参照)

attribute_clustering_clause::=

(clustering_join::=、cluster_clause::=、clustering_when::=、zonemap_clause::=)

clustering_join::=

cluster_clause::=

clustering_columns::=

clustering_column_group::=

clustering_when::=

zonemap_clause::=

parallel_clause::=

enable_disable_clause::=

(using_index_clause ::=を参照。exceptions_clauseは、CREATE TABLE文ではサポートされていません。)

using_index_clause::=

(create_index::=、index_properties::=を参照)

index_properties::=

(global_partitioned_index::=、local_partitioned_index ::=(「CREATE INDEX」の項)、index_attributes::=を参照。domain_index_clauseおよびXMLIndex_clauseは、using_index_clauseではサポートされていません。)

index_attributes::=

(physical_attributes_clause::=、logging_clause::=、index_compression::=を参照。partial_index_clauseおよびparallel_clauseは、using_index_clauseではサポートされていません。)

セマンティクス

relational_table

GLOBAL TEMPORARY

GLOBAL TEMPORARYを指定すると、表が一時的で、適切な権限を持つすべてのセッションからその定義が参照できることを指定できます。一時表のデータは、データを表に挿入するセッションでのみ参照できます。

初めて一時表を作成した時点では、その表のメタデータはデータ・ディクショナリに格納されますが、表データの領域は割り当てられません。表セグメントの領域は、その表に初めてDML操作を実行したときに割り当てられます。一時表の定義は、標準的な表の定義と同じように維持されますが、表に含まれる表セグメントとデータは、セッション固有またはトランザクション固有のデータのいずれかになります。表セグメントとデータがセッション固有であるか、トランザクション固有であるかは、ON COMMITキーワードで指定します。

セッションがバインドされていない場合にのみ、一時表でDDL操作(ALTER TABLE、DROP TABLE、CREATE INDEXなど)を実行できます。セッションを一時表にバインドするには、一時表でINSERT操作を実行します。セッションを一時表からアンバインドするには、TRUNCATE文を発行するか、セッションを終了します。また、トランザクション固有の一時表からアンバインドするには、COMMITまたはROLLBACK文を発行します。

関連項目:
一時表の詳細は、『Oracle Database概要』および「表の作成: 一時表の例」を参照してください。

一時表の制限事項: 一時表には、次の制限事項があります。

- 一時表は、パーティション化、索引構成化またはクラスタ化できません。

- 一時表には、外部キー制約を指定できません。

- 一時表は、ネストした表の列を含むことはできません。

- LOB_storage_clauseのTABLESPACE、storage_clauseまたはlogging_clauseは指定できません。

- 一時表にパラレルUPDATE、DELETEおよびMERGEはサポートされていません。

- 一時表に対して指定できるsegment_attributes_clauseは、TABLESPACEのみで、単一の一時表領域を指定できます。

- 一時表では、分散トランザクションはサポートされません。

- 一時表には、INVISIBLEの列を格納できません。

schema

表を含めるスキーマを指定します。schemaを省略した場合、自分のスキーマ内に表が作成されます。

table

作成する表またはオブジェクト表の名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。

関連項目:
「表の作成: 一般的な例」

relational_properties

リレーショナル表のコンポーネントを指定します。

column_definition

column_definitionでは、列の特性を定義できます。

AS副問合せによるcolumn_definitionの定義 AS subquery句を指定し、subqueryによって返される各列に列名があるか、指定した列別名を持つ式である場合、column_definition句を省略できます。この場合、tableの列名はsubqueryによって返される列の名前と同じになります。索引構成表の作成は例外です。この場合、主キー列を指定する必要があるため、column_definition句を指定する必要があります。表型に関係なく、column_definition句とAS subquery句を指定する場合は、column_definition句からdatatypeを省略する必要があります。

column

表の列の名前を指定します。

AS subqueryを指定する場合、索引構成表を作成しないかぎり、columnおよびdatatypeを省略できます。索引構成表の作成時にAS subqueryを指定する場合は、columnを指定し、datatypeを省略する必要があります。

表の列の絶対最大数は1000です。オブジェクト表、またはオブジェクトの列、ネストした表、VARRAYまたはREF型のリレーショナル表を作成する場合、制限の1000列までをカウントする有効な非表示列を作成して、ユーザー定義型の列をリレーショナル列にマップします。

datatype

列のデータ型を指定します。

一般に、datatypeを指定する必要があります。ただし、次の例外があります。

- AS subquery句を指定する場合は、datatypeを省略する必要があります。

- 参照整合性制約の外部キーの一部として、文で列が指定されている場合も、datatypeを省略できます。参照整合性制約の参照キーに対応する列のデータ型が、その列に自動的に割り当てられます。

表の列のデータ型の制限事項: 表の列のデータ型には、次の制限事項が適用されます。

- LONG列を持つ表は作成しないでください。かわりに、LOB列(CLOB、NCLOBまたはBLOB)を使用してください。LONG列は、下位互換性のためにサポートされています。

- ROWID型の列を指定することはできますが、それらの列の値が有効な行IDであることは保証されません。

関連項目:
LONG列およびOracleが提供するデータ型については、「データ型」を参照してください。

SORT

SORTキーワードは、この表をハッシュ・クラスタの一部として作成する場合、およびクラスタ列でもある列にのみ有効です。

この句を指定すると、DML操作を実行するときに、データベースに対して、ハッシュ・ファンクションを適用した後でこの列でクラスタの行をソートするように指示できます。これによって、クラスタ化データでの後続の操作時に、応答時間が短縮される場合があります。

関連項目:
クラスタ表の作成の詳細は、「CLUSTER句」を参照してください。

VISIBLE | INVISIBLE

この句を使用すると、columnをVISIBLEにするか、INVISIBLEにするかを指定できます。デフォルトは、VISIBLEです。

INVISIBLEの列は、ユーザー指定の非表示列です。INVISIBLEの列を表示する場合や、この列に値を割り当てる場合は、この列の名前を明示的に指定する必要があります。次に例を示します。

- SELECT *構文では、INVISIBLEの列が表示されません。ただし、SELECT文の選択リストにINVISIBLEの列を含めると、その列は表示されるようになります。

- INVISIBLEの列の値は、INSERT文のVALUES句で、暗黙的に指定することはできません。INVISIBLEの列は、列リストで指定する必要があります。

- Oracle Call Interface (OCI)の説明で、INVISIBLEの列を明示的に指定する必要があります。

- SQL*Plusを構成することで、INVISIBLEの列情報をDESCRIBEコマンドで表示されるようにできます。詳細は、『SQL*Plusユーザーズ・ガイドおよびリファレンス』を参照してください。

VISIBLEおよびINVISIBLEの列の注意事項: 次の注意事項は、VISIBLEおよびINVISIBLEの列に適用されます。

- INVISIBLEの列は、CREATE TABLEの一部として指定すると、パーティション化キーとして使用できます。

- INVISIBLEの列は、column_expression内に指定できます。

- 仮想列は、INVISIBLEの列にすることができます。

- PL/SQL %ROWTYPE属性では、INVISIBLE列は表示されません。

- データ・ディクショナリ・ビューのALL_、DBA_、およびUSER_TAB_COLUMNSのCOLUMN_ID列により、SELECT *問合せで返される表、ビューまたはマテリアライズド・ビューの列の順序が決まります。COLUMN_IDの値は、INVISIBLEの列についてはNULLになります。非表示の列を表示されるようにすると、この列には、最高値の次に利用可能なCOLUMN_ID値が割り当てられます。表示可能な列を非表示の列にすると、その列のCOLUMN_ID値はNULLに設定され、その列より大きい値のCOLUMN_IDを持つ列のCOLUMN_IDは、それぞれ1ずつ減らされます。

VISIBLEおよびINVISIBLEの列の制限事項: VISIBLEおよびINVISIBLEの列には、次の制限事項が適用されます。

- INVISIBLEの列は、外部表、クラスタ表、または一時表ではサポートされません。

- システム生成の非表示列を参照可能にすることはできません。

注意:
ある列がシステム生成の非表示列であるかどうかを判断するには、データ・ディクショナリ・ビューのALL_、DBA_、およびUSER_TAB_COLSのHIDDEN_COLUMN列とUSER_GENERATED列を問い合せます。詳細は、『Oracle Databaseリファレンス』を参照してください。

DEFAULT

DEFAULT句を指定すると、後続のINSERT文が列の値を省略した場合に列に割り当てられる値を指定できます。この式のデータ型は、列に指定したデータ型と一致している必要があります。列には、この式を保持できる大きさが必要です。

DEFAULT式には、リテラル引数、列の参照またはネストしたファンクションの起動を戻さない、任意のSQLファンクションを含めることができます。

このDEFAULT式には、順序疑似列のCURRVALとNEXTVALを含めることができます。ただし、順序が存在していて、その順序にアクセスするために必要な権限を所持している必要があります。それ以降に、DEFAULT式を使用して挿入を実行するユーザーには、表に対するINSERT権限と、順序に対するSELECT権限が必要になります。順序が後に削除されると、それ以降のDEFAULT式が使用されるINSERT文はエラーになります。順序の所有者を指定して完全修飾(例: SCOTT.SEQ1)していない場合、Oracle Databaseは、CREATE TABLE文を発行したユーザーを順序のデフォルトの所有者にします。たとえば、ユーザーMARYがSCOTT.TABLEを作成して、SEQ2のように完全修飾していない順序を参照すると、その列は順序MARY.SEQ2を使用するようになります。順序に対するシノニムは完全に名前解決され、完全修飾された順序としてデータ・ディクショナリに格納されます。これは、パブリック・シノニムとプライベート・シノニムに当てはまります。たとえば、ユーザーBETHが、パブリック・シノニムまたはプライベート・シノニムのSYN1を参照する列を追加したときに、そのシノニムがPETER.SEQ7を参照していると、その列はデフォルトとしてPETER.SEQ7を格納するようになります。

列のデフォルト値の制限事項: 列のデフォルト値には、次の制限事項があります。

- DEFAULT式に、PL/SQLファンクション、他の列、疑似列LEVEL、PRIORおよびROWNUMへの参照または完全に指定されていない日付定数は指定できません。

- 式には、スカラー副問合せ式を除くすべての書式を使用できます。

関連項目:
exprの構文については、「SQL式」を参照してください。

ON NULL ON NULL句を指定すると、Oracle Databaseは、それ以降のINSERT文でNULLに評価される値を割り当てようとするときに、DEFAULTの列値を割り当てるようになります。

ON NULLを指定すると、NOT NULL制約と、NOT DEFERRABLE制約状態が暗黙的に指定されます。NOT NULLおよびNOT DEFERRABLEと競合する表内制約を指定すると、エラーが発生します。

ON NULL句の制限事項 オブジェクト・タイプ列またはREF列に対してこの句を指定することはできません。

関連項目:
「DEFAULT ON NULL列値を含む表の作成例:」

identity_clause

この句を使用すると、ID列を作成できます。このID列には、それ以降のINSERT文ごとに、順序ジェネレータからの増加または減少する整数値が割り当てられます。identity_options句を使用すると、順序ジェネレータを構成できます。

ALWAYS ALWAYSを指定すると、Oracle Databaseは、この列に値を割り当てるために、常に順序ジェネレータを使用するようになります。INSERTまたはUPDATEを使用して、列に明示的に値を割り当てようとすると、エラーが返されます。これはデフォルトです。

BY DEFAULT BY DEFAULTを指定すると、Oracle Databaseは順序ジェネレータを使用して列に値を割り当てますが、明示的に指定した値を列に割り当てることもできるようになります。ON NULLを指定すると、それ以降のINSERT文でNULLに評価される値を割り当てようとしたときに、Oracle Databaseは順序ジェネレータを使用して列に値を割り当てます。

identity_options

identity_options句を使用すると、順序ジェネレータを構成できます。identity_options句のパラメータは、CREATE SEQUENCE文と同じです。これらのパラメータと特性の詳細は、「CREATE SEQUENCE」を参照してください。identity_optionsに固有のSTART WITH LIMIT VALUEは例外であり、ALTER TABLE MODIFYでのみ使用できます。詳細は、「identity_options」を参照してください。

注意:
ID列を作成するときには、パフォーマンスを向上するために、デフォルトの20よりも大きな値を使用してCACHE句を指定してください。

ID列の制限事項: ID列には、次の制限事項が適用されます。

- ID列は、表ごとに1列のみ指定できます。

- identity_clauseを指定する場合は、column_definition句のdatatypeに、数値データ型を指定する必要があります。ユーザー定義のデータ型は指定できません。

- identity_clauseを指定すると、column_definitionにDEFAULT句を指定できなくなります。

- identity_clauseを指定すると、NOT NULL制約と、NOT DEFERRABLE制約状態が暗黙的に指定されます。NOT NULLおよびNOT DEFERRABLEと競合する表内制約を指定すると、エラーが発生します。

- ID列が暗号化されていると、その暗号化アルゴリズムが推測される可能性があります。ID列には、強い暗号化アルゴリズムを使用してください。

- CREATE TABLE AS SELECTを使用すると、列に対するIDのプロパティが継承されなくなります。

関連項目:
「ID列を含む表の作成例:」

encryption_spec

ENCRYPT句を指定すると、透過的データ暗号化(TDE)機能を利用して、定義する列を暗号化できます。暗号化できる列の型は、CHAR、NCHAR、VARCHAR2、NVARCHAR2、NUMBER、DATE、LOBおよびRAWです。列を暗号化するユーザーなど、認可されたユーザーには、データは暗号化された形で表示されません。

注意:
列を暗号化するには、適切な権限を持つシステム管理者が、セキュリティ・モジュールを初期化し、キーストアをオープンし、暗号化キーを設定しておく必要があります。列の暗号化の一般的な情報については、『Oracle Database Advanced Securityガイド』を参照してください。関連するALTER SYSTEM文については、「security_clauses」を参照してください。

USING 'encrypt_algorithm' この句を使用すると、使用するアルゴリズムの名前を指定できます。有効なアルゴリズムは、AES256、AES192、AES128および3DES168です。この句を省略すると、AES192が使用されます。同じ表内の複数の列を暗号化するときに、ある1つの列に対してUSING句を指定した場合は、暗号化する他のすべての列についても同じアルゴリズムを指定する必要があります。

IDENTIFIED BY password この句を指定すると、指定したパスワードから列のキーが導出されます。

'integrity_algorithm' この句では、使用する整合性アルゴリズムを指定できます。有効な整合性アルゴリズムは、SHA-1およびNOMACです。

- SHA-1を指定すると、TDEによってSecure Hash Algorithm(SHA-1)が使用され、整合性チェック用として、暗号化された各値に20バイトのMessage Authentication Code(MAC)が追加されます。これはデフォルトです。

- NOMACを指定すると、TDEによってMACは追加されず、整合性チェックも実行されません。この場合、暗号化された値ごとに20バイトのディスク領域が節約されます。NOMACを使用してディスク領域を節約し、パフォーマンスを向上させる方法の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

表のすべての暗号化列で同じ整合性アルゴリズムが使用される必要があります。表の列ですでにSHA-1アルゴリズムを使用している場合は、NOMACパラメータによって同じ表の別の列を暗号化することはできません。表のすべての暗号化列で使用されている整合性アルゴリズムを変更する方法の詳細は、ALTER TABLEのREKEY encryption_spec句に関する説明を参照してください。

SALT | NO SALT SALTを指定すると、列のクリア・テキストを暗号化する前に、「salt」と呼ばれるランダムな文字列をクリア・テキストに追加するようデータベースに指示します。これはデフォルトです。

NO SALTを指定すると、列のクリア・テキストを暗号化する前に、データベースはクリア・テキストにsaltを追加しません。

暗号化する列に対してSALTまたはNO SALTを指定する場合、次の点を考慮してください。

- 列を索引キーとして使用する場合は、NO SALTを指定する必要があります。このような場面で使用されるSALTの詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

- 表に対して表圧縮を指定した場合、SALTで暗号化される列内のデータは圧縮されません。

LOB暗号化に対しては、SALTまたはNO SALTを指定できません。

encryption_specの制限事項: 列の暗号化には、次の制限事項があります。

- 透過的データ暗号化は、従来のインポート/エクスポート・ユーティリティまたはトランスポータブル表領域ベースのエクスポートによってサポートされていません。かわりに、暗号化された列には、データ・ポンプ・インポート/エクスポート・ユーティリティを使用してください。

- 外部表の列を暗号化する場合、その表のアクセス・タイプとしてORACLE_DATAPUMPが使用されている必要があります。

- SYSが所有する表の列は暗号化できません。

- 外部キーの列は、暗号化できません。

関連項目:
透過的データ暗号化の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。

virtual_column_definition

virtual_column_definition句によって、仮想列を作成できます。仮想列はディスクには格納されません。仮想列の値は、一連の式またはファンクションを計算することによって必要に応じて導出されます。仮想列は、問合せ、DMLおよびDDL文で使用できます。索引付けが可能であり、統計を収集できます。したがって、他の列と同様に処理できます。例外と制限については、次の「仮想列の注意事項:」および「仮想列の制限事項:」で説明します。

column columnには、仮想列の名前を指定します。

datatype オプションで、仮想列のデータ型を指定できます。datatypeを省略すると、列のデータ型は基礎となる式のデータ型に基づいて決定されます。すべてのOracleスカラー・データ型およびXMLTypeがサポートされています。

VISIBLE | INVISIBLE この句を使用すると、仮想列をVISIBLEにするか、INVISIBLEにするかを指定できます。デフォルトは、VISIBLEです。詳細は、「VISIBLE | INVISIBLE」を参照してください。

GENERATED ALWAYSオプション・キーワードGENERATED ALWAYSは、意味を明確にするためのものです。列はディスクには格納されませんが、必要に応じて評価されることが示されます。

column_expression AS column_expression句によって、列の内容が決まります。column_expressionの詳細は、「列式」を参照してください。

VIRTUALオプション・キーワードVIRTUALは、意味を明確にするためのものです。

evaluation_edition_clause エディション化されたPL/SQLファンクションをcolumn_expressionで参照する場合は、この句を指定する必要があります。この句を使用すると、エディショニングされたPL/SQLファンクションの名前解決時に検索されたエディション(評価エディション)を指定できます。

- CURRENT EDITIONを指定すると、このDDL文が実行されるエディションを検索できます。

- EDITION editionを指定すると、editionを検索できます。

- NULL EDITIONを指定することは、evaluation_edition_clauseを省略することと同じです。

evaluation_edition_clauseを省略すると、エディショニングされたオブジェクトは名前解決時に認識されなくなるためエラーが発生します。評価エディションが削除されると、それ以降の仮想列への問合せでエラーが発生します。

データベースは、仮想列が参照するファンクションの依存関係を維持しません。そのため、仮想列が非エディション・ファンクションを参照しているときに、そのファンクションをエディション・ファンクションにすると、次の操作でエラーが発生することがあります。

- その仮想列への問合せ

- その仮想列を含む行の更新

- その仮想列にアクセスするトリガーの起動

関連項目:
仮想列に評価エディションを指定する方法の詳細は、『Oracle Database開発ガイド』を参照してください。

unusable_editions_clause この句を使用すると、1つ以上のエディションで仮想列の式を問合せの評価に使用できないことを指定できます。残りの一連のエディションでは、オプティマイザが安全に仮想列の式を使用して問合せを評価できます。

たとえば、仮想列にファンクション索引を定義したとします。オプティマイザはそのファンクション索引を使用して、仮想列の式がWHERE句に含まれる問合せを評価できます。問合せが、仮想列を使用できる一連のエディションに含まれるエディションでコンパイルされた場合、オプティマイザは、索引を使用して問合せを評価することを検討します。問合せが、仮想列を使用できる一連のエディションに含まれないエディションでコンパイルされた場合、オプティマイザは、索引を使用することを検討しません。

関連項目:
ファンクション索引を使用した最適化の詳細は、『Oracle Database概要』を参照してください。

UNUSABLE BEFORE句 この句を使用すると、先行のエディションで仮想列の式を問合せの評価に使用できないことを指定できます。

- CURRENT EDITIONを指定すると、このDDL文が実行されるエディションより前のエディションで仮想列の式が使用禁止になります。

- EDITION editionを指定すると、指定したeditionより前のエディションで仮想列の式が使用禁止になります。

UNUSABLE BEGINNING WITH句 この句を使用すると、特定のエディション以降のエディションで仮想列の式を問合せの評価に使用できないことを指定できます。

- CURRENT EDITIONを指定すると、このDDL文が実行されるエディションと、それ以降のエディションで仮想列の式が使用禁止になります。

- EDITION editionを指定すると、指定したeditionとそれ以降のエディションで仮想列の式が使用禁止になります。

- NULL EDITIONを指定することは、UNUSABLE BEGINNING WITH句を省略することと同じです。

この句に指定したエディションがその後削除されても、仮想列への影響はありません。

仮想列の注意事項:

- column_expressionで列レベルのセキュリティが実装された列を参照する場合、仮想列は基本列のセキュリティ・ルールを継承しません。この場合は、仮想列に対して列レベルのセキュリティ・ポリシーを複製するか、またはデータを暗黙的にマスクするファンクションを適用して、仮想列のデータを保護する必要があります。たとえば、一般的にクレジット・カード番号は列レベルのセキュリティ・ポリシーで保護しますが、コール・センターの従業員に対しては確認目的でクレジット・カード番号の下4桁を参照できるようにします。このような場合、クレジット・カード番号の下4桁のサブストリングを取るように仮想列を定義できます。

- 仮想列に定義された表の索引は、表のファンクション索引と同じです。

- 仮想列を直接更新することはできません。したがって、UPDATE文のSET句に仮想列を指定することはできません。ただし、UPDATE文のWHERE句には仮想列を指定できます。同様に、DELETE文のWHERE句に仮想列を指定して、仮想列の導出値に基づいて表から行を削除できます。

- 仮想列を含む表をFROM句に指定する問合せは、結果キャッシュに適応します。結果キャッシュの詳細は、「RESULT_CACHEヒント」を参照してください。

- 作成時にファンクションにDETERMINISTICが明示的に指定されている場合、column_expressionは、PL/SQLファンクションを参照できます。ただし、後でファンクションが置き換えられた場合、仮想列に依存する定義は無効にされません。そのような場合、表にデータが含まれていると、仮想列が制約、索引またはマテリアライズド・ビューの定義あるいは結果キャッシュで使用された場合に、仮想列を参照する問合せで不適切な結果が戻される場合があります。そのため、仮想列の決定的なPL/SQLファンクションを置き換えるために、次の手順を実行します。

- 仮想列の制約を無効にして再度有効にします。

- 仮想列の索引を再作成します。

- 仮想列にアクセスするマテリアライズド・ビューを完全にリフレッシュします。

- キャッシュされた問合せが仮想列にアクセスした場合、結果キャッシュをフラッシュします。

- 表の統計情報を再収集します。

- 仮想列は、INVISIBLEの列にすることができます。column_expressionには、INVISIBLEの列を含めることができます。

仮想列の制限事項:

- 仮想列は、リレーショナル・ヒープ表にのみ作成できます。仮想列は、索引構成表、外部表、オブジェクト表、クラスタ化表または一時表ではサポートされません。

- AS句のcolumn_expressionには、次の制限事項があります。

- 別の仮想列を名前で参照できません。

- column_expressionで参照される列は、同じ表で定義されている必要があります。

- 決定的なユーザー定義ファンクションを参照できますが、その場合、仮想列をパーティション化キー列として使用できません。

- column_expressionの出力は、スカラー値である必要があります。

関連項目:
column_expressionの詳細および制限事項は、「列式」を参照してください。

- 仮想列は、Oracleが提供するデータ型、ユーザー定義型、またはLOBまたはLONG RAWにすることはできません。

- パーティション列として使用する仮想列を定義する式には、PL/SQLファンクションへのコールを指定できません。

関連項目:
仮想列を持つ表の作成の例については、「仮想表の列の追加例:」および『Oracle Database管理者ガイド』を参照してください。

period_definition

period_definition句を使用すると、tableの有効期間ディメンションを作成できます。

この句によって、tableの時制有効性のサポートが実装されます。この句を指定する場合、table内の1つの列の開始時間列に開始日とタイムスタンプが含まれ、table内の別の列の終了時間列に終了日とタイムスタンプが含まれます。これら2つの列によって、tableの有効期間ディメンション、つまり各行が有効と見なされる期間が定義されます。Oracleフラッシュバック問合せを使用すると、指定した時間の前の特定の時点で、または特定の期間中に有効と見なされるかどうかに基づいて、tableから行を取り出すことができます。

表の作成時には、最大で1つの有効期間ディメンションを指定できます。その後、ALTER TABLEのadd_period_clauseを使用して、他の有効期間ディメンションを表に追加できます。

valid_time_column 有効期間ディメンションの名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。Oracle Databaseによって、この名前を持つNUMBERデータ型のINVISIBLE仮想列がtable内に作成されます。

start_time_columnおよびend_time_column オプションで、次のようにこれらの句を指定できます。

- start_time_columnは、開始日またはタイムスタンプを含む開始時間列の名前を指定するために使用します。

- end_time_columnは、終了日またはタイムスタンプを含む終了時間列の名前を指定するために使用します。

start_time_columnとend_time_columnに指定する名前は、「データベース・オブジェクトのネーミング規則」に記載されている要件を満たしている必要があります。

これらの句を指定する場合、start_time_columnとend_time_columnをCREATE TABLEのcolumn_definition句内で定義する必要があります。各列は日時データ型(DATE、TIMESTAMP, TIMESTAMP WITH TIME ZONEまたはTIMESTAMP WITH LOCAL TIME ZONE)にする必要があり、VISIBLEまたはINVISIBLEにすることができます。

これらの句を指定しない場合、valid_time_column_STARTという開始時間列およびvalid_time_column_ENDという終了時間列が作成されます。これらの列のデータ型はTIMESTAMP WITH TIME ZONEであり、すべてINVISIBLEです。

開始時間列と終了時間列の値は、他の列と同じように挿入および更新できます。考慮事項は次のとおりです。

- 開始時間列の値がNULLの場合、終了時間列の値(その値を含まない)よりも早い時間を示すすべての時間値の行が有効と見なされます。

- 終了時間列の値がNULLの場合、開始時間列の値(その値を含む)よりも遅い時間を示すすべての時間値の行が有効と見なされます。

- どちらの列の値もNULLではない場合、開始時間列の値を終了時間列の値よりも早くする必要があります。開始時間列の値(その値を含む)よりも早い時間および終了時間列の値(その値を含まない)よりも遅い時間を示すすべての時間値の行が有効と見なされます。

- どちらの列の値もNULLの場合、すべての時間値の行が有効と見なされます。

有効期間ディメンション列の制限事項 有効期間ディメンション列には、次の制限事項があります。

- valid_time_columnは、内部使用のみを目的としています。DDLまたはDML操作は実行できませんが、1つ例外があります。ALTER TABLEのdrop_period_clauseを使用すると、列を削除できます。

- 開始時間列と終了時間列を削除する唯一の方法は、ALTER TABLEのdrop_period_clauseを使用することです。

- 開始時間列と終了時間列がOracle Databaseによって自動的に作成された場合、それらはINVISIBLEになり、後からVISIBLEには変更できません。

関連項目:

- 時制有効性の詳細は、『Oracle Database開発ガイド』を参照してください。

- Oracleフラッシュバック問合せの詳細は、「SELECT」の「flashback_query_clause」を参照してください。

- 有効期間ディメンションを追加および削除する方法の詳細は、「ALTER TABLE」の「add_period_clause」と「drop_period_clause」を参照してください。

制約句

制約句を使用すると、表の列に対する制約を作成できます。DEFERRABLE以外のPRIMARY KEY制約を索引構成表に指定してください。これらの制約の構文、詳細および使用例は、「constraint」を参照してください。

inline_ref_constraintおよびout_of_line_ref_constraint これらの句を使用すると、REF型の列を指定できます。これらの句の唯一の違いは、表レベルでout_of_line_ref_constraintを指定することです。このため、定義するREF型の列または属性を識別する必要があります。inline_ref_constraintは、REF型の列または属性の定義の一部として指定してください。

関連項目:
「REF制約の例」

inline_constraint inline_constraintを使用すると、整合性制約を列定義の一部として定義できます。

オブジェクト型の列のスカラー属性に、UNIQUE制約、PRIMARY KEY制約およびREFERENCES制約を作成できます。また、オブジェクト型の列のNOT NULL制約、オブジェクト型の列またはオブジェクト型の列の属性を参照するCHECK制約も作成できます。

out_of_line_constraint out_of_line_constraint構文を使用すると、整合性制約を表定義の一部として定義できます。

supplemental_logging_props

supplemental_logging_props句を指定すると、追加のデータがログ・ストリームに入れられ、ログに基づくツール製品をサポートできます。

supplemental_log_grp_clause この句を使用すると、名前付きのログ・グループを作成できます。

- NO LOG句を使用すると、REDOログから1つ以上の列を省略できます。この句を指定しない場合、これらの列は名前付きのログ・グループのREDOに含まれます。名前付きのログ・グループに、1つ以上の固定長列をNO LOGを使用せずに指定する必要があります。

- ALWAYSを指定すると、更新時にログ・グループのすべての列がREDOに含まれます。関連付けられた行が変更されるとログ・グループのすべての列に対してサプリメンタル・ロギングが行われるため、これは無条件ログ・グループといいます(「常時ログ・グループ」ともいいます)。ALWAYSを指定しない場合、ログ・グループの任意の列が変更された場合のみ、ログ・グループのすべての列に対してサプリメンタル・ロギングが行われます。これは、条件付きログ・グループといいます。

サプリメンタル・ロギングが指定されているかどうかを確認するには、適切なUSER_、ALL_またはDBA_LOG_GROUP_COLUMNSデータ・ディクショナリ・ビューを問い合せます。

supplemental_id_key_clause この句を使用すると、主キー列、一意キー列および外部キー列のすべて、またはこれらの列の組合せに対してサプリメンタル・ロギングを実行できます。Oracle Databaseは、無条件ログ・グループまたは条件付きログ・グループのいずれかを生成します。無条件ログ・グループでは、関連付けられた行が変更されると、ログ・グループのすべての列に対してサプリメンタル・ロギングが行われます。条件付きログ・グループでは、ログ・グループの任意の列が変更された場合のみ、ログ・グループのすべての列に対してサプリメンタル・ロギングが行われます。

- ALL COLUMNSを指定すると、この行の最大サイズが固定長のすべての列がREDOログに含まれます。このようなREDOログは、システム生成無条件ログ・グループといいます。

- PRIMARY KEY COLUMNSを指定すると、主キーを持つすべての表において、更新が実行されるたびに、主キーのすべての列がREDOログに置かれます。Oracle Databaseは、次のとおりサプリメンタル・ロギングを行う列を評価します。

- まず、主キー制約が指定されている列が選択されます(制約が検証済か、または制約にRELYのマークが付いていて、DISABLEDおよびINITIALLY DEFERREDのマークが付いていない場合)。

- 主キー列が存在しない場合、1つ以上のNOT NULL列を持つ最小のUNIQUE索引が検索され、この索引の列が使用されます。

- このような索引が存在しない場合、表のすべてのスカラー列に対してサプリメンタル・ロギングが行われます。

- UNIQUE COLUMNSを指定すると、一意キーまたはビットマップ索引を持つすべての表において、一意キー列またはビットマップ索引列が変更された場合、一意キーまたはビットマップ索引に属するその他のすべての列もREDOログに置かれます。このようなログ・グループは、システム生成条件付きログ・グループといいます。

- FOREIGN KEY COLUMNSを指定すると、外部キーを持つすべての表において、外部キー列が変更された場合、外部キーに属するその他のすべての列もREDOログに置かれます。このようなREDOログは、システム生成条件付きログ・グループといいます。

この句を複数回指定すると、指定するたびに個別のログ・グループが作成されます。サプリメンタル・ロギング・データが指定されているかどうかを確認するには、適切なUSER_、ALL_またはDBA_LOG_GROUPSデータ・ディクショナリ・ビューを問い合せます。

ON COMMIT

ON COMMIT句は、一時表を作成する場合のみに適用されます。この句を使用すると、一時表のデータがトランザクションまたはセッションの存続期間中保持されるかどうかを指定できます。

DELETE ROWS DELETE ROWSは、トランザクション固有の一時表に対して指定します。これはデフォルトです。各コミット後に表が切り捨てられます(すべての行が削除されます)。

PRESERVE ROWS PRESERVE ROWSは、セッション固有の一時表に対して指定します。セッション終了時に表が切り捨てられます(すべての行が削除されます)。

physical_properties

物理プロパティは、エクステントとセグメントの処理、および表の記憶特性に関係します。

deferred_segment_creation

この句を使用すると、この表のセグメントを作成するタイミングを指定できます。

- SEGMENT CREATION DEFERRED: 表のセグメント、表のLOB列のセグメント、表作成の一部として暗黙的に作成される索引、およびその後で明示的に表に作成される索引の作成が遅延されます。これらは、最初のデータ行が表に挿入された後に作成されます。このとき、表のセグメント、LOB列と索引、および明示的に作成される索引がすべて実体化され、このCREATE TABLE文(明示的に作成される索引の場合は、CREATE INDEX文)に指定されたすべての記憶域プロパティが継承されます。これらのセグメントは、最初の挿入操作がコミットされていないか、ロールバックされたかに関係なく作成されます。これはデフォルト値です。

注意:
遅延セグメント作成を使用する表を多く作成する場合、データベースに十分な領域を割り当て、最初の行の挿入時にすべての新しいセグメントに対して十分な領域が確保されるようにしてください。

- SEGMENT CREATION IMMEDIATE: 表のセグメントは、このCREATE TABLE文の一部として作成されます。

即時セグメント作成は、たとえば、アプリケーションがDBA_、USER_およびALL_SEGMENTSデータ・ディクショナリ・ビューに表示されるオブジェクトに依存している場合に有効です。このようなオブジェクトは、セグメントが作成されるまでビューに表示されないためです。この句によって、DEFERRED_SEGMENT_CREATION初期化パラメータの設定が上書きされます。

既存の表、そのLOB列または索引にセグメントが作成されているかどうかを確認するには、USER_TABLES、USER_INDEXESまたはUSER_LOBSのSEGMENT_CREATED列を問い合せます。

セグメントが作成されていない表の注意事項: セグメントが実体化されていない表には、次の規則が適用されます。

- この表をCREATE TABLE ... AS副問合せを使用して作成する場合は、ソース表に行がなければ、新しい表のセグメントの作成は遅延されます。ソース表に行がある場合は、新しい表のセグメントは遅延なしで作成されます。

- セグメントが実体化されないうちにALTER TABLE ... ALLOCATE EXTENTを指定すると、セグメントが実体化され、エクステントが割り当てられます。ただし、表の索引に対するDDL文のALLOCATE EXTENT句からはエラーが戻されます。

- 表、そのLOB列または索引に対するDDL文の場合は、DEALLOCATE UNUSEDを指定しても無視されます。

- セグメントが作成されていない表または表パーティションの索引に対するONLINE操作は、特に警告もなく無効になり、OFFLINE操作として実行されます。

- 1つ以上のLOB列がある表で次のいずれかのDDL文を実行すると、結果のパーティションまたはサブパーティションが実体化されます。

- ALTER TABLE SPLIT [SUB]PARTITION

- ALTER TABLE MERGE [SUB]PARTITIONS

- ALTER TABLE ADD [SUB]PARTITION (ハッシュ・パーティションのみ)

- ALTER TABLE COALESCE [SUB]PARTITION (ハッシュ・パーティションのみ)

遅延セグメント作成の制限事項: この句には、次の制限事項があります。

- 索引構成表、クラスタ化表、グローバル一時表、セッション固有の一時表、内部表、XMLType表、AQ表、外部表、およびSYS、SYSTEM、PUBLIC、OUTLNまたはXDBが所有する表に対して、セグメント作成を遅延させることはできません。

- 遅延セグメント作成は、ビットマップ結合索引およびドメイン索引ではサポートされていません。

- 遅延セグメント作成は、ディクショナリ管理表領域ではサポートされていません。

- 遅延セグメント作成は、SYSTEM表領域ではサポートされていません。

- シリアル化可能トランザクションは、遅延セグメント作成では動作しません。セグメントが作成されていない空の表にデータを挿入しようとすると、エラーになります。

- グローバル索引がパーティション・メンテナンス操作中にUNUSABLEにマーク付けされた場合、データベースは使用禁止索引セグメントを削除しません。

関連項目:
セグメント割当ての概要は、『Oracle Database概要』を参照してください。DEFERRED_SEGMENT_CREATION初期化パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

segment_attributes_clause

segment_attributes_clauseを指定すると、表の物理属性および表領域の記憶域を指定できます。

physical_attributes_clause physical_attributes_clauseを指定すると、PCTFREE、PCTUSED、INITRANSパラメータの値、および表の記憶特性を指定できます。

- 非パーティション表の場合、指定した各パラメータおよび記憶特性は、表に関連付けられたセグメントの実際の物理属性となります。

- パーティション表の場合、パーティション作成文のPARTITION句で明示的に値を上書きしないかぎり、指定したパラメータおよび記憶特性の値は、CREATE文(および後続のALTER TABLE ... ADD PARTITION文)で指定するすべてのパーティションに関連付けられたセグメントのデフォルト物理属性になります。

この句を省略すると、PCTFREEは10、PCTUSEDは40、INITRANSは1に設定されます。

関連項目:

- これらの句の詳細は、「physical_attributes_clause」および「storage_clause」を参照してください。

- 「表の作成: 記憶域の例」

TABLESPACE Oracle Databaseが、表、オブジェクト表OIDINDEX、パーティション、LOBのデータ・セグメント、LOBの索引セグメントまたは索引構成表のオーバーフロー・データ・セグメントを作成する表領域を指定します。TABLESPACEを省略した場合、その表を含むスキーマの所有者のデフォルトの表領域内に作成されます。

1つ以上のLOB列を持つヒープ構成表の場合、LOB記憶域に対するTABLESPACEを省略すると、表を作成する表領域にLOBデータおよび索引セグメントが作成されます。

1つ以上のLOB列を持つ索引構成表の場合、TABLESPACEを省略すると、索引構成表の主キー索引セグメントが作成された表領域に、LOBデータおよび索引セグメントが作成されます。

非パーティション表の場合、TABLESPACEに指定する値は、表に関連付けられたセグメントの実際の物理属性となります。パーティション表の場合、TABLESPACEに指定する値は、PARTITION記述でTABLESPACEを指定しないかぎり、このCREATE文(および後続のALTER TABLE ... ADD PARTITION文)で指定されたすべてのパーティションに関連付けられたセグメントのデフォルト物理属性となります。

関連項目:
表領域の詳細は、「CREATE TABLESPACE」を参照してください。

logging_clause

表、および制約のために必要な索引、パーティションまたはLOBの記憶特性の作成をREDOログ・ファイルに記録する(LOGGING)かしないか(NOLOGGING)を指定します。表のロギング属性は、その索引の属性に依存しません。

表、パーティションまたはLOBの記憶域に対して、後で実行されるダイレクト・ローダー(SQL*Loader)操作およびダイレクト・パスINSERT操作のログをとる(LOGGING)かとらない(NOLOGGING)かも指定します。

この句の詳細は、「logging_clause」を参照してください。

table_compression

table_compression句は、ヒープ構成表に対してのみ有効です。この句を使用すると、ディスク使用量を削減するためにデータ・セグメントを圧縮するかどうかを指定できます。COMPRESS句を使用すると、表を圧縮できます。NOCOMPRESS句を指定すると、表の圧縮が無効になります。デフォルトはNOCOMPRESSです。

COMPRESS キーワードCOMPRESSのみを指定することは、ROW STORE COMPRESS BASICを指定することと同じであり、基本表圧縮が使用可能になります。

ROW STORE COMPRESS BASIC ROW STORE COMPRESSまたはROW STORE COMPRESS BASICを指定して表の圧縮を使用可能にすると、基本表圧縮が使用可能になります。Oracle Databaseでは、表の圧縮が効果的である場合に、ダイレクト・パスINSERT操作中にデータの圧縮を開始します。元のインポート・ユーティリティ(imp)はダイレクト・パスINSERTをサポートしないため、圧縮フォーマットでデータをインポートすることはできません。

基本表圧縮が指定された表では、physical_attributes_clauseでPCTFREEの値を明示的に設定しないかぎり、PCTFREE値0を使用して圧縮が最大化されます。

以前のリリースでは、基本表圧縮はCOMPRESS BASICを使用することで有効になっていました。この構文は、下位互換性のために引き続きサポートされています。

関連項目:
ダイレクト・パスINSERT操作の制限などの詳細は、「従来型およびダイレクト・パスINSERT」を参照してください。

ROW STORE COMPRESS ADVANCED ROW STORE COMPRESS ADVANCEDを指定して表の圧縮を有効にすると、高度な行圧縮が有効になります。Oracle Databaseは表でのすべてのDML操作中にデータの圧縮を開始します。OLTP環境にはこの圧縮形式をお薦めします。

ROW STORE COMPRESS ADVANCEDまたはNOCOMPRESSが指定された表では、PCTFREEのデフォルトを明示的に上書きしないかぎり、デフォルト値10を使用して、圧縮を最大限にしながらデータへの今後のDML変更も考慮します。

以前のリリースでは、OLTP表圧縮と呼ばれる高度な行圧縮は、COMPRESS FOR OLTPを使用することで有効になっていました。この構文は、下位互換性のために引き続きサポートされています。

COLUMN STORE COMPRESS FOR { QUERY | ARCHIVE } COLUMN STORE COMPRESS FOR QUERYまたはCOLUMN STORE COMPRESS FOR ARCHIVEを指定すると、ハイブリッド列圧縮が有効になります。ハイブリッド列圧縮を使用すると、バルク・ロード操作中にデータを圧縮できます。ロード処理中にデータが列指向の書式に変換されてから、圧縮されます。指定したレベルに適した圧縮アルゴリズムがOracle Databaseで使用されます。一般的に、レベルが高くなるほど、圧縮率は大きくなります。ハイブリッド列圧縮を使用すると高い圧縮率が得られますが、CPUコストも高くなります。そのため、この圧縮形式は更新頻度が高くないデータに使用することをお薦めします。

COLUMN STORE COMPRESS FOR QUERYは、データ・ウェアハウス環境で有効です。有効な値はLOWおよびHIGHで、HIGHの方が高い圧縮率が得られます。デフォルトはHIGHです。

COLUMN STORE COMPRESS FOR ARCHIVEを使用すると、COLUMN STORE COMPRESS FOR QUERYより高い圧縮率が得られます。長期間格納するデータを圧縮する場合に有効です。有効な値はLOWおよびHIGHで、HIGHを指定すると実行可能な最も高い圧縮率が得られます。デフォルトはLOWです。

COLUMN STORE COMPRESSを指定することは、COLUMN STORE COMPRESS FOR QUERY HIGHを指定することと同じです。

COLUMN STORE COMPRESS FOR QUERYまたはCOLUMN STORE COMPRESS FOR ARCHIVEが指定された表では、physical_attributes_clauseでPCTFREEの値を明示的に設定しないかぎり、PCTFREE値に0を使用して圧縮を最大限にします。これらの表では、PCTFREEは、ダイレクト・パスINSERTを使用してロードしたブロックには影響しません。PCTFREEは、従来型INSERTを使用してロードしたブロック、およびダイレクト・パスINSERTを使用して最初にロードしたブロックに対してDML操作を行った結果作成されるブロックに適用されます。

[NO] ROW LEVEL LOCKING ROW LEVEL LOCKINGを指定する場合、Oracle DatabaseはDML操作中に行レベル・ロックを使用します。これにより、ハイブリッド列圧縮したデータにアクセスする場合にこれらの操作のパフォーマンスが向上します。NO ROW LEVEL LOCKINGを使用する場合、行レベル・ロックは使用されません。デフォルトはNO ROW LEVEL LOCKINGです。

以前のリリースでは、ハイブリッド列圧縮は、COMPRESS FOR QUERYおよびCOMPRESS FOR ARCHIVEを使用することで有効になっていました。この構文は、下位互換性のために引き続きサポートされています。

関連項目:
一部のOracleストレージ・システムに備わっているハイブリッド列圧縮機能の詳細は、『Oracle Database概要』を参照してください。

表の圧縮の注意事項: 表の圧縮は、ヒープ構成表の次の部分に対して指定できます。

- ヒープ構成表全体の場合は、relational_tableまたはobject_tableのphysical_properties句で指定します。

- レンジ・パーティションの場合は、range_partitions句のtable_partition_descriptionで指定します。

- コンポジット・レンジ・パーティションの場合は、range_partition_desc句のtable_partition_descriptionで指定します。

- コンポジット・リスト・パーティションの場合は、list_partition_desc句のtable_partition_descriptionで指定します。

- リスト・パーティションの場合は、list_partitions句のtable_partition_descriptionで指定します。

- システム・パーティションまたは参照パーティションの場合は、reference_partition_desc句のtable_partition_descriptionで指定します。

- ネストした表の記憶表の場合は、nested_table_col_properties句で指定します。

関連項目:
DBMS_COMPRESSIONパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。これは、アプリケーションに適した圧縮レベルを選択するのに役立つパッケージです。例を含む表の圧縮の詳細は、『Oracle Database管理者ガイド』を参照してください。

表の圧縮の制限事項: 表の圧縮には、次の制限事項があります。

- BasicFiles LOBのデータ・セグメントは圧縮されません。SecureFiles LOBの圧縮の詳細は、「LOB_compression_clause」を参照してください。

- COMPRESS BASICを使用する表の列は削除できませんが、未使用に設定することはできます。ROW STORE COMPRESS ADVANCED、COLUMN STORE COMPRESS FOR QUERYおよびCOLUMN STORE COMPRESS FOR ARCHIVEを使用する表では、ALTER TABLE ... drop_column_clauseのすべての操作が有効です。

- 索引構成表、オーバーフロー・セグメント、オーバーフロー・セグメントのパーティションまたは索引構成表のマッピング表セグメントには、どのタイプの表の圧縮も指定できません。

- 外部表またはクラスタの一部である表には、どのタイプの表の圧縮も指定できません。

- LONG列またはLONG RAW列を持つ表、SYSスキーマによって所有されたSYSTEM表領域内の表、あるいはROWDEPENDENCIESが使用可能な表に対しては、どのタイプの表の圧縮も指定できません。

- フラッシュバック・アーカイブに対応した表に対しては、ハイブリッド列圧縮は指定できません。

- オブジェクト表、XMLType表、抽象データ型を持つ列、表として格納されるコレクションまたはOPAQUE型(オブジェクトとして格納されるXMLType列を含む)のオブジェクト・リレーショナル機能に対しては、ハイブリッド列圧縮は指定できません。

- ハイブリッド列圧縮で圧縮された表の行を更新すると、行のROWIDが変更される可能性があります。

- ハイブリッド列圧縮で圧縮された表では、単一の行に対する更新によって複数の行がロックされる可能性があります。そのため、書込みトランザクションの同時実効性が影響を受ける場合があります。

- ハイブリッド列圧縮で圧縮された表に外部キー制約が定義されている場合、INSERTにAPPENDヒントを指定してデータを挿入すると、挿入するデータは通常のハイブリッド列圧縮より低いレベルで圧縮されます。ハイブリッド列圧縮でデータを圧縮するには、外部キー制約を使用禁止にし、INSERTにAPPENDヒントを指定してデータを挿入してから、外部キー制約を使用可能にします。

inmemory_table_clause

この句を使用して、インメモリー列ストア(IM列ストア)の表を有効化または無効化します。IM列ストアは任意に入力できる静的なSGAプールです。ここには、迅速にスキャンできるように最適化された特殊な列形式で、表のコピーおよびパーティションが格納されています。IM列ストアはバッファ・キャッシュを置き換えませんが、両方のメモリー領域で異なる形式の同じデータを格納できるように補助します。IM列ストアは、Oracle Database 12cリリース1(12.1.0.2)から使用可能です。

- INMEMORYを指定して、IM列ストアの表を有効化します。
オプションでinmemory_parameters句を使用して、表データをIM列ストアに格納する方法を指定できます。この句を使用すると、データ圧縮方法およびデータ移入優先度を指定できます。Oracle RAC環境では、Oracle RACインスタンス間のデータの分散および複製方法も指定できます。詳細は、inmemory_parameters句を参照してください。

オプションでinmemory_column_clauseを使用して、IM列ストアの特定の表の列を無効化し、特定の列のデータ圧縮方法を指定できます。詳細は、inmemory_column_clauseを参照してください。

- NO INMEMORYを指定して、IM列ストアの表を無効化します。

この句を省略すると、作成される表領域のデフォルトのIM列ストア設定が表に割り当てられます。表領域のデフォルトのIM列ストア設定の指定の詳細は、CREATE TABLESPACEのinmemory_clauseを参照してください。

注意:
INMEMORY_CLAUSE_DEFAULTの初期化パラメータを使用すると、新しい表およびマテリアライズド・ビューに対してデフォルトのIM列ストア句を指定できます。INMEMORY_CLAUSE_DEFAULT初期化パラメータの詳細は、Oracle Database Referenceを参照してください。

インメモリー列ストアの制限事項 次の制限事項がインメモリー列ストアに適用されます。

- SYSスキーマによって所有され、SYSTEMまたはSYSAUX表領域にある表のINMEMORY句は指定できません。

- IM列ストアは、LONGまたはLONG RAW列、表外列(LOB列、VARRAY列、ネストした表の列)、仮想列または拡張データ型列をサポートしません。IM列ストアの表を有効化し、これらの型の列が含まれる場合、列はIM列ストアに移入されません。

関連項目:

- IM列ストアの概要は、Oracle Database概要を参照

- IM列ストアの使用方法は、『Oracle Database管理者ガイド』を参照

inmemory_parameters

inmemory_memcompress、inmemory_priority、inmemory_distributeおよびinmemory_duplicate句を使用して、表データをIM列ストアに格納する方法を指定します。

inmemory_memcompress この句を使用して、IM列ストアに格納される表データの圧縮方法を指定します。このデータは、インメモリー・データと呼ばれます。インメモリー・データを圧縮しないようデータベースに指示するには、NO MEMCOMPRESSを指定します。インメモリー・データを圧縮するようデータベースに指示するには、MEMCOMPRESS FORの後に次の方法のいずれかを指定します。

- DML - この方法はDML操作に対して最適化され、ほとんどデータ圧縮は実行されません。

- QUERY - QUERYの指定は、QUERY LOWの指定と同じです。

- QUERY LOW - この方法は最小限にインメモリー・データを圧縮し(DMLを除く)、最適な問合せパフォーマンスの結果になります。これはデフォルトです。

- QUERY HIGH -この方法はQUERY LOWよりインメモリー・データを圧縮しますが、CAPACITY LOWほどではありません。

- CAPACITY - CAPACITYの指定は、CAPACITY LOWの指定と同じです。

- CAPACITY LOW - この方法はQUERY HIGHよりインメモリー・データを圧縮し、CAPACITY HIGHほどではありませんが、優れた問合せパフォーマンスの結果になります。

- CAPACITY HIGH - この方法は最大限にインメモリー・データを圧縮し、適切な問合せパフォーマンスの結果になります。

inmemory_priority PRIORITY句を使用して、IM列ストアの表データのデータ移入優先度を指定します。この句が制御するのは、移入の優先度であり、移入の速度ではありません。

- オンデマンドの移入にはNONEを指定します。この場合、表が全表スキャンによってアクセスされるときに、データベースはIM列ストアに表データを移入します。表がアクセスされない場合、またはROWIDによる索引スキャンまたはフェッチによってのみアクセスされる場合は、移入は行われません。これはデフォルトです。

- 優先度ベースの移入には、優先度レベルLOW、MEDIUM、HIGHまたはCRITICALのいずれかを指定します。この場合、データベースは、内部的に管理された優先度キューを使用してIM列ストアに表データを自動的に移入します。全体スキャンは移入に必要な条件ではありません。データベースは、指定された優先度レベルに基づいて表データの移入をキューに入れます。たとえば、INMEMORY PRIORITY CRITICALが設定された表は、INMEMORY PRIORITY HIGHが設定された表より優先され、同様に、この表はINMEMORY PRIORITY LOWが設定された表より優先されます。IM列ストアに十分な領域がない場合、データベースは領域が使用可能になるまで追加の表データを移入しません。

inmemory_distribute Oracle Real Application Clusters(Oracle RAC)を使用している場合のみ、DISTRIBUTE句を適用できます。IM列ストアの表データをOracle RACインスタンス間で分散する方法を制御します。次のオプションを指定できます。

- AUTO - Oracle DatabaseがOracle RACインスタンス間のデータの分散方法を制御します。アクセス・パターンに応じて、大きい表がOracle RACインスタンス間で分散されます。小さい表がインスタンス間で分散される場合があります。DISTRIBUTEキーワードのみを指定するか、inmemory_distribute句全体を省略する場合、AUTOがデフォルトです。

- BY ROWID RANGE - 特定の範囲のROWIDのデータが異なるOracle RACインスタンスに分散されます。

- BY PARTITION - パーティションのデータが異なるOracle RACインスタンスに分散されます。

- BY SUBPARTITION - サブパーティションのデータが異なるOracle RACインスタンスに分散されます。

inmemory_duplicate エンジニアド・システムOracle Real Application Clusters(Oracle RAC)を使用している場合のみ、DUPLICATE句を適用できます。IM列ストアの表データをOracle RACインスタンス間で複製する方法を制御します。次のオプションを指定できます。

- DUPLICATE - データが1つのOracle RACインスタンスで複製され、合計2つのOracle RACインスタンスにデータが存在するようになります。

- DUPLICATE ALL - データがすべてのOracle RACインスタンス間で複製されます。DUPLICATE ALLを指定する場合、inmemory_distribute句の指定方法に関係なく、データベースはDISTRIBUTE AUTO設定を使用します。

- NO DUPLICATE - データがOracle RACインスタンス間で複製されません。これはデフォルトです。

inmemory_column_clause

この句を使用して、IM列ストアの特定の表の列を無効化し、特定の列のデータ圧縮方法を指定します。この句を指定するには、IM列ストアに対して表を有効化する必要があります。

- INMEMORYを指定して、IM列ストアの指定された表の列を有効化します。
オプションでinmemory_memcompress句を使用して、特定の列のデータ圧縮方法を指定できます。inmemory_memcompressを参照してください。inmemory_memcompress句を省略すると、表の列には、表のデータ圧縮方法が使用されます。特定の表の列のPRIORITY、DISTRIBUTEまたはDUPLICATE設定を指定できません。これらの設定は、表とすべての表の列で同じです。

- NO INMEMORYを指定して、IM列ストアの指定された表の列を無効化します。

inmemory_column_clauseを省略すると、すべての表の列には、表のIM列ストア設定が使用されます。

inmemory_column_clauseの制限事項 LONGまたはLONG RAW列、表外列(LOB列、VARRAY列、ネストした表の列)、仮想列あるいは拡張データ型列に対してこの句を指定できません。

inmemory_clause

この句を使用して、IM列ストアの表のパーティションを有効化または無効化します。この句を指定するには、IM列ストアに対して表を有効化する必要があります。この句を省略すると、表のパーティションには、表のIM列ストア設定が使用されます。

inmemory_parameters句は、表のパーティションと表に同じセマンティクスを持ちます。詳細は、inmemory_parameters句を参照してください。

ilm_clause

この句を使用すると、自動データ最適化ポリシーをtableに追加できます。

この句のセマンティクスは、CREATE TABLEおよびALTER TABLEで同じですが、追加で次の制限事項があります。CREATE TABLEに指定できるのは、ADD POLICY句のみです。この句のセマンティクスの詳細は、「ilm_clause」を参照してください。

関連項目:
自動データ最適化ポリシーの管理の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

自動データ最適化の制限事項: 自動データ最適化には、次の制限事項があります。

- オブジェクト・タイプ、索引構成表、クラスタ化表またはマテリアライズド・ビューを含む表では自動データ最適化はサポートされません。

- 自動データ最適化はマルチテナント・コンテナ・データベース(CDB)ではサポートされません。

- 時制有効性をサポートする表またはインデータベース・アーカイブの行アーカイブが有効な表では、行レベルのポリシーはサポートされません。

ilm_policy_clause

この句を使用すると、自動データ最適化ポリシーの説明を記述できます。

この句のセマンティクスは、CREATE TABLEおよびALTER TABLEで同じです。この句のセマンティクスの詳細は、「ilm_policy_clause」を参照してください。

RECOVERABLE | UNRECOVERABLE

これらのキーワードは以前のリリースで非推奨になったもので、それぞれLOGGINGおよびNOLOGGINGに置き換えられています。RECOVERABLEおよびUNRECOVERABLEは、下位互換性のためにサポートされていますが、LOGGINGおよびNOLOGGINGキーワードを使用することをお薦めします。

[UN]RECOVERABLEの制限事項: この句には、次の制限事項があります。

- パーティション表またはLOB記憶特性にRECOVERABLEを指定できません。

- パーティション表または索引構成表にUNRECOVERABLEを指定できません。

- AS subqueryでのみUNRECOVERABLEを指定できます。

ORGANIZATION

ORGANIZATION句を指定すると、表のデータ行が格納される順序を指定できます。

HEAP HEAPを使用すると、tableのデータ行の格納順序を特定しないことを指定できます。これはデフォルトです。

INDEX INDEXを使用すると、tableを索引構成表として作成することを指定できます。索引構成表では、表の主キーが定義された索引内にデータ行が格納されます。

EXTERNAL EXTERNALを使用すると、表がデータベースの外部にある読取り専用表であることを指定できます。

関連項目:
「外部表の例:」

index_org_table_clause

index_org_table_clauseを使用すると、索引構成表を作成できます。表の行(主キー列の値と非キー列の値の両方)は、主キーに基づいて作成された索引に格納されます。このため、索引構成表は主キーベースのアクセスおよび操作に最適です。索引構成表は、次のいずれかの表のかわりです。

- CREATE INDEX文を使用して主キーベースで索引付けされるクラスタ化されていない表。

- 索引クラスタに格納されるクラスタ表。索引クラスタは、表に対する主キーをクラスタ・キーにマップするCREATE CLUSTER文を使用して作成されます。

主キーは行を一意に識別するため、索引構成表には主キーを指定してください。主キーにはDEFERRABLEを指定できません。索引構成表の行に直接アクセスする場合は、ROWIDのかわりに主キーを使用してください。

索引構成表がパーティション化され、LOB列を含む場合、最初にindex_org_table_clause、次にLOB_storage_clause、その後に適切なtable_partitioning_clausesを指定する必要があります。

索引構成表を作成する場合は、CREATE TABLE ... AS SELECT文の副問合せで、TO_LOBファンクションを使用してLONG列をLOB列に変換することはできません。LONG列を含まない索引構成表を作成し、INSERT ...AS SELECT文でTO_LOBファンクションを使用してください。

索引構成表のROWID疑似列は、物理ROWIDではなく、論理ROWIDを戻します。データ型ROWIDとして作成した列には、IOTの論理ROWIDを格納できません。データ型ROWIDの列に格納できるデータは、ヒープ構成表のROWIDのみです。IOTの論理ROWIDを格納する場合は、かわりに型UROWIDの列を作成します。データ型UROWIDの列には、物理ROWIDと論理ROWIDの両方を格納できます。

関連項目:
「索引構成表の例:」

索引構成表の制限事項: 索引構成表には、次の制限事項があります。

- 索引構成表には、仮想列は定義できません。

- 索引構成表には、composite_range_partitions、composite_list_partitionsまたはcomposite_hash_partitions句は指定できません。

- 索引構成表がネストした表またはVARRAYである場合は、table_partitioning_clausesを指定できません。

PCTTHRESHOLD integer 索引ブロック内で、索引構成表の行を格納するために確保されている領域の割合(パーセント)を指定します。PCTTHRESHOLDは、主キーを保持するために十分な大きさである必要があります。指定したしきい値を超える列から始まる行の後続列はすべて、オーバーフロー・セグメントに格納されます。PCTTHRESHOLDは1から50の値を取る必要があります。PCTTHRESHOLDを指定しない場合のデフォルト値は50です。

PCTTHRESHOLDの制限事項: PCTTHRESHOLDは、索引構成表の個別パーティションに対して指定できません。

mapping_table_clauses MAPPING TABLEを指定すると、ローカルから物理ROWIDへのマッピングを作成してヒープ構成表に格納できます。このマッピングは、索引構成表のビットマップ索引の作成に必要です。索引構成表がパーティション化されている場合、マッピング表もパーティション化され、マッピング表のパーティションの名前および物理属性は実表のパーティションと同じになります。

マッピング表またはマッピング表のパーティションは、親である索引構成表またはパーティションと同じ表領域に作成されます。マッピング表またはそのパーティションの記憶特性に対して、問合せ、DML操作または変更は実行できません。

prefix_compression prefix_compression句を使用すると、索引構成表の接頭辞圧縮を使用可能または使用禁止にできます。

- COMPRESSを指定して、索引構成表に対してキー圧縮とも呼ばれる接頭辞圧縮を有効化します。これによって、索引構成表の主キー列の値が重複しなくなります。integerを使用して、接頭辞の長さ(圧縮する接頭辞列数)を指定します。
接頭辞の長さの有効範囲は、1から(主キー列数-1)までです。デフォルトでは(主キー列数-1)になります。

- NOCOMPRESSを指定すると、索引構成表での接頭辞圧縮が使用禁止になります。これはデフォルトです。

索引構成表の接頭辞圧縮の制限事項: パーティション・レベルでは、COMPRESSを指定できますが、integerで接頭辞の長さを指定できません。

index_org_overflow_clause index_org_overflow_clauseを指定すると、指定されたしきい値を超える索引構成表のデータ行を、この句で指定したデータ・セグメントに格納できます。

- 索引構成表を作成した場合、各列の最大サイズが評価され、行の最大値が計算されます。オーバーフロー・セグメントが必要で、OVERFLOWを指定していない場合は、エラーが発生しCREATE TABLE文は実行されません。このチェック機能によって、索引構成表に対する後続のDML操作が、オーバーフロー・セグメントがないために失敗することを回避できます。

- OVERFLOWキーワードの後の句に指定するすべての物理属性および記憶特性は、表のオーバーフロー・セグメントにのみ適用されます。索引構成表自体の物理属性と記憶特性、すべてのパーティションに対するデフォルト値、および各パーティションに対する値は、このキーワードの前に指定する必要があります。

- 索引構成表に1つ以上のLOB列が含まれる場合は、LOBが表内に格納できるほど小さい場合でも、OVERFLOWを指定しないと、表外に格納されます。

- 表がパーティション化されている場合、オーバーフロー・データ・セグメントが主キー索引セグメントと同一レベルでパーティション化されます。

INCLUDING column_name 索引構成表の行を索引部分とオーバーフロー部分に分割する列を指定します。主キー列は常に索引に格納されます。column_nameは、最後の主キー列でも主キー以外の列でもかまいません。column_nameに続くすべての主キー以外の列は、オーバーフロー・データ・セグメントに格納されます。

column_nameで行を分割しようとした場合に、行の索引部分のサイズが、PCTTHRESHOLDの指定値またはデフォルト値を超えると、PCTTHRESHOLDの値に基づいて、行は切り離されます。

INCLUDING句の制限事項: 索引構成表の個々のパーティションにこの句は指定できません。

external_table_clause

external_table_clauseを使用すると、外部表を作成できます。外部表は読取り専用の表であり、そのメタデータはデータベースに格納されますが、データはデータベースの外部に格納されます。特に重要な機能として、外部表では、最初にデータベースにデータをロードしなくても、データを問い合せることができます。

関連項目:
外部表の使用方法の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』、『Oracle Database管理者ガイド』および『Oracle Databaseユーティリティ』を参照してください。

外部表の場合、データベースにデータが存在しないため、表の作成時に通常は使用可能な句の小規模のサブセットを定義します。

- relational_properties句内では、columnおよびdatatypeのみを指定できます。

- physical_properties_clause内では、表の構成(ORGANIZATION EXTERNAL external_table_clause)のみを指定できます。

- table_properties句内では、parallel_clauseのみを指定できます。parallel_clauseを使用すると、外部データに対する後続の問合せおよび外部表を移入する後続の操作をパラレル化できます。

- 外部表は、作成時にAS subquery句を使用することによって移入できます。

同じCREATE TABLE文で他の句を指定することはできません。

関連項目:

- 「外部表の例:」

- 列の投影のデフォルトのプロパティを変更することによる影響の詳細は、「ALTER TABLE」の「PROJECT COLUMN句」を参照してください。

外部表の制限事項: 外部表には、次の制限事項があります。

- 外部表を一時表にすることはできません。

- 外部表には制約を指定できません。

- 外部表に索引を作成することはできません。

- 外部表には、仮想列またはINVISIBLEの列を格納できません。

- 外部表にオブジェクト型、VARRAYまたはLONG列を含めることはできません。ただし、内部データベース表のVARRAYまたはLONGデータを外部表のLOB列に移入することはできます。

TYPE TYPE access_driver_typeを指定すると、外部表のアクセス・ドライバを指定できます。アクセス・ドライバは、データベースに対する外部データを解析するAPIです。Oracle Databaseでは、ORACLE_LOADERおよびORACLE_DATAPUMPの2つのアクセス・ドライバが提供されています。TYPEを指定しない場合、デフォルトのアクセス・ドライバORACLE_LOADERが使用されます。AS subquery句を指定して1つのOracle Databaseからデータをアンロードし、同じ、または異なるOracle Databaseに再ロードする場合、ORACLE_DATAPUMPアクセス・ドライバを指定する必要があります。

関連項目:
ORACLE_LOADERおよびORACLE_DATAPUMPアクセス・ドライバの詳細は、『Oracle Databaseユーティリティ』を参照してください。

DEFAULT DIRECTORY DEFAULT DIRECTORYを指定すると、外部データソースが存在するファイル・システムのディレクトリに対応するデフォルト・ディレクトリ・オブジェクトを1つ指定できます。デフォルト・ディレクトリは、アクセス・ドライバから使用でき、エラー・ログなどの補助ファイルを格納できます。

ACCESS PARAMETERS オプションのACCESS PARAMETERS句を指定すると、その外部表用の特定のアクセス・ドライバのパラメータに値を割り当てることができます。

- opaque_format_spec句は、ORACLE_LOADERおよびORACLE_DATAPUMPアクセス・ドライバのすべてのアクセス・パラメータを指定します。これらのパラメータの詳細は、『Oracle Databaseユーティリティ』を参照してください。
opaque_format_specで指定するフィールド名は、表定義の列と一致している必要があります。表定義の列と一致していないopaque_format_specのフィールドは無視されます。

- USING CLOB subqueryを指定すると、副問合せを使用して、パラメータおよびその値を導出できます。副問合せには、集合演算子またはORDER BY句を含めません。CLOBデータ型の1つの項目を含む単一行を戻します。

opaque_format_specでパラメータを指定するか、副問合せを使用してそれらを導出するかに関係なく、この句は解析されません。この情報は、外部データに照らしてアクセス・ドライバによって解析されます。

LOCATION LOCATION句を使用すると、1つ以上の外部データソースを指定できます。通常、location_specifierはファイルですが、ファイル以外も指定できます。Oracle Databaseでは、この句は解析されません。この情報は、外部データに照らしてアクセス・ドライバによって解析されます。

REJECT LIMIT REJECT LIMIT句を指定すると、Oracle Databaseエラーが戻され、問合せが異常終了するまでに、外部データの問合せで許容される変換エラーの数を指定できます。デフォルト値は0(ゼロ)です。

CLUSTER句

CLUSTER句は、表がclusterの一部であることを示します。この句で指定する各列は、クラスタの各列に対応する表の列となります。一般に、表のクラスタ列は、主キーまたは主キーの一部を構成する1つ以上の列です。詳細は、「CREATE CLUSTER」を参照してください。

クラスタ・キー内の列ごとに表から1つの列を指定します。列は、名前ではなく位置で一致させます。

クラスタ表はクラスタの領域割当てを使用します。このため、PCTFREE、PCTUSEDまたはINITRANSパラメータ、TABLESPACE句またはstorage_clauseをCLUSTER句とともに使用しないでください。

クラスタ表の制限事項: クラスタ表には、次の制限事項があります。

- オブジェクト表、およびLOB列またはOracleが提供するAny*型の列を含む表はクラスタの一部にはできません。

- クラスタの一部である表にparallel_clause、CACHEまたはNOCACHEは指定できません。

- クラスタが同じROWDEPENDENCIESまたはNOROWDEPENDENCIES設定で作成されていないかぎり、CLUSTERをROWDEPENDENCIESまたはNOROWDEPENDENCIESとともに指定することはできません。

- クラスタ表には、INVISIBLEの列を格納できません。

table_properties

table_propertiesを使用すると、表の特性をさらに詳しく定義できます。

column_properties

column_properties句を使用すると、列の記憶域属性を指定できます。

object_type_col_properties

object_type_col_propertiesを使用すると、オブジェクト列、属性、あるいは列または属性の集合要素の記憶特性を指定できます。

column columnには、オブジェクト列または属性を指定します。

substitutable_column_clause substitutable_column_clauseを使用すると、同じ階層のオブジェクト列または属性が互いに置換可能かどうかを指定できます。列が特定の型であるか、サブタイプのインスタンスを含むものであるか、またはその両方を指定できます。

- ELEMENTを指定すると、コレクション列または属性の要素型が宣言した型のサブタイプに制約されます。

- IS OF [TYPE] (ONLY type)句を指定すると、オブジェクト列の型が宣言した型のサブタイプに制約されます。

- NOT SUBSTITUTABLE AT ALL LEVELSを指定すると、オブジェクト列がサブタイプに対応するインスタンスを持つことはできないことを指定できます。また、置換は、埋込みオブジェクト属性、埋込みのネストした表およびVARRAYの要素には使用できません。デフォルトは、SUBSTITUTABLE AT ALL LEVELSです。

substitutable_column_clauseの制限事項: この句には、次の制限事項があります。

- この句は、オブジェクト列の属性には指定できません。ただし、オブジェクト表自体の代替性が設定されていない場合、リレーショナル表におけるオブジェクト型の列およびオブジェクト表のオブジェクト列に対してこの句を指定できます。

- コレクション型の列の場合、この句で指定できる部分は[NOT] SUBSTITUTABLE AT ALL LEVELSのみです。

LOB_storage_clause

LOB_storage_clauseを使用すると、LOBデータ・セグメントの記憶域属性を指定できます。STORE ASキーワードの後に、1つ以上の句を指定する必要があります。複数の句を指定する場合は、構文図で上から下に表示されている順に指定する必要があります。

非パーティション表の場合、この句は、表のLOBデータ・セグメントの記憶域属性を指定します。

パーティション表の場合、この句は指定した位置に応じて実装されます。

- 表レベルで指定されたパーティション表の場合(パーティション句とともにphysical_properties句で指定した場合)、この句は、各パーティションまたはサブパーティションに関連付けられたLOBデータ・セグメントに対するデフォルト記憶域属性を指定します。この記憶域属性は、パーティションまたはサブパーティション・レベルでLOB_storage_clauseによって上書きされないかぎり、すべてのパーティションまたはサブパーティションに適用されます。

- パーティション表の各パーティションの場合(table_partition_descriptionの一部として指定した場合)、この句は、そのパーティションのデータ・セグメントの記憶域属性、またはこのパーティションのサブパーティションのデフォルト記憶域属性を指定します。パーティション・レベルのLOB_storage_clauseは、表レベルのLOB_storage_clauseを上書きします。

- パーティション表の各サブパーティションの場合(subpartition_by_hashまたはsubpartition_by_listの一部として指定した場合)、この句は、サブパーティションのデータ・セグメントの記憶域属性を指定します。サブパーティション・レベルのLOB_storage_clauseは、パーティション・レベルおよび表レベルのLOB_storage_clausesを上書きします。

LOB_storage_clauseの制限事項: サブパーティションでLOB_storage_clauseを指定する場合は、TABLESPACE句のみが許可されています。

関連項目:

- サイズがGBになるLOBを作成する場合のガイドラインを含むLOBの詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。

- 「表の作成: LOB列の例」

LOB_item

表の表領域および記憶特性とは異なる表領域および記憶特性を明示的に定義する場合に、そのLOB列名またはLOBオブジェクト属性を指定します。作成する各LOB_itemに、システム管理された索引が自動的に作成されます。

SECUREFILE | BASICFILE

この句を使用して、LOB記憶域のタイプに、高パフォーマンスのLOB (SecureFiles)または従来のLOB (BasicFiles)を指定します。

関連項目:
SecureFiles LOBの詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。

注意:
LOBの記憶域の種類を変換することはできません。かわりに、オンライン再定義またはパーティション交換を使用して、SecureFileまたはBasicFileを移行する必要があります。

LOB_segname

LOBデータ・セグメントの名前を指定します。LOB_itemが複数指定されている場合は、LOB_segnameを使用できません。

LOB_storage_parameters

LOB_storage_parameters句を使用すると、様々なLOB記憶域の要素を指定できます。

TABLESPACE句 この句を使用すると、LOBデータが格納される表領域を指定します。

storage_clause storage_clauseを使用すると、LOBセグメント記憶域の様々な側面を指定できます。LOB記憶域に関して特に重要なのは、storage_clauseのMAXSIZE句です。これは、LOB_parametersのLOB_retention_clauseと組み合せて使用できます。詳細は、「storage_clause」を参照してください。

LOB_parameters

LOB記憶域にSecureFileを使用する場合、いくつかのLOB_parametersは不要になります。PCTVERSIONおよびFREEPOOLSパラメータは、BasicFiles LOB記憶域を使用する場合にのみ有効かつ有用です。

ENABLE STORAGE IN ROW  行の記憶域を使用可能にした場合、LOB値の長さが、約4000バイトからシステム制御情報分を引いた長さより小さければ、LOB値が表内に格納されます。これはデフォルトです。

行の記憶域を使用可能にする場合の制限事項: index_org_table_clauseでOVERFLOWセグメントを指定しないかぎり、索引構成表に対して、このパラメータを指定できません。

DISABLE STORAGE IN ROW  行の記憶域を使用禁止にした場合、LOB値の長さに関係なく、LOB値は表外(行の外側)に格納されます。

LOB値が格納されている場所にかかわらず、LOBロケータは、常に表内に格納されます。STORAGE IN ROWの値は、一度設定すると、表を移動しないかぎり、変更できません。詳細は、「ALTER TABLE」の「move_table_clause」を参照してください。

CHUNK integer  LOBの操作用に割り当てるバイト数を指定します。integerにデータベースのブロック・サイズの倍数を指定しなかった場合、自動的に次に大きい倍数(バイト単位)に切り上げられます。たとえば、データベースのブロック・サイズが2048バイトのときにintegerに2050を指定すると、4096バイト(2ブロック)が割り当てられます。最大値は32768(32KB)で、これがOracle Databaseのブロック・サイズとして使用できる最も大きな値です。デフォルトのCHUNKサイズは、Oracleでの1データベース・ブロックです。

CHUNKの値は、NEXTの値(デフォルト値またはstorage_clauseで指定された値)以下である必要があります。CHUNKの値がNEXTの値を超えると、エラーが戻ります。CHUNKの値は、一度設定すると変更できません。

PCTVERSION integer

LOBの記憶域全体のうち、旧バージョンのLOBの保持に使用される割合(パーセント)の最大値を指定します。データベースが手動UNDOモードで実行されている場合、デフォルト値は10です。この場合、LOB記憶域全体の10%が消費されるまで、旧バージョンのLOBデータは上書きされません。

データベースが手動UNDOモードと自動UNDOモードのどちらで稼働されていても、PCTVERSIONパラメータを指定できます。PCTVERSIONは、手動UNDOモードのデフォルト値です。RETENTIONは、自動UNDOモードのデフォルト値です。PCTVERSIONとRETENTIONの両方は指定できません。

この句は、SECUREFILEを指定した場合は無効です。SECUREFILEとPCTVERSIONの両方を指定した場合、PCTVERSIONパラメータは特に警告もなく無視されます。

LOB_retention_clause  この句を使用すると、LOBセグメントを保持する用途に、フラッシュバック、読取り一貫性、その両方、またはどちらでもないを指定できます。

データベースが自動UNDOモードで稼働している場合にのみ、RETENTIONパラメータを使用できます。データベースに保持されるコミット済のUNDOデータの量は、UNDO_RETENTION初期化パラメータの値を使用して決定されます。自動UNDOモードでは、PCTVERSIONを指定しないかぎり、RETENTIONがデフォルト値となります。PCTVERSIONとRETENTIONの両方は指定できません。

SecureFileを使用している場合にのみ、RETENTIONの後にオプションの設定を指定できます。LOB_storage_clauseのSECUREFILEパラメータは、データベースがSecureFileを使用して記憶域を動的に管理することを示します。データベースのUNDOモードなどの要因が考慮されます。

- MAX: LOBセグメントがMAXSIZEに達するまでUNDOを保持するように指定します。MAXを指定する場合は、storage_clauseでMAXSIZE句も指定する必要があります。

- MIN: データベースがフラッシュバック・モードで、特定のLOBセグメントのUNDO保存期間をn秒に制限する場合に指定します。

- AUTO: 読取り一貫性に必要十分なUNDOを保持します。

- NONE: 読取り一貫性またはフラッシュバックのどちらにもUNDOが必要ない場合に指定します。

RETENTIONパラメータを指定しないか、オプションの設定なしでRETENTIONを指定すると、RETENTIONがDEFAULTに設定されます。この機能はAUTOと同等です。

関連項目:

- SecureFileを使用して簡略化されたLOB記憶域の詳細は、「CREATE TABLE」の「LOB_storage_parameters」句を参照してください。

- SecureFileの使用の詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。

- データベースをフラッシュバック・モードにする方法については、「ALTER DATABASE」の「flashback_mode_clause」を参照してください。

- 「UNDO表領域の作成例:」

FREEPOOLS integer  LOBセグメントに対する空きリストのグループ数を指定します。通常、integerは、Oracle Real Application Clusters環境のインスタンス数です。単一インスタンス・データベースの場合、この値は1になります。

データベースが自動UNDOモードで稼働している場合にのみ、このパラメータを指定できます。自動UNDOモードでは、storage_clauseでFREELIST GROUPSパラメータを指定しないかぎり、FREEPOOLSがデフォルト値になります。FREEPOOLSとFREELIST GROUPSのどちらも指定しない場合、データベースが自動UNDO管理モードで稼働している場合はFREEPOOLS 1のデフォルト値が使用され、手動UNDO管理モードで稼働している場合はFREELIST GROUPS 1のデフォルト値が使用されます。

この句は、SECUREFILEを指定した場合は無効です。SECUREFILEとFREEPOOLSの両方を指定した場合、FREEPOOLSパラメータは特に警告もなく無視されます。

FREEPOOLSの制限事項: storage_clauseでは、FREEPOOLSおよびFREELIST GROUPSパラメータを指定できません。

LOB_deduplicate_clause  この句は、SecureFiles LOBに対してのみ有効です。LOB_deduplicate_clauseを使用すると、重複するLOBデータを除外する、LOBの重複の除外を有効または無効にできます。

DEDUPLICATEキーワードは、LOBの重複コピーを除外するようデータベースに対して指定します。セキュアなハッシュ索引を使用して重複を検出すると、同じ内容を持つLOBは単一のコピーに結合され、消費される記憶域が削減されて記憶域の管理が簡素化されます。

この句を指定しない場合、デフォルトでは、LOBの重複除外は無効です。

この句は、LOBセグメント全体に対して、LOBの重複除外を実装します。個々のLOBに対して重複除外を有効または無効にするには、DBMS_LOB.SETOPTIONSプロシージャを使用します。

関連項目:
LOBの重複除外の詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。DBMS_LOBパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

LOB_compression_clause  この句は、BasicFiles LOBではなく、SecureFiles LOBに対してのみ有効です。LOB_compression_clauseを使用すると、サーバー側のLOB圧縮を有効または無効にすることをデータベースに指定できます。サーバー側の圧縮されたLOBセグメントで、ランダムな読取り/書込みアクセスが可能です。LOB圧縮は、表の圧縮または索引の圧縮からは独立しています。この句を指定しない場合、NOCOMPRESSがデフォルトになります。

HIGH、MEDIUMまたはLOWを指定して、圧縮の程度を変更できます。圧縮の程度をHIGHにすると、待機時間はMEDIUMよりも長くなりますが、圧縮率は高くなります。LOWを指定すると、HIGHまたはMEDIUMのいずれの場合よりも圧縮率がわずかに低くなるものの、解凍および圧縮の処理速度が大幅に向上します。このオプションのパラメータを指定しない場合、MEDIUMがデフォルトになります。

この句は、LOBセグメント全体のサーバー側のLOB圧縮を実装します。個々のLOBの圧縮を有効または無効にするには、DBMS_LOB.SETOPTIONSプロシージャを使用します。

関連項目:
サーバー側のLOB記憶域の詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。提供されているパッケージUTL_COMPRESSを使用したクライアント側のLOB圧縮およびDBMS_LOBパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

ENCRYPT | DECRYPT  これらの句は、LOB記憶域にSecureFileを使用しているLOBに対してのみ有効です。ENCRYPTを指定すると、列内のすべてのLOBを暗号化できます。DECRYPTを指定すると、LOBをクリアテキストで保持できます。この句を指定しない場合、DECRYPTがデフォルトになります。

この句の概要は、「encryption_spec」を参照してください。LOB列に適用するとencryption_specは個々のLOB列固有になるため、他のLOB列や他の非LOB列とは、暗号化アルゴリズムが異なる場合があります。column_definitionの一部としてencryption_specを使用すると、LOB列全体を暗号化できます。table_partition_descriptionでLOB_storage_clauseの一部としてencryption_specを使用すると、LOBパーティションを暗号化できます。

LOBのencryption_specの制限事項: LOB暗号化に対しては、encryption_specのSALTまたはNO SALT句を指定できません。

関連項目:
LOB暗号化の詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。DBMS_LOBパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

CACHE | NOCACHE | CACHE READS  これらの句の詳細は、「CACHE | NOCACHE | CACHE READS」を参照してください。

LOB_partition_storage

LOB_partition_storage句を使用すると、各パーティションに、別のLOB_storage_clauseまたはvarray_col_propertiesを指定できます。パーティションは、その位置の順に指定してください。パーティションの順番を確認するには、USER_IND_PARTITIONSビューのPARTITION_NAMEおよびPARTITION_POSITION列を問い合せます。

特定のパーティションに、LOB_storage_clauseまたはvarray_col_properties句を指定しなかった場合、表レベルでLOB項目に指定された記憶特性が設定されます。表のレベルでもLOB項目に記憶特性を指定しなかった場合、LOBデータ・パーティションは、対応する表パーティションと同じ表領域に格納されます。

LOB_partition_storageの制限事項: LOB_partition_storageには、次の制限事項があります。

- LOB_storage_clauseのLOB_parametersでは、encryption_specを指定できません。パーティションおよびサブパーティションに対する暗号化アルゴリズムの指定は無効であるためです。

- ハッシュ・パーティションおよびすべてのタイプのサブパーティションには、TABLESPACE句のみ指定できます。

varray_col_properties

varray_col_propertiesを使用すると、VARRAY型のデータが格納されるLOBに対して、別々の記憶特性を指定できます。varray_itemがマルチレベル・コレクションの場合、varray_item内にネストされたすべてのコレクション項目は、常にvarray_itemと同じLOBに格納されます。

- 非パーティション表の場合(パーティション句なしでphysical_properties句に指定した場合)、この句は、VARRAYのLOBデータ・セグメントの記憶域属性を指定します。

- 表レベルで指定されたパーティション表の場合(パーティション句とともにphysical_properties句で指定した場合)、この句は、各パーティション(またはサブパーティション)に対応付けられたVARRAYのLOBデータ・セグメントに対するデフォルト記憶域属性を指定します。

- パーティション表の各パーティションの場合(table_partition_descriptionの一部として指定した場合)、この句は、そのパーティションのVARRAYのLOBデータ・セグメントの記憶域属性、またはこのパーティションのサブパーティションにあるVARRAYのLOBデータ・セグメントのデフォルト記憶域属性を指定します。パーティション・レベルのvarray_col_propertiesは、表レベルのvarray_col_propertiesを上書きします。

- パーティション表の各サブパーティションの場合(subpartition_by_hashまたはsubpartition_by_listの一部として指定した場合)、この句は、このサブパーティションのVARRAYデータ・セグメントの記憶域属性を指定します。サブパーティション・レベルのvarray_col_propertiesは、パーティション・レベルおよび表レベルのvarray_col_propertiesを上書きします。

STORE AS [SECUREFILE | BASICFILE] LOB句 STORE AS LOBを指定したときに実行される処理は、次のとおりです。

- VARRAYの最大サイズが約4000バイト未満で、行の記憶域を使用禁止にしていない場合、VARRAYは表内LOBに格納されます。

- VARRAYの最大サイズが約4000バイトを超える場合または行の記憶域を使用禁止にしている場合、VARRAYは表外LOBとして格納されます。

STORE AS LOBを指定しなかった場合、記憶域は、VARRAY列の実際のサイズではなく、VARRAYの最大サイズに基づいて決定されます。VARRAYの最大サイズは、要素数×要素サイズ+システム制御情報分の容量です。この句を指定しない場合、次のようになります。

- VARRAYの最大サイズが約4000バイト未満の場合、VARRAYはLOBとしてではなく表内データとして格納されます。

- 最大サイズが約4000バイトを超える場合、VARRAYは常にLOBとして格納されます。

- 実際のサイズが約4000バイト未満の場合、VARRAYは表内LOBとして格納されます。

- 実際のサイズが約4000バイトを超える場合、VARRAYは表外LOBとして格納されます。これはその他のLOB列でも同様です。

substitutable_column_clause substitutable_column_clauseの動作は、「object_type_col_properties」の場合と同じです。

関連項目:
「置換可能な表および列のサンプル:」

VARRAY列のプロパティの制限事項  この句は、時間隔パーティション表に対して指定することはできません。

nested_table_col_properties

nested_table_col_propertiesを使用すると、ネストした表に対して別々の記憶特性を指定し、そのネストした表を索引構成表として定義できるようになります。この句で特に明示的に指定しないかぎり、記憶表は次のとおり作成されます。

- 非パーティション表の場合、記憶表は親表と同じスキーマおよび同じ表領域内に作成されます。

- パーティション表の場合、記憶表はスキーマのデフォルトの表領域内に作成されます。デフォルトでは、ネストした表はパーティション実表でパーティション化されます。

- どちらの場合も、記憶表ではデフォルトの記憶特性が使用され、この表の作成の基になった列のネストした表の値が格納されます。

ネストした表の型を持つ列または列属性付きで表を作成する場合は、この句を挿入する必要があります。nested_table_col_properties句内で、親表に対する場合と同じ働きをする句については、ここでは説明しません。

nested_item 型がネストした表である列、またはその表のオブジェクト型の最上位の属性の名前を指定します。

COLUMN_VALUE ネストした表がマルチレベル・コレクションの場合、内部のネストした表またはVARRAYには名前が割り当てられていない場合があります。この場合、nested_item名のかわりにCOLUMN_VALUEを指定します。

関連項目:
nested_itemおよびCOLUMN_VALUEの使用例は、「表の作成: マルチレベル・コレクションの例」を参照してください。

LOCAL | GLOBAL LOCALを指定すると、ネストした表を実表と同一レベルでパーティション化できます。これはデフォルトです。ネストしたパーティション表のローカル・パーティション索引は自動的に作成されます。

ネストした表が、パーティション実表のネストした非パーティション表であることを示すには、GLOBALを指定します。

storage_table nested_itemの行を含む表の名前を指定します。

storage_tableに対して問合せやDML文を直接実行することはできませんが、その記憶特性は、ALTER TABLE文で名前を指定することによって変更できます。

関連項目:
ネストした表の列に対する記憶特性の変更方法については、「ALTER TABLE」を参照してください。

RETURN [AS] 問合せの結果として何を戻り値とするかを指定します。

- VALUEは、ネストした表自体のコピーを戻します。

- LOCATORは、ネストした表のコピーに対するコレクション・ロケータを戻します。
ロケータの有効範囲は1つのセッションであり、複数のセッションにわたって使用できません。LOBロケータとは異なり、コレクション・ロケータはコレクション・インスタンスの変更に使用できません。

segment_attributes_clauseまたはLOB_storage_clauseを指定しない場合、ネストした表はヒープ構成され、デフォルトの記憶特性で作成されます。

ネストした表の列のプロパティの制限事項: ネストした表の列のプロパティには、次の制限事項があります。

- この句は、一時表には指定できません。

- この句は、時間隔パーティション表には指定できません。

- oid_clauseは指定できません。

- 作成時、object_propertiesを使用して、out_of_line_ref_constraint、inline_ref_constraintまたはネストした表の属性に対する外部キー制約を指定することはできません。ただし、ALTER TABLEを使用してネストした表を修正し、これらの制約を追加できます。

関連項目:

- ネストした表の列に対する記憶特性の変更方法については、「ALTER TABLE」を参照してください。

- 「ネストした表の例:」および「表の作成: マルチレベル・コレクションの例」を参照してください。

XMLType_column_properties

XMLType_column_propertiesを指定すると、XMLTYPE列に対する記憶域属性を指定できます。

XMLType_storage XMLTypeデータは、バイナリXML、CLOBまたはオブジェクト・リレーショナル列に格納できます。

- BINARY XMLを指定すると、縮小されたバイナリXML書式でXMLデータを格納できます。
指定したLOBパラメータは、バイナリXMLエンコード値を格納するために作成された、基礎となるBLOB列に適用されます。

以前のリリースでは、バイナリXMLデータはデフォルトでBasicFiles LOBに格納されます。Oracle Database 11gリリース2 (11.2.0.2)以降では、COMPATIBLE初期化パラメータが11.2以上の場合にBASICFILEまたはSECUREFILEを指定しないと、バイナリXMLデータは可能なかぎりSecureFiles LOBに格納されます。SecureFiles LOB記憶域を使用できない場合、バイナリXMLデータはBasicFiles LOBに格納されます。これは、次のいずれかの場合に発生します。

- XMLType表の表領域で、自動セグメント領域管理が使用されていない。

- init.oraファイルの設定により、SecureFiles LOB記憶域が使用できない。例については、『Oracle Databaseリファレンス』のDB_SECUREFILEパラメータを参照してください。

- CLOBを指定すると、CLOB列にXMLTypeデータを格納できます。CLOB列にデータを格納すると、元の内容が保持されるため、検索時間が短縮されます。
LOB記憶域を定義する場合、LOBパラメータとXMLSchema_spec句のいずれかを指定できますが、両方は指定できません。XMLSchema_spec句を指定すると、特定のスキーマ・ベースのXMLインスタンスに表や列を制限できます。

この句でBASICFILEまたはSECUREFILEを指定しないと、CLOB列はBasicFiles LOBに格納されます。

注意:
XMLTypeデータをCLOB列に格納しないことをお薦めします。XMLTypeのCLOB記憶域は非推奨になっています。かわりにXMLTypeのバイナリXML記憶域を使用してください。

- OBJECT RELATIONALを指定すると、オブジェクト・リレーショナル列にXMLTypeデータを格納できます。データ・オブジェクトをリレーショナルに格納すると、リレーショナル列に索引を定義できるため、問合せのパフォーマンスが向上します。
オブジェクト・リレーショナル形式での格納を指定する場合、XMLSchema_spec句も指定する必要があります。

ALL VARRAYS AS句を使用すると、XMLType列にすべてのVARRAYを格納できます。

以前のリリースでは、XMLTypeデータはデフォルトでBasicFiles LOBのCLOB列に格納されます。Oracle Database 11gリリース2 (11.2.0.2)以降では、COMPATIBLE初期化パラメータが11.2以上の場合にXMLType_storage句を指定しないと、XMLTypeデータはSecureFiles LOBのバイナリXML列に格納されます。SecureFiles LOB記憶域を使用できない場合は、BasicFiles LOBのバイナリXML列に格納されます。

関連項目:
SecureFiles LOBの詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。

XMLSchema_spec

この句のセマンティクスの詳細は、「XMLSchema_spec」を参照してください。

関連項目:

- LOB_segnameおよびLOB_parameters句の詳細は、「LOB_storage_clause」を参照してください。

- オブジェクト・リレーショナル表におけるXMLType列の例は、「XMLType列の例:」を参照してください。XMLスキーマの作成例は、「SQL文でのXMLの使用方法」を参照してください。

- XMLType列と表およびXMLスキーマの作成の詳細は、『Oracle XML DB開発者ガイド』を参照してください。

- DBMS_XMLSCHEMAパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

XMLType_virtual_columns

この句は、バイナリXML記憶域のXMLType表に対してのみ有効です。この記憶域は、XMLType_storage句で指定します。VIRTUAL COLUMNS句を指定して、仮想列を定義します。仮想列は、ファンクション索引または制約の定義で使用できます。そのような仮想列には表の作成時には制約を定義できませんが、その後、ALTER TABLE文を使用して制約を列に追加できます。

関連項目:
XML環境でこの句を使用する方法の例は、『Oracle XML DB開発者ガイド』を参照してください。

indexing_clause

indexing_clauseは、パーティション表に対してのみ有効です。この句を使用すると、表、表パーティション、または表サブパーティションに対して索引付けプロパティを設定できます。

- INDEXING ONを指定すると、索引付けプロパティをONに設定できます。これはデフォルトです。

- INDEXING OFFを指定すると、索引付けプロパティをOFFに設定できます。

この索引付けプロパティにより、表のパーティションとサブパーティションが、表の部分索引に含まれるかどうかが決まります。

- 単純なパーティション表の場合、索引付けプロパティがONのパーティションは、その表の部分索引に含まれます。索引付けプロパティがOFFのパーティションは除外されます。

- コンポジット・パーティション表の場合、索引付けプロパティがONのサブパーティションは、その表の部分索引に含まれます。索引付けプロパティがOFFのサブパーティションは除外されます。

indexing_clauseは、表レベル、パーティション・レベル、またはサブパーティション・レベルで指定できます。indexing_clauseを表レベルでtable_properties句内に指定すると、その表のデフォルトの索引付けプロパティを設定することになります。データベースが自動的に作成する時間隔パーティションは、常に表のデフォルトの索引付けプロパティを継承します。その他のタイプのパーティションおよびサブパーティションは、次のようにデフォルトの索引付けプロパティを継承します。

- 単純なパーティション表の場合、パーティションはその表のデフォルトの索引付けプロパティを継承します。この動作は、次のように、パーティションごとにindexing_clauseを指定することで上書きできます。

- レンジ・パーティションの場合は、range_partitions句のtable_partition_descriptionで指定します。

- ハッシュ・パーティションの場合は、hash_partitions句のindividual_hash_partitions句で指定します。

- リスト・パーティションの場合は、list_partitions句のtable_partition_descriptionで指定します。

- 参照パーティションの場合は、reference_partitioning句のreference_partition_desc句のtable_partition_descriptionで指定します。

- システム・パーティションの場合は、system_partitioning句のreference_partition_desc句のtable_partition_descriptionで指定します。

- コンポジット・パーティション表の場合、サブパーティションはその表のデフォルトの索引付けプロパティを継承します。この動作は、パーティションまたはサブパーティションごとにindexing_clauseを指定することで上書きできます。
次のように、パーティションにindexing_clauseを指定すると、サブパーティションはそのパーティションの索引付けプロパティを継承します。

- コンポジット・レンジ・パーティションの場合は、composite_range_partitions句のtable_partition_descriptionで指定します。

- コンポジット・リスト・パーティションの場合は、composite_list_partitions句のtable_partition_descriptionで指定します。

- コンポジット・ハッシュ・パーティションの場合は、composite_hash_partitions句のindividual_hash_partitions句で指定します。

サブパーティションの索引付けプロパティは、次のように、そのサブパーティションにindexing_clauseを指定することで設定できます。

- レンジ・サブパーティションの場合は、composite_range_partitions句のrange_subpartition_desc句で指定します。

- リスト・サブパーティションの場合は、composite_list_partitions句のlist_subpartition_desc句で指定します。

- ハッシュ・サブパーティションの場合は、composite_hash_partitions句のindividual_hash_subparts句で指定します。

関連項目:
表、表パーティション、または表サブパーティションの索引付けプロパティを確認する方法の詳細は、『Oracle Databaseリファレンス』を参照してください。

- 表のデフォルトの索引付けプロパティを確認するには、*_PART_TABLESビューのDEF_INDEXING列を問い合せます。

- 表パーティションの索引付けプロパティを確認するには、*_TAB_PARTITIONSビューのINDEXING列を問い合せます。

- 表サブパーティションの索引付けプロパティを確認するには、*_TAB_SUBPARTITIONSビューのINDEXING列を問い合せます。

indexing_clauseの制限事項: indexing_clauseには、次の制限事項が適用されます。

- indexing_clauseは、非パーティション表には指定できません。

- indexing_clauseは、索引構成表には指定できません。

関連項目:
部分索引の詳細は、CREATE INDEXの「partial_index_clause」を参照してください。

table_partitioning_clauses

table_partitioning_clausesを使用すると、パーティション表を作成できます。

一般的なパーティション化の注意事項: すべてのタイプのパーティション化には、次の注意事項があります。

- 指定できるパーティションとサブパーティションの合計は1024K-1です。

- パーティションが1つのみのパーティション表も作成できます。パーティションが1つの表は、非パーティション表とは異なります。たとえば、非パーティション表にはパーティションを追加できません。

- すべての表とLOBパーティションおよびすべての表とLOBサブパーティションに名前を指定できますが、必須ではありません。名前を省略すると、次のように名前が生成されます。

- パーティション名を省略すると、SYS_Pnの形式で名前が生成されます。LOBデータおよびLOB索引パーティションに対するシステム生成名は、それぞれSYS_LOB_PnおよびSYS_IL_Pnの形式をとります。

- subpartition_templateでサブパーティション名を指定すると、そのテンプレートで作成される各サブパーティションに対して、パーティション名とテンプレートのサブパーティション名を連結して名前が生成されます。LOBサブパーティションの場合、生成されるLOBサブパーティション名は、パーティション名とテンプレートのLOBセグメント名の連結です。どちらの場合も、連結の結果が30文字を超える場合は、エラーが戻されて文は失敗します。

- 個々のサブパーティションを指定するときにサブパーティション名を指定せず、subpartition_templateを指定していない場合、SYS_SUBPnという形式で名前が生成されます。LOBデータおよび索引サブパーティションに対する、対応するシステム生成名は、それぞれSYS_LOB_SUBPnおよびSYS_IL_SUBPnです。

- 表領域の記憶域は、CREATE TABLE文で、表セグメントとLOBセグメントの両方に対して様々なレベルで指定できます。表領域数は、パーティション数またはサブパーティション数と同じである必要はありません。パーティション数またはサブパーティション数が表領域数より多い場合は、表領域名が繰り返し使用されます。
データベースでは、表領域の記憶域を、次の順序で(優先度の高いものから順に)評価します。

- 個々の表サブパーティションまたはLOBサブパーティション・レベルで指定された表領域の記憶域が、最も優先度が高くなります。次に、subpartition_templateでパーティションまたはLOBに対して指定された記憶域です。

- 個々の表パーティションまたはLOBパーティション・レベルで指定された表領域の記憶域。ここで指定された記憶域パラメータは、subpartition_templateよりも優先します。

- 表に対して指定された表領域の記憶域

- ユーザーに対して指定されたデフォルトの表領域の記憶域

- デフォルトでは、ネストした表はパーティション実表でパーティション化されます。

一般的なパーティション化の制限事項: すべてのパーティション化には、次の制限事項があります。

- クラスタの一部である表は、パーティション化できません。

- ネストした表をパーティション化したり、索引構成表として定義されているVARRAYをパーティション化することはできません。

- LONGまたはLONG RAW列を含む表は、パーティション化できません。

ブロック・サイズが異なる表領域のパーティション化されたデータベース・エンティティの記憶域には、制限事項があります。これらの制限事項については、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

関連項目:
「パーティション化の例」

range_partitions

range_partitions句を使用すると、列リストの値の範囲で表をパーティション化できます。索引構成表の場合、列リストは表の主キー列のサブセットである必要があります。

column

行がどのパーティションに属するかを判断するために使用される、列の順序リストを指定します。これらの列は、パーティション化キーです。仮想列とINVISIBLEの列は、パーティション化キー列として指定できます。

INTERVAL句

この句を使用すると、表の時間隔パーティションを設定できます。時間隔パーティションは、数値範囲または日時期間に基づくパーティションです。表に挿入されたデータがすべてのレンジ・パーティションを超える場合に、指定されたレンジまたは期間のパーティションを自動的に作成することをデータベースに指定することによって、レンジ・パーティション化を拡張します。自動的に作成された各パーティションには、SYS_Pnの形式で名前が生成されます。自動的に生成されたパーティション名は一意で、ネームスペース規則に違反しないことが保証されます。

- exprには、有効な数値または期間式を指定します。

- オプションのSTORE IN句を使用して、時間隔パーティション・データが格納される1つ以上の表領域を指定できます。

- また、range_partitionsのPARTITION句を使用して、1つ以上のレンジ・パーティションを指定する必要があります。レンジ・パーティション・キーの値によって、遷移ポイントと呼ばれるレンジ・パーティションの上限が決まります。その遷移ポイントを超えるデータに対して時間隔パーティションが作成されます。

時間隔パーティション化の制限事項: INTERVAL句には、「一般的なパーティション化の制限事項:」および「レンジ・パーティション化の制限事項:」に示されている制限事項があります。次の追加の制限が適用されます。

- パーティション化キー列は1つのみ指定でき、NUMBER型、DATE型、FLOAT型またはTIMESTAMP型である必要があります。

- この句は索引構成表ではサポートされていません。

- この句は、ネストした表の列、VARRAY列またはXMLType列を含む表に対してはサポートされていません。

- 時間隔パーティションは、サブパーティション・レベルではサポートされていません。

- シリアル化可能トランザクションは、時間隔パーティションでは動作しません。セグメントが存在しない時間隔パーティション表のパーティションにデータを挿入しようとすると、エラーになります。

- VALUES句の場合:

- MAXVALUEは指定できません(無限)。指定すると、必要に応じてパーティションを自動追加するという目的に反するためです。

- パーティション化キー列にはNULL値を指定できません。

関連項目:
時間隔パーティションの詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

PARTITION partition

パーティション名を指定する際、partitionの名前は、スキーマ・オブジェクトのネーミング規則および「データベース・オブジェクトのネーミング規則」にある該当部分の記述に従って指定する必要があります。partitionを省略すると、「一般的なパーティション化の注意事項:」で説明されているように名前が生成されます。

range_values_clause

現行パーティションの上限(境界は含まない)を指定します。値リストは、range_partitions句の列リストに対応するリテラル値を含む順序リストです。値リスト内のリテラルのかわりに、キーワードMAXVALUEを使用できます。MAXVALUEには、常に他の値(NULLを含む)より高位にソートされる最大値を指定します。

パーティション境界の上限にMAXVALUE以外の値を指定した場合、表に暗黙の整合性制約が課せられます。

注意:
表がDATE列でパーティション化されている場合および日付書式で年の最初の2桁の数字が指定されていない場合、年の「YYYY」4文字書式マスクでTO_DATEファンクションを使用する必要があります。この句では、「RRRR」書式マスクはサポートしていません。日付書式は、NLS_TERRITORYによって暗黙的に決定され、NLS_DATE_FORMATによって明示的に決定されます。これらの初期化パラメータの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

関連項目:
パーティション・バウンドの詳細は、『Oracle Database概要』を参照してください。また、「レンジ・パーティション化の例:」を参照してください。

table_partition_description

table_partition_descriptionを使用すると、表の物理特性および記憶特性を定義できます。

deferred_segment_creation、segment_attributes_clause、table_compression、inmemory_clauseおよびilm_clause句の機能は、表全体のphysical_propertiesと同じです。

indexing_clauseを使用すると、レンジ、リスト、システムまたは参照の表パーティションに索引付けプロパティを設定できます。詳細は、 「indexing_clause」を参照してください。

prefix_compression句およびOVERFLOW句の機能は、index_org_table_clauseと同じです。

LOB_storage_clause LOB_storage_clauseを使用すると、このパーティションまたはこのパーティションの任意のレンジまたはリスト・サブパーティション内にある1つ以上のLOB項目に対してLOB記憶特性を指定できます。LOB項目にLOB_storage_clauseを指定しない場合、「一般的なパーティション化の注意事項:」で説明されているように、各LOBデータ・パーティションに対する名前が生成されます。

varray_col_properties varray_col_propertiesを使用すると、このパーティション、またはこのパーティションの任意のレンジまたはリスト・サブパーティション内にある1つ以上のVARRAY項目に対して記憶特性を指定できます。

nested_table_col_properties nested_table_col_propertiesを使用すると、このパーティション、またはこのパーティションの任意のレンジまたはリスト・サブパーティション内にある1つ以上のネストした表の記憶域表項目に記憶特性を指定できます。この句に指定した記憶特性は、表レベルで指定したすべての記憶域属性を上書きします。

partitioning_storage_clause

partitioning_storage_clauseを使用すると、ハッシュ・パーティションおよびレンジ、ハッシュおよびリスト・サブパーティションの記憶特性を指定できます。

partitioning_storage_clauseの制限事項: この句には、次の制限事項があります。

- OVERFLOW句は、索引構成パーティション表にのみ関連し、individual_hash_partitions句でのみ有効です。レンジ・パーティションやハッシュ・パーティションまたは任意のタイプのサブパーティションには有効ではありません。

- index_compression句のadvanced_index_compression句は指定できません。

- indexing_clauseのprefix_compression句は索引構成表のパーティションにのみ指定できます。COMPRESSまたはNOCOMPRESSを指定できますが、integerで接頭辞の長さを指定できません。

レンジ・パーティション化の制限事項: レンジ・パーティション化には、「一般的なパーティション化の制限事項:」に示されている制限事項があります。次の追加の制限が適用されます。

- 指定できるパーティション化キー列は16以下です。

- パーティション化キー列は、CHAR型、NCHAR型、VARCHAR2型、NVARCHAR2型、VARCHAR型、NUMBER型、FLOAT型、DATE型、TIMESTAMP型、TIMESTAMP WITH LOCAL TIMEZONE型またはRAW型である必要があります。

- VALUES句にNULLを指定することはできません。

list_partitions

list_partitions句を使用すると、columnのリテラル値のリストで表をパーティション化できます。リスト・パーティション化は、個々の行が固有のパーティションにマップする方法に関する制御に便利です。

list_values_clause 各パーティションのlist_values_clauseでは、1つ以上の値を割り当てる必要があります。複数のパーティションに同じ値(NULLを含む)を割り当てることはできません。リスト・パーティションは、順序付けされていません。

VALUES句のパーティション値にリテラルNULLを指定した場合、後続の問合せで、そのパーティション内のデータにアクセスするには、WHERE句で、比較条件ではなくIS NULL条件を使用する必要があります。

DEFAULTキーワードを指定すると、行の挿入先となるパーティションが作成されます。この行は、別のパーティションにはマップされません。このため、DEFAULTを指定できるのは1つのパーティションのみです。そのパーティションに対して、その他の値を指定することはできません。また、デフォルト・パーティションは、パーティションの中で最後に定義する必要があります。DEFAULTは、レンジ・パーティションでMAXVALUEを使用する場合と同様に使用します。

各パーティションの値のリストを構成する文字列は、最大4KBです。すべてのパーティションの値の総数を、64K-1以下に指定します。

リスト・パーティションのパーティション化キー列は、最大サイズが32,767バイトの拡張データ型列になることがあります。この場合、パーティションに指定する値のリストは、4Kバイトの制限を超過することがあります。この制限を回避するには、次のいずれかの方法を使用します。

- 4Kバイトの制限を超過する値に、DEFAULTパーティションを使用します。

- パーティション・キー列でハッシュ・ファンクション(STANDARD_HASHなど)を使用して、4Kバイトよりも短い一意の識別子を作成します。詳細は、「STANDARD_HASH」を参照してください。

関連項目:
拡張データ型の詳細は、「拡張データ型」を参照してください。

table_partition_description table_partition_descriptionの副次句の動作は、「table_partition_description」のレンジ・パーティションで説明した動作と同じです。

リスト・パーティション化の制限事項: リスト・パーティション化には、「一般的なパーティション化の制限事項:」に示されている制限事項があります。次の追加の制限が適用されます。

- パーティション化キー列は1つのみ指定できます。

- パーティション化キー列は、CHAR型、NCHAR型、VARCHAR2型、NVARCHAR2型、VARCHAR型、NUMBER型、FLOAT型、DATE型、TIMESTAMP型、TIMESTAMP WITH LOCAL TIMEZONE型またはRAW型である必要があります。

hash_partitions

hash_partitions句を使用すると、表がハッシュ方式でパーティション化されるように指定できます。列の値にパーティション化キーとして指定されたハッシュ・ファンクションを使用して、行がパーティションに割り当てられます。個々のハッシュ・パーティションを指定するか、または作成されるハッシュ・パーティションの数を指定できます。

column 行がどのパーティションに属するかを判断するために使用される、列の順序リストを指定します(パーティション化キー)。

individual_hash_partitions  この句を使用すると、個々のパーティションを名前で指定できます。

indexing_clauseを使用すると、ハッシュ・パーティションに索引付けプロパティを設定できます。詳細は、 「indexing_clause」を参照してください。

個々のハッシュ・パーティションを指定する場合の制限事項: partitioning_storage_clauseで指定できる句は、TABLESPACE句および表の圧縮のみです。

注意:
異なるキャラクタ・セットを使用してデータベースを使用しているか、使用する予定がある場合は、キャラクタ列を分割する際に注意してください。文字のソート順序は、すべてのキャラクタ・セットで同一ではありません。キャラクタ・セット・サポートの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

hash_partitions_by_quantity 個々のパーティションを定義するかわりに、ハッシュ・パーティションの数を指定します。この場合、SYS_Pnの形式でパーティション名が割り当てられます。STORE IN句を使用すると、ハッシュ・パーティション・データが格納される1つ以上の表領域を指定できます。表領域の数とパーティションの数が同じである必要はありません。パーティション数が表領域数より多い場合は、表領域名が繰り返し使用されます。

ハッシュ・パーティション化の両方の方法でロード・バランシングを最適化するには、2の累乗のパーティション数を指定します。個々のハッシュ・パーティションを指定する際は、partitioning_storage_clauseにTABLESPACEと表の圧縮の両方を指定できます。ハッシュ・パーティションを数で指定する場合は、TABLESPACEのみを指定できます。ハッシュ・パーティションは、その他のすべての属性を表レベルのデフォルトから継承します。

table_compression句の機能は、表の「table_properties」について説明されている機能と、ほぼ同じです。

prefix_compression句およびOVERFLOW句の機能は、index_org_table_clauseと同じです。

表レベルで指定された表領域の記憶域は、パーティション・レベルで指定された表領域の記憶域で上書きされ、パーティション・レベルで指定された表領域の記憶域は、サブパーティション・レベルで指定された表領域の記憶域で上書きされます。

individual_hash_partitions句に含まれるpartitioning_storage_clauseのTABLESPACE句は、作成される個々のパーティションのみについて、表領域の記憶域を決定します。hash_partitions_by_quantity句では、STORE IN句によって、表の作成時のパーティションの位置と、後から追加されるパーティションのデフォルトの格納場所が決定されます。

ハッシュ・パーティションを数で指定する場合の制限事項 index_compression句のadvanced_index_compression句は指定できません。

関連項目:
ハッシュ・パーティション化については、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

ハッシュ・パーティション化の制限事項: ハッシュ・パーティション化には、「一般的なパーティション化の制限事項:」に示されている制限事項があります。次の追加の制限が適用されます。

- 指定できるパーティション化キー列は16以下です。

- パーティション化キー列は、CHAR型、NCHAR型、VARCHAR2型、NVARCHAR2型、VARCHAR型、NUMBER型、FLOAT型、DATE型、TIMESTAMP型、TIMESTAMP WITH LOCAL TIMEZONE型またはRAW型である必要があります。

composite_range_partitions

composite_range_partitions句を使用すると、まず、表をレンジ・パーティション化し、次にそれらのパーティションをレンジ・サブパーティション化、ハッシュ・サブパーティション化またはリスト・サブパーティション化できます。

コンポジット・レンジ・パーティション化でのINTERVAL句のセマンティクスは、レンジ・パーティション化の場合と同じです。詳細は、「INTERVAL句」を参照してください。

subpartition_by_range、subpartition_by_hashまたはsubpartition_by_listでは、各コンポジット・レンジ・パーティションのサブパーティション化のタイプを指定できます。これらの句では、サブパーティション・テンプレートを指定できます。サブパーティション・テンプレートによって、この文の一部として作成されるサブパーティションまたは後で作成されるサブパーティションのデフォルトのサブパーティション特性が設定されます。

表のサブパーティション化のタイプ、およびオプションでサブパーティション・テンプレートを設定した後、1つ以上のレンジ・パーティションを定義する必要があります。

- 非コンポジット・レンジ・パーティションと同じ要件を持つrange_values_clauseを指定する必要があります。

- table_partition_descriptionを使用すると、各パーティションの物理特性および記憶特性を定義できます。

- range_partition_descで、range_subpartition_desc、list_subpartition_desc、individual_hash_subpartsまたはhash_subparts_by_quantityを使用して、パーティションの個々のサブパーティションの特性を指定します。これらの句で指定する値は、これらのサブパーティションについて、subpartition_templateで指定した値にかわるものです。

- ハッシュ・サブパーティション、リスト・サブパーティションまたはLOBサブパーティションに指定できる特性は、TABLESPACEおよびtable_compressionのみです。

コンポジット・レンジ・パーティション化の制限事項: サブパーティション化のタイプにかかわらず、コンポジット・レンジ・パーティションには次の制限事項があります。

- サブパーティション・レベルで指定できる物理属性は、TABLESPACEおよび表の圧縮のみです。

- コンポジット・パーティション化は、索引構成表に対して指定できません。そのため、コンポジット・パーティション表に対して、table_partition_descriptionのOVERFLOW句は無効です。

- XMLType列を含む表に対してはコンポジット・パーティション化を指定できません。

関連項目:
コンポジット・レンジ・パーティション化の例は、「コンポジット・パーティション表の例:」を参照してください。コンポジット・リスト・パーティション化の例は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

composite_list_partitions

composite_list_partitions句を使用すると、まず、表をリスト・パーティション化し、次にそれらのパーティションをレンジ・サブパーティション化、ハッシュ・サブパーティション化またはリスト・サブパーティション化できます。

subpartition_by_range、subpartition_by_hashまたはsubpartition_by_listでは、各コンポジット・リスト・パーティションのサブパーティション化のタイプを指定できます。これらの句では、サブパーティション・テンプレートを指定できます。サブパーティション・テンプレートによって、この文の一部として作成されるサブパーティションおよび後で作成されるサブパーティションのデフォルトのサブパーティション特性が設定されます。

各コンポジット・パーティションのサブパーティション化のタイプを設定し、オプションでサブパーティション・テンプレートを定義した後、1つ以上のリスト・パーティションを定義する必要があります。

- list_partition_descで、非コンポジット・リスト・パーティションと同じ要件を持つlist_values_clauseを指定する必要があります。

- table_partition_descriptionを使用すると、各パーティションの物理特性および記憶特性を定義できます。

- list_partition_descで、range_subpartition_desc、list_subpartition_desc、individual_hash_subpartsまたはhash_subparts_by_quantityを使用して、パーティションの個々のサブパーティションの特性を指定します。これらの句で指定する値は、これらのサブパーティションについて、subpartition_templateで指定した値にかわるものです。

コンポジット・リスト・パーティション化の制限事項: コンポジット・リスト・パーティション化には、「コンポジット・レンジ・パーティション化の制限事項:」に示されているものと同じ制限事項があります。

composite_hash_partitions

composite_hash_partitions句を使用すると、まず、ハッシュ方式で表をパーティション化し、次にそれらのパーティションをレンジ・サブパーティション化、ハッシュ・サブパーティション化またはリスト・サブパーティション化できます。

subpartition_by_range、subpartition_by_hashまたはsubpartition_by_listでは、各コンポジット・レンジ・パーティションのサブパーティション化のタイプを指定できます。これらの句では、サブパーティション・テンプレートを指定できます。サブパーティション・テンプレートによって、この文の一部として作成されるサブパーティションまたは後で作成されるサブパーティションのデフォルトのサブパーティション特性が設定されます。

表のサブパーティション化のタイプを設定した後、individual_hash_partitionsまたはhash_partitions_by_quantityを指定する必要があります。

コンポジット・ハッシュ・パーティション化の制限事項: コンポジット・ハッシュ・パーティション化には、「コンポジット・レンジ・パーティション化の制限事項:」に示されているものと同じ制限事項があります。

subpartition_template subpartition_templateは、レンジ・サブパーティション化、リスト・サブパーティション化およびハッシュ・サブパーティション化のオプション要素です。このテンプレートを使用することで、表の各パーティションにデフォルトのサブパーティションを定義できます。明示的にサブパーティションを定義していないパーティションには、このデフォルト・サブパーティション特性が作成されます。この句は、対称型パーティションの作成時に有効です。パーティション・レベルでサブパーティションを明示的に定義すると(range_subpartition_desc、list_subpartition_desc、individual_hash_subpartsまたはhash_subparts_by_quantity句で指定)、この句を上書きできます。

サブパーティションとテンプレートを定義する場合、レンジ・サブパーティション、リスト・サブパーティションまたはハッシュ・サブパーティションを明示的に定義するか、ハッシュ・サブパーティション数量を定義できます。

- サブパーティションを明示的に定義するには、range_subpartition_desc、list_subpartition_descまたはindividual_hash_subpartsを使用します。各パーティションに名前を指定する必要があります。partitioning_storage_clauseのLOB_partitioning_clauseを指定する場合、LOB_segnameを指定する必要があります。

- ハッシュ・サブパーティション数量を指定するには、hash_subpartition_quantityに正の整数を指定します。その数のサブパーティションが各パーティションに作成され、SYS_SUBPnという形式のサブパーティション名が割り当てられます。

注意:
サブパーティションのテンプレートに対して表領域の記憶域を指定しても、tableのパーティションに対して明示的に指定した表領域の記憶域は上書きされません。サブパーティションに対して表領域の記憶域を指定するには、次のいずれかの操作を実行します。

- パーティション・レベルでの表領域の記憶域を省略し、サブパーティションのテンプレートに対して表領域の記憶域を指定します。

- 固有の表領域の記憶域を持つサブパーティションを個別に定義します。

サブパーティションのテンプレートの制限事項: サブパーティションのテンプレートには、次の制限事項があります。

- 1つのLOBサブパーティションに対してTABLESPACEを指定した場合、次にそのLOB列のすべてのLOBサブパーティションに対してTABLESPACEを指定する必要があります。複数のLOBサブパーティションに対して同じ表領域を指定できます。

- subpartition_template内で、または個々のサブパーティションを定義するときに、partitioning_storage_clauseを使用してリスト・サブパーティションに対して異なるLOB記憶域を指定した場合、LOBとVARRAY列の両方にLOB_segnameを指定する必要があります。

subpartition_by_range

subpartition_by_range句を使用すると、表の各パーティションがレンジ・サブパーティション化されるように指定できます。列リストのサブパーティション化はパーティション化キーには関連しませんが、同じ制限事項が適用されます(「column」を参照)。

subpartition_templateを使用して、デフォルトのサブパーティション特性値を指定できます。「subpartition_template」を参照してください。データベースは、特性を明示的に指定していないこのパーティションの任意のサブパーティションに対して、これらの値を使用します。

range_partition_descまたはlist_partition_descのrange_subpartition_descを使用して、各パーティションのレンジ・サブパーティションを個別に定義することもできます。subpartition_templateとrange_subpartition_descの両方を指定しない場合、単一のMAXVALUEサブパーティションが作成されます。

subpartition_by_list

subpartition_by_list句を使用すると、表の各パーティションが列のリテラル値に基づいてサブパーティション化されるように指定できます。リスト・サブパーティション化キー列を1つのみ指定できます。

subpartition_templateを使用して、デフォルトのサブパーティション特性値を指定できます。「subpartition_template」を参照してください。データベースは、特性を明示的に指定していないこのパーティションの任意のサブパーティションに対して、これらの値を使用します。

range_partition_descまたはlist_partition_descのlist_subpartition_descを使用して、各パーティションのリスト・サブパーティションを個別に定義することもできます。subpartition_templateとlist_subpartition_descの両方を指定しない場合、単一のDEFAULTサブパーティションが作成されます。

リスト・サブパーティション化の制限事項: リスト・サブパーティション化には、「コンポジット・レンジ・パーティション化の制限事項:」に示されているものと同じ制限事項があります。

subpartition_by_hash

subpartition_by_hash句を使用すると、表の各パーティションがハッシュ・サブパーティション化されるように指定できます。列リストのサブパーティション化はパーティション化キーには関連しませんが、同じ制限事項が適用されます(「column」を参照)。

subpartition_template句またはSUBPARTITIONS integer句を使用すると、サブパーティションを定義できます。「subpartition_template」を参照してください。どちらの場合も、ロード・バランシングを最適化するには、2の累乗のパーティション数を指定する必要があります。

SUBPARTITIONS integerを指定する場合、表の各パーティションにおけるデフォルトのサブパーティション数を設定します。また、サブパーティションが格納される1つ以上の表領域を指定することもできます。デフォルト値は1です。この句とsubpartition_templateの両方を指定しない場合、1つのハッシュ・サブパーティションを持つパーティションが作成されます。

コンポジット・パーティションの注意事項: コンポジット・パーティションには、次の注意事項があります。

- すべてのサブパーティションについて、range_subpartition_desc、list_subpartition_desc、individual_hash_subpartsまたはhash_subparts_by_quantityを使用して、個々のサブパーティション名およびオプションでその他の特性を指定できます。

- または、ハッシュ・サブパーティションおよびリスト・サブパーティションの場合:

- サブパーティションの数を指定できます。また、サブパーティションが格納される1つ以上の表領域を指定することもできます。この場合、SYS_SUBPnという形式でサブパーティション名が割り当てられます。

- サブパーティションの定義を省略すると、サブパーティションのテンプレートが作成されている場合は、そのテンプレートに基づいてサブパーティションが作成されます。サブパーティションのテンプレートが作成されていない場合、1つのハッシュ・サブパーティションまたは1つのDEFAULTリスト・サブパーティションが作成されます。

- すべてのタイプのサブパーティションについて、サブパーティションの定義全体を指定しない場合、次のようにサブパーティション名が割り当てられます。

- サブパーティションのテンプレートを指定し、またパーティション名を指定した場合、「partition_nameアンダースコア(_)subpartition_name」(たとえば、P1_SUB1)という形式でサブパーティション名が生成されます。

- サブパーティションのテンプレートを指定していない場合、またはサブパーティションのテンプレートは指定したがパーティション名を指定しなかった場合、SYS_SUBPnという形式でサブパーティション名が生成されます。

reference_partitioning

この句を使用すると、参照によって表をパーティション化できます。参照によるパーティション化は、作成される表(子表)を既存のパーティション表(親表)への参照制約によって同一レベルでパーティション化する方法です。参照によって表をパーティション化すると、その後に親表で実行されるパーティションのメンテナンス操作は子表に自動的にカスケードします。そのため、パーティションのメンテナンス操作は、参照パーティション表で直接実行できません。

親表が時間隔パーティション表の場合は、親表の時間隔パーティションに対応する子の参照パーティション表内のパーティションが、子表への挿入時に作成されます。子表内に時間隔パーティションが作成されるときには、そのパーティションに関連する親表のパーティションからパーティション名が継承されます。子表に表レベルのデフォルト表領域がある場合は、その表領域が新しい時間隔パーティションの表領域として使用されます。それ以外の場合は、表領域が親表のパーティションから継承されます。時間隔パーティション表の参照方法の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

constraint  パーティション化参照制約は、次の条件を満たしている必要があります。

- 作成される表で定義される参照整合性制約を指定する必要があります。これは、親表の主キーまたは一意制約を参照する必要があります。制約は、ENABLE VALIDATE NOT DEFERRABLE状態である必要があります。これは、表の作成時に参照整合性制約を指定するときのデフォルトです。

- 制約で参照されるすべての外部キー列は、NOT NULLである必要があります。

- 制約を指定するときに、references_clauseのON DELETE SET NULL句は指定できません。

- 制約で参照される親表は、既存のパーティション表である必要があります。これは、どの方法でパーティション化されていてもかまいません。

- 外部キーおよび親キーにはPL/SQLファンクションまたはLOB列を参照する仮想列を含めることはできません。

reference_partition_desc  このオプションの句を使用すると、パーティション名を指定し、パーティションの物理特性および記憶特性を定義できます。table_partition_descriptionの副次句の動作は、「table_partition_description」のレンジ・パーティションで説明した動作と同じです。

子の参照パーティション表を作成する場合、その親表が時間隔パーティション表のときに、この句を指定すると、子表の時間隔パーティション以外のパーティションには、パーティション記述子が使用されます。パーティション記述子は、時間隔パーティションには指定できません。

参照パーティション化の制限事項: 参照パーティション化には、「一般的なパーティション化の制限事項:」に示されている制限事項があります。次の追加の制限が適用されます。

- 参照パーティション化の制限事項は、親表のパーティション計画から導出されます。

- この句は、索引構成表、外部表またはドメイン索引記憶表に対して指定できません。

- 親表を参照でパーティション化することはできますが、制約を自己参照型にすることはできません。作成される表を自己参照に基づいてパーティション化することはできません。

- ROW MOVEMENTが親表に対して有効である場合、子表に対しても有効である必要があります。

関連項目:
参照によるパーティション化の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。また、「参照パーティション化の例」を参照してください。

system_partitioning

この句を使用すると、システム・パーティションを作成できます。システム・パーティション化には、パーティション化キー列は必要ありません。またシステム・パーティションには、レンジ境界やリスト境界またはハッシュ・アルゴリズムはありません。システム・パーティションは、パーティション化された実表を持つネストした表やドメイン索引記憶表などの依存表を同一レベルでパーティション化する方法です。

- PARTITION BY SYSTEMのみを指定すると、SYS_Pnという形式のシステム生成の名前で1つのパーティションが作成されます。

- PARTITION BY SYSTEM PARTITIONS integerを指定すると、integerで指定した数(1から1024K-1の範囲)のパーティションが作成されます。

- パーティションの定義は参照パーティションと同じ構文であるため、reference_partition_descを共有します。reference_partition_desc構文で、その他のパーティション属性を指定できます。ただし、table_partition_descriptionで、OVERFLOW句は指定できません。

システム・パーティション化の制限事項: システム・パーティション化には、次の制限事項があります。

- 索引構成表またはクラスタの一部である表は、システム・パーティション化できません。

- コンポジット・パーティション化は、システム・パーティション化ではサポートされていません。

- システム・パーティションは分割できません。

- CREATE TABLE ...AS SELECT文でシステム・パーティション化は指定できません。

- INSERT INTO ... AS subquery文を使用してシステム・パーティション表にデータを挿入するには、拡張パーティション構文を使用して、副問合せによって戻された値が挿入されるパーティションを指定する必要があります。

関連項目:
システム・パーティション化の使用の詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。また、「パーティション表と索引の参照」を参照してください。

attribute_clustering_clause

注意:
attribute_clustering_clauseは、Oracle Database 12cリリース1(12.1.0.2)から使用可能です。

この句を使用して、属性クラスタリングの表を有効化します。属性クラスタリングは、指定された列の内容に基づいて物理的に近いデータをクラスタリングできます。

属性クラスタリングは、tableの列または他の表の結合された値にのみ基づきます。後者は結合属性クラスタリングと呼ばれます。

関連項目:
属性クラスタリングの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

clustering_join

この句を使用して、属性クラスタリングを指定します。JOIN句を使用して、属性クラスタリングの基になる他の表の結合された値を指定します。最大4個のJOIN句を指定できます。

cluster_clause

この句を使用して、表に使用する順序のタイプ(線形順序またはインターリーブ順序)を指定します。LINEARまたはINTERLEAVEDキーワードを指定しない場合、デフォルトはLINEARです。

BY LINEAR ORDER この句を使用して、線形順序を指定します。このタイプの順序は、指定された列の順序に従ってデータを格納します。この句を指定する場合、最大で10個の列を含むことができる1つのクラスタリング列グループのみ指定できます。

BY INTERLEAVED ORDER この句を使用して、インターリーブ順序を指定します。このタイプの順序は、複数列のクラスタリングを許可するz順序と似ている特殊な多次元クラスタリング技術を使用します。この句を指定する場合、すべてのグループで最大40個の列を使用した最大で4個のクラスタリング列グループを指定できます。

clustering_columns

この句を使用して、1つ以上のクラスタリング列グループを指定します。

clustering_column_group

この句を使用して、クラスタリング列グループに含まれる1つ以上の列を指定します。

clustering_when

これらの句を使用して、ダイレクト・パス・インサート操作およびデータ移動操作中の属性クラスタリングを許可または禁止します。

ON LOAD INSERTまたはMERGE操作のいずれかの結果として実行されるダイレクト・パス・インサート(シリアルまたはパラレル)の実行中に属性クラスタリングをYES ON LOADを指定して許可するか、NO ON LOADを指定して禁止します。デフォルトはNO ON LOADです。

ON DATA MOVEMENT 次の操作中に発生するデータ移動の属性クラスタリングをYES ON DATA MOVEMENTを指定して許可するか、NO ON DATA MOVEMENTを指定して禁止します。

- DBMS_REDEFINITIONパッケージを使用したデータの再定義

- ALTER TABLEの次の句で指定される表パーティションのメンテナンス操作: coalesce_table、merge_table_partitions、move_table_partitionおよびsplit_table_partition

デフォルトはNO ON DATA MOVEMENTです。

zonemap_clause

この句を使用して、表のゾーン・マップを作成します。ゾーン・マップは、clustering_columns句で指定された列を追跡します。

- WITH MATERIALIZED ZONEMAPを指定して、ゾーン・マップを作成します。zonemap_nameでは、作成されるゾーン・マップの名前を指定します。zonemap_nameを省略する場合、ゾーン・マップの名前はZMAP$_tableです。

- WITHOUT MATERIALIZED ZONEMAPを指定すると、ゾーン・マップを作成しません。これはデフォルトです。

後で表を削除するか、DROP CLUSTERINGまたはMODIFY CLUSTERING ... WITHOUT MATERIALIZED ZONEMAPに対してALTER TABLE文を使用すると、ゾーン・マップが削除されます。

関連項目:
ゾーン・マップの詳細は、CREATE MATERIALIZED ZONEMAPを参照してください。

属性クラスタリングの制限事項 次の制限事項が属性クラスタリングに適用されます。

- 属性クラスタリングは、一時表または外部表に対してサポートされていません。

- 作成される表はヒープ構成表である必要があります。ただし、clustering_join句で指定された表は、ヒープ構成表または索引構成表である可能性があります。

- クラスタリング列は、スカラー・データ型である必要があり、暗号化できません。

- BY LINEAR ORDERを指定する場合、最大で10個の列を含むことができる1つのクラスタリング列グループのみ指定できます。

- BY INTERLEAVED ORDERを指定する場合、すべてのグループで最大40個の列を使用した最大で4個のクラスタリング列グループを指定できます。

- 結合属性クラスタリングの場合

- ディメンション表の数が4を超えることはできません。

- 属性クラスタリング列を提供する表への結合は、一意のキーまたは行の重複を回避する主キー列で行う必要があります。

- 属性クラスタリングは、MERGE文または複数表挿入操作を使用して挿入された行を並べ替えません。

CACHE | NOCACHE | CACHE READS

これらの句を使用すると、バッファ・キャッシュ内でのブロックの格納方法を指定できます。LOB記憶域の場合、CACHE、NOCACHEまたはCACHE READSを指定できます。他のタイプの記憶域の場合、CACHEまたはNOCACHEのみ指定できます。

これらの句を指定しない場合、次のようになります。

- CREATE TABLE文では、NOCACHEがデフォルトです。

- ALTER TABLE文では、既存の値は変更されません。

この項で説明するCACHEおよびNOCACHEの動作は、直接読取りが使用される場合、またはパラレル問合せを使用して表スキャンが実行される場合には適用されません。

CACHE この句は、アクセス頻度の高いデータについて、全表スキャンの実行時に、この表のために取り出されたブロックを、バッファ・キャッシュ内の最低使用頻度(LRU)リストの最高使用頻度側に置く場合に指定します。この属性は、小規模な参照表で有効です。

関連項目:
データベースによる最低使用頻度(LRU)リストの保持の詳細は、『Oracle Database概要』を参照してください。

LOB_storage_clauseのパラメータとしてCACHEを使用すると、より高速なアクセスのために、LOBデータ値がバッファ・キャッシュに配置されます。このパラメータは、logging_clauseと組み合せて評価されます。この句を省略すると、BasicFiles LOBとSecureFiles LOBの両方のデフォルト値は、NOCACHE LOGGINGになります。

CACHEの制限事項: CACHEは、索引構成表に対して指定できません。ただし、索引構成表は暗黙的にCACHE動作を提供します。

NOCACHE アクセス頻度の低いデータについて、NOCACHEを指定すると、全表スキャンの実行時にこの表用に取り出されたブロックは、バッファ・キャッシュ内のLRUリストの最低使用頻度側に置かれます。NOCACHEは、LOB記憶域のデフォルトです。

LOB_storage_clauseのパラメータとしてNOCACHEを使用すると、LOB値はバッファ・キャッシュに入りません。NOCACHEは、LOB記憶域のデフォルトです。

NOCACHEの制限事項: NOCACHEは、索引構成表に対して指定できません。

CACHE READS CACHE READSはLOB記憶域にのみ適用されます。LOB値が書込み操作中ではなく読取り操作中にバッファ・キャッシュに入れられるように指定します。

logging_clause この句を使用すると、データ・ブロックの記憶域を記録するかどうかを指定できます。

関連項目:
logging_clauseをLOB_parametersの一部として指定した場合については、「logging_clause」を参照してください。

RESULT_CACHE句

この句を使用すると、この表が指名されている文または問合せブロックの結果を、結果キャッシュに格納する対象とするかどうかを指定できます。結果キャッシュでは2つのモードを使用できます。

- DEFAULT: 結果キャッシュは表レベルでは決定されません。RESULT_CACHE_MODE初期化パラメータがFORCEに設定されているか、またはMANUALに設定されていて問合せにRESULT_CACHEヒントを指定する場合は、問合せが結果キャッシュの対象となります。これは、この句を指定しない場合のデフォルトです。

- FORCE: 問合せで指定したすべての表がこの設定になっている場合は、問合せにNO_RESULT_CACHEヒントが指定されていないかぎり、その問合せは常にキャッシュの対象となります。問合せで指定した1つ以上の表がDEFAULTに設定されている場合、この問合せにおける有効な表の注釈はDEFAULTであるとみなされ、前述したセマンティクスに従います。

DBA_、ALL_およびUSER_TABLESデータ・ディクショナリ・ビューのRESULT_CACHE列を問い合せると、表の結果キャッシュのモードを確認できます。

RESULT_CACHEおよびNO_RESULT_CACHEのSQLヒントは、これらの結果キャッシュの表の注釈およびRESULT_CACHE_MODE初期化パラメータより優先されます。RESULT_CACHE_MODEをFORCEに設定すると、その設定がこの表の注釈句より優先されます。

注意:
RESULT_CACHE_MODEをFORCEに設定することはお薦めしません。なぜなら、データベースとクライアントがすべての問合せをキャッシュしようとするため、パフォーマンスおよびラッチのオーバーヘッドが非常に大きくなる可能性があるためです。

関連項目:

- 結果キャッシュの概要は、『Oracle Call Interfaceプログラマーズ・ガイド』および『Oracle Database概要』を参照してください。

- この句の使用方法の詳細は、『Oracle Databaseパフォーマンス・チューニング・ガイド』を参照してください。

- RESULT_CACHE_MODE初期化パラメータと*_TABLESデータ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

- ヒントの詳細は、「RESULT_CACHEヒント」および「NO_RESULT_CACHEヒント」を参照してください。

parallel_clause

parallel_clauseを使用すると、表をパラレル作成した後、問合せおよびDMLのINSERT、UPDATE、DELETEおよびMERGEに対するデフォルトの並列度を設定できます。

注意:
parallel_clause構文は、以前のリリースの構文にかわるものです。以前のリリースの構文は下位互換用にサポートされていますが、動作がわずかに異なることがあります。

NOPARALLEL NOPARALLELを指定すると、シリアル実行が行われます。これはデフォルトです。

PARALLEL PARALLELを指定すると、並列度を選択できます。並列度は、すべての関係するインスタンスで使用可能なCPUの数に、初期化パラメータPARALLEL_THREADS_PER_CPUの値を掛けたものです。

PARALLEL integer integerには、パラレル操作で使用するパラレル・スレッド数である並列度を指定します。各パラレル・スレッドは、1、2個のパラレル実行サーバーを使用します。通常、最適な並列度が計算されるため、integerに値を指定する必要はありません。

関連項目:
この句の詳細は、「parallel_clause」を参照してください。

NOROWDEPENDENCIES | ROWDEPENDENCIES

この句では、表が行レベル依存の追跡を使用するかどうかを指定できます。この機能を使用すると、表の各行は、行を変更した最後のトランザクションのコミット時刻以降を示すシステム変更番号(SCN)を持つことになります。表の作成後は、この設定を変更できません。

ROWDEPENDENCIES ROWDEPENDENCIESを指定すると、行レベル依存の追跡を有効にできます。この設定は、主にレプリケーション環境でパラレル伝播を許可する場合に便利です。各行につきサイズが6バイト増えます。

ROWDEPENDENCIES句の制限事項 Oracleでは、行レベル依存の追跡を使用する表の表圧縮はサポートされません。ROWDEPENDENCIES句とtable_compression句の両方を指定した場合、table_compression句は無視されます。ROWDEPENDENCIES属性を削除するには、DBMS_REDEFINITIONパッケージを使用して表を再定義するか、表を再作成する必要があります。

NOROWDEPENDENCIES NOROWDEPENDENCIESを指定すると、表で行レベル依存の追跡機能が使用されなくなります。これはデフォルトです。

関連項目:
レプリケーション環境での行レベル依存の追跡の使用については、『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

enable_disable_clause

enable_disable_clauseを使用すると、制約が適用されるかどうかを指定できます。デフォルトでは、制約はENABLE VALIDATE状態で作成されます。

制約を使用可能および使用禁止にする場合の制限事項: 制約を使用可能および使用禁止にする処理には、次の制限事項があります。

- 整合性制約を使用可能または使用禁止にする場合、この文または前の文に制約を定義する必要があります。

- 参照された一意キー制約または主キー制約が使用可能でない場合は、外部キー制約を使用可能にできません。

- using_index_clauseのindex_properties句で、INDEXTYPE IS ...句は制約の定義において有効ではありません。

関連項目:
制約の詳細は、「constraint」を参照してください。また、「表の作成: ENABLE/DISABLEの例」も参照してください。

ENABLE句 この句を使用すると、表のデータに制約を適用できます。この句の詳細は、制約に関する項目の「ENABLE句」を参照してください。

DISABLE句 この句を使用すると、整合性制約を使用禁止にできます。この句の詳細は、制約に関する項目の「DISABLE句」を参照してください。

UNIQUE UNIQUE句を使用すると、指定された列または列の組合せに定義された一意制約を使用可能または使用禁止にできます。

PRIMARY KEY PRIMARY KEY句を使用すると、表に対して定義された主キー制約を使用可能または使用禁止にできます。

CONSTRAINT CONSTRAINT句を使用すると、constraint_nameに指定する整合性制約を使用可能または使用禁止にできます。

KEEP | DROP INDEX この句を使用すると、一意キー制約または主キー制約を適用するために使用される索引を保持するかまたは削除するかを指定できます。

索引の保持と削除の制限事項: 一意キー制約または主キー制約が使用禁止の場合にのみ、この句を指定できます。

using_index_clause using_index_clauseを使用すると、一意キー制約または主キー制約を適用するために使用される索引を指定または作成することができます。この句の詳細は、制約に関する項目の「using_index_clause」を参照してください。

関連項目:

- index_attributes、global_partitioned_indexおよびlocal_partitioned_index句の詳細、および索引に関連するNOSORTとlogging_clauseの詳細は、「CREATE INDEX」を参照してください。

- using_index_clause、PRIMARY KEY制約およびUNIQUE制約の詳細は、「constraint」を参照してください。

- 索引を使用した制約の適用例は、「明示的な索引の制御例」を参照してください。

CASCADE CASCADEを指定すると、指定した整合性制約に依存する整合性制約を使用禁止にできます。参照整合性制約を構成する主キーまたは一意キーを使用禁止にする場合、この句を指定します。

CASCADEの制限事項: DISABLEを指定した場合のみ、CASCADEを指定できます。

row_movement_clause

row_movement_clauseを使用すると、表の行が移動されるかどうかを指定できます。表の圧縮時や、パーティション・データの更新操作時などに、行を移動できます。

注意:
データ・アクセスで静的なROWIDが必要な場合は、行移動を有効にしないでください。通常の表(ヒープ構成表)の場合は、行を移動すると、その行のROWIDが変更されます。索引構成表での行の移動の場合は、論理ROWIDの物理推測コンポーネントは不正確になりますが、論理ROWIDは有効のままです。

- ENABLEを指定すると、行の移動を許可できます。このとき、ROWIDは変更されます。

- DISABLEを指定すると、行の移動を禁止できます。このとき、ROWIDは変更されません。

この句を省略すると、行移動は使用禁止になります。

行の移動の制限事項: この句は、非パーティション索引構成表に対して指定できません。

flashback_archive_clause

この句を指定するには、指定されたフラッシュバック・データ・アーカイブに対するFLASHBACK ARCHIVEオブジェクト権限が必要です。この句を使用すると、表の履歴追跡を有効または無効にできます。

- 表の追跡を有効にするには、FLASHBACK ARCHIVEを指定します。flashback_archiveを指定すると、この表に特定のフラッシュバック・データ・アーカイブを指定できます。指定するフラッシュバック・データ・アーカイブは、すでに存在している必要があります。
flashback_archiveを省略すると、システムに対して指定されているデフォルトのフラッシュバック・データ・アーカイブが使用されます。システムにデフォルトのフラッシュバック・データ・アーカイブが指定されていない場合は、flashback_archiveを指定する必要があります。

- 表の追跡を無効にするには、NO FLASHBACK ARCHIVEを指定します。これはデフォルトです。

flashback_archive_clauseの制限事項: フラッシュバック・データ・アーカイブには、次の制限事項があります。

- この句は、ネストした表、クラスタ化表、一時表、リモート表または外部表に対しては指定できません。

- ハイブリッド列圧縮によって圧縮された表に対しては、この句を指定できません。

- この句を指定する表には、LONG列またはネストした表の列を含めることはできません。

- この句を指定した後でエクスポート・ユーティリティ、インポート・ユーティリティまたはトランスポータブル表領域機能を使用して表を別のデータベースにコピーすると、コピー先の表では追跡は有効にならず、元の表のアーカイブ・データは使用できません。

関連項目:

- フラッシュバック・データ・アーカイブの使用方法の概要は、『Oracle Database開発ガイド』を参照してください。

- フラッシュバック・データ・アーカイブの割当て制限属性と保存属性の変更およびフラッシュバック・データ・アーカイブにおける表領域の記憶域の追加と変更の詳細は、「ALTER FLASHBACK ARCHIVE」を参照してください。

ROW ARCHIVAL

この句を指定すると、tableで行のアーカイブを有効にできます。この句によりインデータベース・アーカイブを実装でき、表の行をアクティブまたはアーカイブ済として指定できます。その後、表内のアクティブな行のみを対象に問合せを実行できます。

この句を指定すると、非表示列ORA_ARCHIVE_STATEが表に作成されます。この列のデータ型は、VARCHAR2です。この列に値0または1を指定すると、行がアクティブであるか(0)アーカイブ対象であるか(1)を示すことができます。表へのデータの挿入時、ORA_ARCHIVE_STATEに値を指定しなかった場合、その値は0に設定されます。

- セッションがROW ARCHIVE VISIBILITY = ACTIVEの場合、データベースは表に対する問合せの実行時に、アクティブな行のみを考慮します。

- セッションがROW ARCHIVE VISIBILITY = ALLの場合、データベースは表に対する問合せの実行時に、すべての行を考慮します。

関連項目:

- セッションにおける行のアーカイブの可視性を構成する方法については、「ALTER SESSION」の「ROW ARCHIVAL VISIBILITY」句を参照してください。

- 既存の表の行アーカイブを有効または無効にする方法は、「ALTER TABLE」の「[NO] ROW ARCHIVAL」句を参照してください。

- インデータベース・アーカイブの詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

AS subquery

副問合せを指定して表の内容を定義します。表の作成時に、副問合せの結果として戻された行を表の中に挿入します。

オブジェクト表の場合、subqueryには表の型に対応する1つの式、または表の型の最上位属性の数のどちらかを設定できます。詳細は、「SELECT」を参照してください。

subqueryが、既存のマテリアライズド・ビューと部分的または完全に同じビューを戻す場合、subqueryに指定された1つ以上の表のかわりにマテリアライズド・ビューがクエリー・リライトに使用されることがあります。

関連項目:
マテリアライズド・ビューおよびクエリー・リライトの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

データ型およびデータ長は、副問合せから導出されます。整合性制約や、その他の列および表の属性には次の規則が適用されます。

- 副問合せで、列を含む式ではなく列を選択した場合、選択した表の列にNOT NULL制約が明示的に作成されていると、新しい表の対応する列にもNOT DEFERRABLEおよびVALIDATE状態の同じ制約が自動的に定義されます。制約に違反する行がある場合、表は作成されずエラーが戻されます。

- 選択した表の列に暗黙的に作成されたNOT NULL制約(たとえば、主キー)は、新しい表には引き継がれません。

- 主キー、一意キー、外部キー、CHECK制約、パーティション化条件、索引および列のデフォルト値は、新しい表に引き継がれません。

- 選択した表がパーティション化されている場合、新しい表を同じ方法でパーティション化するか、別の方法でパーティション化するか、またはパーティション化しないかを選択できます。パーティション化は、新しい表に引き継がれません。AS subquery句の前に、CREATE TABLE文の一部として、必要なパーティション化を指定します。

- 選択した表で透過的データ暗号化を使用して暗号化された列は、新しい表の作成時に暗号化として列を定義しないかぎり、新しい表では暗号化されません。

注意:
機密列は、データを移入する前に暗号化することをお薦めします。これにより、機密データのクリア・テキスト・コピーの作成を回避できます。

subqueryによって返される各列に列名がある場合、または指定した列別名を持つ式である場合、表定義から列を完全に省略できます。この場合、tableの列名はsubqueryの列の名前と同じになります。索引構成表の作成は例外です。この場合、主キー列を指定する必要があるため、表定義で列を指定する必要があります。

TO_LOBファンクションと組み合せてsubqueryを使用すると、別の表のLONG列の値を、作成する表の列のLOB値に変換できます。

関連項目:

- LONGデータをLOBにコピーする理由およびタイミングについては、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。

- TO_LOBファンクションの使用方法については、「変換ファンクション」を参照してください。

- order_by_clauseの詳細は、「SELECT」を参照してください。

- AS subquery句を使用するときの統計収集の詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。

parallel_clause この文でparallel_clauseを指定した場合、INITIAL記憶域パラメータに対して指定する値は無視され、かわりにNEXTパラメータの値が使用されます。

関連項目:
これらのパラメータの詳細は、「storage_clause」を参照してください。

ORDER BY ORDER BY句を使用すると、副問合せによって戻される行の順序付けを行うことができます。

この句をCREATE TABLEで指定した場合、この句が表全体にわたるデータを順序付けるとはかぎりません。たとえば、パーティション間での順序付けは行われません。同じキーの索引をORDER BYキー列として作成する場合に、この句を指定します。Oracle Databaseは、ORDER BYキーのデータをクラスタ化し、索引キーに対応させます。

表を定義する問合せの制限事項: 表問合せには、次の制限事項があります。

- 表中の列数は、副問合せ中の式の数と同じである必要があります。

- 列定義では、列名、デフォルト値および整合性制約のみを指定できます。データ型は指定できません。

- 表が参照パーティション表で、なおかつ制約が表のパーティション化参照制約である場合を除いては、AS subqueryを含むCREATE TABLE文には、外部キー制約を定義できません。それ以外のすべての場合は、制約を指定せずに表を作成し、後でALTER TABLE文を使用してその制約を追加する必要があります。

object_table

OF句を使用すると、明示的にobject_type型のオブジェクト表を作成できます。オブジェクト表の各列は、object_type型の最上位の属性に対応します。各行には、オブジェクト・インスタンスが入り、また各インスタンスには、行の挿入時に一意のシステム生成オブジェクト識別子が割り当てられます。schemaを省略した場合、自分のスキーマ内にオブジェクト表が作成されます。

オブジェクト表、XMLType表、オブジェクト・ビューおよびXMLTypeビューには、列名は付けられません。そのため、システム生成疑似列OBJECT_IDが定義されます。問合せでこの列名を使用し、WITH OBJECT IDENTIFIER句を指定して、オブジェクト・ビューを作成できます。

関連項目:
「オブジェクト列と表の例」

object_table_substitution

object_table_substitution句を使用すると、サブタイプに対応する行オブジェクトの、このオブジェクト表への挿入を許可するかどうかを指定できます。

NOT SUBSTITUTABLE AT ALL LEVELS NOT SUBSTITUTABLE AT ALL LEVELSを指定すると、作成するオブジェクト表は置換できなくなります。また、置換は、すべての埋込みオブジェクト属性および埋込みのネストした表と配列の要素には使用禁止です。デフォルトは、SUBSTITUTABLE AT ALL LEVELSです。

関連項目:

- オブジェクト型の作成の詳細は、「CREATE TYPE」を参照してください。

- REF型の使用の詳細は、「ユーザー定義型」、「ユーザー定義ファンクション」、「SQL式」、「CREATE TYPE」および『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。

object_properties

オブジェクト表のプロパティは、基本的にリレーショナル表と同じです。ただし、列を指定するかわりに、オブジェクトの属性を指定します。

attributeには、オブジェクト内の項目の修飾した列名を指定します。

oid_clause

oid_clauseを使用すると、オブジェクト表のオブジェクト識別子がシステム生成されるか、表の主キーを基に作成されるかを指定できます。デフォルトはSYSTEM GENERATEDです。

oid_clauseの制限事項: この句には、次の制限事項があります。

- 主キー制約を表に指定していないと、OBJECT IDENTIFIER IS PRIMARY KEYは指定できません。

- この句は、ネストした表には指定できません。

注意:
主キー・オブジェクト識別子はローカルで一意ですが、グローバルで一意であるとはかぎりません。グローバルで一意の識別子が必要な場合は、主キーがグローバルで一意であることを確認してください。

oid_index_clause

この句は、oid_clauseをSYSTEM GENERATEDとして指定している場合のみに適用されます。非表示のオブジェクト識別子列に索引を指定します。また、任意に記憶特性を指定します。

indexには、非表示のシステム生成オブジェクト識別子列の索引の名前を指定します。indexを省略すると、名前が生成されます。

physical_propertiesおよびtable_properties

これらの句のセマンティクスについては、リレーショナル表の対応する項を参照してください。「physical_properties」および「table_properties」を参照してください。

XMLType_table

XMLType_table構文を使用すると、XMLTypeデータ型の表を作成できます。XMLType表の作成に使用されるほとんどの句のセマンティクスは、オブジェクト表のセマンティクスと同じです。この項では、XMLType表固有の句について説明します。

オブジェクト表、XMLType表、オブジェクト・ビューおよびXMLTypeビューには、列名は付けられません。そのため、システム生成疑似列OBJECT_IDが定義されます。問合せでこの列名を使用し、WITH OBJECT IDENTIFIER句を指定して、オブジェクト・ビューを作成できます。

XMLSchema_spec

この句を使用すると、登録済XMLスキーマ(XMLSCHEMA句で登録するかELEMENT句の一部として登録)のURLおよびXML要素名を指定できます。

XMLスキーマのURLは省略可能ですが、要素は必ず指定します。XMLスキーマのURLを指定する場合は、DBMS_XMLSCHEMAパッケージを使用してXMLスキーマをあらかじめ登録しておく必要があります。

オプションのSTORE ALL VARRAYS AS句を使用すると、XMLType表または列に含まれるすべてのVARRAYの格納方法を指定できます。

- STORE ALL VARRAYS AS LOBSを指定すると、すべてのVARRAYがLOBとして格納されます。

- STORE ALL VARRAYS AS TABLESを指定すると、すべてのVARRAYが表として格納されます。

オプションのALLOW | DISALLOW句は、BINARY XML記憶域を指定した場合にのみ有効です。

- ALLOW NONSCHEMAを指定すると、スキーマ・ベース以外のドキュメントをXMLType列に格納できます。

- DISALLOW NONSCHEMAを指定すると、スキーマ・ベース以外のドキュメントはXMLType列に格納できません。これはデフォルトです。

- ALLOW ANYSCHEMAを指定すると、スキーマ・ベースの任意のドキュメントをXMLType列に格納できます。

- DISALLOW ANYSCHEMAを指定すると、スキーマ・ベースの任意のドキュメントはXMLType列に格納できません。これはデフォルトです。

関連項目:

- DBMS_XMLSCHEMAパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

- XMLデータの作成方法および使用方法の詳細は、『Oracle XML DB開発者ガイド』を参照してください。

- 「XMLType表の例:」

例

表の作成: 一般的な例

次の文は、人事情報のサンプル・スキーマ(hr)が所有するemployees表を定義します。テスト・データベースでこの例を使用できるように、表および制約には不確定な名前が指定されています。

CREATE TABLE employees_demo
( employee_id    NUMBER(6)
, first_name     VARCHAR2(20)
, last_name      VARCHAR2(25)
CONSTRAINT emp_last_name_nn_demo NOT NULL
, email          VARCHAR2(25)
CONSTRAINT emp_email_nn_demo     NOT NULL
, phone_number   VARCHAR2(20)
, hire_date      DATE  DEFAULT SYSDATE
CONSTRAINT emp_hire_date_nn_demo  NOT NULL
, job_id         VARCHAR2(10)
CONSTRAINT     emp_job_nn_demo  NOT NULL
, salary         NUMBER(8,2)
CONSTRAINT     emp_salary_nn_demo  NOT NULL
, commission_pct NUMBER(2,2)
, manager_id     NUMBER(6)
, department_id  NUMBER(4)
, dn             VARCHAR2(300)
, CONSTRAINT     emp_salary_min_demo
CHECK (salary > 0)
, CONSTRAINT     emp_email_uk_demo
UNIQUE (email)
) ;

この表は12列で構成されます。employee_id列は、NUMBERデータ型です。hire_date列は、データ型がDATE、デフォルト値がSYSDATEです。last_name列は、VARCHAR2型で、NOT NULL制約があります。他の列については省略します。

表の作成: 記憶域の例 次の文は、記憶域の容量が小さいexample表領域の中にサンプル表employees_demoを定義します。

CREATE TABLE employees_demo
( employee_id    NUMBER(6)
, first_name     VARCHAR2(20)
, last_name      VARCHAR2(25)
CONSTRAINT emp_last_name_nn_demo NOT NULL
, email          VARCHAR2(25)
CONSTRAINT emp_email_nn_demo     NOT NULL
, phone_number   VARCHAR2(20)
, hire_date      DATE  DEFAULT SYSDATE
CONSTRAINT emp_hire_date_nn_demo  NOT NULL
, job_id         VARCHAR2(10)
CONSTRAINT     emp_job_nn_demo  NOT NULL
, salary         NUMBER(8,2)
CONSTRAINT     emp_salary_nn_demo  NOT NULL
, commission_pct NUMBER(2,2)
, manager_id     NUMBER(6)
, department_id  NUMBER(4)
, dn             VARCHAR2(300)
, CONSTRAINT     emp_salary_min_demo
CHECK (salary > 0)
, CONSTRAINT     emp_email_uk_demo
UNIQUE (email)
)
TABLESPACE example
STORAGE (INITIAL 8M);

DEFAULT ON NULL列値を含む表の作成例:

次の文では、従業員データを格納するために使用できる、表myempを作成します。department_id列は、値が50のDEFAULT ON NULL列値で定義されています。そのため、それ以降のINSERT文でNULL値をdepartment_idに割り当てようとすると、そのかわりに値50が割り当てられるようになります。

CREATE TABLE myemp (employee_id number, last_name varchar2(25),
department_id NUMBER DEFAULT ON NULL 50 NOT NULL);

employees表内のemployee_id 178は、department_idにNULL値を保持しています。

SELECT employee_id, last_name, department_id
FROM employees
WHERE department_id IS NULL;

EMPLOYEE_ID LAST_NAME                 DEPARTMENT_ID
----------- ------------------------- -------------
178 Grant

employees表のemployee_id列、last_name列、およびdepartment_id列のデータを、myemp表に移入します。

INSERT INTO myemp (employee_id, last_name, department_id)
(SELECT employee_id, last_name, department_id from employees);

myemp表のemployee_id 178は、department_idに50の値を保持しています。

SELECT employee_id, last_name, department_id
FROM myemp
WHERE employee_id = 178;

EMPLOYEE_ID LAST_NAME                 DEPARTMENT_ID
----------- ------------------------- -------------
178 Grant                                50

ID列を含む表の作成例:

次の文では、ID列idを含む表t1を作成します。この順序ジェネレータは、増加する整数値を常にidに割り当てます。この整数値は、1から始まります。

CREATE TABLE t1 (id NUMBER GENERATED AS IDENTITY);

次の文では、ID列idを含む表t2を作成します。この順序ジェネレータは、デフォルトで、100から始まり10ずつ増加する整数値をidに割り当てるようになります。

CREATE TABLE t2 (id NUMBER GENERATED BY DEFAULT AS IDENTITY (START WITH 100 INCREMENT BY 10));

表の作成: 一時表の例 次の文は、販売員が使用するサンプル・データベースの一時表today_salesを作成します。各販売員のセッションは、自身のその日の販売データを表に格納します。一時的なデータは、セッションの終わりに削除されます。

CREATE GLOBAL TEMPORARY TABLE today_sales
ON COMMIT PRESERVE ROWS
AS SELECT * FROM orders WHERE order_date = SYSDATE;

遅延セグメント作成を含む表の作成例: 次の文では、遅延セグメント作成を含む表を作成します。この表のデータを保持するためのセグメントは、表にデータが挿入されるまで作成されません。

CREATE TABLE later (col1 NUMBER, col2 VARCHAR2(20))    SEGMENT CREATION DEFERRED;

置換可能な表および列のサンプル: 次の文は、置換可能な表を作成するために使用可能な型の階層を作成します。employee_t型は、person_t型からnameおよびssn属性を継承し、department_idおよびsalary属性を追加しています。part_time_emp_t型は、employee_tおよび(employee_tを介して)person_tからすべての属性を継承し、num_hrs属性を追加しています。part_time_emp_tはデフォルトで最終型であるため、そのサブタイプを作成できません。

CREATE TYPE person_t AS OBJECT (name VARCHAR2(100), ssn NUMBER)
NOT FINAL;
/

CREATE TYPE employee_t UNDER person_t
(department_id NUMBER, salary NUMBER) NOT FINAL;
/

CREATE TYPE part_time_emp_t UNDER employee_t (num_hrs NUMBER);
/

次の文は、person_t型から置換可能な表を作成します。

CREATE TABLE persons OF person_t;

次の文は、person_t型の置換可能な列で表を作成します。

CREATE TABLE books (title VARCHAR2(100), author person_t);

personsまたはbooksに挿入するときに、person_tまたはそのサブタイプの属性に対する値を指定できます。挿入文の例は、「置換可能な表および列への挿入例:」を参照してください。

組込みファンクションおよび条件を使用して、このような表からデータを抽出することができます。例は、「TREAT」、「SYS_TYPEID」および「IS OF type条件」を参照してください。

表の作成: パラレル化の例 次の文は、最適な数のパラレル実行サーバーを使用する表を作成して、employeesをスキャンし、dept_80に移入します。

CREATE TABLE dept_80
PARALLEL
AS SELECT * FROM employees
WHERE department_id = 80;

パラレル化を使用することによって、表を作成するためにパラレル実行サーバーが使用されるため、表作成が高速化されます。表が作成された後、表へのアクセスに表作成と同じ並列度が使用されるため、表の問合せも高速化します。

次の文は、同じ表をシリアルで作成します。後続のDMLおよび表の問合せもシリアルで実行されます。

CREATE TABLE dept_80
AS SELECT * FROM employees
WHERE department_id = 80;

表の作成: ENABLE/DISABLEの例 次の文は、サンプル表departments_demoを作成します。この例では、NOT NULL制約が定義され、ENABLE VALIDATE状態に置かれます。テスト・データベースでこの例を使用できるように、表には不確定な名前が指定されています。

CREATE TABLE departments_demo
( department_id    NUMBER(4)
, department_name  VARCHAR2(30)
CONSTRAINT  dept_name_nn  NOT NULL
, manager_id       NUMBER(6)
, location_id      NUMBER(4)
, dn               VARCHAR2(300)
) ;

次の文は、同じdepartments_demo表を作成しますが、使用禁止の主キー制約も定義します。

CREATE TABLE departments_demo
( department_id    NUMBER(4)   PRIMARY KEY DISABLE
, department_name  VARCHAR2(30)
CONSTRAINT  dept_name_nn  NOT NULL
, manager_id       NUMBER(6)
, location_id      NUMBER(4)
, dn               VARCHAR2(300)
) ;

ネストした表の例: 次の文は、ネストした表の列ad_textdocs_ntabを使用してサンプル表pm.print_mediaを作成します。

CREATE TABLE print_media
( product_id        NUMBER(6)
, ad_id             NUMBER(6)
, ad_composite      BLOB
, ad_sourcetext     CLOB
, ad_finaltext      CLOB
, ad_fltextn        NCLOB
, ad_textdocs_ntab  textdoc_tab
, ad_photo          BLOB
, ad_graphic        BFILE
, ad_header         adheader_typ
) NESTED TABLE ad_textdocs_ntab STORE AS textdocs_nestedtab;

表の作成: マルチレベル・コレクションの例 次の例では、アカウント・マネージャが2つのレベルのネストした表を使用して顧客の表を作成します。

CREATE TYPE phone AS OBJECT (telephone NUMBER);
/
CREATE TYPE phone_list AS TABLE OF phone;
/
CREATE TYPE my_customers AS OBJECT (
cust_name VARCHAR2(25),
phones phone_list);
/
CREATE TYPE customer_list AS TABLE OF my_customers;
/
CREATE TABLE business_contacts (
company_name VARCHAR2(25),
company_reps customer_list)
NESTED TABLE company_reps STORE AS outer_ntab
(NESTED TABLE phones STORE AS inner_ntab);

前述の例を次のように使用した場合、内部のネストした表に列または属性名がない場合にCOLUMN_VALUEキーワードが使用されます。

CREATE TYPE phone AS TABLE OF NUMBER;
/
CREATE TYPE phone_list AS TABLE OF phone;
/
CREATE TABLE my_customers (
name VARCHAR2(25),
phone_numbers phone_list)
NESTED TABLE phone_numbers STORE AS outer_ntab
(NESTED TABLE COLUMN_VALUE STORE AS inner_ntab);

表の作成: LOB列の例 次の文は、LOB記憶特性を追加してpm.print_mediaを作成します。

CREATE TABLE print_media_new
( product_id        NUMBER(6)
, ad_id             NUMBER(6)
, ad_composite      BLOB
, ad_sourcetext     CLOB
, ad_finaltext      CLOB
, ad_fltextn        NCLOB
, ad_textdocs_ntab  textdoc_tab
, ad_photo          BLOB
, ad_graphic        BFILE
, ad_header         adheader_typ
) NESTED TABLE ad_textdocs_ntab STORE AS textdocs_nestedtab_new
LOB (ad_sourcetext, ad_finaltext) STORE AS
(TABLESPACE example
STORAGE (INITIAL 6144)
CHUNK 4000
NOCACHE LOGGING);

この例では、CHUNKの値を4096(2048のブロック・サイズの近似倍数)まで切り上げます。

索引構成表の例: 次の文は、索引を構成したサンプル表hr.countriesを作成します。

CREATE TABLE countries_demo
( country_id      CHAR(2)
CONSTRAINT country_id_nn_demo NOT NULL
, country_name    VARCHAR2(40)
, currency_name   VARCHAR2(25)
, currency_symbol VARCHAR2(3)
, region          VARCHAR2(15)
, CONSTRAINT    country_c_id_pk_demo
PRIMARY KEY (country_id ) )
ORGANIZATION INDEX
INCLUDING   country_name
PCTTHRESHOLD 2
STORAGE
( INITIAL  4K )
OVERFLOW
STORAGE
( INITIAL  4K );

外部表の例: 次の文は、サンプル表hr.departmentsのサブセットを示す外部表を作成します。TYPE句は、表のアクセス・ドライバ・タイプをORACLE_LOADERに指定します。ACCESS PARAMETERS()句は、ORACLE_LOADERアクセス・ドライバのパラメータ値を指定します。これらのパラメータはイタリック体で表され、opaque_format_specを形成します。opaque_format_specの構文はアクセス・ドライバ・タイプに依存するため、このドキュメントの対象外です。ORACLE_LOADERアクセス・ドライバおよびopaque_format_spec構文の詳細は、『Oracle Databaseユーティリティ』を参照してください。

CREATE TABLE dept_external (
deptno     NUMBER(6),
dname      VARCHAR2(20),
loc        VARCHAR2(25)
)
ORGANIZATION EXTERNAL
(TYPE ORACLE_LOADER
DEFAULT DIRECTORY admin
ACCESS PARAMETERS
(
RECORDS DELIMITED BY newline
BADFILE 'ulcase1.bad'
DISCARDFILE 'ulcase1.dis'
LOGFILE 'ulcase1.log'
SKIP 20
FIELDS TERMINATED BY ","  OPTIONALLY ENCLOSED BY '"'
(
deptno     INTEGER EXTERNAL(6),
dname      CHAR(20),
loc        CHAR(25)
)
)
LOCATION ('ulcase1.ctl')
)
REJECT LIMIT UNLIMITED;

関連項目:
adminディレクトリの作成方法は、「ディレクトリの作成例:」を参照してください。

XMLTypeの例

この項では、XMLType表またはXMLType列の作成例について説明します。この例の詳細は、「SQL文でのXMLの使用方法」を参照してください。

XMLType表の例: 次の例では、暗黙的に1列のバイナリXML列を持つ非常に単純なXMLType表を作成します。

CREATE TABLE xwarehouses OF XMLTYPE;

次の例では、XMLSchemaベースの表を作成します。XMLスキーマは事前に作成しておく必要があります(詳細は、「SQL文でのXMLの使用方法」を参照してください)。

CREATE TABLE xwarehouses OF XMLTYPE
XMLSCHEMA "http://www.example.com/xwarehouses.xsd"
ELEMENT "Warehouse";

XMLスキーマベースの表に制約を定義したり、索引を作成できるため、後続の問合せのパフォーマンスが大幅に向上します。XMLType表にオブジェクト・リレーショナル・ビューを作成することも、オブジェクト・リレーショナル表にXMLTypeビューを作成することもできます。

関連項目:

- 制約の追加例は、「SQL文でのXMLの使用方法」を参照してください。

- 索引の作成例は、「XMLType表の索引の作成例:」を参照してください。

- XMLTypeビューの作成例は、「XMLTypeビューの作成例:」を参照してください。

XMLType列の例: 次の文は、XMLType列を持つ表を作成し、CLOBとして格納します。この表ではXMLスキーマが必要ないため、コンテンツ構造は事前に定義しません。

CREATE TABLE xwarehouses (
warehouse_id        NUMBER,
warehouse_spec      XMLTYPE)
XMLTYPE warehouse_spec STORE AS CLOB
(TABLESPACE example
STORAGE (INITIAL 6144)
CHUNK 4000
NOCACHE LOGGING);

次の例は、同様の表を作成しますが、オブジェクト・リレーショナルXMLType列にXMLTypeデータを格納します。この列の構造は、指定したスキーマによって判断されます。

CREATE TABLE xwarehouses (
warehouse_id    NUMBER,
warehouse_spec  XMLTYPE)
XMLTYPE warehouse_spec STORE AS OBJECT RELATIONAL
XMLSCHEMA "http://www.example.com/xwarehouses.xsd"
ELEMENT "Warehouse";

次の例では、SecureFiles CLOBとして格納されたXMLType列を持つ別の同様の表を作成します。この表ではXMLスキーマが必要ないため、コンテンツ構造は事前に定義しません。SecureFiles LOBには自動セグメント領域管理が行われる表領域が必要であるため、この例では「表領域に対してセグメント領域管理を指定する場合の例:」で作成した表領域を使用します。

CREATE TABLE xwarehouses (
warehouse_id   NUMBER,
warehouse_spec XMLTYPE)
XMLTYPE        warehouse_spec STORE AS SECUREFILE CLOB
(TABLESPACE auto_seg_ts
STORAGE (INITIAL 6144)
CACHE);

パーティション化の例

レンジ・パーティション化の例: サンプル・スキーマshのsales表は、レンジでパーティション化されています。次の例では、簡略化したsales表を作成します。この例では、制約および記憶域要素は省略されています。

CREATE TABLE range_sales
( prod_id        NUMBER(6)
, cust_id        NUMBER
, time_id        DATE
, channel_id     CHAR(1)
, promo_id       NUMBER(6)
, quantity_sold  NUMBER(3)
, amount_sold         NUMBER(10,2)
)
PARTITION BY RANGE (time_id)
(PARTITION SALES_Q1_1998 VALUES LESS THAN (TO_DATE('01-APR-1998','DD-MON-YYYY')),
PARTITION SALES_Q2_1998 VALUES LESS THAN (TO_DATE('01-JUL-1998','DD-MON-YYYY')),
PARTITION SALES_Q3_1998 VALUES LESS THAN (TO_DATE('01-OCT-1998','DD-MON-YYYY')),
PARTITION SALES_Q4_1998 VALUES LESS THAN (TO_DATE('01-JAN-1999','DD-MON-YYYY')),
PARTITION SALES_Q1_1999 VALUES LESS THAN (TO_DATE('01-APR-1999','DD-MON-YYYY')),
PARTITION SALES_Q2_1999 VALUES LESS THAN (TO_DATE('01-JUL-1999','DD-MON-YYYY')),
PARTITION SALES_Q3_1999 VALUES LESS THAN (TO_DATE('01-OCT-1999','DD-MON-YYYY')),
PARTITION SALES_Q4_1999 VALUES LESS THAN (TO_DATE('01-JAN-2000','DD-MON-YYYY')),
PARTITION SALES_Q1_2000 VALUES LESS THAN (TO_DATE('01-APR-2000','DD-MON-YYYY')),
PARTITION SALES_Q2_2000 VALUES LESS THAN (TO_DATE('01-JUL-2000','DD-MON-YYYY')),
PARTITION SALES_Q3_2000 VALUES LESS THAN (TO_DATE('01-OCT-2000','DD-MON-YYYY')),
PARTITION SALES_Q4_2000 VALUES LESS THAN (MAXVALUE))
;

パーティション表のメンテナンス操作については、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

時間隔パーティションの例: 次の例は、credit_limit列の期間によってパーティション化されるoe.customers表を作成します。遷移ポイントを設定するために1つのレンジ・パーティションが作成されます。表内の元のデータはすべてレンジ・パーティションの境界内にあります。次に、レンジ・パーティションを超えるデータが追加され、新しい時間隔パーティションが作成されます。

CREATE TABLE customers_demo (
customer_id number(6),
cust_first_name varchar2(20),
cust_last_name varchar2(20),
credit_limit number(9,2))
PARTITION BY RANGE (credit_limit)
INTERVAL (1000)
(PARTITION p1 VALUES LESS THAN (5001));

INSERT INTO customers_demo
(customer_id, cust_first_name, cust_last_name, credit_limit)
(select customer_id, cust_first_name, cust_last_name, credit_limit
from customers);

USER_TAB_PARTITIONSデータ・ディクショナリ・ビューを問い合せてから、時間隔パーティションが作成されます。

SELECT partition_name, high_value FROM user_tab_partitions  WHERE table_name = 'CUSTOMERS_DEMO';

PARTITION_NAME                 HIGH_VALUE
------------------------------ ---------------
P1                             5001

レンジ・パーティションの上限を超えるデータを表に挿入します。

INSERT INTO customers_demo
VALUES (699, 'Fred', 'Flintstone', 5500);

挿入後にUSER_TAB_PARTITIONSビューを再度問い合せ、挿入されたデータを格納するために作成された時間隔パーティションのシステム生成名を確認します。(システム生成名はセッションごとに異なります。)

SELECT partition_name, high_value FROM user_tab_partitions
WHERE table_name = 'CUSTOMERS_DEMO'
ORDER BY partition_name;

PARTITION_NAME                 HIGH_VALUE
------------------------------ ---------------
P1                             5001
SYS_P44                        6001

リスト・パーティション化の例: 次の文は、サンプル表oe.customersをリスト・パーティション表として作成します。この例では、サンプル表の一部の列およびすべての制約は省略されています。

CREATE TABLE list_customers
( customer_id             NUMBER(6)
, cust_first_name         VARCHAR2(20)
, cust_last_name          VARCHAR2(20)
, cust_address            CUST_ADDRESS_TYP
, nls_territory           VARCHAR2(30)
, cust_email              VARCHAR2(40))
PARTITION BY LIST (nls_territory) (
PARTITION asia VALUES ('CHINA', 'THAILAND'),
PARTITION europe VALUES ('GERMANY', 'ITALY', 'SWITZERLAND'),
PARTITION west VALUES ('AMERICA'),
PARTITION east VALUES ('INDIA'),
PARTITION rest VALUES (DEFAULT));

LOB列のあるパーティション表の例: 次の文は、2つのパーティションp1とp2、およびいくつかのLOB列を持つパーティション表print_media_demoを作成します。この文では、サンプル表pm.print_mediaを使用しています。

CREATE TABLE print_media_demo
( product_id NUMBER(6)
, ad_id NUMBER(6)
, ad_composite BLOB
, ad_sourcetext CLOB
, ad_finaltext CLOB
, ad_fltextn NCLOB
, ad_textdocs_ntab textdoc_tab
, ad_photo BLOB
, ad_graphic BFILE
, ad_header adheader_typ
) NESTED TABLE ad_textdocs_ntab STORE AS textdocs_nestedtab_demo
LOB (ad_composite, ad_photo, ad_finaltext)
STORE AS(STORAGE (INITIAL 20M))
PARTITION BY RANGE (product_id)
(PARTITION p1 VALUES LESS THAN (3000) TABLESPACE tbs_01
LOB (ad_composite, ad_photo)
STORE AS (TABLESPACE tbs_02 STORAGE (INITIAL 10M))
NESTED TABLE ad_textdocs_ntab STORE AS nt_p1 (TABLESPACE example),
PARTITION P2 VALUES LESS THAN (MAXVALUE)
LOB (ad_composite, ad_finaltext)
STORE AS SECUREFILE (TABLESPACE auto_seg_ts)
NESTED TABLE ad_textdocs_ntab STORE AS nt_p2
)
TABLESPACE tbs_03;

パーティションp1は、表領域tbs_01にあります。ad_compositeおよびad_photoに対するLOBデータのパーティションは、表領域tbs_02にあります。残りのLOB列に対するLOBデータのパーティションは、表領域tbs_01にあります。LOB列ad_compositeおよびad_photoに、記憶域属性INITIALを指定します。他の属性は、デフォルトの表レベルの指定から継承されます。表レベルで指定されていないデフォルトのLOB記憶域属性は、ad_composite列およびad_photo列については表領域tbs_02から継承されます。残りのLOB列については、表領域tbs_01から継承されます。LOB索引パーティションは、対応するLOBデータ・パーティションと同じ表領域に存在します。他の記憶域属性は、LOBデータ・パーティションの対応する属性値および索引パーティションがある表領域のデフォルト属性に基づきます。ad_textdocs_ntabのネストされた表パーティションは、nt_p1として表領域exampleに格納されます。

パーティションp2は、デフォルトの表領域tbs_03内にあります。ad_compositeおよびad_finaltextに対するLOBデータは、SecureFiles LOBとして表領域auto_seg_ts内に存在します。残りのLOB列に対するLOBデータは、表領域tbs_03にあります。ad_composite列およびad_finaltext列に対するLOB索引は、表領域auto_seg_ts内にあります。残りのLOB列に対するLOB索引は、表領域tbs_03にあります。ad_textdocs_ntabのネストされた表パーティションは、nt_p2としてデフォルト表領域tbs_03に格納されます。

ハッシュ・パーティション化の例: サンプル表oe.product_informationは、パーティション化されていません。次の例は、パフォーマンス上の理由で、このような大規模な表をハッシュでパーティション化します。この例では、表領域は仮想の名前です。

CREATE TABLE hash_products
( product_id          NUMBER(6)   PRIMARY KEY
, product_name        VARCHAR2(50)
, product_description VARCHAR2(2000)
, category_id         NUMBER(2)
, weight_class        NUMBER(1)
, warranty_period     INTERVAL YEAR TO MONTH
, supplier_id         NUMBER(6)
, product_status      VARCHAR2(20)
, list_price          NUMBER(8,2)
, min_price           NUMBER(8,2)
, catalog_url         VARCHAR2(50)
, CONSTRAINT          product_status_lov_demo
CHECK (product_status in ('orderable'
,'planned'
,'under development'
,'obsolete')
) )
PARTITION BY HASH (product_id)
PARTITIONS 4
STORE IN (tbs_01, tbs_02, tbs_03, tbs_04);

参照パーティション化の例 次の文では、前述の例で作成されたhash_productsパーティション表を使用しています。hash_productsの製品IDに基づくハッシュ・パーティション化への参照によってパーティション化されたoe.order_items表を作成します。結果の子表は、5つのパーティションで作成されます。子表part_order_itemsの各行について、外部キー値(product_id)が評価され、参照されるキーが属する親表hash_productsのパーティション番号が確認されます。part_order_itemsの行は、対応するパーティションに配置されます。

CREATE TABLE part_order_items (
order_id        NUMBER(12) PRIMARY KEY,
line_item_id    NUMBER(3),
product_id      NUMBER(6) NOT NULL,
unit_price      NUMBER(8,2),
quantity        NUMBER(8),
CONSTRAINT product_id_fk
FOREIGN KEY (product_id) REFERENCES hash_products(product_id))
PARTITION BY REFERENCE (product_id_fk);

コンポジット・パーティション表の例: 次の例は、表(「レンジ・パーティション化の例:」で作成)のデータを販売時刻で分割します。時刻と販売チャネルに従って最近のデータにアクセスする場合、コンポジット・パーティション化は、より適切です。次の例では、同じrange_sales表のコピーを作成しますが、レンジ-ハッシュ・コンポジット・パーティション化を指定します。最新のデータがあるパーティションは、システム生成とユーザー定義の両方のサブパーティション名でサブパーティション化されます。この例では、制約および記憶域属性は省略されています。

CREATE TABLE composite_sales
( prod_id        NUMBER(6)
, cust_id        NUMBER
, time_id        DATE
, channel_id     CHAR(1)
, promo_id       NUMBER(6)
, quantity_sold  NUMBER(3)
, amount_sold         NUMBER(10,2)
)
PARTITION BY RANGE (time_id)
SUBPARTITION BY HASH (channel_id)
(PARTITION SALES_Q1_1998 VALUES LESS THAN (TO_DATE('01-APR-1998','DD-MON-YYYY')),
PARTITION SALES_Q2_1998 VALUES LESS THAN (TO_DATE('01-JUL-1998','DD-MON-YYYY')),
PARTITION SALES_Q3_1998 VALUES LESS THAN (TO_DATE('01-OCT-1998','DD-MON-YYYY')),
PARTITION SALES_Q4_1998 VALUES LESS THAN (TO_DATE('01-JAN-1999','DD-MON-YYYY')),
PARTITION SALES_Q1_1999 VALUES LESS THAN (TO_DATE('01-APR-1999','DD-MON-YYYY')),
PARTITION SALES_Q2_1999 VALUES LESS THAN (TO_DATE('01-JUL-1999','DD-MON-YYYY')),
PARTITION SALES_Q3_1999 VALUES LESS THAN (TO_DATE('01-OCT-1999','DD-MON-YYYY')),
PARTITION SALES_Q4_1999 VALUES LESS THAN (TO_DATE('01-JAN-2000','DD-MON-YYYY')),
PARTITION SALES_Q1_2000 VALUES LESS THAN (TO_DATE('01-APR-2000','DD-MON-YYYY')),
PARTITION SALES_Q2_2000 VALUES LESS THAN (TO_DATE('01-JUL-2000','DD-MON-YYYY'))
SUBPARTITIONS 8,
PARTITION SALES_Q3_2000 VALUES LESS THAN (TO_DATE('01-OCT-2000','DD-MON-YYYY'))
(SUBPARTITION ch_c,
SUBPARTITION ch_i,
SUBPARTITION ch_p,
SUBPARTITION ch_s,
SUBPARTITION ch_t),
PARTITION SALES_Q4_2000 VALUES LESS THAN (MAXVALUE)
SUBPARTITIONS 4)
;

次の例は、サンプル表oe.customersに基づいて、顧客のパーティション表を作成します。この例では、表はcredit_limit列でパーティション化され、nls_territory列でリスト・サブパーティション化されます。個々のサブパーティションを定義してテンプレートを上書きしないかぎり、サブパーティション・テンプレートによって、後から追加されたパーティションのサブパーティション化が決定されます。このコンポジット・パーティション化によって、指定した地域内の掛貸限度範囲に基づいて、表を問い合せることができます。

CREATE TABLE customers_part (
customer_id        NUMBER(6),
cust_first_name    VARCHAR2(20),
cust_last_name     VARCHAR2(20),
nls_territory      VARCHAR2(30),
credit_limit       NUMBER(9,2))
PARTITION BY RANGE (credit_limit)
SUBPARTITION BY LIST (nls_territory)
SUBPARTITION TEMPLATE
(SUBPARTITION east  VALUES
('CHINA', 'JAPAN', 'INDIA', 'THAILAND'),
SUBPARTITION west VALUES
('AMERICA', 'GERMANY', 'ITALY', 'SWITZERLAND'),
SUBPARTITION other VALUES (DEFAULT))
(PARTITION p1 VALUES LESS THAN (1000),
PARTITION p2 VALUES LESS THAN (2500),
PARTITION p3 VALUES LESS THAN (MAXVALUE));

オブジェクト列と表の例

オブジェクト表の作成例: 次の文は、オブジェクト型department_typを指定します。

CREATE TYPE department_typ AS OBJECT
( d_name   VARCHAR2(100),
d_address VARCHAR2(200) );
/

オブジェクト表departments_obj_tは、department_typ型の部門オブジェクトを保持します。

CREATE TABLE departments_obj_t OF department_typ;

次の文は、ユーザー定義オブジェクト型salesrep_typを持つオブジェクト表salesrepsを作成します。

CREATE OR REPLACE TYPE salesrep_typ AS OBJECT
( repId NUMBER,
repName VARCHAR2(64));

CREATE TABLE salesreps OF salesrep_typ;

ユーザー定義のオブジェクト識別子を含む表の作成例: 次の文は、オブジェクト型およびオブジェクト識別子が主キー・ベースの対応するオブジェクト表を作成します。

CREATE TYPE employees_typ AS OBJECT
(e_no NUMBER, e_address CHAR(30));
/

CREATE TABLE employees_obj_t OF employees_typ (e_no PRIMARY KEY)
OBJECT IDENTIFIER IS PRIMARY KEY;

その後、inline_ref_constraint構文またはout_of_line_ref_constraint構文のいずれかを使用して、employees_obj_tオブジェクト表を参照できます。

CREATE TABLE departments_t
(d_no    NUMBER,
mgr_ref REF employees_typ SCOPE IS employees_obj_t);

CREATE TABLE departments_t (
d_no NUMBER,
mgr_ref REF employees_typ
CONSTRAINT mgr_in_emp REFERENCES employees_obj_t);

タイプ列での制約の指定例: 次の例は、オブジェクト型の列の属性に制約を定義します。

CREATE TYPE address_t AS OBJECT
( hno    NUMBER,
street VARCHAR2(40),
city   VARCHAR2(20),
zip    VARCHAR2(5),
phone  VARCHAR2(10) );
/

CREATE TYPE person AS OBJECT
( name        VARCHAR2(40),
dateofbirth DATE,
homeaddress address_t,
manager     REF person );
/

CREATE TABLE persons OF person
( homeaddress NOT NULL,
UNIQUE (homeaddress.phone),
CHECK (homeaddress.zip IS NOT NULL),
CHECK (homeaddress.city <> 'San Francisco') );

CREATE TABLESPACE

用途

CREATE TABLESPACE文を使用すると、表領域を作成できます。表領域とは、スキーマ・オブジェクトを格納する、データベース内に割り当てられた領域です。

- 永続表領域には、永続スキーマ・オブジェクトが格納されます。永続表領域のオブジェクトは、データファイルに格納されます。

- UNDO表領域は、データベースを自動UNDO管理モードで実行している場合にOracle DatabaseがUNDOデータを管理するために使用する永続表領域です。UNDOには、ロールバック・セグメントではなく、自動UNDO管理モードを使用することをお薦めします。

- 一時表領域には、セッションの存続期間中のみ、スキーマ・オブジェクトが格納されます。一時表領域のオブジェクトは、一時ファイルに格納されます。

表領域は、最初は読み書き両用として作成されます。その後、ALTER TABLESPACE文でその表領域をオフラインまたはオンラインに設定したり、表領域にデータファイルや一時ファイルを追加したり、読取り専用に設定することができます。

DROP TABLESPACE文を使用して、データベースから表領域を削除することもできます。

関連項目:

- 表領域については、『Oracle Database概要』を参照してください。

- 表領域の変更および削除の詳細は、「ALTER TABLESPACE」および「DROP TABLESPACE」を参照してください。

追加トピック

- 前提条件

- 構文

- セマンティクス

- 例

前提条件

CREATE TABLESPACEシステム権限が必要です。SYSAUX表領域を作成する場合は、SYSDBAシステム権限が必要です。

表領域を作成する場合、表領域を格納するデータベースを作成する必要があります。また、そのデータベースをオープンしておく必要もあります。

関連項目:
「CREATE DATABASE」

SYSTEM以外の表領域のオブジェクトを使用する場合は、次の注意事項があります。

- 自動UNDO管理モードでデータベースを実行するには、1つ以上のUNDO表領域がオンラインである必要があります。

- 手動UNDO管理モードのデータベースを実行するには、SYSTEMロールバック・セグメント以外の1つ以上のロールバック・セグメントがオンラインである必要があります。

注意:
データベースを自動UNDO管理モードで実行することをお薦めします。詳細は、『Oracle Database管理者ガイド』を参照してください。

構文

create_tablespace::=

(permanent_tablespace_clause::=、temporary_tablespace_clause::=、undo_tablespace_clause::=を参照)

permanent_tablespace_clause::=

注意:
DEFAULT句を指定する場合、table_compression、inmemory_clause、ilm_clauseまたはstorage_clause句のいずれかを指定する必要があります。

(file_specification::=、size_clause::=、logging_clause ::=、tablespace_encryption_spec::=、table_compression::=—CREATE TABLEの部分、inmemory_clause::=、ilm_clause::=—CREATE TABLEの部分、storage_clause::=、extent_management_clause ::=、segment_management_clause ::=、flashback_mode_clause ::=を参照)

logging_clause::=

tablespace_encryption_spec::=

inmemory_clause::=

inmemory_parameters::=

(inmemory_memcompress::=、inmemory_priority::=、inmemory_distribute::=、inmemory_duplicate::=)

inmemory_memcompress::=

inmemory_priority::=

inmemory_distribute::=

inmemory_duplicate::=

extent_management_clause::=

(size_clause::=を参照)

segment_management_clause::=

flashback_mode_clause ::=

temporary_tablespace_clause::=

(file_specification::=、tablespace_group_clause、extent_management_clause ::=を参照)

tablespace_group_clause::=

undo_tablespace_clause::=

(file_specification::=、extent_management_clause ::=、tablespace_retention_clause ::=を参照)

tablespace_retention_clause::=

セマンティクス

BIGFILE | SMALLFILE

この句を使用すると、表領域がbigfileかsmallfileかを指定できます。この句は、データベースのデフォルトの表領域タイプの設定を上書きします。

- bigfile表領域に格納されるのは、1つのデータファイルまたは一時ファイルのみであり、このファイルには最大約40億(2^32)ブロックを格納できます。データファイルまたは一時ファイル1つ当たりの最小サイズは、32Kブロックの表領域の場合は12MB、8Kブロックの表領域の場合は7MBです。データファイルまたは一時ファイル1つ当たりの最大サイズは、32Kブロックの表領域の場合は128TB、8Kブロックの表領域の場合は32TBです。

- smallfile表領域は、Oracleの従来の表領域であり、1022のデータファイルまたは一時ファイルを含めることができます。それぞれのファイルは、最大で約400万(2^22)のブロックを格納できます。

この句を省略した場合、データベースに設定された永続表領域または一時表領域の、現在のデフォルト表領域タイプが使用されます。永続表領域にBIGFILEを指定すると、デフォルトで、自動セグメント領域管理のローカル管理表領域が作成されます。

bigfile表領域の制限事項 DATAFILE句に1つのみのデータファイルを指定するか、またはTEMPFILE句に1つのみの一時ファイルを指定できます。

関連項目:

- bigfile表領域の使用の詳細は、『Oracle Database管理者ガイド』を参照してください。

- 「bigfile表領域の作成例:」

permanent_tablespace_clause

次の句を使用すると、永続表領域を作成できます。(これらの句の一部は、一時表領域またはUNDO表領域の作成にも使用されます。)

tablespace

作成する表領域の名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。

SYSAUX表領域の注意事項

SYSAUXは、必須の補助システム表領域です。Oracle Database 11gより以前のリリースからアップグレードする場合は、CREATE TABLESPACE文を使用してSYSAUX表領域を作成する必要があります。この句を指定するには、SYSDBAシステム権限が必要となり、また、データベースをUPGRADEモードでオープンしておく必要があります。

SYSAUX表領域には、EXTENT MANAGEMENT LOCALおよびSEGMENT SPACE MANAGEMENT AUTOを指定する必要があります。DATAFILE句は、Oracle Managed Filesが使用可能になっている場合のみのオプションです。DATAFILE句の動作については、「DATAFILE | TEMPFILE句」を参照してください。

SYSAUX表領域には十分な領域を割り当ててください。この表領域の作成のガイドラインは、『Oracle Databaseアップグレード・ガイド』を参照してください。

SYSAUX表領域の制限事項: SYSAUX表領域にOFFLINEまたはTEMPORARYを指定することはできません。

DATAFILE | TEMPFILE句

永続表領域を構成するデータファイルを指定するか、または一時表領域を構成する一時ファイルを指定します。オペレーティング・システムのファイル・システム内の標準データファイルと一時ファイル、またはOracle Automatic Storage Management (Oracle ASM)ディスク・グループのファイルを作成するには、file_specificationのdatafile_tempfile_spec書式を使用します。

DB_CREATE_FILE_DEST初期化パラメータに値を設定してOracle Managed Filesを使用可能にしていないかぎり、DATAFILEまたはTEMPFILE句を指定する必要があります。Oracle ASMディスク・グループ・ファイルの場合、このパラメータをOracle ASMファイル名の複数ファイル作成形式に設定する必要があります。このパラメータが設定されている場合、パラメータで指定したデフォルトのファイルの出力先に、100MBのファイルがシステム名で作成されます。このファイルではAUTOEXTENDが有効になっているため、最大サイズの制限はありません。

注意:
メディア・リカバリは一時ファイルを認識しません。

関連項目:

- Oracle ASMの使用方法の詳細は、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

- AUTOEXTENDパラメータやOracle ASMファイル名の複数ファイル作成形式などの詳細は、「file_specification」を参照してください。

データファイルおよび一時ファイルの指定の注意事項:

- datafile_tempfile_specでディスク・グループ名のみを指定すると、Oracle ASMディスク・グループ内に表領域を作成できます。この場合、Oracle ASMにより指定したディスク・グループにデータファイルが作成され、システム生成のファイル名が付けられます。データファイルは無制限に自動拡張可能です。デフォルト・サイズは100MBです。autoextend_clauseを使用すると、デフォルト・サイズを上書きできます。

- 既存のファイルを参照するASM_filenameの参照形式の1つを使用する場合、REUSEも指定する必要があります。

注意:
オペレーティング・システムによっては、一時ファイルのブロックが実際にアクセスされるまで、一時ファイル用の領域が割り当てられない場合があります。領域の割当ての遅延のため、一時ファイルの作成およびサイズ変更が速くなります。ただし、後で一時ファイルが使用されるときに、十分なディスク領域を使用可能にする必要があります。問題を回避するには、一時ファイルの作成またはサイズ変更の前に、ディスクの空き領域が、新しく作成する一時ファイルまたはサイズ変更後の一時ファイルのサイズよりも大きいことを確認してください。ディスク領域に余裕を持たせておくと、関連のない操作による、予期されるディスク使用量の増加にも対応できます。その後で、作成またはサイズ変更操作を実行してください。

関連項目:

- AUTOEXTENDパラメータなどの詳細は、「file_specification」を参照してください。

- 「表領域の自動拡張を使用可能にする場合の例:」および「Oracle Managed Filesの作成例:」を参照してください。

MINIMUM EXTENT句

この句は、ディクショナリ管理表領域にのみ有効です。表領域で使用されるエクステントの最小サイズを指定します。この句を指定すると、表領域内のすべての使用済エクステントまたは未使用エクステントのサイズが、size_clauseで指定された値以上であること、およびその倍数であることが保証され、表領域における空き領域の断片化を制御できます。

関連項目:
この句の詳細は、「size_clause」を参照してください。MINIMUM EXTENTを使用した断片化の制御については、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

BLOCKSIZE句

表領域の非標準ブロック・サイズを指定するには、BLOCKSIZE句を使用します。この句を指定するには、DB_CACHE_SIZEと少なくとも1つのDB_nK_CACHE_SIZEパラメータを設定する必要があります。また、この句で指定する整数は、DB_nK_CACHE_SIZEパラメータの1つの設定と対応している必要があります。

BLOCKSIZEの制限事項: 一時表領域の場合、または表領域を一時表領域として任意のユーザーに割り当てる場合は、標準以外のブロック・サイズを指定できません。

注意:
パフォーマンスが低下する可能性があるため、セクター・サイズが4Kのディスクにはブロック・サイズが2Kの表領域を格納しないことをお薦めします。

関連項目:
DB_nK_CACHE_SIZEパラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。マルチ・ブロック・サイズの詳細は、『Oracle Database概要』を参照してください。

logging_clause

表領域内のすべての表、索引、マテリアライズド・ビュー、マテリアライズド・ビュー・ログおよびパーティションのデフォルトのロギング属性を指定します。この句は、一時表領域またはUNDO表領域では無効です。

この句を指定しない場合、LOGGINGがデフォルトになります。例外は、PDBの表領域の作成です。この場合、この句を省略すると、表領域はPDBのロギング属性を使用します。詳細は、CREATE PLUGGABLE DATABASEのlogging_clauseを参照してください。

表レベル、索引レベル、マテリアライズド・ビュー・レベル、マテリアライズド・ビュー・ログ・レベル、パーティション・レベルでのロギングを指定することで、表領域レベルのロギング属性を上書きできます。

関連項目:
この句の詳細は、「logging_clause」を参照してください。

FORCE LOGGING

この句を使用すると、表領域はFORCE LOGGINGモードになります。一時セグメントへの変更を除き、表領域内のすべてのオブジェクトに対するすべての変更が記録され、個々のオブジェクトのNOLOGGING設定が上書きされます。データベースをオープンし、READ WRITEモードにしておく必要があります。

この設定によって、NOLOGGING属性が削除されることはありません。FORCE LOGGINGとNOLOGGINGの両方を指定できます。この場合、後から表領域に作成されるオブジェクトのデフォルト・ロギング・モードはNOLOGGINGになりますが、表領域またはデータベースがFORCE LOGGINGモードの場合、このデフォルト値は無視されます。この表領域でFORCE LOGGINGモードを無効にすると、デフォルト値であるNOLOGGINGが再度適用されます。

注意:
FORCE LOGGINGモードは、パフォーマンスに影響する場合があります。この設定を使用する状況の詳細は、『Oracle Database管理者ガイド』を参照してください。

強制ロギングの制限事項: FORCE LOGGINGは、UNDO表領域および一時表領域に対して指定できません。

ENCRYPTION句

この句を使用すると、表領域の暗号化プロパティを指定できます。実際は、この句によって表領域が暗号化されるわけではありません。表領域を暗号化するには、この文のDEFAULT storage_clauseの一部としてENCRYPTキーワードも指定する必要があります。また、ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY ...を使用して、インスタンスの期間中にTDEマスター鍵をデータベース・メモリーにすでにロードしているか、またはHSMへの接続を確立して、暗号化された表と表領域のキーをHSMに送信し、それらを復号化したものを受け取っている必要があります。詳細は、「SET ENCRYPTION WALLET句」を参照してください。

注意:
暗号化を使用して作成された表領域は復号化できません。暗号化されていない表領域を作成し、暗号化されていない表領域にデータベース・オブジェクトを再作成する必要があります。

tablespace_encryption_spec: USING 'encrypt_algorithm'を指定して、使用する暗号化アルゴリズムの名前を示します。有効なアルゴリズムは、AES256、AES192、AES128および3DES168です。この句を省略すると、AES128が使用されます。

関連項目:
「暗号化された表領域の作成例:」

DEFAULT句

DEFAULT句を使用すると、表領域のデフォルト・パラメータを指定できます。

table_compression table_compression句を使用して、表領域で作成されるすべての表のデフォルトのデータ圧縮を指定します。この句は、一時表領域では無効です。この句のセマンティクスの詳細は、「CREATE TABLE」の句「table_compression」を参照してください。

inmemory_clause inmemory_clauseを使用して、表領域で作成されたすべての表およびマテリアライズド・ビューのデフォルトのインメモリー列ストア(IM列ストア)設定を指定します。この句は、一時表領域では無効です。

- INMEMORYを指定して、IM列ストアのすべての表およびマテリアライズド・ビューを有効化します。
オプションでinmemory_parameters句を使用して、表またはマテリアライズド・ビューのデータをIM列ストアに格納する方法を指定できます。inmemory_parameters句は、CREATE TABLEおよびCREATE TABLESPACEと同じセマンティクスを持ちます。この句のセマンティクスの詳細は、CREATE TABLEのinmemory_parametersを参照してください。

- NO INMEMORYを指定して、IM列ストアのすべての表およびマテリアライズド・ビューを無効化します。これはデフォルトです。

ilm_clause ilm_clauseを使用して、表領域で作成されたすべての表のデフォルトの自動データ最適化設定を指定します。この句は、一時表領域では無効です。この句のセマンティクスの詳細は、CREATE TABLEのilm_clauseを参照してください。

storage_clause storage_clauseを使用して、表領域で作成されるすべてのオブジェクトの記憶域パラメータを指定します。この句は、一時表領域またはローカル管理の表領域に対しては無効です。ディクショナリ管理表領域の場合、この句ではENCRYPT、INITIAL、NEXT、MINEXTENTS、MAXEXTENTS、MAXSIZEおよびPCTINCREASE記憶域パラメータを指定できます。詳細は、「storage_clause」を参照してください。

関連項目:
「基本的な一時表領域の作成例:」

ONLINE | OFFLINE句

この句を使用すると、表領域がオンラインまたはオフラインのいずれであるかを決定できます。この句は、一時表領域では無効です。

ONLINE ONLINEを指定すると、表領域に対するアクセス権限を付与されているユーザーに対して、作成直後の表領域を使用可能にできます。これはデフォルトです。

OFFLINE OFFLINEを指定すると、作成直後の表領域を使用禁止にできます。

データ・ディクショナリ・ビューDBA_TABLESPACESは、各表領域がオンラインまたはオフラインのいずれであるかを示します。

extent_management_clause

extent_management_clauseを使用すると、表領域のエクステントの管理方法を指定できます。

注意:
この句でエクステントの管理を指定した後は、表領域を移行しないかぎり、エクステントの管理を変更できません。

- AUTOALLOCATEを指定すると、表領域がシステム管理されます。ユーザーはエクステント・サイズを指定できません。AUTOALLOCATEは、一時表領域に対して指定できません。

- UNIFORMを指定すると、表領域をSIZEバイトの均一のエクステントで管理できます。SIZEのデフォルト値は1MBです。一時表領域のすべてのエクステントはサイズが均一であるため、このキーワードは一時表領域ではオプションです。ただし、SIZEを指定する場合は、UNIFORMを指定する必要があります。UNDO表領域にUNIFORMを指定することはできません。

AUTOALLOCATEまたはUNIFORMを指定しない場合のデフォルトは、一時表領域ではUNIFORM、他のすべてのタイプの表領域ではAUTOALLOCATEです。

extent_management_clauseを指定しない場合、MINIMUM EXTENT句およびDEFAULT storage_clauseが解析され、エクステント管理が判断されます。

注意:
DICTIONARYキーワードは、非推奨になる予定です。これは、下位互換性を保つためにのみサポートされています。ただし、ローカル管理表領域を作成することをお薦めします。ローカル管理表領域は、ディクショナリ管理表領域より非常に効率的に管理されます。新しいディクショナリ管理表領域の作成は、サポートされなくなる予定です。

関連項目:
ローカル管理表領域については、『Oracle Database概要』を参照してください。

エクステント管理の制限事項: エクステント管理には、次の制限事項があります。

- 永続的なローカル管理表領域には、永続オブジェクトのみを格納できます。ローカル管理表領域に一時オブジェクトを格納する必要がある場合(たとえば、ユーザーの一時表領域に割り当てる場合)は、temporary_tablespace_clauseを使用します。

- この句を指定する場合、DEFAULT storage_clause、MINIMUM EXTENTまたはtemporary_tablespace_clauseは指定できません。

関連項目:
表領域の移行によってエクステントの管理を変更する場合は、『Oracle Database管理者ガイド』および「ローカル管理表領域の作成例:」を参照してください。

segment_management_clause

segment_management_clauseは、永続的なローカル管理表領域に対してのみ有効です。Oracle Databaseが、空きリストまたはビットマップのどちらを使用して、表領域のセグメントにある使用済領域および空き領域を追跡するかを指定できます。この句は、一時表領域では無効です。

AUTO AUTOを指定すると、ビットマップを使用して表領域のセグメントにある空き領域を管理できます。AUTOを指定すると、この表領域のオブジェクトに対して後で指定する記憶域のPCTUSED、FREELISTおよびFREELIST GROUPSの値は無視されます。この設定を自動セグメント領域管理といい、これがデフォルトです。

MANUAL MANUALを指定すると、空きリストを使用して表領域のセグメントにある空き領域を管理できます。この設定は使用しないようにして、自動セグメント領域の表領域を作成することを強くお薦めします。

既存の表領域のセグメント管理を確認するには、DBA_TABLESPACESまたはUSER_TABLESPACESデータ・ディクショナリ・ビューのSEGMENT_SPACE_MANAGEMENT列を問い合せます。

注意:
AUTOセグメント管理を指定する場合、次のことに注意します。

- エクステント管理をLOCAL UNIFORMに設定する場合は、各エクステントに5以上のデータベース・ブロックがあることを確認する必要があります。

- エクステント管理をLOCAL AUTOALLOCATEに設定する場合、およびデータベースのブロック・サイズが16KB以上の場合は、最小で5ブロック(64KBに切り上げられる)のエクステントが作成され、セグメント領域管理が管理されます。

自動セグメント領域管理の制限事項 この句には、次の制限事項があります。

- この句は、永続的なローカル管理表領域に対してのみ指定できます。

- この句は、SYSTEM表領域に対して指定できません。

関連項目:

- 自動セグメント領域管理およびその使用については、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

- データ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

- 「表領域に対してセグメント領域管理を指定する場合の例:」

flashback_mode_clause

この句をALTER DATABASE FLASHBACK句と組み合せて使用すると、FLASHBACK DATABASE操作に表領域を使用できるかどうかを指定できます。この句は、データベースがFLASHBACKモードでオープンされているときに、この表領域のフラッシュバック・ログ・データを保持しない場合に便利です。

この句は、一時表領域またはUNDO表領域では無効です。

FLASHBACK ON FLASHBACK ONを指定すると、表領域でFLASHBACKモードを有効にできます。この表領域のフラッシュバック・ログ・データが保存され、FLASHBACK DATABASE操作でこの表領域を使用できるようになります。flashback_mode_clauseを指定しない場合、デフォルトでFLASHBACK ONが指定されます。

FLASHBACK OFF FLASHBACK OFFを指定すると、表領域でFLASHBACKモードを無効にできます。この表領域のフラッシュバック・ログ・データは保存されません。FLASHBACK DATABASE操作の実行前に、この表領域のデータファイルをオフラインにするか、または削除する必要があります。または、表領域全体をオフラインにすることもできます。どちらの場合も、既存のフラッシュバック・ログは削除されません。

注意:
表領域のFLASHBACKモードは、個々の表のFLASHBACKモードに依存しません。

関連項目:

- Oracle Flashback Databaseの詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

- データベース全体をFLASHBACKモードに設定し、データベースを以前のバージョンに戻す方法の詳細は、「ALTER DATABASE」および「FLASHBACK DATABASE」を参照してください。

- 「FLASHBACK TABLE」および「flashback_query_clause」を参照してください。

temporary_tablespace_clause

この句を使用すると、ローカル管理一時表領域を作成できます。一時表領域は、セッションの存続期間中にのみ保持される一時データを格納できるデータベース内の領域割当てです。プロセスまたはインスタンスに障害が発生した場合、この一時データをリカバリすることはできません。

一時データとは、一時表などのユーザー生成スキーマ・オブジェクト、またはハッシュ結合およびソート操作で使用される一時領域などのシステム生成データです。一時表領域、またはこの表領域が含まれる表領域グループを特定のユーザーに割り当てると、このユーザーによって開始されるトランザクションでのソート操作にこの表領域が使用されます。

TEMPFILE句の詳細は、「DATAFILE | TEMPFILE句」を参照してください。extent_management_clauseの詳細は、「extent_management_clause」を参照してください。

関連項目:
ユーザーに対する一時表領域の割当ての詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

tablespace_group_clause

この句は、一時表領域に対してのみ有効です。この句を使用すると、tablespaceが表領域グループに含まれるかどうかを決定できます。表領域グループを使用すると、複数の一時表領域を1人のユーザーに割り当て、一時表領域のアクセス性を向上できます。

- グループ名を指定すると、tablespaceがその表領域グループのメンバーであることを示すことができます。グループ名にtablespaceまたは他の既存の表領域と同じ名前を指定することはできません。表領域グループがすでに存在する場合、そのグループに新しい表領域が追加されます。表領域グループが存在しない場合、グループが作成され、そのグループに新しい表領域が追加されます。

- 空の文字列(' ')を指定すると、tablespaceがいずれの表領域グループにも属さないことを示すことができます。

関連項目:

- 表領域グループへの表領域の追加の詳細は、「ALTER TABLESPACE」および「表領域グループへの一時表領域の追加例:」を参照してください。

- ユーザーに対する一時表領域の割当てについては、「CREATE USER」を参照してください。

- 表領域グループの詳細は、『Oracle Database管理者ガイド』を参照してください。

一時表領域の制限事項: 一時表領域に格納されたデータは、セッションの存続期間中のみ保持されます。そのため、CREATE TABLESPACE句のサブセットのみが一時表領域に対して有効です。一時表領域に対して指定できるのは、TEMPFILE句、tablespace_group_clauseおよびextent_management_clauseのみです。

undo_tablespace_clause

UNDOを指定すると、UNDO表領域を作成できます。自動UNDO管理モードでデータベースを実行する場合、Oracle Databaseは、ロールバック・セグメントのかわりにUNDO表領域を使用してUNDO領域を管理します。この句は、自動UNDO管理モードで作成しなかったデータベースを自動UNDO管理モードで実行している場合に便利です。

自動UNDO管理モードでデータベースを起動すると、UNDO表領域が割り当てられます。UNDO表領域がインスタンスに割り当てられない場合、SYSTEMロールバック・セグメントが使用されます。UNDO表領域の作成によってこれを回避することができ、他のUNDO表領域がその時点で割り当てられていない場合、インスタンスに暗黙的に割り当てられます。

DATAFILE句の詳細は、「DATAFILE | TEMPFILE句」を参照してください。

extent_management_clause

UNDO表領域を作成するときにはextent_management_clauseを指定する必要はありません。これは、UNDO表領域が、AUTOALLOCATEエクステント管理を使用するローカル管理表領域である必要があるためです。この句を指定する場合は、EXTENT MANAGEMENT LOCALまたはEXTENT MANAGEMENT LOCAL AUTOALLOCATEを指定する必要があります。どちらも、この句を省略した場合と同じ結果になります。この句のセマンティクスの詳細は、「extent_management_clause」を参照してください。

tablespace_retention_clause

この句は、UNDO表領域に対してのみ有効です。

- RETENTION GUARANTEEを指定すると、tablespaceのすべてのUNDOセグメントの期限切れ前のUNDOデータが、これらのセグメントのUNDO領域を必要とする実行中の操作が失敗する場合でも保持されます。この設定は、Oracleフラッシュバック問合せまたはOracleフラッシュバック・トランザクション問合せを発行し、データの問題を診断および修正する必要がある場合に便利です。

- RETENTION NOGUARANTEEを指定すると、UNDO動作を通常の動作に戻すことができます。実行中のトランザクションで必要な場合には、期限切れ前のUNDOデータによって使用されているUNDOセグメントの領域を使用できます。これはデフォルトです。

UNDO表領域の制限事項: UNDO表領域には、次の制限事項があります。

- この表領域にはデータベース・オブジェクトを作成できません。システム管理のUNDOデータ用に確保されています。

- ローカルのAUTOALLOCATEエクステント管理を指定するためにUNDO表領域に対して指定できるのは、DATAFILE句およびextent_management_clause句のみです。extent_management_clauseを使用した、ローカルのUNIFORMエクステント管理またはディクショナリ・エクステント管理の指定はいずれもできません。すべてのUNDO表領域は、永続的、読取り/書込み可能およびロギング・モードで作成されます。MINIMUM EXTENTおよびDEFAULT STORAGEに対する値は、システムで生成されます。

関連項目:

- 自動UNDO管理およびUNDO表領域の詳細は、『Oracle Database管理者ガイド』を参照してください。UNDO_MANAGEMENTパラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

- データベースの作成時にUNDO表領域を作成する方法は、「CREATE DATABASE」を参照してください。また、「ALTER TABLESPACE」および「DROP TABLESPACE」を参照してください。

- 「UNDO表領域の作成例:」

例

これらの例では、8Kブロックを使用していると想定します。

bigfile表領域の作成例: 次の例は、20MBのデータファイルbigtbs_f1.dbfを持つbigfile表領域bigtbs_01を作成します。

CREATE BIGFILE TABLESPACE bigtbs_01
DATAFILE 'bigtbs_f1.dbf'
SIZE 20M AUTOEXTEND ON;

UNDO表領域の作成例: 次の例は、10MBのUNDO表領域undots1を作成します。

CREATE UNDO TABLESPACE undots1
DATAFILE 'undotbs_1a.dbf'
SIZE 10M AUTOEXTEND ON
RETENTION GUARANTEE;

一時表領域の作成例: 次の文は、サンプル・データベースのデータベース・ユーザーに対するデフォルトの一時表領域を作成します。

CREATE TEMPORARY TABLESPACE temp_demo
TEMPFILE 'temp01.dbf' SIZE 5M AUTOEXTEND ON;

デフォルトのデータベース・ブロック・サイズを2KBとした場合、マップの各ビットは1つのエクステントを表し、各ビットは2,500ブロックをマップします。

次の例は、データファイルを作成するデフォルトの位置を設定し、デフォルトの位置にOracle Managed Filesの一時ファイルを持つ表領域を作成します。一時ファイルは100MBで、最大サイズが制限なしで自動拡張されます。これらは、Oracle Managed Filesのデフォルト値です。

ALTER SYSTEM SET DB_CREATE_FILE_DEST = '$ORACLE_HOME/rdbms/dbs';

CREATE TEMPORARY TABLESPACE tbs_05;

表領域グループへの一時表領域の追加例: 次の文は、tbs_grp_01表領域グループに含まれるtbs_temp_02一時表領域を作成します。この表領域グループが存在しない場合、文の実行中に作成されます。

CREATE TEMPORARY TABLESPACE tbs_temp_02
TEMPFILE 'temp02.dbf' SIZE 5M AUTOEXTEND ON
TABLESPACE GROUP tbs_grp_01;

基本的な一時表領域の作成例: 次の文は、1つのデータファイルを持つ表領域tbs_01を作成します。

CREATE TABLESPACE tbs_01
DATAFILE 'tbs_f2.dbf' SIZE 40M
ONLINE;

次の文は、1つのデータファイルを持つ表領域tbs_03を作成し、すべてのエクステントを500KBの倍数として割り当てます。

CREATE TABLESPACE tbs_03
DATAFILE 'tbs_f03.dbf' SIZE 20M
LOGGING;

表領域の自動拡張を使用可能にする場合の例: 次の文は、1つのデータファイルを持つ表領域tbs_02を作成します。さらに領域が必要な場合、500KBのエクステントが最大サイズ100MBまで追加されます。

CREATE TABLESPACE tbs_02
DATAFILE 'diskb:tbs_f5.dbf' SIZE 500K REUSE
AUTOEXTEND ON NEXT 500K MAXSIZE 100M;

ローカル管理表領域の作成例: 次の文では、データベース・ブロック・サイズが2KBであると仮定します。

CREATE TABLESPACE tbs_04 DATAFILE 'file_1.dbf' SIZE 10M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;

この文で、すべてのエクステントが128KBで、ビットマップの各ビットが64ブロックを示す、ローカル管理表領域を作成します。

次の文は、均一のエクステントを持つローカル管理表領域を作成して、その表領域に格納された表の例を示します。

CREATE TABLESPACE lmt1 DATAFILE 'lmt_file2.dbf' SIZE 100m REUSE
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;

CREATE TABLE lmt_table1 (col1 NUMBER, col2 VARCHAR2(20))
TABLESPACE lmt1 STORAGE (INITIAL 2m);

表の初期セグメント・サイズは2MBです。

次の例は、均一のエクステントを持たないローカル管理表領域を作成します。

CREATE TABLESPACE lmt2 DATAFILE 'lmt_file3.dbf' SIZE 100m REUSE
EXTENT MANAGEMENT LOCAL;

CREATE TABLE lmt_table2 (col1 NUMBER, col2 VARCHAR2(20))
TABLESPACE lmt2 STORAGE (INITIAL 2m MAXSIZE 100m);

表の初期セグメント・サイズは2MBです。Oracle Databaseによって、初期セグメント・サイズを満たすように各エクステントのサイズおよび割り当てられるエクステントの合計数が決定されます。セグメントの最大サイズは、100MBに制限されています。

暗号化された表領域の作成例: 次の例の最初の文は、ウォレットを開くことによって、データベースに対して暗号化を使用可能にします。2番目の文は、暗号化された表領域を作成します。

ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "wallet_password";

CREATE TABLESPACE encrypt_ts
DATAFILE '$ORACLE_HOME/dbs/encrypt_df.dbf' SIZE 1M
ENCRYPTION USING 'AES256'
DEFAULT STORAGE (ENCRYPT);

表領域に対してセグメント領域管理を指定する場合の例: 次の例では、自動セグメント領域管理の表領域を作成します。

CREATE TABLESPACE auto_seg_ts DATAFILE 'file_2.dbf' SIZE 1M
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;

Oracle Managed Filesの作成例: 次の例は、データファイルを作成するデフォルトの位置を設定し、デフォルトの位置にデータファイルを持つ表領域を作成します。データファイルは100MBで自動拡張可能であり、最大サイズの制限がありません。

ALTER SYSTEM SET DB_CREATE_FILE_DEST = '$ORACLE_HOME/rdbms/dbs';

CREATE TABLESPACE omf_ts1;

次の例は、自動拡張されない100MBのOracle Managed Filesのデータファイルを持つ表領域を作成します。

CREATE TABLESPACE omf_ts2 DATAFILE AUTOEXTEND OFF;

CREATE TRIGGER

用途

トリガーはPL/SQLを使用して定義されます。このため、この項では一般的な情報について説明します。構文およびセマンティクスの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

CREATE TRIGGER文を使用すると、データベース・トリガーを作成できます。データベース・トリガーとは、次のとおりです。

- 表、スキーマまたはデータベースに対応したストアドPL/SQLブロック

- 無名PL/SQLブロック、あるいはPL/SQLまたはJAVAで実装されているプロシージャへのコール

指定された条件が発生した場合、トリガーは自動的に実行されます。

関連項目:
「ALTER TRIGGER」および「DROP TRIGGER」を参照してください。

前提条件

自分のスキーマ内の表または自分のスキーマ(SCHEMA)に対するトリガーを自分のスキーマ内に作成する場合は、CREATE TRIGGERシステム権限が必要です。

任意のスキーマ内の表または別のユーザーのスキーマ(schema.SCHEMA)に対するトリガーを任意のスキーマ内に作成する場合は、CREATE ANY TRIGGERシステム権限が必要です。

前述の権限に加えて、DATABASEに対するトリガーを作成する場合は、ADMINISTER DATABASE TRIGGERシステム権限が必要です。

プラガブル・データベース(PDB)に対するトリガーを作成する場合は、現在のコンテナがそのPDBである必要があります。また、ADMINISTER DATABASE TRIGGERシステム権限が必要です。PDBの詳細は、『Oracle Database管理者ガイド』を参照してください。

前述の権限に加えて、crosseditionトリガーを作成する場合は、エディションが有効になっている必要があります。ユーザーに対するエディションの有効化の詳細は、『Oracle Database開発ガイド』を参照してください。

トリガーがSQL文を発行、またはプロシージャやファンクションをコールする場合、そのトリガーの所有者には、これらの操作を行うための権限が必要です。これらの権限はロールを介して付与するのでなく、所有者に直接付与する必要があります。

構文

トリガーはPL/SQLを使用して定義されます。このため、このマニュアルの構文図ではSQLキーワードのみを示します。PL/SQLの構文、セマンティクスおよび例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。

create_trigger::=

(plsql_trigger_source: 『Oracle Database PL/SQL言語リファレンス』を参照。)

セマンティクス

OR REPLACE

OR REPLACEを指定すると、既存のトリガーを再作成できます。この句を指定すると、既存のトリガーの定義を削除しなくても変更できます。

[ EDITIONABLE | NONEDITIONABLE ]

この句を使用すると、schemaのスキーマ・オブジェクト・タイプTRIGGERのエディショニングが有効化されたときに、そのトリガーをエディション・オブジェクトにするか非エディション・オブジェクトにするかを指定できます。デフォルトは、EDITIONABLEです。エディション・オブジェクトと非エディション・オブジェクトの詳細は、『Oracle Database開発ガイド』を参照してください。

NONEDITIONABLEの制限事項: crosseditionトリガーには、NONEDITIONABLEを指定できません。

plsql_trigger_source

plsql_trigger_sourceの構文およびセマンティクスについては、『Oracle Database PL/SQL言語リファレンス』を参照してください。

17 SQL文: CREATE TYPEからDROP ROLLBACK SEGMENT

この章では、次のSQL文について説明します。

- CREATE TYPE

- CREATE TYPE BODY

- CREATE USER

- 「CREATE VIEW」

- DELETE

- DISASSOCIATE STATISTICS

- DROP AUDIT POLICY (統合監査)

- DROP CLUSTER

- DROP CONTEXT

- DROP DATABASE

- DROP DATABASE LINK

- DROP DIMENSION

- DROP DIRECTORY

- DROP DISKGROUP

- DROP EDITION

- DROP FLASHBACK ARCHIVE

- DROP FUNCTION

- DROP INDEX

- DROP INDEXTYPE

- DROP JAVA

- DROP LIBRARY

- DROP MATERIALIZED VIEW

- DROP MATERIALIZED VIEW LOG

- DROP MATERIALIZED ZONEMAP

- DROP OPERATOR

- DROP OUTLINE

- DROP PACKAGE

- DROP PLUGGABLE DATABASE

- DROP PROCEDURE

- DROP PROFILE

- DROP RESTORE POINT

- DROP ROLE

- DROP ROLLBACK SEGMENT

CREATE TYPE

用途

オブジェクト型はPL/SQLを使用して定義されます。このため、この項では一般的な情報について説明します。構文およびセマンティクスの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

CREATE TYPE文を使用すると、オブジェクト型、SQLJオブジェクト型、名前付きの可変配列(VARRAY)、ネストした表型または不完全なオブジェクト型の仕様部を作成できます。CREATE TYPE文およびCREATE TYPE BODY文を使用してオブジェクト型を作成します。CREATE TYPE文では、オブジェクト型の名前、オブジェクトの属性、メソッドおよびその他のプロパティを指定します。CREATE TYPE BODY文には、その型を実装するメソッドに対するコードが含まれます。

注意:

- 型仕様で属性のみ宣言し、メソッドは宣言しないオブジェクト型を作成する場合は、型本体を指定する必要はありません。

- SQLJオブジェクト型を作成する場合は、型本体を指定できません。型の実装はJavaクラスとして指定されます。

不完全型とは、フォワード型定義によって作成される型です。このオブジェクト型には名前はありますが、属性およびメソッドがないため、不完全といわれます。他の型からの参照が可能なため、互いに参照する型の定義に使用できます。ただし、不完全オブジェクト型を使用して表やオブジェクト列またはネストした表型の列を作成する場合は、型を完全に指定しておく必要があります。

関連項目:

- 型のメンバー・メソッドの作成については、「CREATE TYPE BODY」を参照してください。

- オブジェクト、不完全型、VARRAYおよびネストした表の詳細は、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。

前提条件

自分のスキーマ内に型を作成する場合は、CREATE TYPEシステム権限が必要です。他のユーザーのスキーマ内に型を作成する場合は、CREATE ANY TYPEシステム権限が必要です。これらの権限は、明示的に取得することもロールを介して取得することもできます。

サブタイプを作成する場合は、UNDER ANY TYPEシステム権限またはスーパータイプに対するUNDERオブジェクト権限が必要です。

型の所有者には、型定義内で参照する他のすべての型にアクセスするためのEXECUTEオブジェクト権限が明示的に付与されている必要があります。または、EXECUTE ANY TYPEシステム権限が付与されている必要があります。所有者は、これらの権限をロールを介して取得することはできません。

型の所有者が、型にアクセスする権限を他のユーザーに付与する場合、所有者には、参照型に対するGRANT OPTION付きのEXECUTEオブジェクト権限、またはADMIN OPTION付きのEXECUTE ANY TYPEシステム権限が必要です。これらの権限がないと、型の所有者は、型にアクセスする権限を他のユーザーに付与できません。

構文

型はPL/SQLを使用して定義されます。このため、このマニュアルの構文図ではSQLキーワードのみを示します。PL/SQLの構文、セマンティクスおよび例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。

create_type::=

(plsql_type_sourceについては、『Oracle Database PL/SQL言語リファレンス』を参照してください。)

セマンティクス

OR REPLACE

OR REPLACEを指定すると、既存の型を再作成できます。この句を指定した場合、既存の型の定義をはじめに削除しなくても、その定義を変更できます。

再作成するオブジェクト型に対する権限があらかじめ付与されている場合は、再作成後にあらためて権限を付与されなくてもそのオブジェクト型を使用および参照できます。

ファンクション索引が型に依存している場合、索引にDISABLEDのマークが付きます。

[ EDITIONABLE | NONEDITIONABLE ]

この句を使用すると、schemaのスキーマ・オブジェクト・タイプTYPEのエディショニングが有効化されたときに、その型をエディション・オブジェクトにするか非エディション・オブジェクトにするかを指定できます。デフォルトはEDITIONABLEです。エディション・オブジェクトと非エディション・オブジェクトの詳細は、『Oracle Database開発ガイド』を参照してください。

plsql_type_source

plsql_type_sourceの構文およびセマンティクスについては、『Oracle Database PL/SQL言語リファレンス』を参照してください。

CREATE TYPE BODY

用途

型本体はPL/SQLを使用して定義されます。このため、この項では一般的な情報について説明します。構文およびセマンティクスの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

CREATE TYPE BODYを使用すると、オブジェクト型仕様部で定義されたメンバー・メソッドを定義または実装することができます。CREATE TYPE文およびCREATE TYPE BODY文を使用してオブジェクト型を作成します。CREATE TYPE文では、オブジェクト型の名前、オブジェクトの属性、メソッドおよびその他のプロパティを指定します。CREATE TYPE BODY文には、その型を実装するメソッドに対するコードが含まれます。

call_specを定義していないオブジェクト型仕様部に指定された各メソッドには、オブジェクト型本体の対応するメソッド本体を指定する必要があります。

注意:
SQLJオブジェクト型を作成する場合は、Javaクラスとして指定されます。

関連項目:

- 型仕様部の作成の詳細は、「CREATE TYPE」を参照してください。

- 型仕様部の変更の詳細は、「ALTER TYPE」を参照してください。

前提条件

オブジェクト型用のCREATE TYPE仕様部で行われるすべてのメンバー宣言には、それに対応する構造がCREATE TYPE文またはCREATE TYPE BODY文内に存在する必要があります。

自分のスキーマ内で型本体を作成または再作成する場合は、CREATE TYPEシステム権限またはCREATE ANY TYPEシステム権限が必要です。他のユーザーのスキーマ内でオブジェクト型を作成する場合は、CREATE ANY TYPEシステム権限が必要です。他のユーザーのスキーマ内でオブジェクト型を置換する場合は、DROP ANY TYPEシステム権限が必要です。

構文

型本体はPL/SQLを使用して定義されます。このため、このマニュアルの構文図ではSQLキーワードのみを示します。PL/SQLの構文、セマンティクスおよび例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。

create_type_body::=

(plsql_type_body_sourceについては、『Oracle Database PL/SQL言語リファレンス』を参照してください。)

セマンティクス

OR REPLACE

OR REPLACEを指定すると、既存の型本体を再作成できます。この句を指定した場合、既存の型本体の定義をはじめに削除しなくても、その定義を変更できます。

再作成されたオブジェクト型本体に対する権限を付与されているユーザーは、権限を再付与されなくても、そのオブジェクト型本体を使用および参照できます。

この句を使用した場合、ALTER TYPE ... REPLACE文によって追加された仕様部に、新規メンバー・サブプログラム定義を追加できます。

[ EDITIONABLE | NONEDITIONABLE ]

この句を省略すると、型本体は、EDITIONABLEまたはNONEDITIONABLEを型仕様部から継承します。この句を指定する場合は、型仕様部と一致させる必要があります。

plsql_type_body_source

plsql_type_body_sourceの構文およびセマンティクスについては、『Oracle Database PL/SQL言語リファレンス』を参照してください。

CREATE USER

用途

CREATE USER文を使用すると、データベース・ユーザー(データベースにログイン可能なアカウント)を作成および構成でき、Oracle Databaseがそのユーザーによるアクセスを許可する方法が確立されます。

この文をOracle Automatic Storage Management (Oracle ASM)クラスタで発行すると、現行のノードのOracle ASMインスタンスに対してローカルなパスワード・ファイルに、ユーザーおよびパスワードの組合せを追加できます。各ノードのOracle ASMインスタンスでは、この文を使用して個々のパスワード・ファイルを更新できます。このパスワード・ファイル自体は、ORAPWDユーティリティで作成されている必要があります。

プロキシ・アプリケーションまたはアプリケーション・サーバーによって、データベースとユーザーを接続できます。構文および説明は、「ALTER USER」を参照してください。

前提条件

CREATE USERシステム権限が必要です。CREATE USER文を使用して作成したユーザーの権限ドメインは空(権限を付与されていない状態)になります。Oracle Databaseにログオンするユーザーには、CREATE SESSIONシステム権限が必要です。そのため、ユーザーを作成した場合、必ずCREATE SESSIONシステム権限をそのユーザーに付与してください。詳細は、「GRANT」を参照してください。

AS SYSASMとして認証されたユーザーのみが、このコマンドを発行して、Oracle ASMインスタンスのパスワード・ファイルを変更できます。

CONTAINER句を指定する場合は、マルチテナント・コンテナ・データベース(CDB)に接続している必要があります。CONTAINER = ALLを指定する場合は、現在のコンテナがルートである必要があります。CONTAINER = CURRENTを指定するには、現在のコンテナがプラガブル・データベース(PDB)である必要があります。

構文

create_user::=

(size_clause::=を参照)

セマンティクス

user

作成するユーザーの名前を指定します。この名前には、使用しているデータベース・キャラクタ・セットの文字のみを指定できます。また、「データベース・オブジェクトのネーミング規則」で説明した規則に従う必要があります。データベース・キャラクタ・セットにマルチバイト文字が含まれている場合でも、ユーザーにはシングルバイト文字を1つ以上使用することをお薦めします。

CDB以外では、ユーザー名の先頭をC##またはc##にできません。

CDBでは、ユーザー名の要件は次のとおりです。

- Oracle Database 12cリリース1(12.1.0.1)では、共通ユーザーの名前は、C##またはc##から始める必要があり、ローカル・ユーザーの名前は、C##またはc##から始めないでください。

- Oracle Database 12cリリース1(12.1.0.2)以降:

- 共通ユーザーの名前は、COMMON_USER_PREFIX初期化パラメータで指定された接頭辞と大/小文字を区別しないで一致する文字から始める必要があります。デフォルトでは、接頭辞はC##です。

- ローカル・ユーザーの名前は、COMMON_USER_PREFIX初期化パラメータで指定された接頭辞と大/小文字を区別しないで一致する文字から始めないでください。COMMON_USER_PREFIXの値に関係なく、ローカル・ユーザーの名前の先頭にC##またはc##を使用できません。

注意:
COMMON_USER_PREFIXの値が空の文字列である場合、共通またはローカル・ユーザー名に要件はありませんが、次の1つの例外があります。ローカル・ユーザーの名前の先頭にC##またはc##を使用できません。PDBを別のCDBに接続する場合または共通ユーザーの作成時に閉じられたPDBを開く場合、ローカルおよび共通ユーザーの名前が競合する可能性があるため、空の文字列を使用しないことをお薦めします。

注意:
ユーザー名およびパスワードは、ご使用のプラットフォームに応じて、ASCIIまたはEBCDIC文字のみでエンコードすることをお薦めします。

関連項目:
「データベース・ユーザーの作成例:」

IDENTIFIED句

IDENTIFIED句を使用すると、Oracle Databaseによるユーザーの認証方法を指定できます。

BY password

BY password句を使用すると、ローカル・ユーザーを作成し、データベースへのログイン時に、パスワードの指定が必要であることを指定できます。パスワードは、大/小文字が区別されます。この後に、ユーザーをデータベースに接続するために使用されるCONNECT文字列では、このCREATE USER文または後述のALTER USER文で使用されているものと同じ文字(大文字、小文字または混在)を使用してパスワードを指定する必要があります。パスワードには、二重引用符(")およびリターン文字を除く、データベース・キャラクタ・セットのシングルバイト文字、マルチバイト文字、特殊文字またはこれらの組合せを含めることができます。パスワードがアルファベット以外の文字で始まるか、英数字、アンダースコア(_)、ドル記号($)および番号記号(#)以外の文字を含む場合は、その文字を二重引用符で囲む必要があります。そうでない場合は、任意でパスワードを二重引用符で囲むこともできます。

関連項目:
パスワードでの大/小文字の区別、パスワードの複雑さ、その他パスワードに関するガイドラインについては、『Oracle Databaseセキュリティ・ガイド』を参照してください。

Oracle Databaseの、3つの複雑なパスワード検証ルーチンの1つを使用していないかぎり、パスワードは、「データベース・オブジェクトのネーミング規則」にある規則に従う必要があります。これらのルーチンでは、通常のネーミング規則より複雑な文字の組合せが要求されます。これらのルーチンは、UTLPWDMG.SQLスクリプトを使用して実装します。詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

注意:
ユーザー名およびパスワードは、ご使用のプラットフォームに応じて、ASCIIまたはEBCDIC文字のみでエンコードすることをお薦めします。

関連項目:
パスワード管理およびパスワード保護の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

EXTERNALLY句

EXTERNALLYを指定すると、外部ユーザーを作成できます。このユーザーは、外部サービス(オペレーティング・システムやサード・パーティのサービスなど)で認証する必要があります。その場合、オペレーティング・システムまたはサード・パーティ・サービスによる認証を使用して、特定の外部ユーザーが特定のデータベース・ユーザーへのアクセス権を所有することが可能になります。

AS 'certificate_DN' この句はSSL認証の外部ユーザーに必須で、そのユーザーに対してのみ使用されます。certificate_DNは、ユーザーのウォレット内のユーザーのPKI証明書にある識別名です。certificate_DNの最大長は1024文字です。

AS 'kerberos_principal_name' この句はKerberos認証の外部ユーザーに必須で、そのユーザーに対してのみ使用されます。kerberos_principal_nameの最大長は1024文字です。

注意:
ご使用のオペレーティング・システムにログインする際のセキュリティが十分でない場合は、IDENTIFIED EXTERNALLYを使用しないことをお薦めします。

外部ユーザーの作成の制限事項 次の制限事項は外部ユーザーの作成に適用されます。

- ユーザーSYSを外部ユーザーにすることはできません。

- Oracle ASMでは、外部ユーザーの作成はサポートされません。

関連項目:

- 外部で識別されるユーザーの詳細は、『Oracle Databaseエンタープライズ・ユーザー・セキュリティ管理者ガイド』を参照してください。

- 「外部データベース・ユーザーの作成例:」

GLOBALLY句

GLOBALLY句を使用すると、グローバル・ユーザーを作成することができます。このユーザーは、エンタープライズ・ディレクトリ・サービス(Oracle Internet Directory)によって認可される必要があります。

directory_DN文字列は、次のいずれかの形式になります。

- このユーザーを識別するエンタープライズ・ディレクトリ・サービスのX.509の名前。文字列は、CN=username,other_attributesという形式である必要があります。other_attributesは、ディレクトリ内のユーザーの識別名(DN)以外の部分です。この形式を使用すると、プライベート・グローバル・スキーマが作成されます。

- NULL文字列(' ')。エンタープライズ・ディレクトリ・サービスによって、認証されたグローバル・ユーザーがこのデータベース・スキーマにマップされ、適切なロールが割り当てられます。この形式を使用すると、GLOBALLYキーワードのみを指定する場合と同様に、共有グローバル・スキーマが作成されます。

directory_DNの最大長は1024文字です。

特定のユーザーとして接続し、ALTER USER文を使用してユーザーのロールをアクティブにするために、アプリケーション・サーバーの機能を制御できます。

グローバル・ユーザーの作成の制限事項 Oracle ASMでは、グローバル・ユーザーの作成はサポートされません。

関連項目:

- グローバル・ユーザーの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

- ALTER USER

- 「グローバル・データベース・ユーザーの作成例:」

DEFAULT TABLESPACE句

ユーザーのスキーマ内に作成されるオブジェクトを格納するデフォルトの表領域を指定します。この句を省略した場合、ユーザーのオブジェクトはデータベースのデフォルトの表領域に格納されます。データベースのデフォルトの表領域が指定されていない場合、ユーザーのオブジェクトはSYSTEM表領域に格納されます。

デフォルトの表領域の制限事項: ローカル管理の一時表領域(UNDO表領域を含む)またはディクショナリ管理の一時表領域は、ユーザーのデフォルトの表領域として指定できません。

関連項目:

- 表領域の概要およびUNDO表領域の詳細は、「CREATE TABLESPACE」を参照してください。

- デフォルトの表領域をユーザーに割り当てる方法の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

TEMPORARY TABLESPACE句

ユーザーの一時セグメントが確保される表領域または表領域グループを指定します。この句を省略した場合、ユーザーの一時セグメントはデータベースのデフォルトの一時表領域に格納されます。データベースのデフォルトの一時表領域が指定されていない場合は、SYSTEM表領域に格納されます。

- tablespaceに、ユーザーの一時セグメント表領域を指定します。CDBに接続しているときに、CDB$DEFAULTを指定すると、CDB全体のデフォルト一時表領域を使用できます。

- tablespace_group_nameを指定すると、ユーザーは、tablespace_group_nameで指定された表領域グループ内の任意の表領域に一時セグメントを保存できるようになります。

一時表領域の制限事項: この句には、次の制限事項があります。

- 表領域は一時表領域で、標準ブロック・サイズである必要があります。

- 表領域は、UNDO表領域または自動セグメント領域管理の表領域にできません。

関連項目:

- 表領域グループの詳細は、『Oracle Database管理者ガイド』を参照してください。一時表領域をユーザーに割り当てる方法の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

- UNDO表領域およびセグメント管理の詳細は、「CREATE TABLESPACE」を参照してください。

- 「表領域グループの割当て例:」

QUOTA句

QUOTA句を使用すると、ユーザーが表領域内に割り当てることができる最大サイズを指定できます。

CREATE USER文では、複数の表領域に対して複数のQUOTA句を指定できます。

UNLIMITEDを使用すると、ユーザーは、表領域の領域を無制限に割り当てることができます。

指定できる領域の最大量は2テラバイト(TB)です。より多くの領域が必要な場合は、UNLIMITEDを指定します。

QUOTA句の制限事項: この句は、一時表領域には指定できません。

関連項目:
この句の詳細は、「size_clause」を参照してください。表領域の割当て制限の指定については、『Oracle Databaseセキュリティ・ガイド』を参照してください。

PROFILE句

ユーザーに割り当てるプロファイルを指定します。このプロファイルによって、ユーザーが使用できるデータベース・リソース容量が制限されます。この句を省略した場合、DEFAULTプロファイルがユーザーに割り当てられます。

注意:
データベース・リソース制限を設定する場合、このSQLプロファイルではなく、データベース・リソース・マネージャを使用することをお薦めします。データベース・リソース・マネージャを使用すると、リソース使用の管理および監査を柔軟に行うことができます。データベース・リソース・マネージャの詳細は、『Oracle Database管理者ガイド』を参照してください。

関連項目:
「GRANT」および「CREATE PROFILE」を参照してください。

PASSWORD EXPIRE句

PASSWORD EXPIREを指定すると、ユーザーのパスワードを期限切れにできます。この設定によって、ユーザーがデータベースにログインする前に、ユーザーまたはDBAはパスワードの変更が必要となります。

ACCOUNT句

ACCOUNT LOCKを指定すると、ユーザー・アカウントをロックし、アクセスを禁止できます。ACCOUNT UNLOCKを指定すると、ユーザー・アカウントのロックを解除し、アカウントへのアクセスを許可できます。デフォルトはACCOUNT UNLOCKです。

ENABLE EDITIONS

この句は元に戻すことができません。ENABLE EDITIONSを指定すると、ユーザーは、エディションを使用しているスキーマ内で、エディション化可能なオブジェクトの複数のバージョンを作成できるようになります。エディションが有効でないスキーマ内のエディション化可能なオブジェクトは、エディション化できません。

エディションを使用可能にする場合の制限事項: シード・データベースのサンプル・スキーマを除いて、Oracle提供のスキーマはすべて、エディションを使用可能にできません。

CONTAINER句

CONTAINER句は、CDBに接続しているときに適用されます。ただし、デフォルト値が使用できる唯一の値であるため、CONTAINER句を指定する必要はありません。

- 共通ユーザーを作成するには、ルートに接続する必要があります。ルートに接続する場合にデフォルトのCONTAINER = ALLをオプションで指定できます。

- ローカル・ユーザーを作成するには、PDBに接続する必要があります。PDBに接続する場合にデフォルトのCONTAINER = CURRENTをオプションで指定できます。

共通ユーザーの作成時には、次の句を使用して指定したデフォルトの表領域、一時表領域またはプロファイルがいずれも、CDBに属するすべてのコンテナ内に存在している必要があります。

- DEFAULT TABLESPACE

- TEMPORARY TABLESPACE

- QUOTA

- PROFILE

これらのオブジェクトが存在していないコンテナがあると、CREATE USER文は失敗します。

例

次のすべての例では、example表領域を使用します。この表領域はシード・データベースに存在し、サンプル・スキーマにアクセス可能です。

データベース・ユーザーの作成例: PASSWORD EXPIREを指定して新規ユーザーを作成する場合、データベースにログインする前に、そのユーザーのパスワードを変更する必要があります。次の文は、sidneyユーザーを作成します。

CREATE USER sidney
IDENTIFIED BY out_standing1
DEFAULT TABLESPACE example
QUOTA 10M ON example
TEMPORARY TABLESPACE temp
QUOTA 5M ON system
PROFILE app_user
PASSWORD EXPIRE;

前述のユーザーsidneyには次の特性があります。

- パスワードout_standing1

- 10MBの割当て制限のあるデフォルト表領域example

- 一時表領域temp

- 5MBの割当て制限のある表領域SYSTEMへのアクセス

- プロファイルapp_user(「プロファイルの作成例:」で作成)によって定義されているデータベース・リソースの制限

- sidneyがデータベースにログインする前に変更する必要がある期限切れのパスワード

外部データベース・ユーザーの作成例: 次の例は、データベースにアクセスする前に外部ソースによって識別される必要のある、外部ユーザーを作成します。

CREATE USER app_user1
IDENTIFIED EXTERNALLY
DEFAULT TABLESPACE example
QUOTA 5M ON example
PROFILE app_user;

ユーザーapp_user1には次の追加の特性があります。

- デフォルトの表領域example

- デフォルトの一時表領域example

- 表領域exampleに5MBの領域、およびデータベースの一時表領域に無制限の割当て

- プロファイルapp_userによって定義されているデータベース・リソースの制限

オペレーティング・システム・アカウントによってのみアクセス可能な別のユーザーを作成する場合、ユーザー名に初期化パラメータOS_AUTHENT_PREFIX値の接頭辞を付けます。たとえば、この値が「ops$」の場合、次の文を使用して、外部で識別されるユーザーexternal_userを作成できます。

CREATE USER ops$external_user
IDENTIFIED EXTERNALLY
DEFAULT TABLESPACE example
QUOTA 5M ON example
PROFILE app_user;

グローバル・データベース・ユーザーの作成例: 次の例は、グローバル・ユーザーを作成します。グローバル・ユーザーを作成する場合、エンタープライズ・ディレクトリ・サーバーでユーザーを識別するX.509の名前を指定することができます。

CREATE USER global_user
IDENTIFIED GLOBALLY AS 'CN=analyst, OU=division1, O=oracle, C=US'
DEFAULT TABLESPACE example
QUOTA 5M ON example;

CDB内の共通ユーザーの作成: 次の例では、c##comm_userという共通ユーザーをCDBに作成します。このCREATE USER文を実行する前に、CDBに属するすべてのコンテナに表領域exampleとtemp_tbsが存在していることを確認してください。

CREATE USER c##comm_user
IDENTIFIED BY comm_pwd
DEFAULT TABLESPACE example
QUOTA 20M ON example
TEMPORARY TABLESPACE temp_tbs;

ユーザーcomm_userには次の追加の特性があります。

- パスワードcomm_pwd

- 20MBの割当て制限のあるデフォルト表領域example

- 一時表領域temp_tbs

CREATE VIEW

用途

CREATE VIEW文を使用すると、ビューを定義できます。ビューとは、1つ以上の表またはビューをベースとした論理表です。ビュー自体にはデータは含まれていません。ビューのベースとなる表は、実表と呼ばれます。

LOB、オブジェクト型、REFデータ型、ネストした表またはVARRAY型をサポートするオブジェクト・ビューまたはリレーショナル・ビューを、既存のビュー・メカニズムで作成することもできます。オブジェクト・ビューとは、ユーザー定義型のビューのことで、ビューの各行に、それぞれが一意のオブジェクト識別子を持つオブジェクトが含まれます。

XMLTypeビューも作成できます。このビューは、オブジェクト・ビューと似ていますが、XMLTypeのXMLスキーマベースの表のデータを表示します。

関連項目:

- 様々な種類のビューおよびその使用方法については、『Oracle Database概要』、『Oracle Database開発ガイド』および『Oracle Database管理者ガイド』を参照してください。

- XMLTypeビューの詳細は、『Oracle XML DB開発者ガイド』を参照してください。

- ビューの変更およびデータベースからのビューの削除については、「ALTER VIEW」および「DROP VIEW」を参照してください。

前提条件

自分のスキーマ内にビューを作成する場合は、CREATE VIEWシステム権限が必要です。他のユーザーのスキーマ内にビューを作成する場合は、CREATE ANY VIEWシステム権限が必要です。

サブビューを作成する場合は、UNDER ANY VIEWシステム権限またはスーパービューに対するUNDERオブジェクト権限が必要です。

ビューが含まれているスキーマの所有者は、そのビューの基礎となっているすべての表またはビューに対する行の選択(READまたはSELECT権限)、挿入、更新または削除の権限が必要です。また、所有者には、これらの権限がロールを介してではなく、直接付与されている必要があります。

オブジェクト・ビューの作成時にオブジェクト型の基本コンストラクタ・メソッドを使用する場合、次のいずれかの条件を満たしている必要があります。

- オブジェクト型が作成対象のビューと同じスキーマに属している。

- EXECUTE ANY TYPEシステム権限を持っている。

- そのオブジェクト型に対するEXECUTEオブジェクト権限を持っている。

関連項目:
作成するビューの基礎となる表またはビューに対して、ビューの所有者に必要な権限の詳細は、「SELECT」、「INSERT」、「UPDATE」および「DELETE」を参照してください。

構文

create_view::=

(inline_constraint::=、out_of_line_constraint::=、object_view_clause::=、XMLType_view_clause ::=、subquery::=(「SELECT」の項)、subquery_restriction_clause::=を参照)

object_view_clause::=

(inline_constraint::=、out_of_line_constraint::=を参照)

XMLType_view_clause::=

XMLSchema_spec::=

subquery_restriction_clause::=

セマンティクス

OR REPLACE

OR REPLACEを指定すると、既存のビューを再作成できます。この句を使用した場合、以前に付与されたオブジェクト権限を削除、再作成、再付与しなくても、既存のビュー定義を変更できます。

従来型のビューを再作成した場合、そのビューで定義されたINSTEAD OFトリガーは削除されます。エディショニング・ビューを再作成した場合、エディショニング・ビューで定義されたDMLトリガーは保持されます。ただし、エディショニング・ビューの変更によってコンパイルできない場合(たとえば、トリガー定義で参照されるエディショニング・ビュー列を削除した場合など)は、これらのトリガーを永続的に無効にできます。

すべてのマテリアライズド・ビューがviewに依存している場合、そのマテリアライズド・ビューにはUNUSABLEというマークが付けられ、それらが再利用可能になるようにリストアする場合は、完全なリフレッシュが必要になります。無効なマテリアライズド・ビューはクエリー・リライトで使用されることはなく、また、再コンパイルされるまでリフレッシュされません。

従来型のビューからエディショニング・ビューに、またはエディショニング・ビューから従来型のビューに置き換えることはできません。エディショニング・ビューの詳細は、『Oracle Database開発ガイド』を参照してください。

関連項目:

- 無効なマテリアライズド・ビューのリフレッシュについては、「ALTER MATERIALIZED VIEW」を参照してください。

- マテリアライズド・ビューの概要は、『Oracle Database概要』を参照してください。

- INSTEAD OF句の詳細は、「CREATE TRIGGER」を参照してください。

FORCE

FORCEを指定すると、ビューの実表または参照するオブジェクト型が存在しているか、またはそのビューを含むスキーマの所有者が、それらの表やオブジェクト型に対する権限を持っているかにかかわらず、ビューを作成できます。SELECT、INSERT、UPDATEまたはDELETE文をビューに対して発行する場合、これらの条件を満たしている必要があります。

ビュー定義が制約を含む場合、実表または参照するオブジェクト型が存在しないと、CREATE VIEW ... FORCEは正常に実行されません。また、ビュー定義で存在しない制約が指定される場合も、CREATE VIEW ... FORCEは正常に実行されません。

NO FORCE

NOFORCEを指定すると、実表が存在し、ビューを含むスキーマの所有者がその実表に対する権限を持っている場合のみ、ビューを作成できます。これはデフォルトです。

EDITIONING

この句を使用すると、エディショニング・ビューを作成できます。エディショニング・ビューは単一表ビューであり、実表からすべての行を選択し、実表の列のサブセットを表示します。エディショニング・ビューを使用すると、アップグレードなどの管理操作時に、アプリケーションに影響を与えることなく実表に対するDDL変更を実行できます。実表に対する既存のエディショニング・ビューの関係について、情報を取得する場合は、USER_、ALL_およびDBA_EDITIONING_VIEWデータ・ディクショナリ・ビューを問い合せます。

エディショニング・ビューの所有者は、エディション化が可能である必要があります。詳細は、「ENABLE EDITIONS」を参照してください。

エディショニング・ビューの注意事項: エディショニング・ビューと従来型のビューは、次の点で大きく異なります。

- エディショニング・ビューは、表の列のサブセットの別名を選択して表示するためにのみ使用されます。そのため、エディショニング・ビューを作成する構文には、従来型のビューを作成する構文よりも多くの制限事項があります。制限事項(内容については後述)に違反すると、FORCEを指定しても、ビューを作成できません。

- エディショニング・ビューには、DMLトリガーを作成できます。この場合、データベースは、エディショニング・ビューをこのトリガーに対する基本オブジェクトとみなします。このようなトリガーは、DML操作がエディショニング・ビューそのものを対象とした場合に起動します。DML操作が実表を対象とした場合には起動しません。

- エディショニング・ビューには、INSTEAD OFトリガーを作成できません。

エディショニング・ビューの制限事項: エディショニング・ビューには、次の制限事項があります。

- どのエディション内でも、単一表に対して作成できるエディショニング・ビューは1つのみです。

- object_view_clause句、XMLType_view_clause句、またはBEQUEATH句は指定できません。

- エディショニング・ビューには、WITH CHECK OPTION制約を定義できません。

- 定義する副問合せのSELECT構文のリストには、実表の列に対する単純な参照のみを指定できます。また、実表の各列を1回にかぎりSELECT構文のリストに指定できます。ワイルド・カード記号であるアスタリスク*およびt_alias.*は、実表のすべての列を指定する場合に使用できます。

- ビューを定義する副問合せのFROM句で参照できるのは、既存の1つのデータベース表のみです。結合は使用できません。実表は作成対象のビューと同じスキーマに属している必要があります。表の識別にシノニムは使用できません。ただし、表の別名を指定することはできます。

- 副問合せを定義する次の句は、エディショニング・ビューには無効です。subquery_factoring_clause、DISTINCTまたはUNIQUE、where_clause、hierarchical_query_clause、group_by_clause、HAVING条件、model_clause、または集合演算子(UNION、INTERSECTまたはMINUS)。

関連項目:

- エディショニング・ビューの詳細は、『Oracle Database開発ガイド』を参照してください。

- エディションの詳細およびエディショニング・ビューの例は、「CREATE EDITION」を参照してください。

EDITIONABLE | NONEDITIONABLE

この句を使用すると、schemaのスキーマ・オブジェクト・タイプVIEWのエディショニングが有効化されたときに、そのビューをエディション・オブジェクトにするか非エディション・オブジェクトにするかを指定できます。デフォルトは、EDITIONABLEです。エディション・オブジェクトと非エディション・オブジェクトの詳細は、『Oracle Database開発ガイド』を参照してください。

schema

ビューを含めるスキーマを指定します。schemaを指定しない場合、自分のスキーマにそのビューが作成されます。

view

ビューまたはオブジェクト・ビューの名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。

ビューの制限事項: あるビューにINSTEAD OFトリガーが含まれている場合、そのビューで作成されるビューが更新可能であっても、そのビューにはINSTEAD OFトリガーが必要です。

関連項目:
「ビューの作成例:」

alias

ビューを定義する問合せによって選択された式の名前を指定します。別名の数は、ビューによって選択された式の数と一致している必要があります。別名は、Oracle Databaseのスキーマ・オブジェクトのネーミング規則に従う必要があります。別名は、ビュー内で一意である必要があります。

別名を省略した場合、別名は問合せの列または列の別名から導出されます。このため、問合せに列の名前のみでなく式が含まれている場合は、別名を使用する必要があります。また、ビュー定義に制約が含まれている場合も、別名を指定する必要があります。

ビューの別名の制限事項: オブジェクト・ビューの作成時に別名は指定できません。

関連項目:
「スキーマ・オブジェクトの構文およびSQL文の構成要素」

VISIBLE | INVISIBLE

この句を使用すると、ビュー列をVISIBLEにするか、INVISIBLEにするかを指定できます。デフォルトでは、実表の可視性にかかわらず、ビュー列はVISIBLEになります。ただし、INVISIBLEを指定した場合を除きます。これは、従来型のビューとエディショニング・ビューに当てはまります。これらの句の詳細は、CREATE TABLEの「VISIBLE | INVISIBLE」を参照してください。

inline_constraintおよびout_of_line_constraint

ビューおよびオブジェクト・ビューには制約を指定できます。out_of_line_constraint句を使用すると、ビュー・レベルで制約を定義できます。適切な別名の後でinline_constraint句を使用すると、列定義または属性定義の一部として制約を定義できます。

Oracle Databaseでは、ビュー制約を適用していません。制限事項を含むビュー制約の詳細は、「ビュー制約」を参照してください。

関連項目:
「制約付きのビューの作成例:」

object_view_clause

object_view_clauseを使用すると、オブジェクト型にビューを定義できます。

関連項目:
「オブジェクト・ビューの作成例:」

OF type_name句

この句を使用すると、type_name型のオブジェクト・ビューを明示的に作成できます。オブジェクト・ビューの列は、type_name型の最上位属性に対応しています。各行にはオブジェクト・インスタンスが含まれ、また、各インスタンスはWITH OBJECT IDENTIFIER句で指定したオブジェクト識別子に関連付けられます。schemaを指定しない場合、自分のスキーマ内にオブジェクト・ビューが作成されます。

オブジェクト表、XMLType表、オブジェクト・ビューおよびXMLTypeビューには、列名は付けられません。そのため、システム生成疑似列OBJECT_IDが定義されます。問合せでこの列名を使用し、WITH OBJECT IDENTIFIER句を指定して、オブジェクト・ビューを作成できます。

WITH OBJECT IDENTIFIER句

WITH OBJECT IDENTIFIER句を使用すると、最上位(ルート)のオブジェクト・ビューを指定できます。オブジェクト・ビュー内の各行を識別するためのキーとして使用されるオブジェクト型の属性を指定します。ほとんどの場合、各属性は実表の主キー列と対応します。属性リストが一意で、ビューの1行ずつを識別することを確認する必要があります。WITH OBJECT IDENTIFIERおよびWITH OBJECT ID句は、区別なしに使用できますが、意味を明確にするために用意されています。

オブジェクト・ビューの制限事項: オブジェクト・ビューには、次の制限事項があります。

- オブジェクト・ビュー内の複数のインスタンスに変換される主キーREFを参照解除または確保しようとした場合、データベースはエラーを戻します。

- サブビューはスーパービューのオブジェクト識別子を継承するため、サブビューを作成する場合は、この句を指定できません。

オブジェクト・ビューがオブジェクト表またはオブジェクト・ビュー上で定義されている場合は、この句を省略するか、またはDEFAULTを指定します。

DEFAULT DEFAULTを指定すると、基礎となるオブジェクト表またはオブジェクト・ビュー固有のオブジェクト識別子を使用して、各行を一意に識別できます。

attribute attributeでは、オブジェクト・ビューに対して作成されるオブジェクト識別子の基になるオブジェクト型の属性を指定します。

UNDER句

UNDER句を使用すると、オブジェクト・スーパービューに基づくサブビューを指定できます。

サブビューの制限事項: サブビューには、次の制限事項があります。

- サブビューは、スーパービューと同じスキーマに作成する必要があります。

- オブジェクト型type_nameは、superview直属のサブタイプである必要があります。

- 同一のスーパービューには、特定の型のサブビューを1つのみ作成できます。

関連項目:

- オブジェクトの作成の詳細は、「CREATE TYPE」を参照してください。

- データ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

XMLType_view_clause

この句を使用すると、XMLTypeビューを作成できます。このビューには、XMLTypeのXMLスキーマベースの表のデータが表示されます。XMLSchema_specは、XMLデータを対応するオブジェクト・リレーショナル・データにマップするために使用するXMLスキーマを示します。XMLスキーマは、XMLTypeビューを作成する前に作成しておく必要があります。

WITH OBJECT IDENTIFIER およびWITH OBJECT ID句は、区別なしに使用できますが、意味を明確にするために用意されています。

オブジェクト表、XMLType表、オブジェクト・ビューおよびXMLTypeビューには、列名は付けられません。そのため、システム生成疑似列OBJECT_IDが定義されます。問合せでこの列名を使用し、WITH OBJECT IDENTIFIER句を指定して、オブジェクト・ビューを作成できます。

関連項目:

- XMLTypeビューおよびXMLSchemasの詳細は、『Oracle XML DB開発者ガイド』を参照してください。

- 「XMLTypeビューの作成例:」および「XMLType表のビューの作成例:」を参照してください。

BEQUEATH

BEQUEATH句を使用すると、ビューで参照されるファンクションをビューの実行者権限で実行するか、ビューの定義者権限で実行するかを指定できます。

CURRENT_USER BEQUEATH CURRENT_USERを指定すると、ビューで参照されるファンクションは、次の条件が満たされているときに、ビューの実行者権限で実行されます。

- ビューの所有者が、実行ユーザーに対するINHERIT PRIVILEGESオブジェクト権限を所持している。

- ビューの所有者が、INHERIT ANY PRIVILEGESシステム権限を所持している。

ビューの問合せがIDまたは権限に影響を受けるSQLファンクションを実行する場合や、実行者権限のPL/SQLまたはJavaファンクションを実行する場合、その操作の実行範囲内での現在のスキーマ、現在のユーザー、およびその時点で有効にされるロールは、ビューの所有者から継承されるのではなく、問合せを実行したユーザーの環境から継承されます。

この句が、ビュー自体を実行者権限オブジェクトに変換することはありません。ビュー内での名前解決は、引き続きビューの所有者のスキーマを使用して処理され、ビューの権限チェックは、ビューの所有者の権限で実行されます。

DEFINER BEQUEATH DEFINERを指定すると、ビューで参照されるファンクションは、ビューの定義者権限で実行されます。ビューへの問合せがIDまたは権限に影響を受けるSQLファンクションを実行する場合や、実行者権限のPL/SQLまたはJavaファンクションを実行する場合、その操作の実行範囲内での現在のスキーマ、現在のユーザー、およびその時点で有効にされるロールは、ビューの所有者から継承されます。

ビュー内での名前解決はビューの所有者のスキーマを使用して処理され、ビューの権限チェックはビューの所有者の権限で実行されます。

これはデフォルトです。

BEQUEATH句の制限事項: EDITIONING句を使用してこの句を指定することはできません。

関連項目:
ビューでの実行者権限および定義者権限を制御する方法の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

AS subquery

ビューの基になっている表(実表)の列と行を識別する副問合せを指定します。副問合せのSELECT構文のリストには1000以下の式を指定できます。

リモート表およびリモート・ビューを参照するビューを作成する場合、CREATE DATABASE LINK文のCONNECT TO句を使用して、指定するデータベース・リンクを作成しておく必要があります。また、ビュー副問合せのスキーマ名で修飾する必要があります。

ビューを定義する問合せでflashback_query_clauseを使用してビューを作成した場合、AS OF式は作成時には解析されず、ユーザーがビューを問い合せるたびに解析されます。

関連項目:
Oracleフラッシュ・バック問合せの詳細は、「結合ビューの作成例:」および『Oracle Database開発ガイド』を参照してください。

ビューを定義する問合せの制限事項: ビュー問合せには、次の制限事項があります。

- 副問合せでは、CURRVALおよびNEXTVAL疑似列を選択できません。

- 副問合せでROWID、ROWNUMまたはLEVELの各疑似列を選択する場合、そのビュー副問合せには列の別名が必要です。

- 副問合せでアスタリスク(*)を使用して表のすべての列を選択し、後でその表に新しい列を追加する場合、CREATE OR REPLACE VIEW文を発行してビューを再作成するまで、追加した列はそのビューに含まれません。

- オブジェクト・ビューの場合、副問合せのSELECT構文のリスト内の要素数は、そのオブジェクト型の最上位属性数と同じである必要があります。それぞれの選択要素のデータ型は、対応する最上位属性と同じである必要があります。

- SAMPLE句は指定できません。

これらの制限は、マテリアライズド・ビューにも適用されます。

更新可能なビューの注意事項: 更新可能なビューには、次の注意事項があります。

更新可能なビューとは、実表の行を挿入、更新または削除できるビューです。更新可能なビューを作成するか、またはビューにINSTEAD OFトリガーを作成して更新可能にすることができます。

更新可能なビューの列を更新する方法を確認するには、USER_UPDATABLE_COLUMNSデータ・ディクショナリ・ビューを問い合せます。このビューで表示される情報は、更新可能なビューのみに意味があります。ビューを更新可能にするには、次の条件が満たされている必要があります。

- ビューの各列は、単一表の列にマップする必要があります。たとえば、ビューの列がTABLE句の出力にマップする場合(コレクション・ネスト解除)、ビューは更新可能ではありません。

- ビューには、次の構造体が含まれていない必要があります。

集合演算子

DISTINCT演算子

集計ファンクションまたは分析ファンクション

GROUP BY、ORDER BY、MODEL、CONNECT BYまたはSTART WITH句

SELECT構文のリストにあるコレクション式

SELECT構文のリストにある副問合せ

WITH READ ONLYが指定された副問合せ

結合(一部の例外を除く。詳細は、『Oracle Database管理者ガイド』を参照してください。)

- 更新可能なビューが疑似列または式を含む場合は、これらの疑似列または式を参照するUPDATE文を使用して、実表の行を更新できません。

- 結合ビューを更新可能にする場合、次のすべての条件が満たされている必要があります。

- DML文は、結合の基になる1つの表のみに影響する。

- INSERT文で、WITH CHECK OPTIONを指定してビューを作成しておらず、値が挿入されたすべての列がキー保存表の列である。実表の各主キーまたは一意キーの値に対するキー保存表は、結合ビューで一意である。

- UPDATE文で、WITH CHECK OPTIONを指定してビューを作成しておらず、更新されるすべての列はキー保存表から抽出されている。

- DELETE文の場合、結合によって複数のキー保存表が作成されると、ビューがWITH CHECK OPTIONを指定して作成されたかどうかにかかわらず、FROM句に指定された最初の表から削除されます。

関連項目:

- 更新可能なビューの詳細は、『Oracle Database管理者ガイド』を参照してください。

- 更新可能な結合ビューおよびキー保存表の例については、「更新可能なビューの作成例:」および「結合ビューの作成例:」を参照してください。更新できないビューのINSTEAD OFトリガーの例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。

subquery_restriction_clause

subquery_restriction_clauseを使用すると、次のいずれかの方法で、ビューを定義する問合せを制限できます。

WITH READ ONLY WITH READ ONLYを指定すると、表またはビューを更新禁止にできます。

WITH CHECK OPTION WITH CHECK OPTIONを指定すると、副問合せに含まれない行を生成する表またはビューの変更を禁止できます。この句をDML文の副問合せ内で使用する場合、FROM句内の副問合せには指定できますが、WHERE句内の副問合せには指定できません。

CONSTRAINT constraint READ ONLYまたはCHECK OPTION制約の名前を指定します。この識別子を省略した場合、その制約にSYS_Cnという形式の名前が自動的に割り当てられます。この場合のnは、その制約名をデータベース内で一意の名前にする整数です。

注意:
表にWITH CHECK OPTIONを指定すると、挿入および更新処理の結果、表を定義する副問合せによって選択可能な表が戻されることが保証されます。ビューでは、次の場合、WITH CHECK OPTIONを指定してもこれらの保証はされません。

- 対象のビュー、または対象のビューの基礎となるビューを定義する問合せ内に、副問合せが含まれている場合。

- INSERT、UPDATEまたはDELETE操作がINSTEAD OFトリガーを使用して実行された場合。

subquery_restriction_clauseの制限事項: ORDER BY句を指定した場合、この句は指定できません。

関連項目:
「読取り専用ビューの作成例:」

例

ビューの作成例: 次の文は、サンプル表employeesのemp_viewという名前のビューを作成します。このビューには、部門20の従業員とその年間給与が表示されます。

CREATE VIEW emp_view AS
SELECT last_name, salary*12 annual_salary
FROM employees
WHERE department_id = 20;

この場合、副問合せで式salary*12に列の別名(annual_salary)を使用しているため、この式に基づく列の名前をビュー宣言で定義する必要はありません。

エディショニング・ビューの作成例: 次の文は、orders表のエディショニング・ビューを作成します。

CREATE EDITIONING VIEW ed_orders_view (o_id, o_date, o_status)
AS SELECT order_id, order_date, order_status FROM orders
WITH READ ONLY;

このビューを使用すると、アップグレードなどの管理操作時に、アプリケーションに影響を与えることなくorders表に対するDDL変更を実行できます。DML操作がこのビューそのものを対象とした場合にDMLトリガーを起動するよう、このビューにDMLトリガーを作成できます。ただし、DML操作がorders表を対象とした場合には起動しません。

制約付きのビューの作成例: 次の文は、サンプル表hr.employeesの制限付きのビューを作成し、ビューの列emailに一意制約を定義し、ビューの列emp_idにビューに対する主キー制約を定義します。

CREATE VIEW emp_sal (emp_id, last_name,
email UNIQUE RELY DISABLE NOVALIDATE,
CONSTRAINT id_pk PRIMARY KEY (emp_id) RELY DISABLE NOVALIDATE)
AS SELECT employee_id, last_name, email FROM employees;

更新可能なビューの作成例: 次の文は、employees表内の事務員全員の更新可能なビューclerkを作成します。従業員のID、姓、部門番号および職種はビューで参照でき、事務員の行のこれらの列のみを更新できます。

CREATE VIEW clerk AS
SELECT employee_id, last_name, department_id, job_id
FROM employees
WHERE job_id = 'PU_CLERK'
or job_id = 'SH_CLERK'
or job_id = 'ST_CLERK';

このビューでは、購買係のjob_idを購買マネージャ(PU_MAN)に変更できます。

UPDATE clerk SET job_id = 'PU_MAN' WHERE employee_id = 118;

次の例は、同じビューをWITH CHECK OPTION付きで作成します。新しい従業員が事務員ではない場合は、clerkに新しい行を挿入できません。従業員のjob_idを他の事務タイプに更新できますが、事務員以外のjob_idの場合はビューがemployeesにアクセスできないため、正常に更新できません。

CREATE VIEW clerk AS
SELECT employee_id, last_name, department_id, job_id
FROM employees
WHERE job_id = 'PU_CLERK'
or job_id = 'SH_CLERK'
or job_id = 'ST_CLERK'
WITH CHECK OPTION;

結合ビューの作成例: 結合ビューは、結合を含むビューの副問合せを持つビューです。副問合せの結合において、一意索引を持つ列が1列以上ある場合、結合ビューで1つの実表を変更できます。結合ビューの中の列が更新可能であるかどうかは、USER_UPDATABLE_COLUMNSを問い合せることでわかります。次に例を示します。

CREATE VIEW locations_view AS
SELECT d.department_id, d.department_name, l.location_id, l.city
FROM departments d, locations l
WHERE d.location_id = l.location_id;

SELECT column_name, updatable
FROM user_updatable_columns
WHERE table_name = 'LOCATIONS_VIEW'
ORDER BY column_name, updatable;

COLUMN_NAME                    UPD
------------------------------ ---
DEPARTMENT_ID                  YES
DEPARTMENT_NAME                YES
LOCATION_ID                    NO
CITY                           NO

前述の例では、locations表のlocation_id列に対する主キー索引は、locations_viewビュー内で一意ではありません。そのため、locationsはキー保存表ではなく、その実表の列は更新できません。

INSERT INTO locations_view VALUES
(999, 'Entertainment', 87, 'Roma');
INSERT INTO locations_view VALUES
*
ERROR at line 1:
ORA-01776: cannot modify more than one base table through a join view

departments表にマップするビュー内のすべての列に更新可能のマークが付けられていて、departmentsの主キーがビューに保持されているため、departments実表に対して、行の挿入、更新または削除を実行できます。

INSERT INTO locations_view (department_id, department_name)
VALUES (999, 'Entertainment');

1 row created.

注意:
ビューを使用して表に挿入するには、NOT NULL列に対してDEFAULT値を指定していないかぎり、結合内のすべての表のすべてのNOT NULL列がビューに含まれている必要があります。

関連項目:
結合ビューの更新の詳細は、『Oracle Database管理者ガイド』を参照してください。

読取り専用ビューの作成例: 次の文は、oe.customers表のcustomer_roという名前の読取り専用ビューを作成します。顧客の姓、言語、掛貸限度額のみがこのビューで参照できます。

CREATE VIEW customer_ro (name, language, credit)
AS SELECT cust_last_name, nls_language, credit_limit
FROM customers
WITH READ ONLY;

オブジェクト・ビューの作成例: 次の例では、ocスキーマ内でのinventory_typ型の作成方法、およびその型を基にしたoc_inventoriesビューの作成方法を示します。

CREATE TYPE inventory_typ
OID '82A4AF6A4CD4656DE034080020E0EE3D'
AS OBJECT
( product_id          NUMBER(6)
, warehouse           warehouse_typ
, quantity_on_hand    NUMBER(8)
) ;
/
CREATE OR REPLACE VIEW oc_inventories OF inventory_typ
WITH OBJECT OID (product_id)
AS SELECT i.product_id,
warehouse_typ(w.warehouse_id, w.warehouse_name, w.location_id),
i.quantity_on_hand
FROM inventories i, warehouses w
WHERE i.warehouse_id=w.warehouse_id;

XMLType表のビューの作成例: 次の例は、XMLType表xwarehouses(「例」で作成)の通常のビューを作成します。

CREATE VIEW warehouse_view AS
SELECT VALUE(p) AS warehouse_xml
FROM xwarehouses p;

このビューからは、次のように選択します。

SELECT e.warehouse_xml.getclobval()
FROM warehouse_view e
WHERE EXISTSNODE(warehouse_xml, '//Docks') =1;

XMLTypeビューの作成例: オブジェクト・リレーショナル表に、XMLTypeビューを作成する場合もあります。次の例は、サンプル表oe.warehouses内のXMLType列warehouse_specと同様のオブジェクト・リレーショナル表を作成し、その表のXMLTypeビューを作成します。

CREATE TABLE warehouse_table
(
WarehouseID       NUMBER,
Area              NUMBER,
Docks             NUMBER,
DockType          VARCHAR2(100),
WaterAccess       VARCHAR2(10),
RailAccess        VARCHAR2(10),
Parking           VARCHAR2(20),
VClearance        NUMBER
);

INSERT INTO warehouse_table
VALUES(5, 103000,3,'Side Load','false','true','Lot',15);

CREATE VIEW warehouse_view OF XMLTYPE
XMLSCHEMA "http://www.example.com/xwarehouses.xsd"
ELEMENT "Warehouse"
WITH OBJECT ID
(extract(OBJECT_VALUE, '/Warehouse/Area/text()').getnumberval())
AS SELECT XMLELEMENT("Warehouse",
XMLFOREST(WarehouseID as "Building",
area as "Area",
docks as "Docks",
docktype as "DockType",
wateraccess as "WaterAccess",
railaccess as "RailAccess",
parking as "Parking",
VClearance as "VClearance"))
FROM warehouse_table;

このビューは、次のように問い合せます。

SELECT VALUE(e) FROM warehouse_view e;

DELETE

用途

DELETE文を使用すると、次の表から行を削除できます。

- 非パーティション表またはパーティション表

- ビューの非パーティション実表またはパーティション実表

- 書込み可能なマテリアライズド・ビューの非パーティション・コンテナ表またはパーティション・コンテナ表

- 更新可能なマテリアライズド・ビューの非パーティション・マスター表またはパーティション・マスター表

追加トピック

- 前提条件

- 構文

- セマンティクス

- 例

前提条件

表から行を削除する場合、その表が自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、その表に対するDELETEオブジェクト権限が必要です。

更新可能なマテリアライズド・ビューから行を削除する場合、そのマテリアライズド・ビューが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、そのマテリアライズド・ビューに対するDELETEオブジェクト権限が必要です。

ビューの実表から行を削除する場合、そのビューが含まれるスキーマの所有者には、その実表に対するDELETEオブジェクト権限が必要です。また、他のスキーマ内にビューが存在している場合は、そのビューに対するDELETEオブジェクト権限が必要です。

DELETE ANY TABLEシステム権限を持っている場合、任意の表、表パーティションまたは任意のビューの実表から行を削除できます。

リモート・データベースのオブジェクトの行を削除するには、オブジェクトのREADまたはSELECTオブジェクト権限も必要です。

SQL92_SECURITY初期化パラメータがTRUEに設定され、DELETE操作がwhere_clauseの列などの表の列を参照する場合、行を削除するオブジェクトのSELECTオブジェクト権限も必要です。

表のファンクション索引が無効な状態にあるとき、表から行を削除できません。まず、ファンクション索引を検証する必要があります。

構文

delete::=

(DML_table_expression_clause::=、where_clause::=、returning_clause ::=、error_logging_clause ::=を参照)

DML_table_expression_clause::=

(partition_extension_clause::=、subquery::=、subquery_restriction_clause::=、table_collection_expression::=を参照)

partition_extension_clause::=

subquery_restriction_clause::=

table_collection_expression::=

where_clause::=

returning_clause::=

error_logging_clause::=

セマンティクス

hint

文の実行計画を選択する場合に、オプティマイザに指示を与えるためのコメントを指定します。

関連項目:
ヒントの構文および説明については、「ヒント」を参照してください。

from_clause

FROM句を使用すると、行を削除するデータベース・オブジェクトを指定できます。

ONLY構文は、ビューのみに関連します。FROM句のビューがビューの階層に属し、そのいずれのサブビューからも行を削除しない場合は、ONLY句を使用します。

DML_table_expression_clause

この句を使用すると、データを削除するオブジェクトを指定できます。

schema

表またはビューが含まれているスキーマを指定します。schemaを指定しない場合、表またはビューは自分のスキーマにあるとみなされます。

table | view | materialized view | subquery

行を削除する表、ビュー、マテリアライズド・ビュー、列または副問合せの結果の列の名前を指定します。

更新可能なビューから行を削除すると、実表から行が削除されます。

読取り専用マテリアライズド・ビューからは行を削除できません。書込み可能なマテリアライズド・ビューから行を削除する場合、基礎となるコンテナ表から行が削除されます。ただし、その削除は次のリフレッシュ操作で上書きされます。マテリアライズド・ビュー・グループ内の更新可能なマテリアライズド・ビューから行を削除する場合、マスター表の対応する行も削除されます。

table、viewの実表またはmaterialized_viewのマスター表に、1列以上のドメイン索引列が含まれる場合は、この文によって適切な索引タイプの削除ルーチンが実行されます。

関連項目:
これらのルーチンの詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。

表に対してDELETE文を実行すると、その表に定義されているDELETEトリガーが起動されます。

行の削除によって解放される表や索引のすべての領域は、表および索引によって引き続き保持されます。

partition_extension_clause

オブジェクト内にある削除対象のパーティションまたはサブパーティションの名前またはパーティション・キー値を指定します。

パーティション・オブジェクトから値を削除する場合、そのパーティション名を指定する必要はありません。ただし、パーティション名を指定した方が、複雑なwhere_clauseより効率が上がることがあります。

関連項目:
「パーティション表と索引の参照」および「パーティションの行の削除例:」を参照してください。

dblink

オブジェクトが格納されているリモート・データベースへのデータベース・リンクの完全名または部分名を指定します。Oracle Databaseの分散機能を使用している場合にのみ、リモート・オブジェクトから行を削除できます。

関連項目:
データベース・リンクの参照方法の詳細は、「リモート・データベース内のオブジェクトの参照」および「リモート・データベースの行の削除例:」参照してください。

dblinkを省略した場合、オブジェクトがローカル・データベース上にあるとみなされます。

subquery_restriction_clause

subquery_restriction_clauseを使用すると、次のいずれかの方法で副問合せを制限できます。

WITH READ ONLY WITH READ ONLYを指定すると、表またはビューを更新禁止にできます。

WITH CHECK OPTION WITH CHECK OPTIONを指定すると、副問合せに含まれない行を生成する表またはビューの変更を禁止できます。この句をDML文の副問合せ内で使用する場合、FROM句内の副問合せには指定できますが、WHERE句内の副問合せには指定できません。

CONSTRAINT constraint CHECK OPTION制約の名前を指定します。この識別子を省略した場合は、Oracleによって自動的にSYS_Cnという形式の制約名が割り当てられます(nはデータベース内で制約名を一意にするための整数)。

関連項目:
「WITH CHECK OPTION句の使用例:」

table_collection_expression

table_collection_expressionを使用すると、問合せおよびDML操作で、collection_expression値を表として扱うことができます。collection_expressionには、副問合せ、列、ファンクションまたはコレクション・コンストラクタのいずれかを指定できます。その形式にかかわらず、集合値(ネストした表型またはVARRAY型の値)を戻す必要があります。このようなコレクションの要素抽出プロセスをコレクション・ネスト解除といいます。

TABLEコレクション式を親表と結合する場合は、オプションのプラス(+)には大きな意味があります。+を指定すると、その2つの外部結合が作成され、コレクション式がNULLの場合でも、外部表の行が問合せで戻されるようになります。

注意:
以前のリリースのOracleでは、collection_expressionが副問合せの場合、table_collection_expressionをTHE subqueryと表現していました。現在、このような表現方法は非推奨になっています。

相関副問合せでtable_collection_expressionを使用すると、他の表に存在する値で行を削除できます。

関連項目:
「表のコレクション例:」

collection_expression 削除するオブジェクトからネストした表の列を選択する副問合せを指定します。

dml_table_expression_clause句の制限事項: この句には、次の制限事項があります。

- viewまたはmaterialized_viewのtable(実表またはマスター表)にIN_PROGRESSまたはFAILEDのマークが付いたドメイン索引がある場合、この文は実行できません。

- 関係する索引パーティションがUNUSABLEとマークされている場合は、パーティションに挿入できません。

- DML_table_expression_clauseの副問合せでは、ORDER BY句を指定できません。

- ビューを定義する問合せに次のいずれかの構造体が含まれている場合は、INSTEAD OFトリガーを使用する場合を除いて、ビューから行を削除できません。

集合演算子

DISTINCT演算子

集計ファンクションまたは分析ファンクション

GROUP BY、ORDER BY、MODEL、CONNECT BYまたはSTART WITH句

SELECT構文のリストにあるコレクション式

SELECT構文のリストにある副問合せ

WITH READ ONLYが指定された副問合せ

結合(一部の例外を除く。詳細は、『Oracle Database管理者ガイド』を参照してください。)

UNUSABLEのマークが付いている索引、索引パーティションまたは索引サブパーティションを指定する場合、SKIP_UNUSABLE_INDEXES初期化パラメータがtrueに設定されていないかぎり、DELETE文は正常に実行されません。

関連項目:
「ALTER SESSION」

where_clause

where_clauseを使用すると、条件を満たす行のみを削除できます。この条件は、行を削除するオブジェクトを参照したり、副問合せを含むことができます。Oracle Databaseの分散機能を使用している場合にのみ、リモート・オブジェクトから行を削除できます。conditionの構文は、第6章「条件」を参照してください。

この句がリモート・オブジェクトを参照するsubqueryを含む場合、参照がローカル・データベース上でオブジェクトにループバックしないかぎり、DELETEはパラレルで実行されます。ただし、DML_table_expression_clauseのsubqueryがリモート・オブジェクトを参照する場合は、DELETE操作はシリアルで実行されます。詳細は、「CREATE TABLE」の「parallel_clause」を参照してください。

dblinkを省略した場合、表またはビューがローカル・データベース上にあるとみなされます。

where_clauseを省略した場合、オブジェクトのすべての行が削除されます。

t_alias  文中で参照する表、ビュー、マテリアライズド・ビュー、副問合せまたはコレクション値の相関名を指定します。DML_table_expression_clauseがいずれかのオブジェクト型属性またはオブジェクト型メソッドを参照する場合、この別名が必要です。通常、別名は相関問合せを持つDELETE文で使用されます。

returning_clause

この句を使用すると、削除された列から値を戻すことができるため、DELETE文の後でSELECT文を実行する必要がなくなります。

この句を使用すると、DML文に影響される行を取り出すことができます。この句は、表、マテリアライズド・ビュー、および単一の実表を持つビューに指定できます。

returning_clauseを指定したDML文を単一行に実行すると、影響された行、ROWID、および処理された行へのREFを使用している列式が取り出され、ホスト変数またはPL/SQL変数に格納されます。

returning_clauseを指定したDML文を複数行に実行すると、式の値、ROWIDおよび処理された行に関連するREFがバインド配列に格納されます。

expr exprリストの各項目は、適切な構文で表す必要があります。

INTO INTO句を指定すると、変更された行の値を、data_itemリストに指定する変数に格納できます。

data_item data_itemはそれぞれ、取り出したexpr値を格納するためのホスト変数またはPL/SQL変数です。

RETURNINGリストの各式については、INTOリストに、対応する型に互換性があるPL/SQL変数またはホスト変数を指定する必要があります。

制限事項: RETURNING句には、次の制限事項があります。

- exprに次の制限事項があります。

- UPDATE文およびDELETE文の場合、各exprは、単純式または単一セットの集計ファンクション式である必要があります。1つのreturning_clause内に単純式と単一セットの集計ファンクション式を混在させることはできません。INSERT文の場合、各exprは単純式である必要があります。INSERT文のRETURNING句では、集計ファンクションはサポートされていません。

- 単一セットの集計ファンクション式をDISTINCTキーワードに含めることはできません。

- exprのリストに主キー列または他のNOT NULL列が含まれている場合は、表にBEFORE UPDATEトリガーが定義されていると、UPDATE文の実行に失敗します。

- マルチテーブル・インサートではreturning_clauseを指定できません。

- パラレルDMLまたはリモート・オブジェクトにはこの句を使用できません。

- LONG型を取り出すことはできません。

- INSTEAD OFトリガーが定義されたビューに対して指定することはできません。

関連項目:

- BULK COLLECT句を使用してコレクション変数に複数の値を戻す場合は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

- 「RETURNING句の使用例:」

error_logging_clause

error_logging_clauseのDELETE文での動作は、INSERT文の場合と同じです。詳細は、「INSERT」文の「error_logging_clause」を参照してください。

関連項目:
「エラー・ロギングによる表への挿入例:」

例

行の削除例: 次の文は、language_id列の値がARの、サンプル表oe.product_descriptionsからすべての行を削除します。

DELETE FROM product_descriptions
WHERE language_id = 'AR';

次の文は、サンプル表hr.employeesから歩合率が10%未満の購買係を削除します。

DELETE FROM employees
WHERE job_id = 'SA_REP'
AND commission_pct < .2;

次の文は前述の例と同じ結果を表しますが、副問合せを使用します。

DELETE FROM (SELECT * FROM employees)
WHERE job_id = 'SA_REP'
AND commission_pct < .2;

リモート・データベースの行の削除例: 次の文は、データベース・リンクremoteによってアクセス可能なデータベースの、ユーザーhrが所有するlocations表から指定した行を削除します。

DELETE FROM hr.locations@remote
WHERE location_id > 3000;

ネストした表の行の削除例: ネストした表の行の削除例は、「表のコレクション例:」を参照してください。

パーティションの行の削除例: 次の例は、sh.sales表のパーティションsales_q1_1998から行を削除します。

DELETE FROM sales PARTITION (sales_q1_1998)
WHERE amount_sold > 1000;

RETURNING句の使用例:

次の例は、削除された行からsalary列を戻し、その結果をバインド配列:bnd1に格納します。バインド配列は事前に宣言しておく必要があります。

DELETE FROM employees
WHERE job_id = 'SA_REP'
AND hire_date + TO_YMINTERVAL('01-00') < SYSDATE
RETURNING salary INTO :bnd1;

DISASSOCIATE STATISTICS

用途

DISASSOCIATE STATISTICS文を使用すると、デフォルトの統計情報または統計タイプと、列、スタンドアロン・ファンクション、パッケージ、型、ドメイン索引または索引タイプとの関連付けを解除できます。

関連項目:
統計タイプの関連付けの詳細は、「ASSOCIATE STATISTICS」を参照してください。

前提条件

この文を発行する場合は、基礎となる表、ファンクション、パッケージ、型、ドメイン索引または索引タイプを変更する適切な権限が必要です。

構文

disassociate_statistics::=

セマンティクス

FROM COLUMNS | FUNCTIONS | PACKAGES | TYPES | INDEXES | INDEXTYPES

統計との関連付けを解除する1つ以上の列、スタンドアロン・ファンクション、パッケージ、型、ドメイン索引または索引タイプを指定します。

schemaを指定しない場合、オブジェクトは自分のスキーマ内にあるとみなされます。

オブジェクトのユーザー定義の統計情報を収集する場合、FORCEを指定しないかぎり文は実行されません。

FORCE

FORCEを指定すると、統計タイプを使用するオブジェクトの統計情報の有無にかかわらず、関連付けが解除されます。統計情報が存在する場合、関連付けが解除される前にその統計情報は削除されます。

注意:
統計タイプが関連付けられているオブジェクトを削除する場合、FORCEオプションによって統計タイプの関連付けが自動的に解除され、統計タイプを使用して収集したすべての統計情報が削除されます。

例

統計情報の関連付けの解除例: 次の文は、emp_mgmtパッケージと統計情報の関連付けを解除します。hrスキーマにこのパッケージを作成する例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。

DISASSOCIATE STATISTICS FROM PACKAGES hr.emp_mgmt;

DROP AUDIT POLICY (統合監査)

この項では、統合監査用のDROP AUDIT POLICY文について説明します。この種類の監査は、Oracle Database 12cで新たに導入されたもので、完全かつ高度な監査機能を提供します。統合監査の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

用途

DROP AUDIT POLICY文を使用すると、データベースから統合監査ポリシーを削除できます。

関連項目:

- CREATE AUDIT POLICY (統合監査)

- ALTER AUDIT POLICY (統合監査)

- AUDIT (統合監査)

- NOAUDIT (統合監査)

前提条件

AUDIT SYSTEMシステム権限、またはAUDIT_ADMINロールが必要になります。

共通の統合監査ポリシーを削除する場合は、現在のコンテナがルートである必要があります。また、共通に付与されているAUDIT SYSTEM権限またはAUDIT_ADMIN共通ロールが必要です。ローカルの統合監査ポリシーを削除する場合は、現在のコンテナが、その監査ポリシーが作成されたコンテナである必要があります。また、共通に付与されているAUDIT SYSTEM権限またはAUDIT_ADMIN共通ロールを保有しているか、そのコンテナでローカルに付与されているAUDIT SYSTEM権限またはAUDIT_ADMINローカル・ロールを保有している必要があります。

構文

drop_audit_policy::=

セマンティクス

ポリシー

削除する統合監査ポリシーの名前を指定します。このポリシーは、CREATE AUDIT POLICY文を使用して作成されている必要があります。

AUDIT_UNIFIED_POLICIESビューを問い合せて、すべての統合監査ポリシーの名前を検索したり、AUDIT_UNIFIED_ENABLED_POLICIESビューを問い合せて、有効になっているすべての統合監査ポリシーの名前を検索できます。

統合監査ポリシーを削除する場合の制限事項 有効になっている統合監査ポリシーは削除できません。まずNOAUDIT文を使用してポリシーを無効化する必要があります。

関連項目:

- CREATE AUDIT POLICY (統合監査)

- AUDIT_UNIFIED_POLICIESおよびAUDIT_UNIFIED_ENABLED_POLICIESビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

例

統合監査ポリシーを削除する例: 次の文は、統合監査ポリシーtable_polを削除します。

DROP AUDIT POLICY table_pol;

DROP CLUSTER

用途

DROP CLUSTER文を使用すると、データベースからクラスタを削除できます。

注意:
クラスタを削除すると、ごみ箱内のそのクラスタの一部だった表はごみ箱から消去され、FLASHBACK TABLE操作でもリカバリできなくなります。

個々の表は非クラスタ化できません。そのかわり、次の手順を実行します。

1. 既存の表と同じ構成および内容で、新しい表をCLUSTER句なしで作成します。

2. 既存の表を削除します。

3. RENAME文を使用して、新しい表に既存の表の名前を指定します。

4. 新しいクラスタ化表に対する権限を付与します。古いクラスタ化表に対する権限は使用できません。

関連項目:
これらの手順の詳細は、「CREATE TABLE」、「DROP TABLE」、「RENAME」および「GRANT」を参照してください。

前提条件

削除するクラスタが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、DROP ANY CLUSTERシステム権限が必要です。

構文

drop_cluster::=

セマンティクス

schema

クラスタが含まれているスキーマを指定します。schemaを指定しない場合、クラスタは自分のスキーマ内にあるとみなされます。

cluster

削除するクラスタの名前を指定します。クラスタを削除するとクラスタの索引も削除され、その索引のデータ・ブロックを含むクラスタ領域が表領域に戻されます。

INCLUDING TABLES

INCLUDING TABLESを指定すると、クラスタに属するすべての表を削除できます。

CASCADE CONSTRAINTS

CASCADE CONSTRAINTSを指定すると、クラスタに含まれる表の主キーまたは一意キーを参照するクラスタ外の表から、すべての参照整合性制約を削除できます。このような参照整合性制約があるときにこの句の指定を省略した場合、エラーが戻され、クラスタは削除されません。

例

クラスタの削除例: 次の例は、クラスタ(「CREATE CLUSTER」の「例」で作成)を削除します。

次の文は、languageクラスタを削除します。

DROP CLUSTER language;

次の文は、dept_10、dept_20およびこれらの表の主キーまたは一意キーを参照する参照整合性制約とともにpersonnelクラスタを削除します。

DROP CLUSTER personnel
INCLUDING TABLES
CASCADE CONSTRAINTS;

DROP CONTEXT

用途

DROP CONTEXT文を使用すると、データベースからコンテキスト・ネームスペースを削除できます。

コンテキスト・ネームスペースを削除した場合でも、ユーザー・セッションに設定されたネームスペースのコンテキストは無効になりません。ただし、ユーザーがそのコンテキストを設定しようとした場合、そのコンテキストは無効になります。

関連項目:
コンテキストの詳細は、「CREATE CONTEXT」および『Oracle Databaseセキュリティ・ガイド』を参照してください。

前提条件

DROP ANY CONTEXTシステム権限が必要です。

構文

drop_context::=

セマンティクス

namespace

削除するコンテキスト・ネームスペースの名前を指定します。組込みネームスペースUSERENVは削除できません。

関連項目:
USERENVネームスペースの詳細は、「SYS_CONTEXT」を参照してください。

例

アプリケーション・コンテキストの削除例: 次の文は、コンテキスト(「CREATE CONTEXT」で作成)を削除します。

DROP CONTEXT hr_context;

DROP DATABASE

用途

注意:
DROP DATABASE文はロールバックできません。

DROP DATABASE文を使用すると、データベースを削除できます。この文は、テスト・データベースを削除したり、新しいホストへの移行が完了した後に古いデータベースを削除する場合に便利です。

関連項目:
データベースの削除の詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

前提条件

この文を発行するには、SYSDBAシステム権限が必要です。データベースは、排他モードおよび制限モードでマウントされている必要があります。また、データベースはクローズ状態である必要があります。

構文

drop_database::=

セマンティクス

この文を発行すると、データベースを削除し、すべての制御ファイル、およびその制御ファイルに記述されているデータファイルを削除できます。サーバー・パラメータ・ファイル(SPFILE)を使用している場合は、それも削除されます。

アーカイブ・ログおよびバックアップは削除されません。これらを削除するには、Recovery Manager(RMAN)を使用します。データベースがRAWディスク上に存在する場合、この文では実際のRAWディスクの特殊ファイルは削除されません。

DROP DATABASE LINK

用途

DROP DATABASE LINK文を使用すると、データベースからデータベース・リンクを削除できます。

関連項目:
データベース・リンクの作成方法については、「CREATE DATABASE LINK」を参照してください。

前提条件

プライベート・データベース・リンクは自分のスキーマにある必要があります。PUBLICデータベース・リンクを削除する場合は、DROP PUBLIC DATABASE LINKシステム権限が必要です。

構文

drop_database_link::=

セマンティクス

PUBLIC

PUBLICを指定すると、PUBLICデータベース・リンクを削除できます。

dblink

削除するデータベース・リンクの名前を指定します。

データベース・リンクの削除の制限事項 他のユーザーのスキーマ内のデータベース・リンクは削除できません。また、データベース・リンク名ではピリオドが許可されるため、スキーマ名でdblinkを修飾することはできません。そのため、ralph.linktosalesのような名前を付けた場合、スキーマralphの中のlinktosalesという名前のデータベース・リンクであるとはみなされず、名前全体が自分のスキーマにあるデータベース・リンク名であると解析されます。

例

データベース・リンクの削除例: 次の文は、パブリック・データベース・リンクremote(「パブリック・データベース・リンクの定義例:」で作成)を削除します。

DROP PUBLIC DATABASE LINK remote;

DROP DIMENSION

用途

DROP DIMENSION文を使用すると、指定したディメンションを削除できます。

この文によって、ディメンションに指定された関連を使用するマテリアライズド・ビューが無効になるわけではありません。ただし、クエリー・リライトによってリライトされた要求が無効になり、そのようなビューに対する後続の操作の処理速度が遅くなることがあります。

関連項目:

- ディメンションの作成および変更については、「CREATE DIMENSION」および「ALTER DIMENSION」を参照してください。

- ディメンションの概要は、『Oracle Database概要』を参照してください。

前提条件

この文を使用する場合、ディメンションが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、DROP ANY DIMENSIONシステム権限が必要です。

構文

drop_dimension::=

セマンティクス

schema

ディメンションが格納されているスキーマの名前を指定します。schemaを指定しない場合、ディメンションは自分のスキーマ内にあるとみなされます。

dimension

削除するディメンションの名前を指定します。そのディメンションはすでに存在している必要があります。

例

ディメンションの削除例: この例は、sh.customers_dimディメンションを削除します。

DROP DIMENSION customers_dim;

関連項目:
ディメンションの作成および変更の例については、「ディメンションの作成例:」および「ディメンションの変更例:」を参照してください。

DROP DIRECTORY

用途

DROP DIRECTORY文を使用すると、データベースからディレクトリ・オブジェクトを削除できます。

関連項目:
ディレクトリの作成については、「CREATE DIRECTORY」を参照してください。

前提条件

ディレクトリを削除する場合は、DROP ANY DIRECTORYシステム権限が必要です。

注意:
PL/SQLまたはOCIプログラムによる関連ファイル・システム内のファイルへのアクセス中は、DROPによるディレクトリの削除はできません。

構文

drop_directory::=

セマンティクス

directory_name

削除するディレクトリ・データベース・オブジェクトの名前を指定します。

Oracle Databaseはディレクトリ・オブジェクトを削除しますが、サーバーのファイル・システム上の関連するオペレーティング・システム・ディレクトリは削除しません。

例

ディレクトリの削除例: 次の文は、ディレクトリ・オブジェクトbfile_dirを削除します。

DROP DIRECTORY bfile_dir;

関連項目:
「ディレクトリの作成例:」

DROP DISKGROUP

注意:
このSQL文は、Oracle ASMを使用しており、Oracle ASMインスタンスを起動している場合にのみ有効です。この文の発行は、通常のデータベース・インスタンスからではなく、Oracle ASMインスタンスから行う必要があります。Oracle ASMインスタンスの起動の詳細は、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

用途

DROP DISKGROUP文を使用すると、Oracle ASMディスク・グループおよびそのディスク・グループのすべてのファイルを削除できます。Oracle ASMでは、最初にディスク・グループのファイルが開かれていないことが確認されます。次に、ディスク・グループおよびそのメンバー・ディスクがすべて削除され、ディスク・ヘッダーが消去されます。

関連項目:

- ディスク・グループの作成および変更については、「CREATE DISKGROUP」および「ALTER DISKGROUP」を参照してください。

- Oracle ASMおよびディスク・グループを使用してデータベース管理を簡略化する方法については、『Oracle Automatic Storage Management管理者ガイド』を参照してください。

前提条件

SYSASMシステム権限が必要です。また、この文を発行するOracle ASMインスタンスが起動されている必要があります。削除するディスク・グループはマウントされている必要があります。

構文

drop_diskgroup::=

セマンティクス

diskgroup_name

削除するディスク・グループの名前を指定します。

INCLUDING CONTENTS

INCLUDING CONTENTSを指定すると、Oracle ASMによってディスク・グループのすべてのファイルが削除されます。ディスク・グループにファイルが含まれている場合、この句を指定する必要があります。

EXCLUDING CONTENTS

EXCLUDING CONTENTSを指定すると、Oracle ASMによって空のディスク・グループのみが削除されます。これはデフォルトです。ディスク・グループが空ではない場合、エラーが戻されます。

FORCE

この句では、Oracle ASMインスタンスではマウントできないディスク・グループに属するディスク上のヘッダーがクリアされます。ディスク・グループは、データベースのインスタンスからはマウントできません。

Oracle ASMインスタンスは、ディスク・グループが、同じストレージ・サブシステムを使用する他のOracle ASMで使用されているかどうかをまず確認します。ディスク・グループが使用されており、このディスク・グループが同じクラスタまたは同じノードにあるときは、文の実行に失敗します。ディスク・グループが異なるクラスタにある場合は、さらに、そのディスク・グループが別のクラスタ内のインスタンスによってマウントされているかどうかがチェックされます。ディスク・グループがマウントされている場合、この文の実行は失敗します。ただし、後者のチェックは、同じクラスタのディスク・グループのチェックほど確実なものではありません。そのため、この句の使用には注意が必要です。

例

ディスク・グループの削除例: 次の文は、Oracle ASMディスク・グループdgroup_01(「ディスク・グループの作成例:」で作成)およびそのディスク・グループ内のすべてのファイルを削除します。

DROP DISKGROUP dgroup_01 INCLUDING CONTENTS;

DROP EDITION

用途

DROP EDITION文を使用すると、エディション、およびそれに含まれる実際のエディション化可能なすべてのオブジェクトを削除できます。実際のエディション化可能なオブジェクトとは、エディション内で作成または変更されたエディション化可能なオブジェクトのことです。

関連項目:
エディション化可能なオブジェクト型のリストについては、「CREATE EDITION」を参照してください。

前提条件

直接またはロールを介して付与されたDROP ANY EDITIONシステム権限が必要です。

構文

drop_edition::=

セマンティクス

この文が正常に実行されると、指定したエディションと、そのエディションに関連付けられているすべてのオブジェクトのバージョンが削除されます。他のエディションにある同じオブジェクトのバージョンは削除されません。エディション化が可能でないオブジェクト、またはエディション化が可能でも現行のエディションで実体化されていないオブジェクトは、削除されません。

指定したエディションに実際のエディション化可能なオブジェクトが含まれている場合は、CASCADEを指定する必要があります。

この文には、次の条件および制限事項があります。

- 指定したエディションに、親エディションと子エディションの両方は存在できません。

- CASCADEを指定した場合でも、指定したエディションには、子エディションによって継承される実際のエディション化可能なオブジェクトを含めることはできません。

- デフォルト・エディションを削除しようとすると、DROP EDITIONは失敗します。

- ルート・エディションを削除しようとしたときに、そのエディションから以前に削除されたオブジェクトがごみ箱に少なくとも1つ存在する場合、DROP EDITIONは失敗します。このような状況では、DROP EDITION CASCADEも失敗します。この場合、PURGE DBA_RECYCLEBIN文を使用してごみ箱内のすべてのオブジェクトを消去してから、エディションを削除してください。詳細は、「PURGE」を参照してください。
同様に、リーフ・エディションを削除しようとしたときに、そのエディションから以前に削除されたオブジェクトがごみ箱に少なくとも1つ存在する場合、DROP EDITIONは失敗します。ただし、このような状況でも、DROP EDITION CASCADEは成功します。

エディション化されたオブジェクトがごみ箱に入れられるのは、そのオブジェクトがトリガーである場合のみです。

例

この文の使用例については、「CREATE EDITION」を参照してください。

DROP FLASHBACK ARCHIVE

用途

DROP FLASHBACK ARCHIVE句を使用すると、システムからフラッシュバック・データ・アーカイブを削除できます。この文では、フラッシュバック・データ・アーカイブとこの中にあるすべての履歴データが削除されますが、フラッシュバック・データ・アーカイブによって使用されている表領域は削除されません。

前提条件

フラッシュバック・データ・アーカイブを削除するには、FLASHBACK ARCHIVE ADMINISTERシステム権限が必要です。

構文

drop_flashback_archive::=

セマンティクス

flashback_archive

削除するフラッシュバック・データ・アーカイブの名前を指定します。

関連項目:
フラッシュバック・データ・アーカイブの作成の詳細およびフラッシュバック・データ・アーカイブの簡単な使用例は、「CREATE FLASHBACK ARCHIVE」を参照してください。

DROP FUNCTION

用途

ファンクションはPL/SQLを使用して定義されます。ファンクションの作成、変更および削除の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

DROP FUNCTION文を使用すると、データベースからスタンドアロン・ストアド・ファンクションを削除できます。

注意:
この文を使用してパッケージに含まれるファンクションを削除しないでください。かわりに、DROP PACKAGE文を使用してパッケージ全体を削除するか、またはOR REPLACE句を指定したCREATE PACKAGE文を使用して、そのファンクションを含めずにパッケージを再定義してください。

前提条件

削除するファンクションが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、DROP ANY PROCEDUREシステム権限が必要です。

構文

drop_function::=

セマンティクス

schema

ファンクションが含まれているスキーマを指定します。schemaを指定しない場合、ファンクションは自分のスキーマ内にあるとみなされます。

function_name

削除するファンクションの名前を指定します。

Oracle Databaseは、削除したファンクションに依存するローカル・オブジェクト、または削除したファンクションをコールするローカル・オブジェクトを無効にします。後でこれらのオブジェクトのいずれかを参照した場合、データベースは、そのオブジェクトを再コンパイルしようとします。削除したファンクションを再作成しないかぎり、エラーが戻されます。

任意の統計タイプがファンクションに関連付けられている場合、FORCE句によって統計タイプの関連付けが解除され、統計タイプを使用して収集したユーザー定義のすべての統計情報が削除されます。

関連項目:

- リモート・オブジェクトを含むスキーマ・オブジェクト間の依存性をOracle Databaseが管理する方法については、『Oracle Database概要』を参照してください。

- 統計タイプの関連付けの詳細は、「ASSOCIATE STATISTICS」および「DISASSOCIATE STATISTICS」を参照してください。

例

ファンクションの削除例: 次の文は、サンプル・スキーマoe内のファンクションSecondMaxを削除します。この場合、SecondMaxに依存するすべてのオブジェクトは無効になります。

DROP FUNCTION oe.SecondMax;

関連項目:
SecondMaxファンクションを作成する例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。

「DROP INDEX」

用途

DROP INDEX文を使用すると、データベースから索引またはドメイン索引を削除できます。

グローバル・パーティション索引、レンジ・パーティション索引またはハッシュ・パーティション索引を削除すると、すべての索引パーティションも削除されます。コンポジット・パーティション索引を削除した場合、すべての索引パーティションおよびサブパーティションも削除されます。

また、ドメイン索引を削除すると、次のようになります。

- 適切なルーチンが起動されます。

- 任意の統計情報がドメイン索引に関連付けられている場合、FORCE句によって統計タイプの関連付けが解除され、その統計タイプを使用して収集したユーザー定義の統計情報が削除されます。

関連項目:

- ルーチンの詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。

- 索引の作成および変更の詳細は、「CREATE INDEX」および「ALTER INDEX」を参照してください。

- ドメイン索引の詳細は、「CREATE INDEX」の「domain_index_clause」を参照してください。

- 統計タイプの関連付けの詳細は、「ASSOCIATE STATISTICS」および「DISASSOCIATE STATISTICS」を参照してください。

前提条件

削除する索引が自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、DROP ANY INDEXシステム権限が必要です。

構文

drop_index::=

セマンティクス

schema

索引が含まれているスキーマを指定します。schemaを指定しない場合、索引は自分のスキーマ内にあるとみなされます。

index

削除する索引の名前を指定します。索引を削除すると、その索引に割り当てられていたすべてのデータ・ブロックが、その索引が含まれていた表領域に戻されます。

ONLINE

ONLINEを指定すると、索引の削除中に、表またはパーティションに対するDML操作が許可されるようになります。

FORCE

FORCEは、ドメイン索引のみに適用されます。この句を指定すると、索引タイプ・ルーチンの起動がエラーを戻した場合、または索引にIN PROGRESSのマークが付けられている場合でも、ドメイン索引を削除できます。FORCEがないと、その索引タイプ・ルーチンの起動がエラーを戻す場合、または索引にIN PROGRESSマークが付けられている場合にドメイン索引を削除できません。

索引の削除の制限事項: 索引の削除には、次の制限事項が適用されます。

- 索引またはその索引の索引パーティションにIN_PROGRESSのマークが付いているときには、ドメイン索引を削除できません。

- ドメイン索引、クラスタ索引、またはキュー表の索引を削除するときには、ONLINE句は指定できません。

例

索引の削除例: この文は、索引ord_customer_ix_demo(「索引の圧縮例:」で作成)を削除します。

DROP INDEX ord_customer_ix_demo;

DROP INDEXTYPE

用途

DROP INDEXTYPE文を使用すると、索引タイプを削除できます。同時に、統計タイプとの関連付けも解除されます。

関連項目:
索引タイプの詳細は、「CREATE INDEXTYPE」を参照してください。

前提条件

削除する索引タイプが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、DROP ANY INDEXTYPEシステム権限が必要です。

構文

drop_indextype::=

セマンティクス

schema

索引タイプが含まれているスキーマを指定します。schemaを指定しない場合、この索引タイプは自分のスキーマ内にあるとみなされます。

indextype

削除する索引タイプの名前を指定します。

任意の統計タイプが索引タイプに関連付けられている場合、統計タイプと索引タイプの関連付けが解除され、統計タイプを使用して収集したすべての統計情報が削除されます。

関連項目:
統計情報の関連付けの詳細は、「ASSOCIATE STATISTICS」および「DISASSOCIATE STATISTICS」を参照してください。

FORCE

FORCEを指定すると、1つ以上のドメイン索引から現在参照されている状態でも、その索引タイプを削除できます。これらのドメイン索引には、INVALIDマークが付けられます。FORCEを指定しない場合、任意のドメイン索引で参照されている索引タイプを削除できません。

例

索引タイプの削除例: 次の文は、索引タイプposition_indextype(「拡張索引作成機能の使用方法」で作成)を削除し、この索引タイプで定義されているすべてのドメイン索引にINVALIDのマークを付けます。

DROP INDEXTYPE position_indextype FORCE;

DROP JAVA

用途

DROP JAVA文を使用すると、Javaソース、クラスまたはリソース・スキーマ・オブジェクトを削除できます。

関連項目:

- Javaオブジェクトの作成については、「CREATE JAVA」を参照してください。

- Javaソース、クラスおよびリソースの変換の詳細は、『Oracle Database Java開発者ガイド』を参照してください。

前提条件

削除するJavaソース、クラスまたはリソースが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、DROP ANY PROCEDUREシステム権限が必要です。また、このコマンドを使用する場合は、Javaクラスに対するEXECUTEオブジェクト権限も必要です。

構文

drop_java::=

セマンティクス

JAVA SOURCE

SOURCEを指定すると、Javaソース・スキーマ・オブジェクトおよびそのオブジェクトから導出されたすべてのJavaクラス・スキーマ・オブジェクトを削除できます。

JAVA CLASS

CLASSを指定すると、Javaクラス・スキーマ・オブジェクトを削除できます。

JAVA RESOURCE

RESOURCEを指定すると、Javaリソース・スキーマ・オブジェクトを削除できます。

object_name

既存のJavaクラス、ソースまたはリソース・スキーマ・オブジェクトの名前を指定します。object_nameを二重引用符で囲むと、小文字の名前、または大文字と小文字を組み合せた名前を指定できます。

例

Javaクラス・オブジェクトの削除例: 次の文は、JavaクラスAgent(「Javaクラス・オブジェクトの作成例:」で作成)を削除します。

DROP JAVA CLASS "Agent";

DROP LIBRARY

用途

DROP LIBRARY文を使用すると、データベースから外部プロシージャ・ライブラリを削除できます。

関連項目:
ライブラリの作成については、「CREATE LIBRARY」を参照してください。

前提条件

DROP ANY LIBRARYシステム権限が必要です。

構文

drop_library::=

セマンティクス

library_name

削除する外部プロシージャ・ライブラリの名前を指定します。

例

ライブラリの削除例: 次の文は、ext_libライブラリを削除します。

DROP LIBRARY ext_lib;

DROP MATERIALIZED VIEW

用途

DROP MATERIALIZED VIEW文を使用すると、データベースから既存のマテリアライズド・ビューを削除できます。

削除したマテリアライズド・ビューは、ごみ箱内には移動しません。このため、削除したマテリアライズド・ビューを消去またはリカバリすることはできません。

注意:
下位互換性を保つために、MATERIALIZED VIEWのかわりにキーワードSNAPSHOTもサポートされています。

関連項目:

- 様々なタイプのマテリアライズド・ビューの詳細は、「CREATE MATERIALIZED VIEW」を参照してください。

- マテリアライズド・ビューの変更については、「ALTER MATERIALIZED VIEW」を参照してください。

- レプリケーション環境でのマテリアライズド・ビューの詳細は、『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

- データ・ウェアハウス環境でのマテリアライズド・ビューの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

前提条件

削除するマテリアライズド・ビューが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、DROP ANY MATERIALIZED VIEWシステム権限が必要です。また、データベースがマテリアライズド・ビューのデータを管理するために使用する内部表、ビュー、索引を削除する権限も必要です。

関連項目:
マテリアライズド・ビューを管理するために使用するオブジェクトの削除に必要な権限については、「DROP TABLE」、「DROP VIEW」および「DROP INDEX」を参照してください。

構文

drop_materialized_view::=

セマンティクス

schema

マテリアライズド・ビューが含まれているスキーマを指定します。schemaを指定しない場合、このマテリアライズド・ビューは自分のスキーマ内にあるとみなされます。

materialized_view

削除する既存のマテリアライズド・ビューの名前を指定します。

- マスター表から、最後にリフレッシュされた単純マテリアライズド・ビューを削除した場合、マスター表のマテリアライズド・ビュー・ログのうち、削除されたマテリアライズド・ビューのリフレッシュに必要な行のみが自動的に削除されます。

- 事前作成表で作成されたマテリアライズド・ビューを削除した場合、そのマテリアライズド・ビューが削除され、事前作成表は1つの表としての元の形に戻ります。

- マスター表を削除した場合、その表に基づくマテリアライズド・ビューは自動的には削除されません。ただし、削除したマスター表に基づくマテリアライズド・ビューをリフレッシュしようとした場合、エラー・メッセージが戻されます。

- マテリアライズド・ビューを削除した場合、マテリアライズド・ビューを使用するためにリライトされたコンパイル済の要求が無効になり、自動的に再コンパイルされます。そのマテリアライズド・ビューが表に事前作成されていた場合、その表は削除されませんが、マテリアライズド・ビューのリフレッシュ・メカニズムで管理できなくなります。

PRESERVE TABLE句

この句を使用すると、マテリアライズド・ビュー・オブジェクトを削除した後も、そのマテリアライズド・ビューのコンテナ表およびその内容を保持できます。結果の表の名前は、削除したマテリアライズド・ビューと同じになります。

マテリアライズド・ビューに関連付けられているすべてのメタデータは削除されます。ただし、そのマテリアライズド・ビューの作成時にコンテナ表で自動的に作成された索引は保存されますが、1つの例外があります。ROWIDマテリアライズド・ビューの作成時に作成された索引は削除されます。また、そのマテリアライズド・ビューにネストした表の列が含まれる場合、その列の記憶表がそのメタデータとともに保存されます。

PRESERVE TABLE句の制限事項: この句は、(マテリアライズド・ビューが「スナップショット」と呼ばれていた)Oracle9iより前のリリースからインポートしたマテリアライズド・ビューには無効です。

例

マテリアライズド・ビューの削除例: 次の文は、サンプル・スキーマhrのマテリアライズド・ビューemp_dataを削除します。

DROP MATERIALIZED VIEW emp_data;

次の文は、sales_by_month_by_stateマテリアライズド・ビューおよびそのマテリアライズド・ビューの基礎となる表を削除します(基礎となる表がON PREBUILT TABLE句が指定されたCREATE MATERIALIZED VIEW文に登録されていない場合)。

DROP MATERIALIZED VIEW sales_by_month_by_state;

DROP MATERIALIZED VIEW LOG

用途

DROP MATERIALIZED VIEW LOG文を使用すると、データベースからマテリアライズド・ビュー・ログを削除できます。

注意:
下位互換性を保つために、MATERIALIZED VIEWのかわりにキーワードSNAPSHOTもサポートされています。

関連項目:

- マテリアライズド・ビューの詳細は、「CREATE MATERIALIZED VIEW」および「ALTER MATERIALIZED VIEW」を参照してください。

- マテリアライズド・ビュー・ログの詳細は、「CREATE MATERIALIZED VIEW LOG」を参照してください。

- レプリケーション環境でのマテリアライズド・ビューの詳細は、『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

- データ・ウェアハウス環境でのマテリアライズド・ビューの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

前提条件

マテリアライズド・ビュー・ログを削除する場合は、表を削除する権限が必要です。

関連項目:
「DROP TABLE」

構文

drop_materialized_view_log::=

セマンティクス

schema

マテリアライズド・ビュー・ログおよびそのマスター表が含まれているスキーマを指定します。schemaを指定しない場合、マテリアライズド・ビュー・ログおよびマスター表は自分のスキーマ内にあるとみなされます。

table

削除するマテリアライズド・ビュー・ログに関連付けられたマスター表の名前を指定します。

FOR FAST REFRESHのために作成されたマテリアライズド・ビュー・ログを削除した場合、マテリアライズド・ビュー・ログのマスター表に基づく一部のマテリアライズド・ビューが高速リフレッシュできなくなります。高速リフレッシュできなくなるマテリアライズド・ビューには、ROWIDマテリアライズド・ビュー、主キー・マテリアライズド・ビューおよび副問合せマテリアライズド・ビューが含まれます。

関連項目:
これらの種類のマテリアライズド・ビューについては、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

FOR SYNCHRONOUS REFRESH (ステージング・ログ)のために作成されたマテリアライズド・ビュー・ログを削除した場合、ステージング・ログのマスター表に基づくマテリアライズド・ビューが同期リフレッシュできなくなります。

例

マテリアライズド・ビュー・ログの削除例: 次の文は、oe.customersマスター表のマテリアライズド・ビュー・ログを削除します。

DROP MATERIALIZED VIEW LOG ON customers;

DROP MATERIALIZED ZONEMAP

注意:
DROP MATERIALIZED ZONEMAP文は、Oracle Database 12cリリース1(12.1.0.2)から使用可能です。

用途

DROP MATERIALIZED ZONEMAP文を使用すると、データベースから既存のゾーン・マップを削除します。

前提条件

ゾーン・マップが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、DROP ANY MATERIALIZED VIEWシステム権限が必要です。また、データベースがゾーン・マップのデータを管理するために使用する内部表および索引を削除する権限も必要です。

関連項目:
ゾーン・マップを管理するために使用するオブジェクトの削除に必要な権限については、「DROP TABLE」および「DROP INDEX」を参照してください。

構文

drop_materialized_zonemap::=

セマンティクス

schema

ゾーン・マップが含まれているスキーマを指定します。schemaを指定しない場合、このゾーン・マップは自分のスキーマ内にあるとみなされます。

zonemap_name

削除する既存のゾーン・マップの名前を指定します。

例

ゾーン・マップの削除: 例 次の文は、ゾーン・マップsales_zmapを削除します。

DROP MATERIALIZED ZONEMAP sales_zmap;

DROP OPERATOR

用途

DROP OPERATOR文を使用すると、ユーザー定義演算子を削除できます。

関連項目:

- 演算子の作成および変更の詳細は、「CREATE OPERATOR」および「ALTER OPERATOR」を参照してください。

- 演算子の概要については、「ユーザー定義演算子」および『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。

- ユーザー定義索引タイプの演算子の削除については、「ALTER INDEXTYPE」を参照してください。

前提条件

削除する演算子が自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、DROP ANY OPERATORシステム権限が必要です。

構文

drop_operator::=

セマンティクス

schema

演算子が含まれているスキーマを指定します。schemaを指定しない場合、その演算子は自分のスキーマ内にあるとみなされます。

operator

削除する演算子の名前を指定します。

FORCE

FORCEを指定すると、演算子が現在1つ以上のスキーマ・オブジェクト(索引タイプ、パッケージ、ファンクション、プロシージャなど)によって参照されている場合でも、その演算子を削除できます。演算子に依存するこのようなオブジェクトには、INVALIDのマークが付けられます。FORCEを使用しないと、任意のスキーマ・オブジェクトに参照されている演算子を削除できません。

例

ユーザー定義演算子の削除例: 次の文は、演算子eq_opを削除します。

DROP OPERATOR eq_op;

FORCE句が指定されていないため、この演算子のバインディングのいずれかが索引タイプによって参照されている場合、この操作は実行されません。

DROP OUTLINE

用途

注意:
ストアド・アウトラインは非推奨になりました。ストアド・アウトラインは、下位互換性を保つために今でもサポートされています。ただし、かわりにSQL計画管理を使用することをお薦めします。SQL計画管理では、ストアド・アウトラインよりも非常に安定したSQLパフォーマンスを実現するSQL計画ベースラインが作成されます。
DBMS_SPMパッケージのMIGRATE_STORED_OUTLINEファンクションまたはEnterprise Manager Cloud Controlを使用して、既存のストアド・アウトラインをSQL計画ベースラインに移行できます。移行が完了したら、ストアド・アウトラインに移行済のマークが付けられ、削除できるようになります。DBMS_SPMパッケージのDROP_MIGRATED_STORED_OUTLINEファンクションを使用して、システム上のすべての移行済ストアド・アウトラインを削除できます。

参照: SQL計画管理の詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。DBMS_SPMパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

DROP OUTLINE文を使用すると、ストアド・アウトラインを削除できます。

関連項目:
アウトラインの作成については、「CREATE OUTLINE」を参照してください。

前提条件

アウトラインを削除する場合は、DROP ANY OUTLINEシステム権限が必要です。

構文

drop_outline::=

セマンティクス

outline

削除するアウトラインの名前を指定します。

そのアウトラインが削除された後、ストアド・アウトラインが作成されたSQL文がコンパイルされると、オプティマイザはアウトラインの影響なしに新しい実行計画を生成します。

例

アウトラインの削除例: 次の文は、ストアド・アウトラインsalariesを削除します。

DROP OUTLINE salaries;

DROP PACKAGE

用途

パッケージはPL/SQLを使用して定義されます。パッケージの作成、変更および削除の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

DROP PACKAGE文を使用すると、データベースからストアド・パッケージを削除できます。この文は、パッケージの本体および仕様部を削除します。

注意:
この文を使用してパッケージから単一のオブジェクトを削除しないでください。かわりに、CREATE PACKAGE文およびCREATE PACKAGE BODY文にOR REPLACE句を指定して、そのオブジェクトを含めずにパッケージを再作成してください。

前提条件

削除するパッケージが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、DROP ANY PROCEDUREシステム権限が必要です。

構文

drop_package::=

セマンティクス

BODY

BODYを指定すると、パッケージ本体のみを削除できます。この句を省略した場合、パッケージ本体と仕様部の両方が削除されます。

パッケージ本体のみを削除して仕様部は削除しない場合、依存するオブジェクトは無効になりません。ただし、パッケージ本体を再作成しないかぎり、パッケージ仕様部で宣言したプロシージャやストアド・ファンクションはコールできません。

schema

パッケージが含まれているスキーマを指定します。schemaを指定しない場合、パッケージは自分のスキーマ内にあるとみなされます。

package

削除するパッケージの名前を指定します。

そのパッケージ仕様部に依存するすべてのローカル・オブジェクトが無効になります。後でこれらのオブジェクトのいずれかを参照した場合、データベースは、そのオブジェクトを再コンパイルしようとします。削除したパッケージを再作成しないかぎり、エラーが戻されます。

任意の統計タイプがパッケージに関連付けられている場合、FORCE句によって統計タイプの関連付けが解除され、統計タイプを使用して収集されたユーザー定義のすべての統計情報が削除されます。

関連項目:
「ASSOCIATE STATISTICS」および「DISASSOCIATE STATISTICS」を参照してください。

例

パッケージの削除例: 次の文は、emp_mgmtパッケージの仕様部および本体を削除し、その仕様部に依存するすべてのオブジェクトを無効にします。このパッケージを作成する例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。

DROP PACKAGE emp_mgmt;

DROP PLUGGABLE DATABASE

用途

DROP PLUGGABLE DATABASE文を使用すると、プラガブル・データベース(PDB)を削除できます。

PDBを削除すると、削除したPDBおよびそのデータファイルの参照をすべて削除するように、マルチテナント・コンテナ・データベース(CDB)の制御ファイルが変更されます。削除したPDBに関連付けられたアーカイブ・ログとバックアップは、削除されません。これらを削除するにはOracle Recovery Manager (RMAN)を使用することができ、これらを残してPDBのPoint-in-Timeリカバリを続けて実行することもできます。

注意:
DROP PLUGGABLE DATABASE文はロールバックできません。

前提条件

CDBに接続している必要があります。

現在のコンテナがルートである必要があります。また、AS SYSDBAまたはAS SYSOPERとして認証される必要があるとともに、共通に付与されているSYSDBA権限またはSYSOPER権限か、ルートと削除対象のPDBのそれぞれでローカルに付与されているこれらのどちらかの権限が必要です。

KEEP DATAFILES(デフォルト)を指定するには、削除する対象のPDBを切断する必要があります。

INCLUDING DATAFILESを指定するには、削除する対象のPDBはマウント・モードである、または切断されている必要があります。

構文

drop_pluggable_database::=

セマンティクス

pdb_name

削除するPDBの名前を指定します。シード(PDB$SEED)は削除できません。

KEEP DATAFILES

KEEP DATAFILESを指定すると、PDBの削除後に、そのPDBに関連付けられたデータファイルを保持できます。PDBの一時ファイルは、不要になるため削除されます。これはデフォルトです。

2つのCDBが同じストレージ・デバイスを共有しており、一方のCDBからPDBを削除し、もう一方のCDBに接続するシナリオでは、データファイルを保持しておくと便利なことがあります。

INCLUDING DATAFILES

INCLUDING DATAFILESを指定すると、削除するPDBに関連付けられたデータファイルを削除できます。PDBの一時ファイルも削除されます。

SNAPSHOT COPYで作成されたPDBの削除の制限事項: PDBがSNAPSHOT COPY句を使用して作成された場合、そのPDBを削除するときにはINCLUDING DATAFILESを指定する必要があります。

例

PDBの削除例: 次の文は、PDB pdb1およびこのPDBに関連付けられたデータファイルを削除します。

DROP PLUGGABLE DATABASE pdb1
INCLUDING DATAFILES;

DROP PROCEDURE

用途

プロシージャはPL/SQLを使用して定義されます。プロシージャの作成、変更および削除の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

DROP PROCEDURE文を使用すると、データベースからスタンドアロンのストアド・プロシージャを削除できます。この文を使用してパッケージの一部であるプロシージャを削除しないでください。かわりに、DROP PACKAGE文を使用してパッケージ全体を削除するか、OR REPLACE句を指定したCREATE PACKAGE文を使用して、そのプロシージャを含めずにパッケージを再定義してください。

前提条件

削除するプロシージャが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、DROP ANY PROCEDUREシステム権限が必要です。

構文

drop_procedure::=

セマンティクス

schema

プロシージャが含まれているスキーマを指定します。schemaを指定しない場合、プロシージャは自分のスキーマ内にあるとみなされます。

procedure

削除するプロシージャの名前を指定します。

プロシージャを削除すると、そのプロシージャに依存するすべてのローカル・オブジェクトが無効になります。後でこれらのオブジェクトのいずれかを参照した場合、データベースは、そのオブジェクトを再コンパイルしようとします。削除したプロシージャを再作成しないかぎり、エラー・メッセージが戻されます。

例

プロシージャの削除例: 次の文は、ユーザーhrが所有するプロシージャremove_empを削除し、remove_empに依存するすべてのオブジェクトを無効にします。

DROP PROCEDURE hr.remove_emp;

DROP PROFILE

用途

DROP PROFILE文を使用すると、データベースからプロファイルを削除できます。DEFAULTプロファイル以外のプロファイルを削除できます。

関連項目:
プロファイルの作成および変更の詳細は、「CREATE PROFILE」および「ALTER PROFILE」を参照してください。

前提条件

DROP PROFILEシステム権限が必要です。

構文

drop_profile::=

セマンティクス

profile

削除するプロファイルの名前を指定します。

CASCADE

CASCADEを指定すると、プロファイルの割当て先のユーザーからプロファイルの割当てを解除できます。このようなユーザーには、自動的にDEFAULTプロファイルが割り当てられます。現在、複数のユーザーに割り当てられているプロファイルを削除する場合は、必ずこの句を指定します。

例

プロファイルの削除例: 次の文は、プロファイルapp_user(「プロファイルの作成例:」で作成)を削除します。プロファイルapp_userは削除され、現在app_userプロファイルが割り当てられているユーザーにはDEFAULTプロファイルが割り当てられます。

DROP PROFILE app_user CASCADE;

DROP RESTORE POINT

用途

DROP RESTORE POINT文を使用すると、通常のリストア・ポイントまたは保証付きリストア・ポイントをデータベースから削除できます。

- 通常のリストア・ポイントは、ユーザーが削除する必要はありません。必要に応じて古いものから順に自動的に削除されます(「restore_point」の説明を参照)。ただし、同じ名前を再利用する必要がある場合は、通常のリストア・ポイントをユーザーが削除することもできます。

- 保証付きリストア・ポイントは、自動的に削除されません。したがって、保証付きリストア・ポイントをデータベースから削除するには、明示的にこの文を使用する必要があります。

関連項目:
リストア・ポイントの作成方法および使用方法については、「CREATE RESTORE POINT」、「FLASHBACK DATABASE」および「FLASHBACK TABLE」を参照してください。

前提条件

通常のリストア・ポイントを削除するには、SELECT ANY DICTIONARY、FLASHBACK ANY TABLE、SYSBACKUP、またはSYSDGシステム権限が必要です。保証付きリストア・ポイントを削除するには、SYSDBA、SYSBACKUP、またはSYSDGシステム権限が必要です。

構文

drop_restore_point::=

セマンティクス

restore_point 削除するリストア・ポイントの名前を指定します。

例

リストア・ポイントの削除例: 次の例は、good_dataリストア・ポイント(「リストア・ポイントを作成して使用する例:」で作成)を削除します。

DROP RESTORE POINT good_data;

DROP ROLE

用途

DROP ROLE文を使用すると、データベースからロールを削除できます。ロールを削除した場合、そのロールが付与されていたすべてのユーザーおよびロールからそのロールが取り消され、データベースからも削除されます。すでに使用可能なロールのユーザー・セッションには影響しません。ただし、削除後は新しいユーザー・セッションでロールを使用可能にできません。

関連項目:

- ロールの作成、およびロールを使用可能にするために必要な認可の変更については、「CREATE ROLE」および「ALTER ROLE」を参照してください。

- 現行のセッションに対するロールの使用禁止化については、「SET ROLE」を参照してください。

前提条件

ADMIN OPTION付きのロールが付与されているか、またはDROP ANY ROLEシステム権限を持っている必要があります。

構文

drop_role::=

セマンティクス

role

削除するロールの名前を指定します。

例

ロールの削除例: 次の文は、ロールdw_manager(「ロールの作成例:」で作成)を削除します。

DROP ROLE dw_manager;

DROP ROLLBACK SEGMENT

用途

DROP ROLLBACK SEGMENTを使用すると、データベースからロールバック・セグメントを削除できます。ロールバック・セグメントを削除した場合、ロールバック・セグメントに割り当てられていたすべての領域が表領域に戻されます。

注意:
データベースが自動UNDOモードで実行されている場合、ロールバック・セグメントに有効な操作はこの文のみです。このモードの場合、ロールバック・セグメントを作成または変更できません。

前提条件

DROP ROLLBACK SEGMENTシステム権限が必要です。また、ロールバック・セグメントをオフラインにしておく必要があります。

構文

drop_rollback_segment::=

セマンティクス

rollback_segment

削除するロールバック・セグメントの名前を指定します。

ロールバック・セグメントの削除の制限事項: この文には、次の制限事項があります。

- ロールバック・セグメントは、オフラインになっている場合にのみ削除できます。ロールバック・セグメントがオフラインであるかどうかを判断するには、DBA_ROLLBACK_SEGSデータ・ディクショナリ・ビューを問い合せます。オフラインのロールバック・セグメントは、STATUS列の値がAVAILABLEになっています。また、ALTER ROLLBACK SEGMENT文にOFFLINE句を指定して、ロールバック・セグメントをオフラインにすることもできます。

- SYSTEMロールバック・セグメントは削除できません。

例

ロールバック・セグメントの削除例: 次の構文は、ロールバック・セグメント(「ロールバック・セグメントの作成例:」で作成)を削除します。

DROP ROLLBACK SEGMENT rbs_one;

18 SQL文: DROP SEQUENCEからROLLBACK

この章では、次のSQL文について説明します。

- DROP SEQUENCE

- DROP SYNONYM

- 「DROP TABLE」

- DROP TABLESPACE

- DROP TRIGGER

- DROP TYPE

- DROP TYPE BODY

- DROP USER

- DROP VIEW

- 「EXPLAIN PLAN」

- EXPLAIN WORK

- FLASHBACK DATABASE

- FLASHBACK TABLE

- 「GRANT」

- INSERT

- LOCK TABLE

- MERGE

- 「NOAUDIT (従来型監査)」

- NOAUDIT (統合監査)

- PURGE

- RENAME

- REVOKE

- 「ROLLBACK」

DROP SEQUENCE

用途

DROP SEQUENCE文を使用すると、データベースから順序を削除できます。

この文を使用すると、順序の削除および再作成を行って、順序を再開することもできます。たとえば、現在、値が150の順序を初期値27で再開する場合、順序を削除して同じ名前で再作成し、START WITH値を27にします。

関連項目:
順序の作成および変更の詳細は、「CREATE SEQUENCE」および「ALTER SEQUENCE」を参照してください。

前提条件

削除する順序が自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、DROP ANY SEQUENCEシステム権限が必要です。

構文

drop_sequence::=

セマンティクス

schema

順序が含まれているスキーマを指定します。schemaを指定しない場合、順序は自分のスキーマ内にあるとみなされます。

sequence_name

削除する順序の名前を指定します。

例

順序の削除例: 次の文は、ユーザーoeが所有する順序customers_seq(「順序の作成例:」で作成)を削除します。この文を発行する場合は、ユーザーoeとして接続するか、またはDROP ANY SEQUENCEシステム権限が必要です。

DROP SEQUENCE oe.customers_seq;

DROP SYNONYM

用途

DROP SYNONYM文を使用すると、データベースからシノニムを削除できます。また、シノニムの削除および再作成を行って、シノニムの定義を変更することもできます。

関連項目:
シノニムの詳細は、「CREATE SYNONYM」を参照してください。

前提条件

プライベート・シノニムを削除する場合は、シノニムが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、DROP ANY SYNONYMシステム権限が必要です。

PUBLICシノニムを削除する場合は、DROP PUBLIC SYNONYMシステム権限が必要です。

構文

drop_synonym::=

セマンティクス

PUBLIC

PUBLICを指定すると、パブリック・シノニムを削除できます。PUBLICを指定した場合、schemaは指定できません。

schema

シノニムが含まれているスキーマを指定します。schemaを指定しない場合、シノニムは自分のスキーマ内にあるとみなされます。

synonym

削除するシノニムの名前を指定します。

マテリアライズド・ビューを定義する問合せに実際の表名ではなくシノニムが指定されていた場合に、このマテリアライズド・ビューのマスター表のシノニムを削除すると、このマテリアライズド・ビューには使用禁止のマークが付けられます。

依存表またはユーザー定義型を持つオブジェクト型のシノニムを削除するには、FORCEも指定する必要があります。

FORCE

FORCEを指定すると、依存表またはユーザー定義型を持つシノニムでも強制的に削除できます。

注意:
FORCEを使用して、依存性のあるオブジェクト型のシノニムを削除することはお薦めしません。この操作によって、他のユーザー定義型が無効になるか、またはこのシノニムに依存する表列にUNUSEDのマークが付く場合があります。型の依存性の詳細は、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。

例

シノニムの削除例: 次の文は、パブリック・シノニムcustomers(「Oracle Databaseによるシノニムの変換例:」で作成)を削除します。

DROP PUBLIC SYNONYM customers;

DROP TABLE

用途

DROP TABLE文を使用すると、表またはオブジェクト表をごみ箱に移動したり、表およびそれに含まれるすべてのデータをデータベースから完全に削除することができます。

注意:
PURGE句を指定しないかぎり、DROP TABLEを実行しても、他のオブジェクトが使用できるように領域が解放されて表領域に戻されることはなく、その領域はユーザーの領域割当てとして計算されたままになります。

外部表の場合、この文はデータベースにある表のメタデータのみを削除します。データベースの外部に存在する実際のデータには影響しません。

クラスタの一部である表を削除すると、その表はごみ箱に移動します。ただし、その後にそのクラスタを削除すると、その表はごみ箱から消去され、FLASHBACK TABLE操作でもリカバリできなくなります。

表を削除すると、依存オブジェクトが無効になり、表のオブジェクト権限が取り消されます。表を再作成する際、表のオブジェクト権限を再度付与し、表の索引、整合性制約およびトリガーを再作成し、記憶域パラメータを再指定する必要があります。切捨ての場合は、このような影響はありません。そのため、TRUNCATE文による行の削除は、表を削除して再作成するよりも効率的です。

関連項目:

- 表の作成および変更の詳細は、「CREATE TABLE」および「ALTER TABLE」を参照してください。

- 表からデータを削除する方法については、「TRUNCATE TABLE」および「DELETE」を参照してください。

- 削除した表をごみ箱から取り出す方法については、「FLASHBACK TABLE」を参照してください。

前提条件

削除する表が自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、DROP ANY TABLEシステム権限が必要です。

セッションがバインドされていない場合にのみ、一時表でDDL操作(ALTER TABLE、DROP TABLE、CREATE INDEXなど)を実行できます。セッションを一時表にバインドするには、一時表でINSERT操作を実行します。セッションを一時表からアンバインドするには、TRUNCATE文を発行するか、セッションを終了します。また、トランザクション固有の一時表からアンバインドするには、COMMITまたはROLLBACK文を発行します。

構文

drop_table::=

セマンティクス

schema

表が含まれているスキーマを指定します。schemaを指定しない場合、表は自分のスキーマ内にあるとみなされます。

table

削除する表の名前を指定します。Oracle Databaseによって次の操作が自動的に実行されます。

- 表のすべての行が削除されます。

- 表のすべての索引およびドメイン索引のみでなく、その表に定義されているすべてのトリガーが、作成者やスキーマの所有者とは関係なく削除されます。tableがパーティション化されている場合、対応するローカル索引パーティションも同様に削除されます。

- tableのネストした表およびLOBのすべての記憶表が削除されます。

- レンジ・パーティション表、ハッシュ・パーティション表またはリスト・パーティション表を削除すると、すべての表パーティションも削除されます。コンポジット・パーティション表を削除した場合、すべてのパーティションおよびサブパーティションが同様に削除されます。

- PURGEキーワードでパーティション表を削除する場合、その文は一連のサブトランザクションとして実行され、それぞれのサブトランザクションで、パーティションまたはサブパーティションのサブセットおよびそのメタデータが削除されます。削除操作がこのように複数のサブトランザクションに分割されていることで、特に大きなパーティション表を削除する場合に、内部システム・リソース(ライブラリ・キャッシュなど)の消費処理が最適化されます。最初のサブトランザクションがコミットされるとすぐにUNUSABLEのマークが表に付けられます。いずれかのサブトランザクションが失敗した場合、その表に対して可能な操作は、もう一度DROP TABLE ... PURGE文を実行することのみです。この場合、前回のDROP TABLE文が失敗したところから、処理が継続されます。ただし、この処理は、前回の操作で発生したエラーが修正されていることを前提としています。
このような削除操作でUNUSABLEのマークが付けられた表のリストは、該当する*_TABLES、*_PART_TABLES、*_ALL_TABLESまたは*_OBJECT_TABLESデータ・ディクショナリ・ビューのstatus列を問い合せて表示できます。

関連項目:
パーティション表の削除の詳細は、『Oracle Database VLDBおよびパーティショニング・ガイド』を参照してください。

- 索引構成表の場合、索引構成表に定義したマッピング表も削除されます。

- ドメイン索引の場合、適切な削除ルーチンが起動されます。これらのルーチンの詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。

- 任意の統計タイプが表に関連付けられている場合、FORCE句によって統計タイプの関連付けが解除され、統計タイプを使用して収集されたユーザー定義のすべての統計情報が削除されます。

関連項目:
統計タイプの関連付けの詳細は、「ASSOCIATE STATISTICS」および「DISASSOCIATE STATISTICS」を参照してください。

- 表がクラスタの一部でない場合、表とその索引に割り当てられていたすべてのデータ・ブロックが、表とその索引が格納されていた表領域に戻されます。
DROP CLUSTER文にINCLUDING TABLES句を指定した場合、クラスタおよびそのすべての表を削除できます。これによって、表を1つずつ削除する必要がなくなります。「DROP CLUSTER」を参照してください。

- 表がビュー、マテリアライズド・ビューのコンテナ表またはマスター表の実表である場合、あるいは表がストアド・プロシージャ、ファンクションまたはパッケージで参照されている場合、依存するオブジェクトは無効になりますが、削除はされません。表を再作成するか、これらのオブジェクトを一度削除してその表に依存しない形で再作成しないかぎり、これらのオブジェクトは使用できません。
表を再作成する場合、ストアド・プロシージャ、ファンクションまたはパッケージで参照する列、およびマテリアライズド・ビューの定義で使用されていた副問合せで選択されるすべての列が、その表に含まれている必要があります。ビュー、ストアド・プロシージャ、ファンクション、パッケージに対するオブジェクト権限が付与されていたユーザーに、これらの権限を再付与する必要はありません。

表がマテリアライズド・ビューのマスター表の場合、マテリアライズド・ビューの問合せはできます。ただし、そのマテリアライズド・ビューを定義する問合せによって選択されるすべての列を含む表を再作成しないかぎり、リフレッシュはできません。

表がマテリアライズド・ビュー・ログを含む場合、このログおよびその表に関連付けられているダイレクト・パスINSERTのその他のリフレッシュ情報は削除されます。

表の削除の制限事項:

- ネストした表の記憶表は直接削除できません。かわりに、ALTER TABLE ... DROP COLUMN句を使用して、ネストした表の列を削除する必要があります。

- 参照パーティション表の親表は削除できません。まず、参照パーティション表のすべての子表を削除する必要があります。

- 履歴追跡にフラッシュバック・データ・アーカイブを使用する表は削除できません。まず、表でのフラッシュバック・データ・アーカイブの使用を無効にする必要があります。

CASCADE CONSTRAINTS

CASCADE CONSTRAINTSを指定すると、削除される表の主キーまたは一意キーを参照するすべての参照整合性制約を削除できます。このような参照整合性制約があるときにこの句を省略した場合、エラーが戻され、表は削除されません。

PURGE

PURGEを指定すると、1つの手順で、表を削除してその表に関連付けられた領域を解放できます。PURGEを指定すると、表およびその依存オブジェクトはごみ箱に移動しません。

注意:
PURGE句を指定したDROP TABLE文はロールバックできません。また、PURGE句で削除した表はリカバリできません。

この句を使用することは、表を削除してからその表をごみ箱から消去することと同じです。この句を使用すると、それらの操作を1つの手順で実行できます。また、機密情報をごみ箱に表示しないようにできるため、セキュリティを強化できます。

関連項目:
ごみ箱の詳細、およびごみ箱内のオブジェクトのネーミング規則の詳細は、『Oracle Database管理者ガイド』を参照してください。

例

表の削除例: 次の文は、oe.list_customers表(「リスト・パーティション化の例:」で作成)を削除します。

DROP TABLE list_customers PURGE;

DROP TABLESPACE

用途

DROP TABLESPACE文を使用すると、データベースから表領域を削除できます。

削除した表領域は、ごみ箱内には移動しません。このため、削除した表領域を消去またはリカバリすることはできません。

関連項目:
表領域の作成および変更の詳細は、「CREATE TABLESPACE」および「ALTER TABLESPACE」を参照してください。

前提条件

DROP TABLESPACEシステム権限が必要です。アクティブ・トランザクションを保持するロールバック・セグメントを含む場合は、表領域を削除できません。

構文

drop_tablespace::=

セマンティクス

tablespace

削除する表領域の名前を指定します。

表領域の状態がオンラインまたはオフラインのどちらであっても、その表領域を削除できます。実行中のトランザクション内のSQL文で、表領域内のいずれかのオブジェクトにアクセスすることがないように、表領域はオフラインにしてから削除することをお薦めします。

SYSTEM表領域は削除できません。SYSAUX表領域は、SYSDBAシステム権限を持ち、UPGRADEモードでデータベースを起動した場合にのみ削除できます。

削除する表領域がデフォルト表領域または一時表領域として割り当てられていたユーザーにアラートを出す必要がある場合があります。表領域が削除された後では、このようなユーザーはオブジェクトに領域を割り当てたり、表領域内で領域をソートすることはできません。ALTER USER文を使用すると、ユーザーに新しいデフォルト表領域および一時表領域を割り当てることができます。

以前に表領域から削除し、ごみ箱に移動したオブジェクトがごみ箱から消去されます。表領域に関連するすべてのメタデータ、および表領域に含まれるすべてのデータファイルと一時ファイルが、データ・ディクショナリから削除されます。また、表領域にあるOracle Managed Filesのデータファイルおよび一時ファイルが、オペレーティング・システムから自動的に削除されます。その他のデータファイルおよび一時ファイルは、INCLUDING CONTENTS AND DATAFILESを指定しないかぎり、オペレーティング・システムから削除されません。

この文を使用して表領域グループを削除することはできません。ただし、tablespaceが表領域グループ内で唯一の表領域である場合、その表領域グループもデータ・ディクショナリから削除されます。

表領域の削除の制限事項: 表領域の削除には、次の制限事項があります。

- ドメイン索引またはドメイン索引によって作成されたオブジェクトを格納している表領域は削除できません。

- いずれかのインスタンスによって使用されている場合、またはコミットされていないトランザクションのロールバックに必要なUNDOデータを含む場合は、UNDO表領域を削除できません。

- データベースのデフォルト表領域に指定されている表領域は削除できません。この表領域を削除するには、まず他の表領域をデフォルト表領域として再割当てする必要があります。

- データベースのデフォルトの一時表領域グループに属する一時表領域は削除できません。この表領域を削除するには、まずその表領域をデータベースのデフォルトの一時表領域グループから削除する必要があります。

- 既存のセッションで使用されているセグメントが含まれる場合、一時表領域を削除できません。この場合は、エラーは発生しません。データベースは、既存のセッションで使用されているセグメントがなくなるまで待機し、表領域を削除します。

- ある表領域を削除すると他の表領域の主キー制約または一意制約が無効になる場合、INCLUDING CONTENTSおよびCASCADE CONSTRAINTS句を指定してもその表領域を削除できません。たとえば、削除する表領域に主キー列索引が含まれており、主キー列自体が別の表領域に存在する場合、その別の表領域内の主キー制約を手動で無効にしないかぎり、表領域を削除できません。

関連項目:
ドメイン索引の詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』および『Oracle Database概要』を参照してください。

{ DROP | KEEP } QUOTA

DROP QUOTAを指定すると、表領域のすべてのユーザー割当てを削除できます。KEEP QUOTAを指定すると、表領域のすべてのユーザー割当てを保持できます。デフォルトはKEEP QUOTAです。

DBA_TS_QUOTASデータ・ディクショナリ・ビューを問い合せると、表領域のすべてのユーザー割当てを表示できます。

INCLUDING CONTENTS

INCLUDING CONTENTSを指定すると、表領域の中のすべてのデータベース・オブジェクトを削除できます。データベース・オブジェクトを格納している表領域を削除する場合は、必ずこの句を指定します。表領域が空でない場合にこの句を省略した場合、エラーが戻され、表領域は削除されません。

1つの表のパーティションまたはサブパーティションが表領域に(すべてではなく)一部含まれていると、INCLUDING CONTENTSを指定してもDROP TABLESPACEコマンドが正常に実行されません。パーティション表のすべてのパーティションまたはサブパーティションがtablespaceに存在する場合、DROP TABLESPACE ... INCLUDING CONTENTSは、tablespaceを削除し、関連付けられた索引セグメント、LOBデータ・セグメントと索引セグメント、ネストした表のデータ・セグメント、および他の表領域にある表の索引セグメントも削除します。

パーティション化された索引構成表の場合、すべての主キー索引セグメントがこの表領域に存在していれば、他の表領域にあるオーバーフロー・セグメントや関連するマッピング表もすべて削除されます。主キー索引セグメントのいくつかが存在しない場合、文は正常に実行されません。その場合、その表領域を削除する前に、ALTER TABLE ... MOVE PARTITIONを使用して、それらの主キー索引セグメントをこの表領域に移動し、この表領域にオーバーフロー・データ・セグメントが存在しないパーティションを削除します。また、パーティション化された索引構成表も削除します。

表領域がマテリアライズド・ビューのマスター表を含む場合、マテリアライズド・ビューは無効になります。

表領域がマテリアライズド・ビュー・ログを含む場合、このログおよびその表に関連付けられているダイレクト・パスINSERTのその他のリフレッシュ情報は削除されます。

AND DATAFILES

INCLUDING CONTENTSを指定するときにAND DATAFILES句を指定すると、関連するオペレーティング・システム・ファイルも削除できます。Oracle Databaseによって、アラート・ログに、削除された各オペレーティング・システム・ファイルに関するメッセージが書き込まれます。この句は、Oracle Managed Filesに対しては不要です。Oracle Managed Filesは、AND DATAFILESを指定しなくてもシステムから削除されます。

KEEP DATAFILES

INCLUDING CONTENTSを指定するときにKEEP DATAFILES句も指定すると、関連するオペレーティング・システム・ファイル(Oracle Managed Filesも含む)を処理せずにそのままにしておくことができます。この句を指定する必要があるのは、Oracle Managed Filesを使用しているときに、関連するオペレーティング・システム・ファイルをINCLUDING CONTENTS句で削除しない場合です。

CASCADE CONSTRAINTS

CASCADE CONSTRAINTSを指定すると、tablespaceに含まれる表の主キーまたは一意キーを参照する、tablespaceの外の表からすべての参照整合性制約を削除できます。このような参照整合性制約があるときにこの句を省略した場合、エラーが戻され、表領域は削除されません。

例

表領域の削除例: 次の文は、tbs_01表領域を削除し、tbs_01に含まれる主キーおよび一意キーを参照するすべての参照整合性制約を削除します。

DROP TABLESPACE tbs_01
INCLUDING CONTENTS
CASCADE CONSTRAINTS;

オペレーティング・システム・ファイルの削除例: 次の例は、tbs_02表領域およびそれに関連するすべてのオペレーティング・システムのデータファイルを削除します。

DROP TABLESPACE tbs_02
INCLUDING CONTENTS AND DATAFILES;

DROP TRIGGER

用途

トリガーはPL/SQLを使用して定義されます。トリガーの作成、変更および削除の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

DROP TRIGGER文を使用すると、データベースからデータベース・トリガーを削除できます。

関連項目:
「CREATE TRIGGER」および「ALTER TRIGGER」を参照してください。

前提条件

削除するトリガーが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、DROP ANY TRIGGERシステム権限が必要です。他のユーザーのスキーマ内のDATABASEにあるトリガーを削除する場合は、ADMINISTER DATABASE TRIGGERシステム権限も必要です。

構文

drop_trigger::=

セマンティクス

schema

トリガーが含まれているスキーマを指定します。schemaを指定しない場合、トリガーは自分のスキーマ内にあるとみなされます。

trigger

削除するトリガーの名前を指定します。データベースからトリガーが削除され、再度、起動されることはありません。

例

トリガーの削除例: 次の文は、hrスキーマ内のsalary_checkトリガーを削除します。

DROP TRIGGER hr.salary_check;

DROP TYPE

用途

オブジェクト型はPL/SQLを使用して定義されます。オブジェクト型の作成、変更および削除の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

DROP TYPE文を使用すると、オブジェクト型、VARRAY型またはネストした表型の仕様部および本体を削除できます。

前提条件

削除するオブジェクト型、VARRAY型またはネストした表型が自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、DROP ANY TYPEシステム権限が必要です。

構文

drop_type::=

セマンティクス

schema

型が含まれているスキーマを指定します。schemaを指定しない場合、型は自分のスキーマ内にあるとみなされます。

type_name

削除するオブジェクト型、VARRAY型またはネストした表型の名前を指定します。型依存性または表依存性のない型のみ削除できます。

type_nameがスーパータイプの場合、FORCEも指定しないと、この文は正常に実行されません。FORCEを指定すると、そのスーパータイプに依存するすべてのサブタイプが無効になります。

type_nameが統計タイプの場合、FORCEも指定しないと、この文は正常に実行されません。FORCEを指定した場合、最初にtype_nameに関連付けられたすべてのオブジェクトの関連付けが解除され、type_nameが削除されます。

関連項目:
統計タイプの詳細は、「ASSOCIATE STATISTICS」および「DISASSOCIATE STATISTICS」を参照してください。

type_nameが統計タイプに関連付けられたオブジェクト型の場合、最初にこの統計タイプからtype_nameの関連付けが解除され、その後でtype_nameが削除されます。ただし、統計タイプを使用して統計情報が収集された場合、この統計タイプからtype_nameの関連付けを解除することはできません。このため、この文は正常に実行されません。

type_nameが索引タイプの実装タイプの場合、索引タイプにINVALIDのマークが付けられます。

type_nameにパブリック・シノニムが定義されている場合、このシノニムも削除されます。

FORCEオプションを指定していない場合に削除できるのは、依存性のないスタンドアロンのスキーマ・オブジェクトとして定義されているオブジェクト型またはネストした表型またはVARRAY型のみです。これはデフォルトの動作です。

関連項目:
CREATE INDEXTYPE

FORCE

FORCEを指定すると、依存するデータベース・オブジェクトを持つ型でも強制的に削除できます。削除する型に依存するすべての列にUNUSEDのマークが付けられ、それらの列にアクセスできなくなります。

注意:
FORCEを使用して、依存性のある型を削除することはお薦めしません。この操作はリカバリ不能であり、依存表または列のデータにアクセスできなくなる場合があります。

VALIDATE

型を削除するときにVALIDATEを指定すると、格納されているこの型のインスタンスがスーパータイプのいずれかの置換可能な列の範囲であることが検証されます。このようなインスタンスがない場合、削除操作が完了します。

この句はサブタイプのみに意味があります。明示的な型または表依存性のないサブタイプを安全に削除するために、このオプションの使用をお薦めします。

例

オブジェクト型の削除例: 次の文は、オブジェクト型person_tを削除します。このオブジェクト型を作成する例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。person_tに依存するすべての列は、UNUSEDのマークが付けられ、アクセスできなくなります。

DROP TYPE person_t FORCE;

DROP TYPE BODY

用途

オブジェクト型はPL/SQLを使用して定義されます。オブジェクト型の作成、変更および削除の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

DROP TYPE BODY文を使用すると、オブジェクト型、VARRAY型またはネストした表型の本体を削除できます。型本体を削除しても、オブジェクト型の仕様部は残ります。また、削除した型本体は再作成できます。本体を再作成する前でも、そのオブジェクト型は使用できます。ただし、メンバー・ファンクションはコールできません。

前提条件

オブジェクト型の本体が自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、DROP ANY TYPEシステム権限が必要です。

構文

drop_type_body::=

セマンティクス

schema

オブジェクト型が含まれているスキーマを指定します。schemaを指定しない場合、オブジェクト型は自分のスキーマ内にあるとみなされます。

type_name

削除するオブジェクト型の本体の名前を指定します。

型本体の削除の制限事項: 型依存性および表依存性がない場合にのみ型の本体を削除できます。

例

オブジェクト型の本体の削除例: 次の文は、オブジェクト型本体data_typ1を削除します。このオブジェクト型を作成する例については、『Oracle Database PL/SQL言語リファレンス』を参照してください。

DROP TYPE BODY data_typ1;

DROP USER

用途

DROP USER文を使用すると、データベース・ユーザーを削除できます。また、オプションでユーザーのオブジェクトを削除することもできます。

Oracle Automatic Storage Management (Oracle ASM)クラスタでは、AS SYSASMと認証されたユーザーは、この句を使用して、現行のノードのOracle ASMインスタンスに対してローカルなパスワード・ファイルでユーザーを削除できます。

ユーザーを削除すると、そのユーザーのすべてのスキーマ・オブジェクトもごみ箱から消去されます。

注意:
SYSユーザーまたはSYSTEMユーザーを削除しないでください。これらのユーザーを削除すると、データベースが破損します。

関連項目:
ユーザーの作成および変更の詳細は、「CREATE USER」および「ALTER USER」を参照してください。

前提条件

DROP USERシステム権限が必要です。Oracle ASMクラスタでは、AS SYSASMと認証される必要があります。

構文

drop_user::=

セマンティクス

user

削除するユーザーを指定します。CASCADEを指定しない場合、またはユーザーのオブジェクトを最初に明示的に削除しない場合、所有するスキーマにオブジェクトが含まれているユーザーは削除されません。

ユーザー削除の制限事項 履歴追跡にフラッシュバック・データ・アーカイブを使用する表がスキーマに含まれているユーザーは削除できません。まず、表でのフラッシュバック・データ・アーカイブの使用を無効にする必要があります。

CASCADE

CASCADEを指定すると、ユーザーを削除する前に、そのユーザーのスキーマ内にあるすべてのオブジェクトを削除できます。所有するスキーマにオブジェクトが含まれているユーザーを削除する場合は、必ずこの句を指定します。

- ユーザーのスキーマに表がある場合、表が削除され、その表の主キーまたは一意キーを参照している他のユーザーのスキーマ内にある表の参照整合性制約も自動的に削除されます。

- この句で表が削除される場合、その表の列で作成されたすべてのドメイン索引も削除され、適切な削除ルーチンが起動されます。

関連項目:
これらのルーチンの詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。

- 他のスキーマにある次のオブジェクトは削除されず、無効にされます。

- 削除されたユーザーのスキーマ内のビューまたはシノニム

- 削除されたユーザーのスキーマ内のオブジェクトを問い合せるストアド・プロシージャ、ファンクションまたはパッケージ

- 削除されたユーザーのスキーマ内にある表に基づく他のスキーマ内のマテリアライズド・ビューは削除されません。ただし、実表は存在しないため、他のスキーマ内のマテリアライズド・ビューはリフレッシュできなくなります。

- ユーザーのスキーマにあるすべてのトリガーは削除されます。

- ユーザーが作成したロールは削除されません。

注意:
Oracle Databaseでは、FORCEを使用するとユーザーが所有するすべての型が削除されます。詳細は、「DROP TYPE」の「FORCE」キーワードを参照してください。

ユーザー削除の制限事項 フラッシュバック・データ・アーカイブを使用する表がスキーマに含まれているユーザーは削除できません。まず、フラッシュバック・データ・アーカイブを無効にする必要があります。

例

データベース・ユーザーの削除例: 次の文は、ユーザーsidneyのスキーマ内にオブジェクトがない場合に、sidneyを削除します。

DROP USER sidney;

sidneyのスキーマ内にオブジェクトがある場合は、次の文のようにCASCADE句を指定して、sidneyとそのオブジェクトを削除する必要があります。

DROP USER sidney CASCADE;

DROP VIEW

用途

DROP VIEW文を使用すると、データベースからビューまたはオブジェクト・ビューを削除できます。ビューを削除して再作成すると、ビューの定義を変更できます。

関連項目:
ビューの作成および変更の詳細は、「CREATE VIEW」および「ALTER VIEW」を参照してください。

前提条件

削除するビューが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、DROP ANY VIEWシステム権限が必要です。

構文

drop_view::=

セマンティクス

schema

ビューが含まれているスキーマを指定します。schemaを指定しない場合、ビューは自分のスキーマ内にあるとみなされます。

view

削除するビューの名前を指定します。

Oracle Databaseでは、ビューに依存するビュー、マテリアライズド・ビューおよびシノニムは削除されませんが、INVALIDのマークが付けられます。このようなビューおよびシノニムは削除または再定義するか、無効なビューやシノニムをもう一度有効にするビューを別に定義します。

指定するビューにサブビューが定義されている場合、サブビューも同様に無効になります。ビューがサブビューを持つかどうかを確認するには、USER_VIEWS、ALL_VIEWSまたはDBA_VIEWSデータ・ディクショナリ・ビューのSUPERVIEW_NAME列を問い合せます。

関連項目:

- 「CREATE TABLE」および「CREATE SYNONYM」を参照してください。

- 無効なマテリアライズド・ビューの再検証の詳細は、「ALTER MATERIALIZED VIEW」を参照してください。

CASCADE CONSTRAINTS

CASCADE CONSTRAINTSを指定すると、削除するビューの主キーまたは一意キーを参照するすべての参照整合性制約を削除できます。このような制約が存在する状態でこの句を省略すると、DROP文は正常に実行されません。

例

ビューの削除例: 次の文は、emp_viewビュー(「ビューの作成例:」で作成)を削除します。

DROP VIEW emp_view;

EXPLAIN PLAN

用途

EXPLAIN PLAN文を使用すると、指定したSQL文を実行するためにOracle Databaseが使用する実行計画を決定できます。この文によって、実行計画の各手順を記述している行が、指定した表に挿入されます。SQLトレース機能の一部としてEXPLAIN PLAN文を発行することもできます。

この文によって、文を実行するコストも決まります。表にドメイン索引が定義されている場合、ユーザー定義のCPUおよびI/Oコストが挿入されます。

配布メディアのSQLスクリプトの中に、サンプル出力表PLAN_TABLEの定義があります。使用する出力表は、列の名前およびデータ型がこのサンプル表と同じである必要があります。このスクリプトの一般的な名前は、UTLXPLAN.SQLです。正確な名前および位置は、使用するオペレーティング・システムによって異なります。

キャッシュされたカーソルに関する情報は、次の動的パフォーマンス・ビューから得られます。

- SQLカーソルが使用する作業領域の詳細は、V$SQL_WORKAREAを問い合せます。

- キャッシュされたカーソルの実行計画の詳細は、V$SQL_PLANを問い合せます。

- キャッシュされたカーソルの各ステップでの実行統計または実行計画の操作(生成された行数、読み取られたブロック数など)は、V$SQL_PLAN_STATISTICSを問い合せます。

- 前述の3つのビューの処理結果を1つにまとめた情報を取得する場合は、V$SQL_PLAN_STATISTICS_ALLを問い合せます。

- この文の実行が監視されている場合、キャッシュされたカーソルの実行計画の各ステップまたは各操作での実行統計は、V$SQL_PLAN_MONITORに表示されます。MONITORヒントを使用すると、監視を強制的に適用できます。

関連項目:

- EXPLAIN PLANの出力、SQLトレース機能の使用方法、および実行計画の生成と解析方法については、『Oracle Database SQLチューニング・ガイド』を参照してください。

- 動的パフォーマンス・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

前提条件

EXPLAIN PLAN文を実行する場合、実行計画を格納する既存の出力表に行を挿入するための権限が必要です。

出力する実行計画の適用対象であるSQL文を実行するための権限も必要です。このSQL文でビューにアクセスする場合は、このビューの基礎になっているすべての表およびビューへのアクセス権限が必要です。このビューが別のビューに基づき、さらにこの別のビューが、ある表に基づいている場合、別のビューとそのビューの基礎になっている表へのアクセス権限が必要です。

EXPLAIN PLANで作成された実行計画を検証する場合は、出力表へ問い合せる権限が必要です。

EXPLAIN PLAN文はデータ操作言語(DML)文であり、データ定義言語(DDL)文ではありません。そのため、EXPLAIN PLAN文で加えられた変更内容は暗黙的にコミットされません。出力表のEXPLAIN PLAN文で生成された行を保存する場合は、この文を指定したトランザクションをコミットする必要があります。

関連項目:
計画表の移入および問合せに必要な権限の詳細は、「INSERT」および「SELECT」を参照してください。

構文

explain_plan::=

セマンティクス

SET STATEMENT_ID句

実行計画が出力される表の中で、この実行計画に該当する行にあるSTATEMENT_ID列の値を指定します。この値によって、実行計画の行を出力表の中の他の行と区別できます。ユーザーの出力表に多数の実行計画の行が含まれている場合は、必ず、STATEMENT_IDの値を指定します。この句を省略した場合、デフォルトでSTATEMENT_ID値がNULLに設定されます。

INTO table句

出力表の名前を指定し、オプションとしてそのスキーマおよびデータベースの名前も指定します。この表は、EXPLAIN PLAN文を使用する前に作成しておく必要があります。

schemaを指定しない場合、表は自分のスキーマ内にあるとみなされます。

dblinkには、出力表が格納されているリモートのOracle Databaseに対するデータベース・リンクの完全な名前または名前の一部を指定します。Oracle Databaseの分散機能を使用している場合にのみ、リモート出力表を指定できます。dblinkを省略した場合、表がローカル・データベース上にあるとみなされます。データベース・リンクの参照方法の詳細は、「リモート・データベース内のオブジェクトの参照」を参照してください。

INTO句を省略した場合、出力表は、ローカル・データベース上の自分のスキーマ内にあるPLAN_TABLEであるとみなされます。

FOR statement句

実行計画生成の対象となるSELECT、INSERT、UPDATE、DELETE、MERGE、CREATE TABLE、CREATE INDEXまたはALTER INDEX ... REBUILD文を指定します。

実行計画の注意事項: EXPLAIN PLANには、次の注意事項があります。

- statementにparallel_clauseを指定した場合、結果として生成される実行計画はパラレルで実行されます。ただし、EXPLAIN PLANコマンドによって計画表に実際に文が挿入されるため、ユーザーが発行したパラレルDML文は、トランザクションの最初のDML文ではなくなります。これは、トランザクション1つにつきパラレルDML文は1つというOracle Databaseの制限に違反するため、この文はシリアルで実行されます。文をパラレルで実行するには、EXPLAIN PLAN文をコミットまたはロールバックしてから、パラレルDML文を発行する必要があります。

- 一時表上で操作するための実行計画を判断する場合、EXPLAIN PLANは、同一セッションから実行する必要があります。これは、一時表内のデータがセッション固有であるためです。

例

EXPLAIN PLANの例: 次の文は、UPDATE文の実行計画およびコストを決定し、実行計画を記述した行をSTATEMENT_ID値'Raise in Tokyo'とともに、指定したplan_table表に挿入します。

EXPLAIN PLAN
SET STATEMENT_ID = 'Raise in Tokyo'
INTO plan_table
FOR UPDATE employees
SET salary = salary * 1.10
WHERE department_id =
(SELECT department_id FROM departments
WHERE location_id = 1700);

次のSELECT文は、plan_table表への問合せを実行し、実行計画およびコストを戻します。

SELECT id, LPAD(' ',2*(LEVEL-1))||operation operation, options,
object_name, object_alias, position
FROM plan_table
START WITH id = 0 AND statement_id = 'Raise in Tokyo'
CONNECT BY PRIOR id = parent_id AND statement_id = 'Raise in Tokyo'
ORDER BY id;

問合せによって、次の実行計画が戻されます。

ID OPERATION            OPTIONS              OBJECT_NAME          OBJECT_ALIAS         POSITION
--- -------------------- -------------------- -------------------- -------------------- --------
0 UPDATE STATEMENT                                                                           4
1   UPDATE                                  EMPLOYEES                                        1
2     INDEX            RANGE SCAN           EMP_DEPARTMENT_IX    EMPLOYEES@UPD$1             1
3       TABLE ACCESS   BY INDEX ROWID       DEPARTMENTS          DEPARTMENTS@SEL$1           1
4         INDEX        RANGE SCAN           DEPT_LOCATION_IX     DEPARTMENTS@SEL$1           1

POSITION列の1行目の値は、文のコストが4であることを示しています。

EXPLAIN PLAN: パーティション化例: サンプル表sh.salesは、time_id列でパーティション化されています。パーティションsales_q3_2000には、2000年10月1日より小さい時刻の値があり、time_id列にローカル索引sales_time_bixがあります。

次の問合せを考えてみます。

EXPLAIN PLAN FOR
SELECT * FROM sales
WHERE time_id BETWEEN :h AND '01-OCT-2000';

ここで、:hはすでに宣言されているバインド変数を指します。EXPLAIN PLAN文は、PLAN_TABLEを出力表とする次の問合せを実行します。次の問合せによって、パーティション情報などの基本的な実行計画が得られます。

SELECT operation, options, partition_start, partition_stop,
partition_id
FROM plan_table;

EXPLAIN WORK

用途

EXPLAIN WORK文を使用すると、Oracle Automatic Storage Management (Oracle ASM)のディスク・グループ・リバランス操作に関連する作業の見積りを取得できます。

この文で、V$ASM_ESTIMATE動的パフォーマンス・ビューに1行挿入されます。この行には、リバランス操作で移動する必要がある見積り割当て単位数を表すNUMBER値、EST_WORKが含まれます。

関連項目:

- ディスク・グループ・リバランス操作の詳細は、Oracle Automatic Storage Management管理者ガイドを参照してください。

- V$ASM_ESTIMATE動的パフォーマンス・ビューの詳細は、Oracle Databaseリファレンスを参照してください。

前提条件

EXPLAIN WORK文を実行する場合、V$ASM_ESTIMATE動的パフォーマンス・ビューに行を挿入するための権限が必要です。

作業見積り取得の対象となるALTER DISKGROUP文を実行するための権限も必要です。

EXPLAIN WORK文により生成される作業見積りを表示する場合、V$ASM_ESTIMATE動的パフォーマンス・ビューを問い合せるための権限が必要です。

EXPLAIN WORK文はデータ操作言語(DML)文であり、データ定義言語(DDL)文ではありません。そのため、EXPLAIN WORK文で加えられた変更内容は暗黙的にコミットされません。V$ASM_ESTIMATEビューのEXPLAIN WORK文で生成された行を保存する場合は、この文を指定したトランザクションをコミットする必要があります。

構文

explain_work::=

セマンティクス

SET STATEMENT_ID句

V$ASM_ESTIMATEビューでこの文により作成された行にあるSTATEMENT_ID列の値を指定します。この値によって、これらの行をビューの中の他の行と区別できます。ビューに多数の作業見積りの行が含まれている場合は、必ず、STATEMENT_IDの値を指定します。この句を省略した場合、デフォルトでSTATEMENT_ID値がNULLに設定されます。

FOR statement句

作業見積りの対象となるSQL文を指定します。次の句を含むALTER DISKGROUP文を指定できます。

- add_disk_clause (1つ以上のデスクをディスク・グループに追加します)

- disk_online_clause (1つ以上のディスクをオンラインにします)

- drop_disk_clause (1つ以上のディスクをディスク・グループから削除します)

- rebalance_diskgroup_clause (ディスク・グループをリバランスします)

- replace_disk_clause (ディスク・グループの1つ以上のディスクを置換します)

- resize_disk_clause (ディスク・グループのディスクをサイズ変更します)

- undrop_disk_clause (ディスク・グループからのディスクの削除を取り消します)

EXPLAIN WORK文は、rebalance_diskgroup_clauseの発行時に発生する明示的ディスク・グループ・リバランス、またはその他の任意の句の発行時に発生する自動ディスク・グループ・リバランス中に移動する必要がある割当て単位数を見積もります。

関連項目:
これらの句の詳細は、ALTER DISKGROUPを参照してください。

例

次の文は、ディスク・グループdg1を明示的にリバランスするために必要な作業量を見積もります。結果の見積りは、V$ASM_ESTIMATEビューに挿入されます。

EXPLAIN WORK
FOR ALTER DISKGROUP dg1 REBALANCE;

SELECT est_work FROM V$ASM_ESTIMATE;

EST_WORK
--------
5680

次の文は、ディスクの削除後にディスク・グループdg2を自動的にリバランスするために必要な作業量を見積もります。文はSTATEMENT_IDを指定し、これによりV$ASM_ESTIMATEビューで適切な作業見積りを問い合せることができます。

EXPLAIN WORK SET STATEMENT_ID='drop d0'
FOR ALTER DISKGROUP dg2 DROP DISK d0;
Explained.

SELECT est_work FROM V$ASM_ESTIMATE
WHERE STATEMENT_ID='drop d0';

EST_WORK
--------
426

FLASHBACK DATABASE

用途

FLASHBACK DATABASE文を使用すると、データベースを過去の時点またはシステム変更番号(SCN)まで戻すことができます。この文を使用すると、データベースの不完全リカバリと同じ操作をより高速に実行できます。

FLASHBACK DATABASE操作の後、フラッシュバックされたデータベースに書込みアクセスするためには、ALTER DATABASE OPEN RESETLOGS文によってそのデータベースを再オープンする必要があります。

関連項目:
FLASHBACK DATABASEの詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

前提条件

SYSDBA、SYSBACKUP、またはSYSDGシステム権限が必要です。高速リカバリ領域をデータベースに設定しておく必要があります。また、データベースを保証付きリストア・ポイントにフラッシュバックするのでなければ、ALTER DATABASE FLASHBACK ON文を使用して、データベースをFLASHBACKモードにしておく必要があります。データベースは、マウントされているがオープンされていない状態であることが必要です。さらに、次もあります。

- データベースは、ARCHIVELOGモードで実行されている必要があります。

- データベースは、現行の制御ファイルとともにマウントされている必要がありますが、オープンされている必要はありません。制御ファイルは、バックアップおよび再作成することはできません。データベース制御ファイルがバックアップからリストアされるか、または再作成されると、既存のすべてのフラッシュバック・ログ情報は廃棄されます。

- データベースには、SQL文ALTER TABLESPACE ... FLASHBACK OFFを使用して、フラッシュバック機能が使用禁止にされたオンライン表領域は含めないでください。

関連項目:

- データベースをFLASHBACKモードにする方法については、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』および「ALTER DATABASE」の「flashback_mode_clause」を参照してください。

- リストア・ポイントおよび保証付きリストア・ポイントの詳細は、「CREATE RESTORE POINT」を参照してください。

構文

flashback_database::=

セマンティクス

FLASHBACK DATABASE文を発行すると、最初に、必要なすべてのアーカイブREDOログおよびオンラインREDOログが使用可能であるかどうかが確認されます。これらのログが使用可能な場合、データベース内で現在オンラインになっているすべてのデータファイルが、この文に指定したSCNまたは時刻まで戻されます。

- データベースに保持されるフラッシュバック・データの量は、DB_FLASHBACK_RETENTION_TARGET初期化パラメータおよび高速リカバリ領域のサイズによって制御されます。V$FLASHBACK_DATABASE_LOGビューを問い合せることによって、どの時点までデータベースをフラッシュバックできるかを判断できます。

- フラッシュバックを実行するために十分なデータがデータベースに残っていない場合、標準のリカバリ手順によってデータベースを過去のある時点の状態にリカバリできます。

- 一連のデータファイルに十分なデータが残っていない場合、エラーが戻されます。その場合、それらのデータファイルをオフラインにし、この文を再実行してデータベースの残りのデータファイルをリカバリできます。その後、標準のリカバリ手順を使用して、オフラインにしたデータファイルをリカバリできます。

関連項目:
データファイルのリカバリの詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

STANDBY

STANDBYを指定すると、スタンバイ・データベースを以前のSCNまたは時点まで戻すことができます。スタンバイ・データベースではない場合、エラーが戻されます。この句を省略すると、databaseには、プライマリ・データベースまたはスタンバイ・データベースのどちらでも指定できます。

関連項目:
スタンバイ・データベースでFLASHBACK DATABASEを使用して複数の遅延を実現する方法については、『Oracle Data Guard概要および管理』を参照してください。

TO SCN句

システム変更番号(SCN)を指定します。

- TO SCNでは、指定したSCNの状態にデータベースが戻されます。

- TO BEFORE SCNでは、指定したSCNの直前のSCNの状態にデータベースが戻されます。

現行のSCNを判断するには、V$DATABASEビューのCURRENT_SCN列を問い合せます。これによって、高リスクのバッチ・ジョブを実行する前などに、SCNをスプール・ファイルに保存することもできます。

TO TIMESTAMP句

有効な日時式を指定します。

- TO TIMESTAMPでは、指定したタイムスタンプ時点の状態にデータベースが戻されます。

- TO BEFORE TIMESTAMPでは、指定したタイムスタンプの1秒前の状態にデータベースが戻されます。

タイムスタンプには、基準の値(SYSDATEなど)からのオフセットか、またはシステム・タイムスタンプの絶対値を指定できます。

TO RESTORE POINT句

この句を使用すると、指定したリストア・ポイントにデータベースをフラッシュバックできます。フラッシュバック・データベースが使用可能になっていない場合、このFLASHBACK DATABASE文では、この句のみを指定できます。データベースのモードがFLASHBACKでない場合、前述の「前提条件」で示したように、これは、この文で指定可能な唯一の句です。

RESETLOGS

TO BEFORE RESETLOGSを指定すると、データベースを最後のリセットログ操作(ALTER DATABASE OPEN RESETLOGS)の直前の状態にフラッシュバックできます。

関連項目:
この句の詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

例

データベースに高速リカバリ領域が設定してあり、メディア・リカバリが使用可能になっていると想定します。次の文は、データベースのFLASHBACKモードを有効にして、データベースをオープンします。

STARTUP MOUNT
ALTER DATABASE FLASHBACK ON;
ALTER DATABASE OPEN;

次の文は、データベースを1日以上オープンしていた場合、データベースを1日フラッシュバックします。

SHUTDOWN DATABASE
STARTUP MOUNT
FLASHBACK DATABASE TO TIMESTAMP SYSDATE-1;

FLASHBACK TABLE

用途

FLASHBACK TABLE文を使用すると、人為的エラーまたはアプリケーション・エラーが発生した場合に、表を以前の状態にリストアできます。表をフラッシュバックできる過去の時点は、システム内のUNDOデータの量によって異なります。また、Oracle Databaseでは、表の構造を変更するDDL操作が行われた場合は、表を以前の状態にリストアできません。

注意:
UNDO_MANAGEMENT初期化パラメータをデフォルトのAUTOのままにして、データベースを自動UNDOモードで実行することをお薦めします。また、UNDO_RETENTION初期化パラメータを、必要となる最も古いデータを含むために十分長い期間に設定してください。詳細は、UNDO_MANAGEMENT初期化パラメータおよびUNDO_RETENTION初期化パラメータに関するドキュメントを参照してください。

FLASHBACK TABLE文はロールバックできません。ただし、もう1つFLASHBACK TABLE文を発行し、現在の時間の直前の時間を指定することはできます。このため、FLASHBACK TABLE句を発行する前に、現在のSCNを記録しておくことをお薦めします。

関連項目:

- データベース全体を以前の状態に戻す方法の詳細は、「FLASHBACK DATABASE」を参照してください。

- 表から過去のデータを取り出す方法の詳細は、「SELECT」の「flashback_query_clause」を参照してください。

- FLASHBACK TABLE文を使用する方法の詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。

前提条件

表を以前のSCNまたはタイムスタンプまでフラッシュバックするには、その表に対するFLASHBACKオブジェクト権限か、FLASHBACK ANY TABLEシステム権限が必要です。また、表に対するREADまたはSELECTオブジェクト権限と表に対するINSERT、DELETEおよびALTERオブジェクト権限が必要です。

TO BEFORE DROPを使用せずに表をフラッシュバックする場合、フラッシュバック・リスト内のすべての表で、行の移動を有効にする必要があります。この操作はフラッシュバック削除といい、UNDOデータではなく、ごみ箱に削除されたデータを使用します。行の移動の有効化の詳細は、「row_movement_clause」を参照してください。

表をリストア・ポイントにフラッシュバックするには、SELECT ANY DICTIONARYまたはFLASHBACK ANY TABLEのいずれかのシステム権限か、SELECT_CATALOG_ROLEロールが必要です。

DROP TABLE操作の前まで表をフラッシュバックするために必要な権限は、その表の削除に必要な権限のみです。

構文

flashback_table::=

セマンティクス

Oracle Flashback Tableの操作中は、フラッシュバック・リストに指定されたすべての表が、排他DMLロックによってロックされます。これらのロックによって、表を以前の状態に戻す操作の間に、それらの表に他の操作が行われなくなります。

表のフラッシュバック操作は、フラッシュバック・リストに指定された表の数に関係なく、1回のトランザクションで実行されます。すべての表が以前の状態に戻されるか、何も戻されないかのいずれかです。いずれかの表のフラッシュバック操作が正常に実行されなかった場合、この文全体が正常に実行されません。

表のフラッシュバック操作が完了すると、表内のデータは、指定した過去の状態の表と同一になります。ただし、FLASHBACK TABLE TO SCNまたはTIMESTAMPでは行IDが保持されず、FLASHBACK TABLE TO BEFORE DROPでは参照制約がリカバリされません。

表に関連付けられた統計情報は、以前の形式には戻されません。表の現行の索引は戻され、フラッシュバック時点での表の状態が反映されます。現行の索引がフラッシュバック時点で存在していなかった場合、その索引は、フラッシュバック時点の表の状態を反映するように更新されます。ただし、フラッシュバック時点から現時点の間に削除された索引は、リストアされません。

schema

表が含まれているスキーマを指定します。schemaを指定しない場合、表は自分のスキーマ内にあるとみなされます。

table

以前の状態に戻すデータを含む1つ以上の表の名前を指定します。

表のフラッシュバックの制限事項: この文には、次の制限事項があります。

- 表のフラッシュバック操作は、クラスタ内の表、マテリアライズド・ビュー、アドバンスト・キューイング(AQ)表、静的データ・ディクショナリ表、システム表、リモート表、オブジェクト表、ネストした表、表の個々のパーティションまたはサブパーティションには無効です。

- 表のアップグレード、移動、切捨て、表への制約の追加、クラスタへの表の追加、列の変更または削除、列の暗号化キーの変更、パーティションまたはサブパーティションの追加、削除、マージ、分割、結合、切捨て(レンジ・パーティションの追加を除く)のDDL操作を実行すると表の構造が変更されるため、これらの操作後にTO SCNまたはTO TIMESTAMP句を使用して表をその操作以前の時点にフラッシュバックすることはできません。

TO SCN句

表を戻す時点に対応するシステム変更番号(SCN)を指定します。exprは、有効なSCNに評価される数値である必要があります。

TO TIMESTAMP句

表を戻す時点に対応するタイムスタンプ値を指定します。exprは、過去の有効なタイムスタンプに評価される必要があります。表は、指定したタイムスタンプの約3秒以内の時点にフラッシュバックされます。

TO RESTORE POINT句

表をフラッシュバックするリストア・ポイントを指定します。リストア・ポイントは作成済である必要があります。

関連項目:
リストア・ポイントの作成の詳細は、「CREATE RESTORE POINT」を参照してください。

ENABLE | DISABLE TRIGGERS

デフォルトでは、表のフラッシュバック操作中は、tableに定義したすべての有効なトリガーが無効にされ、表のフラッシュバック操作の完了後に再度有効にされます。このデフォルト動作を上書きして、フラッシュバック処理中もトリガーを有効にする必要がある場合、ENABLE TRIGGERSを指定します。

この句は、tableに定義され、すでに有効にされているデータベース・トリガーのみに影響します。現在無効になっているトリガーを選択して有効にするには、ALTER TABLE ... enable_disable_clauseを使用してから、FLASHBACK TABLE文にENABLE TRIGGERS句を指定して発行します。

TO BEFORE DROP句

この句を使用すると、削除された表およびすべての依存するオブジェクトをごみ箱から取り出すことができます。表は、SYSTEM表領域以外のローカル管理表領域内に置いておく必要があります。

関連項目:

- ごみ箱の詳細、およびごみ箱内のオブジェクトのネーミング規則の詳細は、『Oracle Database管理者ガイド』を参照してください。

- ごみ箱からオブジェクトを完全に削除する方法の詳細は、「PURGE」を参照してください。

ユーザーが指定した元の表名か、オブジェクトの削除時にそのオブジェクトに割り当てられたシステム生成名を指定できます。

- ごみ箱内のオブジェクトのシステム生成名は一意です。そのため、システム生成名を指定すると、その名前を持つ特定のオブジェクトが取り出されます。
ごみ箱の内容を参照するには、USER_RECYCLEBINデータ・ディクショナリ・ビューを問い合せます。かわりにRECYCLEBINシノニムを使用することもできます。次の2つの文は、同じ行を戻します。

SELECT * FROM RECYCLEBIN;
SELECT * FROM USER_RECYCLEBIN;

- ユーザー指定の名前を指定した場合、その名前を持つオブジェクトがごみ箱内に複数存在していると、ごみ箱に移動した日時が一番近いオブジェクトが取り出されます。その表のより古い状態で取り出す場合、次のいずれかの操作を実行します。

- 取り出す表の、ごみ箱内でのシステム生成名を指定します。

- 必要な表が取り出されるまでFLASHBACK TABLE ... TO BEFORE DROP文を繰り返し発行します。

Oracle Databaseは、元の表名を保持します。元の表が削除された後、同じスキーマ内に削除された表と同じ名前を持つ新しい表が作成されていた場合、RENAME TO句も指定しないかぎりエラーが戻されます。

RENAME TO句 この句を使用すると、ごみ箱から取り出される表に新しい名前を指定できます。

削除された表のフラッシュバックの注意事項: 削除された表のフラッシュバックには、次の注意事項があります。

- ごみ箱から取り出された表に定義されたすべての索引(ビットマップ結合索引およびドメイン索引以外)が取り出されます。(ビットマップ結合索引およびドメイン索引はDROP TABLE操作中にごみ箱に移動しないため、取り出すことができません。)

- 表に定義されたすべてのトリガーおよび制約も取り出されます。ただし、他の表を参照する参照整合制約は取り出されません。
取り出された索引、トリガーおよび制約には、ごみ箱での名前が付けられています。そのため、FLASHBACK TABLE ... TO BEFORE DROP文を発行する前に、USER_RECYCLEBINビューを問い合せて、取り出されたトリガーおよび制約の名前を使用しやすい名前に変更することをお薦めします。

- 表を削除すると、その表に定義されたすべてのマテリアライズド・ビュー・ログも削除されますが、これらはごみ箱には移動しません。そのため、マテリアライズド・ビュー・ログを表とともにフラッシュバックすることはできません。

- 表を削除すると、その表の索引も削除され、表とともにごみ箱に移動します。その後領域が不足すると、領域を再利用するために、まずごみ箱内の索引が消去されます。この場合、表をフラッシュバックしても、その表に定義されていた索引の一部が戻されない場合があります。

- ユーザーによって、または領域の再利用操作の結果として消去された表は、フラッシュバックできません。

例

以前の状態への表のリストア例: 次の例では、新しい表employees_testを行の移動を有効にして作成し、新しい表内の値を更新し、FLASHBACK TABLE文を発行します。

hrサンプル・スキーマのemployees表から、employees_test表を、行の移動を有効にして作成します。

CREATE TABLE employees_test
AS SELECT * FROM employees;

指標として、2500未満の給与をリストします。

SELECT salary
FROM employees_test
WHERE salary < 2500;

SALARY
----------
2400
2200
2100
2400
2200

注意:
FLASHBACK TABLE文によって使用されるマッピング表にSCNが伝播されるまで時間がかかるため、5分以上待ってから次の文を発行してください。この例で、既存の表を使用した場合は、この待機時間は必要ありません。

表の行の移動を可能にします。

ALTER TABLE employees_test
ENABLE ROW MOVEMENT;

給与が2500未満の従業員の給与を10%上げます。

UPDATE employees_test
SET salary = salary * 1.1
WHERE salary < 2500;

5 rows updated.
COMMIT;

2つ目の指標として、10%の昇給後にも2500未満である給与をリストします。

SELECT salary
FROM employees_test
WHERE salary < 2500;

SALARY
----------
2420
2310
2420

employees_test表を、現在のシステム時間より前の状態にリストアします。この例では、一連の例を迅速にテストできるように、1分間(実際にはこのような短い期間は設定しない)を使用しています。通常の環境では、より長い期間が経過します。

FLASHBACK TABLE employees_test
TO TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' minute);

2500未満の給与をリストします。前述のFLASHBACK TABLE文を発行したため、このリストは1つ目の指標リストと一致しています。

SELECT salary
FROM employees_test
WHERE salary < 2500;

SALARY
----------
2400
2200
2100
2400
2200

削除された表の取出し例: 次の文は、誤って削除したpm.print_media表を取り出します。

FLASHBACK TABLE print_media TO BEFORE DROP;

pmスキーマ内に別のprint_media表が作成されていた場合、RENAME TO句を使用して、取り出された表の名前を変更します。

FLASHBACK TABLE print_media TO BEFORE DROP RENAME TO print_media_old;

複数回削除された従業員表を最も古い状態で取り出す必要がある場合、USER_RECYLEBIN表を問い合せてシステム生成名を判断し、その名前をFLASHBACK TABLE文で使用します。(ご使用のデータベースでのシステム生成名は、ここに示すものとは異なります。)

SELECT object_name, droptime FROM user_recyclebin
WHERE original_name = 'PRINT_MEDIA';

OBJECT_NAME                    DROPTIME
------------------------------ -------------------
RB$$45703$TABLE$0              2003-06-03:15:26:39
RB$$45704$TABLE$0              2003-06-12:12:27:27
RB$$45705$TABLE$0              2003-07-08:09:28:01

GRANT

用途

GRANT文を使用すると、次の権限またはロールを付与できます。

- ユーザーおよびロールに対するシステム権限。表18-1に、システム権限のリストを、操作対象のデータベース・オブジェクト別に示します。

- ユーザー、ロール、およびプログラム・ユニットに対するロール。付与されたロールは、ユーザー定義(ローカルまたは外部)または事前定義済のいずれかです。事前定義されているロールのリストは、『Oracle Databaseセキュリティ・ガイド』を参照してください。

- ユーザーおよびロールに対する、特定のオブジェクトに対するオブジェクト権限。表18-2に、オブジェクト権限のリストを、操作対象のデータベース・オブジェクト別に示します。

注意:
グローバル・ロール(IDENTIFIED GLOBALLYで作成)は、エンタープライズ・ロールを介して付与します。GRANT文を使用して付与することはできません。

データベース・ユーザーの認可の注意事項: データベース・ユーザーを認可する方法は、データベースやGRANT文を介して行う以外にもあります。

- 多くのOracle Database権限は、提供されるPL/SQLパッケージおよびJavaパッケージを介して付与されます。これらの権限の詳細は、該当するパッケージのドキュメントを参照してください。

- オペレーティング・システムによっては、Oracle Databaseユーザーに対して、初期化パラメータOS_ROLESでロールを付与できます。オペレーティング・システム機能を使用してユーザーにロールを付与する場合、GRANT文でユーザーにロールを付与することはできなくなります。ただし、GRANT文を使用して、ユーザーにシステム権限を付与したり、その他のロールにシステム権限およびロールを付与することはできます。

Oracle Automatic Storage Managementの注意事項: AS SYSASMと認証されたユーザーは、この文を使用すると、システム権限SYSASM、SYSOPERおよびSYSDBAを現行ノードのOracle ASMパスワード・ファイルのユーザーに付与できます。

エディション化可能なオブジェクトの注意事項 エディション化可能なオブジェクトにオブジェクト権限を付与するGRANT操作を実行すると、オブジェクトが現行のエディションで実体化されます。エディションおよびエディション化可能なオブジェクトの詳細は、『Oracle Database開発ガイド』を参照してください。

関連項目:

- ローカル、グローバルおよび外部権限の定義については、「CREATE USER」および「CREATE ROLE」を参照してください。

- その他の認可方法および権限の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

- 権限付与の取消しについては、「REVOKE」を参照してください。

追加トピック

- 前提条件

- 構文

- セマンティクス

- システム権限およびオブジェクト権限

- 例

前提条件

システム権限を付与にするには、次のいずれかの条件が満たされている必要があります。

- GRANT ANY PRIVILEGEシステム権限が付与されている必要があります。この場合、ロールがユーザーのセッションで有効になっていないかぎり、システム権限をロールに付与しても、ロールが付与されているユーザーに権限は付与されません。

- ADMIN OPTION付きのシステム権限が付与されている必要があります。この場合、ロールがユーザーのセッションで有効になっているかどうかに関係なく、システム権限をロールに付与すると、ロールが付与されているユーザーに権限が付与されます。

ユーザーに対するロールまたは別のロールを付与する場合は、ADMIN OPTION付きのロールが直接付与されているか、GRANT ANY ROLEシステム権限が付与されているか、または付与するロールが自分で作成したロールである必要があります。

自分のスキーマ内のプログラム・ユニットへのロールを付与するには:

- Oracle Database 12cリリース1(12.1.0.1)の場合、ロールが直接付与されているか、または付与するロールが自分で作成したロールである必要があります。

- Oracle Database 12cリリース1(12.1.0.2)以降、ADMIN OPTIONまたはDELEGATE OPTION付きのロールが直接付与されているか、GRANT ANY ROLEシステム権限が付与されているか、または付与するロールが自分で作成したロールである必要があります。

別のユーザーのスキーマ内のプログラム・ユニットに対するロールを付与するには、ユーザーSYSである必要があり、ロールがスキーマ所有者によって作成されているか、直接スキーマ所有者に付与されている必要があります。

on_object_clauseのON USER句を指定して、オブジェクト権限をユーザーに付与する場合は、その権限が付与されたユーザーであるか、そのユーザーに対するオブジェクト権限がWITH GRANT OPTION付きで付与されているか、GRANT ANY OBJECT PRIVILEGEシステム権限が付与されている必要があります。GRANT ANY OBJECT PRIVILEGEを所持しているという理由だけで、あるユーザーに対するオブジェクト権限を付与できる場合は、*_TAB_PRIVSビューのGRANTOR列には、GRANT文を発行したユーザーではなく、権限が付与されたユーザーが表示されます。

その他のオブジェクトのタイプすべてにオブジェクト権限を付与する場合は、オブジェクトの所有者であるか、オブジェクトの所有者からWITH GRANT OPTION付きのオブジェクト権限が付与されている必要があります。または、GRANT ANY OBJECT PRIVILEGEシステム権限が付与されている必要があります。GRANT ANY OBJECT PRIVILEGEを持っている場合は、オブジェクトの所有者が付与可能なオブジェクト権限と同じオブジェクト権限のみを付与できます。その場合、*_TAB_PRIVSビューのGRANTOR列には、GRANT文を発行したユーザーではなく、オブジェクトの所有者が表示されます。

CONTAINER句を指定する場合は、マルチテナント・コンテナ・データベース(CDB)に接続している必要があります。CONTAINER = ALLを指定する場合は、現在のコンテナがルートである必要があります。

構文

grant::=

(grant_system_privileges::=, grant_object_privileges::=, grant_roles_to_programs::=)

grant_system_privileges::=

(grantee_clause::=、grantee_identified_by::=を参照)

grantee_clause::=

grantee_identified_by::=

grant_object_privileges::=

(on_object_clause ::=、grantee_clause ::=を参照)

on_object_clause ::=

grant_roles_to_programs::=

program_unit::=

セマンティクス

grant_system_privileges

システム権限を付与するには、次の句を使用します。

system_privilege

付与するシステム権限を指定します。表18-1に、システム権限のリストを、操作対象のデータベース・オブジェクト別に示します。

- ユーザーに権限を付与する場合、ユーザーの権限ドメインに権限が登録されます。このユーザーはその権限をすぐに使用できます。ANY権限は、信頼できるユーザーにのみ付与することをお薦めします。

- ロールに権限を付与する場合、ロールの権限ドメインに権限が登録されます。ロールが付与されているまたは使用可能となっているユーザーは、その権限をすぐに使用できます。なお、ロールが付与されている他のユーザーも、そのロールを使用可能にしてその権限を使用できます。

関連項目:
「ユーザーに対してシステム権限を付与する例:」および「ロールに対してシステム権限を付与する例:」を参照してください。

- PUBLICに権限を付与する場合、各ユーザーの権限ドメインに権限が登録されます。すべてのユーザーは、その権限によって許可される操作をすぐに実行できます。システム権限をPUBLICに付与しないことをお薦めします。

ロール

付与するロールを指定します。Oracle Databaseの事前定義ロールまたはユーザー定義ロールを付与できます。

- ユーザーにロールを付与する場合、そのユーザーが、付与されたロールを使用できます。ユーザーはそのロールをすぐに使用可能にし、ロールの権限ドメインに登録されている権限を使用できます。
保護アプリケーション・ロールは、ユーザーに直接付与する必要はありません。ユーザーが適切なセキュリティ・ポリシーを渡すことを前提として、関連付けられたPL/SQLパッケージでこの処理を行うことができます。詳細は、「USING package」の「CREATE ROLEセマンティクス」および『Oracle Databaseセキュリティ・ガイド』を参照してください。

- 他のロールにロールを付与する場合、権限受領者のロールの権限ドメインに、権限付与者のロールの権限ドメインが登録されます。権限受領者のロールを付与されているユーザーは、それを使用可能にした場合、付与されたロールの権限ドメイン内の権限を使用できます。

- PUBLICにロールを付与する場合、すべてのユーザーがロールを使用できます。すべてのユーザーはそのロールをすぐに使用可能にし、ロールの権限ドメインに登録されている権限を使用できます。

ALL PRIVILEGES

ALL PRIVILEGESを指定すると、SELECT ANY DICTIONARY、ALTER DATABASE LINKおよびALTER PUBLIC DATABASE LINK権限を除く、表18-1に示すすべてのシステム権限を付与できます。

関連項目:

- Oracleの事前定義されているロールの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

- 「ロールに対してロールを付与する例:」

- ユーザー定義ロールの作成については、「CREATE ROLE」を参照してください。

grantee_clause

grantee_clauseを使用すると、システム権限、ロールまたはオブジェクト権限が付与されるユーザーまたはロールを指定できます。

PUBLIC PUBLICを指定すると、すべてのユーザーに権限を付与できます。システム権限をPUBLICに付与しないことをお薦めします。

権限受領者の制限事項: 各ユーザー、ロールまたはPUBLICはそれぞれ、grantee_clauseに1回のみ指定可能です。

grantee_identified_by

grantee_identified_by句を使用すると、ユーザーにシステム権限とロールを付与するときにユーザーにパスワードを割り当てることができます。ユーザーとパスワードを同じ数だけ指定する必要があります。最初のパスワードは最初のユーザーに、2番目のパスワードは2番目のユーザーに、というように割り当てられます。指定したユーザーが存在する場合、データベースはそのユーザーのパスワードをリセットします。指定したユーザーが存在しない場合、データベースはパスワードとともにユーザーを作成します。

関連項目:
「CREATE USER」(ユーザー名とパスワードの制限事項について)および「システム権限の付与時にユーザー・パスワードを割り当てる例」を参照してください。

WITH ADMIN OPTION

WITH ADMIN OPTIONを指定すると、権限受領者は次のことができます。

- ロールがGLOBALロールでない場合、権限またはロールを他のユーザーまたはロールに付与できます。

- 権限またはロールを他のユーザーまたは他のロールから取り消すことができます。

- 権限またはロールへのアクセスに必要な認可を変更するため、その権限またはロールを変更できます。

- 権限またはロールを削除します。

- 権限を付与したスキーマ内のプログラム・ユニットに、ロールを付与します。

- 権限を付与したスキーマ内のプログラム・ユニットからロールを取り消します。

たとえば、WITH ADMIN OPTIONを指定せずにユーザーにロールまたはシステム権限を付与し、後でWITH ADMIN OPTIONを指定してその権限およびロールを付与した場合、そのユーザーはその権限またはロールに関してADMIN OPTIONを持つことになります。

システム権限またはロールのADMIN OPTIONをユーザーから取り消す場合、そのユーザーの権限またはロールを完全に取り消し、その次にADMIN OPTIONを指定せずに権限またはロールをユーザーに付与します。

関連項目:
「ADMIN OPTION付きロールを付与する例:」

WITH DELEGATE OPTION

注意:
WITH DELEGATE OPTION句は、Oracle Database 12cリリース1(12.1.0.2)から使用可能です。

ロールをユーザーに付与する場合のみ、この句を指定できます。

WITH DELEGATE OPTIONを指定すると、権限受領者は次のことができます。

- 権限を付与したスキーマ内のプログラム・ユニットに、ロールを付与します。

- 権限を付与したスキーマ内のプログラム・ユニットからロールを取り消します。

たとえば、WITH DELEGATE OPTIONを指定せずにユーザーにロールを付与し、後でWITH DELEGATE OPTIONを指定してそのロールを付与した場合、そのユーザーはそのロールに関してDELEGATE OPTIONを持つことになります。

ロールのDELEGATE OPTIONをユーザーから取り消す場合、そのユーザーのロールを完全に取り消し、その次にDELEGATE OPTIONを指定せずにロールをユーザーに付与する必要があります。

関連項目:

- 「DELEGATE OPTION付きロールを付与する例:」

- プログラム・ユニットへのロールの付与の詳細は、grant_roles_to_programs句を参照してください。

システム権限およびロールの付与の制限事項: 権限およびロールには、次の制限事項があります。

- 付与する権限およびロールのリストに、権限またはロールを指定できるのは1回のみです。

- ロールに対してそのロールと同じロールは付与できません。

- ロールIDENTIFIED GLOBALLYは、どのようなユーザーまたはロールに対しても付与できません。

- ロールIDENTIFIED EXTERNALLYは、グローバル・ユーザーまたはグローバル・ロールに対して付与できません。

- ロールは交互に付与できません。たとえば、ロールbankerをロールtellerに付与した場合、逆にtellerをbankerに付与することはできません。

- IDENTIFIED BYロール、IDENTIFIED USINGロールおよびIDENTIFIED EXTERNALLYロールの別のロールへの付与はできません。

grant_object_privileges

オブジェクト権限を付与するには、次の句を使用します。

object_privilege

付与するオブジェクト権限を指定します。表18-2に、オブジェクト権限のリストを、付与されるオブジェクトのタイプ別に示します。ユーザーまたはロールのいずれかのオブジェクト権限をエディション化可能なオブジェクトに付与すると、オブジェクトは付与したエディションで実体化されます。エディション化可能なオブジェクト型およびエディションの詳細は、「CREATE EDITION」を参照してください。

注意:
ビューに対するSELECTを他のユーザーに付与するには、ビューの基礎となるすべてのオブジェクトを所有しているか、またはこれらすべての基礎となるオブジェクトに対するSELECTオブジェクト権限をWITH GRANT OPTIONで付与されている必要があります。これは、これらの基礎となるオブジェクトに対するSELECT権限を権限受領者がすでに持っている場合にも当てはまります。
ビューに対するREADを他のユーザーに付与するには、ビューの基礎となるすべてのオブジェクトを所有しているか、またはこれらすべての基礎となるオブジェクトに対するREADまたはSELECTオブジェクト権限をWITH GRANT OPTIONで付与されている必要があります。これは、これらの基礎となるオブジェクトに対するREADまたはSELECT権限を権限受領者がすでに持っている場合にも当てはまります。

オブジェクト権限の制限事項: 付与する権限のリストに権限を指定できるのは1回のみです。

ALL [PRIVILEGES]

ALLを指定すると、GRANT OPTION付きで付与されているオブジェクト権限に対するすべての権限を付与できます。オブジェクトが定義されているスキーマを所有しているユーザーは、自動的にGRANT OPTION付きのオブジェクトに対するすべての権限を持っています。キーワードPRIVILEGESはセマンティクスを明確にするためのものであり、指定は任意です。

column

権限を付与する表またはビューの列を指定します。INSERT、REFERENCESまたはUPDATEの各権限を付与する場合にのみ、列を指定できます。列を指定しない場合、権限受領者には表またはビューのすべての列に対して指定した権限が付与されます。

既存の列オブジェクトに対して付与された権限については、データ・ディクショナリ・ビューUSER_COL_PRIVS、ALL_COL_PRIVSまたはDBA_COL_PRIVSを問い合せます。

関連項目:
データ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』および「別々の列に複数のオブジェクト権限を付与する例:」を参照してください。

on_object_clause

on_object_clauseを指定すると、権限が付与されているオブジェクトを識別できます。ユーザー、ディレクトリ・スキーマ・オブジェクト、エディション、データ・マイニング・モデル、Javaソースおよびリソース・スキーマ・オブジェクト、およびSQL翻訳プロファイルは、異なるネームスペースに格納されるため、別々に識別されます。

関連項目:
「ロールに対してオブジェクト権限を付与する例:」

object 権限を付与するスキーマ・オブジェクトを指定します。objectをschemaで修飾しなかった場合、そのオブジェクトは自分のスキーマ内にあるとみなされます。オブジェクトには次のタイプがあります。

- 表、ビューまたはマテリアライズド・ビュー

- 順序

- プロシージャ、ファンクションまたはパッケージ

- ユーザー定義型

- これらの項目のシノニム

- ディレクトリ、ライブラリ、演算子または索引タイプ

- Javaソース、クラスまたはリソース

パーティション表の単一パーティションに直接権限を付与することはできません。

関連項目:
「ユーザーに対して表へのオブジェクト権限を付与する例:」、「ビューへのオブジェクト権限を付与する例」および「別のスキーマの順序に対してオブジェクト権限を付与する例:」を参照してください。

ON USER 権限を付与するデータベース・ユーザーを1人以上指定します。

権限付与の注意事項 ユーザーPUBLICに対しては権限を付与できません。

関連項目:
「ユーザーにオブジェクト権限を付与する例:」

ON DIRECTORY 権限を付与するディレクトリ・スキーマ・オブジェクトの名前を指定します。directory_nameはスキーマ名で修飾できません。

関連項目:
「CREATE DIRECTORY」および「ディレクトリへのオブジェクト権限を付与する例:」を参照してください。

ON EDITION USEオブジェクト権限を付与するエディションの名前を指定します。edition_nameはスキーマ名で修飾できません。

ON MINING MODEL 権限を付与するマイニング・モデルの名前を指定します。mining_model_nameをschemaで修飾しなかった場合、そのマイニング・モデルは自分のスキーマ内にあるとみなされます。

ON JAVA SOURCE | RESOURCE 権限を付与するJavaソースまたはリソース・スキーマ・オブジェクトの名前を指定します。objectをschemaで修飾しなかった場合、そのオブジェクトは自分のスキーマ内にあるとみなされます。

関連項目:
「CREATE JAVA」

ON SQL TRANSLATION PROFILE 権限を付与するSQL翻訳プロファイルの名前を指定します。profileをschemaで修飾しなかった場合、そのプロファイルは自分のスキーマ内にあるとみなされます。

WITH HIERARCHY OPTION

WITH HIERARCHY OPTIONを指定すると、この文の後に作成されるサブオブジェクトも含め、objectのすべてのサブオブジェクト(ビューを基に作成したサブビューなど)に対する指定したオブジェクト権限を付与できます。

この句は、READまたはSELECTオブジェクト権限とあわせて指定する場合のみ意味があります。

WITH GRANT OPTION

WITH GRANT OPTIONを指定すると、権限受領者による、他のユーザーまたはロールに対するオブジェクト権限の付与を許可できます。

たとえば、WITH GRANT OPTIONを指定せずにユーザーにオブジェクト権限を付与し、後でWITH GRANT OPTIONを指定してその権限を付与した場合、そのユーザーはその権限に関してGRANT OPTIONを持つことになります。

オブジェクト権限のGRANT OPTIONをユーザーから取り消す場合、そのユーザーの権限を完全に取り消し、その次にGRANT OPTIONを指定せずに権限をユーザーに付与する必要があります。

With Grant Optionの付与の制限事項: WITH GRANT OPTIONは、ユーザーまたはPUBLICに権限を付与する場合にのみ指定できます。ロールに付与する場合は指定できません。

grant_roles_to_programs

この句を使用して、ロールをプログラム・ユニットに付与します。そのようなロールは、コード・ベースのアクセス制御(CBAC)ロールと呼ばれます。

role

付与するロールを指定します。Oracle Databaseの事前定義ロールまたはユーザー定義ロールを付与できます。ロールはプログラム・ユニットのスキーマ所有者によって作成されているか、直接付与する必要があります。

program_unit

ロールを付与するプログラム・ユニットを指定します。PL/SQLファンクション、プロシージャ、またはパッケージを指定できます。schemaを指定しない場合、ファンクション、プロシージャ、またはパッケージは独自のスキーマにあると見なされます。

関連項目:
プログラム・ユニットへのコードに基づくアクセス制御ロールの割当ての詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

CONTAINER句

現在のコンテナがプラガブル・データベース(PDB)である場合:

- CONTAINER = CURRENTを指定すると、システム権限、オブジェクト権限またはロールをユーザーまたはロールにローカルに付与できます。現在のPDBでのみ、その権限またはロールがユーザーまたはロールに付与されます。

現在のコンテナがルートである場合:

- CONTAINER = CURRENTを指定すると、システム権限、オブジェクト権限またはロールを共通ユーザーまたは共通ロールにローカルに付与できます。ルートでのみ、ユーザーまたはロールにその権限が付与されます。

- CONTAINER = ALLを指定すると、システム権限、共通オブジェクトに対するオブジェクト権限またはロールを共通ユーザーまたは共通ロールに共通に付与できます。

この句を省略すると、CONTAINER = CURRENTがデフォルトになります。

注意:
権限またはロールを付与するときにCONTAINER句を指定する場合は、現在のコンテナが同じコンテナである必要があります。また、その権限またはロールを取り消すときには、同じCONTAINER句を指定する必要があります。詳細は、REVOKE文の「CONTAINER句」を参照してください。

システム権限およびオブジェクト権限

注意:
オブジェクトに対してANY権限(CREATE ANY CLUSTERなど)を付与する場合、結果は、O7_DICTIONARY_ACCESSIBILITY初期化パラメータの値によって決まります。このパラメータはデフォルトではFALSEに設定されているため、ANY権限の受領者はすべてのスキーマ内の該当するタイプのオブジェクトにアクセスできますが、SYSスキーマにはアクセスできません。O7_DICTIONARY_ACCESSIBILITYをTRUEに設定した場合、ANY権限の受領者は、SYSスキーマ内のOracleスケジューラ・オブジェクト以外のすべてのオブジェクトにアクセスできます。セキュリティ上の理由のため、この設定の使用には注意が必要です。

表18-1 システム権限(操作対象のデータベース・オブジェクト別)

システム権限名

許可される操作

アドバイザ・フレームワーク権限(すべてのアドバイザ・フレームワーク権限は、DBAロールに含まれています。)

—

ADVISOR

PL/SQLパッケージ(DBMS_ADVISORやDBMS_SQLTUNEなど)を介したアドバイザ・フレームワークへのアクセス。

これらのパッケージの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

ADMINISTER SQL TUNING SET

DBMS_SQLTUNEパッケージを介した、権限受領者が所有するSQLチューニング・セットの作成、削除、選択(読取り)およびロード(書込み)。

ADMINISTER ANY SQL TUNING SET

DBMS_SQLTUNEパッケージを介した、任意のユーザーが所有するSQLチューニング・セットの作成、削除、選択(読取り)およびロード(書込み)。

CREATE ANY SQL PROFILE

Enterprise ManagerまたはDBMS_SQLTUNEパッケージを介してアクセスする、SQLチューニング・アドバイザが推奨したSQLプロファイルの受入れ。

注意: この権限は現在非推奨になっています。かわりに、ADMINISTER SQL MANAGEMENT OBJECTを使用してください。

ALTER ANY SQL PROFILE

既存のSQLプロファイルの属性の変更。

注意: この権限は現在非推奨になっています。かわりに、ADMINISTER SQL MANAGEMENT OBJECTを使用してください。

DROP ANY SQL PROFILE

既存のSQLプロファイルの削除。

注意: この権限は現在非推奨になっています。かわりに、ADMINISTER SQL MANAGEMENT OBJECTを使用してください。

ADMINISTER SQL MANAGEMENT OBJECT

DBMS_SQLTUNEパッケージを介して任意のユーザーが所有しているSQLプロファイルの作成、変更および削除。

クラスタ:

—

CREATE CLUSTER

権限を付与したスキーマ内でのクラスタの作成。

CREATE ANY CLUSTER

SYSを除く任意のスキーマ内でのクラスタの作成。CREATE ANY TABLEと同様に動作します。

ALTER ANY CLUSTER

SYSを除く任意のスキーマ内でのクラスタの変更。

DROP ANY CLUSTER

SYSを除く任意のスキーマ内でのクラスタの削除。

コンテキスト:

—

CREATE ANY CONTEXT

任意のコンテキスト・ネームスペースの作成。

DROP ANY CONTEXT

任意のコンテキスト・ネームスペースの削除。

データ・リダクション:

—

EXEMPT REDACTION POLICY

既存のOracle Data Redactionポリシーのバイパス、およびData Redactionが定義されている表またはビューの実際のデータの表示。

データベース:

—

ALTER DATABASE

データベースの変更。

ALTER SYSTEM

ALTER SYSTEM文の発行。

AUDIT SYSTEM

AUDIT文の発行。

データベース・リンク:

—

CREATE DATABASE LINK

権限を付与したスキーマ内でのプライベート・データベース・リンクの作成。

CREATEPUBLICDATABASELINK

パブリック・データベース・リンクの作成。

ALTER DATABASE LINK

接続または認証ユーザーのパスワードが変更された場合の固定ユーザー・データベース・リンクの変更。

ALTER PUBLIC DATABASE LINK

接続または認証ユーザーのパスワードが変更された場合のパブリック固定ユーザー・データベース・リンクの変更。

DROPPUBLIC DATABASELINK

パブリック・データベース・リンクの削除。

デバッグ:

—

DEBUG CONNECT SESSION

デバッガへの現行のセッションの接続。

DEBUG ANY PROCEDURE

任意のデータベース・オブジェクトのすべてのPL/SQLコードおよびJavaコードのデバッグ。アプリケーションによって実行されたすべてのSQL文に関する情報の表示。

注意: この権限を付与することは、データベース内の適用可能なすべてのオブジェクトについてDEBUGオブジェクト権限を付与することと同じです。

ディクショナリ:

—

ANALYZE ANY DICTIONARY

データ・ディクショナリ・オブジェクトの分析。

ディメンション:

—

CREATE DIMENSION

権限を付与したスキーマ内でのディメンションの作成。

CREATE ANY DIMENSION

SYSを除く任意のスキーマ内でのディメンションの作成。

ALTER ANY DIMENSION

SYSを除く任意のスキーマ内でのディメンションの変更。

DROP ANY DIMENSION

SYSを除く任意のスキーマ内でのディメンションの削除。

ディレクトリ:

—

CREATE ANY DIRECTORY

ディレクトリ・データベース・オブジェクトの作成。

DROP ANY DIRECTORY

ディレクトリ・データベース・オブジェクトの削除。

エディション:

—

CREATE ANY EDITION

エディションの作成。

DROP ANY EDITION

エディションの削除。

フラッシュバック・データ・アーカイブ:

—

FLASHBACK ARCHIVE ADMINISTER

フラッシュバック・データ・アーカイブの作成、変更または削除。

索引:

—

CREATE ANY INDEX

SYSを除く任意のスキーマ内での任意の表に対するドメイン索引または索引の作成。SYS

ALTER ANY INDEX

SYSを除く任意のスキーマ内での索引の変更。

DROP ANY INDEX

SYSを除く任意のスキーマ内での索引の削除。

索引タイプ:

—

CREATE INDEXTYPE

権限を付与したスキーマ内での索引タイプの作成。

CREATE ANY INDEXTYPE

SYSを除く任意のスキーマ内での索引タイプの作成およびSYSを除く任意のスキーマ内での索引タイプに対するコメントの作成。

ALTER ANY INDEXTYPE

SYSを除く任意のスキーマ内での索引タイプの変更。

DROP ANY INDEXTYPE

SYSを除く任意のスキーマ内での索引タイプの削除。

EXECUTE ANY INDEXTYPE

SYSを除く任意のスキーマ内での索引タイプの参照。

ジョブ・スケジューラ・オブジェクト:

次の権限は、DBMS_SCHEDULERパッケージのプロシージャを実行する場合に必要です。この権限は、データベース・オブジェクトではない軽量ジョブには適用されません。軽量ジョブの詳細は、『Oracle Database管理者ガイド』を参照してください。

CREATE JOB

権限を付与したスキーマ内でのジョブ、チェーン、スケジュール、プログラムまたは資格証明の作成、変更または削除。

CREATE ANY JOB

SYSを除く任意のスキーマ内でのジョブ、チェーン、スケジュールまたは資格証明の作成、変更または削除。

注意: この強力な権限を使用すると、権限受領者は任意のユーザーとしてコードを実行できます。この権限の付与には注意が必要です。

CREATE EXTERNAL JOB

権限を付与したスキーマ内での、オペレーティング・システム上で実行可能なスケジューラ・ジョブの作成。

EXECUTE ANY CLASS

権限を付与したスキーマ内でのジョブのジョブ・クラスの指定。

EXECUTE ANY PROGRAM

権限を付与したスキーマ内でのジョブの任意のプログラムの使用。

MANAGE SCHEDULER

任意のジョブ・クラス、ウィンドウまたはウィンドウ・グループの作成、変更または削除。

キー管理フレームワーク:

—

ADMINISTER KEY MANAGEMENT

キーおよびキーストアの管理。

ライブラリ:

注意: CREATE LIBARARY、CREATE ANY LIBRARY、ALTER ANY LIBRARYおよびEXECUTE ANY LIBRARYは、非常に強力な権限であり、信頼できるユーザーにのみ付与する必要があります。これらの権限を付与する前に、『Oracle Databaseセキュリティ・ガイド』を参照してください。

CREATE LIBRARY

権限を付与したスキーマ内での外部プロシージャまたはファンクション・ライブラリの作成。

CREATE ANY LIBRARY

SYSを除く任意のスキーマ内での外部プロシージャまたはファンクション・ライブラリの作成。

ALTER ANY LIBRARY

SYSを除く任意のスキーマ内での外部プロシージャまたはファンクション・ライブラリの変更。

DROP ANY LIBRARY

SYSを除く任意のスキーマ内での外部プロシージャまたはファンクション・ライブラリの削除。

EXECUTE ANY LIBRARY

SYSを除く任意のスキーマ内での外部プロシージャまたはファンクション・ライブラリの使用。

LOGMINER:

—

LOGMINING

CDB内のDBMS_LOGMNRパッケージに含まれるプロシージャの実行。V$LOGMNR_CONTENTSビューの内容の問合せ。

マテリアライズド・ビュー:

—

CREATE MATERIALIZED VIEW

権限を付与したスキーマ内でのマテリアライズド・ビューの作成。

CREATE ANY MATERIALIZED VIEW

SYSを除く任意のスキーマ内でのマテリアライズド・ビューの作成。

ALTER ANY MATERIALIZED VIEW

SYSを除く任意のスキーマ内でのマテリアライズド・ビューの変更。

DROP ANY MATERIALIZED VIEW

SYSを除く任意のスキーマ内でのマテリアライズド・ビューの削除。

QUERY REWRITE

この権限は現在非推奨になっています。ユーザー自身のスキーマ内の表またはビューを参照するマテリアライズド・ビューのリライトを可能にする場合、権限は不要です。

GLOBAL QUERY REWRITE

マテリアライズド・ビューがSYSを除く任意のスキーマ内の表またはビューを参照している場合のそのマテリアライズド・ビューを使用したリライトの有効化。

ON COMMIT REFRESH

データベースの任意の表に対するREFRESH ON COMMITモードのマテリアライズド・ビューの作成。

データベースの任意の表に対するマテリアライズド・ビューのモードをREFRESH ON DEMANDモードからREFRESH ON COMMITモードに変更。

FLASHBACK ANY TABLE

SYSを除く任意のスキーマ内の表、ビューまたはマテリアライズド・ビューでのSQLフラッシュバック問合せの発行。この権限は、DBMS_FLASHBACKプロシージャの実行には不要です。

マイニング・モデル:

—

CREATE MINING MODEL

権限を付与したスキーマでのDBMS_DATA_MINING.CREATE_MODELプロシージャによるマイニング・モデルの作成。

CREATE ANY MINING MODEL

SYSを除く任意のスキーマでのDBMS_DATA_MINING.CREATE_MODELプロシージャによるマイニング・モデルの作成。

ALTER ANY MINING MODEL

SYSを除く任意のスキーマ内での、適切なDBMS_DATA_MININGプロシージャを使用した、マイニング・モデル名または任意のモデルの関連付けられたコスト・マトリックスの変更。

DROP ANY MINING MODEL

SYSを除く任意のスキーマでのDBMS_DATA_MINING.DROP_MODELプロシージャによるマイニング・モデルの削除。

SELECT ANY MINING MODEL

SYSを除く任意のスキーマでのマイニング・モデルのスコアリングまたは表示。スコアリングの実行には、SQLファンクションのPREDICTIONファミリ、またはDBMS_DATA_MINING.APPLYプロシージャを使用します。モデルの表示は、DBMS_DATA_MINING.GET_MODEL_DETAILS_*プロシージャで実行されます。

COMMENT ANY MINING MODEL

SYSを除く任意のスキーマのマイニング・モデルでのSQL COMMENT文によるコメントの作成。

OLAPキューブ:

Oracle DatabaseをOLAPオプションで使用している場合は、次の権限が有効です。

CREATE CUBE

権限を付与したスキーマでのOLAPキューブの作成。

CREATE ANY CUBE

SYSを除く任意のスキーマ内でのOLAPキューブの作成。

ALTER ANY CUBE

SYSを除く任意のスキーマ内でのOLAPキューブの変更。

DROP ANY CUBE

SYSを除く任意のスキーマ内でのOLAPキューブの削除。

SELECT ANY CUBE

SYSを除く任意のスキーマでのOLAPキューブの問合せまたは表示。

UPDATE ANY CUBE

SYSを除く任意のスキーマ内でのOLAPキューブの更新。

OLAPキューブ・メジャー・フォルダ:

Oracle DatabaseをOLAPオプションで使用している場合は、次の権限が有効です。

CREATE MEASURE FOLDER

権限を付与したスキーマでのOLAPメジャー・フォルダの作成。

CREATE ANY MEASURE FOLDER

SYSを除く任意のスキーマ内でのOLAPメジャー・フォルダの作成。

DELETE ANY MEASURE FOLDER

SYSを除く任意のスキーマ内でのOLAPメジャー・フォルダからのメジャーの削除。

DROP ANY MEASURE FOLDER

SYSを除く任意のスキーマ内でのOLAPメジャー・フォルダの削除。

INSERT ANY MEASURE FOLDER

SYSを除く任意のスキーマ内でのOLAPメジャー・フォルダへのメジャーの挿入。

OLAPキューブ・ディメンション:

Oracle DatabaseをOLAPオプションで使用している場合は、次の権限が有効です。

CREATE CUBE DIMENSION

権限を付与したスキーマでのOLAPキューブ・ディメンションの作成。

CREATE ANY CUBE DIMENSION

SYSを除く任意のスキーマ内でのOLAPキューブ・ディメンションの作成。

ALTER ANY CUBE DIMENSION

SYSを除く任意のスキーマ内でのOLAPキューブ・ディメンションの変更。

DELETE ANY CUBE DIMENSION

SYSを除く任意のスキーマ内でのOLAPキューブ・ディメンションからの削除。

DROP ANY CUBE DIMENSION

SYSを除く任意のスキーマ内でのOLAPキューブ・ディメンションの削除。

INSERT ANY CUBE DIMENSION

SYSを除く任意のスキーマ内でのOLAPキューブ・ディメンションへの挿入。

SELECT ANY CUBE DIMENSION

SYSを除く任意のスキーマ内でのOLAPキューブ・ディメンションの表示または問合せ。

UPDATE ANY CUBE DIMENSION

SYSを除く任意のスキーマ内でのOLAPキューブ・ディメンションの更新。

OLAPキューブの作成プロセス:

—

CREATE CUBE BUILD PROCESS

権限を付与したスキーマでのOLAPキューブの作成プロセスの作成。

CREATE ANY CUBE BUILD PROCESS

SYSを除く任意のスキーマ内でのOLAPキューブの作成プロセスの作成。

DROP ANY CUBE BUILD PROCESS

SYSを除く任意のスキーマ内でのOLAPキューブの作成プロセスの削除。

UPDATE ANY CUBE BUILD PROCESS

SYSを除く任意のスキーマ内でのOLAPキューブの作成プロセスの更新。

演算子:

—

CREATE OPERATOR

権限を付与したスキーマ内での演算子およびバインディングの作成。

CREATE ANY OPERATOR

任意のスキーマ内での演算子とそのバインディングの作成、および任意のスキーマ内の演算子に対するコメントの作成。

ALTER ANY OPERATOR

任意のスキーマ内での演算子の変更。

DROP ANY OPERATOR

任意のスキーマ内での演算子の削除。

EXECUTE ANY OPERATOR

任意のスキーマ内での演算子の参照。

アウトライン:

—

CREATE ANY OUTLINE

アウトラインを使用する任意のスキーマ内で使用するパブリック・アウトラインの作成。

ALTER ANY OUTLINE

アウトラインの変更。

DROP ANY OUTLINE

アウトラインの削除。

計画管理:

—

ADMINISTER SQL MANAGEMENT OBJECT

様々なSQL文に対して保持されている計画の履歴およびSQL計画ベースラインの制御操作の実行。

プラガブル・データベース:

—

CREATE PLUGGABLE DATABASE

PDBの作成。

CDBから以前に切断されたPDBの接続。

PDBのクローニング。

SET CONTAINER

この権限が付与されていたコンテナへの共通ユーザーによる切替えの許可。この権限は、共通ユーザーまたは共通ロールにのみ付与できます。

プロシージャ:

—

CREATE PROCEDURE

権限受領者のスキーマ内でのストアド・プロシージャ、ストアド・ファンクションおよびストアド・パッケージの作成。

CREATE ANY PROCEDURE

SYSを除く任意のスキーマ内でのストアド・プロシージャ、ストアド・ファンクションおよびストアド・パッケージの作成。

ALTER ANY PROCEDURE

SYSを除く任意のスキーマ内でのストアド・プロシージャ、ストアド・ファンクションまたはストアド・パッケージの変更。

DROP ANY PROCEDURE

SYSを除く任意のスキーマ内でのストアド・プロシージャ、ストアド・ファンクションまたはストアド・パッケージの削除。

EXECUTE ANY PROCEDURE

プロシージャまたはファンクションの実行(スタンドアロンまたはパッケージ)。

SYSを除く任意のスキーマ内でのパブリック・パッケージ変数の参照。

プロファイル:

—

CREATE PROFILE

プロファイルの作成。

ALTER PROFILE

プロファイルの変更。

DROP PROFILE

プロファイルの削除。

ロール:

—

CREATE ROLE

ロールの作成。

ALTER ANY ROLE

データベース内の任意のロールの変更。

DROP ANY ROLE

ロールの削除。

GRANT ANY ROLE

データベース内の任意のロールの付与。

ロールバック・セグメント:

—

CREATE ROLLBACK SEGMENT

ロールバック・セグメントの作成。

ALTER ROLLBACK SEGMENT

ロールバック・セグメントの変更。

DROP ROLLBACK SEGMENT

ロールバック・セグメントの削除。

順序:

—

CREATE SEQUENCE

権限を付与したスキーマ内での順序の作成。

CREATE ANY SEQUENCE

SYSを除く任意のスキーマ内での順序の作成。

ALTER ANY SEQUENCE

SYSを除く任意のスキーマ内での順序の変更。

DROP ANY SEQUENCE

SYSを除く任意のスキーマ内での順序の削除。

SELECT ANY SEQUENCE

SYSを除く任意のスキーマ内での順序の参照。

セッション:

—

CREATE SESSION

データベースへの接続。

ALTER RESOURCE COST

セッション・リソースに対するコストの設定。

ALTER SESSION

SQLトレース機能の有効と無効の切替え。

RESTRICTED SESSION

SQL*PlusのSTARTUP RESTRICT文を使用した、インスタンス起動後のログイン。

スナップショット:

MATERIALIZED VIEWSを参照してください

SQL翻訳プロファイル:

—

CREATE SQL TRANSLATION PROFILE

権限を付与したスキーマ内でのSQL翻訳プロファイルの作成。

CREATE ANY SQL TRANSLATION PROFILE

SYSを除く任意のスキーマ内でのSQL翻訳プロファイルの作成。

ALTER ANY SQL TRANSLATION PROFILE

SYSを除く任意のスキーマに含まれるSQL翻訳プロファイルのトランスレータ、カスタムSQL文の翻訳、またはカスタム・エラーの翻訳の変更。

USE ANY SQL TRANSLATION PROFILE

SYSを除く任意のスキーマ内でのSQL翻訳プロファイルの使用。

DROP ANY SQL TRANSLATION PROFILE

SYSを除く任意のスキーマ内でのSQL翻訳プロファイルの削除。

TRANSLATE ANY SQL

権限受領者のSQL翻訳プロファイル使用した任意のユーザー用のSQLの変換。

シノニム:

注意: CREATE PUBLIC SYNONYMおよびDROP PUBLIC SYNONYMは、非常に強力な権限であり、信頼できるユーザーにのみ付与する必要があります。これらの権限を付与する前に、『Oracle Databaseセキュリティ・ガイド』を参照してください。

CREATE SYNONYM

権限を付与したスキーマ内でのシノニムの作成。

CREATE ANY SYNONYM

SYSを除く任意のスキーマ内でのプライベート・シノニムの作成。

CREATE PUBLIC SYNONYM

パブリック・シノニムの作成。

DROP ANY SYNONYM

SYSを除く任意のスキーマ内でのプライベート・シノニムの削除。

DROP PUBLIC SYNONYM

パブリック・シノニムの削除。

表:

注意: 外部表の場合、有効な権限は、CREATE ANY TABLE、ALTER ANY TABLE、DROP ANY TABLE、READ ANY TABLEおよびSELECT ANY TABLEです。

CREATE TABLE

権限を付与したスキーマ内での表の作成。

CREATE ANY TABLE

SYSを除く任意のスキーマ内での表の作成。なお、表が設定されるスキーマの所有者は、表領域内にその表を定義するための割当て制限が必要です。

ALTER ANY TABLE

SYSを除く任意のスキーマ内での表またはビューの変更。

BACKUP ANY TABLE

エクスポート・ユーティリティを使用したSYSを除く他のユーザーのスキーマからのオブジェクトの増分エクスポート。

DELETE ANY TABLE

SYSを除く任意のスキーマ内での表、表パーティションまたはビューからの行の削除。

DROP ANY TABLE

SYSを除く任意のスキーマ内での表または表パーティションの削除または切捨て。

INSERT ANY TABLE

SYSを除く任意のスキーマ内の表またはビューへの行の挿入。

LOCK ANY TABLE

SYSを除く任意のスキーマ内の表またはビューのロック。

READ ANY TABLE

SYSを除く任意のスキーマ内の表、ビューまたはマテリアライズド・ビューの問合せ。

注意: この権限は、Oracle Database 12cリリース1(12.1.0.2)以上で使用できます。

SELECT ANY TABLE

SYSを除く任意のスキーマ内の表、ビューまたはマテリアライズド・ビューの問合せ。SELECT ... FOR UPDATEを使用して、行ロックを取得します。

FLASHBACK ANY TABLE

SYSを除く任意のスキーマ内の任意の表、ビューまたはマテリアライズド・ビューでのSQLフラッシュバック問合せの発行。この権限は、DBMS_FLASHBACKプロシージャの実行には不要です。

UPDATE ANY TABLE

SYSを除く任意のスキーマ内の表またはビューの行の更新。

表領域:

—

CREATE TABLESPACE

表領域の作成。

ALTER TABLESPACE

表領域の変更。

DROP TABLESPACE

表領域の削除。

MANAGE TABLESPACE

表領域のオンラインとオフラインの切替え、および表領域のバックアップの開始と終了の制御。

UNLIMITED TABLESPACE

任意の表領域の無制限な使用。この権限は、設定されている任意の割当て制限を上書きします。ユーザーからこの権限を取り消した場合、ユーザーのスキーマ・オブジェクトはそのまま残りますが、表領域の割当て制限が許可されないかぎり、それ以上表領域を割り当てることはできません。このシステム権限をロールに付与することはできません。

トリガー:

—

CREATE TRIGGER

権限を付与したスキーマ内でのデータベース・トリガーの作成。

CREATE ANY TRIGGER

SYSを除く任意のスキーマ内でのデータベース・トリガーの作成。

ALTER ANY TRIGGER

SYSを除く任意のスキーマ内でのデータベース・トリガーの有効化、無効化またはコンパイル。

DROP ANY TRIGGER

SYSを除く任意のスキーマ内でのデータベース・トリガーの削除。

ADMINISTER DATABASE TRIGGER

DATABASEに対するトリガーの作成。CREATE TRIGGERまたはCREATE ANY TRIGGERシステム権限も必要です。

型:

—

CREATE TYPE

権限を付与したスキーマ内でのオブジェクト型およびオブジェクト型本体の作成。

CREATE ANY TYPE

SYSを除く任意のスキーマ内でのオブジェクト型およびオブジェクト型本体の作成。

ALTER ANY TYPE

SYSを除く任意のスキーマ内でのオブジェクト型の変更。

DROP ANY TYPE

SYSを除く任意のスキーマ内でのオブジェクト型およびオブジェクト型本体の削除。

EXECUTE ANY TYPE

特定のユーザーに付与した場合、SYSを除く任意のスキーマ内でのオブジェクト型およびコレクション型の使用と参照、およびSYSを除く任意のスキーマ内のオブジェクト型メソッドの起動。EXECUTE ANY TYPEをロールに付与した場合、使用可能なロールを保持したユーザーは、任意のスキーマ内のオブジェクト型メソッドを起動できません。

UNDER ANY TYPE

非最終オブジェクト型のサブタイプの作成。

ユーザー:

—

CREATE USER

ユーザーの作成。この権限によって、次の操作を実行できます。

- 任意の表領域に対する割当て制限の設定。

- デフォルトの表領域および一時表領域の設定。

- CREATE USER文の一部としてのプロファイルの設定。

ALTER USER

任意のユーザーの変更。この権限によって、次の操作を実行できます。

- 他のユーザーのパスワードまたは認証方法の変更。

- 任意の表領域に対する割当て制限の設定。

- デフォルトの表領域および一時表領域の設定。

- プロファイルおよびデフォルト・ロールの設定。

DROP USER

ユーザーの削除。

ビュー:

—

CREATE VIEW

権限を付与したスキーマ内でのビューの作成。

CREATE ANY VIEW

SYSを除く任意のスキーマ内でのビューの作成。

DROP ANY VIEW

SYSを除く任意のスキーマ内でのビューの削除。

UNDER ANY VIEW

オブジェクト・ビューのサブビューの作成。

FLASHBACK ANY TABLE

SYSを除く任意のスキーマ内の任意の表、ビューまたはマテリアライズド・ビューでのSQLフラッシュバック問合せの発行。この権限は、DBMS_FLASHBACKプロシージャの実行には不要です。

MERGE ANY VIEW

MERGE ANY VIEW権限が付与されている場合、そのユーザーが発行するすべての問合せにおいて、オプティマイザはビューのマージを使用して問合せのパフォーマンスを向上することができます。このとき、ビューのマージがビュー作成者のセキュリティ意図に違反しないかどうかは確認されません。OPTIMIZER_SECURE_VIEW_MERGINGパラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。ビューのマージの詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。

その他:

—

ANALYZE ANY

SYSを除く任意のスキーマ内の表、クラスタまたは索引の分析。

AUDIT ANY

AUDIT schema_objects文を使用した、SYSを除く任意のスキーマ内のオブジェクトの監査。

BECOME USER

データ・ポンプ・インポート・ユーティリティ(impdp)および元のインポート・ユーティリティ(imp)のユーザーは、第三者が直接実行できない操作(オブジェクト権限を付与するようなオブジェクトのロード)を実行する場合には、別のユーザー・アイデンティティを引き受けることができます。

Streams管理者は、取得ユーザーおよび適用ユーザーの作成または変更を1つのStreams環境で行うことができます。この権限は、デフォルトではDBAロールに含まれています。Database Vaultでは、この権限はDBAロールから除外されます。したがって、Streamsでこの権限が必要とされるのは、Database Vaultがインストールされている環境でのみです。

CHANGE NOTIFICATION

問合せの登録の作成と、登録された問合せに関連付けられたオブジェクトに対するDMLまたはDDL変更があったときのデータベース変更通知の受信。データベース変更通知の詳細は、『Oracle Database開発ガイド』を参照してください。

COMMENT ANY TABLE

SYSを除く任意のスキーマ内の表、ビューまたは列についてのコメントの記述。

EXEMPT ACCESS POLICY

ファイングレイン・アクセス・コントロールの回避。

注意: 強力なシステム権限で、権限受領者がアプリケーション駆動のセキュリティ・ポリシーを回避できます。データベース管理者がこの権限を付与する場合は、注意が必要です。

FORCE ANY TRANSACTION

ローカル・データベース内の、インダウト分散トランザクションのコミットまたはロールバック。

分散トランザクション・エラーの意図的な発生。

FORCE TRANSACTION

ローカル・データベース内の、インダウト分散トランザクションのコミットまたはロールバック。

GRANT ANY OBJECT PRIVILEGE

オブジェクト所有者が付与を許されている任意のオブジェクト権限の付与。

GRANT ANY OBJECT PRIVILEGE権限を持つオブジェクト所有者または他のユーザーによって付与されたオブジェクト権限の取消し。

GRANT ANY PRIVILEGE

任意のシステム権限の付与。

INHERIT ANY PRIVILEGES

実行者の権限を持つ権限受領者が所有する実行者権限プロシージャの実行。

KEEP DATE TIME

権限受領者がアプリケーションを実行している場合、SYSDATEファンクションおよびSYSTIMESTAMPファンクションは、アプリケーション・コンティニュイティのための再生中に元の値を戻します。この権限は、リカバリ可能なエラー後にバインド変数の一貫性を保持するために役立ちます。

注意: この権限が要求の実行時またはフェイルオーバーの間に付与または取消しされると、その要求に対するアプリケーション・コンティニュイティのための再実行中に元の値が戻されなくなります。

KEEP SYSGUID

権限受領者がアプリケーションを実行している場合、SYS_GUIDファンクションは、アプリケーション・コンティニュイティのための再実行中に元の値を戻します。この権限は、リカバリ可能なエラー後にバインド変数の一貫性を保持するために役立ちます。

注意: この権限が要求の実行時またはフェイルオーバーの間に付与または取消しされると、その要求に対するアプリケーション・コンティニュイティのための再実行中に元の値が戻されなくなります。

PURGE DBA_RECYCLEBIN

システム全体のごみ箱からのすべてのオブジェクトの削除。

RESUMABLE

再開可能な領域割当ての使用可能化。

SELECT ANY DICTIONARY

SYS内の任意のデータ・ディクショナリ・オブジェクトの問合せ。ただし、DEFAULT_PWD$、ENC$、LINK$、USER$、USER_HISTORY$、およびXS$VERIFIERSオブジェクトを除きます。

初期化パラメータO7_DICTIONARY_ACCESSIBILITYのデフォルトのFALSE設定を選択的に上書きします。

SELECT ANY TRANSACTION

FLASHBACK_TRANSACTION_QUERYビューの内容の問合せ。

注意: 強力なシステム権限で、権限受領者が、過去のデータも含めてデータベース内のすべてのデータを参照できます。この権限は、Oracleフラッシュバック・トランザクション問合せ機能を使用する必要があるユーザーのみに付与してください。

SYSBACKUP

次のバックアップ操作およびリカバリ操作の実行

STARTUPおよびSHUTDOWN。

CREATE CONTROLFILE。

CREATE PFILEおよびCREATE SPFILE。

FLASHBACK DATABASE。

リストア・ポイント(保証付きリストア・ポイントを含む)の作成、使用、表示、および削除。

DBMS_DATAPUMP、DBMS_PIPE、DBMS_TDB、およびDBMS_TTSパッケージ内のプロシージャの実行。

X$の表、V$のビュー、およびGV$のビューに対するSELECT。

ALTER DATABASE、ALTER SESSION、ALTER SYSTEM、ALTER TABLESPACE、CREATE ANY CLUSTER、CREATE ANY DIRECTORY、CREATE ANY TABLE、CREATE SESSION、DROP DATABASE、DROP TABLESPACE、RESUMABLE、SELECT ANY DICTIONARY、SELECT ANY TRANSACTION、UNLIMITED TABLESPACE権限およびSELECT_CATALOG_ROLEロールを含みます。

SYSDBA

STARTUPおよびSHUTDOWN。

ALTER DATABASE(オープン、マウント、バックアップまたはキャラクタ・セットの変更)。

CREATE DATABASE。

DROP DATABASE。

ARCHIVELOGおよびRECOVERY。

CREATE SPFILE。

RESTRICTED SESSION権限を含みます。

SYSDG

次のOracle Data Guard操作の実行

STARTUPおよびSHUTDOWN。

FLASHBACK DATABASE。

リストア・ポイント(保証付きリストア・ポイントを含む)の作成、使用、表示、および削除。

X$の表、V$のビュー、およびGV$のビューに対するSELECT。

ALTER DATABASE、ALTER SESSION、ALTER SYSTEM、CREATE SESSION、およびSELECT ANY DICTIONARY権限を含みます。

SYSKM

次の暗号化キー管理操作の実行

データベースへの接続(データベースがオープンされていない場合でも)。

データベースがオープンされている場合は、V$CLIENT_SECRETS、V$ENCRYPTED_TABLESPACES、V$ENCRYPTION_KEYS、V$ENCRYPTION_WALLETおよびV$WALLETビューに対するSELECT。

ADMINISTER KEY MANAGEMENTおよびCREATE SESSION権限を含みます。

SYSOPER

STARTUP操作およびSHUTDOWN操作。

ALTER DATABASE(オープン、マウントまたはバックアップ)。

ARCHIVELOGおよびRECOVERY。

CREATE SPFILE。

RESTRICTED SESSION権限を含みます。

表18-2 オブジェクト権限(操作対象のデータベース・オブジェクト別)

オブジェクト権限名

許可される操作

DIRECTORY PRIVILEGES

次のディレクトリ権限では、ディレクトリ・オブジェクトをポインタとして使用することにより、オペレーティング・システムのディレクトリに格納されている各ファイルにデータベースから安全にアクセスできるようになります。このディレクトリ・オブジェクトには、ファイルが格納されているオペレーティング・システムのディレクトリへのフルパス名が定義されています。これらのファイルは実際にはデータベース外に格納されているため、Oracle Databaseサーバーの各プロセスは、ファイル・システム・サーバーに対して適切なファイル・アクセス権も持っている必要があります。オペレーティング・システムに対するオブジェクト権限ではなく、ディレクトリ・データベース・オブジェクトに対するオブジェクト権限を個々のデータベース・ユーザーに付与することによって、データベースでファイル運用時のセキュリティが確保されます。

READ

ディレクトリ内のファイルの読取り。

WRITE

ディレクトリ内へのファイルの書込み。この権限は、外部表に接続する場合のみに役立ちます。これによって、権限受領者は、外部表のエージェントがディレクトリに書き込めるのがログ・ファイルなのか不良ファイルなのかを判断できます。

制限事項: この権限を持っていても、BFILEへの書込みを行うことはできません。

EXECUTE

ディレクトリ内に存在するプリプロセッサ・プログラムの実行。プリプロセッサ・プログラムは、ORACLE_LOADERアクセス・ドライバによって外部表からデータ・レコードをロードするときに、サポートされている形式にデータを変換します。詳細は、『Oracle Databaseユーティリティ』を参照してください。この権限は、外部表データへのREADアクセスを暗黙的に許可しません。

エディション権限

次のエディション権限は、エディションの使用を許可します。

USE

エディションの使用。

索引タイプ権限

次の索引タイプ権限は、索引タイプの操作を許可します。

EXECUTE

索引タイプの参照。

フラッシュバック・データ・アーカイブ権限

次のフラッシュバック・データ・アーカイブ権限では、フラッシュバック・データ・アーカイブに対する操作を許可します。

FLASHBACK ARCHIVE

表の履歴追跡を使用可能または使用禁止にします。

ライブラリ権限

次のライブラリ権限は、ライブラリの操作を許可します。

EXECUTE

特定のオブジェクトの使用と参照、およびそのメソッドの起動。

注意: この権限は非常に強力であるため、信頼できるユーザーにのみ付与してください。この権限を付与する前に、『Oracle Databaseセキュリティ・ガイド』を参照してください。

マテリアライズド・ビュー権限

次のマテリアライズド・ビュー権限は、マテリアライズド・ビューについての操作を許可します。DELETE、INSERTおよびUPDATE権限は、更新可能なマテリアライズド・ビューにのみ付与できます。

ON COMMIT REFRESH

指定した表に対するREFRESH ON COMMITモードのマテリアライズド・ビューの作成。

QUERY REWRITE

指定した表で使用するクエリー・リライトに対するマテリアライズド・ビューの作成。

READ

マテリアライズド・ビューを問い合せます。

注意: この権限は、Oracle Database 12cリリース1(12.1.0.2)以上で使用できます。

SELECT

マテリアライズド・ビューを問い合せます。SELECT ... FOR UPDATEまたはLOCK TABLE文を使用して、行ロックを取得します。

マイニング・モデル権限

次のマイニング・モデル権限では、マイニング・モデルに対する操作を許可します。これらの権限は、ユーザー自身のスキーマ内にあるモデルに対しては必要ありません。

ALTER

該当するDBMS_DATA_MININGプロシージャを使用して、マイニング・モデル名または関連のコスト・マトリックスを変更します。

SELECT

マイニング・モデルのスコアリングまたは表示。スコアリングの実行には、SQLファンクションのPREDICTIONファミリ、またはDBMS_DATA_MINING.APPLYプロシージャを使用します。モデルの表示は、DBMS_DATA_MINING.GET_MODEL_DETAILS_*プロシージャで実行されます。

オブジェクト型権限

次のオブジェクト型権限は、データベース・オブジェクト型の操作を許可します。

DEBUG

オブジェクト型に定義されたすべてのパブリック変数、非パブリック変数、メソッドおよび型へのデバッガを介したアクセス。

型本体内の行または指示境界へのブレークポイントの設定、またはこれらの場所のいずれかでの停止。

EXECUTE

特定のオブジェクトの使用と参照、およびそのメソッドの起動。

オブジェクト型に定義されたパブリック変数、型およびメソッドへのデバッガを介したアクセス。

UNDER

型のサブタイプの作成。この型の直属のスーパータイプにWITH GRANT OPTION付きのUNDER ANY TYPE権限を持つ場合のみ、このオブジェクト権限を付与できます。

OLAP権限

Oracle DatabaseをOLAPオプションで使用している場合は、次のオブジェクト権限が有効になります。

INSERT

メンバーをOLAPキューブ・ディメンションに挿入するか、またはメジャーをメジャー・フォルダに挿入します。

ALTER

OLAPキューブ・ディメンションまたはキューブの定義を変更します。

DELETE

メンバーをOLAPキューブ・ディメンションから削除するか、またはメジャーをメジャー・フォルダから削除します。

SELECT

OLAPキューブまたはキューブ・ディメンションを表示または問い合せます。

UPDATE

OLAPキューブのメジャー値またはキューブ・ディメンションの属性値を更新します。

演算子権限

次の演算子権限は、ユーザー定義演算子の操作を許可します。

EXECUTE

演算子の参照。

プロシージャ、ファンクション、パッケージ権限

次のプロシージャ、ファンクションおよびパッケージ権限は、プロシージャ、ファンクションおよびパッケージの操作を許可します。これらの権限は、Javaソース、クラスおよびリソースにも適用されます。Oracle Databaseでは、これらはオブジェクト権限の付与のために生成されたプロシージャとして扱われます。

DEBUG

オブジェクトに定義されたすべてのパブリック変数、非パブリック変数、メソッドおよび型へのデバッガを介したアクセス。

プロシージャ、ファンクションまたはパッケージ内の行または指示境界へのブレークポイントの設定、またはこれらの場所のいずれかでの停止。この権限は、メソッドまたはパッケージの仕様部および本体の宣言にアクセスする権限を付与します。

EXECUTE

プロシージャかファンクションの直接実行、パッケージの仕様部に宣言された任意のプログラム・オブジェクトへのアクセス、または現在無効であるかコンパイルされていないファンクションかプロシージャへのコール中の暗黙的なオブジェクトのコンパイル。この権限を持っていても、ALTER PROCEDUREまたはALTER FUNCTIONを使用して明示的なコンパイルを実行することはできません。明示的なコンパイルを実行するには、適切なALTER SYSTEM権限が必要です。

プロシージャ、ファンクションまたはパッケージに定義されたパブリック変数、型およびメソッドへのデバッガを介したアクセス。この権限は、メソッドまたはパッケージの仕様部のみの宣言にアクセスする権限を付与します。

ジョブ・スケジューラ・オブジェクトは、DBMS_SCHEDULERパッケージを使用して作成します。作成したオブジェクトに、ジョブ・スケジューラのクラスおよびプログラムに対するEXECUTEオブジェクト権限を付与できます。ジョブ・スケジューラのジョブ、プログラムおよびスケジュールに対してもALTER権限を付与できます。

注意: プロシージャ、ファンクションまたはパッケージを間接的に実行する場合、ユーザーはこの権限を持つ必要はありません。

スケジューラ権限

ジョブ・スケジューラ・オブジェクトは、DBMS_SCHEDULERパッケージを使用して作成します。これらのオブジェクトを作成した後で、次の権限を付与できます。

EXECUTE

ジョブ・クラス、プログラム、チェーンおよび資格証明に対する操作。

ALTER

ジョブ、プログラム、チェーン、資格証明およびスケジュールに対する変更。

順序権限

次の順序権限は、順序の操作を許可します。

ALTER

ALTER SEQUENCE文での順序定義の変更。

KEEP SEQUENCE

権限受領者がアプリケーションを実行している場合、順序疑似列NEXTVALは、アプリケーション・コンティニュイティのための再実行中に元の値を保持します。この権限は、リカバリ可能なエラーの後で再実行するときに、バインド変数の一貫性を確保するために役立ちます。

この権限が要求の実行時およびフェイルオーバーの間に付与または取消しされると、その要求に対するアプリケーション・コンティニュイティのための再実行中に、NEXTVALの元の値は保持されなくなります。

注意: この権限は、GRANT ALL PRIVILEGES ON sequence文では付与されません。この権限を明示的に付与する必要があります。

注意: この権限はDBAロールの一部です。

SELECT

CURRVAL疑似列およびNEXTVAL疑似列を使用した順序の値の検査および増分。

SQL翻訳プロファイル権限

次のSQL翻訳プロファイルの権限は、SQL翻訳プロファイルに対する操作を許可します。

ALTER

SQL翻訳プロファイルのトランスレータ、カスタムSQL文の翻訳、またはカスタム・エラーの翻訳の変更。

USE

SQL翻訳プロファイルの使用。

シノニム権限

シノニム権限は、対象となるオブジェクトに対して付与される権限と同じです。シノニムに権限を付与することは、基本オブジェクトに権限を付与することと同じです。同様に、基本オブジェクトに対して権限を付与することは、オブジェクトのすべてのシノニムに権限を付与することと同じです。あるユーザーにシノニムの権限を付与した場合、そのユーザーは、シノニム名または基本オブジェクト名をSQL文に指定して、その権限を使用できます。

表権限

次の表権限は、表の操作を許可します。READ権限を除く次のいずれかのオブジェクト権限を持っている場合は、LOCK TABLE文を使用して任意のロック・モードで表をロックできます。

注意: 外部表に有効なオブジェクト権限は、ALTER、READおよびSELECTのみです。

ALTER

ALTER TABLE文での表定義の変更。

DEBUG

デバッガを介した次のものへのアクセス。

- 表に定義されているトリガーの本体のPL/SQLコード

- 表を直接参照するSQL文に関する情報

DELETE

DELETE文での表の行の削除。

注意: 表がリモート・データベースにある場合は、DELETE権限とともに表に対するSELECT権限を付与する必要があります。

INDEX

CREATE INDEX文での表の索引の作成。

INSERT

INSERT文での表への新しい行の追加。

注意: 表がリモート・データベースにある場合は、INSERT権限とともに表に対するSELECT権限を付与する必要があります。

READ

SELECT文での表の問合せ。SELECT ... FOR UPDATEを許可しません。

注意: この権限は、Oracle Database 12cリリース1(12.1.0.2)以上で使用できます。

REFERENCES

表参照制約の作成。この権限はロールには付与できません。

SELECT

SELECT ... FOR UPDATEを含むSELECT文を使用して、表を問い合せます。

UPDATE

UPDATE文での表のデータの変更。

注意: 表がリモート・データベースにある場合は、UPDATE権限とともに表に対するSELECT権限を付与する必要があります。

ユーザー権限

次の権限はユーザーの操作を許可します。

INHERIT PRIVILEGES

実行者がこの権限を付与されたユーザーの場合、実行者の権限を持つ権限受領者が所有する実行者権限プロシージャの実行。

TRANSLATE SQL

権限受領者のSQL翻訳プロファイルを使用して、この権限が付与されたユーザー用にSQLを変換。

ビュー権限

次のビュー権限は、ビューの操作を許可します。READ権限を除く次のいずれかのオブジェクト権限を持っている場合は、LOCK TABLE文を使用して任意のロック・モードでビューをロックできます。

ビューの権限を付与する場合、そのビューのすべての実表に関してGRANT OPTION付きの権限が必要です。

DEBUG

デバッガを介した次のものへのアクセス。

- ビューに定義されているトリガーの本体のPL/SQLコード

- ビューを直接参照するSQL文に関する情報

DELETE

DELETE文でのビューの行の削除。

INSERT

INSERT文でのビューへの新しい行の追加。

MERGE VIEW

このオブジェクト権限の動作は、権限がON句で指定されたビューに制限される点を除き、MERGE ANY VIEWシステム権限の動作と同じです。指定されたビューに対して権限受領者が発行するすべての問合せに対して、オプティマイザはビューのマージを使用して問合せのパフォーマンスを向上させることができます。このとき、ビューのマージがビュー作成者のセキュリティ意図に違反しないかどうかは確認されません。

READ

SELECT文でのビューの問合せ。SELECT ... FOR UPDATEを許可しません。

注意: この権限は、Oracle Database 12cリリース1(12.1.0.2)以上で使用できます。

REFERENCES

ビューへの外部キー制約の定義。

SELECT

SELECT ... FOR UPDATEを含むSELECT文を使用して、ビューを問い合せます。

参照:  ビューに対するこのオブジェクト権限の付与の詳細は、「object_privilege」を参照してください。

UNDER

ビューのサブビューの作成。このビューの直属のスーパービューにWITH GRANT OPTION付きのUNDER ANY VIEW権限を持つ場合のみ、このオブジェクト権限を付与できます。

UPDATE

UPDATE文でのビューのデータの変更。

例

ユーザーに対してシステム権限を付与する例: 次の文は、サンプル・ユーザーhrにCREATE SESSIONシステム権限を付与し、hrがOracle Databaseにログインできるようにします。

GRANT CREATE SESSION
TO hr;

システム権限の付与時にユーザー・パスワードを割り当てる例: ユーザーhrは存在し、ユーザーnewuserは存在しないものとします。次の文は、ユーザーhrのパスワードをpassword1にリセットし、ユーザーnewuserをpassword2とともに作成し、両ユーザーにCREATE SESSIONシステム権限を付与します。

GRANT CREATE SESSION
TO hr, newuser IDENTIFIED BY password1, password2;

ロールに対してシステム権限を付与する例: 次の文は、データ・ウェアハウス管理者ロール(「ロールの作成例:」で作成)に、適切なシステム権限を付与します。

GRANT
CREATE ANY MATERIALIZED VIEW
, ALTER ANY MATERIALIZED VIEW
, DROP ANY MATERIALIZED VIEW
, QUERY REWRITE
, GLOBAL QUERY REWRITE
TO dw_manager
WITH ADMIN OPTION;

dw_managerの権限ドメインには、マテリアライズド・ビューに関連するシステム権限が含まれます。

ADMIN OPTION付きロールを付与する例: 次の文は、サンプル・ユーザーshにADMIN OPTION付きのdw_managerロールを付与します。

GRANT dw_manager
TO sh
WITH ADMIN OPTION;

dw_managerロールによって、shは次の操作を実行できます。

- ロールを使用可能にして、CREATE MATERIALIZED VIEWシステム権限を含むそのロールの権限ドメインに登録されている権限の使用

- 他のユーザーに対するそのロールの付与および取消し

- ロールの削除

- shスキーマ内のプログラム・ユニットのdw_managerロールを付与および取り消します。

DELEGATE OPTION付きロールを付与する例: 次の文は、サンプル・ユーザーshにDELEGATE OPTION付きのdw_managerロールを付与します。

GRANT dw_manager
TO sh
WITH DELEGATE OPTION;

ユーザーshは、shスキーマ内のプログラム・ユニットのdw_managerロールを付与および取り消すことができます。

ロールに対してオブジェクト権限を付与する例: 次の文は、データ・ウェアハウス・ユーザー・ロール(「ロールの作成例:」で作成)に、SELECTオブジェクト権限を付与します。

GRANT SELECT ON sh.sales TO warehouse_user;

ロールに対してロールを付与する例 次の文は、dw_managerロールにwarehouse_userロールを付与します。どちらのロールも、「ロールの作成例」で作成されたものです。

GRANT warehouse_user TO dw_manager;

dw_managerロールには、warehouse_userロールのドメインにあるすべての権限が含まれます。

ユーザーに対するオブジェクト権限の付与例: ユーザーshに対するINHERIT PRIVILEGESオブジェクト権限を、ユーザーhrに付与するには、次の文を発行します。

GRANT INHERIT PRIVILEGES ON USER sh TO hr;

ディレクトリへのオブジェクト権限を付与する例: 次の文は、ユーザーhrにディレクトリbfile_dirに対するREAD権限をGRANT OPTION付きで付与します。

GRANT READ ON DIRECTORY bfile_dir TO hr
WITH GRANT OPTION;

ユーザーに対して表へのオブジェクト権限を付与する例: 次の文は、ユーザーhrに対して、oe.bonuses表(「表へのマージ例:」で作成)についてのすべての権限をGRANT OPTION付きで付与します。

GRANT ALL ON bonuses TO hr
WITH GRANT OPTION;

この結果、hrユーザーは次の操作を実行できます。

- bonuses表に対するすべての権限の使用

- 他のユーザーまたはロールに対する、bonuses表についての権限の付与

ビューへのオブジェクト権限を付与する例: 次の文は、ビューemp_view(「ビューの作成例:」で作成)についてのSELECT権限およびUPDATE権限をすべてのユーザーに付与します。

GRANT SELECT, UPDATE
ON emp_view TO PUBLIC;

この結果、すべてのユーザーが、従業員の詳細についてのビューを問合せおよび更新できるようになります。

別のスキーマの順序に対してオブジェクト権限を付与する例: 次の文は、ユーザーhrに対して、スキーマoe内のcustomers_seq順序のSELECT権限を付与します。

GRANT SELECT
ON oe.customers_seq TO hr;

ユーザーhrは、次の文を指定して、順序の次の値を作成できるようになります。

SELECT oe.customers_seq.NEXTVAL
FROM DUAL;

別々の列に複数のオブジェクト権限を付与する例: 次の文は、ユーザーoeに、スキーマhrにあるemployees表のemployee_id列に対するREFERENCES権限、およびemployee_id、salary、commission_pct列に対するUPDATE権限を付与します。

GRANT REFERENCES (employee_id),
UPDATE (employee_id, salary, commission_pct)
ON hr.employees
TO oe;

この結果、ユーザーoeは、employee_id列、salary列およびcommission_pct列の値を更新できるようになります。ユーザーoeは、employee_id列を参照する参照整合性制約を定義することもできます。ただし、GRANT文にはこれらの列のみが指定されているため、ユーザーoeはemployees表の他の列を操作できません。

たとえば、oeは制約付きの表を作成できます。

CREATE TABLE dependent
(dependno   NUMBER,
dependname VARCHAR2(10),
employee   NUMBER
CONSTRAINT in_emp REFERENCES hr.employees(employee_id) );

スキーマhr内のemployees表の従業員に対応するdependent表の依存性が、制約in_empによって保証されます。

INSERT

用途

INSERT文を使用すると、表、ビューの実表、パーティション表のパーティション、コンポジット・パーティション表のサブパーティション、オブジェクト表またはオブジェクト・ビューの実表に、行を追加できます。

追加トピック

- 前提条件

- 構文

- セマンティクス

- 例

前提条件

表に行を挿入する場合は、その表が自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、その表に対するINSERTオブジェクト権限が必要です。

ビューの実表に行を挿入する場合、ビューが定義されているスキーマの所有者には、その実表に対するINSERTオブジェクト権限が必要です。また、他のユーザーのスキーマ内のビューに行を挿入する場合は、そのビューに対するINSERTオブジェクト権限が必要です。

INSERT ANY TABLEシステム権限があれば、任意の表または任意のビューの実表に行を挿入できます。

表がリモート・データベースにある場合は、行を挿入する表に対するREADまたはSELECTオブジェクト権限も必要です。

従来型INSERTおよびダイレクト・パスINSERT

表、パーティションまたはビューにデータを挿入するために使用するINSERT文には、従来型INSERTおよびダイレクト・パスINSERTの2種類があります。従来型INSERT文を発行すると、表の空き領域を再利用して挿入され、参照整合性制約が維持されます。ダイレクト・パスINSERTの場合、表の既存データの後に、挿入したデータが追加されます。データは、バッファ・キャッシュを回避してデータファイルに直接書き込まれます。既存データの空き領域は再利用されません。この代替手法を使用すると、挿入操作中のパフォーマンスが向上します。また、これは、Oracleのダイレクト・パス・ローダー・ユーティリティであるSQL*Loaderの機能に似ています。パラレル・モードで作成された表に挿入する場合は、ダイレクト・パスINSERTがデフォルトです。

データベースでのREDOデータおよびUNDOデータの生成方法は、従来型とダイレクト・パスINSERTのいずれを使用しているかに一部関係しています。

- 従来型INSERTでは、表とアーカイブ・ログのロギング設定に関係なく、データとメタデータの両方に対する変更に対して常に最大のREDOおよびUNDOが生成され、データベースのロギング設定が強制的に使用されます。

- ダイレクト・パスINSERTでは、メタデータの変更に対してREDOとUNDOの両方が生成されます。これらは操作のリカバリに必要であるためです。データの変更に大してはUNDOとREDOが次のように生成されます。

- ダイレクト・パスINSERTでは、データの変更に対するUNDOの生成が常に回避されます。

- データベースがARCHIVELOGまたはFORCE LOGGINGモードでない場合は、表のロギング設定に関係なく、データの変更に対するREDOは生成されません。

- データベースがARCHIVELOGモード(ただしFORCE LOGGINGモードではない)の場合、ダイレクト・パスINSERTでは、LOGGING表のデータのREDOは生成されますが、NOLOGGING表のデータのREDOは生成されません。

- データベースがARCHIVELOGモードかつFORCE LOGGINGモードの場合、ダイレクト・パスSQLでは、LOGGING表とNOLOGGING表の両方のデータのREDOが生成されます。

ダイレクト・パスINSERTには、次の制限があります。これらの制限に違反する場合、他にエラーがないかぎりメッセージが戻されず、従来型INSERTがシリアルで実行されます。

- DML文の有無にかかわらず、1つのトランザクションで複数のダイレクト・パスINSERT文を使用できます。ただし、あるDML文が特定の表、パーティションまたは索引を変更した後は、トランザクションの他のDML文は表、パーティションまたは索引にアクセスできません。

- 同じ表、パーティションまたは索引にアクセスする問合せは、ダイレクト・パスINSERT文の前であれば許可されますが、後は許可されません。

- シリアルまたはパラレル文が、同じトランザクションからダイレクト・パスINSERTによって変更された表にアクセスしようとする場合、エラーが戻され、文が拒否されます。

- 対象となる表は、クラスタにはできません。

- 対象となる表は、オブジェクト型列を含むことはできません。

- 索引構成表(IOT)がマッピング表を含んでいる場合、またはマテリアライズド・ビューによって参照されている場合、その索引構成表に対してダイレクト・パスINSERTを使用することはできません。

- 索引構成表(IOT)の1つのパーティション、1つのパーティションのみを含むパーティション化されたIOT、またはパーティション化されていないIOTへのダイレクト・パスINSERTは、IOTがパラレル・モードで作成されている場合またはAPPENDヒントやAPPEND_VALUESヒントを指定した場合でも、シリアルで実行されます。ただし、パーティション化されたIOTへのダイレクト・パスINSERT操作は、拡張パーティション名が使用されず、IOTに複数のパーティションが含まれているかぎり、パラレル・モードで実行されます。

- ターゲット表には、トリガーおよび参照整合性制約を定義できない。

- 対象となる表は、レプリケートできません。

- ダイレクト・パスINSERT文を含むトランザクションは、分散できません。

ダイレクト・パス・インサートによって挿入したデータを、挿入した直後に問合せまたは変更することはできません。問合せまたは変更しようとすると、ORA-12838エラーが発生します。新しく挿入したデータの読取りまたは変更を試みる前に、COMMIT文を発行する必要があります。

関連項目:

- ダイレクト・パスINSERTの詳細は、『Oracle Database管理者ガイド』を参照してください。

- SQL*Loaderの詳細は、『Oracle Databaseユーティリティ』を参照してください。

- ダイレクト・パスINSERTを使用して空の表への挿入を行うときの統計収集の詳細は、『Oracle Database SQLチューニング・ガイド』を参照してください。

構文

insert::=

(single_table_insert ::=、multi_table_insert ::=を参照)

single_table_insert::=

(insert_into_clause ::=、values_clause ::=、returning_clause::=、subquery::=、error_logging_clause ::=を参照)

insert_into_clause::=

(DML_table_expression_clause::=を参照)

values_clause::=

returning_clause::=

multi_table_insert::=

(insert_into_clause ::=、values_clause ::=、conditional_insert_clause ::=、subquery::=、error_logging_clause ::=を参照)

conditional_insert_clause::=

(insert_into_clause ::=、values_clause ::=を参照)

DML_table_expression_clause::=

(partition_extension_clause::=、subquery::=(「SELECT」の項)、subquery_restriction_clause::=、table_collection_expression ::=を参照)

partition_extension_clause::=

subquery_restriction_clause::=

table_collection_expression ::=

error_logging_clause::=

セマンティクス

hint

文の実行計画を選択する場合に、オプティマイザに指示を与えるためのコメントを指定します。

マルチテーブル・インサートの場合、対象となる表に対してPARALLELヒントを指定すると、表がPARALLELの指定付きで作成または変更されていなくても、マルチテーブル・インサート文全体がパラレル化されます。PARALLELヒントを指定しない場合、対象となるすべての表がPARALLELの指定付きで作成または変更されていないかぎり、挿入操作はパラレル化されません。

関連項目:

- ヒントの構文および説明については、「ヒント」を参照してください。

- 「マルチテーブル・インサートの制限事項:」

single_table_insert

シングルテーブル・インサートの場合、明示的に値を指定する、または副問合せで値を検索することによって、表、ビューまたはマテリアライズド・ビューの1行に値を挿入します。

副問合せでflashback_query_clauseを使用すると、過去のデータをtableに挿入できます。この句の詳細は、「SELECT」の「flashback_query_clause」を参照してください。

シングルテーブル・インサートの制限事項: 副問合せで値を検索する場合、副問合せのSELECT構文のリストにはINSERT文の列リストと同じ数の列が含まれている必要があります。列リストを指定しない場合は、副問合せで表の各列の値を指定する必要があります。

関連項目:
「表への値の挿入例:」

insert_into_clause

INSERT INTO句を使用すると、データを挿入する対象となる表またはオブジェクトを指定できます。

DML_table_expression_clause

INTO DML_table_expression_clauseを使用すると、データを挿入するオブジェクトを指定できます。

schema 表、ビューまたはマテリアライズド・ビューが含まれているスキーマを指定します。schemaを指定しない場合、オブジェクトは自分のスキーマ内にあるとみなされます。

table | view | materialized_view | subquery 行を挿入する表またはオブジェクト表の名前、ビューまたはオブジェクト・ビューの名前、マテリアライズド・ビューの名前、あるいは副問合せから戻された列の名前を指定します。ビューまたはオブジェクト・ビューを指定した場合、そのビューの実表に行が挿入されます。

読取り専用マテリアライズド・ビューには行を挿入できません。書込み可能なマテリアライズド・ビューに行を挿入した場合、基礎となるコンテナ表にその行が挿入されます。ただし、その挿入操作は次のリフレッシュ操作によって上書きされます。マテリアライズド・ビュー・グループ内の更新可能なマテリアライズド・ビューに行を挿入した場合、対応する行もマスター表に挿入されます。

挿入される値がオブジェクト表に対するREFの場合、およびそのオブジェクト表に主キー・オブジェクト識別子がある場合、REFを挿入する列は、オブジェクト表に対する参照整合性制約またはSCOPE制約を持つREF列である必要があります。

tableまたはviewの実表に、1列以上のドメイン索引がある場合は、この文が適切な索引タイプの挿入ルーチンを実行します。

表に対してINSERT文を発行した場合、その表に対して定義されているINSERTトリガーが起動します。

関連項目:
これらのルーチンの詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。

DML_table_expression_clauseの制限事項: この句には、次の制限事項があります。

- tableまたはviewの実表に、IN_PROGRESSまたはFAILEDとマークされたドメイン索引がある場合は、この文は実行できません。

- 関係する索引パーティションがUNUSABLEとマークされている場合は、パーティションに挿入できません。

- DML_table_expression_clauseのsubqueryのORDER BY句に関して、順序付けは、挿入された行または表の各エクステント内のみに保証されています。既存の行に関連する新しい行の順序付けは保証されていません。

- WITH CHECK OPTIONを指定してビューを作成した場合、ビューを定義する問合せを満たす行のみビューに挿入されます。

- 単一の実表を使用してビューを作成した場合、行をビューに挿入し、returning_clauseを使用してその行の値を取り出せます。

- ビューを定義する問合せに次のいずれかの構造体が含まれる場合は、INSTEAD OFトリガーを使用する場合を除いて、そのビューに行を挿入できません。

集合演算子

DISTINCT演算子

集計ファンクションまたは分析ファンクション

GROUP BY、ORDER BY、MODEL、CONNECT BYまたはSTART WITH句

SELECT構文のリストにあるコレクション式

SELECT構文のリストにある副問合せ

WITH READ ONLYが指定された副問合せ

結合(一部の例外を除く。詳細は、『Oracle Database管理者ガイド』を参照してください。)

- UNUSABLEのマークが付いている索引、索引パーティションまたは索引サブパーティションを指定する場合、SKIP_UNUSABLE_INDEXESセッション・パラメータがTRUEに設定されていないかぎり、INSERT文は正常に実行されません。SKIP_UNUSABLE_INDEXESセッション・パラメータの詳細は、「ALTER SESSION」を参照してください。

partition_extension_clause 挿入先のtableまたはviewの実表内にあるパーティションまたはサブパーティションの名前またはパーティション・キー値を指定します。

挿入する行が特定のパーティションまたはサブパーティションにマップされない場合、エラーが戻されます。

ターゲットのパーティションおよびサブパーティションの制限事項: この句は、オブジェクト表またはオブジェクト・ビューでは無効です。

関連項目:
「パーティション表と索引の参照」

dblink  表またはビューが格納されているリモート・データベースへのデータベース・リンクの完全名または部分名を指定します。Oracle Databaseの分散機能を使用している場合にのみ、リモート表またはリモート・ビューに行を挿入できます。

dblinkを指定しない場合、その表またはビューはローカル・データベース内にあるとみなされます。

関連項目:

- データベース・リンクの参照方法の詳細は、「スキーマ・オブジェクトの構文およびSQL文の構成要素」および「リモート・データベース内のオブジェクトの参照」を参照してください。

- 「リモート・データベースへの挿入例:」

subquery_restriction_clause subquery_restriction_clauseを使用すると、次のいずれかの方法で副問合せを制限できます。

WITH READ ONLY WITH READ ONLYを指定すると、表またはビューを更新禁止にできます。

WITH CHECK OPTION WITH CHECK OPTIONを指定すると、副問合せに含まれない行を生成する表またはビューの変更を禁止できます。この句をDML文の副問合せ内で使用する場合、FROM句内の副問合せには指定できますが、WHERE句内の副問合せには指定できません。

CONSTRAINT constraint CHECK OPTION制約の名前を指定します。この識別子を省略した場合は、Oracleによって自動的にSYS_Cnという形式の制約名が割り当てられます(nはデータベース内で制約名を一意にするための整数)。

関連項目:
「WITH CHECK OPTION句の使用例:」

table_collection_expression

table_collection_expressionを使用すると、問合せおよびDML操作で、collection_expression値を表として扱うことができます。collection_expressionには、副問合せ、列、ファンクションまたはコレクション・コンストラクタのいずれかを指定できます。その形式にかかわらず、集合値(ネストした表型またはVARRAY型の値)を戻す必要があります。このようなコレクションの要素抽出プロセスをコレクション・ネスト解除といいます。

TABLEコレクション式を親表と結合する場合は、オプションのプラス(+)には大きな意味があります。+を指定すると、その2つの外部結合が作成され、コレクション式がNULLの場合でも、外部表の行が問合せで戻されるようになります。

注意:
以前のリリースのOracleでは、collection_expressionが副問合せの場合、table_collection_expressionをTHE subqueryと表現していました。現在、このような表現方法は非推奨になっています。

関連項目:
「表のコレクション例:」

t_alias

相関名を指定します。これは、文中で参照する表、ビュー、マテリアライズド・ビューまたは副問合せの別名です。

表の別名の制限事項: t_aliasは、マルチテーブル・インサートに指定できません。

column

表、ビューまたはマテリアライズド・ビューの列を指定します。挿入された行では、このリストにある各列にvalues_clauseまたは副問合せの値が代入されます。INVISIBLE列に値を割り当てる場合は、列をこのリストに含める必要があります。

このリストに1つ以上の列を指定しない場合、挿入された行の、指定しなかった列の値には、表の作成時または最終更新時に指定した列のデフォルト値が使用されます。指定しなかった列のいずれかにNOT NULL制約があり、デフォルト値がない場合、制約違反のエラーが発生してINSERT文がロールバックされます。列のデフォルト値の詳細は、「CREATE TABLE」を参照してください。

列リストを指定しない場合は、values_clauseまたは問合せに、表の列をすべて指定する必要があります。

values_clause

シングルテーブル・インサート操作の場合、表またはビューに挿入する値の行を指定します。なお、値は、列リスト内の各列についてvalues_clauseに指定する必要があります。列リストを指定しない場合、values_clauseまたは副問合せで、表の各列の値を指定する必要があります。

マルチテーブル・インサート操作の場合、values_clauseの各式は、副問合せのSELECT構文のリストによって戻される列を参照する必要があります。values_clauseを省略すると、副問合せのSELECT構文のリストによって挿入する値が決定されるため、insert_into_clauseに対応する列リストと同じ列数を含んでいる必要があります。insert_into_clauseで列リストを指定しない場合、対象となる表のすべての列に対する値を計算した行を指定する必要があります。

どちらの挿入操作の場合も、insert_into_clauseで列リストを指定すると、リストの各列に値の句または副問合せからの対応する値が割り当てられます。values_clauseの任意の値に対してDEFAULTを指定できます。表またはビューの対応する列に対してデフォルト値を指定すると、その値が挿入されます。対応する列に対してデフォルト値を指定しない場合、NULLが挿入されます。有効な式の構文の詳細は、「SQL式」および「SELECT」を参照してください。

挿入値の制限事項: この値には、次の制限事項があります。

- BFILEロケータをNULLに、またはディレクトリ名およびファイル名に初期化するまで、BFILE値を挿入できません。

関連項目:

- BFILE値の初期化の詳細およびBFILEへの挿入例については、「BFILENAME」を参照してください。

- BFILEロケータの初期化の詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。

- リスト・パーティション表に挿入する場合、1つのパーティションのpartition_key_valueリストに存在していないパーティション化キー列に値を挿入できません。

- ビューに挿入する場合は、DEFAULTを指定できません。

- RAW列に文字列リテラルを挿入する場合、後続の問合せ中にRAW列にある索引は使用されずに、全表スキャンが行われます。

関連項目:

- XMLType表への値の挿入の詳細は、「SQL文でのXMLの使用方法」を参照してください。

- 「置換可能な表および列への挿入例:」、「TO_LOBファンクションを使用した挿入例:」、「順序値の挿入例:」および「バインド変数を使用した挿入例:」を参照してください。

returning_clause

この句を使用すると、DML文に影響される行を取り出すことができます。この句は、表、マテリアライズド・ビュー、および単一の実表を持つビューに指定できます。

returning_clauseを指定したDML文を単一行に実行すると、影響された行、ROWID、および処理された行へのREFを使用している列式が取り出され、ホスト変数またはPL/SQL変数に格納されます。

returning_clauseを指定したDML文を複数行に実行すると、式の値、ROWIDおよび処理された行に関連するREFがバインド配列に格納されます。

expr exprリストの各項目は、適切な構文で表す必要があります。

INTO INTO句を指定すると、変更された行の値を、data_itemリストに指定する変数に格納できます。

data_item data_itemはそれぞれ、取り出したexpr値を格納するためのホスト変数またはPL/SQL変数です。

RETURNINGリストの各式については、INTOリストに、対応する型に互換性があるPL/SQL変数またはホスト変数を指定する必要があります。

制限事項: RETURNING句には、次の制限事項があります。

- exprに次の制限事項があります。

- UPDATE文およびDELETE文の場合、各exprは、単純式または単一セットの集計ファンクション式である必要があります。1つのreturning_clause内に単純式と単一セットの集計ファンクション式を混在させることはできません。INSERT文の場合、各exprは単純式である必要があります。INSERT文のRETURNING句では、集計ファンクションはサポートされていません。

- 単一セットの集計ファンクション式をDISTINCTキーワードに含めることはできません。

- exprのリストに主キー列または他のNOT NULL列が含まれている場合は、表にBEFORE UPDATEトリガーが定義されていると、UPDATE文の実行に失敗します。

- マルチテーブル・インサートではreturning_clauseを指定できません。

- パラレルDMLまたはリモート・オブジェクトにはこの句を使用できません。

- LONG型を取り出すことはできません。

- INSTEAD OFトリガーが定義されたビューに対して指定することはできません。

関連項目:
BULK COLLECT句を使用してコレクション変数に複数の値を戻す場合は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

multi_table_insert

マルチテーブル・インサートでは、副問合せの評価によって戻された行から導出され、計算された行が1つ以上の表に挿入されます。

副問合せのSELECT構文のリストでは、表の別名は定義されていません。そのため、SELECT構文のリストに依存する句では、表の別名は参照できません。たとえば、式内のオブジェクト列を参照しようとしても、表の別名は参照できません。表の別名とともに式を使用する場合は、列の別名を使用して式をSELECT構文のリストに挿入してから、マルチテーブル・インサートのVALUES句またはWHEN条件で列の別名を参照する必要があります。

ALL into_clause

ALLの後に複数のinsert_into_clausesを指定すると、無条件のマルチテーブル・インサートを実行できます。副問合せによって戻される各行に対して、各insert_into_clauseが1回実行されます。

conditional_insert_clause

conditional_insert_clauseを指定すると、条件付きのマルチテーブル・インサートを実行できます。各insert_into_clauseは、それに対応するWHEN条件によってフィルタ処理されます。この条件によって、insert_into_clauseが実行されるかどうかが決まります。WHEN条件の各式は、副問合せのSELECT構文のリストによって戻される列を参照する必要があります。1つのマルチテーブル・インサートには、最大127個のWHEN句を指定できます。

ALL ALL(デフォルト値)を指定すると、他のWHEN句の評価結果にかかわらず、各WHEN句が評価されます。条件が真と評価された各WHEN句に対して、対応するINTO句リストが実行されます。

FIRST FIRSTを指定すると、文で指定されている順序で各WHEN句が評価されます。真と評価された最初のWHEN句に対して、対応するINTO句が実行され、指定された行に対する後続のWHEN句はスキップされます。

ELSE句 指定された行に対して、WHEN句が真と評価されない場合、次のようになります。

- ELSE句を指定する場合、ELSE句に関連付けられたINTO句リストが実行されます。

- ELSE句を指定しない場合、その行に対して何も実行されません。

関連項目:
マルチテーブル・インサートの例

マルチテーブル・インサートの制限事項: マルチテーブル・インサートには、次の制限事項があります。

- 表のみにマルチテーブル・インサートが実行でき、ビューまたはマテリアライズド・ビューには実行できません。

- リモート表には、マルチテーブル・インサートを実行できません。

- マルチテーブル・インサートの実行時、TABLEコレクション式は指定できません。

- マルチテーブル・インサートは、対象となる表が索引構成されている場合、または対象となる表にビットマップ索引が定義されている場合は、パラレル化されません。

- プラン・スタビリティは、マルチテーブル・インサート文にはサポートされません。

- マルチテーブル・インサート文のどの部分にも順序を指定することはできません。マルチテーブル・インサートは、単一のSQL文とみなされます。したがって、NEXTVALを初めて参照するときに、その次の番号が生成された後、この番号と同じ番号が、この文の後続のすべての参照で戻されます。

subquery

表に挿入される行を戻す副問合せを指定します。副問合せによって、INSERT文の対象となる表を含む任意の表、ビューおよびマテリアライズド・ビューを参照できます。副問合せで選択された行が1行もない場合、表に行は挿入されません。

subqueryをTO_LOBファンクションと組み合せて、LONG列にある値を、同じ表の異なる列または別の表にあるLOB値に変換できます。

- ビュー内でLONG値を別の列のLOB値に移行する場合、実表内で移行を実行してからビューにLOB列を追加する必要があります。

- リモート表のLONG値をローカル表のLOB値に移行する場合、TO_LOBファンクションを使用してリモート表で移行を実行してから、INSERT ... subquery操作を実行して、リモート表からローカル表にLOB値をコピーする必要があります。

副問合せを使用する挿入の注意事項: 副問合せを使用した挿入には、次の注意事項があります。

- subqueryが、既存のマテリアライズド・ビューと部分的または完全に同じビューを戻す場合、subqueryに指定された1つ以上の表のかわりにマテリアライズド・ビューがクエリー・リライトに使用されることがあります。

関連項目:
マテリアライズド・ビューおよびクエリー・リライトの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

- subqueryがリモート・オブジェクトを参照する場合、参照がローカル・データベース上でオブジェクトにループバックしないかぎり、INSERTはパラレルで実行されます。ただし、DML_table_expression_clauseのsubqueryがリモート・オブジェクトを参照する場合は、INSERT操作はシリアルで実行されます。詳細は、「parallel_clause」を参照してください。

- subqueryにORDER BY句が含まれる場合、属性クラスタリング表のプロパティを使用して指定された行順序はオーバーライドされます。

関連項目:

- 「副問合せを持つ値の挿入例:」

- BFILEへの挿入例については、「BFILENAME」を参照してください。

- BFILEの初期化の詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。

- 有効な式の構文の詳細は、「SQL式」および「SELECT」を参照してください。

error_logging_clause

error_logging_clauseを使用すると、DMLエラーと、その影響を受ける行のログ列値を取得して、エラー・ロギング表に保存できます。

INTO table エラー・ロギング表の名前を指定します。この句を省略すると、DBMS_ERRLOGパッケージで生成されたデフォルトの名前が割り当てられます。エラー・ログ表のデフォルトの名前は、DML操作の対象となっている表の名前の最初の25文字を、ERR$_の後に加えたものです。

simple_expression 文のタグとして使用する値を指定します。エラー・ロギング表内のエラーは、この文で識別することになります。この式には、テキスト・リテラル、数値リテラル、一般のSQL式(バインド変数など)のいずれかを指定できます。テキスト・リテラルに変換する場合は、TO_CHAR(SYSDATE)のようなファンクション式も使用できます。

REJECT LIMIT この句を使用すると、記録するエラーの数の上限値を整数で指定できます。エラーの数がこの値を超えると、文が終了し、その文によって変更された内容がロールバックされます。この拒否の制限のデフォルトは0(ゼロ)です。パラレルDML操作の場合、拒否の制限はパラレル・サーバーごとに適用されます。

DMLエラー・ロギングの制限事項:

- 次の状態では、文の実行が失敗しロールバックは実行されますが、エラー・ロギング機能は起動されません。

- 遅延制約の違反。

- 一意制約違反または一意索引違反を発生する、ダイレクト・パスのINSERTまたはMERGE操作。

- 一意制約違反または一意索引違反を発生する、更新操作のUPDATEまたはMERGE。

- エラー・ロギング表では、LONG、LOBまたはオブジェクト型の列のエラーは追跡できません。ただし、DML操作を行う表に、これらの型の列を含めることができます。

- 対応するエラー・ロギング表を、未サポートの型の列を含めるために作成または修正する場合、その列の名前が、ターゲットのDML表の未サポートの列に対応していると、DML文が解析時にエラーになります。

- エラー・ロギング表に未サポートの列型が含まれない場合、エラー数が拒否の制限に達するまで、すべてのDMLエラーが記録されます。エラーが発生した行では、列の値とエラー・ロギング表の対応する列が、制御情報とともにログに記録されます。

関連項目:

- DBMS_ERRLOGパッケージのcreate_error_logプロシージャの使用方法は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。DMLエラー・ロギングに関する一般情報は、『Oracle Database管理者ガイド』を参照してください。

- 「エラー・ロギングによる表への挿入例:」

例

表への値の挿入例: 次の文は、サンプル表departmentsに行を挿入します。

INSERT INTO departments
VALUES (280, 'Recreation', 121, 1700);

manager_id列のデフォルト値が121としてdepartments表が作成された場合、次の文を発行できます。

INSERT INTO departments
VALUES (280, 'Recreation', DEFAULT, 1700);

次の文は、employees表に6つの列で構成される行を挿入します。NULLまたは科学表記の数値を設定されている列がそれぞれ1つ含まれています。

INSERT INTO employees (employee_id, last_name, email,
hire_date, job_id, salary, commission_pct)
VALUES (207, 'Gregory', 'pgregory@example.com',
sysdate, 'PU_CLERK', 1.2E3, NULL);

次の文は、前述の例と同じ結果を表しますが、DML_table_expression_clauseにある副問合せを使用します。

INSERT INTO
(SELECT employee_id, last_name, email, hire_date, job_id,
salary, commission_pct FROM employees)
VALUES (207, 'Gregory', 'pgregory@example.com',
sysdate, 'PU_CLERK', 1.2E3, NULL);

副問合せを持つ値の挿入例: 次の文は、歩合給が給与の25%を超える従業員をbonuses表(「表へのマージ例:」で作成)にコピーします。

INSERT INTO bonuses
SELECT employee_id, salary*1.1
FROM employees
WHERE commission_pct > 0.25;

エラー・ロギングによる表への挿入例: 次の文は、サンプル・スキーマhr内にraises表を作成し、DBMS_ERRLOGパッケージを使用してエラー・ロギング表を作成して、employees表のデータをraises表に移入します。raisesのチェック制約に違反する挿入操作があると、その行をerrlogで参照できます。発生したエラーが10を超えると、その文は異常終了し、挿入された内容はロールバックされます。

CREATE TABLE raises (emp_id NUMBER, sal NUMBER
CONSTRAINT check_sal CHECK(sal > 8000));

EXECUTE DBMS_ERRLOG.CREATE_ERROR_LOG('raises', 'errlog');

INSERT INTO raises
SELECT employee_id, salary*1.1 FROM employees
WHERE commission_pct > .2
LOG ERRORS INTO errlog ('my_bad') REJECT LIMIT 10;

SELECT ORA_ERR_MESG$, ORA_ERR_TAG$, emp_id, sal FROM errlog;

ORA_ERR_MESG$               ORA_ERR_TAG$         EMP_ID SAL
--------------------------- -------------------- ------ -------
ORA-02290: check constraint my_bad               161    7700
(HR.SYS_C004266) violated

リモート・データベースへの挿入例: 次の文は、データベース・リンクremoteがアクセスできるデータベース上の、ユーザーhrが所有するemployees表に行を挿入します。

INSERT INTO employees@remote
VALUES (8002, 'Juan', 'Fernandez', 'juanf@example.com', NULL,
TO_DATE('04-OCT-1992', 'DD-MON-YYYY'), 'SH_CLERK', 3000,
NULL, 121, 20);

順序値の挿入例: 次の文は、departments_seq順序の次の値を持つ行を、departments表に挿入します。

INSERT INTO departments
VALUES  (departments_seq.nextval, 'Entertainment', 162, 1400);

バインド変数を使用した挿入例: 次の文は、出力バインド変数bnd1およびbnd2に挿入された行の値を戻します。バインド変数は最初に宣言しておく必要があります。

INSERT INTO employees
(employee_id, last_name, email, hire_date, job_id, salary)
VALUES
(employees_seq.nextval, 'Doe', 'john.doe@example.com',
SYSDATE, 'SH_CLERK', 2400)
RETURNING salary*12, job_id INTO :bnd1, :bnd2;

置換可能な表および列への挿入例: 次の例は、persons表(「置換可能な表および列のサンプル:」で作成)に挿入します。最初の文は、ルート型person_tを使用します。2番目の挿入は、person_tのサブタイプemployee_tを使用し、3番目の挿入はemployee_tのサブタイプpart_time_emp_tを使用します。

INSERT INTO persons VALUES (person_t('Bob', 1234));
INSERT INTO persons VALUES (employee_t('Joe', 32456, 12, 100000));
INSERT INTO persons VALUES (
part_time_emp_t('Tim', 5678, 13, 1000, 20));

次の例は、books表(「置換可能な表および列のサンプル:」で作成)に挿入します。属性値の指定が、置換可能な表の例と同一であることに注意してください。

INSERT INTO books VALUES (
'An Autobiography', person_t('Bob', 1234));
INSERT INTO books VALUES (
'Business Rules', employee_t('Joe', 3456, 12, 10000));
INSERT INTO books VALUES (
'Mixing School and Work',
part_time_emp_t('Tim', 5678, 13, 1000, 20));

組込みファンクションおよび条件を使用して、置換可能な表および列からデータを抽出することができます。例は、「TREAT」、「SYS_TYPEID」および「IS OF type条件」を参照してください。

TO_LOBファンクションを使用した挿入例: 次の例は、LONGデータを次のlong_tab表にあるLOB列にコピーします。

CREATE TABLE long_tab (pic_id NUMBER, long_pics LONG RAW);

まず、LOBを持つ表を作成します。

CREATE TABLE lob_tab (pic_id NUMBER, lob_pics BLOB);

次に、INSERT ... SELECTを使用して、LONG列のすべての行にあるデータを、新しく作成したLOB列にコピーします。

INSERT INTO lob_tab
SELECT pic_id, TO_LOB(long_pics) FROM long_tab;

移行が問題なく終了したことを確認したら、long_pics表を削除できます。別の方法として、表が他の列を含む場合、次のように入力して表からLONG列を削除できます。

ALTER TABLE long_tab DROP COLUMN long_pics;

マルチテーブル・インサートの例: 次の例はマルチテーブル・インサートの構文を使用して、サンプル表sh.salesに、異なる構造の入力表からデータを挿入します。

注意:
例を簡潔に示すために表の列が無視されているため、sales表のNOT NULL制約は使用禁止になっています。

入力表は次のように構成されています。

SELECT * FROM sales_input_table;

PRODUCT_ID CUSTOMER_ID WEEKLY_ST  SALES_SUN  SALES_MON  SALES_TUE  SALES_WED SALES_THU  SALES_FRI  SALES_SAT
---------- ----------- --------- ---------- ---------- ---------- -------------------- ---------- ----------
111         222 01-OCT-00        100        200        300        400       500        600        700
222         333 08-OCT-00        200        300        400        500       600        700        800
333         444 15-OCT-00        300        400        500        600       700        800        900

マルチテーブル・インサートの文を次に示します。

INSERT ALL
INTO sales (prod_id, cust_id, time_id, amount)
VALUES (product_id, customer_id, weekly_start_date, sales_sun)
INTO sales (prod_id, cust_id, time_id, amount)
VALUES (product_id, customer_id, weekly_start_date+1, sales_mon)
INTO sales (prod_id, cust_id, time_id, amount)
VALUES (product_id, customer_id, weekly_start_date+2, sales_tue)
INTO sales (prod_id, cust_id, time_id, amount)
VALUES (product_id, customer_id, weekly_start_date+3, sales_wed)
INTO sales (prod_id, cust_id, time_id, amount)
VALUES (product_id, customer_id, weekly_start_date+4, sales_thu)
INTO sales (prod_id, cust_id, time_id, amount)
VALUES (product_id, customer_id, weekly_start_date+5, sales_fri)
INTO sales (prod_id, cust_id, time_id, amount)
VALUES (product_id, customer_id, weekly_start_date+6, sales_sat)
SELECT product_id, customer_id, weekly_start_date, sales_sun,
sales_mon, sales_tue, sales_wed, sales_thu, sales_fri, sales_sat
FROM sales_input_table;

sales表には次の行のみが存在するものとします。内容は次のとおりです。

SELECT * FROM sales
ORDER BY prod_id, cust_id, time_id;

PROD_ID    CUST_ID TIME_ID   C   PROMO_ID QUANTITY_SOLD     AMOUNT       COST
---------- ---------- --------- - ---------- ------------- ---------- ----------
111        222 01-OCT-00                                   100
111        222 02-OCT-00                                   200
111        222 03-OCT-00                                   300
111        222 04-OCT-00                                   400
111        222 05-OCT-00                                   500
111        222 06-OCT-00                                   600
111        222 07-OCT-00                                   700
222        333 08-OCT-00                                   200
222        333 09-OCT-00                                   300
222        333 10-OCT-00                                   400
222        333 11-OCT-00                                   500
222        333 12-OCT-00                                   600
222        333 13-OCT-00                                   700
222        333 14-OCT-00                                   800
333        444 15-OCT-00                                   300
333        444 16-OCT-00                                   400
333        444 17-OCT-00                                   500
333        444 18-OCT-00                                   600
333        444 19-OCT-00                                   700
333        444 20-OCT-00                                   800
333        444 21-OCT-00                                   900

次の例は、複数の表に挿入します。販売員に様々なサイズの注文に関する情報を提供するとします。小口、中口、大口および特別注文についての表を作成し、これらの表にサンプル表oe.ordersのデータを移入します。

CREATE TABLE small_orders
(order_id       NUMBER(12)   NOT NULL,
customer_id    NUMBER(6)    NOT NULL,
order_total    NUMBER(8,2),
sales_rep_id   NUMBER(6)
);

CREATE TABLE medium_orders AS SELECT * FROM small_orders;

CREATE TABLE large_orders AS SELECT * FROM small_orders;

CREATE TABLE special_orders
(order_id       NUMBER(12)    NOT NULL,
customer_id    NUMBER(6)     NOT NULL,
order_total    NUMBER(8,2),
sales_rep_id   NUMBER(6),
credit_limit   NUMBER(9,2),
cust_email     VARCHAR2(40)
);

最初のマルチテーブル・インサートでは、小口、中口および大口注文の表に対してのみ移入を行います。

INSERT ALL
WHEN order_total <= 100000 THEN
INTO small_orders
WHEN order_total > 1000000 AND order_total <= 200000 THEN
INTO medium_orders
WHEN order_total > 200000 THEN
INTO large_orders
SELECT order_id, order_total, sales_rep_id, customer_id
FROM orders;

large_orders表への挿入のかわりに、ELSE句を使用しても、同じ結果が得られます。

INSERT ALL
WHEN order_total <= 100000 THEN
INTO small_orders
WHEN order_total > 100000 AND order_total <= 200000 THEN
INTO medium_orders
ELSE
INTO large_orders
SELECT order_id, order_total, sales_rep_id, customer_id
FROM orders;

次の例は、前述の例と同様、小口、中口および大口注文の表に挿入し、件数が290,000を超える注文をspecial_orders表に挿入します。この表は、文を単純にするために列の別名を使用する方法も示しています。

INSERT ALL
WHEN ottl <= 100000 THEN
INTO small_orders
VALUES(oid, ottl, sid, cid)
WHEN ottl > 100000 and ottl <= 200000 THEN
INTO medium_orders
VALUES(oid, ottl, sid, cid)
WHEN ottl > 200000 THEN
into large_orders
VALUES(oid, ottl, sid, cid)
WHEN ottl > 290000 THEN
INTO special_orders
SELECT o.order_id oid, o.customer_id cid, o.order_total ottl,
o.sales_rep_id sid, c.credit_limit cl, c.cust_email cem
FROM orders o, customers c
WHERE o.customer_id = c.customer_id;

最後の例は、FIRST句を使用して、件数が290,000を超える注文をspecial_orders表に挿入し、これらの注文をlarge_orders表から削除します。

INSERT FIRST
WHEN ottl <= 100000 THEN
INTO small_orders
VALUES(oid, ottl, sid, cid)
WHEN ottl > 100000 and ottl <= 200000 THEN
INTO medium_orders
VALUES(oid, ottl, sid, cid)
WHEN ottl > 290000 THEN
INTO special_orders
WHEN ottl > 200000 THEN
INTO large_orders
VALUES(oid, ottl, sid, cid)
SELECT o.order_id oid, o.customer_id cid, o.order_total ottl,
o.sales_rep_id sid, c.credit_limit cl, c.cust_email cem
FROM orders o, customers c
WHERE o.customer_id = c.customer_id;

LOCK TABLE

用途

LOCK TABLE文を使用すると、1つ以上の表、表パーティションまたは表サブパーティションを特定のモードでロックできます。操作中の表またはビューに対する他のユーザーによるアクセスを許可または制限するため、自動ロックを手動で無効にします。

一部の形式のロックは、同じ表に同時に設定できます。それ以外のロックは、表ごとに1つしか設定できません。

ロックされた表は、トランザクションをコミットするか、全体をロールバックするか、または表をロックする前のセーブポイントにロールバックするまでロックされています。

ロックした場合でも他のユーザーが表を問い合せることができます。問合せによって表がロックされることはありません。読取りプログラムは書込みプログラムをブロックすることはなく、書込みプログラムが読取りプログラムをブロックすることもありません。

関連項目:

- ロック・モードの相互作用については、『Oracle Database概要』を参照してください。

- 「COMMIT」

- 「ROLLBACK」

- 「SAVEPOINT」

前提条件

表またはビューが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、LOCK ANY TABLEシステム権限、または表やビューに対するオブジェクト権限(READオブジェクト権限を除く)が必要です。

構文

lock_table::=

partition_extension_clause::=

セマンティクス

schema

表またはビューが含まれているスキーマを指定します。schemaを指定しない場合、表またはビューは自分のスキーマにあるとみなされます。

table / view

ロックする表またはビューの名前を指定します。

viewを指定した場合、ビューの実表がロックされます。

partition_extension_clauseを指定した場合、Oracle Databaseでは最初にその表が暗黙的にロックされます。表ロックは、パーティションまたはサブパーティションに指定するロックと同じです。ただし、次の2つの例外があります。

- SHAREロックをサブパーティションに指定した場合、表が暗黙的にROW SHAREロックされます。

- EXCLUSIVEロックをサブパーティションに指定した場合、表が暗黙的にROW EXCLUSIVEロックされます。

PARTITIONを指定し、tableがコンポジット・パーティション化されている場合、パーティションのすべてのサブパーティションがロックされます。

表のロックの制限事項: viewが階層の一部である場合、階層のルートである必要があります。

dblink

表またはビューが格納されている、Oracle Databaseのリモート・データベースに対するデータベース・リンクを指定します。Oracle分散機能を使用している場合のみ、リモート・データベースで表およびビューをロックできます。LOCK TABLE文を使用してロックする表は、すべて同じデータベース上にある必要があります。

dblinkを指定しない場合、その表またはビューはローカル・データベース内にあるとみなされます。

関連項目:
データベース・リンクの指定方法の詳細は、「リモート・データベース内のオブジェクトの参照」を参照してください。

lockmode句

次のいずれかのモードを指定します。

ROW SHARE ROW SHAREを指定すると、ロックされた表への同時アクセスは可能になりますが、排他アクセスのために表全体をロックできなくなります。ROW SHAREは、SHARE UPDATEと同じ意味で、以前のリリースのOracle Databaseとの互換性を保つために用意されています。

ROW EXCLUSIVE ROW EXCLUSIVEは、ROW SHAREと同じですが、SHAREモードでロックはできません。ROW EXCLUSIVEロックは、更新、挿入、削除の実行時に自動的に適用されます。

SHARE UPDATE  「ROW SHARE」を参照してください。

SHARE SHAREを指定すると、同時問合せは実行可能ですが、ロックされた表は更新できなくなります。

SHARE ROW EXCLUSIVE SHARE ROW EXCLUSIVEは、表全体を見る場合に使用します。これを使用すると他のユーザーがその表内の行を見ることはできますが、SHAREモードで表のロックまたは行の更新を行うことはできません。

EXCLUSIVE EXCLUSIVEを指定すると、ロックされた表上での問合せは実行可能ですが、他のアクティビティは実行できなくなります。

NOWAIT

NOWAITを指定すると、指定した表、パーティションまたは表のサブパーティションが他のユーザーによってすでにロックされている場合に、制御をすぐに戻すことができます。この場合、表、パーティションまたはサブパーティションが他のユーザーによってロックされていることを示すエラー・メッセージが戻ります。

WAIT

WAIT句を使用すると、LOCK TABLE文では、DMLロックを取得するまでに指定した時間(秒数)待機するように指定できます。integerの値に制限はありません。

NOWAITもWAITも指定しない場合には、表が利用可能になり、ロックされ、制御が戻されるまで、データベースは無限に待機します。データベースでDML文と同時にDDL文が実行されている場合、タイムアウトまたはデッドロックが発生することがあります。このようなタイムアウトまたはデッドロックが検出されると、エラーが戻されます。

関連項目:
表のロックの詳細は、『Oracle Database管理者ガイド』を参照してください。

例

表のロック例: 次の文は、employees表を排他モードでロックします。他のユーザーがすでに表をロックしている場合でも、待ち状態にはなりません。

LOCK TABLE employees
IN EXCLUSIVE MODE
NOWAIT;

次の文は、データベース・リンクremoteを介してアクセスできるリモート表employeesをロックします。

LOCK TABLE employees@remote
IN SHARE MODE;

MERGE

用途

MERGE文を使用すると、1つ以上のソースから行を選択し、表またはビューに対して更新および挿入できます。対象となる表またはビューに対して更新と挿入のどちらを実行するかを決定する条件を指定できます。

この文は、複数の操作を組み合せるときに便利です。DML文INSERT、UPDATEおよびDELETEを複数指定する必要がなくなります。

MERGEは、決定的な文です。対象となる表の同じ行を、同一のMERGE文で何度も更新することはできません。

注意:
Oracle Databaseの以前のリリースでは、MERGE INTO文を含むアプリケーションでOracle Virtual Private Databaseポリシーを作成すると、Virtual Private Databaseポリシーが存在するため、MERGE INTO文はORA-28132「MERGE INTO構文ではセキュリティ・ポリシーをサポートしていません」エラーにより回避されていました。Oracle Database 11gリリース2(11.2.0.2)以降では、MERGE INTO操作を含むアプリケーションでポリシーを作成できます。そのためには、DBMS_RLS.ADD_POLICY statement_typesパラメータにINSERT、UPDATEおよびDELETE文を含めるか、statement_typesパラメータを完全に省略します。特定のタイプのSQL文にポリシーを適用する方法の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

前提条件

対象となる表に対するINSERTオブジェクト権限とUPDATEオブジェクト権限、およびソース表に対するREADまたはSELECTオブジェクト権限が必要です。merge_update_clauseのDELETE句を指定するには、対象となる表に対するDELETEオブジェクト権限も必要です。

構文

merge::=

注意:
少なくともmerge_update_clauseまたはmerge_insert_clause句のどちらかを指定する必要があります。

(merge_update_clause ::=、merge_insert_clause ::=、error_logging_clause ::=を参照)

merge_update_clause::=

merge_insert_clause::=

where_clause::=

error_logging_clause::=

セマンティクス

INTO句

INTO句を使用すると、更新または挿入の対象となる表またはビューを指定できます。データをビューにマージする場合、そのビューは更新可能であることが必要です。詳細は、「更新可能なビューの注意事項:」を参照してください。

ターゲット・ビューの制限事項: INSTEAD OFトリガーが定義されたターゲット・ビューを指定することはできません。

USING句

USING句を使用すると、更新または挿入の対象となるデータのソースを指定できます。ソースには、表、ビューまたは副問合せの結果を指定できます。

ON句

ON句を使用すると、MERGEの更新操作または挿入操作の条件を指定できます。対象となる表の中で検索条件が真となる各行は、ソース表の対応するデータに基づいて行が更新されます。どの行も条件が真とならない場合、ソース表の対応する行に基づいて対象となる表に行が挿入されます。

ON句の制限事項:

Oracle Databaseの以前のリリースでは、MERGE INTO文を含むアプリケーションでOracle Virtual Private Databaseポリシーを作成すると、Virtual Private Databaseポリシーが存在するため、MERGE INTO文はORA-28132「MERGE INTO構文ではセキュリティ・ポリシーをサポートしていません」エラーにより回避されていました。Oracle Database 11gリリース2(11.2.0.2)以降では、MERGE INTO操作を含むアプリケーションでポリシーを作成できます。そのためには、DBMS_RLS.ADD_POLICY statement_typesパラメータにINSERT、UPDATEおよびDELETE文を含めるか、statement_typesパラメータを完全に省略します。特定のタイプのSQL文にポリシーを適用する方法の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

merge_update_clause

merge_update_clauseを指定すると、対象となる表の新しい列値を指定できます。ON句の条件が真となる場合、更新が実行されます。更新が実行されると、対象となる表に定義されているすべての更新トリガーがアクティブになります。

where_clauseを指定すると、指定した条件が真の場合のみに更新操作が実行されるようにできます。条件には、データソースまたは対象となる表を参照できます。条件が真ではない場合、行を表に挿入する際に更新操作がスキップされます。

DELETE where_clauseを指定すると、表の移入中または更新中にその表内のデータをクリーンアップできます。この句によって処理される行は、マージ操作によって更新される対象の表内の行のみです。DELETE WHERE条件は、更新後の値を評価し、UPDATE SET ... WHERE条件によって評価された元の値は評価しません。更新先の表の行がDELETE条件を満たし、ON句によって定義された結合に含まれていない場合、その行は削除されます。更新先の表に定義されている削除トリガーが起動し、各行が削除されます。

この句は、単独で、またはmerge_insert_clauseとともに指定できます。merge_insert_clauseとともに指定する場合は、どちらを先に指定してもかまいません。

merge_update_clauseの制限事項: この句には、次の制限事項があります。

- 参照する列は、ON condition句で更新できません。

- ビューを更新する場合は、DEFAULTを指定できません。

merge_insert_clause

merge_insert_clauseを指定すると、ON句の条件が偽となる場合に対象となる表の列に挿入する値を指定できます。挿入が実行されると、対象となる表に定義されているすべての挿入トリガーがアクティブになります。INSERTキーワードの後に列リストを指定しない場合、対象となる表内の列数は、VALUES句内の値の数と一致している必要があります。

すべてのソース行を表に挿入するには、ON句の条件に定数フィルタ条件を使用します。定数フィルタ条件の一例はON(0=1)です。Oracle Databaseはこのような条件を認識すると、すべてのソース行を無条件に表に挿入します。この方法は、merge_update_clauseを省略することとは異なります。merge_update_clauseを省略しても、結合は実行されます。定数フィルタ条件を設定すると、結合は実行されません。

where_clauseを指定すると、指定した条件が真の場合のみに更新操作が実行されるようにできます。条件には、データソース表のみを参照できます。条件が真ではないすべての行に対する挿入操作はスキップされます。

この句は、単独で、またはmerge_update_clauseとともに指定できます。merge_insert_clauseとともに指定する場合は、どちらを先に指定してもかまいません。

merge_insert_clauseの制限事項: ビューへの挿入時にはDEFAULTを指定できません。

error_logging_clause

error_logging_clauseのMERGE文での動作は、INSERT文の場合と同じです。詳細は、「INSERT」文の「error_logging_clause」を参照してください。

関連項目:
「エラー・ロギングによる表への挿入例:」

例

表へのマージ例 次の例では、oeサンプル・スキーマ内のbonuses表(ボーナスのデフォルトは100)を使用します。次に、oe.orders表のsales_rep_id列に基づいて、販売実績があったすべての従業員をbonuses表に挿入します。最終的に、人事部門マネージャが、給与が$8000以下の従業員にボーナスを支給することを決定します。販売実績がなかった従業員には、給与の1%がボーナスとして支給されます。販売実績があった従業員には、給与の1%がボーナスに加算されて支給されます。MERGE文は、これらの変更を1行で実装します。

CREATE TABLE bonuses (employee_id NUMBER, bonus NUMBER DEFAULT 100);

INSERT INTO bonuses(employee_id)
(SELECT e.employee_id FROM employees e, orders o
WHERE e.employee_id = o.sales_rep_id
GROUP BY e.employee_id);

SELECT * FROM bonuses ORDER BY employee_id;

EMPLOYEE_ID      BONUS
----------- ----------
153        100
154        100
155        100
156        100
158        100
159        100
160        100
161        100
163        100

MERGE INTO bonuses D
USING (SELECT employee_id, salary, department_id FROM employees
WHERE department_id = 80) S
ON (D.employee_id = S.employee_id)
WHEN MATCHED THEN UPDATE SET D.bonus = D.bonus + S.salary*.01
DELETE WHERE (S.salary > 8000)
WHEN NOT MATCHED THEN INSERT (D.employee_id, D.bonus)
VALUES (S.employee_id, S.salary*.01)
WHERE (S.salary <= 8000);

SELECT * FROM bonuses ORDER BY employee_id;

EMPLOYEE_ID      BONUS
----------- ----------
153        180
154        175
155        170
159        180
160        175
161        170
164         72
165         68
166         64
167         62
171         74
172         73
173         61
179         62

NOAUDIT (従来型監査)

この項では、従来型監査用のNOAUDIT文について説明します。これは、Oracle Database 12cより前のリリースで使用されているものと同じ監査機能です。

Oracle Database 12cから、高度な監査機能を完備した統合監査が導入されました。下位互換性を確保するために、従来型監査も引き続きサポートされています。ただし、既存の監査設定から新しい統合監査ポリシー構文への移行を計画することをお薦めします。新しい監査要件については、新しい統合監査を使用してください。従来型監査は、将来のメジャー・リリースでサポート対象外になる可能性があります。

関連項目:
統合監査用のNOAUDIT文については、「NOAUDIT (統合監査)」を参照してください。

用途

NOAUDIT文を使用すると、AUDIT文によって有効になった監査操作を停止できます。

NOAUDIT文は先に発行したAUDIT文と同じ構文である必要があります。また、NOAUDIT文は、その特定のAUDIT文のみを無効にします。たとえば、1番目のAUDIT文Aは特定のユーザーに対する監査を有効にするものとします。2番目の文Bが、すべてのユーザーに対して監査を有効にします。すべてのユーザーに対して監査を無効にするNOAUDIT文Cは、文Bを無効にします。ただし、文Aは無効にされず、文Aが指定したユーザーの監査は継続されます。

関連項目:
AUDIT (従来型監査)

前提条件

SQL文の監査を停止するには、AUDIT SYSTEMシステム権限が必要です。

スキーマ・オブジェクトの監査を停止するには、監査を停止するオブジェクトの所有者である必要があります。そうでない場合は、AUDIT ANYシステム権限が必要です。また、監査の対象として選択するオブジェクトがディレクトリの場合、自分が作成したディレクトリであっても、AUDIT ANYシステム権限が必要です。

CONTAINER句を指定する場合は、マルチテナント・コンテナ・データベース(CDB)に接続している必要があります。CONTAINER = ALLを指定する場合は、現在のコンテナがルートである必要があります。また、共通に付与されているAUDIT SYSTEM権限(SQL文の発行の監査を停止する場合)または共通に付与されているAUDIT ANY権限(スキーマ・オブジェクトに対する操作の監査を停止する場合)が必要です。CONTAINER = CURRENTを指定する場合は、現在のコンテナがプラガブル・データベース(PDB)である必要があります。また、ローカルに付与されているAUDIT SYSTEM権限(SQL文の発行の監査を停止する場合)またはローカルに付与されているAUDIT ANY権限(スキーマ・オブジェクトに対する操作の監査を停止する場合)が必要です。

構文

noaudit::=

(audit_operation_clause::=、auditing_by_clause::=、audit_schema_object_clause::=)

audit_operation_clause ::=

auditing_by_clause::=

audit_schema_object_clause::=

auditing_on_clause ::=

セマンティクス

audit_operation_clause

audit_operation_clauseを使用すると、特定のSQL文の監査を停止できます。

statement_option sql_statement_shortcutでは、監査を停止するSQL文のショートカットを指定します。SQL文のショートカットおよびショートカットによって監査されるSQL文の詳細は、表13-1および表13-2を参照してください。

ALL ALLを指定すると、AUDIT ALL ...文の発行によって現在監査されているすべての文オプションの監査を停止できます。この句を使用して、発行済のAUDIT ALL STATEMENTS ...文を元に戻すことはできません。

ALL STATEMENTS ALL STATEMENTSを指定すると、発行済のAUDIT ALL STATEMENTS ...文を元に戻すことができます。この句を使用して、発行済のAUDIT ALL ...文を元に戻すことはできません。

system_privilege system_privilegeでは、監査を停止するシステム権限を指定します。システム権限および各システム権限によって許可される文については、表18-1を参照してください。

ALL PRIVILEGES ALL PRIVILEGESを指定すると、現在監査されているすべてのシステム権限の監査を停止できます。

auditing_by_clause

指定したユーザーのそれ以降のセッションで発行されるSQL文の監査のみを停止する場合は、auditing_by_clauseを使用します。この句を指定しない場合、すべてのユーザー文の監査が停止されます。ただし、「WHENEVER SUCCESSFUL」で説明する状況は除きます。

audit_schema_object_clause

audit_schema_object_clauseを使用すると、特定のデータベース・オブジェクトの監査を停止できます。

sql_operation sql_operationの場合、ON句で指定したオブジェクトへの監査を停止する操作の種類を指定します。これらのオプションのリストは、表13-3を参照してください。

ALL ALLをショートカットに指定することは、オブジェクト・タイプに適用できるSQL操作をすべて指定することと同じです。

auditing_on_clause auditing_on_clauseを使用すると、監査を停止する特定のスキーマ・オブジェクトを指定できます。

- オブジェクトには、表、ビュー、順序、ストアド・プロシージャ、ファンクション、パッケージ、マテリアライズド・ビューまたはライブラリのオブジェクト名を指定します。objectをschemaで修飾しなかった場合、そのオブジェクトは自分のスキーマ内にあるとみなされます。特定のスキーマ・オブジェクトの監査については、 「AUDIT (従来型監査)」を参照してください。

- DIRECTORYでは、監査を停止するディレクトリ名を指定できます。

- SQL TRANSLATION PROFILE句では、監査を停止するSQL翻訳プロファイルを指定できます。

- DEFAULTを指定して、オブジェクトを作成した後に、特定のオブジェクト・オプションをデフォルト・オブジェクト・オプションとして削除します。

NETWORK この句を使用すると、データベース・リンクの使用とログインの監査を停止できます。

DIRECT_PATH LOAD この句を使用すると、SQL*Loaderのダイレクト・パス・ロードの監査を停止できます。

WHENEVER [NOT] SUCCESSFUL

WHENEVER SUCCESSFULを指定すると、正常に実行されたスキーマ・オブジェクトに対するSQL文および操作の監査のみを停止できます。

WHENEVER NOT SUCCESSFULを指定すると、Oracle DatabaseエラーとなったSQL文および操作の監査のみが停止されます。

この句を指定しない場合、正常に実行されたかどうかにかかわらず、すべての文および操作の監査が停止されます。

CONTAINER句

CONTAINER句を使用すると、NOAUDITコマンドの有効範囲を指定できます。

- CONTAINER = CURRENTを指定すると、接続先のPDBで監査を停止できます。auditing_by_clauseを指定する場合、userは、共通ユーザーまたは現在のPDBのローカル・ユーザーにする必要があります。auditing_on_clauseを指定する場合、オブジェクトは現在のPDBのローカル・オブジェクトにする必要があります。

- CONTAINER = ALLを指定すると、CDB全体で監査を停止できます。auditing_by_clauseを指定する場合、userは、共通ユーザーにする必要があります。auditing_by_clauseを指定しないと、各PDBのすべての共通ユーザーとすべてのローカル・ユーザーに対する監査が停止されます。auditing_on_clauseを指定する場合、オブジェクトは共通オブジェクトにする必要があります。

この句を省略すると、CONTAINER = CURRENTがデフォルトになります。

例

ロールに関連するSQL文の監査の停止例: 次の文は、ロールを作成または削除するすべてのSQL文の監査を停止します。

NOAUDIT ROLE;

特定ユーザーが所有するオブジェクトに対する更新または問合せの監視の停止例: 次の文は、ユーザーhrおよびoeによって発行された、表の問合せまたは更新を実行する文を監査している場合、hrの問合せの監査のみを停止します。

NOAUDIT SELECT TABLE BY hr;

この結果、ユーザーhrの問合せの監査のみが停止されます。oeの問合せと更新、およびhrの更新の監査は継続されます。

特定のオブジェクト権限で許可された文の監査の停止例: 次の文は、DELETE ANY TABLEシステム権限に許可されたすべての文の監査を停止します。

NOAUDIT DELETE ANY TABLE;

特定のオブジェクトに対する問合せの監査の停止例: 次の文は、スキーマhr内のemployees表に問い合せるすべてのSQL文の監査を選択していた場合に、この監査を停止します。

NOAUDIT SELECT
ON hr.employees;

正常に実行される問合せの監査の停止例: 次の文は、正常に終了した問合せの監査を停止します。

NOAUDIT SELECT
ON hr.employees
WHENEVER SUCCESSFUL;

この文は、正常に終了した問合せの監査のみ停止します。Oracle Databaseエラーが発生した問合せの監査は継続されます。

NOAUDIT (統合監査)

この項では、統合監査用のNOAUDIT文について説明します。この種類の監査は、Oracle Database 12cで新たに導入されたもので、完全かつ高度な監査機能を提供します。統合監査の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

用途

NOAUDIT文を使用すると、次の操作を実行できます。

- すべてのユーザーまたは特定のユーザーに対して、統合監査ポリシーを無効化します。

- コンテキスト属性の値を監査レコードから除外します。

この文で実行される操作は、現行のセッションではなく、それ以降のユーザー・セッションで有効になります。

関連項目:

- AUDIT (統合監査)

- CREATE AUDIT POLICY (統合監査)

- ALTER AUDIT POLICY (統合監査)

- DROP AUDIT POLICY (統合監査)

前提条件

AUDIT SYSTEMシステム権限、またはAUDIT_ADMINロールが必要になります。

マルチテナント・コンテナ・データベース(CDB)に接続している場合、共通の統合監査ポリシーを無効化するには、現在のコンテナがルートである必要があります。また、共通に付与されているAUDIT SYSTEM権限またはAUDIT_ADMIN共通ロールが必要です。ローカルの統合監査ポリシーを無効化するには、現在のコンテナが、その監査ポリシーが作成されたコンテナである必要があります。また、共通に付与されているAUDIT SYSTEM権限またはAUDIT_ADMIN共通ロールを保有しているか、そのコンテナでローカルに付与されているAUDIT SYSTEM権限またはAUDIT_ADMINローカル・ロールを保有している必要があります。

CDBに接続しているときにNOAUDIT CONTEXT ...文を指定するには、共通に付与されているAUDIT SYSTEM権限またはAUDIT_ADMIN共通ロールを保有しているか、現在のセッションのコンテナでローカルに付与されているAUDIT SYSTEM権限またはAUDIT_ADMINローカル・ロールを保有している必要があります。

構文

unified_noaudit::=

セマンティクス

ポリシー

無効化する統合監査ポリシーの名前を指定します。

すべての統合監査ポリシーの説明を検索するには、AUDIT_UNIFIED_POLICIESビューを問い合わせます。すべての有効な統合監査ポリシーの説明を検索するには、AUDIT_UNIFIED_ENABLED_POLICIESビューを問い合わせます。

関連項目:
AUDIT_UNIFIED_POLICIESおよびAUDIT_UNIFIED_ENABLED_POLICIESビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

CONTEXT句

CONTEXT句を指定すると、監査レコードのコンテキスト属性の値を除外できます。

- namespaceには、コンテキスト・ネームスペースを指定します。

- attributeには、監査レコードから除外する値を持つ1つ以上のコンテキスト属性を指定します。

現在のコンテナがCDBのルートであるときにCONTEXT句を指定すると、ルートで実行されたイベントについての監査レコードにのみ、コンテキスト属性の値が含まれるようになります。オプションのBY句を指定する場合、userは共通ユーザーにする必要があります。

現在のコンテナがプラガブル・データベース(PDB)であるときにCONTEXT句を指定すると、PDBで実行されたイベントについての監査レコードにのみ、コンテキスト属性の値が含まれるようになります。オプションのBY句を指定する場合、userは、共通ユーザーまたはそのPDBのローカル・ユーザーにする必要があります。

監査証跡に取得されるように構成されている、アプリケーション・コンテキストの属性を調べるには、AUDIT_UNIFIED_CONTEXTSビューを問い合わます。

関連項目:
AUDIT_UNIFIED_CONTEXTSビューの詳細は、『Oracle Databaseリファレンス』を参照してください。

BY

BY句は、NOAUDIT POLICYおよびNOAUDIT CONTEXT文に対して指定できます。

NOAUDIT POLICY ... BY BY句の動作は、policyがすべてのユーザーと特定のユーザーのどちらに対して有効になっているかによって異なります。

- policyがすべてのユーザーに対して有効になっている場合、BY句を省略することによって、policyをすべてのユーザーに対して無効化できます。BY句を指定した場合、NOAUDIT POLICY文による影響はありません。

- policyが(AUDIT POLICY ... BY ...文を使用することによって)1人以上のユーザーに対して有効になっている場合、次の操作を実行できます。

- BY句の後にpolicyを無効化するユーザーを指定することによって、1人以上のユーザーに対してpolicyを無効化できます。

- BY句の後にpolicyが有効になっているすべてのユーザーを指定することによって、policyを完全に無効化できます。

BY句を指定しなかった場合、NOAUDIT POLICY文による影響はありません。

- policyが(AUDIT POLICY ... EXCEPT ...文を使用することによって)特定のユーザーを除くすべてのユーザーに対して有効になっている場合、BY句を省略することによって、policyをすべてのユーザーに対して無効化できます。BY句を指定した場合、NOAUDIT POLICY文による影響はありません。

policyが共通の統合監査ポリシーの場合、userは共通ユーザーにする必要があります。policyがローカルの統合監査ポリシーの場合、userは共通ユーザーまたは接続先のコンテナのローカル・ユーザーにする必要があります。

NOAUDIT CONTEXT ... BY BY句の動作は、attributeがすべてのユーザーと特定のユーザーのどちらの監査レコードに含まれるように構成されているかによって異なります。

- attributeがすべてのユーザーの監査レコードに含まれるように構成されている場合、BY句を省略することによって、attributeをすべてのユーザーの監査レコードから除外できます。BY句を指定した場合、NOAUDIT CONTEXT文による影響はありません。

- attributeが特定のユーザーの監査レコードに含まれるように構成されている場合、BY句の後にattributeを除外するユーザーを指定することによって、1人以上のユーザーのattributeを除外できます。BY句を指定しなかった場合、NOAUDIT CONTEXT文による影響はありません。

例

次の例では、CREATE AUDIT POLICYの「例」で作成し、AUDITの「例」で有効化した統合監査ポリシーを無効化します。

すべてのユーザーに対して統合監査ポリシーを無効化する例 統合監査ポリシーtable_polがすべてのユーザーに対して有効になっているものとします。次の文では、すべてのユーザーに対してtable_polを無効化します。

NOAUDIT POLICY table_pol;

次の文では、行が戻されません。これは、すべてのユーザーに対してtable_polが無効になっていることを示しています。

SELECT *
FROM audit_unified_enabled_policies
WHERE policy_name = 'TABLE_POL';

特定のユーザーに対して統合監査ポリシーを無効化する例 統合監査ポリシーdml_polが、次の問合せに示すように、ユーザーhrおよびshに対して有効になっているものとします。

SELECT policy_name, enabled_opt, user_name
FROM audit_unified_enabled_policies
WHERE policy_name = 'DML_POL'
ORDER BY user_name;

POLICY_NAME  ENABLED_OPT  USER_NAME
-----------  -----------  ---------
DML_POL      BY           HR
DML_POL      BY           SH

次の文では、ユーザーhrに対してdml_polを無効化します。

NOAUDIT POLICY dml_pol BY hr;

次の文では、dml_polがユーザーshに対してのみ有効になっていることを確認します。

SELECT policy_name, enabled_opt, user_name
FROM audit_unified_enabled_policies
WHERE policy_name = 'DML_POL';

POLICY_NAME  ENABLED_OPT  USER_NAME
-----------  -----------  ---------
DML_POL      BY           SH

次の文では、ユーザーshに対してdml_polを無効化します。

NOAUDIT POLICY dml_pol BY sh;

次の文では、行が戻されません。これは、すべてのユーザーに対してdml_polが無効になっていることを示しています。

SELECT *
FROM audit_unified_enabled_policies
WHERE policy_name = 'DML_POL';

監査レコードに含まれるコンテキスト属性の値を除外する例 次の文では、ネームスペースUSERENVの属性CURRENT_USERとDB_NAMEの値を、ユーザーhrについてのすべての監査レコードから除外するようにデータベースに指示します。

NOAUDIT CONTEXT NAMESPACE userenv
ATTRIBUTES current_user, db_name
BY hr;

PURGE

用途

PURGE文を使用すると、ごみ箱内の表または索引を削除してそのオブジェクトに関連付けられていたすべての領域を解放するか、ごみ箱全体を空にするか、または削除された表領域の一部または全体をごみ箱から削除できます。

注意:
PURGE文はロールバックできません。また、この文によって消去されたオブジェクトはリカバリできません。

ごみ箱の内容を参照するには、USER_RECYCLEBINデータ・ディクショナリ・ビューを問い合せます。かわりにRECYCLEBINシノニムを使用することもできます。次の2つの文は、同じ行を戻します。

SELECT * FROM RECYCLEBIN;
SELECT * FROM USER_RECYCLEBIN;

関連項目:

- ごみ箱の詳細、およびごみ箱内のオブジェクトのネーミング規則の詳細は、『Oracle Database管理者ガイド』を参照してください。

- 削除した表をごみ箱から取り出す方法については、「FLASHBACK TABLE」を参照してください。

- RECYCLEBIN初期化パラメータを使用して、削除した表をごみ箱に格納するかどうかを制御する方法は、『Oracle Databaseリファレンス』を参照してください。

前提条件

データベース・オブジェクトが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、消去するオブジェクトのタイプに対するDROP ANY...システム権限、またはSYSDBAシステム権限が必要です。PURGE DBA_RECYCLEBIN操作を実行するには、SYSDBAまたはPURGE DBA_RECYCLEBINシステム権限が必要です。

構文

purge::=

セマンティクス

TABLEまたはINDEX

ごみ箱内の消去する表または索引の名前を指定します。ユーザーが指定した元の名前か、オブジェクトの削除時にそのオブジェクトに割り当てられたシステム生成名を指定できます。

- ユーザー指定の名前を指定した場合、その名前を持つオブジェクトがごみ箱内に複数存在していると、ごみ箱内に最も長く存在しているオブジェクトが消去されます。

- ごみ箱内のオブジェクトのシステム生成名は一意です。そのため、システム生成名を指定すると、その名前を持つ特定のオブジェクトが消去されます。

表が消去されると、その表のすべての表パーティション、LOBとLOBパーティション、索引、およびその他の依存オブジェクトも消去されます。

RECYCLEBIN

この句を使用すると、現行のユーザーのごみ箱を空にできます。そのユーザーのごみ箱からすべてのオブジェクトが消去され、そのオブジェクトに関連付けられていたすべての領域が解放されます。

DBA_RECYCLEBIN

この句は、SYSDBAまたはPURGE DBA_RECYCLEBINシステム権限を持っている場合にのみ有効です。これを使用すると、システム全体のごみ箱からすべてのオブジェクトを削除できます。これは、各ユーザーのごみ箱を空にすることと同じです。この操作は、以前のリリースへの移行などの場合に役立ちます。

TABLESPACE tablespace

この句を使用すると、ごみ箱から、指定した領域内に存在するすべてのオブジェクトを消去できます。

USER user この句を使用すると、指定したユーザーが、表領域内の領域を再利用できます。この操作は、特定のユーザーの、特定の表領域に対するディスク領域が割当て制限間近である場合に特に役立ちます。

例

ごみ箱からのファイルの削除例: 次の文は、ごみ箱からtest表を削除します。複数のバージョンのtest表がごみ箱内に存在する場合、Oracle Databaseでは、ごみ箱内に最も長く存在しているものが削除されます。

PURGE TABLE test;

ごみ箱から削除する表のシステム生成名を判断するには、ごみ箱に対するSELECT文を発行します。そのオブジェクト名を使用して、次の文に類似した文を発行して表を削除できます。(システム生成名は、次の例に示すものとは異なります。)

PURGE TABLE RB$$33750$TABLE$0;

ごみ箱の内容の削除例: 次の文は、ごみ箱のすべての内容を削除します。

PURGE RECYCLEBIN;

RENAME

用途

注意:
RENAME文はロールバックできません。

RENAME文を使用すると、表、ビュー、順序またはプライベート・シノニムの名前を変更できます。

- 古いオブジェクトの整合性制約、索引および権限付与は、新しいオブジェクトに自動的に移行されます。

- 名前を変更した表を参照するビュー、シノニム、ストアド・プロシージャ、ストアド・ファンクションなど、名前を変更したオブジェクトに依存するオブジェクトはすべて無効になります。

関連項目:
「CREATE SYNONYM」および「DROP SYNONYM」を参照してください。

前提条件

オブジェクトが自分のスキーマ内にある必要があります。

構文

rename::=

セマンティクス

old_name

既存の表、ビュー、順序またはプライベート・シノニムの名前を指定します。

new_name

既存のオブジェクトに割り当てる新しい名前を指定します。新しい名前は、同じネームスペース内の他のスキーマ・オブジェクトに使用されている名前以外にする必要があります。また、スキーマ・オブジェクトのネーミング規則に従って指定する必要があります。

オブジェクトの名前変更の制限事項: オブジェクト名の変更には、次の制限事項があります。

- パブリック・シノニムの名前は変更できません。そのかわり、該当するパブリック・シノニムを削除し、新しい名前で別のパブリック・シノニムを作成してください。

- 依存表または依存する有効なユーザー定義オブジェクト型を持つ型のシノニムの名前は変更できません。

関連項目:
「データベース・オブジェクトのネーミング規則」

例

データベース・オブジェクトの名前の変更例: 次の例では、サンプル表hr.departmentsのコピーを使用します。次の文は、表の名前をdepartments_newからemp_departmentsに変更します。

RENAME departments_new TO emp_departments;

この文では列名を直接変更できません。ただし、ALTER TABLE ... rename_column_clauseを使用すると、列の名前を変更できます。

関連項目:
rename_column_clause

列名を変更するもう1つの方法は、AS副問合せを指定したCREATE TABLE文とともに、RENAME文を使用する方法です。この方法は、単に列の名前を変更するのではなく、表の構造を変更する場合に有効です。次の文は、サンプル表hr.job_historyを再作成し、列の名前をdepartment_idからdept_idに変更します。

CREATE TABLE temporary
(employee_id, start_date, end_date, job_id, dept_id)
AS SELECT
employee_id, start_date, end_date, job_id, department_id
FROM job_history;

DROP TABLE job_history;

RENAME temporary TO job_history;

前述の例の場合、job_history表に定義されている整合性制約は失われます。これらの整合性制約は、ALTER TABLE文を使用して、新しいjob_history表に再定義する必要があります。

REVOKE

用途

REVOKE文を使用すると、次の操作を実行できます。

- ユーザーおよびロールからのシステム権限の取消し

- ユーザー、ロール、およびプログラム・ユニットからのロールの取消し。

- ユーザーまたはロールからの特定のオブジェクトに対するオブジェクト権限の取消し

Oracle Automatic Storage Managementの注意事項: AS SYSASMと認証されたユーザーは、この文を使用すると、システム権限SYSASM、SYSOPERおよびSYSDBAを、現行ノードのOracle ASMパスワード・ファイルのユーザーから取り消すことができます。

エディション化可能なオブジェクトの注意事項 エディション化可能なオブジェクトからオブジェクト権限を取り消すREVOKE操作を実行すると、オブジェクトが現行のエディションで実体化されます。エディションおよびエディション化可能なオブジェクトの詳細は、『Oracle Database開発ガイド』を参照してください。

関連項目:

- システム権限およびロールの付与については、「GRANT」を参照してください。

- それぞれのオブジェクト型に対するオブジェクト権限の詳細は、表18-2を参照してください。

前提条件

システム権限を取り消すには、Admin Option付きの権限が必要です。なお、GRANT ANY PRIVILEGEシステム権限を持っている場合は、権限を自由に取り消すことができます。

ユーザーのロールまたは別のロールを取り消すには、ADMIN OPTIONを使用してロールを直接付与するか、または付与するロールが自分で作成したロールである必要があります。なお、GRANT ANY ROLEシステム権限を持っている場合は、ロールを自由に取り消すことができます。

プログラム・ユニットのロールを取り消すには、ユーザーSYSまたはプログラム・ユニットのスキーマ所有者である必要があります。

オブジェクト権限を取り消すには、次のいずれかの条件が満たされている必要があります。

- 以前にそのユーザーまたはロールにそのオブジェクト権限を付与した。

- GRANT ANY OBJECT PRIVILEGEシステム権限を保有している。この場合は、オブジェクト所有者によって付与されたか、この所有者にかわってGRANT ANY OBJECT PRIVILEGEを持つユーザーによって付与されたあらゆるオブジェクト権限を取り消すことができます。ただし、With Grant Optionによって付与されたオブジェクト権限を取り消すことはできません。

関連項目:
「GRANT ANY OBJECT PRIVILEGEを使用する操作を取り消す例:」

REVOKE文によって取り消すことができる権限およびロールは、GRANT文によって直接付与されているものにかぎられます。この句では、次の権限を取り消すことはできません。

- 取消し側に付与されていない権限またはロール

- オペレーティング・システムを介して付与されているロールまたはオブジェクト権限

- ロールを介して取消し側に付与されている権限またはロール

CONTAINER句を指定する場合は、マルチテナント・コンテナ・データベース(CDB)に接続している必要があります。CONTAINER = ALLを指定する場合は、現在のコンテナがルートである必要があります。

構文

revoke::=

(revoke_system_privileges::=, revoke_object_privileges::=, revoke_roles_from_programs::=)

revoke_system_privileges::=

(revokee_clause::=)

revoke_object_privileges::=

(on_object_clause::=、revokee_clause::=を参照)

revokee_clause::=

on_object_clause::=

revoke_roles_from_programs::=

program_unit::=

セマンティクス

revoke_system_privileges

システム権限を取り消すには、次の句を使用します。

system_privilege

取り消すシステム権限を指定します。システム権限のリストは、表18-1を参照してください。

ユーザーのシステム権限を取り消す場合、ユーザーの権限ドメインからその権限が取り消されます。この取消しはすぐに有効になるため、このユーザーはその権限を使用できなくなります。

ロールのシステム権限を取り消す場合、ロールの権限ドメインからその権限が取り消されます。この取消しはすぐに有効になるため、そのロールが使用可能となっている場合でも、この権限は使用できません。また、そのロールが付与されている他のユーザーは、ロールを使用可能にしても、その権限を使用できなくなります。

関連項目:
「ユーザーからシステム権限を取り消す例:」および「ロールからシステム権限を取り消す例:」を参照してください。

PUBLICのシステム権限を取り消す場合、PUBLICを介して権限を付与されている各ユーザーの権限ドメインからその権限が取り消されます。この取消しはすぐに有効になるため、ユーザーは権限を使用できなくなります。ただし、直接またはロールを介して権限が付与されているユーザーからは、権限を取り消すことはできません。

Oracle Databaseには、すべてのシステム権限を一度に指定できるショートカットがあります。ALL PRIVILEGESを指定すると、表18-1に示すすべてのシステム権限を取り消すことができます。

システム権限の取消しの制限事項: 取り消す権限のリストに権限を指定できるのは1回のみです。

role

取り消すロールを指定します。

ユーザーからロールを取り消すと、ユーザーによるロールの使用が禁止されます。そのロールが使用可能となっている場合に、ロールの権限ドメインの権限が使用可能な場合はその権限を使用できます。ただし、ユーザーが後からロールを使用可能にできません。

他のロールからロールを取り消すと、取消し側ロールの権限ドメインから、取り消されたロールの権限ドメインが削除されます。取り消されたロールの権限を付与され、そのロールの権限が使用可能になっているユーザーは、そのロールの権限が使用可能な間は、取り消されたロールの権限ドメインの権限を引き続き使用できます。ただし、取り消された権限を付与されていても、ロールの取消し操作の後でそれを使用可能にしたユーザーは、取り消されたロールの権限ドメインの権限を使用できません。

関連項目:
「ユーザーからロールを取り消す例:」および「ロールからロールを取り消す例:」を参照してください。

PUBLICのロールを取り消すと、PUBLICを介してロールが付与されているすべてのユーザーに対して、そのロールが使用禁止にされます。そのロールを使用可能としているユーザーは、権限ドメインの権限が使用可能であるかぎり、権限ドメインでその権限を引き続き使用できます。ただし、ユーザーが後からロールを使用可能にすることはできません。直接またはロールを介して権限が付与されているユーザーからは、ロールを取り消すことはできません。

システム・ロールの取消しの制限事項: 取り消すロールのリストにシステム・ロールを指定できるのは1回のみです。事前定義されているロールの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

revokee_clause

revokee_clauseを使用すると、システム権限、ロールまたはオブジェクト権限を取り消すユーザーまたはロールを指定できます。

PUBLIC PUBLICを指定すると、すべてのユーザーから権限またはロールを取り消すことができます。

revoke_object_privileges

オブジェクト権限を取り消すには、次の句を使用します。

object_privilege

取り消すオブジェクト権限を指定します。表18-2に、適用するオブジェクトのタイプによってカテゴリ分けされたオブジェクト権限を示します。

注意:
操作は権限によって許可されます。権限を取り消すと、取り消されたユーザーは、その操作を実行できなくなります。ただし、複数のユーザーが、同じ権限を同一ユーザー、ロールまたはPUBLICに対して付与している場合があります。権限受領者の権限ドメインの権限を取り消す場合、すべての権限付与者が権限を取り消す必要があります。権限を取り消さない権限付与者が1人でもいれば、権限受領者は引き続きその権限を使用できます。

ユーザーのオブジェクト権限を取り消すと、ユーザーの権限ドメインからその権限が取り消されます。この取消しはすぐに有効になるため、このユーザーはその権限を使用できなくなります。

- ユーザーがその権限を他のユーザーまたはロールに付与している場合、他のユーザーまたはロールの権限も取り消されます。

- 権限を使用するSQL文を記述したプロシージャ、ファンクションまたはパッケージが定義されているスキーマを持つユーザーのオブジェクト権限を取り消すと、それらのプロシージャ、ファンクションまたはパッケージは実行できなくなります。

- そのユーザーのスキーマにオブジェクトのビューが含まれる場合、ビューは無効になります。

- 参照整合性制約の定義権限を使用したユーザーのREFERENCESオブジェクト権限を取り消す場合、CASCADE CONSTRAINTS句も指定する必要があります。

ロールのオブジェクト権限を取り消すと、ロールの権限ドメインからその権限が取り消されます。この取消しはすぐに有効になるため、そのロールが使用可能となっている場合でも、この権限は使用できません。ロールが付与されている他のユーザーは、ロールを使用可能にした場合でも、権限を使用できなくなります。

PUBLICのオブジェクト権限を取り消すと、PUBLICを介して権限を付与されている各ユーザーの権限ドメインからその権限が取り消されます。この取消しはすぐに有効になるため、それらのすべてのユーザーは、その権限を使用できなくなります。ただし、直接またはロールを介して権限が付与されているユーザーからは、権限を取り消すことはできません。

ALL [PRIVILEGES]

ALLを指定すると、ユーザーまたはロールに付与されているすべてのオブジェクト権限を取り消すことができます。(キーワードPRIVILEGESはセマンティクスを明確にするためのものであり、指定は任意です。)

オブジェクトに権限が付与されていない場合、処理は行われず、エラーも戻りません。

オブジェクト権限の取消しの制限事項: 取り消す権限のリストに権限を指定できるのは1回のみです。FROM句にユーザー、ロールまたはPUBLICを指定できるのは1回のみです。

関連項目:
「ユーザーからオブジェクト権限を取り消す例:」、「PUBLICからオブジェクト権限を取り消す例:」および「ユーザーからすべてのオブジェクト権限を取り消す例:」を参照してください。

CASCADE CONSTRAINTS

この句は、REFERENCES権限またはALL [PRIVILEGES]を取り消すときにのみ適用されます。取消し側でREFERENCES権限(ALL [PRIVILEGES]を付与して明示的または暗黙的に付与された権限)を使用して定義した参照整合性制約を削除します。

関連項目:
「CASCADE CONSTRAINTSでオブジェクト権限を取り消す例:」

FORCE

FORCEを指定すると、表または型に依存するユーザー定義型オブジェクトで、EXECUTEオブジェクト権限を取り消すことができます。表に依存するユーザー定義型オブジェクトでは、FORCEを使用してEXECUTEオブジェクト権限を取り消します。

FORCEを指定した場合、すべての権限が取り消され、すべての依存オブジェクトにINVALIDのマークが付けられ、依存表のデータにはアクセスできなくなります。また、すべての依存ファンクション索引にUNUSABLEのマークが付けられます。必要な型の権限を再付与した場合、表に対して再度妥当性チェックが行われます。

関連項目:
型依存性およびユーザー定義オブジェクト権限の詳細は、『Oracle Database概要』を参照してください。

on_object_clause

on_object_clauseを指定すると、権限を取り消すオブジェクトを識別できます。

object オブジェクト権限を取り消すオブジェクトを指定します。取り消すことができるオブジェクトは次のとおりです。

- 表、ビュー、順序、プロシージャ、ストアド・ファンクション、パッケージまたはマテリアライズド・ビュー

- 表、ビュー、順序、プロシージャ、ストアド・ファンクション、パッケージ、マテリアライズド・ビューまたはユーザー定義型に対するシノニム

- ライブラリ、索引タイプまたはユーザー定義演算子

オブジェクトをschemaで修飾しなかった場合、そのオブジェクトは自分のスキーマ内にあるとみなされます。

関連項目:
「ユーザーから順序のオブジェクト権限を取り消す例:」

システム権限のGrant Optionの有無にかかわらず、READまたはSELECTオブジェクト権限をマテリアライズド・ビューまたは表を含むマテリアライズド・ビューから取り消すと、そのマテリアライズド・ビューは無効になります。

システム権限のGRANT OPTIONの有無にかかわらず、マテリアライズド・ビューのマスター表のいずれかにおけるREADまたはSELECTオブジェクト権限を取り消すと、そのマテリアライズド・ビューとそれに含まれる表の両方またはマテリアライズド・ビューが無効になります。

ON USER 権限を取り消すデータベース・ユーザーを1人以上指定します。

関連項目:
「ユーザーからユーザーのオブジェクト権限を取り消す例:」

ON DIRECTORY 権限を取り消すディレクトリ・オブジェクトの名前を指定します。directory_nameはスキーマ名で修飾できません。

関連項目:
「CREATE DIRECTORY」および「ユーザーからディレクトリへのオブジェクト権限を取り消す例:」を参照してください。

ON EDITION USEオブジェクト権限を取り消すエディションの名前を指定します。edition_nameはスキーマ名で修飾できません。

ON MINING MODEL 権限を取り消すマイニング・モデルの名前を指定します。mining_model_nameをschemaで修飾しなかった場合、そのマイニング・モデルは自分のスキーマ内にあるとみなされます。

ON JAVA SOURCE | RESOURCE 権限を取り消すJavaソースまたはリソース・スキーマ・オブジェクトの名前を指定します。objectをschemaで修飾しなかった場合、そのオブジェクトは自分のスキーマ内にあるとみなされます。

ON SQL TRANSLATION PROFILE 権限を取り消すSQL翻訳プロファイルの名前を指定します。profileをschemaで修飾しなかった場合、そのプロファイルは自分のスキーマ内にあるとみなされます。

revoke_roles_from_programs

この句を使用して、コードに基づくアクセス制御ロール(CBAC)をプログラム・ユニットから取り消すことができます。

role

取り消すロールを指定します。

ALL

ALLを指定すると、プログラム・ユニットに付与されたすべてのロールを取り消すことができます。

program_unit

ロールを取り消すプログラム・ユニットを指定します。PL/SQLファンクション、プロシージャ、またはパッケージを指定できます。schemaを指定しない場合、ファンクション、プロシージャ、またはパッケージは独自のスキーマにあると見なされます。

関連項目:
CBACロールのプログラム・ユニットからの取消しの詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。

CONTAINER句

現在のコンテナがプラガブル・データベース(PDB)である場合:

- CONTAINER = CURRENTを指定すると、ローカル・ユーザー、共通ユーザー、ローカル・ロールまたは共通ロールにローカルに付与されているシステム権限、オブジェクト権限またはロールを取り消すことができます。現在のPDBでのみ、その権限またはロールがそのユーザーまたはロールから取り消されます。この句は、CONTAINER = ALLで付与された権限を取り消しません。

現在のコンテナがルートである場合:

- CONTAINER = CURRENTを指定すると、共通ユーザーまたは共通ロールにローカルに付与されているシステム権限、オブジェクト権限またはロールを取り消すことができます。ルートのユーザーまたはロールからのみ、権限またはロールが取り消されます。この句は、CONTAINER = ALLで付与された権限を取り消しません。

- CONTAINER = ALLを指定すると、共通ユーザーまたは共通ロールに共通に付与されているシステム権限、共通オブジェクトに対するオブジェクト権限またはロールを取り消すことができます。CDB全体で、その権限またはロールがそのユーザーまたはロールから取り消されます。この句では、CONTAINER = ALLで付与された権限のみを、指定した共通ユーザーまたは共通ロールから取り消すことができます。CONTAINER = CURRENTで付与された権限は、この句では取り消されません。ただし、取消し対象の共通に付与されている権限に依存する、ローカルに付与されている権限も取り消されます。

この句を省略すると、CONTAINER = CURRENTがデフォルトになります。

例

ユーザーからシステム権限を取り消す例: 次の文は、ユーザーhrおよびoeのDROP ANY TABLEシステム権限を取り消します。

REVOKE DROP ANY TABLE
FROM hr, oe;

この結果、hrおよびoeは他のユーザーのスキーマに定義されている表を削除できなくなります。

ユーザーからロールを取り消す例: 次の文は、ユーザーshのロールdw_managerを取り消します。

REVOKE dw_manager
FROM sh;

この結果、shユーザーはdw_managerロールを使用可能にできなくなります。

ロールからシステム権限を取り消す例: 次の文は、ロールdw_managerのCREATE TABLESPACEシステム権限を取り消します。

REVOKE CREATE TABLESPACE
FROM dw_manager;

ロールdw_managerを使用可能にしても、ユーザーは表領域を作成できません。

ロールからロールを取り消す例: 次の文は、ロールdw_managerからロールdw_userを取り消します。

REVOKE dw_user
FROM dw_manager;

この結果、dw_userロールの権限はdw_managerに付与されなくなります。

ユーザーからオブジェクト権限を取り消す: 例 次の文は、orders表に対するDELETE、INSERT、READ、SELECTおよびUPDATE権限をユーザーhrに付与します。

GRANT ALL
ON orders TO hr;

次の文は、ユーザーhrから表ordersに対するDELETE権限を取り消します。

REVOKE DELETE
ON orders FROM hr;

ユーザーからすべてのオブジェクト権限を取り消す例: 次の文は、ユーザーhrの表ordersに対する残りのすべての権限を取り消します。

REVOKE ALL
ON orders FROM hr;

PUBLICからオブジェクト権限を取り消す例: 次の文は、ロールpublicに権限を付与することによって、すべてのユーザーにビューemp_details_viewに対するSELECT権限およびUPDATE権限を付与します。

GRANT SELECT, UPDATE
ON emp_details_view TO public;

次の文は、すべてのユーザーからemp_details_viewに対するUPDATE権限を取り消します。

REVOKE UPDATE
ON emp_details_view FROM public;

ユーザーは、emp_details_viewビューへの問合せはできますが、更新はできなくなります。ただし、emp_details_viewに対するUPDATE権限も任意のユーザーに直接またはロールを介して付与している場合は、これらのユーザーはその権限を保持します。

ユーザーからユーザーのオブジェクト権限を取り消す例: 次の文は、ユーザーhrにユーザーshに対するINHERIT PRIVILEGES権限を付与します。

GRANT INHERIT PRIVILEGES ON USER sh TO hr;

ユーザーshに対するINHERIT PRIVILEGES権限をユーザーhrから取り消すには、次の文を発行します。

REVOKE INHERIT PRIVILEGES ON USER sh FROM hr;

ユーザーから順序のオブジェクト権限を取り消す例: 次の文は、ユーザーoeにスキーマhr内のdepartments_seq順序に対するSELECT権限を付与します。

GRANT SELECT
ON hr.departments_seq TO oe;

次の文は、oeからdepartments_seqに対するSELECT権限を取り消します。

REVOKE SELECT
ON hr.departments_seq FROM oe;

ただし、ユーザーhrがdepartmentsに対するSELECT権限をshに付与している場合、shは、hrからの権限付与によってdepartmentsを使用できます。

CASCADE CONSTRAINTSでオブジェクト権限を取り消す例: 次の文は、oeに、スキーマhr内のemployees表に対するREFERENCES権限およびUPDATE権限を付与します。

GRANT REFERENCES, UPDATE
ON hr.employees TO oe;

ユーザーoeは、REFERENCES権限を使用して、hrスキーマ内のemployees表を参照するdependent表の制約を定義できます。

CREATE TABLE dependent
(dependno   NUMBER,
dependname VARCHAR2(10),
employee   NUMBER
CONSTRAINT in_emp REFERENCES hr.employees(employee_id) );

CASCADE CONSTRAINTS句を指定した次の文を発行することによって、oeのhr.employeesに対するREFERENCES権限を取り消すことができます。

REVOKE REFERENCES
ON hr.employees
FROM oe
CASCADE CONSTRAINTS;

oeのhr.employeesに対するREFERENCES権限を取り消した場合、oeは制約を定義する権限が必要になるため、in_emp制約が自動的に削除されます。

ただし、oeが他のユーザーからhr.employeesに対するREFERENCES権限を付与されている場合は、その制約は削除されません。他のユーザーから権限付与されたため、oeは制約に対して必要な権限を保持しています。

ユーザーからディレクトリへのオブジェクト権限を取り消す例: 次の文は、hrのbfile_dirディレクトリに対するREADオブジェクト権限を取り消します。

REVOKE READ ON DIRECTORY bfile_dir FROM hr;

GRANT ANY OBJECT PRIVILEGEを使用する操作を取り消す例: データベース管理者によってユーザーshにGRANT ANY OBJECT PRIVILEGEが付与されているとします。ユーザーhrが、employees表に対するUPDATE権限をユーザーoeに付与します。

CONNECT hr
GRANT UPDATE ON employees TO oe WITH GRANT OPTION;

これによって、オブジェクト権限を別のユーザーに付与する権限がユーザーoeに付与されます。

CONNECT oe
GRANT UPDATE ON hr.employees TO pm;

oeにはhrによって権限が与えられたため、GRANT ANY OBJECT PRIVILEGEが付与されているユーザーshは、ユーザーhrにかわってユーザーoeのUPDATE権限を取り消すことができます。

CONNECT sh
REVOKE UPDATE ON hr.employees FROM oe;

pmに権限を付与したのがオブジェクトの所有者(hr)、ユーザーshまたはGRANT ANY OBJECT PRIVILEGEを持つ他のユーザーではなく、ユーザーoeであったため、ユーザーshは、ユーザーpmのUPDATE権限を明示的に取り消すことはできません。ただし、前述の文は、連鎖的な取消しを行い、取り消された権限に依存するすべての権限を取り消します。そのため、pmのオブジェクト権限も暗黙的に取り消されます。

ROLLBACK

用途

ROLLBACK文を使用すると、現行のトランザクションで実行された処理を取り消すことができます。また、インダウト分散トランザクションで実行された処理を手動で取り消すこともできます。

注意:
アプリケーション・プログラムでは、COMMITまたはROLLBACK文を使用してトランザクションを明示的に終了することをお薦めします。トランザクションを明示的にコミットせずにプログラムが異常終了した場合、コミットされていない最後のトランザクションがロールバックされます。

関連項目:

- トランザクションの詳細は、『Oracle Database概要』を参照してください。

- 分散トランザクションの詳細は、『Oracle Database Heterogeneous Connectivityユーザーズ・ガイド』を参照してください。

- 現行トランザクションの特性の設定については、「SET TRANSACTION」を参照してください。

- COMMITおよびSAVEPOINT

前提条件

現行のトランザクションをロールバックする場合、権限は不要です。

コミットしたインダウト分散トランザクションを手動でロールバックする場合は、FORCE TRANSACTIONシステム権限が必要です。他のユーザーがコミットしたインダウト分散トランザクションを手動でロールバックする場合は、FORCE ANY TRANSACTIONシステム権限が必要です。

構文

rollback::=

セマンティクス

WORK

WORKキーワードの指定は任意です。このキーワードは、SQL規格との互換性のために提供されています。

TO SAVEPOINT句

現行のトランザクションをロールバックするセーブポイントを指定します。この句を指定しない場合、ROLLBACK文によってトランザクション全体がロールバックされます。

TO SAVEPOINT句を指定しないでROLLBACKコマンドを実行すると、次の処理が行われます。

- トランザクションを終了します

- 現行のトランザクションに対するすべての変更の取消し

- トランザクション内のすべてのセーブポイントが消去されます。

- トランザクションのロックの解除

関連項目:
「SAVEPOINT」

TO SAVEPOINT句を指定してROLLBACKコマンドを実行すると、次の処理が行われます。

- トランザクションのセーブポイント後の部分のみがロールバックされます。トランザクションは終了しません。

- 指定したセーブポイントより後に作成されたすべてのセーブポイントの消去。指定したセーブポイントはそのまま残るため、そのセーブポイントまで繰り返しロールバックできます。指定したセーブポイントより前に作成されたセーブポイントも残ります。

- 指定したセーブポイント以降に取得されたすべての表と行のロックの解除。セーブポイント後にロックされた行へのアクセスを要求した他のトランザクションは、コミットまたはロールバックされるまで待つ必要があります。行を要求していない他のトランザクションは、すぐに行の要求およびアクセスができます。

インダウト・トランザクションの制限事項: インダウト・トランザクションは、セーブポイントまで手動でロールバックできません。

FORCE句

FORCEを指定すると、インダウト分散トランザクションを手動でロールバックできます。このトランザクションは、ローカル・トランザクションIDまたはグローバル・トランザクションIDを含むstringで識別されます。このトランザクションのIDを確認する場合は、データ・ディクショナリ・ビューDBA_2PC_PENDINGを問い合せます。

FORCE句を指定したROLLBACK文では、指定したトランザクションのみがロールバックされます。この文は、現行のトランザクションには影響しません。

関連項目:
分散トランザクションおよびインダウト・トランザクションのロールバックの詳細は、『Oracle Database管理者ガイド』を参照してください。

例

ロールバック・トランザクションの例: 次の文は、現行のトランザクション全体をロールバックします。

ROLLBACK;

次の文は、現行のトランザクションをセーブポイントbanda_salにロールバックします。

ROLLBACK TO SAVEPOINT banda_sal;

前述の例の詳細は、「セーブポイントの作成例」を参照してください。

次の文は、インダウト分散トランザクションを手動でロールバックします。

ROLLBACK WORK
FORCE '25.32.87';

19 SQL文: SAVEPOINTからUPDATE

この章では、次のSQL文について説明します。

- 「SAVEPOINT」

- 「SELECT」

- SET CONSTRAINT[S]

- SET ROLE

- SET TRANSACTION

- TRUNCATE CLUSTER

- TRUNCATE TABLE

- UPDATE

SAVEPOINT

用途

SAVEPOINT文を使用すると、後でロールバックできるシステム変更番号(SCN)の名前を作成できます。

関連項目:

- セーブポイントの詳細は、『Oracle Database概要』を参照してください。

- トランザクションのロールバックの詳細は、「ROLLBACK」を参照してください。

- 現行トランザクションの特性の設定については、「SET TRANSACTION」を参照してください。

前提条件

ありません。

構文

savepoint::=

セマンティクス

savepoint

作成するセーブポイントの名前を指定します。

同一トランザクション内のセーブポイント名は、区別する必要があります。同じ識別子のセーブポイントを作成した場合、最初のセーブポイントは消去されます。セーブポイントを作成した後は、処理の継続、作業のコミット、トランザクション全体のロールバックまたはセーブポイントまでのロールバックを実行できます。

例

セーブポイントの作成例: 次の文は、サンプル表hr.employeesのBandaとGreeneの給与を更新するために、部門の給与合計が314,000ドルを超えていないことを確認してから、Greeneの給与を再入力します。

UPDATE employees
SET salary = 7000
WHERE last_name = 'Banda';
SAVEPOINT banda_sal;

UPDATE employees
SET salary = 12000
WHERE last_name = 'Greene';
SAVEPOINT greene_sal;

SELECT SUM(salary) FROM employees;

ROLLBACK TO SAVEPOINT banda_sal;

UPDATE employees
SET salary = 11000
WHERE last_name = 'Greene';

COMMIT;

SELECT

用途

SELECT文または副問合せを使用すると、1つ以上の表、オブジェクト表、ビュー、オブジェクト・ビューまたはマテリアライズド・ビューからデータを取り出すことができます。

SELECT文の結果(またはその一部)が既存のマテリアライズド・ビューと同じ場合、そのマテリアライズド・ビューをSELECT文で指定した1つ以上の表のかわりに使用できます。この置き換えを、クエリー・リライトといいます。これが行われるのは、コスト最適化が有効であり、かつQUERY_REWRITE_ENABLEDパラメータがTRUEに設定されている場合のみです。クエリー・リライトが行われたかどうかを特定するには、EXPLAIN PLAN文を使用します。

関連項目:

- 問合せおよび副問合せの概要は、第9章「SQL問合せおよび副問合せ」を参照してください。

- マテリアライズド・ビューおよびクエリー・リライトの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

- 「EXPLAIN PLAN」

追加トピック

- 前提条件

- 構文

- セマンティクス

- 例

前提条件

表またはマテリアライズド・ビューからデータを選択する場合、表またはマテリアライズド・ビューが自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、その表またはマテリアライズド・ビューに対するREADまたはSELECT権限が必要です。

ビューの実表から行を選択する場合、次の条件を2つとも満たしている必要があります。

- ビューが自分のスキーマ内に設定されている必要があります。設定されていないかぎり、ビューのREADまたはSELECT権限が必要です。

- ビューを含むスキーマの所有者が、実表に対するREADまたはSELECT権限を持っている。

READ ANY TABLEまたはSELECT ANY TABLEシステム権限を持っている場合、任意の表、マテリアライズド・ビューまたはビューの実表からデータを選択できます。

FOR UPDATE句を指定するには、前述の前提条件が次の例外とともに適用されます。READおよびREAD ANY TABLE権限が示されている場合、FOR UPDATE句を指定できません。

flashback_query_clauseを使用してOracleフラッシュバック問合せを発行する場合は、SELECT構文のリスト内のオブジェクトに対するREADまたはSELECT権限が必要です。さらに、SELECT構文のリスト内のオブジェクトに対するFLASHBACKオブジェクト権限またはFLASHBACK ANY TABLEシステム権限のいずれかが必要です。

構文

select::=

(subquery::=、for_update_clause ::=を参照)

subquery::=

(query_block::=、order_by_clause ::=、row_limiting_clause::=を参照)

query_block::=

(with_clause::=、select_list::=、table_reference::=、join_clause ::=、where_clause::=、hierarchical_query_clause ::=、group_by_clause ::=、model_clause ::=を参照)

with_clause::=

注意:
WITHキーワードは、単独では指定できません。最低限、plsql_declarationsまたはsubquery_factoring_clauseのどちらかを指定する必要があります。

plsql_declarations::=

subquery_factoring_clause::=

search_clause::=

cycle_clause::=

select_list::=

table_reference::=

(query_table_expression::=、flashback_query_clause ::=、pivot_clause::=、unpivot_clause::=、row_pattern_clause::=、containers_clause::=を参照)

flashback_query_clause ::=

query_table_expression::=

(subquery_restriction_clause::=、table_collection_expression ::=を参照)

pivot_clause::=

pivot_for_clause::=

pivot_in_clause::=

unpivot_clause::=

unpivot_in_clause::=

sample_clause ::=

partition_extension_clause::=

subquery_restriction_clause::=

table_collection_expression::=

containers_clause::=

join_clause ::=

(inner_cross_join_clause::=、outer_join_clause::=、cross_outer_apply_clause::=を参照)

inner_cross_join_clause::=

(table_reference::=を参照)

outer_join_clause::=

(query_partition_clause::=、outer_join_type::=、table_reference::=を参照)

query_partition_clause::=

outer_join_type::=

cross_outer_apply_clause::=

(table_reference::=、query_partition_clause::=を参照)

where_clause::=

hierarchical_query_clause ::=

(conditionには、第6章「条件」で説明した任意の条件を使用できます)

group_by_clause ::=

(rollup_cube_clause::=、grouping_sets_clause::=を参照)

rollup_cube_clause::=

(grouping_expression_list::=を参照)

grouping_sets_clause::=

(rollup_cube_clause::=、grouping_expression_list::=を参照)

grouping_expression_list::=

expression_list::=

model_clause ::=

(cell_reference_options::=、return_rows_clause::=、reference_model::=、main_model::=を参照)

cell_reference_options::=

return_rows_clause::=

reference_model::=

(model_column_clauses::=、cell_reference_options::=を参照)

main_model::=

(model_column_clauses::=、cell_reference_options::=、model_rules_clause::=を参照)

model_column_clauses::=

model_rules_clause::=

(model_iterate_clause::=、cell_assignment::=、order_by_clause ::=を参照)

model_iterate_clause::=

cell_assignment::=

(single_column_for_loop::=、multi_column_for_loop::=を参照)

single_column_for_loop::=

multi_column_for_loop::=

order_by_clause ::=

row_limiting_clause::=

for_update_clause ::=

row_pattern_clause::=

(row_pattern_partition_by::=、row_pattern_order_by::=、row_pattern_measures::=、row_pattern_rows_per_match::=、row_pattern_skip_to::=、row_pattern::=、row_pattern_subset_clause::=、row_pattern_definition_list::=を参照)

row_pattern_partition_by::=

row_pattern_order_by::=

row_pattern_measures::=

row_pattern_measure_column::=

row_pattern_rows_per_match::=

row_pattern_skip_to::=

row_pattern::=

row_pattern_term::=

row_pattern_factor::=

row_pattern_primary::=

row_pattern_permute::=

row_pattern_quantifier::=

row_pattern_subset_clause::=

row_pattern_subset_item::=

row_pattern_definition_list::=

row_pattern_definition::=

row_pattern_rec_func::=

(row_pattern_classifier_func::=、row_pattern_match_num_func::=、row_pattern_navigation_func::=、row_pattern_aggregate_func::=を参照)

row_pattern_classifier_func::=

row_pattern_match_num_func::=

row_pattern_navigation_func::=

(row_pattern_nav_logical::=、row_pattern_nav_physical::=、row_pattern_nav_compound::=を参照)

row_pattern_nav_logical::=

row_pattern_nav_physical::=

row_pattern_nav_compound::=

row_pattern_aggregate_func::=

セマンティクス

with_clause

with_clauseを使用すると、次の項目を定義できます。

- PL/SQLプロシージャおよびファンクション(plsql_declarations句を使用)

- 副問合せブロック(subquery_factoring_clauseを使用)

plsql_declarations

plsql_declarations句を使用すると、PL/SQLファンクションとプロシージャの宣言と定義ができます。その後、この句で指定したPL/SQLファンクションは、問合せ内で参照できます。この問合せに副問合せがある場合は、その副問合せでも参照できます。これらのファンクションの名前が名前解決されるときには、スキーマ・レベルのストアド・ファンクションよりも優先されます。

この句で指定した問合せがトップレベルのSELECT文ではない場合、その問合せを含むトップレベルのSQL文には、次のルールが適用されます。

- トップレベルの文がSELECT文の場合は、WITH plsql_declarations句またはWITH_PLSQLヒントが含まれている必要があります。

- トップレベルの文がDELETE文、MERGE文、INSERT文、またはUPDATE文の場合は、WITH_PLSQLヒントが含まれている必要があります。

WITH_PLSQLヒントを使用して実行できる操作は、文へのWITH plsql_declarations句の指定のみです。これは、オプティマイザ・ヒントではありません。

関連項目:

- function_declarationとprocedure_declarationの構文と制限事項については、『Oracle Database PL/SQL言語リファレンス』を参照してください。

- 「WITH句でのPL/SQLファンクションの使用例」

subquery_factoring_clause

subquery_factoring_clauseを使用すると、副問合せブロックに名前(query_name)を割り当てることができます。query_nameを指定することによって、問合せに複数存在する副問合せブロックを参照することができます。query_nameをインライン・ビューまたは一時表として扱うことによって、問合せが最適化されます。query_nameには、データベース・スキーマ・オブジェクトと同じネーミング規則および制限が適用されます。データベース・オブジェクト名の詳細は、「データベース・オブジェクトのネーミング規則」を参照してください。

query_nameの後に続く列別名およびAS句内にある複数の副問合せを区切る集合演算子は有効ですが、再帰的副問合せのファクタリングを必要とします。search_clauseおよびcycle_clauseは、再帰的副問合せのファクタリングに対してのみ有効ですが、必須ではありません。「再帰的副問合せのファクタリング」を参照してください。

最上位のSELECT文およびほとんどの副問合せでこの句を指定できます。問合せの名前は、主問合せおよび後続のすべての副問合せから参照できます。再帰的副問合せのファクタリングの場合、問合せの名前は、自身の問合せ名を定義する副問合せからも参照できます。

再帰的副問合せのファクタリング 自身の問合せ名を定義する副問合せからsubquery_factoring_clauseが自身のquery_nameを参照する場合、そのsubquery_factoring_clauseは再帰的であるといいます。再帰的subquery_factoring_clauseには、2つの問合せブロック(1つ目のアンカー・メンバーおよび2つ目の再帰的メンバー)が含まれている必要があります。アンカー・メンバーは、再帰的メンバーの前に指定する必要があり、このメンバーはquery_nameを参照できません。アンカー・メンバーは、集合演算子UNION ALL、UNION、INTERSECTまたはMINUSによって結合された1つ以上の問合せブロックで構成できます。再帰的メンバーは、アンカー・メンバーの後に指定し、query_nameの参照は1回のみにする必要があります。UNION ALL集合演算子を使用して、再帰的メンバーをアンカー・メンバーに結合する必要があります。

WITH query_nameの後に続く列別名の数、およびアンカーのSELECT構文のリストと再帰的問合せブロックの数は同じである必要があります。

再帰的メンバーには、次の要素を含めることができません。

- DISTINCTキーワードまたはGROUP BY句

- model_clause

- 集計ファンクション。ただし、SELECT構文のリスト内には分析ファンクションを含めることができます。

- query_nameを参照する副問合せ。

- query_nameを右側の表として参照する外部結合。

search_clause SEARCH句を使用すると、行の順序付けを指定できます。

- 子の行が戻される前に兄弟の行を戻す必要がある場合は、BREADTH FIRST BYを指定します。

- 兄弟の行が戻される前に子の行を戻す必要がある場合は、DEPTH FIRST BYを指定します。

- 兄弟の行は、BYキーワードの後にリストされる列によって順序付けされます。

- SEARCHキーワードの後に続くc_aliasリストには、query_nameに対する列別名のリストからの列名を含める必要があります。

- ordering_columnは、問合せ名の列リストに自動的に追加されます。query_nameから選択する問合せは、ordering_columnにORDER BYを含めて、SEARCH句によって指定された順序で行を戻すことができます。

cycle_clause CYCLE句を使用すると、再帰内に繰り返しのマークを付けられます。

- CYCLEキーワードの後に続くc_aliasリストには、query_nameに対する列別名のリストからの列名を含める必要があります。Oracle Databaseは、これらの列を使用して繰返しを検出します。

- cycle_valueおよびno_cycle_valueは、長さが1の文字列です。

- 繰返しが検出されると、繰返しを引き起こしている行に対してcycle_mark_c_aliasによって指定されている繰返しマーク列に、cycle_valueとして指定されている値が設定されます。その後、この行への再帰は停止します。つまり、問題の行については、その子の行の検索は行われませんが、繰返しが発生していない行については、検索が継続されます。

- 繰返しが検出されない場合、no_cycle_valueとして指定されているデフォルト値が繰返しマーク列に設定されます。

- この繰返しマーク列は、query_nameの列リストに自動的に追加されます。

- 祖先の行のいずれかの繰返し列に同じ値がある行は、繰返しを形成するとみなされます。

CYCLE句を指定しない場合に、繰返しが検出されると、再帰的WITH句はエラーを戻します。この場合、再帰的メンバーのWHERE句で参照されるquery_nameの列別名リストのすべての列について、祖先の行のいずれかに同じ値がある行は繰返しを形成します。

副問合せのファクタリングの制限事項: この句には、次の制限事項があります。

- subquery_factoring_clauseは、1つのSQL文内に1つのみ指定できます。subquery_factoring_clauseで定義したquery_nameは、そのsubquery_factoring_clause内の後続の任意の名前付き問合せブロックで使用できます。

- 集合演算子を指定した複合問合せの場合、その問合せを構成する各問合せではquery_nameを使用できませんが、各問合せのFROM句ではquery_nameを使用できます。

- query_nameに対する列別名のリストには重複した名前を指定できません。

- ordering_columnの名前は、cycle_mark_c_aliasとは異なる名前を使用する必要があります。

- ordering_columnおよび繰返しマーク列には、query_nameに対する列別名のリストに存在する名前を使用することはできません。

関連項目:

- インライン・ビューの詳細は、『Oracle Database概要』を参照してください。

- 「副問合せのファクタリング例:」

- 「再帰的副問合せのファクタリング例:」

hint

文の実行計画を選択する場合に、オプティマイザに指示を与えるためのコメントを指定します。

関連項目:
ヒントの構文および説明については、「ヒント」を参照してください。

DISTINCT | UNIQUE

DISTINCTまたはUNIQUEを指定すると、選択された重複行の1行のみを戻すことができます。これらの2つのキーワードは同義です。重複行とは、SELECT構文のリスト中のそれぞれの式で一致する値を持つ行のことです。

DISTINCTおよびUNIQUE問合せの制限事項: このタイプの問合せには、次の制限事項があります。

- DISTINCTまたはUNIQUEを指定する場合、SELECT構文のリスト中の式すべての総バイト数は、データ・ブロックのサイズからオーバーヘッド分を引いたサイズに制限されます。このサイズは、初期化パラメータDB_BLOCK_SIZEによって指定されます。

- select_listにLOB列が含まれている場合、DISTINCTは指定できません。

ALL

ALLを指定すると、重複行を含め、選択されたすべての行を戻すことができます。デフォルトはALLです。

select_list

select_listでは、データベースから取り出す列を指定できます。

*(全列ワイルド・カード)

全列ワイルド・カード(アスタリスク)を指定すると、疑似列とINVISIBLE列を除いて、FROM句に指定されているすべての表、ビューまたはマテリアライズド・ビューのすべての列を選択できます。列は、表、ビューまたはマテリアライズド・ビューの*_TAB_COLUMNSデータ・ディクショナリ・ビューのCOLUMN_IDによって指定されている順序で戻されます。

ビューやマテリアライズド・ビューではなく表から選択する場合、ALTER TABLE SET UNUSED文によってUNUSEDのマークが付けられた列は選択されません。

関連項目:
「ALTER TABLE」、「単純問合せの例:」、および「DUAL表からの選択例:」を参照してください。

query_name.*

query_nameの後にピリオドおよびアスタリスクを指定すると、指定した副問合せブロックのすべての列を選択できます。query_nameには、subquery_factoring_clauseですでに指定されている副問合せブロック名を指定します。select_listでquery_nameを指定するには、subquery_factoring_clauseを指定する必要があります。select_listでquery_nameを指定するには、query_table_expression(FROM句)でもquery_nameを指定する必要があります。

table.* | view.* | materialized view.*

オブジェクト名の後にピリオドおよびアスタリスクを指定すると、指定した表、ビューまたはマテリアライズド・ビューのすべての列を選択できます。オブジェクトの作成時に指定された順序で列の集合が戻されます。2つ以上の表、ビューまたはマテリアライズド・ビューの行を選択する問合せを結合といいます。

他のユーザーのスキーマの表、ビューまたはマテリアライズド・ビューから選択する場合には、スキーマ修飾子を使用します。schemaを指定しない場合、この表、ビューおよびマテリアライズド・ビューは自分のスキーマ内にあるとみなされます。

関連項目:
「結合」

t_alias.*

相関名(別名)の後にピリオドとアスタリスクを指定すると、同じ副問合せのFROM句にその相関名が指定されているオブジェクトからのすべての列を選択できます。オブジェクトは、表、ビュー、マテリアライズド・ビューまたは副問合せのいずれかです。オブジェクトの作成時に指定された順序で列の集合が戻されます。2つ以上のオブジェクトの行を選択する問合せを結合といいます。

expr

選択する情報を表す式を指定します。リスト中の列が含まれている表、ビューまたはマテリアライズド・ビューがFROM句でschema名で指定されている場合のみ、その列名をschema名で指定できます。オブジェクト型のメンバー・メソッドを指定するときは、メソッドが引数を取らない場合でも、カッコを使用するメソッド名に従う必要があります。

関連項目:
「順序値の選択例:」

c_alias 列式の別名を指定します。この別名は、結果セットの列のヘッダーで使用されます。ASキーワードはオプションです。別名によって、問合せ中にSELECT構文のリストの項目名を効果的に変更できます。問合せにおいて、別名はorder_by_clauseで使用できますが、他の句では使用できません。

関連項目:

- 複数のマテリアライズド・ビューの問合せで、UNION ALL演算子とともにexpr AS c_alias構文を使用する場合の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

- exprの構文については、「SQL式」を参照してください。

SELECT構文のリストの制限事項: SELECT構文のリストには、次の制限事項があります。

- この文にgroup_by_clauseも指定している場合、このSELECT構文のリストには次の式のみ指定できます。

- 定数

- 集計ファンクション、USERファンクション、UIDファンクションおよびSYSDATEファンクション

- group_by_clauseに指定されているものと同じ式。group_by_clauseが副問合せの中にある場合、その副問合せのSELECT構文のリストにあるすべての列が副問合せのGROUP BY列と対応する必要があります。SELECT構文のリストおよびトップレベル問合せまたは副問合せのGROUP BY列が対応しない場合、その文ではORA-00979が発生します。

- グループ内のすべての行が同じ値に評価される前述の式を伴っている式

- 結合内のキー保存表が1つのみの場合、結合ビューからROWIDを選択することができます。表のROWIDがビューのROWIDになります。

関連項目:
キー保存表の詳細は、『Oracle Database管理者ガイド』を参照してください。

- 複数の表に同じ名前の列があり、FROM句で結合を指定した場合、表の名前または表の別名でその列名を修飾する必要があります。

FROM句

FROM句を指定すると、どのオブジェクトからデータを選択するかを指定できます。

query_table_expression

query_table_expression句を使用すると、副問合せブロック、表、ビュー、マテリアライズド・ビュー、パーティションまたはサブパーティションの識別、またはオブジェクトを識別する副問合せの指定を行うことができます。副問合せブロックを指定するには、副問合せブロック名(query_name)をsubquery_factoring_clauseで指定している必要があります。

関連項目:
「副問合せの使用例:」

ONLY ONLY句は、ビューのみに適用されます。FROM句のビューが階層に属し、サブビューの行を含めない場合は、ONLY句を使用します。

LATERAL LATERALを指定して、LATERALインライン・ビューとしてsubqueryを指定します。LATERALインライン・ビュー内では、そのLATERALインライン・ビューの左側に現れる表を、問合せのFROM句で指定できます。この左相関はsubquery (SELECT句、FROM句、WHERE句など)内のどこにでも、任意のネスト・レベルで指定できます。

LATERALの制限事項: LATERALインライン・ビューには、次の制限事項が適用されます。

- LATERALを指定すると、pivot_clause句、またはunpivot_clause句が指定できなくなります。また、table_reference句にパターンを指定できなくなります。

- LATERALインライン・ビューにquery_partition_clauseが含まれていて、このビューが結合句の右側になる場合、その結合句には左側の表への左相関を含めることができません。ただし、表への左相関は、左側の表でない場合はFROM句の左側に含めることができます。

- LATERALインライン・ビューには、右外部結合または完全外部結合の最初の表への左相関を含めることができません。

関連項目:
「LATERALインライン・ビューの使用例」

flashback_query_clause

flashback_query_clauseを使用すると、データに関連付けられた時間ディメンションに基づいて、表、ビューまたはマテリアライズド・ビューからデータを取得できます。

この句によってSQL駆動のフラッシュバックが実装されるため、次の項目を指定できます。

- 句VERSIONS BETWEEN { SCN | TIMESTAMP }またはVERSIONS AS OF { SCN | TIMESTAMP }を使用して、SELECT構文のリストに含まれるオブジェクトごとに、異なるシステム変更番号またはタイムスタンプを指定できます。また、セッション・レベルのフラッシュバックをDBMS_FLASHBACKパッケージを使用して実装できます。

- 句VERSIONS PERIOD FORまたはAS OF PERIOD FORを使用して、SELECT構文のリストに含まれるオブジェクトごとに有効期間を指定できます。また、セッション・レベルの有効期間フラッシュバックをDBMS_FLASHBACK_ARCHIVEパッケージを使用して実装できます。

フラッシュバック問合せを使用すると、行に対して行った変更の履歴を取り出すことができます。VERSIONS_XID疑似列を使用して、変更を行ったトランザクションの対応する識別子を取り出すことができます。また、Oracle Flashback Transaction Queryを発行して、特定の行バージョンを生成したトランザクションの情報を取り出すこともできます。これを行うには、特定のトランザクションIDをFLASHBACK_TRANSACTION_QUERYデータ・ディクショナリ・ビューで問い合せます。

VERSIONS BETWEEN { SCN | TIMESTAMP }

VERSIONS BETWEENを指定すると、問合せによって戻された行の複数のバージョンを取り出すことができます。2つのSCNまたは2つのタイムスタンプ値の間に存在する、行のすべてのコミット済バージョンが戻されます。最初に指定されたSCNまたはタイムスタンプは、2番目に指定されたSCNまたはタイムスタンプよりも前でなければなりません。戻された行には、削除後に再度挿入された行のバージョンが含まれます。

- VERSIONS BETWEEN SCN ...を指定すると、2つのSCNの間に存在する行のバージョンを取り出すことができます。どちらの式も、評価結果は数値でなければならず、評価結果がNULLであってはなりません。MINVALUEおよびMAXVALUEは、それぞれ使用可能な一番古いデータおよび最新のデータのSCNに解決されます。

- VERSIONS BETWEEN TIMESTAMP ...を指定すると、2つのタイムスタンプの間に存在する行のバージョンを取り出すことができます。どちらの式も、評価結果はタイムスタンプ値でなければならず、評価結果がNULLであってはなりません。MINVALUEおよびMAXVALUEは、それぞれ使用可能な一番古いデータおよび最新のデータのタイムスタンプに解決されます。

AS OF { SCN | TIMESTAMP } AS OFを指定すると、特定のシステム変更番号(SCN)またはタイムスタンプでの問合せによって戻された行の単一のバージョンを取り出すことができます。SCNを指定する場合、exprは数値に評価される必要があります。TIMESTAMPを指定する場合、exprはタイムスタンプ値に評価される必要があります。いずれの場合も、exprの評価結果がNULLであってはなりません。指定されたシステム変更番号または時刻に存在した行が戻されます。

Oracle Databaseでは、バージョン問合せ疑似列のグループを使用して、様々な行のバージョンに関する追加情報を取り出すことができます。詳細は、「バージョン問合せ疑似列」を参照してください。

両方の句を同時に使用する場合、AS OF句によって、SCNまたはデータベースが問合せを発行した時点が判断されます。VERSIONS句によって、AS OFで指定した時点を基準とした行のバージョンが判断されます。トランザクションが、BETWEENの最初の値より前に開始したり、AS OFで指定した時点より後に終了した場合は、行のバージョンとしてNULLが戻されます。

VERSIONS PERIOD FOR VERSIONS PERIOD FORを指定すると、特定の期間中に有効と見なされるかどうかに基づいて、tableから行を取り出すことができます。この句を使用するには、tableで時制有効性がサポートされている必要があります。

- valid_time_columnには、tableの有効期間ディメンション列の名前を指定します。

- 行が有効と見なされる期間を指定するには、BETWEEN句を使用します。どちらの式も、評価結果はタイムスタンプ値でなければならず、評価結果がNULLであってはなりません。MINVALUEは、tableの開始時間列に含まれる最も早い日付またはタイムスタンプに解決されます。MAXVALUEは、tableの終了時間列に含まれる最も遅い日付またはタイムスタンプに解決されます。

AS OF PERIOD FOR AS OF PERIOD FORを指定すると、特定の時点で有効と見なされるかどうかに基づいて、tableから行を取り出すことができます。この句を使用するには、tableで時制有効性がサポートされている必要があります。

- valid_time_columnには、tableの有効期間ディメンション列の名前を指定します。

- 行が有効と見なされる時点を指定するには、exprを使用します。この式の評価結果はタイムスタンプ値でなければならず、評価結果がNULLであってはなりません。

関連項目:

- 時制有効性の詳細は、『Oracle Database開発ガイド』を参照してください。

- 時制有効性をサポートするために表を構成する方法およびvalid_time_column、開始時間列および終了時間列に関する情報の詳細は、CREATE TABLE period_definitionを参照してください。

フラッシュバック問合せの注意事項 Oracle Databaseは、フラッシュバック問合せの実行時、他のタイプの問合せとは異なり、問合せ最適化を使用しない場合があります。ここで問合せ最適化を使用すると、パフォーマンスが低下する可能性があります。これは特に、階層問合せに複数のフラッシュバック問合せを指定した場合に発生します。

フラッシュバック問合せの制限事項: この問合せには、次の制限事項があります。

- 列式や副問合せをAS OF句の式で指定することはできません。

- AS OF句を指定する場合、for_update_clause句は指定できません。

- AS OF句は、マテリアライズド・ビューを定義する問合せの中では使用できません。

- 一時表、外部表またはクラスタの一部である表に対するフラッシュバック問合せでは、VERSIONS句を使用できません。

- ビューに対するフラッシュバック問合せではVERSIONS句を使用できません。ただし、ビューを定義する問合せには、VERSIONS構文を使用できます。

- すでにquery_nameがquery_table_expressionの中で指定されている場合は、flashback_query_clauseは指定できません。

関連項目:

- Oracleフラッシュ・バック問合せの詳細は、『Oracle Database開発ガイド』を参照してください。

- 「フラッシュバック問合せの使用例:」

- DBMS_FLASHBACKパッケージを使用するセッション・レベルのフラッシュバックの詳細は、『Oracle Database開発ガイド』および『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。

- トランザクション履歴の詳細は、『Oracle Database管理者ガイド』、および『Oracle Databaseリファレンス』のFLASHBACK_TRANSACTION_QUERYに関する説明を参照してください。

partition_extension_clause データを取り出す表のPARTITIONまたはSUBPARTITIONの名前を指定します。

レンジ・パーティション・データおよびリスト・パーティション・データでは、この句のかわりに、データの取出しをtableの1つ以上のパーティションに制限する条件をWHERE句に指定できます。Oracle Databaseは、この条件を解析して、そのパーティションからのデータのみをフェッチします。そのようなWHERE条件を、ハッシュ・パーティション・データに対して形成することは不可能です。

関連項目:
「パーティション表と索引の参照」および「パーティションからの行の選択例:」を参照してください。

dblink 表、ビューまたはマテリアライズド・ビューが存在するリモート・データベースのデータベース・リンクの完全名または部分名を指定します。このデータベースは、Oracle Databaseである必要はありません。

関連項目:

- データベース・リンクの参照方法の詳細は、「リモート・データベース内のオブジェクトの参照」を参照してください。

- 分散問合せの詳細は、「分散問合せ」および「分散問合せの使用例:」を参照してください。

dblinkを指定しない場合、その表、ビューまたはマテリアライズド・ビューは、ローカル・データベース内にあるものとみなされます。

データベース・リンクの制限事項: データベース・リンクには、次の制限事項があります。

- リモート表のユーザー定義型またはオブジェクトREFを問い合せることはできません。

- リモート表のANYTYPE型、ANYDATA型またはANYDATASET型の列を問い合せることはできません。

table | view | materialized view データを選択する表、ビューまたはマテリアライズド・ビューの名前を指定します。

sample_clause

sample_clauseを指定すると、表全体からではなく、表のランダムなサンプル・データから選択が行われます。

関連項目:
「サンプルの選択例:」

BLOCK BLOCKを指定すると、ランダムな行サンプリングのかわりに、ランダムなブロック・サンプリングを実行できます。

ブロック・サンプリングは、全表スキャン中または高速全索引スキャン中にのみ使用可能です。より効率的な実行パスが存在する場合、ブロック・サンプリングは実行されません。特定の表または索引に対するブロック・サンプリングを確実に実行する場合は、FULLまたはINDEX_FFSのヒントを使用します。

sample_percent sample_percentには、全体の行またはブロック数のうち、サンプルに入れる割合(%)を指定します。0.000001以上100未満の範囲の値を指定します。この割合は、各行(ブロック・サンプリングの場合は行の各クラスタ)が、サンプルの一部として選択される可能性を示します。sample_percentに指定した割合の行が表から正確に取り出されるわけではありません。

注意:

統計的に適切でない想定値でこの機能を使用した場合、不正確な、または望ましくない結果になります。

SEED seed_value この句を指定すると、今回の実行と次の実行で同じサンプルが戻されます。seed_valueには、0(ゼロ)から4294967295の整数を指定します。この句を省略した場合、戻されるサンプルは実行ごとに異なります。

sample_clauseの制限事項 SAMPLE句には、次の制限事項が適用されます。

- SAMPLE句は、DML文の副問合せの中では指定できません。

- SAMPLE句を問合せで指定できるのは、問合せの対象が実表、マテリアライズド・ビューのコンテナ表、またはキー保存であるビューである場合です。この句は、キー保存ではないビューに対しては指定できません。

subquery_restriction_clause subquery_restriction_clauseを使用すると、次のいずれかの方法で副問合せを制限できます。

WITH READ ONLY WITH READ ONLYを指定すると、表またはビューを更新禁止にできます。

WITH CHECK OPTION WITH CHECK OPTIONを指定すると、副問合せに含まれない行を生成する表またはビューの変更を禁止できます。この句をDML文の副問合せ内で使用する場合、FROM句内の副問合せには指定できますが、WHERE句内の副問合せには指定できません。

CONSTRAINT constraint CHECK OPTION制約の名前を指定します。この識別子を省略した場合は、Oracleによって自動的にSYS_Cnという形式の制約名が割り当てられます(nはデータベース内で制約名を一意にするための整数)。

関連項目:
「WITH CHECK OPTION句の使用例:」

table_collection_expression

table_collection_expressionを使用すると、問合せおよびDML操作で、collection_expression値を表として扱うことができます。collection_expressionには、副問合せ、列、ファンクションまたはコレクション・コンストラクタのいずれかを指定できます。その形式にかかわらず、集合値(ネストした表型またはVARRAY型の値)を戻す必要があります。このようなコレクションの要素抽出プロセスをコレクション・ネスト解除といいます。

TABLEコレクション式を親表と結合する場合は、オプションのプラス(+)には大きな意味があります。+を指定すると、その2つの外部結合が作成され、コレクション式がNULLの場合でも、外部表の行が問合せで戻されるようになります。

注意:
以前のリリースのOracleでは、collection_expressionが副問合せの場合、table_collection_expressionをTHE subqueryと表現していました。現在、このような表現方法は非推奨になっています。

collection_expressionは、FROM句で左側に定義された表の列を参照できます。これを左相関といいます。左相関はtable_collection_expressionのみで行われます。その他の副問合せは、その副問合せ以外で定義された列を参照することはできません。

オプションの(+)を使用すると、コレクションがNULLまたは空である場合、すべてのフィールドにNULLが設定された行をtable_collection_expressionが戻すように指定できます。この(+)はcollection_expressionが左相関を使用する場合にのみ有効です。結果は、外部結合の結果と似ています。

UPDATEまたはDELETE操作で副問合せのWHERE句に(+)構文を使用する場合は、副問合せのFROM句に2つの表を指定する必要があります。副問合せに結合が存在しないかぎり、外部結合構文は無視されます。

関連項目:

- 「外部結合」

- 「表のコレクション例:」および「コレクションのネスト解除例:」を参照してください。

t_alias

相関名(表、ビュー、マテリアライズド・ビューまたは問合せを評価するための副問合せの別名)を指定します。SELECT構文のリストがオブジェクト型属性またはオブジェクト型メソッドを参照する場合、この別名が必要になります。相関名は、相関問合せ内で最も頻繁に使用されます。表、ビューまたはマテリアライズド・ビューを参照する問合せでは、この別名を参照する必要があります。

関連項目:
「相関副問合せの使用例:」

pivot_clause

pivot_clauseを使用すると、行を列に変換し、変換処理中にデータを集計するクロス集計問合せを記述できます。ピボット演算の出力には、最初のデータセットよりも多くの列と少ない行が含まれています。pivot_clauseでは、次の手順が実行されます。

1. pivot_clauseの先頭で指定されている集計ファンクションが計算されます。集計ファンクションは、複数の値を戻すようにGROUP BY句を指定する必要がありますが、pivot_clauseには、明示的なGROUP BY句が含まれていません。かわりに、暗黙的なGROUP BYが実行されます。暗黙的なグループ化は、pivot_clauseで参照されていないすべての列、およびpivot_in_clauseで指定されている値セットに基づいています。複数の集計ファンクションを指定する場合、集計ファンクションの1つを除くすべてに別名を指定する必要があります。

2. 列のグループ化および手順1で計算された集計値は、次のクロス集計出力を生成するように構成されています。

1. 最初に、pivot_clauseで参照されていないすべての暗黙的なグループ化列が出力されます。

2. pivot_in_clauseの値に対応する新しい列。各集計値がクロス集計の適切な新しい列に移動します。XMLキーワードを指定した場合は、結果は新しい列1つだけとなり、データは1つのXML文字列として表現されます。データベースは、新しい列ごとに名前を生成します。集計ファンクションの別名を指定しない場合、データベースは、集計値を移動する新しい列ごとの名前としてピボット列値を使用します。集計ファンクションの別名を指定する場合、データベースは、ピボット列名、アンダースコア(_)、集計ファンクション別名を連結して集計値を移動する新しい列ごとの名前を生成します。生成された列名が列名の最大長を超える場合、ORA-00918エラーが戻されます。この問題を回避するには、ピボット列見出しまたは集計ファンクションあるいはその両方に短い別名を指定します。

pivot_clauseの副次句のセマンティクスは、次のとおりです。

XML オプションのXMLキーワードは、問合せのXML出力を生成します。XMLキーワードを指定すると、pivot_in_clauseには、副問合せまたはワイルド・カード・キーワードANYを含めることができます。副問合せおよびANYワイルド・カードは、pivot_in_clause値が事前にわかっていない場合に有効です。XML出力では、ピボット列の値が実行時に評価されます。pivot_in_clauseで式を使用して明示的なピボット値を指定する場合は、XMLを指定することができません。

XML出力が生成される際、集計ファンクションが各ピボット値に適用され、データベースによって、値とメジャーのすべてのペアのXML文字列を含むXMLTypeの列が戻されます。

expr ピボット列の定数値への評価を行う式を指定します。オプションで、各ピボット列値の別名を指定できます。別名がない場合は、列ヘッダーが引用識別子となります。

subquery subqueryは、XMLキーワードとともにのみ使用されます。subqueryを指定すると、subqueryによって検出されたすべての値がピボットに使用されます。出力は、XML以外のピボット問合せによって戻されるクロス集計書式とは異なります。pivot_in_clauseで指定されている複数の列のかわりに、subqueryでは、XML文字列の列が1つ生成されます。各行のXML文字列は、その行の暗黙的なGROUP BY値に対応する集計データを保持します。入力データに対応する行がない場合でも、各出力行のXML文字列には、subqueryによって検出されたすべてのピボット値が含まれています。

subqueryは、ピボット問合せの実行時に、一意の値リストを戻します。subqueryが一意の値を戻さない場合、Oracle Databaseによってランタイム・エラーが生成されます。問合せが一意の値を戻すかどうかがわからない場合は、subqueryにDISTINCTキーワードを使用します。

ANY ANYキーワードは、XMLキーワードとともにのみ使用されます。ANYキーワードは、ワイルド・カードとして機能し、subqueryと同様に動作します。出力は、XML以外のピボット問合せによって戻されるクロス集計書式とは異なります。pivot_in_clauseで指定されている複数の列のかわりに、ANYキーワードでは、XML文字列の列が1つ生成されます。各行のXML文字列は、その行の暗黙的なGROUP BY値に対応する集計データを保持します。ただし、subqueryを指定した場合と比較すると、ANYワイルド・カードでは、各出力行について、行に対応する入力データで検出されたピボット値のみを含むXML文字列が生成されます。

関連項目:
PIVOTおよびUNPIVOTの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』および「PIVOTおよびUNPIVOTの使用例:」を参照してください。

unpivot_clause

unpivot_clauseは、列を行に変換します。

- INCLUDE | EXCLUDE NULLS句を使用すると、NULL値の行を含めるか除外するかを選択できます。INCLUDE NULLSを指定すると、NULL値の行もアンピボット操作の対象となり、EXCLUDE NULLSを指定するとNULL値の行は戻り値のセットから除外されます。この句を省略した場合は、アンピボット操作からNULLが除外されます。

- columnには、sales_quantityなどのメジャー値を保持する各出力列の名前を指定します。

- pivot_for_clauseには、四半期または製品などの記述子値を保持する各出力列の名前を指定します。

- unpivot_in_clauseには、名前がpivot_for_clauseの出力列の値となる入力データ列を指定します。これらの入力データ列には、Q1、Q2、Q3、Q4など、カテゴリ値を指定する名前が含まれています。任意指定のAS句を使用すると、入力データ列名を、出力列内の指定したliteral値にマッピングできます。

アンピボット操作は、複数の値列を単一の列に変更します。このため、値列のすべてのデータ型は、数値、文字などの同じデータ型グループに属している必要があります。

- すべての値列がCHARの場合、アンピボットされる列はCHARになります。値列がVARCHAR2の場合、アンピボットされる列はVARCHAR2になります。

- すべての値列がNUMBERの場合、アンピボットされる列はNUMBERになります。値列がBINARY_DOUBLEの場合、アンピボットされる列はBINARY_DOUBLEになります。BINARY_DOUBLEの値列はないが、いずれかの値列がBINARY_FLOATの場合、アンピボットされる列はBINARY_FLOATになります。

containers_clause

CONTAINERS句は、マルチテナント・コンテナ・データベース(CDB)で有益です。この句を使用すると、CDBのすべてのコンテナ間で指定された表またはビューのデータを問い合せることができます。

この句を発行するには、ルートに接続された共通ユーザーであり、表またはビューがルートおよびすべてのPDBに存在し、表またはビューが自分のスキーマ内にある必要があります。schemaを指定する必要はありませんが、指定した場合は自分のスキーマを指定する必要があります。

問合せは、ルートおよびすべてのオープン状態になっているPDB (RESTRICTEDモードでオープン状態になっているPDBは除きます)の表またはビューのすべての行を戻します。問合せ対象の表またはビューにCON_ID列が含まれていない場合、問合せはCON_ID列を問合せ結果に追加し、与えられた行が表すデータがあるコンテナを識別します。

関連項目:
CONTAINERS句の詳細は、『Oracle Database管理者ガイド』を参照してください。

join_clause

適切なjoin_clause構文を使用すると、データが選択され、結合の一部となる表を識別できます。inner_cross_join_clauseを使用すると、内部結合またはクロス結合を指定できます。outer_join_clauseを使用すると、外部結合を指定できます。cross_outer_apply_clauseを使用すると、ANSI CROSS JOINまたは左相関のサポートを利用したANSI LEFT OUTER JOINを指定できます。

結合する行ソースが3つ以上ある場合は、カッコを使用してデフォルトの優先順位を無効にすることができます。たとえば、次のような構文があるとします。

SELECT ... FROM a JOIN (b JOIN c) ...

この場合、bとcが結合され、次にその結果とaが結合されます。

関連項目:
結合の詳細は、「結合」、「結合問合せの使用例:」、「自己結合の使用例:」、および「外部結合の使用例:」を参照してください。

inner_cross_join_clause

内部結合は、結合条件を満たす行のみを戻します。

INNER INNERを指定すると、内部結合を明示的に指定できます。

JOIN JOINキーワードを使用すると、結合の実行を明示的に示すことができます。この構文を使用すると、WHERE句の結合で使用されている、カンマで区切られた表の式を、FROM句の結合構文に置き換えることができます。

ON condition ON句を使用すると、結合条件を指定できます。これによって、WHERE句の検索またはフィルタ条件とは分離して結合条件を指定できます。

USING (column) 両方の表で同じ名前の列同士を等価結合する場合、USING column句に使用する列を指定します。両方の表で同じ名前の列同士を結合する場合のみ、この句を使用できます。この句の中では、列名を表の名前および別名で修飾しないでください。

CROSS CROSSキーワードは、クロス結合を実行することを示します。クロス結合とは、2つの関係(リレーション)のクロス積を生成するものであり、実質的にはカンマ区切りのOracle Database表記法と同じです。

NATURAL NATURALキーワードは、自然結合を実行することを示します。この句のセマンティクスの詳細は、「NATURAL」を参照してください。

outer_join_clause

外部結合は、結合条件を満たすすべての行と、結合条件を満たす他方の表の行を除いた、一方の表のすべての行を戻します。指定可能な外部結合は、結合の両側にtable_reference構文を使用した従来の外部結合と、いずれかの側にquery_partition_clauseを使用したパーティション化された外部結合の2種類です。パーティション化された外部結合は、内部表の各パーティションと外部表の間で結合が行われるという点を除いて、従来の外部結合と同じです。この形式の結合では、対象のディメンションに沿って、選択的に疎データをより密にできます。このプロセスはデータの稠密化といいます。

query_partition_clause query_partition_clauseを使用すると、パーティション化された外部結合を定義できます。このような結合は、問合せによって戻されたパーティションに外部結合を適用し、従来の外部結合構文を拡張します。PARTITION BY句で指定した各式に対する行のパーティションが作成されます。問合せの各パーティションの行は、PARTITION BY式に対して同じ値を持ちます。

query_partition_clauseは、外部結合のいずれかの側で使用できます。パーティション化された外部結合の結果は、パーティション化された結果セットの各パーティションと結合の反対側の表との外部結合のUNIONになります。この形式の結果は、疎データの欠損の補完に役立つため、分析計算が簡単になります。

この句を省略した場合、表の式全体(table_referenceに指定したすべてのもの)が単一のパーティションとして扱われるため、従来型の外部結合となります。

分析ファンクションでquery_partition_clauseを使用するには、構文の上位ブランチ(カッコなし)を使用します。この句をモデルの問合せ(model_column_clauses内)またはパーティション化された外部結合(outer_join_clause内)で使用するには、構文の下位ブランチ(カッコ付き)を使用します。

パーティション化された外部結合の制限事項: パーティション化された外部結合には、次の制限事項があります。

- query_partition_clauseは、結合の右側または左側に指定できますが、両方に指定することはできません。

- パーティション化された完全外部結合(FULL)は指定できません。

- ON句を使用して外部結合にquery_partition_clauseを指定した場合、ON条件内には副問合せを指定できません。

関連項目:
「パーティション化された外部結合の使用例:」

NATURAL NATURALキーワードは、自然結合を実行することを示します。自然結合は、2つの表の間で同じ名前のすべての列に基づきます。2つの表から関連する列の値が等しい行が選択されます。同じ名前の2つの列のデータ型の間に互換性がない場合は、エラーが発生します。自然結合で使用する列を指定する場合は、表の名前または別名で列名を修飾しないでください。

自然結合またはクロス結合の表の組合せが不明瞭な場合があります。たとえば、次のような結合構文があるとします。

a NATURAL LEFT JOIN b LEFT JOIN c ON b.c1 = c.c1

この例は、次のどちらにも解釈できます。

a NATURAL LEFT JOIN (b LEFT JOIN c ON b.c1 = c.c1)
(a NATURAL LEFT JOIN b) LEFT JOIN c ON b.c1 = c.c1

このような不明瞭さをなくすため、カッコを使用して結合する表の組合せを明確にしてください。このようなカッコがないと、左から右へ表が組み合せられ、左の結合が使用されます。

自然結合の制限事項: LOB列、ANYTYPE列、ANYDATA列、ANYDATASET列またはコレクション列は、自然結合の一部として指定できません。

outer_join_type 実行する外部結合の種類を指定します。

- RIGHTを指定すると、右側外部結合が実行されます。

- LEFTを指定すると、左側外部結合が実行されます。

- FULLを指定すると、完全な外部結合または両側外部結合が実行されます。内部結合に加え、内部結合の結果に戻されない両方の表からの行は、保持され、NULLで拡張されます。

- RIGHT、LEFTまたはFULLの後にオプションのOUTERキーワードを指定し、外部結合の実行を明示的に示すことができます。

ON condition ON句を使用すると、結合条件を指定できます。これによって、WHERE句の検索またはフィルタ条件とは分離して結合条件を指定できます。

ON condition句の制限事項: NATURAL外部結合を使用してこの句を指定することはできません。

USING column USING句を含む外部結合の場合、問合せによって単一列が戻されます。この単一列は、結合内の一致する2つの列が結合したものです。この結合(coalesce)は、次のように機能します。

COALESCE (a, b) = a if a NOT NULL, else b.

したがって、次のことがいえます。

- 左側外部結合では、FROM句内の左側の表から共通するすべての列値が戻されます。

- 右側外部結合では、FROM句内の右側の表から共通するすべての列値が戻されます。

- 完全な外部結合では、結合された両方の表から共通するすべての列値が戻されます。

USING column句の制限事項: USING column句には、次の制限事項があります。

- この句の中では、列名を表の名前および別名で修飾しないでください。

- LOB列またはコレクション列は、USING column句で指定できません。

- NATURAL外部結合を使用してこの句を指定することはできません。

関連項目:

- 外部結合に関するその他の規則および制限事項については、「外部結合」を参照してください。

- パーティション化された外部結合およびデータの稠密化の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

- 「外部結合の使用例:」

cross_outer_apply_clause

この句を使用すると、ANSI CROSS JOINまたは左相関のサポートを利用したANSI LEFT OUTER JOINを実行できます。APPLYキーワードの右側には、table_referenceまたはcollection_expressionを指定できます。table_referenceには、表、インライン・ビューまたはTABLEコレクション式を指定できます。collection_expressionには、副問合せ、列、ファンクションまたはコレクション・コンストラクタのいずれかを指定できます。その形式にかかわらず、集合値(ネストした表型またはVARRAY型の値)を戻す必要があります。table_referenceまたはcollection_expressionは、FROM句でAPPLYキーワードの左側に定義された表の列を参照できます。これを左相関といいます。

- CROSS APPLYを指定すると、ANSI CROSS JOINを実行できます。結合の左側にある表の行のうち、table_referenceまたはcollection_expressionから結果セットを生成する行のみが返されます。

- OUTER APPLYを指定すると、ANSI LEFT OUTER JOINを実行できます。結合の左側にある表の行がすべて返されます。table_referenceまたはcollection_expressionから結果を生成しない行は、対応する列内でNULL値を保持します。

cross_outer_apply_clauseの制限事項 table_referenceには、LATERALインライン・ビューを指定できません。

関連項目:
CROSS APPLYおよびOUTER APPLY結合の使用例

where_clause

WHERE条件を指定すると、選択する行を1つ以上の条件を満たす行のみに制限できます。conditionには、有効なSQL条件を指定します。

この句を省略した場合、FROM句に指定されている表、ビューまたはマテリアライズド・ビューのすべての行が戻されます。

注意:
この句がパーティション表またはパーティション索引のDATE列を参照している場合、データベースは、次の条件でのみパーティション・プルーニングを実行します。

- TO_DATEファンクションで4桁書式マスクを使用して年を完全に指定した表または索引パーティションを作成した場合

- TO_DATEファンクションで2または4桁書式マスクを使用して問合せのwhere_clauseに日付を指定した場合。

関連項目:

- conditionの構文については、第6章「条件」を参照してください。

- 「パーティションからの行の選択例:」

hierarchical_query_clause

hierarchical_query_clauseを使用すると、階層順序で行を選択できます。

階層問合せを含むSELECT文では、SELECT構文のリスト内のLEVEL疑似列を使用できます。LEVELは、ルート・ノードには1を、ルート・ノードの子であるノードには2を、孫であるノードには3を戻します(以下同様)。階層問合せによって戻されるレベルの数値は、使用可能なユーザー・メモリーによって制限されます。

Oracleは次のように階層問合せを処理します。

- 最初に、結合(指定されている場合)が、FROM句で指定されているか、またはWHERE句述語で指定されているかが評価されます。

- CONNECT BY条件が評価されます。

- 残りのWHERE句述語が評価されます。

この句を指定する場合、ORDER BYおよびGROUP BYを指定すると、CONNECT BY結果の階層順序が破棄されるため、これらの句のどちらも指定しないでください。同じ親の兄弟である行を順序付ける場合は、ORDER SIBLINGS BY句を使用します。

関連項目:
階層問合せの詳細は、「階層問合せ」および「LEVEL疑似列の使用例:」を参照してください。

START WITH句

階層問合せのルートとして使用される行を識別する場合の条件を指定します。conditionには、第6章「条件」で説明した任意の条件を使用できます。Oracle Databaseでは、この条件を満たすすべての行がルートとして使用されます。この句を省略した場合、表内のすべての行がルート行として使用されます。

CONNECT BY句

階層の親/子の行の関連を識別する条件を指定します。conditionには、第6章「条件」で説明した任意の条件を使用できます。ただし、親である行を参照するためのPRIOR演算子を使用する必要があります。

関連項目:

- LEVELの詳細は、第3章「疑似列」を参照してください。

- 階層問合せの概要は、「階層問合せ」を参照してください。

- 「階層問合せの例」

group_by_clause

GROUP BY句を指定すると、選択した行を各行のexprの値に基づいてグループ化し、各グループのサマリー情報を1行戻すことができます。この句にCUBEまたはROLLUP拡張要素を指定した場合、標準グループ化の他に超集合グループ化が生成されます。

GROUP BY句の式には、SELECT構文のリストに指定されている列であるかどうかにかかわらず、FROM句の表、ビューおよびマテリアライズド・ビューの列を指定できます。

GROUP BY句は行をグループ化しますが、結果セットの順序は保証しません。グループ化の順序付けを行うには、ORDER BY句を使用します。

NLS_SORTパラメータがBINARY以外に設定され、NLS_COMPパラメータがLINGUISTICに設定されている場合、NLS_SORTで指定される言語定義に従って式の値が言語的に比較されて、値が等しく同じグループに属するかどうかが判断されます。GROUP BYの文字値が言語的に比較される場合、文字値はまず照合キーに変換されてから、RAW値のように比較されます。照合キーは、NLSSORTファンクションによって戻されるものと同じ値であり、「NLSSORT」で説明されているものと同じ制限事項があります。これらの制限事項により、照合キーの生成に使用された接頭辞に違いがない場合、その他の値に違いがあるとしても、2つの値は言語的に等しいものとしてグループ化されることがあります。

関連項目:

- データを集計するSQLグループ化構文の詳細および例については、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

- この句の例については、「GROUP_ID」、「GROUPING」および「GROUPING_ID」を参照してください。

- 「GROUP BY句の使用例:」

ROLLUP simple_grouping_clauseのROLLUP操作を使用すると、選択した行をGROUP BYで指定した式n、n-1、n-2、... 0の最初の値に基づいてグループ化し、各グループのサマリー情報を1行戻すことができます。ROLLUP操作をSUMファンクションとともに使用すると、小計値を出力できます。ROLLUPをSUMとともに使用すると、最も詳細なレベルの小計から総計までが生成されます。COUNTなどの集計ファンクションは、他の種類の超集合の出力に使用できます。

たとえば、simple_grouping_clauseのROLLUP句に式を3つ指定した場合(n=3)、操作の結果はn+1=3+1=4グループになります。

最初のn式の値でグループ化した行を標準行、その他を超集合行といいます。

関連項目:
マテリアライズド・ビューでROLLUPを使用する場合の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

CUBE CUBE操作をsimple_grouping_clauseの中で指定すると、選択された行は、指定された式のすべての可能な組合せの値に基づいてグループ化されます。グループごとに1つのサマリー情報行が戻されます。CUBE操作を使用すると、クロス集計値を出力できます。

たとえば、simple_grouping_clauseのCUBE句に式を3つ指定した場合(n=3)、操作の結果は2n = 2^3 = 8グループになります。n式の値でグループ化した行を標準行、その他を超集合行といいます。

関連項目:

- マテリアライズド・ビューでCUBEを使用する場合の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

- 「GROUP BY CUBE句の使用例:」

GROUPING SETS GROUPING SETSは、データを複数にグループ化するGROUP BY句をさらに拡張したものです。これによって、不要な集計が排除され、効率的に集計できるようになります。必要なグループを指定すると、データベースがCUBEまたはROLLUPによって生成された集計のすべてを実行する必要がなくなります。GROUPING SETS句で指定したすべてのグループ化が計算され、UNION ALL操作で個々のグループ化の結果が組み合されます。UNION ALLは、結果セットが重複行を含むことを許可します。

GROUP BY句では、様々な方法で式を組み合せることができます。

- 複合列を指定するには、カッコで列をグループ化します。データベースは、ROLLUP操作またはCUBE操作の計算でこれらを1つの単位として処理します。

- グルーピング・セットの連結を指定するには、複数のグルーピング・セット、ROLLUP操作およびCUBE操作をカンマで区切って指定すると、データベースによってこれらが結合されて1つのGROUP BY句になります。結果は、各グルーピング・セットからのグループ化のクロス積です。

関連項目:
「GROUPING SETS句の使用例:」

HAVING句

HAVING句を使用すると、指定したconditionがTRUEであるグループの行のみを戻すように制限できます。この句を省略した場合、すべてのグループのサマリー行が戻されます。

where_clauseおよびhierarchical_query_clauseの後に、GROUP BYおよびHAVINGを指定します。GROUP BYおよびHAVING句を両方指定する場合は、どちらを先に指定してもかまいません。

関連項目:
「HAVING条件の使用例:」

GROUP BY句の制限事項: この句には、次の制限事項があります。

- LOB列、ネストした表またはVARRAYをexprの一部として指定できません。

- 式には、スカラー副問合せ式を除くすべての形式が可能です。

- group_by_clauseがオブジェクト型列を参照する場合、問合せはパラレル化されません。

model_clause

model_clauseを使用すると、選択した行を多次元配列として表示して、その配列内のセルにランダムにアクセスできます。model_clauseを使用すると、一連のセル割当て(ルールと呼ばれます)を指定しておき、このルールによって個々のセルやセル範囲に対する計算を実行できます。このルールの操作の対象は問合せの結果であり、データベース表が更新されることはありません。

問合せでmodel_clauseを使用する場合、SELECT句およびORDER BY句は、model_column_clausesで定義された列のみを参照する必要があります。

関連項目:

- exprの構文については、「SQL式」を、conditionの構文については、第6章「条件」を参照してください。

- 詳細および例は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

- 「MODEL句の例:」

main_model

main_model句を使用すると、選択した行を多次元配列内で表示する方法および配列内の各セルに適用するルールを定義できます。

model_column_clauses

model_column_clausesを使用すると、問合せの列を、パーティション列、ディメンション列およびメジャー列の3つのグループに定義して分類できます。exprには、列、定数、ホスト変数、単一行ファンクション、集計ファンクションまたはこれらを含む任意の式を指定できます。exprが列の場合、列の別名(c_alias)はオプションです。exprが列でない場合、列の別名は必須です。列の別名を指定する場合、別名を使用してmodel_rules_clause、SELECTリストおよび問合せORDER BY句の列を参照する必要があります。

PARTITION BY PARTITION BY句を使用すると、選択した行を列の値に基づいてパーティションに分割するために使用する列を指定できます。

DIMENSION BY DIMENSION BY句を使用すると、パーティション内で行を識別する列を指定できます。ディメンション列およびパーティション列の値は、行のメジャー列に対する配列の索引として使用されます。

MEASURES MEASURES句を使用すると、計算が実行可能な列を識別できます。個々の行のメジャー列は、パーティション列およびディメンション列の値を指定することによる参照および更新が可能なセルと同様に扱われます。

cell_reference_options

cell_reference_options句を使用すると、ルールでNULLまたは値なしを処理する方法および列の一意性を制約する方法を指定できます。

IGNORE NAV IGNORE NAVを指定すると、指定したデータ型のNULLまたは値なしに対して、次の値が戻されます。

- 数値データ型: 0(ゼロ)

- 日時データ型: 01-JAN-2000

- 文字データ型: 空の文字列

- その他のデータ型: NULL

KEEP NAV KEEP NAVを指定すると、NULLまたは値なしのセル値に対してNULLが戻されます。KEEP NAVはデフォルトです。

UNIQUE SINGLE REFERENCE UNIQUE SINGLE REFERENCEを指定すると、問合せの結果セット全体ではなく、ルールの右側の単一セルの参照のみが一意性をチェックされます。

UNIQUE DIMENSION UNIQUE DIMENSIONを指定すると、PARTITION BYおよびDIMENSION BYで指定した列が、問合せに対する一意キーであるかどうかが確認されます。UNIQUE DIMENSIONはデフォルトです。

model_rules_clause

model_rules_clauseを使用すると、更新するセルおよびこれらのセルを更新するルールを指定できます。オプションで、ルールを適用および処理する方法も指定できます。

各ルールは割当てを表し、左側と右側にわかれています。ルールの左側は、ルールの右側によって更新されるセルを識別します。ルールの右側は、ルールの左側で指定されたセルに割り当てられる値を評価します。

UPSERT ALL UPSERT ALLを使用すると、ルールの左側に位置参照と記号参照の両方があるルールに対してUPSERT動作が可能になります。UPSERT ALLルールが評価されると、次の手順が実行され、アップサートするセル参照のリストが作成されます。

1. セル参照のすべてのシンボリック述語を満たす既存のセルを検索します。

2. 記号参照があるディメンションのみを使用して、これらのセルの異なるディメンション値の組合せを検索します。

3. 位置参照によって指定されたディメンション値を持つ、これらの値の組合せのクロス積が実行されます。

UPSERT ALLのセマンティクスの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

UPSERT UPSERTを指定すると、ルールの左側で参照されるセルが多次元配列内に存在している場合、セルにルールが適用され、多次元配列内に存在しないセルに対しては新しい行が挿入されます。UPSERT動作は、ルールの左側で位置参照が使用され、単一セルが参照されている場合にのみ適用されます。UPSERTはデフォルトです。位置参照および単一セル参照の詳細は、「cell_assignment」を参照してください。

UPDATEおよびUPSERTは、個々のルールに同様に指定できます。特定のルールにUPDATEまたはUPSERTのいずれかを指定した場合、その指定はRULES句に指定したその他のオプションより優先されます。

UPSERT [ALL]およびUPDATEに関する注意:
UPSERT ALL、UPSERTまたはUPDATEルールに適切な条件が含まれていない場合は、別のタイプのルールに暗黙的に変換される場合があります。

- UPSERTルールに存在述語が含まれている場合、そのルールはUPDATEルールとして処理されます。

- UPSERT ALLルールには、その左側に少なくとも1つの存在述語と1つの修飾述語が必要です。存在述語がない場合は、UPSERTルールとして処理されます。修飾述語がない場合は、UPDATEルールとして処理されます。

UPDATE UPDATEを指定するとルールの左側で参照されるセルが多次元配列内に存在している場合、そのセルにルールが適用されます。セルが存在しない場合、割当ては無視されます。

AUTOMATIC ORDER AUTOMATIC ORDERを指定すると、依存順序に基づいてルールが評価されます。この場合、セルには値が1回のみ割り当てられます。

SEQUENTIAL ORDER SEQUENTIAL ORDERを指定すると、表示されている順序でルールが評価されます。この場合、セルには値が複数回割り当てられます。SEQUENTIAL ORDERはデフォルトです。

ITERATE ... [UNTIL] ITERATE ... [UNTIL]を使用すると、ルールを繰り返す回数を指定でき、さらに早期終了条件を指定することもできます。UNTILを囲むカッコの使用は任意です。

ITERATE ... [UNTIL]を指定した場合、ルールは表示されている順序で評価されます。model_rules_clauseでAUTOMATIC ORDERおよびITERATE ... [UNTIL]の両方が指定されている場合、エラーが戻されます。

cell_assignment

cell_assignment句は、ルールの左側に使用し、更新する1つ以上のセルを指定します。単一セルを参照するcell_assignmentは、単一セル参照といいます。複数のセルが参照される場合は、複数セル参照といいます。

model_clauseで定義したすべてのディメンション列は、cell_assignment句で修飾する必要があります。ディメンションは、記号参照または位置参照を使用して修飾できます。

記号参照は、dimension_column=constantなどのブール条件を使用して、単一のディメンション列を修飾します。位置参照では、DIMENSION BY句でディメンション列の位置が示されます。記号参照と位置参照の唯一の相違点は、NULLの処理です。

a[x=null,y=2000]のような単一セルの記号参照を使用すると、x=nullがFALSEと評価されるため、該当するセルは存在しません。ただし、a[null,2000]のような単一セルの位置参照を使用すると、null = nullがTRUEと評価されるため、xがNULL、yが2000のセルが該当します。単一セルの位置参照を使用すると、ディメンション列がNULLのセルを参照、更新および挿入できます。

ディメンション列の値を表す条件または式を指定するときは、記号参照と位置参照のどちらも使用できます。conditionに集計ファンクションやCVファンクションを含めることはできず、conditionが参照するのは単一のディメンション列でなければなりません。exprに副問合せを含めることはできません。モデル式の詳細は、「モデル式」を参照してください。

single_column_for_loop

single_column_for_loop句を使用すると、更新するセルの範囲を単一のディメンション列内で指定できます。

IN句を使用すると、ディメンション列の値を値のリストまたは副問合せとして指定できます。subqueryを使用するときは、次の制限事項があります。

- 相関問合せは使用できません。

- 10,000を超える行を戻すことはできません。

- WITH句で定義された問合せを使用できません。

FROM句を使用すると、ディメンション列の値の範囲を指定できます(範囲内の増分は不連続でもかまいません)。FROM句を使用できるのは、列のデータ型が、加算および減算をサポートするものである場合のみです。INCREMENTおよびDECREMENTの値は、正の値である必要があります。

オプションで、FROM句内でLIKE句を指定することができます。LIKE句のpatternは、単一のパターン一致文字%を含む文字列です。この文字は、実行時にFROM句の現在の増分値または減分値で置き換えられます。

FORループで使用されるディメンション以外のすべてのディメンションが単一セル参照に関係する場合は、式で新しい行を挿入できます。FORループによって生成されたディメンション値の組合せの数は、MODEL句の行制限(10,000)の計算に含まれます。

multi_column_for_loop

multi_column_for_loop句を使用すると、更新するセルの範囲を複数のディメンション列にまたがって指定できます。IN句を使用すると、ディメンション列の値を複数の値のリストまたは副問合せとして指定できます。subqueryを使用するときは、次の制限事項があります。

- 相関問合せは使用できません。

- 10,000を超える行を戻すことはできません。

- WITH句で定義された問合せを使用できません。

FORループで使用されるディメンション以外のすべてのディメンションが単一セル参照に関係する場合は、式で新しい行を挿入できます。FORループによって生成されたディメンション値の組合せの数は、MODEL句の行制限(10,000)の計算に含まれます。

関連項目:
MODEL句でFORループを使用する方法の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

order_by_clause

ORDER BY句を使用すると、ルールの左側のセルを評価する順序を指定できます。exprは、ディメンションまたはメジャー列に変換される必要があります。ORDER BY句を指定しない場合、DIMENSION BY句で指定した列の順序がデフォルトで使用されます。詳細は、「order_by_clause」を参照してください。

order_by_clause句の制限事項: モデル・ルールでORDER BY句を使用する場合には、次の制限があります。

- model_clause句のorder_by_clauseには、SIBLINGS、positionまたはc_aliasを指定できません。

- モデル・ルールの左側にこの句を指定し、右側にFORループも指定することはできません。

expr

ルールの右側で指定されているセルの値を表す式を指定します。exprに副問合せを含めることはできません。モデル式の詳細は、「モデル式」を参照してください。

return_rows_clause

return_rows_clauseを使用すると、選択されたすべての行を戻すか、モデル・ルールによって更新された行のみを戻すかどうかを指定できます。ALLはデフォルトです。

reference_model

reference_modelは、model_clause内から複数の配列にアクセスする必要がある場合に使用します。この句は、問合せの結果に基づいて、読取り専用の多次元配列を定義します。

reference_model句の副次句は、main_model句と同じセマンティクスを持ちます。model_column_clausesおよびcell_reference_optionsを参照してください。

reference_model句の制限事項: この句には、次の制限事項があります。

- PARTITION BY列を参照モデルに指定することはできません。

- 参照モデルの副問合せから外部副問合せの列を参照することはできません。

集合演算子: UNION、UNION ALL、INTERSECTおよびMINUS

集合演算子は、2つのSELECT文によって戻された行を1つの結果に結合します。それぞれのコンポーネント問合せで選択される列の数とデータ型は同じである必要がありますが、列の長さは異なってもかまいません。結果セット内の列の名前は、集合演算子の前にあるSELECT構文のリスト内の式の名前です。

集合演算子で3つ以上の問合せを結合する場合、隣接する問合せが左から右へ評価されます。副問合せを囲むカッコは任意指定です。この評価順序を変更する場合、カッコを使用します。

これらの演算子の詳細および使用方法の制限事項については、「UNION [ALL]、INTERSECTおよびMINUS演算子」を参照してください。

order_by_clause

ORDER BY句を使用すると、文によって戻された行を順序付けることができます。order_by_clauseを指定しない場合、同じ問合せで取り出される行の順序が異なることがあります。

SIBLINGS SIBLINGSキーワードは、hierarchical_query_clause(CONNECT BY)を指定する場合のみに有効です。ORDER SIBLINGS BYは階層問合せ句で指定した任意の順序を保持し、兄弟関係にある階層にorder_by_clauseを適用します。

expr exprを使用すると、exprの値を基準にして行を順番付けることができます。式は、SELECT構文のリストの列、あるいはFROM句の表、ビューまたはマテリアライズド・ビューの列に基づきます。

position positionを使用すると、SELECT構文のリストの指定した位置にある式の値に基づいて行を順序付けることができます。positionには整数を指定する必要があります。

order_by_clauseには複数の式を指定できます。この場合、まず、最初の式の値に基づいて行がソートされます。次に、最初の式と同じ値を持つ行が2番目の式の値に基づいてソートされる、というように処理が行われます。NULL値は昇順では最後に、降順では先頭にソートされます。問合せ結果の順位付けの詳細は、「問合せ結果のソート」を参照してください。

ASC | DESC 昇順か降順かを指定します。デフォルトはASCです。

NULLS FIRST | NULLS LAST NULL値を含む戻された行が順序の最初にくるか、最後にくるかを指定します。

NULLS LASTは昇順のデフォルトで、NULLS FIRSTは降順のデフォルトです。

ORDER BY句の制限事項: ORDER BY句には次の制限事項があります。

- この文中でDISTINCT演算子を指定した場合、SELECT構文のリストに指定された列でないかぎり、この句は列を参照することはできません。

- order_by_clauseには最大255個の式を指定できます。

- LOB列、LONG列、LONG RAW列、ネストした表またはVARRAYを使用して順位付けすることはできません。

- 同じ文中でgroup_by_clauseを指定する場合、このorder_by_clauseは次の式に制限されます。

- 定数

- 集計ファンクション

- 分析ファンクション

- USERファンクション、UIDファンクションおよびSYSDATEファンクション

- group_by_clauseに指定されているものと同じ式

- グループ内のすべての行が同じ値に評価されるこれらの式を導出する式

関連項目:
「ORDER BY句の使用例:」

row_limiting_clause

row_limiting_clauseを使用すると、問合せから返される行数を制限できます。オフセットおよび戻される行の数または割合を指定できます。この句は、上位N番のレポートを実装するために使用できます。結果の一貫性を保つには、order_by_clauseを指定して、ソート順序を決定的にします。

OFFSET

この句を使用して、行制限が開始する前にスキップする行数を指定します。offsetは、数値または数値に評価される式にする必要があります。負の数値を指定すると、offsetは、0(ゼロ)とみなされます。NULLを指定した場合や、問合せから返される行数以上の数値を指定すると、返される行数は0(ゼロ)行になります。offsetに小数部が含まれているときには、小数部分が切り捨てられます。この句を省略すると、offsetは0(ゼロ)になり、行制限の開始が最初の行になります。

ROW | ROWS これらのキーワードは、区別なしに使用できますが、意味を明確にするために用意されています。

FETCH

この句を使用すると、返される行数または行の割合を指定できます。この句を指定しないと、offset + 1行目から始まるすべての行が返されます。

FIRST | NEXT これらのキーワードは、区別なしに使用できますが、意味を明確にするために用意されています。

rowcount | percent PERCENT rowcountを使用すると、返される行の行数を指定できます。rowcountは、数値または数値に評価される式にする必要があります。負の数値を指定すると、rowcountは、0(ゼロ)とみなされます。rowcountが、offset + 1行目から始まる使用可能な行数よりも大きいときには、すべての使用可能な行が返されます。rowcountに小数部が含まれているときには、小数部分が切り捨てられます。rowcountがNULLの場合、返される行数は0(ゼロ)行になります。

percent PERCENTを使用すると、選択された行の合計行数から、返される行数の割合を指定できます。percentは、数値または数値に評価される式にする必要があります。負の数値を指定すると、percentは、0(ゼロ)とみなされます。percentがNULLの場合、返される行数は0(ゼロ)行になります。

rowcountまたはpercent PERCENTを指定しないと、返される行数は1行になります。

ROW | ROWS これらのキーワードは、区別なしに使用できますが、意味を明確にするために用意されています。

ONLY | WITH TIES ONLYを指定すると、指定したとおりの行数または行数の割合が返されます。

WITH TIESを指定すると、最後にフェッチされた行と同じソート・キーを持つ追加の行が返されます。WITH TIESを指定するときには、order_by_clauseを指定する必要があります。order_by_clauseを指定しないと、追加の行は返されなくなります。

row_limiting_clauseの制限事項: この句には、次の制限事項が適用されます。

- この句は、for_update_clauseと同時には指定できません。

- この句を指定すると、順序疑似列のCURRVALまたはNEXTVALを、選択リストに含めることができなくなります。

- マテリアライズド・ビューは、それを定義する問合せにrow_limiting_clauseが含まれているときには、増分リフレッシュの対象にはなりません。

- 選択リストに同一の名前の列が含まれる場合にrow_limiting_clauseを指定すると、ORA-00918エラーが発生します。このエラーは、同一の名前の列が同じ表または別の表内のいずれにあっても発生します。この問題は、一意の列の別名を同一の名前の列に指定することで解決できます。

関連項目:
「行制限の例:」

for_update_clause

FOR UPDATE句を使用すると、選択した行がロックされ、トランザクションが終了するまでは他のユーザーがその行をロックまたは更新することはできなくなります。この句を指定できるのは、最上位のSELECT文の中のみであり、副問合せでは指定できません。

注意:
LOB値を更新する場合、そのLOBを含む行をロックしておく必要があります。行をロックする方法の1つに、埋込みSELECT ... FOR UPDATE文があります。この場合、プログラム言語の1つまたはDBMS_LOBパッケージを使用します。LOBの書込み前に行う行のロックの詳細は、『Oracle Database SecureFilesおよびラージ・オブジェクト開発者ガイド』を参照してください。

親表の行がロックされても、ネストした表の行はロックされません。ネストした表の行をロックする場合、ネストした表を明示的にロックする必要があります。

FOR UPDATE句の制限事項: この句には、次の制限事項があります。

- この句をDISTINCT演算子またはCURSOR式、集合演算子、group_by_clause、または集計ファンクションの構造体とともに指定することはできません。

- この句がロックした表は、同じ文で参照されたLONG列および順序と同じデータベース内にある必要があります。

関連項目:
「FOR UPDATE句の使用例:」

ビューでのFOR UPDATE句の使用: 一般に、この句はビューではサポートされていません。ただし、ビューでSELECT ... FOR UPDATE問合せを実行してもエラーが発生しない場合もあります。これは、問合せオプティマイザによってビューが問合せブロックに内部的にマージされ、内部で変換された問合せに対してSELECT ... FOR UPDATEが行われる場合です。この項では、ビューに対してFOR UPDATE句を使用できる場合とできない場合の例を示します。

- マージされたビューでのFOR UPDATE句の使用
次の条件が両方とも満たされている場合、マージされたビューに対してFOR UPDATE句を使用するとエラーが発生する可能性があります。

- ビューの基礎となる列が式である

- FOR UPDATE句が列リストに適用される

次の文は、ビューの基礎となる列が式ではないため、正常に実行されます。

SELECT employee_id FROM (SELECT * FROM employees)
FOR UPDATE OF employee_id;

次の文は、ビューの基礎となる列は式ですが、FOR UPDATE句が列リストに適用されないため、正常に実行されます。

SELECT employee_id FROM (SELECT employee_id+1 AS employee_id FROM employees)
FOR UPDATE;

次の文は、ビューの基礎となる列が式であり、FOR UPDATE句が列リストに適用されるため、失敗します。

SELECT employee_id FROM (SELECT employee_id+1 AS employee_id FROM employees)
FOR UPDATE OF employee_id;
*
Error at line 2:
ORA-01733: virtual column not allowed here

- マージされていないビューでのFOR UPDATE句の使用
ビューではFOR UPDATE句がサポートされていないため、ビューのマージを回避する句(NO_MERGEヒントなど)、ビューのマージを禁止するパラメータ、またはビューのマージを回避する問合せ構造を使用すると、ORA-02014エラーが発生します。

次の例では、GROUP BY文によってビューのマージが回避されるため、エラーが発生します。

SELECT avgsal
FROM (SELECT AVG(salary) AS avgsal FROM employees GROUP BY job_id)
FOR UPDATE;
FROM (SELECT AVG(salary) AS avgsal FROM employees GROUP BY job_id)
*
ERROR at line 2:
ORA-02014: cannot select FOR UPDATE from view with DISTINCT, GROUP BY, etc.

注意:
ビューのマージのメカニズムは複雑であるため、ビューではFOR UPDATE句を使用しないことをお薦めします。

OF ... column

OF ... column句を使用すると、結合内の特定の表またはビューで選択された行のみをロックできます。OF句の列は、どの表またはビューの行をロックするかを識別する場合にのみ使用します。指定する列は重要ではありません。ただし、列の別名ではなく、実際の列名を指定する必要があります。この句を省略した場合、問合せ内のすべての表の選択された行がロックされます。

NOWAIT | WAIT

NOWAITおよびWAIT句を使用すると、他のユーザーによってロックされている行をSELECT文がロックしようとする場合に処理する方法をデータベースに指示できます。

- NOWAITを指定すると、ロックされている場合に制御がすぐに戻ります。

- WAITを指定すると、行が使用可能になるまでinteger秒待機した後で制御が戻されます。

WAITおよびNOWAITのどちらも指定しない場合、行が使用可能になるまで待機した後でSELECT文の結果が戻されます。

SKIP LOCKED

SKIP LOCKEDは、競合するトランザクションを処理するもう1つの方法であり、対象の行のうち一部をロックするというものです。SKIP LOCKEDを指定すると、WHERE句で指定した行のロックが試行され、他のトランザクションによってすでにロックされている行はスキップされます。この機能は、Oracle Streams Advanced Queuingなどのマルチコンシューマ・キュー環境で使用するために設計されています。キュー・コンシューマは、他のコンシューマによってロックされた行はスキップして未ロックの行を取得できるので、他のコンシューマの操作が終了するまで待つ必要はなくなります。SKIP LOCKED機能を直接使用するかわりに、Oracle Streams Advanced Queuing APIを使用することをお薦めします。詳細は、Oracle Databaseアドバンスド・キューイング・ユーザーズ・ガイドを参照してください。

WAIT句およびSKIP LOCKED句の注意事項

WAITまたはSKIP LOCKEDを指定したときに排他モードで表がロックされていると、表のロックが解除されるまではSELECT文の結果が戻りません。WAITでは、指定されている待機時間にかかわらず、SELECT FOR UPDATE句がブロックされます。

row_pattern_clause

MATCH_RECOGNIZE句を使用すると、パターン一致を実行できます。この句は、table(行パターン入力表といいます)に含まれる一連の行のパターンを認識するために使用します。MATCH_RECOGNIZE句を使用する問合せの結果を行パターン出力表といいます。

MATCH_RECOGNIZEにより、次のタスクが実行可能になります。

- PARTITION BY句およびORDER BY句が含まれるデータを、論理的にパーティション化し、順序付けます。

- MEASURES句で、SQL問合せの他のパートで使用可能な式であるメジャーを定義します。

- PATTERN句を使用して、シークする行のパターンを定義します。これらのパターンでは、正規表現構文が使用されます。これは、強力かつ表現力の豊かな機能であり、ユーザーが定義するパターン変数に適用されます。

- 行をDEFINE句にある行パターン変数にマップするために必要な論理条件を指定します。

関連項目:

- パターン一致の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

- 「行のパターン一致の例」

row_pattern_partition_by

PARTITION BYを指定すると、行パターン入力表に含まれる行を、行パターン・パーティションという論理グループに分割できます。columnを使用して、1つ以上のパーティション化列を指定します。各パーティションは、パーティション化列の値と同じ値が設定された、行パターン入力表に含まれる行のセットで構成されています。

この句を指定した場合、一致はパーティション内から検出され、他のパーティションからは検出されません。この句を指定しなかった場合、行入力表のすべての行から1つの行パターン・パーティションが構成されます。

row_pattern_order_by

ORDER BYを指定すると、各行パターン・パーティション内の行を順序付けできます。columnを使用して、順序付けする1つ以上の列を指定します。複数の列を指定した場合、Oracle Databaseはまず、最初のcolumnにおける行の値に基づいて、それらの行をソートします。次に、最初の列と同じ値を持つ行が2番目のcolumnの値に基づいてソートされる、というように処理が行われます。Oracle Databaseは、昇順でソートされた他のすべての値の後にNULLを配置します。

この句を指定しなかった場合、row_pattern_clauseの結果は非決定的になるため、問合せを実行するたびに異なる結果が返される場合があります。

row_pattern_measures

MEASURES句を使用すると、1つ以上の行パターンのメジャー列を定義できます。行パターン出力表に含まれるこれらの列には、データ分析に役立つ値が含まれています。

row_pattern_measure_column句を使用して行パターンのメジャー列を定義する場合、そのパターン・メジャー式を指定します。列内の値は、一致が見つかるたびにパターン・メジャー式を評価することによって計算されます。

row_pattern_measure_column この句を使用すると、行パターンのメジャー列を定義できます。

- exprにはパターン・メジャー式を指定します。第5章「式」で説明されているように、パターン・メジャー式には次の要素のみを含めることができます。

- 定数: テキスト・リテラルおよび数値リテラル

- 行パターン入力表に含まれる任意の列の参照

- CLASSIFIER関数。行のマップ先であるプライマリ行パターン変数の名前を返します。詳細は、「row_pattern_classifier_func」を参照してください。

- MATCH_NUMBER関数。行パターン・パーティション内の行パターン一致の連番を返します。詳細は、「row_pattern_match_num_func」を参照してください。

- 行パターンのナビゲーション関数: PREV、NEXT、FIRSTおよびLAST。詳細は、「row_pattern_navigation_func」を参照してください。

- 行パターン集計関数: AVG、COUNT、MAX、MINまたはSUM。詳細は、「row_pattern_aggregate_func」を参照してください。

- c_aliasには、パターン・メジャー式の別名を指定します。Oracle Databaseは、行パターン出力表の列ヘッダーでこの別名を使用します。ASキーワードはオプションです。別名は、SELECT ... ORDER BY句など、問合せのその他の部分で使用できます。

row_pattern_rows_per_match

この句を使用すると、行パターン出力表に、各一致のサマリー・データまたは詳細データを含めるかどうかを指定できます。

- ONE ROW PER MATCHを指定すると、一致ごとに1つのサマリー行が生成されます。これはデフォルトです。

- ALL ROWS PER MATCHを指定すると、一致に複数の行が含まれる場合、その一致に含まれる行ごとに1つの出力行が生成されます。

row_pattern_skip_to

この句を使用すると、空以外の一致が見つかった後の行パターン一致を再開する場所を指定できます。

- AFTER MATCH SKIP TO NEXT ROWを指定すると、現在の一致の先頭行の次の行からパターン一致が再開されます。

- AFTER MATCH SKIP PAST LAST ROWを指定すると、現在の一致の最終行の次の行からパターン一致が再開されます。これはデフォルトです。

- AFTER MATCH SKIP TO FIRST variable_nameを指定すると、パターン変数variable_nameにマップされた先頭行からパターン一致が再開されます。variable_nameはDEFINE句で定義する必要があります。

- AFTER MATCH SKIP TO LAST variable_nameを指定すると、パターン変数variable_nameにマップされた最終行からパターン一致が再開されます。variable_nameはDEFINE句で定義する必要があります。

- AFTER MATCH SKIP TO variable_nameの動作は、AFTER MATCH SKIP TO LAST variable_nameと同じです。

関連項目:
AFTER MATCH SKIP句の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

PATTERN

PATTERN句を使用すると、一致する必要のあるパターン変数、そのパターン変数の一致順序、および各パターン変数に一致する必要のある行数を定義できます。

行パターン一致は、1つの行パターン・パーティション内で連続する行のセットで構成されます。一致の各行はそれぞれ1つのパターン変数にマップされます。行とパターン変数とのマッピングは、row_pattern句に指定された正規表現に準拠している必要があり、DEFINE句のすべての条件を満たす必要があります。

注意:
正規表現の概念と詳細についての説明は、このマニュアルでは対象外です。正規表現について十分に理解していない場合は、その他の資料を参照して理解しておくことをお薦めします。

PATTERNS句の正規表現で指定した要素の優先順位は、降順で次のとおりです。

- 行パターン要素(row_pattern_primary句で指定されます)

- 行パターン数量子(row_pattern_quantifier句で指定されます)

- 連結(row_pattern_term句で指定されます)

- 代替(row_pattern句で指定されます)

関連項目:
PATTERN句の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

row_pattern

この句を使用すると、行パターンを指定できます。行パターンは、次のいずれかの形式の正規表現です。

- 単一の行パターン用語
例: PATTERN(A)

- 行パターン、縦線および行パターン用語
例: PATTERN(A|B)

- 再帰的に構成された行パターン、縦線および行パターン用語
例: PATTERN(A|B|C)

この句内の縦線は、代替を表します。代替では、複数の使用可能な正規表現のリスト内の1つの正規表現に一致させます。代替項目は、指定された順序で優先されます。たとえば、PATTERN(A|B|C)を指定した場合、Oracle DatabaseはまずAとの一致を試みます。Aが一致しない場合は、Bとの一致を試みます。Bが一致しない場合は、Cとの一致を試みます。

row_pattern_term

この句を使用すると、行パターン用語を指定できます。行パターン用語の形式は、次のいずれかです。

- 単一の行パターン・ファクタ
例: PATTERN(A)

- 行パターン用語の後に行パターン・ファクタが続く形式。
例: PATTERN(A B)

- 再帰的に構成された行パターン用語の後に行パターン・ファクタが続く形式
例: PATTERN(A B C)

2番目と3番目の例で使用されている構文は、連結を表します。連結は、一致の対象であるパターン内の2つ以上の項目と、それらの一致順序をリストするために使用します。たとえば、PATTERN(A B C)を指定した場合、Oracle DatabaseはまずAとの一致を試みた後、一致した行を使用してBとの一致を試み、さらに一致した行を使用してCとの一致を試みます。A、BおよびCに一致した行のみが、行パターン一致に含まれます。

row_pattern_factor

この句を使用すると、行パターン・ファクタを指定できます。行パターン・ファクタは、row_pattern_primary句を使用して指定された行パターン要素と、row_pattern_quantifier句を使用して指定されたオプションの行パターン数量子で構成されます。

row_pattern_primary

この句を使用すると、行パターン要素を指定できます。表19-1に、有効な行パターン要素とその説明を示します。

表19-1 行パターン要素

行パターン要素

説明

variable_name

row_pattern_definition句で定義されたプライマリ・パターン変数名を指定します。row_pattern_subset_item句で定義された共用体パターン変数は指定できません。

$

$は、パーティションの最後の行の後の位置と一致します。この要素はアンカーです。アンカーは、行ではなく位置に関して機能します。

^

^は、パーティションの最初の行の前の位置と一致します。この要素はアンカーです。アンカーは、行ではなく位置に関して機能します。

( [row_pattern] )

row_patternは、一致の対象となる行パターンを指定するために使用します。空のパターン()は、空の行セットと一致します。

{- row_pattern -}

除外構文。row_patternは、ALL ROWS PER MATCHの出力から除外されるパターンの部分を指定するために使用します。

row_pattern_permute

row_pattern_permuteは、行パターン要素の順列であるパターンを指定するために使用します。この句のセマンティクスの詳細は、「row_pattern_permute」を参照してください。

row_pattern_permute

PERMUTE句を使用すると、指定された行パターン要素の順列であるパターンを表記できます。たとえば、PATTERN (PERMUTE (A, B, C))は、次のように、3つの行パターン要素A、BおよびCのすべての順列の代替と同じです。

PATTERN (A B C | A C B | B A C | B C A | C A B | C B A)

行パターン要素は辞書編集上で展開され、並べ替える各要素は他の要素からカンマで区切る必要があります。

関連項目:
順列の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

row_pattern_quantifier

この句を使用すると、行パターン数量子を指定できます。行パターン数量子は、一致で受け入れられる反復数を定義する後置演算子です。

行パターン数量子を強欲な数量子といい、適用されている正規表現で最大限のインスタンスの一致を試みます。例外は、接尾辞として疑問符(?)を持つ行パターン数量子であり、これらを最短一致数量子といいます。これらは、適用されている正規表現で最小限のインスタンスの一致を試みます。

表19-2は、有効な行パターン数量子と、それらが一致で受け入れる反復数を示しています。この表のnおよびmは、符号なし整数を表します。

表19-2 行パターン数量子

行パターン数量子

一致で受け入れられる反復数

*

0以上の反復(強欲)

*?

0以上の反復(最短一致)

+

1以上の反復(強欲)

+?

1以上の反復(最短一致)

?

0または1個の反復(強欲)

??

0または1個の反復(最短一致)

{n,}

n個以上の反復(n >= 0) (強欲)

{n,}?

n個以上の反復(n >= 0) (最短一致)

{n,m}

nからm個(これを含む)の間の反復(0 <= n <= m, 0 < m) (強欲)

{n,m}?

nからm個(これを含む)の間の反復(0 <= n <= m, 0 < m) (最短一致)

{,m}

0からm個(これを含む)の間の反復(m > 0) (強欲)

{,m}?

0からm個(これを含む)の間の反復(m > 0) (最短一致)

{n}?

n個の反復(n > 0)

関連項目:
行パターン数量子の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

row_pattern_subset_clause

SUBSET句を使用すると、1つ以上の共用体行パターン変数を指定できます。row_pattern_subset_item句を使用して、各共用体行パターン変数を宣言します。

次の句で、共用体行パターン変数を指定できます。

- MEASURES句: 行パターンのメジャー列の式内。つまり、row_pattern_measure_column句の式expr内です。

- DEFINE句: プライマリ・パターン変数を定義する条件内。つまり、row_pattern_definition句のcondition内です。

row_pattern_subset_item

この句を使用すると、それ自身の変数名を使って参照可能な複数のパターン変数のグループ化を作成できます。このグループ化を参照する変数名を、共用体行パターン変数といいます。

- 等号の左側にあるvariable_nameには、共用体行パターン変数の名前を指定します。

- 等号の右側には、カッコで括られた個別のプライマリ行パターン変数のカンマ区切りリストを指定します。このリストに共用体行パターン変数を含めることはできません。

関連項目:
共用体行パターン変数の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

DEFINE

DEFINE句を使用すると、1つ以上の行パターン定義を指定できます。行パターン定義は、行を特定のパターン変数にマップするために満たしている必要のある条件を指定します。

DEFINE句は実行中のセマンティクスのみをサポートします。

関連項目:

- DEFINE句の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

- 実行中のセマンティクスおよび最終セマンティクスの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

row_pattern_definition_list

この句を使用すると、1つ以上の行パターン定義を指定できます。

row_pattern_definition

この句を使用すると、行パターン定義を指定できます。行パターン定義には、行を特定のパターン変数にマップするために満たしている必要のある条件が含まれます。

- variable_nameには、パターン変数の名前を指定します。

- conditionには、第6章「条件」の説明に従って条件を指定しますが、次の追加事項があります。conditionには、row_pattern_navigation_func::=およびrow_pattern_aggregate_func::=によって記述された任意の関数を含めることができます。

row_pattern_rec_func

この句は、行パターン認識関数を指定できる、次の句で構成されます。

- row_pattern_classifier_func: この句を使用すると、CLASSIFIER関数を指定できます。この関数は、行のマップ先であるパターン変数の名前を値として持つ文字列を返します。

- row_pattern_match_num_func: この句を使用すると、MATCH_NUMBER関数を指定できます。この関数は、行パターン・パーティション内の一致の連番を表すスケール0(ゼロ)の数値を返します。

- row_pattern_navigation_func: この句を使用すると、行パターンのナビゲーション操作を実行する関数を指定できます。

- row_pattern_aggregate_func: この句を使用すると、行パターンのメジャー列の式、またはプライマリ・パターン変数を定義する条件で、集計関数を指定できます。

次の句で、行パターン認識関数を指定できます。

- MEASURES句: 行パターンのメジャー列の式内。つまり、row_pattern_measure_column句の式expr内です。

- DEFINE句: プライマリ・パターン変数を定義する条件内。つまり、row_pattern_definition句のcondition内です。

行パターン認識関数の動作は、この関数がMEASURES句とDEFINE句のどちらに指定されたかによって異なる場合があります。これらの詳細は、各句のセマンティクス内で説明されています。

row_pattern_classifier_func

CLASSIFIER関数は、行のマップ先である変数の名前を値として持つ文字列を返します。

- MEASURES句の場合:

- ONE ROW PER MATCHが指定された場合、問合せはMEASURES句の処理時に一致の最後の行を使用するため、CLASSIFIER関数は一致の最後の行のマップ先であるパターン変数の名前を返します。

- ALL ROWS PER MATCHが指定された場合、CLASSIFIER関数は、見つかった一致の行ごとに、行のマップ先であるパターン変数の名前を返します。

一致が空である場合、つまり一致に行が含まれない場合、CLASSIFER関数はNULLを返します。

- DEFINE句では、CLASSIFIER関数は現在行のマップ先であるプライマリ・パターン変数の名前を返します。

row_pattern_match_num_func

MATCH_NUMBER関数は、行パターン・パーティション内の一致の連番を表すスケール0(ゼロ)の数値を返します。

1つの行パターン・パーティション内の一致には、見つかった順に1から順次番号が付けられます。複数の行が一致した場合は、それらすべてに同じ一致番号が割り当てられます。行パターン・パーティション間では順序付けが継承されないため、一致の番号付は行パターン・パーティションごとに1から繰り返し開始されます。

- MEASURES句内の場合: MATCH_NUMBERを使用して、行パターン内の一致の連番を取得できます。

- DEFINE句内の場合: MATCH_NUMBERを使用して、一致番号に依存する条件を定義できます。

row_pattern_navigation_func

この句を使用すると、次の行パターンのナビゲーション操作を実行できます。

- row_pattern_nav_logical句のFIRSTおよびLAST関数を使用して、パターン変数にマップされる行のグループ内をナビゲートします。

- row_pattern_nav_physical句のPREVおよびNEXT関数を使用して、行パターン・パーティションに含まれるすべての行間をナビゲートします。

- row_pattern_nav_compound句を使用して、FIRSTまたはLAST関数をPREVまたはNEXT関数内にネストします。

row_pattern_nav_logical

この句を使用すると、FIRSTおよびLAST関数でオプションの論理オフセットを使用することによって、パターン変数にマップされた行のグループ内をナビゲートできます。

- FIRST関数は、式exprに指定されているパターン変数にマップされた行のグループの先頭行で評価されたときに、exprの値を返します。パターン変数に行がマップされていない場合、FIRST関数はNULLを返します。

- LAST関数は、式exprに指定されているパターン変数にマップされた行のグループの最終行で評価されたときに、exprの値を返します。パターン変数に行がマップされていない場合、LAST関数はNULLを返します。

- exprは、評価の対象となる式を指定するために使用します。1つ以上の行パターンの列参照が含まれている必要があります。複数の行パターンの列参照が含まれている場合、それらはすべて、同じパターン変数を参照している必要があります。

- オプションのoffsetは、パターン変数にマップされた行のセット内で論理オフセットを指定するために使用します。FIRST関数とともに指定した場合、先頭行から昇順で数えた行数がオフセットになります。LAST関数とともに指定した場合、最終行から降順で数えた行数がオフセットになります。デフォルトのオフセットは0です。
offsetには、負以外の整数を指定します。列や副問合せではなく、ランタイム定数(リテラル、バインド変数またはそれらを含む式)である必要があります。

パターン変数にマップされた行の数から1を引いた値以上の値をoffsetに指定した場合、この関数はNULLを返します。

FIRSTおよびLAST関数には、次のように実行中のセマンティクスまたは最終セマンティクスを指定できます。

- MEASURES句は、実行中のセマンティクスと最終セマンティクスをサポートします。実行中のセマンティクスは、RUNNINGによって指定できます。最終セマンティクスは、FINALによって指定できます。デフォルトはRUNNINGです。

- DEFINE句は、実行中のセマンティクスのみをサポートします。そのため、RUNNINGを指定したか省略したかにかかわらず、実行中のセマンティクスが使用されます。FINALは指定できません。

関連項目:

- FIRSTおよびLAST関数の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

- 実行中のセマンティクスおよび最終セマンティクスの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

row_pattern_nav_physical

この句を使用すると、PREVおよびNEXT関数でオプションの物理オフセットを使用することによって、行パターン・パーティション内のすべての行間をナビゲートできます。

- PREV関数は、パーティション内の前の行で評価されたときに、式exprの値を返します。パーティション内に前の行がない場合、PREV関数はNULLを返します。

- NEXT関数は、パーティション内の次の行で評価されたときに、式exprの値を返します。パーティション内に次の行がない場合、NEXT関数はNULLを返します。

- exprは、評価の対象となる式を指定するために使用します。1つ以上の行パターンの列参照が含まれている必要があります。複数の行パターンの列参照が含まれている場合、それらはすべて、同じパターン変数を参照している必要があります。

- オプションのoffsetは、パーティション内の物理オフセットを指定するために使用します。PREV関数とともに指定した場合、現在の行の前にある行数を表します。NEXT関数とともに指定した場合、現在の行の後にある行数を表します。デフォルトは1です。オフセットを0に指定した場合、現在の行が評価されます。
offsetには、負以外の整数を指定します。列や副問合せではなく、ランタイム定数(リテラル、バインド変数またはそれらを含む式)である必要があります。

PREVおよびNEXT関数は、常に実行中のセマンティクスを使用します。したがって、この句にはRUNNINGまたはFINALキーワードを指定できません。

関連項目:

- PREVおよびNEXT関数の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

- 実行中のセマンティクスおよび最終セマンティクスの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

row_pattern_nav_compound

この句を使用すると、row_pattern_nav_logical句をrow_pattern_nav_physical句内にネストできます。つまり、FIRSTまたはLAST関数をPREVまたはNEXT関数内にネストできます。まずrow_pattern_nav_logicalが評価された後、その結果がrow_pattern_nav_physical句に渡されます。

これらの句のセマンティクスの詳細は、「row_pattern_nav_logical」および「row_pattern_nav_physical」を参照してください。

関連項目:
FIRSTおよびLAST関数のPREVおよびNEXT関数内へのネストの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

row_pattern_aggregate_func

この句を使用すると、行パターンのメジャー列の式、またはプライマリ・パターン変数を定義する条件で、集計関数を使用できます。

aggregate_functionには、関数AVG、COUNT、MAX、MIN、SUMのいずれかを指定します。DISTINCTキーワードはサポートされていません。

集計関数には、次のように実行中のセマンティクスまたは最終セマンティクスを指定できます。

- MEASURES句は、実行中のセマンティクスと最終セマンティクスをサポートします。実行中のセマンティクスは、RUNNINGによって指定できます。最終セマンティクスは、FINALによって指定できます。デフォルトはRUNNINGです。

- DEFINE句は、実行中のセマンティクスのみをサポートします。そのため、RUNNINGを指定したか省略したかにかかわらず、実行中のセマンティクスが使用されます。FINALは指定できません。

関連項目:

- 集計関数の詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

- 実行中のセマンティクスおよび最終セマンティクスの詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

例

「WITH句でのPL/SQLファンクションの使用例:」

次の例では、PL/SQLファンクションget_domainをWITH句で宣言および定義します。get_domainファンクションは、URL文字列に含まれるドメイン名を返します。このファンクションでは、URL文字列はドメイン名の直前に"www"という接頭辞があり、ドメイン名は左右にあるドットで区切られていると仮定しています。SELECT文ではget_domainを使用して、oeスキーマのorders表から固有カタログのドメイン名を検出します。

WITH
FUNCTION get_domain(url VARCHAR2) RETURN VARCHAR2 IS
pos BINARY_INTEGER;
len BINARY_INTEGER;
BEGIN
pos := INSTR(url, 'www.');
len := INSTR(SUBSTR(url, pos + 4), '.') - 1;
RETURN SUBSTR(url, pos + 4, len);
END;
SELECT DISTINCT get_domain(catalog_url)
FROM product_information;
/

副問合せのファクタリング例: 次の文は、結合を含む初期問合せブロックに対する問合せの名前dept_costsおよびavg_costを作成し、主問合せの本体でその問合せの名前を使用します。

WITH
dept_costs AS (
SELECT department_name, SUM(salary) dept_total
FROM employees e, departments d
WHERE e.department_id = d.department_id
GROUP BY department_name),
avg_cost AS (
SELECT SUM(dept_total)/COUNT(*) avg
FROM dept_costs)
SELECT * FROM dept_costs
WHERE dept_total >
(SELECT avg FROM avg_cost)
ORDER BY department_name;

DEPARTMENT_NAME                DEPT_TOTAL
------------------------------ ----------
Sales                              304500
Shipping                           156400

再帰的副問合せのファクタリング例: 次の文は、従業員101に直接的または間接的に報告する従業員とそのレポート・レベルを表示します。

WITH
reports_to_101 (eid, emp_last, mgr_id, reportLevel) AS
(
SELECT employee_id, last_name, manager_id, 0 reportLevel
FROM employees
WHERE employee_id = 101
UNION ALL
SELECT e.employee_id, e.last_name, e.manager_id, reportLevel+1
FROM reports_to_101 r, employees e
WHERE r.eid = e.manager_id
)
SELECT eid, emp_last, mgr_id, reportLevel
FROM reports_to_101
ORDER BY reportLevel, eid;

EID EMP_LAST                      MGR_ID REPORTLEVEL
---------- ------------------------- ---------- -----------
101 Kochhar                          100           0
108 Greenberg                        101           1
200 Whalen                           101           1
203 Mavris                           101           1
204 Baer                             101           1
205 Higgins                          101           1
109 Faviet                           108           2
110 Chen                             108           2
111 Sciarra                          108           2
112 Urman                            108           2
113 Popp                             108           2
206 Gietz                            205           2

次の文は、従業員101に直接的または間接的に報告する従業員、レポート・レベル、および管理チェーンを表示します。

WITH
reports_to_101 (eid, emp_last, mgr_id, reportLevel, mgr_list) AS
(
SELECT employee_id, last_name, manager_id, 0 reportLevel,
CAST(manager_id AS VARCHAR2(2000))
FROM employees
WHERE employee_id = 101
UNION ALL
SELECT e.employee_id, e.last_name, e.manager_id, reportLevel+1,
CAST(mgr_list || ',' || manager_id AS VARCHAR2(2000))
FROM reports_to_101 r, employees e
WHERE r.eid = e.manager_id
)
SELECT eid, emp_last, mgr_id, reportLevel, mgr_list
FROM reports_to_101
ORDER BY reportLevel, eid;

EID EMP_LAST                      MGR_ID REPORTLEVEL MGR_LIST
---------- ------------------------- ---------- ----------- --------
101 Kochhar                          100           0  100
108 Greenberg                        101           1  100,101
200 Whalen                           101           1  100,101
203 Mavris                           101           1  100,101
204 Baer                             101           1  100,101
205 Higgins                          101           1  100,101
109 Faviet                           108           2  100,101,108
110 Chen                             108           2  100,101,108
111 Sciarra                          108           2  100,101,108
112 Urman                            108           2  100,101,108
113 Popp                             108           2  100,101,108
206 Gietz                            205           2  100,101,205

次の文は、従業員101の直接的または間接的な部下である従業員とそのレポート・レベルを表示します。これは、レポート・レベル1で停止します。

WITH
reports_to_101 (eid, emp_last, mgr_id, reportLevel) AS
(
SELECT employee_id, last_name, manager_id, 0 reportLevel
FROM employees
WHERE employee_id = 101
UNION ALL
SELECT e.employee_id, e.last_name, e.manager_id, reportLevel+1
FROM reports_to_101 r, employees e
WHERE r.eid = e.manager_id
)
SELECT eid, emp_last, mgr_id, reportLevel
FROM reports_to_101
WHERE reportLevel <= 1
ORDER BY reportLevel, eid;

EID EMP_LAST                      MGR_ID REPORTLEVEL
---------- ------------------------- ---------- -----------
101 Kochhar                          100           0
108 Greenberg                        101           1
200 Whalen                           101           1
203 Mavris                           101           1
204 Baer                             101           1
205 Higgins                          101           1

次の文は、管理レベルごとにインデントを挿入して、組織全体を表示します。

WITH
org_chart (eid, emp_last, mgr_id, reportLevel, salary, job_id) AS
(
SELECT employee_id, last_name, manager_id, 0 reportLevel, salary, job_id
FROM employees
WHERE manager_id is null
UNION ALL
SELECT e.employee_id, e.last_name, e.manager_id,
r.reportLevel+1 reportLevel, e.salary, e.job_id
FROM org_chart r, employees e
WHERE r.eid = e.manager_id
)
SEARCH DEPTH FIRST BY emp_last SET order1
SELECT lpad(' ',2*reportLevel)||emp_last emp_name, eid, mgr_id, salary, job_id
FROM org_chart
ORDER BY order1;

EMP_NAME                    EID     MGR_ID     SALARY JOB_ID
-------------------- ---------- ---------- ---------- ----------
King                        100                 24000 AD_PRES
Cambrault                 148        100      11000 SA_MAN
Bates                   172        148       7300 SA_REP
Bloom                   169        148      10000 SA_REP
Fox                     170        148       9600 SA_REP
Kumar                   173        148       6100 SA_REP
Ozer                    168        148      11500 SA_REP
Smith                   171        148       7400 SA_REP
De Haan                   102        100      17000 AD_VP
Hunold                  103        102       9000 IT_PROG
Austin                105        103       4800 IT_PROG
Ernst                 104        103       6000 IT_PROG
Lorentz               107        103       4200 IT_PROG
Pataballa             106        103       4800 IT_PROG
Errazuriz                 147        100      12000 SA_MAN
Ande                    166        147       6400 SA_REP
. . .

次の文は組織全体を表示し、管理レベルごとにインデントを挿入します(各レベルの順序はhire_dateによって決定します)。is_cycleの値がYに設定されるのは、その従業員のhire_dateと同じ値を持つマネージャが管理チェーン内の上位にいる場合です。

WITH
dup_hiredate (eid, emp_last, mgr_id, reportLevel, hire_date, job_id) AS
(
SELECT employee_id, last_name, manager_id, 0 reportLevel, hire_date, job_id
FROM employees
WHERE manager_id is null
UNION ALL
SELECT e.employee_id, e.last_name, e.manager_id,
r.reportLevel+1 reportLevel, e.hire_date, e.job_id
FROM dup_hiredate r, employees e
WHERE r.eid = e.manager_id
)
SEARCH DEPTH FIRST BY hire_date SET order1
CYCLE hire_date SET is_cycle TO 'Y' DEFAULT 'N'
SELECT lpad(' ',2*reportLevel)||emp_last emp_name, eid, mgr_id,
hire_date, job_id, is_cycle
FROM dup_hiredate
ORDER BY order1;

EMP_NAME                    EID     MGR_ID HIRE_DATE JOB_ID     IS_CYCLE
-------------------- ---------- ---------- --------- ---------- --------
King                        100            17-JUN-03 AD_PRES           N
De Haan                   102        100 13-JAN-01 AD_VP             N
Hunold                  103        102 03-JAN-06 IT_PROG           N
Austin                105        103 25-JUN-05 IT_PROG           N
. . .
Kochhar                   101        100 21-SEP-05 AD_VP             N
Mavris                  203        101 07-JUN-02 HR_REP            N
Baer                    204        101 07-JUN-02 PR_REP            N
Higgins                 205        101 07-JUN-02 AC_MGR            N
Gietz                 206        205 07-JUN-02 AC_ACCOUNT        Y
Greenberg               108        101 17-AUG-02 FI_MGR            N
Faviet                109        108 16-AUG-02 FI_ACCOUNT        N
Chen                  110        108 28-SEP-05 FI_ACCOUNT        N
. . .

次の文は、各マネージャの配下の従業員の人数をカウントします。

WITH
emp_count (eid, emp_last, mgr_id, mgrLevel, salary, cnt_employees) AS
(
SELECT employee_id, last_name, manager_id, 0 mgrLevel, salary, 0 cnt_employees
FROM employees
UNION ALL
SELECT e.employee_id, e.last_name, e.manager_id,
r.mgrLevel+1 mgrLevel, e.salary, 1 cnt_employees
FROM emp_count r, employees e
WHERE e.employee_id = r.mgr_id
)
SEARCH DEPTH FIRST BY emp_last SET order1
SELECT emp_last, eid, mgr_id, salary, sum(cnt_employees), max(mgrLevel) mgrLevel
FROM emp_count
GROUP BY emp_last, eid, mgr_id, salary
HAVING max(mgrLevel) > 0
ORDER BY mgr_id NULLS FIRST, emp_last;

EMP_LAST                  EID     MGR_ID     SALARY SUM(CNT_EMPLOYEES)   MGRLEVEL
------------------ ---------- ---------- ---------- ------------------ ----------
King                      100                 24000                106          3
Cambrault                 148        100      11000                  7          2
De Haan                   102        100      17000                  5          2
Errazuriz                 147        100      12000                  6          1
Fripp                     121        100       8200                  8          1
Hartstein                 201        100      13000                  1          1
Kaufling                  122        100       7900                  8          1
. . .

単純問合せの例: 次の文は、部門番号30の従業員表employeesの行を選択します。

SELECT *
FROM employees
WHERE department_id = 30
ORDER BY last_name;

次の文は、部門番号30の購買係を除くすべての従業員の名前、職種、給与および部門番号を選択します。

SELECT last_name, job_id, salary, department_id
FROM employees
WHERE NOT (job_id = 'PU_CLERK' AND department_id = 30)
ORDER BY last_name;

次の文は、FROM句の副問合せから、すべての従業員数と給与合計がすべての部門に対して占める割合を部門ごとに戻します。

SELECT a.department_id "Department",
a.num_emp/b.total_count "%_Employees",
a.sal_sum/b.total_sal "%_Salary"
FROM
(SELECT department_id, COUNT(*) num_emp, SUM(salary) sal_sum
FROM employees
GROUP BY department_id) a,
(SELECT COUNT(*) total_count, SUM(salary) total_sal
FROM employees) b
ORDER BY a.department_id;

パーティションからの行の選択例: FROM句にキーワードPARTITIONを指定することによって、パーティション表の1つのパーティションから行を選択できます。次のSQL文は、サンプル表sh.salesのsales_q2_2000パーティションへ別名を割り当て、行を取り出します。

SELECT * FROM sales PARTITION (sales_q2_2000) s
WHERE s.amount_sold > 1500
ORDER BY cust_id, time_id, channel_id;

次の文は、oe.orders表から、指定した日付より早い注文が含まれる行を選択します。

SELECT * FROM orders
WHERE order_date < TO_DATE('2006-06-15', 'YYYY-MM-DD');

サンプルの選択例: 次の問合せは、oe.orders表の注文数を推定します。

SELECT COUNT(*) * 10 FROM orders SAMPLE (10);

COUNT(*)*10
-----------
70

問合せでは推定値が戻されるため、実際の戻り値は問合せを行うたびに異なる場合があります。

SELECT COUNT(*) * 10 FROM orders SAMPLE (10);

COUNT(*)*10
-----------
80

次の問合せでは、前述の問合せにシード値を追加します。同じシード値では、常に同じ推定値が戻されます。

SELECT COUNT(*) * 10 FROM orders SAMPLE(10) SEED (1);

COUNT(*)*10
-----------
130

SELECT COUNT(*) * 10 FROM orders SAMPLE(10) SEED(4);

COUNT(*)*10
-----------
120

SELECT COUNT(*) * 10 FROM orders SAMPLE(10) SEED (1);

COUNT(*)*10
-----------
130

フラッシュバック問合せの使用例: 次の文は、サンプル表hr.employeesの現在の値を表示し、値を変更します。この例の目的はデモであるため、使用している時間隔が非常に短くなっています。実際の環境での時間隔は、これより長いのが一般的です。

SELECT salary FROM employees
WHERE last_name = 'Chung';

SALARY
----------
3800

UPDATE employees SET salary = 4000
WHERE last_name = 'Chung';
1 row updated.

SELECT salary FROM employees
WHERE last_name = 'Chung';

SALARY
----------
4000

更新前の値を確認するには、次のフラッシュバック問合せを使用します。

SELECT salary FROM employees
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '1' MINUTE)
WHERE last_name = 'Chung';

SALARY
----------
3800

過去の特定の期間における値を確認するには、次のバージョン・フラッシュバック問合せを使用します。

SELECT salary FROM employees
VERSIONS BETWEEN TIMESTAMP
SYSTIMESTAMP - INTERVAL '10' MINUTE AND
SYSTIMESTAMP - INTERVAL '1' MINUTE
WHERE last_name = 'Chung';

元の値に戻すには、フラッシュバック問合せを別のUPDATE文の副問合せとして使用します。

UPDATE employees SET salary =
(SELECT salary FROM employees
AS OF TIMESTAMP (SYSTIMESTAMP - INTERVAL '2' MINUTE)
WHERE last_name = 'Chung')
WHERE last_name = 'Chung';
1 row updated.

SELECT salary FROM employees
WHERE last_name = 'Chung';

SALARY
----------
3800

GROUP BY句の使用例: 次の文は、employees表の各部門について最低給与と最高給与を戻します。

SELECT department_id, MIN(salary), MAX (salary)
FROM employees
GROUP BY department_id
ORDER BY department_id;

次の文は、各部門の事務員について最高給与と最低給与を戻します。

SELECT department_id, MIN(salary), MAX (salary)
FROM employees
WHERE job_id = 'PU_CLERK'
GROUP BY department_id
ORDER BY department_id;

GROUP BY CUBE句の使用例: 部門および職種のすべての組合せについて、従業員数と平均年収を戻すには、サンプル表hr.employeesおよびhr.departmentsに次の問合せを発行します。

SELECT DECODE(GROUPING(department_name), 1, 'All Departments',
department_name) AS department_name,
DECODE(GROUPING(job_id), 1, 'All Jobs', job_id) AS job_id,
COUNT(*) "Total Empl", AVG(salary) * 12 "Average Sal"
FROM employees e, departments d
WHERE d.department_id = e.department_id
GROUP BY CUBE (department_name, job_id)
ORDER BY department_name, job_id;

DEPARTMENT_NAME                JOB_ID     Total Empl Average Sal
------------------------------ ---------- ---------- -----------
Accounting                     AC_ACCOUNT          1       99600
Accounting                     AC_MGR              1      144000
Accounting                     All Jobs            2      121800
Administration                 AD_ASST             1       52800
. . .
Shipping                       ST_CLERK           20       33420
Shipping                       ST_MAN              5       87360

GROUPING SETS句の使用例: 次の例は、指定した3つのグループで集計した販売の合計を示します。

- (channel_desc, calendar_month_desc, country_id)

- (channel_desc, country_id)

- (calendar_month_desc, country_id)

GROUPING SETS構文を指定しない場合、SQLはより複雑になり、問合せの効果は低くなります。たとえば、3つの個別の問合せを実行し、UNION演算を行うか、またはCUBE(channel_desc, calendar_month_desc, country_id)操作を指定した問合せを実行し、生成される8つのグループから5つを除去します。

SELECT channel_desc, calendar_month_desc, co.country_id,
TO_CHAR(sum(amount_sold) , '9,999,999,999') SALES$
FROM sales, customers, times, channels, countries co
WHERE sales.time_id=times.time_id
AND sales.cust_id=customers.cust_id
AND sales.channel_id= channels.channel_id
AND customers.country_id = co.country_id
AND channels.channel_desc IN ('Direct Sales', 'Internet')
AND times.calendar_month_desc IN ('2000-09', '2000-10')
AND co.country_iso_code IN ('UK', 'US')
GROUP BY GROUPING SETS(
(channel_desc, calendar_month_desc, co.country_id),
(channel_desc, co.country_id),
(calendar_month_desc, co.country_id) );

CHANNEL_DESC         CALENDAR COUNTRY_ID     SALES$
-------------------- -------- ----------     ----------
Internet             2000-09       52790        124,224
Direct Sales         2000-09       52790        638,201
Internet             2000-10       52790        137,054
Direct Sales         2000-10       52790        682,297
2000-09       52790        762,425
2000-10       52790        819,351
Internet                           52790        261,278
Direct Sales                       52790      1,320,497

関連項目:
これらのファンクションの詳細は、「GROUP_ID」、「GROUPING」および「GROUPING_ID」を参照してください。

階層問合せの例 CONNECT BY句を指定した次の問合せは、親である行のemployee_id値が子である行のmanager_id値と等しいという階層関係を定義します。

SELECT last_name, employee_id, manager_id FROM employees
CONNECT BY employee_id = manager_id
ORDER BY last_name;

次のCONNECT BY句では、PRIOR演算子がemployee_id値のみに適用されます。この条件を評価するために、データベースは親である行に対してはemployee_idの値を評価し、子である行に対してはmanager_id、salaryおよびcommission_pctのそれぞれの値を評価します。

SELECT last_name, employee_id, manager_id FROM employees
CONNECT BY PRIOR employee_id = manager_id
AND salary > commission_pct
ORDER BY last_name;

子である行を限定する場合、manager_idの値と親である行のemployee_idの値が等しく、salaryの値がcommission_pctの値より大きい必要があります。

HAVING条件の使用例: 次の文は、従業員の最低給与が$5,000未満の部門についての最高給与と最低給与を戻します。

SELECT department_id, MIN(salary), MAX (salary)
FROM employees
GROUP BY department_id
HAVING MIN(salary) < 5000
ORDER BY department_id;

DEPARTMENT_ID MIN(SALARY) MAX(SALARY)
------------- ----------- -----------
10        4400        4400
30        2500       11000
50        2100        8200
60        4200        9000

次の例は、HAVING句で相関副問合せを使用して、マネージャのいない部門および部門のないマネージャを結果セットから除外しています。

SELECT department_id, manager_id
FROM employees
GROUP BY department_id, manager_id HAVING (department_id, manager_id) IN
(SELECT department_id, manager_id FROM employees x
WHERE x.department_id = employees.department_id)
ORDER BY department_id;

ORDER BY句の使用例: 次の文は、employees表からすべての購買係のレコードを選択し、その給与によって降順にソートします。

SELECT *
FROM employees
WHERE job_id = 'PU_CLERK'
ORDER BY salary DESC;

次の文は、employees表から情報を選択し、最初に部門番号で昇順にソートした後、給与で降順にソートします。

SELECT last_name, department_id, salary
FROM employees
ORDER BY department_id ASC, salary DESC, last_name;

次の文は、前述のSELECT文と同じ情報を選択し、ORDER BY位置表記法を使用します。ここでは、まずdepartment_idで昇順に、次にsalaryで降順に、最後にlast_nameでアルファベット順に順序付けします。

SELECT last_name, department_id, salary
FROM employees
ORDER BY 2 ASC, 3 DESC, 1;

MODEL句の例: ここで作成されたビューは、サンプル・スキーマshに基づいており、後述の例で使用されています。

CREATE OR REPLACE VIEW sales_view_ref AS
SELECT country_name country,
prod_name prod,
calendar_year year,
SUM(amount_sold) sale,
COUNT(amount_sold) cnt
FROM sales,times,customers,countries,products
WHERE sales.time_id = times.time_id
AND sales.prod_id = products.prod_id
AND sales.cust_id = customers.cust_id
AND customers.country_id = countries.country_id
AND ( customers.country_id = 52779
OR customers.country_id = 52776 )
AND ( prod_name = 'Standard Mouse'
OR prod_name = 'Mouse Pad' )
GROUP BY country_name,prod_name,calendar_year;

SELECT country, prod, year, sale
FROM sales_view_ref
ORDER BY country, prod, year;

COUNTRY       PROD                                         YEAR        SALE
----------    -----------------------------------      --------   ---------
France        Mouse Pad                                    1998     2509.42
France        Mouse Pad                                    1999     3678.69
France        Mouse Pad                                    2000     3000.72
France        Mouse Pad                                    2001     3269.09
France        Standard Mouse                               1998     2390.83
France        Standard Mouse                               1999     2280.45
France        Standard Mouse                               2000     1274.31
France        Standard Mouse                               2001     2164.54
Germany       Mouse Pad                                    1998     5827.87
Germany       Mouse Pad                                    1999     8346.44
Germany       Mouse Pad                                    2000     7375.46
Germany       Mouse Pad                                    2001     9535.08
Germany       Standard Mouse                               1998     7116.11
Germany       Standard Mouse                               1999     6263.14
Germany       Standard Mouse                               2000     2637.31
Germany       Standard Mouse                               2001     6456.13

16 rows selected.

次の例では、国、製品、年および売上が格納されている列が存在するsales_view_refから多次元配列を作成します。さらに、次のことも行われます。

- 2001年のマウス・パッドの売上を含む行が存在する場合、1999年および2000年のマウス・パッドの売上を2001年のマウス・パッドの売上に割り当てます。

- 2002年のスタンダード・マウスの売上を含む行が存在しない場合、2001年のスタンダード・マウスの売上を2002年のスタンダード・マウスの売上に割り当てます。

SELECT country,prod,year,s
FROM sales_view_ref
MODEL
PARTITION BY (country)
DIMENSION BY (prod, year)
MEASURES (sale s)
IGNORE NAV
UNIQUE DIMENSION
RULES UPSERT SEQUENTIAL ORDER
(
s[prod='Mouse Pad', year=2001] =
s['Mouse Pad', 1999] + s['Mouse Pad', 2000],
s['Standard Mouse', 2002] = s['Standard Mouse', 2001]
)
ORDER BY country, prod, year;

COUNTRY       PROD                                         YEAR        SALE
----------    -----------------------------------      --------   ---------
France        Mouse Pad                                    1998     2509.42
France        Mouse Pad                                    1999     3678.69
France        Mouse Pad                                    2000     3000.72
France        Mouse Pad                                    2001     6679.41
France        Standard Mouse                               1998     2390.83
France        Standard Mouse                               1999     2280.45
France        Standard Mouse                               2000     1274.31
France        Standard Mouse                               2001     2164.54
France        Standard Mouse                               2002     2164.54
Germany       Mouse Pad                                    1998     5827.87
Germany       Mouse Pad                                    1999     8346.44
Germany       Mouse Pad                                    2000     7375.46
Germany       Mouse Pad                                    2001     15721.9
Germany       Standard Mouse                               1998     7116.11
Germany       Standard Mouse                               1999     6263.14
Germany       Standard Mouse                               2000     2637.31
Germany       Standard Mouse                               2001     6456.13
Germany       Standard Mouse                               2002     6456.13

18 rows selected.

最初のルールでは、ルールの左側で記号参照が使用されているため、UPDATE動作が使用されます。ルールの左側で表される行が存在するため、メジャー列が更新されます。行が存在しない場合、何も実行されません。

2番目のルールでは、ルールの左側で位置参照が使用され、単一セルが参照されているため、UPSERT動作が使用されます。行が存在しないため、新しい行が追加され、関連するメジャー列が更新されます。行が存在する場合、メジャー列は更新されません。

関連項目:
詳細および例は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

次の例は、同じsales_view_refビューおよび分析ファンクションSUMを使用して、国および年ごとの累計(csum)を計算しています。

SELECT country, year, sale, csum
FROM
(SELECT country, year, SUM(sale) sale
FROM sales_view_ref
GROUP BY country, year
)
MODEL DIMENSION BY (country, year)
MEASURES (sale, 0 csum)
RULES (csum[any, any]=
SUM(sale) OVER (PARTITION BY country
ORDER BY year
ROWS UNBOUNDED PRECEDING)
)
ORDER BY country, year;

COUNTRY               YEAR       SALE       CSUM
--------------- ---------- ---------- ----------
France                1998    4900.25    4900.25
France                1999    5959.14   10859.39
France                2000    4275.03   15134.42
France                2001    5433.63   20568.05
Germany               1998   12943.98   12943.98
Germany               1999   14609.58   27553.56
Germany               2000   10012.77   37566.33
Germany               2001   15991.21   53557.54

8 rows selected.

行制限の例:

次の文は、employee_id値が低いほうから5人の従業員を返します。

SELECT employee_id, last_name
FROM employees
ORDER BY employee_id
FETCH FIRST 5 ROWS ONLY;

EMPLOYEE_ID LAST_NAME
----------- -------------------------
100 King
101 Kochhar
102 De Haan
103 Hunold
104 Ernst

次の文は、その次にemployee_id値が低いほうから5人の従業員を返します。

SELECT employee_id, last_name
FROM employees
ORDER BY employee_id
OFFSET 5 ROWS FETCH NEXT 5 ROWS ONLY;

EMPLOYEE_ID LAST_NAME
----------- -------------------------
105 Austin
106 Pataballa
107 Lorentz
108 Greenberg
109 Faviet

次の文は、給与が低いほうから5パーセントの従業員を返します。

SELECT employee_id, last_name, salary
FROM employees
ORDER BY salary
FETCH FIRST 5 PERCENT ROWS ONLY;

EMPLOYEE_ID LAST_NAME                     SALARY
----------- ------------------------- ----------
132 Olson                           2100
128 Markle                          2200
136 Philtanker                      2200
127 Landry                          2400
135 Gee                             2400
119 Colmenares                      2500

WITH TIESが指定されているため、次の文は、給与が低いほうから5パーセントの従業員と、前述の例で最後にフェッチされた行と同じ給与の追加の従業員が返されれます。

SELECT employee_id, last_name, salary
FROM employees
ORDER BY salary
FETCH FIRST 5 PERCENT ROWS WITH TIES;

EMPLOYEE_ID LAST_NAME                     SALARY
----------- ------------------------- ----------
132 Olson                           2100
128 Markle                          2200
136 Philtanker                      2200
127 Landry                          2400
135 Gee                             2400
119 Colmenares                      2500
131 Marlow                          2500
140 Patel                           2500
144 Vargas                          2500
182 Sullivan                        2500
191 Perkins                         2500

FOR UPDATE句の使用例: 次の文は、employees表中のオックスフォード勤務(location_idは2500)の購買係の行をロックし、departments表中の購買係が存在するオックスフォードの部門の行をロックします。

SELECT e.employee_id, e.salary, e.commission_pct
FROM employees e, departments d
WHERE job_id = 'SA_REP'
AND e.department_id = d.department_id
AND location_id = 2500
ORDER BY e.employee_id
FOR UPDATE;

次の文は、employees表中のオックスフォード勤務の購買係の行のみをロックします。departments表中の行はロックされません。

SELECT e.employee_id, e.salary, e.commission_pct
FROM employees e JOIN departments d
USING (department_id)
WHERE job_id = 'SA_REP'
AND location_id = 2500
ORDER BY e.employee_id
FOR UPDATE OF e.salary;

WITH CHECK OPTION句の使用例: 次の文は、3番目の値が副問合せwhere_clauseの条件に違反していても有効です。

INSERT INTO (SELECT department_id, department_name, location_id
FROM departments WHERE location_id < 2000)
VALUES (9999, 'Entertainment', 2500);

ただし、次の文はWITH CHECK OPTION句を含むため、無効になります。

INSERT INTO (SELECT department_id, department_name, location_id
FROM departments WHERE location_id < 2000 WITH CHECK OPTION)
VALUES (9999, 'Entertainment', 2500);
*
ERROR at line 2:
ORA-01402: view WITH CHECK OPTION where-clause violation

PIVOTおよびUNPIVOTの使用例: oe.orders表には、注文が発注された日時(order_date)、発注方法(order_mode)および注文の合計数(order_total)に関する情報とその他の情報が含まれています。次の例は、PIVOT句を使用して、order_mode値を列にピボットし、処理中にorder_totalデータを集計して発注モードごとの年間合計を取得する方法を示します。

CREATE TABLE pivot_table AS
SELECT * FROM
(SELECT EXTRACT(YEAR FROM order_date) year, order_mode, order_total FROM orders)
PIVOT
(SUM(order_total) FOR order_mode IN ('direct' AS Store, 'online' AS Internet));

SELECT * FROM pivot_table ORDER BY year;

YEAR      STORE   INTERNET
---------- ---------- ----------
2004     5546.6
2006   371895.5   100056.6
2007  1274078.8  1271019.5
2008   252108.3   393349.4

UNPIVOT句では、入力列ヘッダーが1つ以上の記述子列の値として出力され、入力列値が1つ以上のメジャー列の値として出力されるように、指定した列を変換します。次に示す最初の問合せでは、デフォルトでNULLが除外されています。2番目の問合せは、INCLUDE NULLS句を使用してNULLを組み込むことができることを示しています。

SELECT * FROM pivot_table
UNPIVOT (yearly_total FOR order_mode IN (store AS 'direct',
internet AS 'online'))
ORDER BY year, order_mode;

YEAR ORDER_ YEARLY_TOTAL
---------- ------ ------------
2004 direct       5546.6
2006 direct     371895.5
2006 online     100056.6
2007 direct    1274078.8
2007 online    1271019.5
2008 direct     252108.3
2008 online     393349.4

7 rows selected.

SELECT * FROM pivot_table
UNPIVOT INCLUDE NULLS
(yearly_total FOR order_mode IN (store AS 'direct', internet AS 'online'))
ORDER BY year, order_mode;

YEAR ORDER_ YEARLY_TOTAL
---------- ------ ------------
2004 direct       5546.6
2004 online
2006 direct     371895.5
2006 online     100056.6
2007 direct    1274078.8
2007 online    1271019.5
2008 direct     252108.3
2008 online     393349.4

8 rows selected.

結合問合せの使用例: 次の例は、問合せにおける様々な表の結合方法を示します。最初の例では、等価結合は、それぞれの従業員の名前と職種、およびその従業員が属する部門の番号と名前を戻します。

SELECT last_name, job_id, departments.department_id, department_name
FROM employees, departments
WHERE employees.department_id = departments.department_id
ORDER BY last_name, job_id;

LAST_NAME           JOB_ID     DEPARTMENT_ID DEPARTMENT_NAME
------------------- ---------- ------------- ----------------------
Abel                 SA_REP               80 Sales
Ande                 SA_REP               80 Sales
Atkinson             ST_CLERK             50 Shipping
Austin               IT_PROG              60 IT
. . .

従業員名およびジョブは部門名と異なる表に格納されているため、このデータを戻すには結合を使用する必要があります。Oracle Databaseでは、次の結合条件に従って2つの表の行が結合されます。

employees.department_id = departments.department_id

次の等価結合は、すべての販売マネージャの名前、職種、部門番号および部門名を戻します。

SELECT last_name, job_id, departments.department_id, department_name
FROM employees, departments
WHERE employees.department_id = departments.department_id
AND job_id = 'SA_MAN'
ORDER BY last_name;

LAST_NAME           JOB_ID     DEPARTMENT_ID DEPARTMENT_NAME
------------------- ---------- ------------- -----------------------
Cambrault           SA_MAN                80 Sales
Errazuriz           SA_MAN                80 Sales
Partners            SA_MAN                80 Sales
Russell             SA_MAN                80 Sales
Zlotkey             SA_MAN                80 Sales

この問合せは、次のwhere_clause条件を使用して'SA_MAN'というjob値を持つ行のみを戻すこと以外は、前述の例と同じです。

副問合せの使用例: 次の文は、従業員'Lorentz'と同じ部門で働く従業員を判断します。

SELECT last_name, department_id FROM employees
WHERE department_id =
(SELECT department_id FROM employees
WHERE last_name = 'Lorentz')
ORDER BY last_name, department_id;

次の文は、employees表の職種を変更した(job_history表に示される)すべての従業員の給与を10%上げます。

UPDATE employees
SET salary = salary * 1.1
WHERE employee_id IN (SELECT employee_id FROM job_history);

次の文は、departments表から3つの列のみを伴って新しい表new_departmentsを作成します。

CREATE TABLE new_departments
(department_id, department_name, location_id)
AS SELECT department_id, department_name, location_id
FROM departments;

自己結合の使用例: 次の問合せは、自己結合を使用して、それぞれの従業員の名前およびその従業員の上司の名前を戻します。出力を短くするためにWHERE句が追加されています。

SELECT e1.last_name||' works for '||e2.last_name
"Employees and Their Managers"
FROM employees e1, employees e2
WHERE e1.manager_id = e2.employee_id
AND e1.last_name LIKE 'R%'
ORDER BY e1.last_name;

Employees and Their Managers
-------------------------------
Rajs works for Mourgos
Raphaely works for King
Rogers works for Kaufling
Russell works for King

この問合せの結合条件では、サンプル表employeesに対する別名e1およびe2を使用します。

e1.manager_id = e2.employee_id

外部結合の使用例: 次の例では、パーティション化された外部結合によって行のデータの欠損を補完し、分析ファンクションの指定および信頼性の高いレポートの書式設定を簡単にする方法を示します。この例では、結合で使用する小規模なデータ表を最初に作成します。

SELECT d.department_id, e.last_name
FROM departments d LEFT OUTER JOIN employees e
ON d.department_id = e.department_id
ORDER BY d.department_id, e.last_name;

これは、次に示す以前のOracle Databaseの外部結合の構文と同じ問合せです。

SELECT d.department_id, e.last_name
FROM departments d, employees e
WHERE d.department_id = e.department_id(+)
ORDER BY d.department_id, e.last_name;

この構文ではなく、前述の例で示した、より柔軟性が高いFROM句の結合構文を使用することをお薦めします。

左側外部結合では、従業員のいない部門を含むすべての部門が戻されます。右側外側結合が指定された同一文では、どの部門にも割り当てられていない従業員を含むすべての従業員が戻されます。

注意:
前述の例の従業員表には、従業員Zeussが追加されていますが、この従業員はサンプル・データには含まれません。

SELECT d.department_id, e.last_name
FROM departments d RIGHT OUTER JOIN employees e
ON d.department_id = e.department_id
ORDER BY d.department_id, e.last_name;

DEPARTMENT_ID LAST_NAME
------------- -------------------------
. . .
110 Gietz
110 Higgins
Grant
Zeuss

この結果からは、GrantとZeussという従業員のdepartment_idがNULLであるのか、department_idがdepartments表に存在しないのかは不明です。これを確認するには、完全な外部結合が必要です。

SELECT d.department_id as d_dept_id, e.department_id as e_dept_id,
e.last_name
FROM departments d FULL OUTER JOIN employees e
ON d.department_id = e.department_id
ORDER BY d.department_id, e.last_name;

D_DEPT_ID  E_DEPT_ID LAST_NAME
---------- ---------- -------------------------
. . .
110        110 Gietz
110        110 Higgins
. . .
260
270
999 Zeuss
Grant

この例の列名は、結合状態にある両方の表で同じであるため、結合構文のUSING句を指定することで、共通列機能も使用できます。出力は、一致する2つのdepartment_id列がUSING句によって結合されることを除き、前述の例と同じです。

SELECT department_id AS d_e_dept_id, e.last_name
FROM departments d FULL OUTER JOIN employees e
USING (department_id)
ORDER BY department_id, e.last_name;

D_E_DEPT_ID LAST_NAME
----------- -------------------------
. . .
110 Higgins
110 Gietz
. . .
260
270
999 Zeuss
Grant

パーティション化された外部結合の使用例: 次の例では、パーティション化された外部結合によって行の欠損を補完し、分析計算の指定および信頼性の高いレポートの書式設定を簡単にする方法を示します。この例では、結合で使用する単純な表を最初に作成し、移入します。

CREATE TABLE inventory (time_id    DATE,
product    VARCHAR2(10),
quantity   NUMBER);

INSERT INTO inventory VALUES (TO_DATE('01/04/01', 'DD/MM/YY'), 'bottle', 10);
INSERT INTO inventory VALUES (TO_DATE('06/04/01', 'DD/MM/YY'), 'bottle', 10);
INSERT INTO inventory VALUES (TO_DATE('01/04/01', 'DD/MM/YY'), 'can', 10);
INSERT INTO inventory VALUES (TO_DATE('04/04/01', 'DD/MM/YY'), 'can', 10);

SELECT times.time_id, product, quantity FROM inventory
PARTITION BY  (product)
RIGHT OUTER JOIN times ON (times.time_id = inventory.time_id)
WHERE times.time_id BETWEEN TO_DATE('01/04/01', 'DD/MM/YY')
AND TO_DATE('06/04/01', 'DD/MM/YY')
ORDER BY  2,1;

TIME_ID   PRODUCT      QUANTITY
--------- ---------- ----------
01-APR-01 bottle             10
02-APR-01 bottle
03-APR-01 bottle
04-APR-01 bottle
05-APR-01 bottle
06-APR-01 bottle             10
01-APR-01 can                10
02-APR-01 can
03-APR-01 can
04-APR-01 can                10
05-APR-01 can
06-APR-01 can

12 rows selected.

これで、製品ディメンションの各パーティションのデータの密度は、時間ディメンションに沿ってより密になります。ただし、各パーティションに新しく追加された行のquantity列はそれぞれNULLです。さらに役立つようにするには、NULL値を、時間順でそれより前にあるNULL以外の値で置き換えます。このことを実現するには、分析ファンクションLAST_VALUEを問合せ結果に適用します。

SELECT time_id, product, LAST_VALUE(quantity IGNORE NULLS)
OVER (PARTITION BY product ORDER BY time_id) quantity
FROM ( SELECT times.time_id, product, quantity
FROM inventory PARTITION BY  (product)
RIGHT OUTER JOIN times ON (times.time_id = inventory.time_id)
WHERE times.time_id BETWEEN TO_DATE('01/04/01', 'DD/MM/YY')
AND TO_DATE('06/04/01', 'DD/MM/YY'))
ORDER BY  2,1;

TIME_ID   PRODUCT      QUANTITY
--------- ---------- ----------
01-APR-01 bottle             10
02-APR-01 bottle             10
03-APR-01 bottle             10
04-APR-01 bottle             10
05-APR-01 bottle             10
06-APR-01 bottle             10
01-APR-01 can                10
02-APR-01 can                10
03-APR-01 can                10
04-APR-01 can                10
05-APR-01 can                10
06-APR-01 can                10

12 rows selected.

関連項目:
時系列計算における欠損補完の詳細および使用例については、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。

アンチ結合の使用例: 次の例では、特定の部門の集合に所属していない従業員のリストを選択します。

SELECT * FROM employees
WHERE department_id NOT IN
(SELECT department_id FROM departments
WHERE location_id = 1700)
ORDER BY last_name;

セミ結合の使用例: 次の例では、副問合せに一致する行がemployees表に多数存在する場合でも、departments表から1つの行のみが戻されます。employeesのsalary列に索引が定義されていない場合、セミ結合を使用すると、問合せのパフォーマンスが向上します。

SELECT * FROM departments
WHERE EXISTS
(SELECT * FROM employees
WHERE departments.department_id = employees.department_id
AND employees.salary > 2500)
ORDER BY department_name;

CROSS APPLYおよびOUTER APPLY結合の使用例 次の文では、cross_outer_apply_clauseのCROSS APPLY句を使用します。この結合は、結合(departments)の左側にある表の行のうち、結合の右側にあるインライン・ビューから結果を生成する行のみを返します。つまり、この結合は従業員が1人以上の部門のみを返します。WHERE句は、Marketing、OperationsおよびPublic Relations部門のみが含まれるように結果セットを制限します。ただし、Operations部門には従業員がいないため、この部門は結果セットに含まれません。

SELECT d.department_name, v.employee_id, v.last_name
FROM departments d CROSS APPLY (SELECT * FROM employees e
WHERE e.department_id = d.department_id) v
WHERE d.department_name IN ('Marketing', 'Operations', 'Public Relations')
ORDER BY d.department_name, v.employee_id;

DEPARTMENT_NAME                EMPLOYEE_ID LAST_NAME
------------------------------ ----------- -------------------------
Marketing                      201         Hartstein
Marketing                      202         Fay
Public Relations               204         Baer

次の文では、cross_outer_apply_clauseのOUTER APPLY句を使用します。この結合は、結合の右側にあるインライン・ビューから結果を生成するかどうかにかかわらず、結合(departments)の左側にある表のすべての行を返します。つまり、この結合は従業員がいるかどうかにかかわらず、すべての部門を返します。WHERE句は、Marketing、OperationsおよびPublic Relations部門のみが含まれるように結果セットを制限します。Operations部門には従業員がいませんが、この部門も結果セットに含まれます。

SELECT d.department_name, v.employee_id, v.last_name
FROM departments d OUTER APPLY (SELECT * FROM employees e
WHERE e.department_id = d.department_id) v
WHERE d.department_name IN ('Marketing', 'Operations', 'Public Relations')
ORDER by d.department_name, v.employee_id;

DEPARTMENT_NAME                EMPLOYEE_ID LAST_NAME
------------------------------ ----------- -------------------------
Marketing                      201         Hartstein
Marketing                      202         Fay
Operations
Public Relations               204         Baer

LATERALインライン・ビューの使用例: 次の例では、2つのオペランドの結合を示します。2番目のオペランドは、WHERE句で最初のオペランドである表eを指定するインライン・ビューです。これは結果的にエラーとなります。

SELECT * FROM employees e, (SELECT * FROM departments d
WHERE e.department_id = d.department_id);
ORA-00904: "E"."DEPARTMENT_ID": invalid identifier

次の例では、2つのオペランドの結合を示します。2番目のオペランドは、WHERE句で最初オペランドである表eを指定するLATERALインライン・ビューであり、エラーが発生することなく成功します。

SELECT * FROM employees e, LATERAL(SELECT * FROM departments d
WHERE e.department_id = d.department_id);

表のコレクション例: DML操作は、表の列として定義された場合にのみ、ネストした表で実行できます。したがって、INSERT、DELETEまたはUPDATE文のquery_table_expr_clauseがtable_collection_expressionの場合、コレクション式は、TABLEコレクション式を使用して表のネストした表の列を選択する副問合せである必要があります。次の例は、次の使用例に基づいています。

データベースに、department_id列、location_id列、manager_id列を持つhr_info表と、マネージャごとのすべての従業員のlast_name列、department_id列およびsalary列を持つネストした表型peopleの列が含まれていると仮定します。

CREATE TYPE people_typ AS OBJECT (
last_name      VARCHAR2(25),
department_id  NUMBER(4),
salary         NUMBER(8,2));
/
CREATE TYPE people_tab_typ AS TABLE OF people_typ;
/
CREATE TABLE hr_info (
department_id   NUMBER(4),
location_id     NUMBER(4),
manager_id      NUMBER(6),
people          people_tab_typ)
NESTED TABLE people STORE AS people_stor_tab;

INSERT INTO hr_info VALUES (280, 1800, 999, people_tab_typ());

次の例では、hr_info表の部門番号280のネストした表peopleの列に値を挿入します。

INSERT INTO TABLE(SELECT h.people FROM hr_info h
WHERE h.department_id = 280)
VALUES ('Smith', 280, 1750);

次の例では、部門番号280のネストした表peopleを更新します。

UPDATE TABLE(SELECT h.people FROM hr_info h
WHERE h.department_id = 280) p
SET p.salary = p.salary + 100;

次の例では、部門番号280のネストした表peopleを削除します。

DELETE TABLE(SELECT h.people FROM hr_info h
WHERE h.department_id = 280) p
WHERE p.salary > 1700;

コレクションのネスト解除例: ネストした表の列からデータを選択するには、TABLEコレクション式を使用して、ネストした表を表の列として処理します。このプロセスをコレクション・ネスト解除と呼びます。

次の文を使用すると、前述の例で作成したhr_infoからすべての行を取得し、hr_infoのネストした表peopleの列からすべての行を取得できます。

SELECT t1.department_id, t2.* FROM hr_info t1, TABLE(t1.people) t2
WHERE t2.department_id = t1.department_id;

peopleは、hr_infoのネストした表の列ではなく、last_name、department_id、address、hiredateおよびsalary列と別の表であると仮定します。次の文を使用して、前述の例と同じ行を抽出できます。

SELECT t1.department_id, t2.*
FROM hr_info t1, TABLE(CAST(MULTISET(
SELECT t3.last_name, t3.department_id, t3.salary
FROM people t3
WHERE t3.department_id = t1.department_id)
AS people_tab_typ)) t2;

最後に、peopleはhr_info表のネストした表の列でも、表そのものでもないと仮定します。かわりに、すべての従業員の名前、部門および給与を様々な情報から抽出するpeople_funcファンクションを作成しておきます。次の問合せを使用して、前述の例と同様の情報を得ることができます。

SELECT t1.department_id, t2.* FROM hr_info t1, TABLE(CAST
(people_func( ... ) AS people_tab_typ)) t2;

関連項目:
コレクション・ネスト解除の別の例は、『Oracle Databaseオブジェクト・リレーショナル開発者ガイド』を参照してください。

LEVEL疑似列の使用例: 次の文は、すべての従業員を階層順序で戻します。職種がAD_VPである従業員がルート行となるように定義されています。また、親である行の従業員番号が上司の従業員番号となるように、親である行の子である行が定義されています。

SELECT LPAD(' ',2*(LEVEL-1)) || last_name org_chart,
employee_id, manager_id, job_id
FROM employees
START WITH job_id = 'AD_VP'
CONNECT BY PRIOR employee_id = manager_id;

ORG_CHART          EMPLOYEE_ID MANAGER_ID JOB_ID
------------------ ----------- ---------- ----------
Kochhar                    101        100 AD_VP
Greenberg                108        101 FI_MGR
Faviet                 109        108 FI_ACCOUNT
Chen                   110        108 FI_ACCOUNT
Sciarra                111        108 FI_ACCOUNT
Urman                  112        108 FI_ACCOUNT
Popp                   113        108 FI_ACCOUNT
Whalen                   200        101 AD_ASST
Mavris                   203        101 HR_REP
Baer                     204        101 PR_REP
Higgins                  205        101 AC_MGR
Gietz                  206        205 AC_ACCOUNT
De Haan                    102        100 AD_VP
Hunold                   103        102 IT_PROG
Ernst                  104        103 IT_PROG
Austin                 105        103 IT_PROG
Pataballa              106        103 IT_PROG
Lorentz                107        103 IT_PROG

次の文は、前述の例とほぼ同じですが、職種がFI_MGRである従業員を選択しません。

SELECT LPAD(' ',2*(LEVEL-1)) || last_name org_chart,
employee_id, manager_id, job_id
FROM employees
WHERE job_id != 'FI_MGR'
START WITH job_id = 'AD_VP'
CONNECT BY PRIOR employee_id = manager_id;

ORG_CHART          EMPLOYEE_ID MANAGER_ID JOB_ID
------------------ ----------- ---------- ----------
Kochhar                    101        100 AD_VP
Faviet                 109        108 FI_ACCOUNT
Chen                   110        108 FI_ACCOUNT
Sciarra                111        108 FI_ACCOUNT
Urman                  112        108 FI_ACCOUNT
Popp                   113        108 FI_ACCOUNT
Whalen                   200        101 AD_ASST
Mavris                   203        101 HR_REP
Baer                     204        101 PR_REP
Higgins                  205        101 AC_MGR
Gietz                  206        205 AC_ACCOUNT
De Haan                    102        100 AD_VP
Hunold                   103        102 IT_PROG
Ernst                  104        103 IT_PROG
Austin                 105        103 IT_PROG
Pataballa              106        103 IT_PROG
Lorentz                107        103 IT_PROG

Greenbergが管理する従業員は戻されますが、マネージャGreenbergは戻されません。

次の文も、前述の例と同じですが、LEVEL疑似列を使用して管理階層の最初の2つのレベルのみを選択します。

SELECT LPAD(' ',2*(LEVEL-1)) || last_name org_chart,
employee_id, manager_id, job_id
FROM employees
START WITH job_id = 'AD_PRES'
CONNECT BY PRIOR employee_id = manager_id AND LEVEL <= 2;

ORG_CHART          EMPLOYEE_ID MANAGER_ID JOB_ID
------------------ ----------- ---------- ----------
King                       100            AD_PRES
Kochhar                  101        100 AD_VP
De Haan                  102        100 AD_VP
Raphaely                 114        100 PU_MAN
Weiss                    120        100 ST_MAN
Fripp                    121        100 ST_MAN
Kaufling                 122        100 ST_MAN
Vollman                  123        100 ST_MAN
Mourgos                  124        100 ST_MAN
Russell                  145        100 SA_MAN
Partners                 146        100 SA_MAN
Errazuriz                147        100 SA_MAN
Cambrault                148        100 SA_MAN
Zlotkey                  149        100 SA_MAN
Hartstein                201        100 MK_MAN

分散問合せの使用例: 次の文は、ローカル・データベース上のdepartments表と、remoteデータベース上のemployees表を結合します。

SELECT last_name, department_name
FROM employees@remote, departments
WHERE employees.department_id = departments.department_id;

相関副問合せの使用例: 次に、相関副問合せの構文の一般的な例を示します。

SELECT select_list
FROM table1 t_alias1
WHERE expr operator
(SELECT column_list
FROM table2 t_alias2
WHERE t_alias1.column
operator t_alias2.column);

UPDATE table1 t_alias1
SET column =
(SELECT expr
FROM table2 t_alias2
WHERE t_alias1.column = t_alias2.column);

DELETE FROM table1 t_alias1
WHERE column operator
(SELECT expr
FROM table2 t_alias2
WHERE t_alias1.column = t_alias2.column);

次の文は、部門内の平均給与を超える給与を支給されている従業員の情報を戻します。給与情報が格納されているemployees表に別名を割り当て、相関副問合せではその別名を使用します。

SELECT department_id, last_name, salary
FROM employees x
WHERE salary > (SELECT AVG(salary)
FROM employees
WHERE x.department_id = department_id)
ORDER BY department_id;

親問合せでは、相関副問合せを使用して同一部門の従業員の平均給与を、employees表の行ごとに計算します。相関副問合せは、employees表の各行について次の手順を実行します。

1. 行のdepartment_idを判断します。

2. department_idに基づいて親問合せが評価されます。

3. 行の部門の平均給与より高い給与の行がある場合は、その行を戻します。

副問合せは、employees表の各行につき1回ずつ評価されます。

DUAL表からの選択例: 次の文は、現在の日付を戻します。

SELECT SYSDATE FROM DUAL;

employees表から簡単にSYSDATEを選択できますが、このとき、employees表のすべての行に対して1件ずつ14行の同じSYSDATEが戻ります。このため、DUALから選択する方が便利です。

順序値の選択例: 次の文は、employees_seq順序を増分し、新しい値を戻します。

SELECT employees_seq.nextval
FROM DUAL;

次の文は、employees_seqの現在値を選択します。

SELECT employees_seq.currval
FROM DUAL;

行パターン一致の例 この例では、行パターン一致を使用して株価データを問い合せます。次の文では、表Tickerを作成し、株価データを表に挿入します。

CREATE TABLE Ticker (SYMBOL VARCHAR2(10), tstamp DATE, price NUMBER);

INSERT INTO Ticker VALUES('ACME', '01-Apr-11', 12);
INSERT INTO Ticker VALUES('ACME', '02-Apr-11', 17);
INSERT INTO Ticker VALUES('ACME', '03-Apr-11', 19);
INSERT INTO Ticker VALUES('ACME', '04-Apr-11', 21);
INSERT INTO Ticker VALUES('ACME', '05-Apr-11', 25);
INSERT INTO Ticker VALUES('ACME', '06-Apr-11', 12);
INSERT INTO Ticker VALUES('ACME', '07-Apr-11', 15);
INSERT INTO Ticker VALUES('ACME', '08-Apr-11', 20);
INSERT INTO Ticker VALUES('ACME', '09-Apr-11', 24);
INSERT INTO Ticker VALUES('ACME', '10-Apr-11', 25);
INSERT INTO Ticker VALUES('ACME', '11-Apr-11', 19);
INSERT INTO Ticker VALUES('ACME', '12-Apr-11', 15);
INSERT INTO Ticker VALUES('ACME', '13-Apr-11', 25);
INSERT INTO Ticker VALUES('ACME', '14-Apr-11', 25);
INSERT INTO Ticker VALUES('ACME', '15-Apr-11', 14);
INSERT INTO Ticker VALUES('ACME', '16-Apr-11', 12);
INSERT INTO Ticker VALUES('ACME', '17-Apr-11', 14);
INSERT INTO Ticker VALUES('ACME', '18-Apr-11', 24);
INSERT INTO Ticker VALUES('ACME', '19-Apr-11', 23);
INSERT INTO Ticker VALUES('ACME', '20-Apr-11', 22);

次の問合せでは、行パターン一致を使用し、株価が底値まで下降した後に上昇したすべての事例を検索します。これは一般的にV字形と呼ばれます。問合せでONE ROW PER MATCHが指定され、3つの一致が見つかったため、出力結果には3つの行のみが含まれます。

SELECT *
FROM Ticker MATCH_RECOGNIZE (
PARTITION BY symbol
ORDER BY tstamp
MEASURES STRT.tstamp AS start_tstamp,
LAST(DOWN.tstamp) AS bottom_tstamp,
LAST(UP.tstamp) AS end_tstamp
ONE ROW PER MATCH
AFTER MATCH SKIP TO LAST UP
PATTERN (STRT DOWN+ UP+)
DEFINE
DOWN AS DOWN.price < PREV(DOWN.price),
UP AS UP.price > PREV(UP.price)
) MR
ORDER BY MR.symbol, MR.start_tstamp;

SYMBOL     START_TST BOTTOM_TS END_TSTAM
---------- --------- --------- ---------
ACME       05-APR-11 06-APR-11 10-APR-11
ACME       10-APR-11 12-APR-11 13-APR-11
ACME       14-APR-11 16-APR-11 18-APR-11

SET CONSTRAINT[S]

用途

SET CONSTRAINTS文を使用すると、遅延可能な制約の検証を、各DML文の実行後に行うか(IMMEDIATE)、トランザクションのコミット時に行うか(DEFERRED)をトランザクションごとに指定できます。この文を使用して、制約名のリストまたはALL制約のモードを設定できます。

SET CONSTRAINTSモードは、トランザクションの存続期間中、または別のSET CONSTRAINTS文によってモードがリセットされるまで継続します。

注意:
ALTER SESSION文でSET CONSTRAINTS句を使用して、すべての遅延可能制約を設定することもできます。これは、現在のセッションの各トランザクションの開始時にSET CONSTRAINTS文を発行することと同等です。

トリガー定義の内部でこの文を指定することはできません。

SET CONSTRAINTSは、分散型の文にすることができます。処理中のトランザクションを持つ既存のデータベース・リンクにはSET CONSTRAINTS ALL文の発行時にその発行が通知され、新しいリンクにはトランザクションの開始直後にその発行が通知されます。

前提条件

遅延可能な制約を検証する時期を指定する場合は、表が自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、制約が適用される表に対するREADまたはSELECT権限が必要です。

構文

set_constraints::=

セマンティクス

constraint

1つ以上の整合性制約の名前を指定します。

ALL

ALLを指定すると、このトランザクションに対するすべての遅延可能な制約を設定できます。

IMMEDIATE

IMMEDIATEを指定すると、指定された制約が、各制約DML文の実行時に即時にチェックされます。Oracle Databaseでは、チェック済のすべての制約に一貫性があり、他のSET CONSTRAINTS文が発行されていない場合、トランザクションで以前に遅延された制約が最初にチェックされ、その後すぐにそのトランザクションの他の文の制約チェックが継続してチェックされます。制約のチェックに失敗した場合は、エラーが通知されます。その時点で、COMMIT文を実行すると、トランザクション全体が元に戻されます。

COMMITを正常に実行できるかどうかをチェックする方法としてトランザクションの終了直後に制約を行います。制約をトランザクション内の最後の文としてIMMEDIATEに設定することで、予期しないロールバックを回避できます。いずれかの制約のチェックに失敗した場合は、トランザクションをコミットする前にエラーを解決できます。

DEFERRED

DEFERREDを指定すると、遅延可能な制約によって指定された条件が、トランザクションのコミット時に検証されます。

注意:
SET CONSTRAINTS ALL IMMEDIATE文を発行することによって、遅延可能な制約をコミットする前に、それらの制約が完全に適用されたかどうかを検証できます。

例

制約の設定例: 次の文は、このトランザクション内のすべての遅延可能な制約が、各DML文の直後に検証されるように設定します。

SET CONSTRAINTS ALL IMMEDIATE;

次の文は、トランザクションのコミット時に3つの遅延制約を検証します。この例では、制約をNOT DEFERRABLEに設定すると失敗します。

SET CONSTRAINTS emp_job_nn, emp_salary_min,
hr.jhist_dept_fk@remote DEFERRED;

SET ROLE

用途

データベースでは、ユーザー・ログイン時に、ユーザーに明示的に付与されたすべての権限およびユーザーのすべてのデフォルトのロールが使用可能になります。セッション中、ユーザーまたはアプリケーションは、SET ROLE文を使用して、そのセッションに対してロールを何度でも使用可能または使用禁止にできます。

148を超えるユーザー定義のロールを一度に使用可能にできません。

注意:

- ほとんどのロールは、直接的に付与されているか、または他のロールを介して付与されていないかぎり、使用可能または使用禁止にできません。ただし、保護アプリケーション・ロールは、関連付けられているPL/SQLパッケージによって付与して使用可能にすることができます。保護アプリケーション・ロールについては、「USING package」のCREATE ROLEセマンティクスおよび『Oracle Databaseセキュリティ・ガイド』を参照してください。

- SET ROLEが正常に完了するのは、コール・スタックに定義者権限ユニットがない場合のみです。少なくとも1つのDRユニットがコール・スタックにある場合は、SET ROLEコマンドを発行するとORA-06565が発生します。定義者権限ユニットの詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

- SET ROLEコマンドをPL/SQLから実行するには、動的SQLを使用する必要があります(EXECUTE IMMEDIATE文によって実行するのが望ましい)。この文の詳細は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

SESSION_ROLESデータ・ディクショナリ・ビューを問い合せると、現在使用可能なロールを参照できます。

関連項目:

- ロールの作成の詳細は、「CREATE ROLE」を参照してください。

- ユーザーのデフォルト・ロールの変更については、「ALTER USER」を参照してください。

- SESSION_ROLESセッション・パラメータの詳細は、『Oracle Databaseリファレンス』を参照してください。

前提条件

SET ROLE 文に指定するロールが付与されている必要があります。

構文

set_role::=

セマンティクス

role

現行のセッションで使用可能にするロールを1つ以上指定します。指定されていないすべてのロールは、現行のセッションの存続期間中、または現行のセッションで他のSET ROLE文が発行されるまで使用禁止になります。

IDENTIFIED BY password句では、ロールに対するパスワードを指定します。ロールにパスワードが設定されている場合は、指定する必要があります。

ロールの設定の制限事項: グローバルに識別されるロールは指定できません。グローバル・ロールは、ログイン時にデフォルトで使用可能になり、後で再度使用可能にすることはできません。

ALL句

ALLを指定すると、現行のセッションに対して付与されているすべてのロールを使用可能にできます。ただし、EXCEPT句に任意に指定されているロールは除きます。

EXCEPT句に指定するロールは、ユーザーに直接付与されている必要があります。他のロールによってユーザーに付与されたものは無効です。

直接付与されているロール、および他のロールを介してユーザーに付与されているロールをEXCEPT句に指定した場合、そのロールの付与先のロールにより、そのロールは使用可能のままになります。

ALL句の制限事項: ALL句には、次の制限事項があります。

- パスワード付きのロールを直接付与された場合は、この句を指定できません。含めた場合、ORA-01979エラーが発生します。

- この句を使用して、保護アプリケーション・ロールを使用可能にすることはできません。保護アプリケーション・ロールとは、認可済パッケージのみを使用するアプリケーションによって使用可能になるロールです。保護アプリケーション・ロールの作成の詳細は『Oracle Databaseセキュリティ・ガイド』、チュートリアルは『Oracle Database 2日でセキュリティ・ガイド』を参照してください。

NONE

NONEを指定すると、現行のセッションで、DEFAULTロールを含むすべてのロールを使用禁止にできます。

例

ロールの設定例: 次の文は、現行のセッションのパスワードwarehouseによって識別されるロールdw_managerを使用可能にします。

SET ROLE dw_manager IDENTIFIED BY warehouse;

次の文は、現行のセッションで付与されているロールをすべて使用可能にします。

SET ROLE ALL;

次の文は、dw_managerを除くロールをすべて使用可能にします。

SET ROLE ALL EXCEPT dw_manager;

次の文は、現行のセッションで付与されているすべてのロールを使用禁止にします。

SET ROLE NONE;

SET TRANSACTION

用途

SET TRANSACTION文を使用すると、現行のトランザクションを読取り専用または読み書き両用として設定したり、分離レベルを設定したり、指定したロールバック・セグメントにトランザクションを割り当てたり、名前をトランザクションに割り当てることができます。

TXロックを取得する操作によって、トランザクションが暗黙的に開始されます。

- データを変更する文が発行されたとき

- SELECT ... FOR UPDATE文が発行されたとき

- SET TRANSACTION文またはDBMS_TRANSACTIONパッケージによってトランザクションが明示的に開始されたとき

COMMIT文またはROLLBACK文を発行すると、現行のトランザクションが明示的に終了されます。

SET TRANSACTION文によって実行される操作の影響が及ぶのは、現行トランザクションのみであり、他のユーザーや他のトランザクションには影響しません。トランザクションは、COMMIT文またはROLLBACK文が発行されると終了します。Oracle Databaseは、データ定義言語(DDL)文の実行前と後に、現行トランザクションを暗黙的にコミットします。

関連項目:
「COMMIT」および「ROLLBACK」を参照してください。

前提条件

SET TRANSACTION文を使用する場合、トランザクションの先頭に記述する必要があります。ただし、SET TRANSACTION文が必要ないトランザクションもあります。

構文

set_transaction::=

セマンティクス

READ ONLY

READ ONLY句を使用すると、現行のトランザクションを読取り専用に設定できます。この句では、トランザクション・レベルの読取り一貫性を設定します。

そのトランザクションの後続のすべての問合せでは、トランザクションの開始前にコミットされた変更のみが参照されます。読取り専用トランザクションは、他のユーザーが更新中の1つ以上の表に対して、複数の問合せを実行するレポートに役立ちます。

ユーザーSYSは、この句を使用できません。SYSによる問合せでは、SYSがトランザクションをREAD ONLYに設定した場合でも、トランザクション中の変更が戻されます。

読取り専用トランザクションの制限事項: 読取り専用トランザクションは、次の文のみを使用できます。

- 副問合せ(for_update_clauseを指定しないSELECT文)

- LOCK TABLE

- SET ROLE

- ALTER SESSION

- ALTER SYSTEM

READ WRITE

READ WRITEを指定すると、現行のトランザクションは読み書き両用トランザクションに設定されます。この句によって、文レベルの読取り一貫性が設定されます(これがデフォルトです)。

読み書き両用トランザクションの制限事項: 同一トランザクション内では、読取り一貫性のレベル(トランザクション・レベルおよび文レベル)を切り替えることができません。

ISOLATION LEVEL句

ISOLATION LEVEL句を使用すると、データベースを変更するトランザクションがどのように処理されるかを指定できます。

- SQL規格に定義されているシリアライズ可能トランザクション分離モードを設定する場合に、SERIALIZABLEを指定します。シリアライズ可能トランザクションにデータ操作言語(DML)が含まれている場合、そのDMLがシリアライズ可能トランザクションの開始時にコミットされなかったトランザクション内の更新済のリソースを更新しようとすると、そのDML文は正常に実行されません。

- Oracle Databaseのトランザクションでは、デフォルトでREAD COMMITTEDが設定されています。別のトランザクションで行ロックを保持しておく必要があるDMLがトランザクションに指定されていると、DML文は行ロックが解除されるまで待ち状態になります。

USE ROLLBACK SEGMENT句

注意:
この句は、UNDO用のロールバック・セグメントを使用している場合にのみ有効です。自動UNDO管理モードでUNDO領域を管理することをお薦めします。データベースを自動UNDOモードで実行すると、この句は無視されます。

USE ROLLBACK SEGMENTを指定すると、現行のトランザクションを、指定したロールバック・セグメントに割り当てることができます。この句によって、現行のトランザクションは暗黙的に読み書き両用トランザクションに設定されます。

パラレルDMLでは、複数のロールバック・セグメントが必要です。したがって、トランザクションにパラレルDML操作が含まれている場合、この句は無視されます。

NAME句

NAME句を使用すると、現行のトランザクションに名前を割り当てることができます。この句は、分散データベース環境でインダウト・トランザクションを識別および変換する場合に便利です。string値の最大長は255バイトです。

分散トランザクションに対して名前を指定する場合、トランザクションのコミット時に、名前はコミットのコメントとなり、COMMIT文で明示的に指定した任意のコメントを上書きします。

関連項目:
トランザクションの名前指定の詳細は、『Oracle Database概要』を参照してください。

例

トランザクションの設定例: 次の文は、サンプルの注文入力スキーマ(oe)のトロントの倉庫にある在庫の製品と量を計算するもので、毎月の最終日の真夜中に実行されます。このレポートは、別の倉庫の在庫を追加および削除する他のユーザーの影響は受けません。

COMMIT;

SET TRANSACTION READ ONLY NAME 'Toronto';

SELECT product_id, quantity_on_hand FROM inventories
WHERE warehouse_id = 5
ORDER BY product_id;

COMMIT;

最初のCOMMIT文によって、SET TRANSACTIONが確実にトランザクション内の最初の文となります。最後のCOMMIT文は、実際にはデータベースに対する変更を永続化するものではありません。これは単に、この読取り専用トランザクションを終了するためのものです。

TRUNCATE CLUSTER

用途

注意:
TRUNCATE CLUSTER文はロールバックできません。

TRUNCATE CLUSTER文を使用すると、クラスタからすべての行を削除できます。デフォルトでは、次の処理も実行されます。

- 削除された行が使用していたすべての領域(ただし、MINEXTENTS記憶域パラメータで指定された領域は除く)の割当てが解除されます。

- NEXT記憶域パラメータが、切捨て処理によってセグメントから最後に削除されたエクステントのサイズに設定されます。

クラスタを削除して再作成するより、TRUNCATE文で行を削除する方が効果的です。クラスタを削除して再作成すると、そのクラスタに依存するオブジェクトが無効になり、クラスタに対するオブジェクト権限を再度付与する必要があるだけでなく、表の索引とクラスタを再作成し、その記憶域パラメータを再指定することも必要になります。切捨ての場合は、このような影響はありません。

TRUNCATE CLUSTER文を使用すると、DELETE文を使用してすべての行を削除するよりも迅速に削除できます。特に、クラスタに索引およびその他の依存オブジェクトが多数ある場合に有効です。

関連項目:

- クラスタからデータを削除する他の方法については、「DELETE」および「DROP CLUSTER」を参照してください。

- 表の切捨ての詳細は、「TRUNCATE TABLE」を参照してください。

前提条件

クラスタを切り捨てるには、自分のスキーマ内にそのクラスタがあるか、またはDROP ANY TABLEシステム権限が必要です。

関連項目:
「表の切捨ての制限事項:」

構文

truncate_cluster::=

セマンティクス

CLUSTER句

切り捨てるクラスタが設定されているスキーマと、そのクラスタの名前を指定します。なお、索引クラスタは切り捨てられますが、ハッシュ・クラスタは切り捨てられません。schemaを指定しない場合、クラスタは自分のスキーマ内にあるとみなされます。

クラスタを切り捨てた場合、そのクラスタにある表のすべての索引データも自動的に削除されます。

STORAGE句

STORAGE句を使用すると、行の切捨てによって解放された領域をどのようにするかを指定できます。DROP STORAGE句およびREUSE STORAGE句は、対応する索引から削除されたデータの空き領域にも適用されます。

DROP STORAGE DROP STORAGEを指定すると、クラスタのMINEXTENTSパラメータで割り当てられた領域を除き、クラスタから削除された行からすべての領域の割当てを解除できます。この領域は、後で表領域内の他のオブジェクトで使用できます。また、NEXT記憶域パラメータが、切捨て処理によってセグメントから最後に削除されたエクステントのサイズに設定されます。これはデフォルトです。

REUSE STORAGE REUSE STORAGEを指定すると、クラスタに割り当てられた削除行の領域を確保できます。STORAGEの値は、表またはクラスタを作成したときの値にリセットされません。この領域は、挿入操作または更新操作によってそのクラスタ内に作成される新規データによってのみ使用されます。記憶域パラメータは現行の設定のまま残ります。

切り捨てるオブジェクトに対して複数の空きリストを指定している場合は、REUSE STORAGE句によって、インスタンスへの空きリストのマッピングも削除され、最高水位標は第1エクステントの先頭までリセットされます。

例

クラスタの切捨て例: 次の文は、personnelクラスタ内の表のすべての行を削除しますが、空き領域は表に割り当てられたままにしておきます。

TRUNCATE CLUSTER personnel REUSE STORAGE;

この文では、personnelクラスタにある表のすべての索引データも削除されます。

TRUNCATE TABLE

用途

注意:
TRUNCATE TABLE文をロールバックしたり、FLASHBACK TABLE文を使用して、切り捨てられた表の内容を取得することはできません。

TRUNCATE TABLEを使用すると、表からすべての行を削除できます。デフォルトでは、次の処理も実行されます。

- 削除された行が使用していたすべての領域(ただし、MINEXTENTS記憶域パラメータで指定された領域は除く)の割当てが解除されます。

- NEXT記憶域パラメータが、切捨て処理によってセグメントから最後に削除されたエクステントのサイズに設定されます。

表を削除して再作成するより、TRUNCATE TABLE文で行を削除する方が効果的です。表を削除して再作成すると、その表に依存するオブジェクトが無効になり、表に対するオブジェクト権限を再度付与する必要があるだけでなく、表の索引、整合性制約およびトリガーを再作成し、その記憶域パラメータを再指定することも必要になります。切捨ての場合は、このような影響はありません。

TRUNCATE TABLE文を使用すると、DELETE文を使用してすべての行を削除するよりも迅速に削除できます。特に、表にトリガー、索引およびその他の依存オブジェクトが多数ある場合に有効です。

関連項目:

- 表からデータを削除する他の方法については、「DELETE」および「DROP TABLE」を参照してください。

- クラスタの切捨ての詳細は、「TRUNCATE CLUSTER」を参照してください。

前提条件

表を切り捨てるには、その表が自分のスキーマ内にあるか、自分にDROP ANY TABLEシステム権限が付与されている必要があります。

CASCADE句を指定するには、影響する子表が自分のスキーマにすべて含まれているか、自分にDROP ANY TABLEシステム権限が付与されている必要があります。

関連項目:
「表の切捨ての制限事項:」

構文

truncate_table::=

セマンティクス

TABLE句

切り捨てる表が設定されているスキーマおよびその表の名前を指定します。クラスタを構成する表は、切り捨てることができません。schemaを指定しない場合、表は自分のスキーマ内にあるとみなされます。

- 索引構成表や一時表も切り捨てることができます。一時表を切り捨てた場合、現行のセッションで作成された行のみが削除されます。

- tableの記憶域パラメータNEXTが、切捨て処理中にセグメントから最後に削除されたエクステントのサイズに変更されます。

- tableに対する索引(ローカル索引のレンジ・パーティションとハッシュ・パーティション、およびローカル索引のサブパーティション)のUNUSABLEのインジケータも、自動的に切捨ておよびリセットされます。

- tableが空でない場合は、表中の非パーティション索引およびグローバル・パーティション索引のすべてのパーティションにUNUSABLEのマークが付けられます。ただし、表が切り捨てられると索引も切り捨てられ、索引セグメントに対して新しい最高水位標が計算されます。この操作は、索引に対して新しいセグメントを作成することと同じです。このため、切捨て操作の最後に、索引が再度USABLEになります。

- ドメイン索引の場合は、この文が、適切なTRUNCATEルーチンを起動し、ドメイン索引のデータを切り捨てます。

関連項目:
ドメイン索引の詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。

- 標準表および索引構成表がLOB列を含む場合、すべてのLOBデータおよびLOB索引セグメントは切り捨てられます。

- tableがパーティション化されている場合、各パーティションまたはサブパーティションのLOBデータ・セグメントおよびLOB索引セグメントと同様に、パーティションおよびサブパーティションも切り捨てられます。

注意:
表を切り捨てた場合、表の索引データおよび表に対応付けられたマテリアライズド・ビューのダイレクト・パスINSERT情報はすべて、自動的に削除されます。この情報は、マテリアライズド・ビュー・ログのいずれにも依存していません。このダイレクト・パスINSERT情報を削除した場合、マテリアライズド・ビューの増分リフレッシュのデータが失われる場合があります。

- カーソルはすべて無効になります。

表の切捨ての制限事項: この文には、次の制限事項があります。

- TRUNCATE TABLE文はロールバックできません。

- 切捨て操作を行う前の表の状態にフラッシュバックすることはできません。

- クラスタを構成する表は、個別に切り捨てることはできません。これを行うには、クラスタを切り捨てるか、表のすべての行を削除するか、または表を削除して再作成する必要があります。

- 使用可能になっている外部キー制約の親である表は、切り捨てることはできません。その表を切り捨てる場合、制約を無効にしておく必要があります。整合性制約が自己参照型の場合は、例外として表を切り捨てることができます。

- tableでドメイン索引が定義されている場合、索引および索引パーティションにIN_PROGRESSのマークを付けることはできません。

- 参照パーティション表の親表は切り捨てることができません。まず、参照パーティション表の子表を削除する必要があります。

MATERIALIZED VIEW LOG句

MATERIALIZED VIEW LOG句を使用すると、表が切り捨てられた場合に、この表に定義されているマテリアライズド・ビュー・ログを保存するか、または削除するかを指定できます。この句を使用した場合、マテリアライズド・ビューのマスター表を、エクスポートまたはインポートによって再編成できます。この場合、マスター表で定義された主キー・マテリアライズド・ビューを高速リフレッシュする機能は影響を受けません。主キー・マテリアライズド・ビューを継続的に高速リフレッシュできるようにするには、マテリアライズド・ビュー・ログに主キー情報を記録する必要があります。

注意:
下位互換性を保つために、MATERIALIZED VIEWのかわりにキーワードSNAPSHOTもサポートされています。

PRESERVE PRESERVEを指定すると、マスター表を切り捨てたときにマテリアライズド・ビュー・ログを保存できます。これはデフォルトです。

PURGE PURGEを指定すると、マスター表を切り捨てたときにマテリアライズド・ビュー・ログを削除できます。

関連項目:
マテリアライズド・ビュー・ログおよびTRUNCATE文の詳細は、『Oracle Databaseアドバンスト・レプリケーション』を参照してください。

STORAGE句

STORAGE句を使用すると、行の切捨てによって解放された領域をどのようにするかを指定できます。DROP STORAGE句、DROP ALL STORAGE句およびREUSE STORAGE句は、対応する索引から削除されたデータの空き領域にも適用されます。

DROP STORAGE DROP STORAGEを指定すると、表のMINEXTENTSパラメータで割り当てられた領域を除き、表から削除された行からすべての領域の割当てを解除できます。この領域は、後で表領域内の他のオブジェクトで使用できます。また、NEXT記憶域パラメータが、切捨て処理によってセグメントから最後に削除されたエクステントのサイズに設定されます。この設定(デフォルト)は、小規模や中規模のオブジェクトに有効です。このようなオブジェクトの場合、ローカル管理表領域のエクステント管理が非常に高速に行われるため、領域を確保する必要はありません。

DROP ALL STORAGE DROP ALL STORAGEを指定すると、MINEXTENTSパラメータで割り当てられた領域も含め、表から削除された行からすべての領域の割当てを解除できます。表のすべてのセグメント、およびその依存オブジェクトのすべてのセグメントも、割当てが解除されます。

DROP ALL STORAGEの制限事項: この句には、「遅延セグメント作成の制限事項」に示されているものと同じ制限事項があります。

REUSE STORAGE REUSE STORAGEを指定すると、表に割り当てられた削除行の領域を確保できます。STORAGEの値は、表を作成したときの値にリセットされません。この領域は、挿入操作または更新操作によってその表内に作成される新規データによってのみ使用されます。記憶域パラメータは現行の設定のまま残ります。

この設定は、行数が非常に多く、表に何千ものエクステントが必要な場合や、データを後で再挿入する予定がある場合に、大規模な表のすべての行を削除する別の方法として有効です。

この句は一時表では無効です。表が切り捨てられたときに、セッションは一時表からアンバインドされるので、記憶域が自動的に削除されます。

切り捨てるオブジェクトに対して複数の空きリストを指定している場合は、REUSE STORAGE句によって、インスタンスへの空きリストのマッピングも削除され、最高水位標は第1エクステントの先頭までリセットされます。

CASCADE

CASCADEを指定すると、ON DELETE CASCADE参照制約が有効化されていて、tableを参照する子表は、すべて切り捨てられます。これは、指定したオプションを使用して、すべての子表、孫表(およびそれ以下の子表)を切り捨てる再帰的な操作になります。

例

表の切捨て例: 次の文は、サンプル表hr.employeesの仮想コピーのすべての行を削除して、解放された領域をemployees表が定義されている表領域に戻します。

TRUNCATE TABLE employees_demo;

ここでは、employees表の索引データもすべて削除され、解放された領域は、それらの索引が定義されていた表領域に戻されます。

切捨て後のマテリアライズド・ビュー・ログの保存例: 次の文は、マテリアライズド・ビュー・ログを保存するTRUNCATE文の使用例です。

TRUNCATE TABLE sales_demo PRESERVE MATERIALIZED VIEW LOG;

TRUNCATE TABLE orders_demo;

UPDATE

用途

UPDATE文を使用すると、表、ビューの実表またはマテリアライズド・ビューのマスター表の既存の値を変更できます。

追加トピック

- 前提条件

- 構文

- セマンティクス

- 例

前提条件

表の値を更新する場合は、表が自分のスキーマ内にある必要があります。自分のスキーマ内にない場合は、その表に対するUPDATEオブジェクト権限が必要です。

ビューの実表の値を更新する場合は、次の条件を満たす必要があります。

- そのビューに対するUPDATEオブジェクト権限を持っている。

- そのビューが含まれているスキーマの所有者が、実表に対するUPDATEオブジェクト権限を持っている。

UPDATE ANY TABLEシステム権限を持っている場合は、任意の表またはビューの実表の値を更新できます。

リモート・データベースのオブジェクトの値を更新するには、オブジェクトのREADまたはSELECTオブジェクト権限も必要です。

SQL92_SECURITY初期化パラメータがTRUEに設定され、UPDATE操作がwhere_clauseの列などの表の列を参照する場合、更新するオブジェクトのSELECTオブジェクト権限も必要です。

構文

update::=

(DML_table_expression_clause::=、update_set_clause ::=、where_clause ::=、returning_clause::=、error_logging_clause::=を参照)

DML_table_expression_clause::=

(partition_extension_clause::=、subquery::=(「SELECT」の項)、subquery_restriction_clause ::=、table_collection_expression ::=を参照)

partition_extension_clause::=

subquery_restriction_clause::=

table_collection_expression ::=

update_set_clause ::=

where_clause::=

returning_clause::=

error_logging_clause::=

セマンティクス

hint

文の実行計画を選択する場合に、オプティマイザに指示を与えるためのコメントを指定します。

UPDATEキーワードの直後にパラレル・ヒントを指定した場合、基礎となるスキャンおよびUPDATE操作の両方をパラレル化できます。

関連項目:

- ヒントの構文および説明については、「ヒント」を参照してください。

- パラレル実行の詳細は、『Oracle Database概要』を参照してください。

DML_table_expression_clause

ONLY句は、ビューのみに適用されます。UPDATE句のビューが階層に属し、そのどのサブビューの行も変更しない場合は、ONLY構文を指定します。

関連項目:
「DML_table_expression_clauseの制限事項:」および「表の更新例:」を参照してください。

schema

更新するオブジェクトが含まれているスキーマを指定します。schemaを指定しない場合、オブジェクトは自分のスキーマ内にあるとみなされます。

table | view | materialized_view | subquery

更新する対象となる、表、ビュー、マテリアライズド・ビュー、または副問合せから戻された列の名前を指定します。表に対してUPDATE文を実行した場合、その表に対応付けられたUPDATEトリガーが起動します。

- viewを指定した場合、ビューの実表が更新されます。ビューを定義する問合せに次のいずれかの要素が含まれる場合は、INSTEAD OFトリガーを除き、そのビューを更新することはできません。

集合演算子

DISTINCT演算子

集計ファンクションまたは分析ファンクション

GROUP BY、ORDER BY、MODEL、CONNECT BYまたはSTART WITH句

SELECT構文のリストにあるコレクション式

SELECT構文のリストにある副問合せ

WITH READ ONLYが指定された副問合せ

再帰WITH句

結合(一部の例外を除く。詳細は、『Oracle Database管理者ガイド』を参照してください。)

- ビューから、複数の実表は更新できません。

- また、WITH CHECK OPTIONを指定してビューを作成した場合、実行結果がビューを定義する問合せの条件を満たす場合にのみ、ビューを更新できます。

- tableまたはviewの実表に、1つ以上のドメイン索引列がある場合は、この文によって適切な索引タイプの更新ルーチンが実行されます。

- 読取り専用のマテリアライズド・ビューの行は更新できません。書込み可能なマテリアライズド・ビューの行を更新すると、基礎となるコンテナ表の行も更新されます。ただし、その更新内容は次のリフレッシュ操作によって上書きされます。マテリアライズド・ビュー・グループ内の更新可能なマテリアライズド・ビューの行を更新すると、マスター表の対応する行も更新されます。

関連項目:

- 索引タイプの更新ルーチンの詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。

- 更新可能なマテリアライズド・ビューについては、「CREATE MATERIALIZED VIEW」を参照してください。

partition_extension_clause

更新対象のtable内にあるパーティションまたはサブパーティションの名前またはパーティション・キー値を指定します。パーティション表内の値を更新する場合は、パーティション名を指定する必要はありません。ただし、パーティション名を指定した方が、複雑なwhere_clauseを使用するよりも効果的な場合もあります。

関連項目:
「パーティション表と索引の参照」および「パーティションの更新例:」を参照してください。

dblink

オブジェクトが格納されているリモート・データベースへのデータベース・リンクの完全名または部分名を指定します。Oracle Databaseの分散機能を使用している場合にかぎり、データベース・リンクを使用してリモート・オブジェクトを更新できます。

dblinkを省略した場合、オブジェクトがローカル・データベース上にあるとみなされます。

関連項目:
データベース・リンクの参照方法の詳細は、「リモート・データベース内のオブジェクトの参照」を参照してください。

subquery_restriction_clause

subquery_restriction_clauseを使用すると、次のいずれかの方法で副問合せを制限できます。

WITH READ ONLY WITH READ ONLYを指定すると、表またはビューを更新禁止にできます。

WITH CHECK OPTION WITH CHECK OPTIONを指定すると、副問合せに含まれない行を生成する表またはビューの変更を禁止できます。この句をDML文の副問合せ内で使用する場合、FROM句内の副問合せには指定できますが、WHERE句内の副問合せには指定できません。

CONSTRAINT constraint CHECK OPTION制約の名前を指定します。この識別子を省略した場合は、Oracleによって自動的にSYS_Cnという形式の制約名が割り当てられます(nはデータベース内で制約名を一意にするための整数)。

関連項目:
「WITH CHECK OPTION句の使用例:」

table_collection_expression

table_collection_expressionを使用すると、問合せおよびDML操作で、collection_expression値を表として扱うことができます。collection_expressionには、副問合せ、列、ファンクションまたはコレクション・コンストラクタのいずれかを指定できます。その形式にかかわらず、集合値(ネストした表型またはVARRAY型の値)を戻す必要があります。このようなコレクションの要素抽出プロセスをコレクション・ネスト解除といいます。

TABLEコレクション式を親表と結合する場合は、オプションのプラス(+)には大きな意味があります。+を指定すると、その2つの外部結合が作成され、コレクション式がNULLの場合でも、外部表の行が問合せで戻されるようになります。

注意:
以前のリリースのOracleでは、collection_expressionが副問合せの場合、table_collection_expressionをTHE subqueryと表現していました。現在、このような表現方法は非推奨になっています。

table_collection_expressionを使用して、ある表の行を別の表の行を基にして更新できます。たとえば、四半期ごとの売上表を、年度ごとの売上表にまとめることができます。

t_alias

文中で参照する表、ビューまたは副問合せの相関名(別名)を指定します。DML_table_expression_clauseがいずれかのオブジェクト型属性またはオブジェクト型メソッドを参照する場合、この別名が必要です。

関連項目:
「相関更新の例:」

DML_table_expression_clauseの制限事項: この句には、次の制限事項があります。

- tableまたはviewの実表に、IN_PROGRESSまたはFAILEDとマークされたドメイン索引がある場合は、この文は実行できません。

- 関係する索引パーティションがUNUSABLEとマークされている場合は、パーティションに挿入できません。

- DML_table_expression_clauseの副問合せにはorder_by_clauseを指定できません。

- UNUSABLEのマークが付いている索引、索引パーティションまたは索引サブパーティションを指定する場合、SKIP_UNUSABLE_INDEXESセッション・パラメータがTRUEに設定されていないかぎり、UPDATE文は正常に実行されません。

関連項目:
SKIP_UNUSABLE_INDEXESセッション・パラメータの詳細は、「ALTER SESSION」を参照してください。

update_set_clause

update_set_clauseを使用すると、列の値を設定できます。

column

更新するオブジェクトの列の名前を指定します。update_set_clauseに表の列を指定しない場合、その列の値は変更されません。

columnがLOBオブジェクト属性を参照している場合、まず空またはNULLの値で初期化する必要があります。リテラルで更新はできません。また、UPDATE以外のSQL文を使用してLOB値を更新する場合は、LOBを含む行を最初にロックしておく必要があります。詳細は、「for_update_clause」を参照してください。

columnが仮想列である場合、ここで指定することはできません。この場合、仮想列の導出元となっている値を更新する必要があります。

columnがパーティション表のパーティション化キーに含まれる場合、別のパーティションまたはサブパーティションに行を移動する列の値を変更すると、行の移動を有効にしないかぎり、UPDATEは正常に実行されません。「CREATE TABLE」の「row_movement_clause」または「ALTER TABLE」を参照してください。

また、columnがリスト・パーティション表のパーティション化キーの一部である場合、パーティションのpartition_key_valueリストに存在していない列の値を指定すると、UPDATEは正常に実行されません。

subquery

更新される行ごとに1行ずつ戻す副問合せを指定します。

- update_set_clauseで1列のみを指定した場合、副問合せは1つの値のみを戻します。

- update_set_clauseで複数の列を指定した場合、副問合せは指定した列の数の値を戻します。

- 副問合せが行を戻さなかった場合は、列にはNULLが割り当てられます。

- subqueryがリモート・オブジェクトを参照する場合、参照がローカル・データベースのオブジェクトにループバックしないかぎり、UPDATEはパラレルで実行されます。ただし、DML_table_expression_clauseのsubqueryがリモート・オブジェクトを参照する場合は、UPDATEはシリアルで実行されます。

副問合せ内でflashback_query_clauseを使用すると、過去のデータでtableを更新できます。この句の詳細は、「SELECT」の「flashback_query_clause」を参照してください。

関連項目:

- 「SELECT」および「副問合せの使用方法」を参照してください。

- 「CREATE TABLE」の「parallel_clause」を参照してください。

expr

対応する列に割り当てられた新しい値に変換する式を指定します。

関連項目:
exprの構文については、第5章「式」および「オブジェクト表の更新例:」を参照してください。

DEFAULT DEFAULTを指定すると、以前に列のデフォルト値として指定した値を列に設定できます。対応する列に対してデフォルト値を指定していない場合、列にNULLが設定されます。

デフォルト値への更新の制限事項: ビューを更新する場合は、DEFAULTを指定できません。

VALUE句

VALUE句を使用すると、オブジェクト表の行全体を指定できます。

VALUE句の制限事項: この句は、オブジェクト表に対してのみ指定できます。

注意:
RAW列に文字列リテラルを挿入する場合、後続の問合せ中にRAW列にある索引は使用されずに、全表スキャンが行われます。

関連項目:
「オブジェクト表の更新例:」

where_clause

where_clauseを使用すると、指定したconditionがtrueである行のみを更新するように制限できます。この句を指定しない場合、表またはビューのすべての行が更新されます。conditionの構文は、第6章「条件」を参照してください。

where_clauseは、値を更新する行を決定します。where_clauseを指定しない場合、すべての行が更新されます。where_clauseの条件を満たす行ごとに、update_set_clauseの等号演算子(=)の左側にある列に、演算子の対応する右側の式の値が設定されます。式は行が更新される場合に評価されます。

returning_clause

この句を使用すると、DML文に影響される行を取り出すことができます。この句は、表、マテリアライズド・ビュー、および単一の実表を持つビューに指定できます。

returning_clauseを指定したDML文を単一行に実行すると、影響された行、ROWID、および処理された行へのREFを使用している列式が取り出され、ホスト変数またはPL/SQL変数に格納されます。

returning_clauseを指定したDML文を複数行に実行すると、式の値、ROWIDおよび処理された行に関連するREFがバインド配列に格納されます。

expr exprリストの各項目は、適切な構文で表す必要があります。

INTO INTO句を指定すると、変更された行の値を、data_itemリストに指定する変数に格納できます。

data_item data_itemはそれぞれ、取り出したexpr値を格納するためのホスト変数またはPL/SQL変数です。

RETURNINGリストの各式については、INTOリストに、対応する型に互換性があるPL/SQL変数またはホスト変数を指定する必要があります。

制限事項: RETURNING句には、次の制限事項があります。

- exprに次の制限事項があります。

- UPDATE文およびDELETE文の場合、各exprは、単純式または単一セットの集計ファンクション式である必要があります。1つのreturning_clause内に単純式と単一セットの集計ファンクション式を混在させることはできません。INSERT文の場合、各exprは単純式である必要があります。INSERT文のRETURNING句では、集計ファンクションはサポートされていません。

- 単一セットの集計ファンクション式をDISTINCTキーワードに含めることはできません。

- exprのリストに主キー列または他のNOT NULL列が含まれている場合は、表にBEFORE UPDATEトリガーが定義されていると、UPDATE文の実行に失敗します。

- マルチテーブル・インサートではreturning_clauseを指定できません。

- パラレルDMLまたはリモート・オブジェクトにはこの句を使用できません。

- LONG型を取り出すことはできません。

- INSTEAD OFトリガーが定義されたビューに対して指定することはできません。

関連項目:
BULK COLLECT句を使用してコレクション変数に複数の値を戻す場合は、『Oracle Database PL/SQL言語リファレンス』を参照してください。

error_logging_clause

error_logging_clauseのUPDATE文での動作は、INSERT文の場合と同じです。詳細は、「INSERT」文の「error_logging_clause」を参照してください。

関連項目:
「エラー・ロギングによる表への挿入例:」

例

表の更新例: 次の文は、職種がSH_CLERKのすべての従業員の歩合にNULL値を指定します。

UPDATE employees
SET commission_pct = NULL
WHERE job_id = 'SH_CLERK';

次の文は、Douglas Grantを部門20の管理者に昇格させ、給与を$1,000引き上げます。

UPDATE employees SET
job_id = 'SA_MAN', salary = salary + 1000, department_id = 120
WHERE first_name||' '||last_name = 'Douglas Grant';

次の文は、remoteデータベースのemployees表の従業員の給与を増加します。

UPDATE employees@remote
SET salary = salary*1.1
WHERE last_name = 'Baer';

次の例は、UPDATE文の次の構文要素を示します。

- 単一文にまとめたupdate_set_clauseの2つの形式

- 相関副問合せ

- 更新された行を制限するwhere_clause

UPDATE employees a
SET department_id =
(SELECT department_id
FROM departments
WHERE location_id = '2100'),
(salary, commission_pct) =
(SELECT 1.1*AVG(salary), 1.5*AVG(commission_pct)
FROM employees b
WHERE a.department_id = b.department_id)
WHERE department_id IN
(SELECT department_id
FROM departments
WHERE location_id = 2900
OR location_id = 2700);

このUPDATE文によって、次の処理が実行されます。

- ジュネーブまたはミュンヘン(location_idは2900または2700)で働く従業員のみを更新します。

- これらの従業員のdepartment_idをボンベイ(location_idは2100)の対応するdepartment_idに設定します。

- 各従業員の給与を、その部門の平均給与の110%に上げます。

- 各従業員の歩合を、その部門の平均歩合の150%に上げます。

パーティションの更新例: 次の文は、sales表の1つのパーティションの値を更新します。

UPDATE sales PARTITION (sales_q1_1999) s
SET s.promo_id = 494
WHERE amount_sold > 1000;

オブジェクト表の更新例: 次の文では、2つのオブジェクト表(people_demo1およびpeople_demo2)が作成されますが、これらの型は「表のコレクション例」で作成されたpeople_typオブジェクトです。この例では、people_demo2から行を選択してpeople_demo1の行を更新する方法を示します。

CREATE TABLE people_demo1 OF people_typ;

CREATE TABLE people_demo2 OF people_typ;

UPDATE people_demo1 p SET VALUE(p) =
(SELECT VALUE(q) FROM people_demo2 q
WHERE p.department_id = q.department_id)
WHERE p.department_id = 10;

この例では、SET句と副問合せの両方で、VALUEオブジェクト参照ファンクションを使用します。

相関更新の例: 相関副問合せを使用してネストした表の行を更新する例は、「表のコレクション例:」を参照してください。

UPDATE操作中にRETURNING句を使用する例: 次の文は、更新された行の値を戻し、PL/SQL変数bnd1、bnd2、bnd3に結果を格納します。

UPDATE employees
SET job_id ='SA_MAN', salary = salary + 1000, department_id = 140
WHERE last_name = 'Jones'
RETURNING salary*0.25, last_name, department_id
INTO :bnd1, :bnd2, :bnd3;

次の文は、RETURNING句の式で単一セットの集計ファンクションを指定できることを示します。

UPDATE employees
SET salary = salary * 1.1
WHERE department_id = 100
RETURNING SUM(salary) INTO :bnd1;

A 構文図の読み方

この付録では、構文図の読み方について説明します。

このマニュアルでは、OracleのSQL構文を図形とテキスト(バッカス正規形: BNF)の両方で示しています。この付録では、次の内容を説明します。

- 図形構文図

- バッカス正規形構文

図形構文図

構文図とは、SQLの有効な構文を図で示したものです。構文図は、矢印が示す方向に左から右へ読んでください。

コマンドおよびキーワードは、四角形の中に大文字で書かれています。コマンドおよびキーワードは、四角形の中に書かれているとおりに指定してください。パラメータは、楕円形の中に小文字で書かれています。パラメータには変数を指定します。句読点、デリミタ、終了記号は円の中に書かれています。

構文図の中にパスが複数ある場合は、ユーザーがパスを選択できます。次の例では、NOPARALLELまたはPARALLELのいずれかを指定できます。

parallel_clause::=

キーワード、演算子、パラメータに複数の選択肢がある場合は、選択できるオプションが縦に並べて書かれています。次の構文図では、スタックにある4つのパラメータから1つ以上を指定することができます。

physical_attributes_clause::=

構文図で使用されるパラメータと、各文でそのパラメータに代入する値の例を次の表に示します。

表A-1 構文のパラメータ

パラメータ

説明

例

table

パラメータによって指定された型のオブジェクト名で置き換える必要があります。オブジェクト型の一覧は、「スキーマ・オブジェクト」を参照してください。

employees

c

ご使用のデータベース・キャラクタ・セットの単一文字で置き換える必要があります。

T

s

'text'

一重引用符で囲んだテキスト文字列で置き換える必要があります。'text'の構文は、「テキスト・リテラル」を参照してください。

'Employee records'

char

CHARまたはVARCHAR2データ型の式か、一重引用符で囲んだ文字リテラルで置き換える必要があります。

last_name

'Smith'

condition

TRUEまたはFALSEに評価される条件で置き換える必要があります。conditionの構文は、第6章「条件」を参照してください。

last_name >'A'

date

d

日付定数またはDATEデータ型の式で置き換える必要があります。

TO_DATE(

'01-Jan-2002',

'DD-MON-YYYY')

expr

「SQL式」にあるexprの構文の説明で定義されている任意のデータ型の式で置き換えることができます。

salary + 1000

integer

「整数リテラル」にあるintegerの構文の説明で定義されている整数で置き換える必要があります。

72

number

m

n

NUMBERデータ型の式、または「数値リテラル」にあるnumberの構文の説明で定義されている数値定数で置き換える必要があります。

AVG(salary)

15 * 7

raw

RAWデータ型の式で置き換える必要があります。

HEXTORAW('7D')

subquery

SELECT文で置き換える必要があります。このSELECT文は、別のSQL文中で使用されます。「SELECT」を参照してください。

SELECT last_name

FROM employees

db_name

埋込みSQLプログラム内のデフォルト以外のデータベース名で置き換える必要があります。

sales_db

db_string

Oracle Netデータベース接続のデータベース識別文字列で置き換える必要があります。詳細は、ご使用のOracle Netプロトコルのユーザーズ・ガイドを参照してください。

—

必須キーワードとパラメータ

必須キーワードおよびパラメータは、単独で示されているか、または選択肢のリストとして縦に並べて書かれています。必須キーワードおよびパラメータが1つの場合は、メイン・パス、つまり現在選択しているパスの線上に書かれています。次の例では、library_nameが必須パラメータです。

drop_library::=

HQ_LIBという名前のライブラリがあるとすると、この図は、次の文を示しています。

DROP LIBRARY hq_lib;

メイン・パスに交わる縦に並んだリストの中に、複数のキーワードまたはパラメータがある場合、そのうちの1つが必須です。複数のキーワードまたはパラメータから、いずれか1つを選択する必要があります。ただし、メイン・パスに存在しなくてもかまいません。次の例では、ALL、STANDBY、またはNONEを選択する必要があります。

security_clause::=

オプションのキーワードとパラメータ

キーワードおよびパラメータが、メイン・パスより上に縦に並べてリストされている場合は、それらのキーワードおよびパラメータがオプションであることを示しています。次の例では、上のパスへ進んでも、続けてメイン・パスに沿って進んでもかまいません。

deallocate_unused_clause::=

size_clause::=

これらの図に従うと、次の文はすべて有効です。

DEALLOCATE UNUSED;
DEALLOCATE UNUSED KEEP 1000;
DEALLOCATE UNUSED KEEP 10G;
DEALLOCATE UNUSED 8T;

構文のループ

ループは、その中の構文を何回でも繰り返せることを示します。次の例では、値の式を1つ選択した後、繰り返し別の式を選択できます。式と式の間はカンマで区切ります。

query_partition_clause::=

複数の部分に分割された構文図

複数の部分に分割された構文図は、すべてのメイン・パスの端と端が結合されているものとしてみてください。次の例は、3つに分割された構文図です。

alter_java::=

この図に従うと、次の文は有効です。

ALTER JAVA SOURCE jsource_1 COMPILE;

データベース・オブジェクト

表や列などのOracle識別子名は、30文字以内に制限されています。先頭文字は英字である必要がありますが、それ以外は、英字、数字、ドル記号($)、シャープ記号(#)およびアンダースコア(_)を任意に組み合せて指定できます。

ただし、Oracleの識別子を二重引用符(")で囲むと、一重引用符以外の空白を含むすべての有効な文字を組み合せて指定できます。Oracleの識別子は、二重引用符で囲んだ場合を除いて、大/小文字が区別されません。

関連項目:
詳細は、「データベース・オブジェクトのネーミング規則」を参照してください。

バッカス正規形構文

このマニュアルの各構文図の後には、テキストによる図の説明へのリンクが続きます。テキストによる説明は、次に示す記号や規則を含む、バッカス正規形(BNF)の単純な変形です。

記号または表記規則

意味

[ ]

大カッコは、カッコ内の項目を任意に選択することを表します。

{ }

中カッコは、カッコ内の項目のうち、1つが必須であることを表します。

|

縦線は、大カッコまたは中カッコ内の選択項目を区切ります。

...

省略記号は、前述の構文要素を繰り返すことができることを示します。

デリミタ

大カッコ、中カッコ、縦線および省略記号以外のデリミタは、表示されているとおり入力する必要があります。

太字

太字で示されている単語はキーワードです。キーワードは、表示されているとおり入力する必要があります。(オペレーティング・システムによっては、キーワードは大文字と小文字が区別されます。)太字以外の単語は、プレースホルダであり、名前または値を代入する必要があります。

B SQL操作時の自動ロックと手動ロックのメカニズム

この付録では、SQL文の実行時にデータを自動的にロックするメカニズムとユーザーの指定に従ってロックするメカニズムについて説明します。データの同時実行性および整合性という観点から説明したロック・メカニズムの概要は、『Oracle Database概要』を参照してください。

この付録では、次の内容を説明します。

- DML操作での自動ロック

- DDL操作での自動ロック

- 手動データ・ロック

DML操作での自動ロック

DMLロック(データ・ロックとも呼ぶ)の目的は、複数のユーザーが同時にアクセスするデータの整合性を保証することです。たとえば、DMLロックを使用すると、オンライン・ブックショップで在庫が残り1冊となった本を複数の顧客が購入してしまうことを回避できます。DMLロックは、同時に実行される矛盾するDML操作またはDDL操作による破壊的な干渉を防ぎます。

DML文では、表レベルと行レベルの両方のロックが自動的に取得されます。次の各項で、それぞれのタイプのロックまたはロック・モードの後のカッコ内にある頭字語は、Oracle Enterprise Managerのロック・モニターで使用される略称です。Enterprise Managerでは、表ロックのモード(RS、SRXなど)が示されるかわりに、すべての表ロックについてTMと表示される場合があります。

次に、行ロックおよび表ロックのタイプの概要を示します。行ロックおよび表ロックのタイプの詳細は、『Oracle Database概要』を参照してください。

行ロック(TX) 行ロック(TXロックとも呼ぶ)は、表の1つの行に対するロックです。INSERT、UPDATE、DELETE、MERGEおよびSELECT ... FOR UPDATE文のいずれかで変更される行ごとに、トランザクションは行ロックを取得します。行ロックは、トランザクションがコミットされるかロールバックされるまで保持されます。

ある行について行ロックを取得したトランザクションは、その行に対応する表についての表ロックも取得します。この表ロックによって、現行のトランザクション内のデータ変更を上書きするDDL操作の競合が回避されます。

表ロック(TM) INSERT、UPDATE、DELETE、MERGEおよびSELECT ... FOR UPDATE文で表が変更される場合、トランザクションは表ロック(TMロック)を自動的に取得します。これらのDML操作が表ロックを必要とするのは、トランザクションのために表へのDMLアクセスを確保すること、およびトランザクションと競合する可能性のあるDDL操作を防止するという2つの目的のためです。表ロックは、LOCK TABLE文(「手動データ・ロック」を参照)を使用して明示的に取得できます。

表ロックは、次のモードで保持できます。

- 行共有ロック(RS)(半共有表ロック、SSとも呼ぶ): 表のロックを保持しているトランザクションがその表の行をロックしており、それらの行を更新する予定であることを示します。SSロックは最も制限の少ないモードの表ロックであり、表に対する同時実行性が最も高くなります。

- 行排他ロック(RX)(副排他表ロック、SXとも呼ぶ): ロックを保持しているトランザクションが表の行を更新したか、SELECT ... FOR UPDATEを発行したことを示します。SXロックにより、他のトランザクションによる同じ表の行への問合せ、挿入、更新、削除またはロックの同時実行が許可されます。このため、SXロックの場合は、同じ表に対して同時に行われているSXロックとSSロックを複数のトランザクションで取得できます。

- 共有表ロック(S): トランザクションが共有表ロックを保持している場合は、(SELECT ... FOR UPDATEを使用することなく)他のトランザクションによる同じ表への問合せが許可されます。ただし、表を更新できるのは、1つのトランザクションが共有表ロックを保持する場合のみです。共有表ロックは、複数のトランザクションで同時に保持されている場合があるため、このロックを保持していても、トランザクションで常に表を変更できるとはかぎりません。

- 共有行排他表ロック(SRX)(共有副排他表ロック、SSXとも呼ぶ): 共有表ロックよりも制限の厳しいロックです。特定の表に対して、同時に1つのトランザクションのみがSSXロックを取得できます。トランザクションがSSXロックを保持している場合、他のトランザクションは表への問合せが許可されます(SELECT ... FOR UPDATEの場合を除く)。ただし、表の更新は許可されません。

- 排他表ロック(X): 最も制限の厳しいモードの表ロックです。このロックを保持しているトランザクションには、表への排他的な書込みアクセスが許可されます。表のXロックを取得できるのは、1つのトランザクションのみです。

関連項目:
「手動データ・ロック」

DML操作でのロック

Oracle Databaseでは、DML操作を実行すると行レベルと表レベルのロックが自動的に取得されます。ロック動作は操作の種類によって決まります。表B-1は、この項の情報をまとめたものです。

注意:
表B-1のDML文に示されている暗黙のSXロックは、制約の影響により一時的に排他(X)ロックになることがあります。

表B-1 DML文で取得されるロックのまとめ

SQL文

行ロック

表ロック・モード

RS

RX

S

SRX

X

SELECT ... FROM 表...

—

なし

可

可

可

可

可

INSERT INTO 表 ...

可

SX

可

可

否

否

否

UPDATE 表 ...

可

SX

可脚注 1

可脚注 1

否

否

否

MERGE INTO 表 ...

可

SX

可

可

否

否

否

DELETE FROM 表 ...

可

SX

可脚注 1

可脚注 1

否

否

否

SELECT ... FROM table FOR UPDATE OF ...

可

SX

可脚注 1

可脚注 1

否

否

否

LOCK TABLE table IN ...

—

ROW SHARE MODE

SS

可

可

可

可

否

ROW EXCLUSIVE MODE

SX

可

可

否

否

否

SHARE MODE

S

可

否

可

否

否

SHARE ROW EXCLUSIVE MODE

SSX

可

否

否

否

否

EXCLUSIVE MODE

X

否

否

否

否

否

脚注 1 競合する行ロックが他のトランザクションで保持されていない場合に可になります。それ以外の場合は待機します。

行を問い合せるときのロック

問合せは、SELECT文の場合のように明示的に行われることも、ほとんどのINSERT、MERGE、UPDATEおよびDELETE文の場合のように暗黙的に行われることもあります。問合せコンポーネントを含まなくてもかまわない唯一のDML文は、VALUES句を伴うINSERT文です。問合せはデータを読み取るのみであるため、他のSQL文に対してほとんど干渉しないSQL文です。

次の特性は、FOR UPDATE句を伴わない問合せが該当します。

- 問合せはデータ・ロックを取得しません。そのため、特定の行に対して問合せが実行される場合も含め、問合せが実行されている表を、他のトランザクションが問い合せて更新できます。FOR UPDATE句を伴わない問合せでは、他の操作をブロックするデータ・ロックが取得されないため、このような問合せを非ブロック問合せと呼ぶことがあります。

- 問合せでは、データ・ロックが解除されるまで待機する必要はありません。そのため、問合せはいつでも実行できます。このルールの例外としては、分散トランザクションが保留中であるなど、きわめて特殊な場合にデータ・ロックの待機が必要になることがあります。

行を変更するときのロック

一部のデータベースでは、ロック・マネージャを使用してメモリー内のロック・リストをメンテナンスします。一方、Oracle Databaseでは、ロックされている行を含むデータ・ブロックにロック情報を格納します。各行ロックが影響するのは1つの行のみです。

Oracle Databaseでは、キューイング・メカニズムを使用して行ロックを取得します。行ロックを必要とするトランザクションは、まだ行がロックされていなければ、行のデータ・ブロックにロックを取得します。トランザクション自体は、ブロック・ヘッダーの対象トランザクション・リスト(ITL)・セクションにエントリが記録されます。このトランザクションで変更されるそれぞれの行は、ITLに格納されたトランザクションIDのコピーをポイントします。したがって、同じブロックに含まれる100行を1つのトランザクションで変更する場合は100個の行ロックが必要ですが、100行すべてが1つのトランザクションIDを参照します。

トランザクションが終了すると、トランザクションIDはデータ・ブロック・ヘッダーのITLセクションにそのまま残ります。新しいトランザクションで行の変更が必要になると、ロックがアクティブかどうかの判断は、そのトランザクションIDを使用して行われます。ロックがアクティブな場合、新しいトランザクションのセッションは、ロックが解除されたときの通知を要求します。アクティブでない場合は、新しいトランザクションがロックを取得します。

INSERT、UPDATE、DELETEおよびSELECT ... FOR UPDATE文の特性は次のとおりです。

- DML文を含むトランザクションは、その文の変更対象の行に対して行排他ロックを取得します。そのため、行をロックしているトランザクションがコミットまたはロールバックされるまで、他のトランザクションは、ロックされている行を更新したり削除することはできません。

- これらの行ロックに加え、データを変更するDML文を含むトランザクションは、変更対象の行を含む表に対して副排他表ロック(SX)以上のロックを取得することも必要です。その表に対してトランザクションが、S、SRXまたはX表ロック(SXロックよりも制限が厳しいロック)をすでに保持している場合、SXロックは不要であるため取得しません。ただし、このトランザクションがSSロックのみをすでに保持している場合、Oracle DatabaseはSSロックをSXロックに自動的に変換します。

- DML文を含むトランザクションは、副問合せや暗黙的な問合せによって選択される行に対して行ロックを取得する必要はありません。
次のUPDATE文の例では、カッコ内のSELECT文が副問合せであり、WHERE a > 5句が暗黙的な問合せです。

UPDATE t SET x = ( SELECT y FROM t2 WHERE t2.z = t.z ) WHERE a > 5;

DML文内にある副問合せや暗黙的な問合せは、問合せの開始時点での一貫性が保証されており、その問合せで構成されているDML文による影響を参照しません。

- トランザクション内の問合せは、同じトランザクション内の前のDML文で行われた変更を参照できますが、他のトランザクションのコミットされていない変更は参照できません。

関連項目:
外部キーのロックの詳細は、『Oracle Database概要』を参照してください。

DDL操作での自動ロック

実行中のDDL操作でスキーマ・オブジェクトが影響を受けたり参照される間、そのオブジェクトの定義はデータ・ディクショナリ(DDL)・ロックで保護されます。たとえば、ユーザーがプロシージャを作成すると、そのプロシージャ定義で参照されるすべてのスキーマ・オブジェクトのDDLロックが自動的に取得されます。DDLロックは、プロシージャのコンパイルが完了する前に、これらのオブジェクトが変更されたり削除されるのを防ぎます。

Oracle Databaseは、DDLロックを必要とするDDLトランザクションのために、DDLロックを自動的に取得します。ユーザーは明示的にDDLロックを要求できません。DDL操作中には、変更または参照される個々のスキーマ・オブジェクトのみがロックされます。データ・ディクショナリ全体がロックされることはありません。

DDL操作では、変更されるスキーマ・オブジェクトに対するDMLロックも取得されます。

排他DDLロック

排他DDLロックは、他のセッションにDDLロックまたはDMLロックが取得されないようにします。

ほとんどのDDL操作では、同じスキーマ・オブジェクトを変更または参照する可能性のある他のDDL操作によって破壊的な干渉が起きないように、排他DDLロックが必要です。たとえば、ALTER TABLE操作で表に列を追加している間は、DROP TABLE操作で表を削除できません。その逆も同様です。ただし、表に対する問合せはブロックされません。

排他DDLロックは、DDL文が実行されて自動的にコミットされるまで継続します。排他DDLロックの取得では、別の操作によってすでにスキーマ・オブジェクトに対する別のDDLロックが保持されている場合、その取得は古いDDLロックが解除されるまで待機し、その後に処理されます。

共有DDLロック

リソースの共有DDLロックを使用すると、競合するDDL操作による破壊的な干渉を防ぐことができ、かつ一方では類似のDDL操作についてデータの同時実行性が許可されます。

たとえば、CREATE PROCEDURE文の実行時には、その文を含むトランザクションは、参照するすべての表について共有DDLロックを取得します。他のトランザクションは、同じ表を参照するプロシージャを同時に作成し、同じ表に対する共有DDLロックを同時に取得できます。ただし、参照する表に対して排他DDLロックを取得できるトランザクションはありません。

共有DDLロックは、DDL文が実行されて自動的にコミットされるまで継続します。そのため、共有DDLロックを保持するトランザクションには、トランザクションの継続中は参照しているスキーマ・オブジェクトの定義が変更されないことが保証されます。

ブレーク可能解析ロック

SQL文またはPL/SQLプログラム・ユニットは、参照する各スキーマ・オブジェクトについて解析ロックを保持します。解析ロックを取得する目的は、参照しているオブジェクトが変更または削除された場合に、対応する共有SQL領域を無効にできるようにするためです。解析ロックは、どのようなDDL操作も拒否せず、矛盾するDDL操作も許可するためにブレーク(中断)できるため、ブレーク可能解析ロックと呼ばれます。

解析ロックは、SQL文の実行解析フェーズの間に、共有プール内で取得されます。このロックは、共有プールの中にその文の共有SQL領域が残っているかぎり保持されます。

手動データ・ロック

データの同時実行性、データの整合性および文レベルの読取り一貫性を確保するために、Oracle Databaseは常に自動的にロックを実行します。ただし、このデフォルトのロック・メカニズムは上書きすることができます。デフォルト・ロックの上書きは、次のような状況で有効です。

- アプリケーションで、他のトランザクションによる変更を反映せず、トランザクションの継続時間にわたってデータの一貫性を維持する必要がある場合。トランザクション・レベルの読取り一貫性は、明示的なロック、読取り専用トランザクション、シリアライズ可能トランザクションを使用するか、デフォルトのロックを上書きすることで実現できます。

- アプリケーションで、あるトランザクションが他のトランザクションの完了まで待機せずに済むように、そのトランザクションがリソースに排他的アクセスできるようにする必要がある場合。トランザクションが継続している間、明示的にデータをロックできます。

自動ロックは、次の2つのレベルで上書きできます。

- トランザクション。トランザクション・レベルのロックは、次のSQL文で上書きできます。

- SET TRANSACTION ISOLATION LEVEL

- LOCK TABLE

- SELECT ... FOR UPDATE

これらの文で取得されたロックは、トランザクションがコミットまたはロールバックされた後で解除されます。

- セッション。必要なトランザクションの分離レベルは、ALTER SESSION SET ISOLATION LEVEL文を使用して設定できます。

注意:
Oracleのデフォルト・ロックを上書きする場合、データベース管理者やアプリケーション開発者は、データの整合性が保証される、データの同時実行性が許容範囲内である、デッドロックは発生する可能性がないかまたは発生しても適切に処理される、などの条件を満たす必要があります。これらの条件の詳細は、『Oracle Database概要』を参照してください。

C Oracleと標準SQL

この付録では、SQL:2008規格、SQL:2011規格およびSQL:2012規格へのOracleの規格準拠について説明します。SQL規格は10パートで構成されています。そのうちの1パート(SQL/RPR:2012)は、2012規格で新しく導入されました。その他の5パートは、2011規格で改訂されています。それ以外の4パートは、2008規格版が変更されずに維持されています。

SQL:2011規格の必須部分は、Core SQL:2011として知られ、SQL:2011のPart 2「Foundation」およびPart 11「Schemata」に記載されています。基礎的な機能は、Part 2のAnnex Fの「Feature taxonomy and definition for mandatory features of SQL/Foundation」表で分析されています。スキーマ機能は、Part 11のAnnex Eの「Feature taxonomy and definition for mandatory features of SQL/Schemata」表で分析されています。SQL:2008規格の必須部分は、すべてSQL:2011規格で置き換えられています。SQL/RPR:2012規格には、必須部分はありません。

この付録では、ANSI(米国規格協会)およびISO(国際標準化機構)によって確立されたSQL規格へのOracleの規格準拠について説明します。SQL/RPR:2012規格は、ANSIのみです。それ以外のSQL規格に、ANSIとISOの違いはありません。

この付録では、次の内容を説明します。

- ANSI規格

- ISO規格

- Core SQL:2011に対するOracleの準拠

- SQL/Foundation:2011のオプション機能に対するOracleのサポート

- SQL/CLI:2008に対するOracleの準拠

- SQL/PSM:2011に対するOracleの準拠

- SQL/MED:2008に対するOracleの準拠

- SQL/OLB:2008に対するOracleの準拠

- SQL/JRT:2008に対するOracleの準拠

- SQL/XML:2011に対するOracleの準拠

- SQL/RPR:2012に対するOracleの準拠

- FIPS 127-2に対するOracleの準拠

- 標準SQLに対するOracle拡張機能

- 以前の規格に対するOracleの準拠

- キャラクタ・セットのサポート

ANSI規格

SQLに関連するANSIのドキュメントは、次のとおりです。

- ANSI/ISO/IEC 9075-1:2011, Information technology—Database languages—SQL—Part 1: Framework (SQL/Framework)

- ANSI/ISO/IEC 9075-2:2011, Information technology—Database languages—SQL—Part 2: Foundation (SQL/Foundation)

- INCITS/ISO/IEC 9075-3:2008, Information technology—Database languages—SQL—Part 3: Call-Level Interface (SQL/CLI)

- ANSI/ISO/IEC 9075-4:2011, Information technology—Database languages—SQL—Part 4: Persistent Stored Modules (SQL/PSM)

- INCITS/ISO/IEC 9075-9:2008, Information technology—Database languages—SQL—Part 9: Management of External Data (SQL/MED)

- INCITS/ISO/IEC 9075-10:2008, Information technology—Database languages—SQL—Part 10: Object Language Bindings (SQL/OLB)

- ANSI/ISO/IEC 9075-11:2011, Information technology—Database languages—SQL—Part 11: Information and Definition Schemas (SQL/Schemata)

- INCITS/ISO/IEC 9075-13:2008, Information technology—Database languages—SQL—Part 13: SQL Routines and Types using the Java Programming Language (SQL/JRT)

- ANSI/ISO/IEC 9075-14:2011, Information technology—Database languages—SQL—Part 14: XML-Related Specifications (SQL/XML)

これらの規格は、次の項に示す対応するISO規格と同一です。

また、ANSIは、次のパートを2012規格に採用しました。このパートは、ISO規格ではありません。

- INCITS 500:2012, Information technology—Database languages—SQL—Part 14: Row Pattern Recognition (SQL/RPR)

ANSI規格のコピーについては、次の宛先に申し込んでください。

American National Standards Institute

25 West 43rd Street, fourth floor

New York, NY 10036 USA

電話番号: +1.212.642.4900

FAX番号: +1.212.398.0023

URL: http://www.ansi.org/

規格のコピーは、次のWebサイトからも入手できます。

http://webstore.ansi.org/default.aspx

SQL規格を含むANSI規格のサブセットは、INCITS規格です。これらは、INCITS(InterNational Committee for Information Technology Standards)から入手できます。URLは、次のとおりです。

http://www.incits.org/

ISO規格

SQLに関連するISOのドキュメントは、次のとおりです。

- ISO/IEC 9075-1:2011, Information technology—Database languages—SQL—Part 1: Framework (SQL/Framework)

- ISO/IEC 9075-2:2011, Information technology—Database languages—SQL—Part 2: Foundation (SQL/Foundation)

- ISO/IEC 9075-3:2008, Information technology--Database languages--SQL--Part 3: Call-Level Interface (SQL/CLI)

- ISO/IEC 9075-4:2011, Information technology—Database languages—SQL—Part 4: Persistent Stored Modules (SQL/PSM)

- ISO/IEC 9075-9:2008, Information technology--Database languages--SQL--Part 9: Management of External Data (SQL/MED)

- ISO/IEC 9075-10:2008, Information technology--Database languages--SQL--Part 10: Object Language Bindings (SQL/OLB)

- ISO/IEC 9075-11:2011, Information technology—Database languages—SQL—Part 11: Information and Definition Schemas (SQL/Schemata)

- ISO/IEC 9075-13:2008, Information technology--Database languages--SQL--Part 13: SQL Routines and Types using the Java Programming Language (SQL/JRT)

- ISO/IEC 9075-14:2011, Information technology—Database languages—SQL—Part 14: XML-Related Specifications (SQL/XML)

ISO規格のコピーについては、次の宛先に申し込んでください。

International Organization for Standardization

1, ch. de la Voie-Creuse

Case postale 56

CH-1211, Geneva 20, Switzerland

電話番号: +41.22.749.0111

FAX番号: +41.22.733.3430

URL: http://www.iso.org/

Webストアからも入手できます。URLは、次のとおりです。

http://www.iso.org/iso/store.htm

Core SQL:2011に対するOracleの準拠

ANSIおよびISOのSQL規格では、規格準拠性について明示する箇所に、準拠の種類および実装されている機能について記載することを義務付けています。規格準拠性についての最小限の明示をCore SQL:2011といいます。これは、規格のPart 2「SQL/Foundation」およびPart 11「SQL/Schemata」に定義されています。次の製品は、後続の表に示すCore SQL:2011に完全(または部分的)に準拠しています。

- Oracle Databaseサーバー、リリース12.1

- OTT (Oracle Type Translator)、リリース12.1

- Pro*C/C++リリース12.1

- Pro*COBOLリリース12.1

SQL規格準拠機能は、移植性の指針または機能性の指針として使用できます。移植性の観点からは、ユーザーは、規格の機能の正確な構文とセマンティクスの両方の準拠性に関心があります。機能性の観点からは、ユーザーは正確な構文よりもセマンティクスの問題に関心を持ちます。この付録の表では、規格の構文およびセマンティクスのサポートに関して次の用語を使用します。

- 完全なサポート: 機能は規格の構文およびセマンティクスによってサポートされます。

- 部分的なサポート: 規格の構文の一部がサポートされますが、完全にはサポートされません。サポートされる場合は規格のセマンティクスを持ちます。

- 拡張サポート: 規格のセマンティクスと、追加の機能がサポートされます。

- 同等のサポート: 規格とは異なる構文を使用して規格のセマンティクスがサポートされます。

- 類似のサポート: 規格の構文もセマンティクスも正確にはサポートされませんが、類似機能が提供されます。

表C-1に、Core SQL:2011の機能に対するOracleのサポートを示します。

表C-1 Core SQL:2011の機能に対するOracleのサポート

機能識別子、機能

サポート

E011、数値データ型

この機能を完全にサポートします。

E021、文字データ型

次の副機能を完全にサポートします。

- E021-01、CHARACTERデータ型

- E021-07、文字の連結

- E021-08、UPPERおよびLOWERファンクション

- E021-09、TRIMファンクション

- E021-10、文字データ型間の暗黙的な加算

次の副機能を部分的にサポートします。

- E021-02、CHARACTER VARYINGデータ型(Oracleは、長さ0のVARCHAR文字列とNULLを区別しません)

- E021-03、文字リテラル(Oracleは、長さ0のリテラル''をNULLとみなします)

- E021-12、文字の比較(Oracleの規則は、比較する2つの文字列の短い方に埋込みを行うという点で規格とは異なります)

Oracleは、次の副機能と同等の機能を持ちます。

- E021-04、CHARACTER_LENGTHファンクションのかわりに、LENGTHファンクションを使用します。

- E021-05、OCTET_LENGTHファンクションのかわりに、LENGTHBファンクションを使用します。

- E021-06、SUBSTRINGファンクションのかわりに、SUBSTRファンクションを使用します。

- E021-11、POSITIONファンクションのかわりに、INSTRファンクションを使用します。

E031、識別子

Oracleはこの機能をサポートしますが、次の例外があります。

- 引用識別子内で二重引用符を使用するためのエスケープ・シーケンスはサポートされません。

- 非引用識別子はOracleの予約語とは異なる場合があります(Oracleの予約語のリストは規格のリストとは異なります)。

- 引用識別子の場合でも、ROWIDという列名は許可されていません。

この機能は次のように拡張されます。

- 識別子は最大30文字まで指定可能です。

- 非引用識別子にはドル記号($)またはシャープ記号(#)を指定可能です。

E051、基本的な問合せ指定

次の副機能を完全にサポートします。

- E051-01、SELECT DISTINCT

- E051-02、GROUP BY句

- E051-04、SELECT構文のリストにない列をGROUP BYに含めることができます。

- E051-05、SELECT構文のリスト項目の名前の変更

- E051-06、HAVING句

- E051-07、SELECT構文のリストでの*の修飾

次の副機能を部分的にサポートします。

- E051-08、FROM句の相関名(Oracleは、相関名をサポートしますが、オプションのASキーワードはサポートしません)

Oracleは、次の副機能と同等の機能を持ちます。

- E051-09、FROM句での列の名前の変更(FROM句の副問合せで列名を変更できます)

E061、基本的な述語および検索条件

Oracleはこの機能を完全にサポートしますが、Oracleの文字列比較は規格とは異なります。規格では、長さが異なる2つの文字列を比較する場合、空白または実際のすべての文字よりも小さい仮想の文字が短い文字列に埋め込まれます。埋込みの判断はキャラクタ・セットに基づいて行われます。Oracleでは、この判断は、比較対象が固定長または可変長のどちらかによって決まります。

E071、基本的な問合せ式

次の副機能を完全にサポートします。

- E071-01、UNION DISTINCT表演算子

- E071-02、UNION ALL表演算子

- E071-05、表演算子によって結合された列の型は同じでなくてもかまいません。

- E071-06、副問合せの表演算子

Oracleは、次の副機能と同等の機能を持ちます。

- E071-03、EXCEPT DISTINCT表演算子(EXCEPT DISTINCTのかわりにMINUSを使用します)

E081、基本的な権限

Oracleは、E081-09、USAGE権限を除いて、この機能のすべての副機能を完全にサポートします。規格では、USAGE権限を持つユーザーは、ドメイン、照合、キャラクタ・セット、文字変換、ユーザー定義型および順序ジェネレータを使用できます。Oracleは、ドメインまたは文字変換をサポートしません。照合およびキャラクタ・セットにアクセスするには権限は必要ありません。ユーザー定義型を使用するためのOracleの権限は、EXECUTEです。順序型を使用するためのOracleの権限は、SELECTです。

E091、集合ファンクション

この機能を完全にサポートします。

E101、基本的なデータ操作

この機能を完全にサポートします。

E111、単一行のSELECT文

この機能を完全にサポートします。

E121、基本的なカーソルのサポート

次の副機能を完全にサポートします。

- E121-02、ORDER BY列は、SELECT構文のリストになくてもかまいません。

- E121-03、ORDER BY句の値の式

- E121-04、OPEN文

- E121-06、位置付けされたUPDATE文

- E121-07、位置付けされたDELETE文

- E121-08、CLOSE文

Oracleは、次の副機能の部分的なサポートを提供します。

- E121-01、DECLARE CURSOR: FOR READ ONLY構文の場合を除き、完全にサポートされます。

- E121-10、FETCH文、暗黙的なNEXT: ノイズ・ワードFROMの場合を除き、完全にサポートされます。

Oracleは、次の副機能の拡張サポートを提供します。

- E121-17、WITH HOLDカーソル(規格では、カーソルはROLLBACK中は保持されませんが、OracleではROLLBACK中も保持されます。)

E131、NULL値のサポート

Oracleはこの機能を完全にサポートしますが、Oracleでは文字列型のNULLを長さが0(ゼロ)の文字列と区別できないという例外があります。

E141、基本的な整合性制約

この機能を完全にサポートします。

E151、トランザクションのサポート

この機能を完全にサポートします。

E152、基本的なSET TRANSACTION文

この機能を完全にサポートします。

E153、副問合せを持つ更新可能な問合せ

この機能を完全にサポートします。

E161、先頭に2つの負の符号(-)を付けたSQL文のコメント

この機能を完全にサポートします。

E171、SQLSTATEのサポート

この機能を完全にサポートします。

E182、ホストの言語バインディング

Oracleは、Pro*C/C++およびPro*COBOLを介してこの機能を完全にサポートします。

F021、基本的な情報スキーマ

Oracleはこの機能のビューを持ちません。ただし、同じ情報を別のメタデータ・ビューで使用可能にします。

- TABLESのかわりに、ALL_TABLESを使用します。

- COLUMNSのかわりに、ALL_TAB_COLUMNSを使用します。

- VIEWSのかわりに、ALL_VIEWSを使用します。
ただし、ユーザーのビューにWITH CHECK OPTIONが定義されていたり、更新可能な場合は、OracleのALL_VIEWSは表示されません。ビューにWITH CHECK OPTIONが定義されているかどうかを確認する場合は、ALL_CONSTRAINTSを使用し、TABLE_NAMEをそのビュー名にして、CONSTRAINT_TYPEが'V'であるビューを検索します。

- TABLE_CONSTRAINTS、REFERENTIAL_CONSTRAINTSおよびCHECK_CONSTRAINTSのかわりに、ALL_CONSTRAINTSを使用します。
ただし、OracleのALL_CONSTRAINTSは、制約が遅延可能か初期遅延かは表示しません。

F031、基本的なスキーマ操作

次の副機能を完全にサポートします。

- F031-01、実表を作成するためのCREATE TABLE文

- F031-02、CREATE VIEW文

- F031-03、GRANT文

Oracleは、次の副機能に対して同等のサポートを提供します。

- F031-04、ALTER TABLE文のADD COLUMN句(Oracleは、この構文のオプションのキーワードCOLUMNをサポートしません。また、規格とは異なりますが、Oracleでは列定義をカッコで囲む必要があります。)

次の副機能はサポートしません(Oracleは、キーワードRESTRICTをサポートしません)。

- F031-13、DROP TABLE文のRESTRICT句

- F031-16、DROP VIEW文のRESTRICT句

- F031-19、REVOKE文のRESTRICT句

(OracleのDROPコマンドは、すべての依存するオブジェクトを連鎖的に削除したり依存するオブジェクトがある場合に削除を禁止するかわりに、依存するオブジェクトを無効にすることで、ユーザー操作なしに後で再検証できるように規格を拡張しています。)

F041、基本的な結合表

この機能を完全にサポートします。

F051、基本的な日付および時刻

次の副機能を除き、この機能を完全にサポートします。

- F051-02、TIMEデータ型

- F051-07、LOCALTIME

F081、ビューのUNIONおよびEXCEPT

OracleはビューのUNIONを完全にサポートします。規格のEXCEPTと同等なOracleの機能はMINUSと呼ばれ、ビューで完全にサポートされます。

F131、グループ操作

この機能を完全にサポートします。

F181、複数モジュールのサポート

この機能を完全にサポートします。

F201、CASTファンクション

この機能を完全にサポートします。

F221、明示的なデフォルト

Oracleの列定義内でのDEFAULT ON NULL機能は、INSERT文に同等の機能を提供しますが、UPDATE文には同等の機能を提供しません。

F261、CASE式

この機能を完全にサポートします。

F311、スキーマ定義文

この機能を完全にサポートします。

F471、スカラー副問合せの値

この機能を完全にサポートします。

F481、拡張NULL述語

この機能を完全にサポートします。

F501、機能および準拠するビュー

Oracleは、この機能をサポートしません。

F812、基本的なフラグ付け

Oracleは、フラガーを持っていますが、SQL:2011よりもSQL-92に準拠しています。

S011、固有型

固有型は、強い型指定のスカラー型です。固有型は、1つの属性のみを持つオブジェクト型を使用して、Oracleでエミュレートできます。USER_DEFINED_TYPESと呼ばれる規格の情報スキーマ・ビューは、Oracleのメタデータ・ビューALL_TYPESと同じです。

T321、基本的なSQL起動ルーチン

次の副機能を完全にサポートします。

- T321-03、ファンクションの起動

- T321-04、CALL文

Oracleは、次の副機能を異なる構文でサポートします。

- T321-01、オーバーロードしないユーザー定義ファンクション

- T321-02、オーバーロードしないユーザー定義プロシージャ

Oracleの構文CREATE FUNCTIONおよびCREATE PROCEDUREと規格の構文の違いは、次のとおりです。

- 規格の構文では、パラメータのモード(IN、OUTまたはINOUT)はパラメータ名の前ですが、Oracle構文では、パラメータ名の後です。

- 規格の構文では、INOUTを使用しますが、Oracleの構文では、IN OUTを使用します。

- Oracleの構文では、復帰型の後およびルーチン本体の定義の前にISまたはASが必要ですが、規格の構文では、必要ありません。

- ルーチンの本体がCである場合、そのルーチンに名前を付けるとき、規格の構文では、キーワードLANGUAGE C EXTERNAL NAMEを使用しますが、Oracleの構文では、LANGUAGE C NAMEを使用します。

- ルーチンの本体がSQLである場合、Oracleでは、プロシージャを独自に拡張したPL/SQLを使用します。

Oracleは、次の副機能をPL/SQLではサポートしますが、Oracle SQLではサポートしません。

- T321-05、RETURN文

Oracleは、次の副機能と同等の機能を提供します。

- T321-06、ROUTINESビュー: ALL PROCEDURESメタデータ・ビューを使用します。

- T321-07、PARAMETERSビュー: ALL_ARGUMENTSメタデータ・ビューおよびALL_METHOD_PARAMSメタデータ・ビューを使用します。

T631、1つのリスト要素を使用したIN述語

この機能を完全にサポートします。

SQL/Foundation:2011のオプション機能に対するOracleのサポート

表C-2に、SQL/Foundation:2011のオプション機能に対するOracleのサポートを示します。

表C-2 SQL/Foundation:2011のオプション機能に対するOracleのサポート

機能識別子、機能

サポート

B012、埋込みC

この機能を完全にサポートします。

B013、埋込みCOBOL

この機能を完全にサポートします。

B021、ダイレクトSQL

この機能を完全にサポートします(SQL*Plus)。

B031、基本的な動的SQL

Oracleは、2種類の動的SQLをサポートします。埋込み言語のマニュアルのOracle動的SQLおよびANSI動的SQLに関する説明を参照してください。

ANSI動的SQLは規格の実装であり、次の制限事項があります。

- Oracleは、記述子の項目のサブセットをサポートします。

- <句による入力>の場合、Oracleは<入力記述子の使用>のみをサポートします。

- <句による出力>の場合、Oracleは<記述子への出力>のみをサポートします。

- 動的パラメータは、コロンの後に疑問符ではなく識別子を指定する形式で示されます。

Oracle動的SQLは規格の動的SQLに似ていますが、次の変更が加えられています。

- パラメータは、コロンの後に疑問符ではなく識別子を指定する形式で示されます。

- 規格のDESCRIBE OUTPUTは、OracleのDESCRIBE SELECT LIST FOR文に置き換えられます。

- Oracleでは、動的SQL文を準備するPREPARE文の前に、その動的SQL文を使用して物理的にカーソルを宣言する場合、DECLARE STATEMENTを使用できます。

B032、拡張動的SQL

ANSI動的SQLでは、Oracleはこの機能からグローバル文およびグローバル・カーソルを宣言する機能のみを実装します。その他の機能はサポートしません。

Oracle動的SQLでは、OracleのDESCRIBE BIND VARIABLESは、規格のDESCRIBE INPUTと同等です。その他の機能はサポートしません。

B122、ルーチン言語C

Oracleは、Cで記述された外部ルーチンをサポートしますが、このようなルーチンを作成する規格構文はサポートしません。

B128、ルーチン言語SQL

OracleはPL/SQLで記述されたルーチンをサポートします。PL/SQLは規格の手続き型言語SQL/PSMと同等なOracleの機能です。

F032、CASCADE削除動作

Oracleでは、DROPコマンドによって削除されたオブジェクトのすべての依存オブジェクトが無効になります。無効になったオブジェクトを正常に再コンパイルできる方法を使用して、削除されたオブジェクトを再定義するまで、無効になったオブジェクトは完全に使用禁止になります。

F033、ALTER TABLE文のDROP COLUMN句

OracleはDROP COLUMN句を提供しますが、規格で使用されるRESTRICTまたはCASCADEオプションは提供しません。

F034、拡張REVOKE文

Oracleは、この機能の次の部分をサポートします。

- F034-01、スキーマ・オブジェクトの所有者以外のユーザーによって実行されるREVOKE文

- F034-03、権限受領者がWITH GRANT OPTIONを持つ権限を取り消すREVOKE文

Oracleは、この機能のうち、次の部分と同等の機能を提供します。

- CASCADE: Oracleでは、REVOKEによってすべての依存オブジェクトが無効になります。これにより、この後にCREATEコマンドとGRANTコマンドによって、無効になったオブジェクトが正常に再コンパイルできるようになり、メタデータが変更されるまでは、これらのオブジェクトは完全に使用禁止になります。

F052、期間および日時の算術

Oracleは、INTERVAL YEAR TO MONTHおよびINTERVAL DAY TO SECONDデータ型のみをサポートします。

F111、SERIALIZABLE以外の分離レベル

Oracleは、SERIALIZABLEに加えて、READ COMMITTED分離レベルをサポートします。

F121、基本的な診断管理

この機能の大部分の機能は、埋込み言語のSQLCAによって提供されます。

F191、参照削除アクション

Oracleは、ON DELETE CASCADEおよびON DELETE SET NULLをサポートします。

F200、TRUNCATE TABLE

Oracleはこの機能を完全にサポートしています。また、参照整合性制約で自身を参照する表の切捨てを可能にすることと、ON DELETE CASCADE参照制約が有効にされている子表に向けてカスケードする機能により、この機能を拡張しています。

F231、権限表

Oracleは、この情報を次のメタデータ・ビューで使用可能にします。

- TABLE_PRIVILEGESのかわりに、ALL_TAB_PRIVSを使用します。

- COLUMN_PRIVILEGESのかわりに、ALL_COL_PRIVSを使用します。

- OracleはUSAGE権限をサポートしないため、USAGE_PRIVILEGESと同等の権限は存在しません。

F281、LIKE拡張

この機能を完全にサポートします。

F291、UNIQUE述語

IS A SET条件は、多重集合が集合であるかどうか(各行が一意であるかどうか)のテストに使用できます。したがって、次の

UNIQUE <table subquery>

は、次の同じです。

CAST (<table subquery> AS MULTISET) IS A SET

F302、INTERSECT表演算子

OracleはINTERSECTをサポートしますが、INTERSECT ALLはサポートしません。Oracleの構文は、UNION、INTERSECTおよびMINUSの優先順位が同じであるという点で規格と異なります。

F312、MERGE文

OracleのMERGE文は規格とほとんど同じですが、次の制限事項があります。

- Oracleは、表の別名の前のASキーワード(オプション)をサポートしません。

- Oracleは、表の別名の後にカッコで囲まれた列名のリストを使用して、USING句で指定した表の列名を変更する機能をサポートしません。

- Oracleは、<上書き句>をサポートしません。

F314、DELETEブランチのあるMERGE文

Oracleには、同様の機能があります。ただし、Oracleでは最初に行を更新してから、更新された行が条件を満たした場合に削除できるようになります。

F321、ユーザーの認可

Oracleは、次の副機能と同等の機能を提供します。

- SESSION_USERのかわりに、SYS_CONTEXT ('USERENV', 'SESSION_USER')の使用

- CURRENT_USERのかわりに、SYS_CONTEXT ('USERENV', 'CURRENT_USER')の使用

Oracleは、次の副機能をサポートしていません。

- SYSTEM_USER

- SET SESSION AUTHORIZATION文

F341、使用状況表

Oracleは、この情報をALL_DEPENDENCIES、DBA_DEPENDENCIESおよびUSER_DEPENDENCIESビューで使用可能にします。

F381、拡張スキーマ操作

Oracleは、この機能の次の要素を完全にサポートします。

- Oracleは、ALTER TABLEを使用して、表の制約を追加する規格の構文をサポートします。

Oracleは、この機能の次の要素を部分的にサポートします。

- Oracleは、表の制約を削除する規格の構文をサポートしますが、RESTRICTはサポートしません。

Oracleは、この機能のうち、次の要素と同等の機能を提供します。

- 列のデフォルト値を変更するには、ALTER TABLEのMODIFYオプションを使用します。

Oracleは、この機能の次の部分をサポートしません。

- DROP SCHEMA文

- ALTER ROUTINE文

F382、列データ型の変更

Oracleは、規格とは異なる構文でこの機能をサポートします。規格を拡張しているため、Oracleでは、列のサイズまたは精度を小さくできます。

F383、Set column not null句

Oracleは、この機能の2つの副機能と同等の機能を提供します。

- 既存の列にNOT NULL制約を追加するための、ALTER TABLE ... MODIFYの使用

- NOT NULL制約を削除するための、ALTER TABLEを使用した名前による制約の削除

F384、Drop identity property句

Oracleは、ALTER TABLE ... MODIFY (... DROP IDENTITY)を使用することで、同等の機能を提供します。

F386、Set identity column generation句

Oracleは、同等の機能を提供します。Oracleの構文とセマンティクスは規格と同じですが、次の例外があります。

- Oracleは、RESTARTをサポートしていません。そのかわりに、START WITHを使用します。ID列を再開すると、そのID列の他のパラメータ値はデフォルトにリセットされます(ただし、ALTER TABLE文で明示的に設定している場合を除く)。

OracleのSTART WITH LIMIT VALUEオプションは、規格に対する拡張です。

F391、長い識別子

Oracleは、最大30文字の識別子をサポートします。

F393、リテラルのUnicodeエスケープ

OracleのUNISTR機能は、すべてのUnicode文字に対する数値のエスケープ・シーケンスをサポートします。

F394、オプションの正規形指定

この機能により、NORMALIZEファンクションおよびIS NORMAL述語にキーワードNFC、NFD、NFKCおよびNKDが追加されます。これらのキーワードを指定しない場合、NFCがデフォルトです(「T061、UCSのサポート」を参照)。Oracleは、4つすべての正規形を、次のように規格とは異なる構文でサポートします。

- NFCについては、COMPOSEを使用します。

- NFDについては、DECOMPOSEにCANONICALオプションを付けて使用します。

- NFKDについては、DECOMPOSEにCOMPATIBILITYオプションを付けて使用します。

- NFKCについては、DECOMPOSEにCANONICALオプションとCOMPOSEを付けて使用します。

Oracleは、IS NORMAL述語をサポートしません。

F401、拡張結合表

Oracleは、FULL外部結合、CROSS結合およびNATURAL結合をサポートします。

F402、LOB、配列および多重集合での名前付き列の結合

Oracleは、宣言した型がネストした表である列での名前付き列の結合をサポートします。Oracleは、LOBまたは配列での名前付き列の結合はサポートしません。

F403、パーティション結合表

Oracleは、FULL外部結合を除くこの機能をサポートします。

F411、タイムゾーンの指定

Oracleは、TIMESTAMP WITH TIME ZONEを完全サポートしますが、TIME WITH TIME ZONEはサポートしません。

F421、各国語キャラクタ

この機能を完全にサポートします。

F431、スクロール可能なカーソル

この機能を完全にサポートします。

F441、拡張集合ファンクション・サポート

Oracleは、この機能の次の部分をサポートします。

- ビューまたはインライン・ビューのいずれかで集計を使用して定義された列を参照するWHERE句の機能

- 式のDISTINCTを使用しないCOUNT

- 集計問合せに対する外部参照となる列を参照する集計。ただし、Oracleは集計問合せの定義を、最も内側にある集計を含んでいる問合せとしています。これは、集計内で参照される範囲変数を定義する最も内側の問合せではありません。

F442、集合ファンクションでの複合列の参照

この機能を完全にサポートします。

F461、名前付きのキャラクタ・セット

Oracleは、Oracle定義の名前が付いた複数のキャラクタ・セットをサポートします。Oracleは、この機能の他の部分をサポートしません。

F491、制約管理

この機能を完全にサポートします。

F492、オプションの表の制約の強制

規格のENFORCEDは、OracleのENABLE VALIDATEと同じです。規格のNOT ENFORCEDは、OracleのDISABLE NOVALIDATEと同じです。それ以外のENABLE | DISABLEオプション、VALIDATE | NOVALIDATEオプション、およびRELY | NORELYオプションの組合せは、規格の拡張です。

F531、一時表

Oracleは、GLOBAL TEMPORARY表をサポートします。

F555、拡張秒精度

Oracleはこの機能を拡張して、小数点以下9桁までをサポートします。

F561、完全評価式

この機能を完全にサポートします。

F571、真理値テスト

OracleのLNNVLファンクションは、規格のIS NOT TRUE述語と同等です。

F591、導出表

Oracleは<導出表>をサポートしますが、次の制限事項があります。

- Oracleは、表の別名の前のASキーワード(オプション)をサポートしません。

- Oracleは、<導出列リスト>をサポートしません。

F641、行コンストラクタおよび表コンストラクタ

Oracleでは、他の行コンストラクタまたは副問合せとの等価性または非等価性の比較に行コンストラクタを使用できます。Oracleは、この機能の他の部分をサポートしません。

F690、照合サポート

OracleのNLSSORTファンクションは、文字式の照合の変更に使用できます。

F693、SQLセッションおよびクライアント・モジュールの照合

セッション照合を設定するには、ALTER SESSION SET NLS_COMP = 'LINGUISTIC'を使用するとともに、必要な照合にNLS_SORTを設定します。Oracleは、クライアント・モジュールの照合をサポートしません。

F695、変換のサポート

OracleのCONVERTファンクションでは、データベース・キャラクタ・セットと各国語キャラクタ・セット間での変換が可能です。その他のキャラクタ・セットについては、データをRAWデータ型に格納して、PL/SQLパッケージ・ファンクションUTL_RAW.CONVERTを使用します。Oracleには、キャラクタ・セットの変換を追加したり、削除する機能はありません。

F721、遅延可能制約

この機能を完全にサポートします。

F731、列INSERT権限

この機能を完全にサポートします。

F761、セッション管理

Oracleは、この機能のうち、次の要素と同等の機能を提供します。

- 規格のSET SESSION CHARACTERISTICS AS TRANSACTION SERIALIZABLEと同等な機能は、ALTER SESSION SET ISOLATION_LEVEL = SERIALIZABLEです。

- 規格のSET SCHEMAと同等な機能は、ALTER SESSION SET CURRENT_SCHEMAです。

- 規格のSET COLLATIONと同等な機能は、ALTER SESSION SET NLS_SORTです。

F763、CURRENT_SCHEMA

Oracleの同等機能は、SYS_CONTEXT ('USERENV', 'CURRENT_SCHEMA')です。

F771、結合管理

OracleのCONNECT文は規格のCONNECT文と同じ機能を持ちますが、構文は異なります。規格のSET CONNECTIONを使用するかわりに、OracleではSQL文を実行する必要のある接続を指定するAT句を提供します。Oracleの埋込み言語では、COMMITまたはROLLBACKのRELEASEオプションを使用して接続を切断できます。

F781、自己参照操作

この機能を完全にサポートします。

F801、完全集合ファンクション

この機能を完全にサポートします。

F831、完全カーソル更新

Oracleは、問合せでのFOR UPDATE句とORDER BY句の組合せをサポートします。

F841、LIKE_REGEX述語

OracleではREGEXP_LIKEに相当します。Oracleのパターン構文は規格の機能の一部が欠落しています。Oracleの一致パラメータは一部の綴りが違いますが、規格と同じ機能を持っています。

F842、OCCURRENCES_REGEXファンクション

OracleではREGEXP_COUNTに相当します。Oracleのパターン構文は規格の機能の一部が欠落しています。Oracleの一致パラメータは一部の綴りが違いますが、規格と同じ機能を持っています。

F843、POSITION_REGEXファンクション

OracleではREGEXP_INSTRに相当します。Oracleのパターン構文は規格の機能の一部が欠落しています。Oracleの一致パラメータは一部の綴りが違いますが、規格と同じ機能を持っています。

F844、SUBSTRING_REGEXファンクション

OracleではREGEXP_SUBSTRに相当します。Oracleのパターン構文は規格の機能の一部が欠落しています。Oracleの一致パラメータは一部の綴りが違いますが、規格と同じ機能を持っています。

F845、TRANSLATE_REGEXファンクション

OracleではREGEXP_REPLACEに相当します。Oracleのパターン構文は規格の機能の一部が欠落しています。Oracleの一致パラメータは一部の綴りが違いますが、規格と同じ機能を持っています。

F850、<問合せ式>でのトップレベルの<order by句>

この機能を完全にサポートします。

F851、副問合せでの<order by句>

この機能を完全にサポートします。

F852、ビューでのトップレベルの<order by句>

この機能を完全にサポートします。

F855、<問合せ式>でのネストした<order by句>

この機能を完全にサポートします。

F856、<問合せ式>でのネストした<fetch first句>

この機能を完全にサポートします。

F857、<問合せ式>でのトップレベルの<fetch first句>

この機能を完全にサポートします。

F858、副問合せでの<fetch first句>

この機能を完全にサポートします。

F859、ビューでのトップレベルの<fetch first句>

この機能を完全にサポートします。

F860、<fetch first句>での動的 <fetch first row count>

この機能を完全にサポートします。

F861、<問合せ式>でのトップレベルの<result offset句>

この機能を完全にサポートします。

F862、副問合せでの<result offset句>

この機能を完全にサポートします。

F863、<問合せ式>でのネストした<result offset句>

この機能を完全にサポートします。

F864、ビューでのトップレベルの<result offset句>

この機能を完全にサポートします。

F865、<result offset句>での動的<offset row count>

この機能を完全にサポートします。

F866、FETCH FIRST句: PERCENTオプション

この機能を完全にサポートします。

F867、FETCH FIRST句: WITH TIESオプション

この機能を完全にサポートします。

S023、基本的な構造型

Oracleのオブジェクト型は、規格の構造型と同等です。

S024、拡張構造型

Oracleの構文は規格と異なりますが、次のものと同等の機能を提供します。

- NOT INSTANTIABLE

- STATICメソッド

- RELATIVE、MAPおよびSTATEの順序付け。RELATIVE順序付けに相当するOracleのキーワードはORDERです。STATE順序付けに相当するキーワードはありません(他の順序付けが定義されていない場合、これがデフォルトになります)。規格とは異なり、OracleはSTATE以外の順序付けのEQUALS ONLYをサポートしません。(「S251、ユーザー定義の順序付け」も参照。)

- コンストラクタ・メソッドのシグネチャのSELF AS RESULT

S025、最終構造型

Oracleの最終オブジェクト型は、規格の最終構造型と同等です。

S026、自己参照構造型

Oracleでは、オブジェクト型OTは、OTを参照する参照を持つことができます。

S041、基本的な参照型

Oracleの参照型は、規格の参照型と同等です。参照を解除するには、規格の->のかわりにドット表記法を使用します。

S043、拡張参照型

Oracleは、この機能の次の要素をサポートします。

- 参照によって参照されるオブジェクトを返すDEREF演算子

- 表またはマテリアライズド・ビューの列に対する制約としてのSCOPE句

- 列の有効範囲の追加および削除

- システムが生成した参照または主キーから導出された参照(他の列のリストまたは型の属性のリストから導出されたものを除く)

S051、型の表の作成

Oracleのオブジェクト表は、規格の構造型の表と同等です。

S081、サブテーブル

Oracleはオブジェクト・ビューの階層をサポートしますが、オブジェクトの実表の階層はサポートしません。実表の階層をエミュレートするには、それらの実表にビューの階層を作成します。

S091、配列型

OracleのVARRAY型は、規格の配列型と同等です。ただし、Oracleは、LOBの配列の記憶域をサポートしません。添字を使用して配列の単一要素にアクセスするには、PL/SQLを使用する必要があります。Oracleは、規格以外の構文を使用してこの機能の次の部分をサポートします。

- 空の配列を含むVARRAY型のインスタンスを構成するには、VARRAY型コンストラクタを使用します。

- FROM句でVARRAYをネスト解除するには、TABLE演算子を使用します。

- VARRAYのカーディナリティを取得するには、PL/SQLのCOUNTメソッドを使用します。

S092、ユーザー定義型の配列

Oracleは、オブジェクト型のVARRAYをサポートします。

S094、参照型の配列

Oracleは、参照のVARRAYをサポートします。

S095、問合せ別の配列コンストラクタ

Oracleは、CAST (MULTISET (SELECT ...) AS varray_type)を使用して配列コンストラクタをサポートします。ORDER BYを使用して配列の要素を順序付ける機能はサポートされません。

S097、配列要素割当て

PL/SQLでは、規格(SQL/PSM)に似た構文を使用して配列要素を割り当てることができます。

S098、ARRAY_AGG

Oracleには、VARRAYになる集計はありません。そのかわりに、COLLECT集計を使用して多重集合を作成すると、配列の要素タイプにキャストできます。

S111、問合せ式でのONLY

Oracleは、ビューの階層に対するONLY句をサポートしますが、実表の階層はサポートしません。

S151、型述語

この機能を完全にサポートします。

S161、サブタイプ処理

構文が多少異なりますが、サポートします。規格では参照する型の名前をカッコで囲む必要がありますが、Oracleはこの位置でのカッコの使用をサポートしません。

S162、参照のサブタイプ処理

規格では参照する型の名前をカッコで囲む必要がありますが、Oracleはこの位置でのカッコの使用をサポートしません。

S201、配列でのSQL起動ルーチン

PL/SQLは、配列をパラメータとして渡し、ファンクションの結果として配列を返す機能を提供します。Cで記述されたプロシージャおよびファンクションは、Oracle Type Translator(OTT)を使用して配列を渡し、ファンクションの結果として配列を返すことができます。

S202、多重集合でのSQL起動ルーチン

PL/SQLルーチンは、パラメータとしてネストした表を持ち、ネストした表を返すことができます。Cで記述されたルーチンは、Oracle Type Translatorを使用して配列を渡し、ファンクションの結果として配列を返すことができます。

S232、配列ロケータ

Oracle Type Translatorは配列の記述子をサポートします。記述子はロケータと同じ用途に使用できます。

S233、多重集合ロケータ

Oracleは、ネストした表のロケータをサポートします。

S241、変換ファンクション

Oracle Type Translatorは、変換と同じ機能を提供します。

S251、ユーザー定義の順序付け

Oracleのオブジェクト型の順序付け機能は、次のとおり規格の機能に対応します。

- OracleのMAP順序付けは、規格のORDER FULL BY MAP順序付けに対応します。

- OracleのORDER順序付けは、規格のORDER FULL BY RELATIVE順序付けに対応します。

- Oracleのオブジェクト型でMAPまたはORDERのいずれも宣言されていない場合、これは規格のEQUALS ONLY BY STATEに対応します。

- Oracleには、順序付けられていないオブジェクト型は存在しません。そのため、順序付けは変更できますが、削除することはできません。

S261、特定のTYPEメソッド

ANYDATA型のGetTypeNameメソッドは、型名を調べるために使用できます。

S271、基本的な多重集合のサポート

Oracleでは、ネストした表型として規格の多重集合がサポートされます。スカラー型(ST)に基づいたOracleのネストした表のデータ型は、規格の用語では、ST型の単一フィールドを持つcolumn_valueという名前の行の多重集合と同じです。オブジェクト型に基づいたOracleのネストした表型は、規格の構造型の多重集合と同等です。

Oracleは、ネストした表で使用するこの機能のうち、次の要素をサポートします。この場合、規格で多重集合に使用するのと同じ構文を使用します。

- CARDINALITYファンクション

- SETファンクション

- MEMBER述語

- IS A SET述語

- COLLECT集計

次のように、この機能の他のすべての部分が規格以外の構文でサポートされます。

- 規格にMULTISET[]と表される、空の多重集合を作成するには、ネストした表型の空のコンストラクタを使用します。

- 規格では、ELEMENT(<多重集合値の式>)と表される、要素が1つ付いた多重集合の要素を1つのみ取得するには、スカラー副問合せを使用して、ネストした表から単一要素を選択します。

- 多重集合を列挙ごとに構成するには、ネストした表型のコンストラクタを使用します。

- 多重集合を問合せごとに構成するには、多重集合の引数を指定したCASTを使用して、ネストした表型にキャストします。

- 多重集合をネスト解除するには、FROM句のTABLE演算子を使用します。

S272、ユーザー定義型の多重集合

Oracleのネストした表型では、構造型の多重集合が可能です。Oracleには固有型がないため、固有型の多重集合はサポートされません。

S274、参照型の多重集合

ネストした表型は、参照型の列を1つ以上持つことができます。

S275、拡張多重集合のサポート

Oracleは、ネストした表で使用するこの機能のうち、次の要素をサポートします。この場合、規格で多重集合に使用するのと同じ構文を使用します。

- MULTISET UNION、MULTISET INTERSECTIONおよびMULTISET EXCEPT演算子

- SUBMULTISET述語

- =および<>述語

Oracleは、FUSIONまたはINTERSECTION集計をサポートしません。

S281、ネストしたコレクション型

Oracleでは、コレクション型のネストが可能です(VARRAYおよびネストした表)。

S401、配列型に基づく固有型

OracleのVARRAY型は強い型指定です。

S403、MAX_CARDINALITY

PL/SQLでは、VARRAYのLIMITメソッドが最大カーディナリティを返します。

S404、TRIM_ARRAY

PL/SQLでは、VARRAYのTRIMメソッドをVARRAYの切り捨てに使用できます。

T041、基本的なLOBデータ型サポート

Oracleは、この機能の次の部分をサポートします。

- キーワードBLOB、CLOBおよびNCLOB

- 連結(CLOBでのUPPER、LOWERおよびTRIM)

Oracleは、この機能のうち、次の部分と同等のサポートを提供します。

- POSITIONのかわりにINSTRの使用。

- CHAR_LENGTHのかわりにLENGTHの使用。

- SUBSTRINGのかわりにSUBSTRの使用。

Oracleは、この機能の次の部分をサポートしません。

- BLOB、CLOBおよびNCLOBのそれぞれのシノニムとしてのキーワードBINARY LARGE OBJECT、CHARACTER LARGE OBJECTおよびNATIONAL CHARACTER LARGE OBJECT

- <バイナリ文字列リテラル>

- BLOBやCLOBの長さの上限を指定する機能

- BLOBの結合

T042、拡張LOBのサポート

Oracleは、この機能の次の要素を完全にサポートします。

- CLOB引数のTRIMファンクション

Oracleは、この機能のうち、次の要素と同等の機能を提供します。

- BLOBおよびCLOBサブストリング(SUBSTRを使用してサポート)

- SIMILAR述語(REGEXPR_LIKEを使用し、Perlに似た構文とのパターン一致を実行してサポート)

この機能の次の要素はサポートされません。

- BLOBまたはCLOBオペランドの付いた比較述語

- BLOBまたはCLOBオペランドの付いたCAST

- OVERLAY(SUBSTRおよび文字列連結を使用してエミュレート可能)

- BLOBまたはCLOBオペランドの付いたLIKE述語

T051、行型

Oracleのオブジェクト型は、規格の行型のかわりに使用できます。

T061、UCSのサポート

Oracleは、この機能のうち、次の要素と同等の機能を提供します。

- Oracleは、文字データ型の宣言では、CHARACTERSとOCTETSのかわりに、それぞれCHARとBYTEのキーワードをサポートします。

- OracleのCOMPOSEファンクションは、規格のNORMALIZEファンクションと同等です。

Oracleは、IS NORMALIZED述語をサポートしません。

T071、BIGINTデータ型

多くの実装では、BIGINTは、19桁(10進)の大部分をサポートする64ビットの2進整数型を参照します。OracleのNUMBER型は、39桁(10進)をサポートします。

T111、更新可能な結合、論理和および列

Oracleの更新可能な結合ビューは、規格の更新可能な結合機能と類似しています。規格とは異なり、Oracleでは、SELECT構文のリストに強力な候補キーを表示するために、更新可能な結合ビューは必要ありません。更新可能な結合ビューには複数のキー保存表が含まれることがありますが、UPDATEまたはDELETEを使用して更新されるキー保存表は、それらのうちの1つの表のみです。更新可能な結合に含まれるすべてのキー保存表が変更される規格とは異なります。

T121、問合せ式でのWITH(RECURSIVEを除く)

この機能を完全にサポートします。

T122、副問合せでのWITH(RECURSIVEを除く)

この機能を完全にサポートします。

T131、再帰的問合せ

Oracleは自身を参照するWITH句要素の使用をサポートしますが、RECURSIVEキーワードはサポートしません。または、OracleのSTART WITHおよびCONNECT BY句を使用すると、多くの再帰的問合せを実行できます。

T132、副問合せでの再帰的問合せ

Oracleは自身を参照するWITH句要素の使用をサポートしますが、RECURSIVEキーワードはサポートしません。または、OracleのSTART WITHおよびCONNECT BY句を使用すると、多くの再帰的問合せを実行できます。

T141、SIMILAR述語

Oracleは、Perlに似た構文とのパターン一致のためのREGEXP_LIKEを提供します。

T172、表定義のAS副問合せ句

OracleのCREATE TABLEのAS副問合せ機能は、規格とほとんど同じ機能を持ちますが、構文の一部が異なります。

T174、ID列

Oracleはこの機能をサポートしますが、構文には次のような相違点があります。

- Oracleでは、規格のNO MINVALUEおよびNO MAXVALUEのかわりに、NOMINVALUEおよびNOMAXVALUEを使用します。

- ID列を再開するには、ALTER TABLE MODIFY文でSTART WITH LIMIT VALUEを使用して、最高値(増分ID列の場合)または最低値(減分ID列の場合)から再開します。特定の番号から再開するには、START WITH Numberを使用します。

GENERATED BY DEFAULT ON NULLは、Oracleの拡張機能です。

T175、生成された列

Oracleはこの機能をサポートしますが、次の制限事項があります。

- 一時表では生成された列はサポートされていません。

- 生成された列のデータ型にはLOBまたはXMLを使用できません。

T176、順序ジェネレータのサポート

Oracleの順序は規格のものと同じ機能を持ちますが、構文は異なります。

T178、ID列: 簡易再開オプション

OracleのSTART WITH LIMIT VALUEは、ID列が循環していない場合は規格の簡易再開と同じです。

T180、システムバージョン付きの表

Oracleのフラッシュバック機能は、規格のシステムバージョン付きの表と実質的に同じです。主な相違点は次のとおりです。

- Oracleでは、特定の表をジャーナリング用に指定する必要はありません。すべての表がジャーナリングされます。

- Oracleでは、LOB列は個別にジャーナリング用に指定する必要があります。これは、データ量が巨大になる可能性があるためです。規格には、同様のプロビジョニングはありません。

- Oracleでは、履歴データを読み取るために権限が必要です。

- Oracleでは、表レベルでのDDLではなく、DBAの操作で保存期間を指定します。

- 規格では、ジャーナリングされた表には、行の開始と終了のタイムスタンプを記録するための列があります。Oracleでは、これは疑似列によってプロビジョニングされます。

T201、参照制約での比較可能データ型

この機能を完全にサポートします。

T211、基本的なトリガー機能

Oracleのトリガーと規格のトリガーの違いは、次のとおりです。

- Oracleは、デフォルトではオプションの構文FOR EACH STATEMENT(文トリガー)を提供しません。

- Oracleは、OLD TABLEおよびNEW TABLEをサポートしません。規格で指定されている遷移表(影響される行のイメージの前後の多重集合)は使用できません。

- トリガー本体はPL/SQLで記述されています。PL/SQLの機能は規格の手続き型言語PSMと同等ですが、同じものではありません。

- トリガー本体では、古い遷移変数と新しい遷移変数が、コロンで始まる形式で参照されます。

- Oracleの行トリガーは、バッファリングおよびすべての行の処理後にまとめて実行されるのではなく、行の処理と同時に実行されます。規格のセマンティクスは決定的ですが、Oracleのリアルタイムで実行される行トリガーはより実用的です。

- Oracleの行および文の前のトリガーではDML文を実行できますが、規格では許可されていません。これに対し、Oracleの行の後の文ではDML文を実行できませんが、規格では許可されています。

- 複数のトリガーが適用される場合、規格ではそれらのトリガーは定義順に実行されます。Oracleでは、実行順序は、非決定的になります(FOLLOWSを使用して指定した場合を除く)。

- Oracleでは、規格の(表権限の)TRIGGER権限のかわりに、システム権限CREATE TRIGGERおよびCREATE ANY TRIGGERを使用してトリガーの作成を規制します。

T212、拡張トリガー機能

この機能によって、Oracleがサポートする文トリガーが許可されます(「T211、基本的なトリガー機能」を参照)。

T213、INSTEAD OFトリガー

OracleはビューのINSTEAD OFトリガーをサポートします。「T211、基本的なトリガー機能」で説明した内容を除き、構文およびセマンティクスは規格に準拠します。Oracleは、WITH CHECK OPTIONを指定したビューで、INSTEAD OFトリガーを使用できます。これは、規格とは異なります。

T241、START TRANSACTION文

OracleのSET TRANSACTION文は、規格のSET TRANSACTIONではなく、規格のSTART TRANSACTIONと同等のトランザクションを開始します。OracleのREAD ONLYトランザクションはSERIALIZABLE分離レベルです。

T271、セーブポイント

Oracleはこの機能をサポートしますが、次の制限事項があります。

- Oracleは、RELEASE SAVEPOINTをサポートしません。

- Oracleは、セーブポイント・レベルをサポートしません。

T285、拡張導出列名

この機能は、列の別名を指定せず、SQLパラメータ参照で構成されるSELECT構文のリストの導出列にのみ適用されます。この場合、規格と同様に、列名のデフォルトはパラメータ名になります。

T323、外部ルーチンの明示的なセキュリティ

外部ファンクション、プロシージャまたはパッケージの作成時に使用されるOracleの構文AUTHID { CURRENT USER | DEFINER }は、規格のEXTERNAL SECURITY { DEFINER | INVOKER }と同等です。

T324、SQLルーチンの明示的なセキュリティ

PL/SQLファンクション、プロシージャまたはパッケージの作成時に使用されるOracleの構文AUTHID { CURRENT USER | DEFINER }は、規格のSQL SECURITY { DEFINER | INVOKER }と同等です。

T325、修飾されたSQLパラメータ参照

PL/SQLは、ルーチン名を使用したパラメータ名の修飾をサポートします。

T326、表ファンクション

Oracleは、この機能のうち、次の要素と同等の機能を提供します。

- <問合せ別の多重集合値コンストラクタ>は、CAST(MULTISET(<問合せ式>)AS <ネストした表型>)を使用してサポートされます。

- <表ファンクションの導出表>は、VARRAYまたはネストした表を引数として指定したFROM句のTABLE演算子を使用してサポートされます。

- <コレクション値の式>は、VARRAYまたはネストした表になるOracleの式と同等です。

- <戻り値の表型>は、ネストした表を戻すPL/SQLファンクションと同等です。

T331、基本的なロール

Oracleは、REVOKE ADMIN OPTION FORの<ロール名>を除いて、この機能をサポートします。

T341、SQL起動ファンクションおよびプロシージャのオーバーロード

Oracleは、ファンクションおよびプロシージャのオーバーロードをサポートします。ただし、特定のデータ型の組合せを処理するルールは、規格と異なります。たとえば、規格では、引数の数値型のみが異なる同一名の2つのファンクションの共存が許可されますが、Oracleでは許可されません。

T351、大カッコで囲まれたコメント

この機能を完全にサポートします。

T431、拡張グループ化機能

この機能を完全にサポートします。

T432、ネストおよび連結したGROUPING SETS

Oracleは、連結したGROUPING SETSをサポートしますが、ネストしたGROUPING SETSはサポートしません。

T433、複数引数ファンクションGROUPING

OracleのGROUP_IDファンクションを使用すると、グループ化した問合せによりグループを適切に区別できます。このファンクションは、規格の複数引数のGROUPINGファンクションの場合と同じ用途で使用できます。

T441、ABSおよびMODファンクション

OracleはABSファンクションをサポートします。OracleのMODファンクションは規格に似ていますが、2つの引数の符号が異なる場合の動作が異なります。

T471、結果セットの戻り値

PL/SQL REFカーソルは、規格の結果セット・カーソルのすべての機能を提供します。

T491、LATERAL導出表

この機能を完全にサポートします。

T501、拡張EXISTS述語

この機能を完全にサポートします。

T511、トランザクションのカウント

Oracleは、コミットされたトランザクションとロールバックされたトランザクションのカウントを、システム・ビューのV$STATNAMEとV$SESSTATでサポートします。

T571、配列を戻す外部SQL起動ファンクション

VARRAYを戻すOracleの表ファンクションは、外部のプログラミング言語で定義できます。SQLでこのようなファンクションを宣言する場合は、CREATE FUNCTIONコマンドをPIPELINED USING句とともに使用します。

T572、多重集合を戻す外部SQL起動ファンクション

ネストした表を戻すOracleの表ファンクションは、外部のプログラミング言語で定義できます。SQLでこのようなファンクションを宣言する場合は、CREATE FUNCTIONコマンドをPIPELINED USING句とともに使用します。ファンクションの本体では、OCITableインタフェースを使用します。ファンクションは、FROM句のTABLE演算子内で起動する必要があります。

T581、正規表現のサブストリング・ファンクション

Oracleでは、正規表現の一致を使用してサブストリング操作を実行するREGEXP_SUBSTRファンクションを提供します。

T591、NULLの可能性のある列に対するUNIQUE制約

Oracleでは、NULLであることが可能な1つ以上の列に対するUNIQUE制約が可能です。UNIQUE制約の対象が単一列の場合、セマンティクスは規格と同じになります(この制約には、指定した列のNULLである行の数に制限はありません)。UNIQUE制約の対象が2つ以上の列の場合、セマンティクスは規格外になります。Oracleでは、指定したすべての列のNULLである行の数に制限はありません。規格と異なり、指定した列の1つ以上の行がNULL以外になる場合、制約対象のNULL以外の列の値と同じ値を持つ別の行は、制約違反になり、許可されません。

T611、基本的なOLAP演算子

Oracleはこの機能を完全にサポートします。ただし、DISTINCTは、ウィンドウ・パーティショニングと併用している場合にのみサポートされます(ウィンドウ・フレーミングと併用している場合はサポートされません)。

T612、拡張OLAP操作

Oracleは、この機能の次の要素をサポートします。PERCENT_RANK、CUME_DIST、WIDTH_BUCKET、仮想の集合ファンクション、PERCENTILE_CONT、PERCENTILE_DISC、およびROW_NUMBERです。

Oracleは、この機能の次の要素をサポートしません。

- ウィンドウ名

- EXCLUDE

- ORDER BYのないROW_NUMBER

T613、サンプリング

Oracleでは、規格のキーワードTABLESAMPLEのかわりに、キーワードSAMPLEを使用します。Oracleでは、規格のキーワードSYSTEMのかわりに、キーワードBLOCKを使用します。Oracleでは、行のベルヌーイ・サンプリングの指定に、BLOCKキーワードを使用しません。規格では、キーワードBERNOULLIでこのサンプリングを指定します。Oracleは、キー保存していない導出表や導出ビューサンプリングをサポートしていません。Oracleでは、DELETE文、UPDATE文またはMERGE文の副問合せでのサンプリングはできません。

T614、NTILEファンクション

この機能を完全にサポートします。

T615、LAGファンクションおよびLEADファンクション

この機能を完全にサポートします。

T616、LAGファンクションおよびLEADファンクションのNULL処理オプション

この機能を完全にサポートします。

T617、FIRST_VALUEファンクションおよびLAST_VALUEファンクション

この機能を完全にサポートします。

T618、NTH_VALUEファンクション

この機能を完全にサポートします。

T621、拡張数値ファンクション

Oracleは、CEILファンクションのCEILINGの綴りが異なることを除いて、この機能を完全にサポートします。

T641、複数列の割当て

割当てソースが副問合せの場合、複数の列を割り当てる規格の構文がサポートされます。

T652、SQLルーチンでのSQL動的文。

PL/SQLは、動的SQLをサポートします。

T654、外部ルーチンでのSQL動的文

Oracleは、埋込みCでの動的SQLをサポートします。これは、外部ルーチンの作成に使用できます。

T655、循環的な依存ルーチン

PL/SQLは、再帰型をサポートします。

SQL/CLI:2008に対するOracleの準拠

OracleのODBCドライバは、SQL/CLI:2008に準拠しています。

SQL/PSM:2011に対するOracleの準拠

OracleのPL/SQLは、キーワードの綴りや構成などの構文の小さな違いはありますが、SQL/PSM:2011と同等の機能を提供します。

SQL/MED:2008に対するOracleの準拠

OracleはSQL/MED:2008に準拠しません。

SQL/OLB:2008に対するOracleの準拠

Oracle SQLJは、SQL/OLB:1999に準拠していますが、SQL/OLB 2008にはまだ準拠していません。

SQL/JRT:2008に対するOracleの準拠

Oracleは、Java(TM)で実装されるストアド・ルーチンおよびSQL型を完全にサポートしています。Oracleは、この型およびプロシージャの作成とメンテナンスについて同等のサポートを提供します。一般に、Oracleの機能は、規格で定義された機能にさらに多くの内容を盛り込んでいます。

SQL/XML:2011に対するOracleの準拠

規格のXMLデータ型はXMLです。Oracleの同等のデータ型は、XMLTypeです。Oracleと規格の相違点がデータ型の名前の綴りのみである場合、規格の機能はOracleで完全にサポートされているとみなします。

表C-3に、SQL/XML:20011の機能に対するOracleのサポートを示します。

表C-3 SQL/XML:2011の機能に対するOracleのサポート

機能識別子、機能

サポート

X010、XML型

この機能を完全にサポートします。

X011、XML型の配列

Oracleは、名前付きの配列型を使用してこの機能をサポートします(規格では、配列型は匿名です)。

X012、XML型の多重集合

OracleでXML型の多重集合に相当するものは、XML型の単一列を持つネストした表です。

X013、固有のXML型

固有型は、1つの属性のみを持つオブジェクト型を使用してエミュレートできます。

X014、XML型の属性

Oracleでは、オブジェクト型の属性はXMLType型にできますが、この構文はオブジェクト型の作成には標準ではありません。

X015、XML型のフィールド

Oracleのオブジェクト型は行型のかわりに使用できます。Oracleは、属性XMLTypeを持つオブジェクト型をサポートしています。

X016、永続XML値

この機能を完全にサポートします。

X020、XMLの連結

この機能を完全にサポートします。

X025、XMLCast

Oracleはこの機能をサポートしますが、次の制限事項があります。

- ソース式はXMLTypeにする必要がありますが、ターゲット・データ型はXMLTypeにする必要がありません。(OracleはXML型を1つしか持たないため、XMLからXMLにキャストする必要はありません。)

- ターゲット・データ型はドメインにする必要はありません(Oracleは、ドメインをサポートしていません)。

- Oracleは、<XML受渡しメカニズム>をサポートしていません。この動作は、規格のBY VALUEと同じです。

Oracleは、REF XMLTYPE型にキャストできるように、この機能を拡張しています。

X031、XMLElement

この機能を完全にサポートします。

X032、XMLForest

この機能を完全にサポートします。

X034、XMLAgg

この機能を完全にサポートします。

X035、XMLAggのORDER BYオプション

この機能を完全にサポートします。

X036、XMLComment

この機能を完全にサポートします。

X036、XMLPi

この機能を完全にサポートします。

X038、XMLText

OracleのXMLCDataファンクションは、テキスト・ノードの作成に使用できます。

X040、表の基本マッピング

Oracleの表のマッピングは、Javaインタフェースおよびパッケージを介して実行できます。Oracleの表のマッピングは、表のみでなく問合せもマップするために汎用化されています。表のみをマップするには、SELECT * FROM table_nameを指定します。これによって、この機能のうち、次の要素をサポートします。

- X041、表の基本マッピング(NULLなし)

- X042、表の基本マッピング(NULLをNILとしてマッピング)

- X043、表の基本マッピング(表をフォレストとしてマッピング)

- X044、表の基本マッピング(表を要素としてマッピング)

- X045、表の基本マッピング(ターゲット・ネームスペースを含む)

- X046、表の基本マッピング(データのマッピング)

- X047、表の基本マッピング(メタデータのマッピング)

- X049、表の基本マッピング(16進エンコーディング)

Oracleは、この機能の次の要素をサポートしません。

- X048、表の基本マッピング(BASE64エンコーディング)

X041、表の基本マッピング(NULLなし)

X040を参照してください。

X042、表の基本マッピング(NULLをNILとしてマッピング)

X040を参照してください。

X043、表の基本マッピング(表をフォレストとしてマッピング)

X040を参照してください。

X044、表の基本マッピング(表を要素としてマッピング)

X040を参照してください。

X045、表の基本マッピング(ターゲット・ネームスペースを含む)

X040を参照してください。

X046、表の基本マッピング(データのマッピング)

X040を参照してください。

X047、表の基本マッピング(メタデータのマッピング)

X040を参照してください。

X049、表の基本マッピング(16進エンコーディング)

X040を参照してください。

X060、XMLParse(文字列の入力およびCONTENTオプション)

Oracleは、{PRESERVE | STRIP} WHITESPACE構文をサポートしません。動作は常にSTRIP WHITESPACEになります。

X061、XMLParse(文字列の入力およびDOCUMENTオプション)

Oracleは、{PRESERVE | STRIP} WHITESPACE構文をサポートしません。動作は常にSTRIP WHITESPACEになります。

X069、XMLSERIALIZE: INDENT

Oracleは、インデント・サイズを指定できるように、この機能を拡張しています。

X070、XMLSerialize(文字列のシリアライズおよびCONTENTオプション)

Oracleはこの機能をサポートしますが、次の制限があります。

- 規格では、DOCUMENTまたはCONTENTの選択はオプションですが、Oracleでは、どちらかを指定する必要があります。

Oracleはこの機能を拡張しています。規格ではターゲット・データ型が必要ですが、OracleではCLOBにデフォルト設定します。

X071、XMLSerialize(文字列のシリアライズおよびDOCUMENTオプション)

この機能を完全にサポートします。

X072、XMLSerialize(文字列のシリアライズ)

この機能を完全にサポートします。

X073、XMLSerialize: BLOBシリアライズ、およびCONTENTオプション

この機能を完全にサポートします。

X074、XMLSerialize: BLOBシリアライズ、およびDOCUMENTオプション

この機能を完全にサポートします。

X075、XMLSerialize: BLOBシリアライズ

この機能を完全にサポートします。

X076、XMLSerializeのVERSIONオプション

シリアライズの前にXMLバージョンを設定するには、XMLRootを使用します。

X077、XMLSerialize: 明示的なENCODINGオプション

この機能を完全にサポートします。

X080、XML公開時のネームスペース

XMLElementのOracle実装では、XMLAttributesを使用してネームスペースが定義されます(XMLNamespacesは実装されません)。ただし、XMLAttributesは、XMLForestではサポートされません。

X086、XMLTableでのXMLネームスペースの宣言

この機能を完全にサポートします。

X090、XML文書の述語

Oracleでは、ISFRAGMENTメソッドを使用してXML値が文書かどうかをテストできます。

X096、XMLExists

Oracleはこの機能を完全にサポートします。ただし、Oracleは値渡しのみをサポートするため、PASSING句の先頭でのキーワードBY VALUEはオプションであり、個別の引数はサポートしていません。

X120、SQLルーチンでのXMLパラメータ

この機能を完全にサポートします。

X121、外部ルーチンでのXMLパラメータ

Oracleは、規格以外のインタフェースを使用して外部ルーチンに渡されるXML値をサポートします。

X141、IS VALID述語(データ駆動形式)

XMLISVALIDメソッドはIS VALID述語と同等で、データ駆動形式をサポートします。

X142、IS VALID述語(ACCORDING TO句)

XMLISVALIDメソッドはIS VALID述語と同等で、ACCORDING TO句に相当するものを含みます。

X143、IS VALID述語(ELEMENT句)

XMLISVALIDメソッドはIS VALID述語と同等で、ELEMENT句に相当するものを含みます。

X144、IS VALID述語(スキーマの場所)

XMLISVALIDメソッドはIS VALID述語と同等で、登録済XMLスキーマのスキーマの場所の指定をサポートします。

X145、IS VALID述語(CHECK制約の外部)

XMLISVALIDメソッドはIS VALID述語と同等で、CHECK制約の外部で使用できます。

X151、DOCUMENTオプション付きのIS VALID述語

XMLISVALIDメソッドはIS VALID述語と同等で、DOCUMENT句と同等の検証を実行します。(XMLISVALIDは内容の検証をサポートしません。)

X156、IS VALID述語(ELEMENT句の付いたオプションのNAMESPACE)

XMLISVALIDメソッドはIS VALID述語と同等で、ネームスペースの要素の検証に使用できます。

X157、IS VALID述語(ELEMENT句の付いたNO NAMESPACE)

XMLISVALIDメソッドはIS VALID述語と同等で、名前のないネームスペースの要素の検証に使用できます。

X160、登録済XMLスキーマの基本情報スキーマ

Oracleの静的データ・ディクショナリ・ビューALL_XML_SCHEMASは、現行のユーザーがアクセスできる登録済のXMLスキーマのリストを提供します。ALL_XML_SCHEMAS.SCHEMA_URL列は、規格のXML_SCHEMAS.XML_SCHEMA_LOCATION列に対応します。登録済XMLスキーマのターゲット・ネームスペースは、ALL_XML_SCHEMAS.SCHEMAを調べることによって確認できます。Oracleは、規格のXML_SCHEMASの他の列に相当する列を持ちません。

X161、登録済XMLスキーマの拡張情報スキーマ

Oracleは、規格のXML_SCHEMA_NAMESPACESおよびXML_SCHEMA_ELEMENTSに対応する静的データ・ディクショナリ・ビューを持ちません。ただし、登録済XMLスキーマに関するすべての情報は、ALL_XML_SCHEMAS.SCHEMA列にある実際のXMLスキーマを調べることによって確認できます。これを調べると、登録済XMLスキーマが非決定的であるかどうかも確認できます。また、非決定的なネームスペースと要素も確認できます。

X191、XML(DOCUMENT(XMLSCHEMA))型

Oracleは、この構文をサポートしません。ただし、表の列は登録済XMLスキーマで制約できます。この場合、列のすべての値はXML(DOCUMENT(XMLSCHEMA))型になります。

X200、XMLQuery

Oracleは、この機能の次の要素を完全にサポートします。

- X201、XMLQuery: RETURNING CONTENT

- X203、XMLQuery: コンテキスト項目の受渡し

- X204、XMLQuery: XQuery変数の初期化

- X206、XMLQuery: NULL ON EMPTYオプション

Oracleは値渡しのみをサポートするため、PASSING句の先頭でのキーワードBY VALUEはオプションであり、個別の引数はサポートしていません。

X201、XMLQuery: RETURNING CONTENT

X200を参照してください。

X203、XMLQuery: コンテキスト項目の受渡し

X200を参照してください。

X204、XMLQuery: XQuery変数の初期化

X200を参照してください。

X206、XMLQuery: NULL ON EMPTYオプション

X200を参照してください。

X221、XML受渡しメカニズムBY VALUE

Oracleは、XMLQuery、XMLTableおよびXMLExistsでのBY VALUE句をサポートしています。これに該当するBY VALUEは、オプションの構文として引数リストの先頭でサポートされますが、個別の引数や列の修飾子としてはサポートされません。

X232、XML(CONTENT(ANY))型

Oracleは、この構文を型の修飾子としてサポートしませんが、OracleのXMLTypeは、一時値でこのデータ型をサポートします。永続値は、XML(DOCUMENT(ANY))型になります。この型は、XML(CONTENT(ANY))のサブセットです。

X241、XML文書作成時のRETURNING CONTENT

Oracleは、この構文をサポートしません。Oracleでは、文書を作成するファンクション(XMLAgg、XMLComment、XMLConcat、XMLElement、XMLForestおよびXMLPi)の動作は、常にRETURNING CONTENTになります。

X251、XML(DOCUMENT(UNTYPED))型の永続XML値

この機能を完全にサポートします。

X252、XML(DOCUMENT(ANY))型の永続値

この機能を完全にサポートします。

X256、XML(DOCUMENT(XMLSCHEMA))型の永続値

この機能を完全にサポートします。

X260、XML型(ELEMENT句)

Oracleは、この構文をサポートしません。ただし、表の列は登録済XMLスキーマの最上位の要素で制約できます。

X263、XML型(ELEMENT句の付いたNO NAMESPACE)

Oracleは、この構文をサポートしません。ただし、表の列は登録済XMLスキーマの名前のないネームスペースにある最上位の要素で制約できます。

X264、XML型(スキーマの場所)

Oracleは、この構文をサポートしません。ただし、表の列はスキーマの場所で識別される登録済XMLスキーマで制約できます。

X271、XMLValidate(データ駆動形式)

SCHEMAVALIDATEメソッドはXMLValidateと同等で、データ駆動形式をサポートします。

X272、XMLValidate(ACCORDING TO句)

SCHEMAVALIDATEメソッドはXMLValidateと同等で、特定の登録済XMLスキーマの指定に使用できます。

X273、XMLValidate(ELEMENT句)

SCHEMAVALIDATEメソッドはXMLValidateと同等で、特定の登録済XMLスキーマの特定要素を指定するために使用できます。

X274、XMLValidate(スキーマの場所)

SCHEMAVALIDATEメソッドはXMLValidateと同等で、スキーマの場所を示すURLで特定の登録済XMLスキーマを指定するために使用できます。

X281、DOCUMENTオプションの付いたXMLValidate

SCHEMAVALIDATEメソッドはXMLValidateと同等です。SCHEMAVALIDATEはXML文書の検証のみを実行します(内容の検証は実行しません)。

X286、XMLValidate(ELEMENT句の付いたNO NAMESPACE)

SCHEMAVALIDATEメソッドはXMLValidateと同等で、特定の登録済XMLスキーマの名前のないネームスペースにある特定要素を指定するために使用できます。

X300、XMLTable

Oracleは、列パス式の逆軸をサポートしません。この制限事項を除き、Oracleは、この機能の次の要素を完全にサポートします。

- X086、XMLTableでのXMLネームスペースの宣言

- X302、順序性列付きのXMLTable

- X303、XMLTable(列のデフォルト・オプション)

- X304、XMLTable(コンテキスト項目の受渡し)

- X305、XMLTable(XQuery変数の初期化)

Oracleは値渡しのみをサポートするため、PASSING句の先頭でのキーワードBY VALUEはオプションであり、個別の引数はサポートしていません。

X302、順序性列付きのXMLTable

X300を参照してください。

X303、XMLTable(列のデフォルト・オプション)

X300を参照してください。

X304、XMLTable(コンテキスト項目の受渡し)

X300を参照してください。

X305、XMLTable(XQuery変数の初期化)

X300を参照してください。

SQL/RPR:2012に対するOracleの準拠

INCITS 500:2012は、SQL/RPR:2012「Row Pattern Recognition」とも呼ばれ、2012で採用されました。Oracleは、この規格で定義されているFeature R010、「Row pattern recognition: FROM clause」を完全にサポートします。

FIPS 127-2に対するOracleの準拠

Oracleは、最新のFIPS(Federal Information Processing Standard)であるFIPS PUB 127-2に完全に準拠しています。現在、この規格は、公開されていません。ただし、FIPS 127-2で定義されたデータベース要素のサイズに関する情報に依存するアプリケーションを使用するユーザーのために、準拠性についての詳細を表C-4に示します。

表C-4 データベース要素のサイズ設定

データベース要素

FIPS

Oracleデータベース

識別子の長さ(バイト単位)

18

30

CHARACTERデータ型の長さ(バイト単位)

240

2,000

NUMERICデータ型の10進精度

15

38

DECIMALデータ型の10進精度

15

38

INTEGERデータ型の10進精度

9

38

SMALLINTデータ型の10進精度

4

38

FLOATデータ型の2進精度

20

126

REALデータ型の2進精度

20

63

DOUBLE PRECISIONデータ型の2進精度

30

126

表の中の列

100

1,000

INSERT文の中の値

100

1,000

UPDATE文内のSET句(注意1)

20

1,000

行の長さ(注意2、注意3)

2,000

2,000,000

UNIQUE制約の中の列

6

32

UNIQUE制約の長さ(注意2)

120

(注意4)

外部キー列リストの長さ(注意2)

120

(注意4)

GROUP BY句の中の列

6

255(注意5)

GROUP BY列のリストの長さ

120

(注意5)

ORDER BY句の中のソート指定

6

255(注意5)

ORDER BY列のリストの長さ

120

(注意5)

参照整合性制約内の列

6

32

SQL文で参照される表

15

無制限

同時にオープンできるカーソル

10

(注意6)

SELECT構文のリストの項目

100

1,000

注意1: UPDATE文のSET句の数とは、SETキーワードの後に続くカンマで区切られる項目の数のことです。

注意2: FIPS PUBでは、列セットの長さを次の値の合計として規定しています。つまり、列の数を2倍した値、各文字列の長さ(バイト単位)、各真数値列の10進精度に1を加えた値、各概数値列の2進精度を4で割って1を加えた値の合計です。

注意3: 行の最大長に対するOracleの制限は、長さ2GBのLONG値とそれぞれの長さが4000バイトである999のVARCHAR2値を含む行の最大長に基づいています。2(254) + 231 + (999(4000))。

注意4: UNIQUEキーに対するOracleの制限は、Oracleデータ・ブロックのサイズ(初期化パラメータDB_BLOCK_SIZEによって指定される)の半分からオーバーヘッドを引いたものになります。

注意5: Oracleは、GROUP BY句の列数やORDER BY句のソート指定の数に対して制限を設定しません。ただし、GROUP BY句やORDER BY句のすべての式のサイズの合計は、Oracleデータ・ブロックのサイズ(初期化パラメータDB_BLOCK_SIZEによって指定される)からオーバーヘッドを引いたサイズに制限されています。

注意6: 同時にオープンできるカーソルの数に対するOracleの制限は、初期化パラメータOPEN_CURSORSによって指定されます。このパラメータの最大値は、使用しているオペレーティング・システムで使用可能なメモリーによって異なりますが、どんな場合でも100を超えます。

標準SQLに対するOracle拡張機能

Oracleでは、標準SQL以外でも様々な機能をサポートしています。他のSQL処理系へのアプリケーションの移植性を考慮する場合、OracleのFIPSフラガーを使用して、埋込みSQLプログラムでのEntry SQL-92にOracleの拡張機能を位置付けてください。FIPSフラガーは、OracleプリコンパイラとSQL*Moduleコンパイラの一部です。ALTER SESSION SET FLAGGER = ENTRYを使用すると、SQL*PlusでもFIPSフラガーを有効にできます。SQL:2011はSQL-92よりも優先されますが、SQL-92以降のどのバージョンのSQLにも規格準拠性の検証機関はありません。このため、Entry SQL-92が最も確実な移植性を保証します。

関連項目:
FIPSフラガーの使用方法の詳細は、『Pro*COBOLプログラマーズ・ガイド』および『Pro*C/C++プログラマーズ・ガイド』を参照してください。

以前の規格に対するOracleの準拠

今回のリリースのOracle Databaseは、この付録の前の項で説明したように、最新版のSQL規格であるSQL:2008およびSQL:2011に準拠しています。SQL-92(特にSQL-92のエントリ・レベル)またはSQL:1999は、SQL:2008およびSQL:2011に置き換えられているため、Oracleは、データベースの今回のリリースがこれらの以前の規格に準拠していることを正式に明示していません。SQL規格の各エディション間にある変更(ほとんどは小さな変更)が、アプリケーションに影響することもあります。影響のある非互換の詳細は、SQL規格またはこの規格に関する説明資料を参照してください。重要な情報の1つは、SQL/Foundation:1999、SQL/Foundation:2003、SQL/Foundation:2008およびSQL/Foundation:2011のAnnex Eです。

今回のリリースのOracle Databaseでは、以前の版のSQL構造を引き続き使用できる場合があります。このようなサポートの多くは、ベンダーによる妥当な拡張機能として容認されています。これは、データベースのバージョン間の非互換性を最小限にするためのOracleの一般的な方針です。この方針に基づき、以前の形式が適している場合は、引き続き保持されます。いずれにしても、以前のSQLとSQL:2011の間の差異(前述)はあまり重要ではありません。

キャラクタ・セット・サポート

ほとんどの各国語キャラクタ・セット、国際キャラクタ・セットおよびベンダー固有キャラクタ・セットの標準がサポートされています。Oracleがサポートするキャラクタ・セットの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

Unicodeは、エンコードされたユニバーサル・キャラクタ・セットで、単一キャラクタ・セットを使用したすべての言語の情報を格納できます。Unicodeは、XML、Java、JavaScript、LDAPなどの最新の規格で必要です。Unicodeは、ISO/IEC規格10646に準拠しています。ISO規格についての情報は、国際標準化機構のWebサイトを参照してください。

http://www.iso.ch/

Oracle Database 12cリリース1(12.1.0.1)は、Unicode規格のバージョン6.1に準拠しています。Oracle Database 12cリリース1(12.1.0.2)は、Unicode規格のバージョン6.2に準拠しています。Unicode規格の最新情報については、次のUnicode ConsortiumのWebサイトを参照してください。

http://www.unicode.org

Oracleは、Unicode規格のUTF-8コード体系をサポートするためにAL32UTF8キャラクタ・セットを使用し、UTF-16BEコード体系をサポートするためにAL16UTF16キャラクタ・セットを使用し、UTF-16LEコード体系をサポートするためにAL16UTF16LEキャラクタ・セットを使用します。AL32UTF8は、ASCIIベースのプラットフォーム上のクライアントとデータベースのキャラクタ・セットとして有効です。AL16UTF16は、あらゆるプラットフォーム上の各国語(NCHAR)キャラクタ・セットとして有効です。AL16UTF16LEは、クライアント、データベースのキャラクタ・セット、または各国語キャラクタ・セットとして有効ではありません。

Oracleは、非推奨のUnicode互換エンコード形式であるCESU-8(UTF8キャラクタ・セットを使用)と、UTF-EBCDIC(UTFEキャラクタ・セットを使用)を実装しています。UTF8とUTFEのキャラクタ・セットは、Unicode規格バージョン3.0より以降の更新に含まれる保証はありません。UTF8は、ASCIIベースのプラットフォーム上のクライアントとデータベースのキャラクタ・セットとして有効です。また、すべてのプラットフォーム上の各国語(NCHAR)キャラクタ・セットとしても有効です。UTFEは、EBCDICベースのプラットフォーム上のデータベース・キャラクタ・セットとして有効です。

上記のOracleキャラクタ・セットは、すべて変換ファンクションでサポートされます。

ASCIIベースのプラットフォーム上のデータベースは、AL32UTF8キャラクタ・セットと、AL16UTF16各国語(NCHAR)キャラクタ・セットを使用して作成することをお薦めします。NCHARデータ型と、それに関連する各国語キャラクタ・セットは、一部のRDBMSコンポーネント(Oracle TextやOracle XDBなど)ではサポートされていないため、使用しないことをお薦めします。

関連項目:
Oracleのキャラクタ・セットのサポートの詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

D Oracleの正規表現のサポート

Oracleによる正規表現の実装は、IEEEのPortable Operating System Interface(POSIX)正規表現規格およびUnicode ConsortiumのUnicode Regular Expression Guidelinesに準拠します。

この付録では、次の内容を説明します。

- 多言語の正規表現の構文

- 正規表現の演算子の多言語拡張

- Oracleの正規表現におけるPerlによる拡張機能

多言語の正規表現の構文

表D-1に、POSIX規格のExtended Regular Expression(ERE)の構文に定義されているすべての演算子を示します。Oracleは、POSIX規格にASCII(英語)データの検索用に定義されているこれらの演算子の完全な構文および検索セマンティクスに従います。演算子とその使用例、およびそれらの演算子のOracle多言語拡張の詳細は、『Oracle Database開発ガイド』を参照してください。表の後に示す注意では、演算子とそれらの機能、およびそれらの演算子のOracle多言語拡張の詳細を示します。表D-2に、POSIX演算子のOracleのサポートおよび多言語拡張を示します。

表D-1 正規表現の演算子およびメタ記号

演算子

説明

\

バックスラッシュは、そのコンテキストに応じて、次の4つの異なる意味を持つことができます。持つことができる意味は次のとおりです。

- バックスラッシュ自体

- 次の文字の引用

- 演算子の導入

- 意味なし

*

0(ゼロ)回以上の繰返しに一致します。

+

1回以上の繰返しに一致します。

?

0回または1回の繰返しに一致します。

|

代替一致を指定する代替演算子です。

^

デフォルトでは文字列の先頭に一致します。複数行モードでは、ソース文字列内の任意の行の先頭に一致します。

$

デフォルトでは文字列の末尾に一致します。複数行モードでは、ソース文字列内の任意の行の末尾に一致します。

.

サポートされるキャラクタ・セットの任意の文字(NULLを除く)に一致します。

[ ]

大カッコで囲んだ一致リストのいずれかの正規表現に一致します。非一致リストの正規表現はキャレット(^)で始まり、リストに示されている正規表現以外の任意の文字に一致するリストを指定します。

大カッコの正規表現に右大カッコ(])を指定するには、リストの先頭(キャレット(^)が最初の文字である場合はその後)に配置します。

大カッコの正規表現にハイフンを指定するには、リストの先頭(キャレット(^)が最初の文字である場合はその後)、リストの最後または範囲を表す正規表現の場合は範囲の最後を表すポイントとして配置します。

( )

グループ化の正規表現で、1つの部分正規表現として処理されます。

{m}

厳密にm回の繰返しに一致します。

{m,}

m回以上の繰返しに一致します。

{m,n}

m回以上n回以下の繰返しに一致します。

\n

後方参照表現(nは1から9の数字)は、\nの前のカッコで囲まれたn番目の部分正規表現に一致します。

[..]

1つの照合要素を指定します。複数文字要素を指定できます(スペイン語の[.ch.]など)。

[: :]

文字クラスを指定します([:alpha:]など)。文字クラス内の任意の文字に一致します。

[==]

等価クラスを指定します。たとえば、[=a=]は基本文字「a」のすべての文字に一致します。

正規表現の演算子の多言語拡張

OracleによるPOSIX演算子の実装は、多言語データに適用される場合、POSIX規格に指定されている一致機能を拡張します。表D-2に、POSIX規格のコンテキストの演算子の関係を示します。

- 1列目に、サポートされる演算子を示します。

- 2列目と3列目に、POSIX規格(Basic Regular Expression(BRE)およびExtended Regular Expression(ERE))でその演算子が定義されているかどうかを示します。

- 4列目に、Oracleによる実装で、多言語データを処理するためにその演算子のセマンティクスが拡張されているかどうかを示します。

Oracleでは、マルチバイト文字を直接入力する手段があるか、またはファンクションを使用してマルチバイト文字を構成できる場合は、マルチバイト文字を直接入力できます。書式「\xxxx」のUnicodeエンコーディング値の16進数値は使用できません。Oracleは、文字の図形的な表現ではなく、文字のエンコードに使用されるバイト値に基づいて文字を評価します。アクセント記号のあるすべての文字は、単語構成文字とみなされます。

表D-2 POSIXと多言語の演算子の関係

演算子

POSIXのBRE構文

POSIXのERE構文

多言語拡張

\

可

可

—

*

可

可

—

+

--

可

—

?

—

可

—

|

—

可

—

^

可

可

可

$

可

可

可

.

可

可

可

[ ]

可

可

可

( )

可

可

—

{m}

可

可

—

{m,}

可

可

—

{m,n}

可

可

—

\n

可

可

可

[..]

可

可

可

[::]

可

可

可

[==]

可

可

可

Oracleの正規表現におけるPerlによる拡張機能

Oracle Databaseの正規表現ファンクションおよびその条件では、一般的に使用されるPerlによる演算子の多くが使用可能です。ただし、POSIX規格の一部は使用できません。表D-3に、使用可能な演算子を示します。詳細とその例については、『Oracle Database開発ガイド』を参照してください。

表D-3 Oracleの正規表現におけるPerlによる演算子

演算子

説明

\d

数字です。

\D

数字以外です。

\w

単語構成文字です。

\W

単語構成文字以外です。

\s

空白文字です。

\S

空白文字以外です。

\A

文字列の先頭、または文字列末尾の改行文字の直前のみに一致します。

\Z

文字列の末尾のみに一致します。

*?

先行のパターン要素に0回以上一致します(最短マッチ)。

+?

先行のパターン要素に1回以上一致します(最短マッチ)。

??

先行のパターン要素に0回または1回一致します(最短マッチ)。

{n}?

先行のパターン要素にn回一致します(最短マッチ)。

{n,}?

先行のパターン要素にn回以上一致します(最短マッチ)。

{n,m}?

先行のパターン要素にn回以上m回以下一致します(最短マッチ)。

E Oracle SQLの予約語とキーワード

この付録では、次の内容を説明します。

- Oracle SQLの予約語

- Oracle SQLキーワード

Oracle SQLの予約語

この項では、Oracle SQLの予約語を示します。Oracle SQLの予約語は非引用識別子として使用できません。引用識別子には、予約語を使用できますが、お薦めしません。

注意:
Oracleでは、次の表に示す予約語の他に、暗黙的に生成されるスキーマ・オブジェクトとサブオブジェクトには「SYS_」で始まるシステム生成名を使用します。名前解決での競合を避けるため、この接頭辞は明示的に指定するスキーマ・オブジェクト名やサブオブジェクト名では使用しないでください。

V$RESERVED_WORDSデータ・ディクショナリ・ビューには、各予約語に関する追加情報が表示されます。この情報には、各予約語が常に予約されているか、特定の使用に対してのみ予約されているかの情報も含まれます。詳細は、『Oracle Databaseリファレンス』を参照してください。

アスタリスク(*)が付いた語は、ANSIの予約語でもあります。

ACCESS
ADD
ALL *
ALTER *
AND *
ANY *
AS *
ASC
AUDIT
BETWEEN *
BY *
CHAR *
CHECK *
CLUSTER
COLUMN *
COLUMN_VALUE(このリストの後の「注意1」を参照)
COMMENT
COMPRESS
CONNECT *
CREATE *
CURRENT *
DATE *
DECIMAL *
DEFAULT *
DELETE *
DESC
DISTINCT *
DROP *
ELSE *
EXCLUSIVE
EXISTS *
FILE
FLOAT *
FOR *
FROM *
GRANT *
GROUP *
HAVING *
IDENTIFIED
IMMEDIATE
IN *
INCREMENT
INDEX
INITIAL
INSERT *
INTEGER *
INTERSECT *
INTO *
IS *
LEVEL
LIKE *
LOCK
LONG
MAXEXTENTS
MINUS
MLSLABEL
MODE
MODIFY
NESTED_TABLE_ID(このリストの後の「注意1」を参照)
NOAUDIT
NOCOMPRESS
NOT *
NOWAIT
NULL *
NUMBER
OF *
OFFLINE
ON *
ONLINE
OPTION
OR *
ORDER *
PCTFREE
PRIOR
PUBLIC
RAW
RENAME
RESOURCE
REVOKE *
ROW *
ROWID(このリストの後の「注意2」を参照)
ROWNUM
ROWS *
SELECT *
SESSION
SET *
SHARE
SIZE
SMALLINT *
START *
SUCCESSFUL
SYNONYM
SYSDATE
TABLE *
THEN *
TO *
TRIGGER *
UID
UNION *
UNIQUE *
UPDATE *
USER *
VALIDATE
VALUES *
VARCHAR *
VARCHAR2
VIEW
WHENEVER *
WHERE *
WITH *

注意1: このキーワードは、属性名として使用するためにのみ予約されています。

注意2: 引用識別子または非引用識別子のいずれであっても、大文字のROWIDを列名として使用することはできません。ただし、列名ではない引用識別子には大文字を使用できます。また列名を含む引用識別子には、1つ以上の小文字(たとえば、"Rowid"や"rowid")を使用できます。

Oracle SQLキーワード

Oracle SQLキーワードは予約されていません。ただし、Oracleは固有の方法でこれらの文字を内部的に使用します。したがって、これらの文字をオブジェクトおよびオブジェクトの部分の名前として使用した場合、使用しているSQL文が読みにくくなり、予期しない結果になることがあります。

V$RESERVED_WORDSデータ・ディクショナリ・ビューを問い合せることによって、キーワードのリストを取得できます。ビュー内のキーワードのうち、常に予約されているものや特定の使用に対して予約されているものとして示されていないキーワードは、すべてOracle SQLキーワードです。詳細は、『Oracle Databaseリファレンス』を参照してください。

F 詳細な例

SQL言語リファレンスの本文では、ほぼすべてのリファレンス項目に例を記載しています。この付録では、単一のSQL文のコンテキストに適さない詳細な例を示します。これらの例は、特定のOracle機能を活用するために使用する一連の手順を示すためのものです。このリファレンス本文の個々のSQL文の構文図およびセマンティクスにかわるものではありません。記載されている参照項目を使用して、必要な権限、制限事項、構文などの補足情報を参照してください。

この付録では、次の内容を説明します。

- 拡張索引作成機能の使用方法

- SQL文でのXMLの使用方法

拡張索引作成機能の使用方法

この項では、拡張索引作成機能の単純で現実的な使用例で必要となる手順の例を示します。

HR.employees表の給与をランク付けし、10から20にランク付けされる給与を検索するとします。この場合、次のようにDENSE_RANKファンクションを使用できます。

SELECT last_name, salary FROM
(SELECT last_name, DENSE_RANK() OVER
(ORDER BY salary DESC) rank_val, salary FROM employees)
WHERE rank_val BETWEEN 10 AND 20;

関連項目:
「DENSE_RANK」

このネストした問合せは多少複雑で、employees表のソートのみではなく全体スキャンも必要です。同じ結果が得られるもう1つの方法には、拡張索引作成機能を使用する方法があります。この方法による問合せは単純になります。この問合せには、ROWIDによる索引スキャンおよび表アクセスのみ必要です。そのため、問合せが効率的に実行されます。

最初の手順では、position_im実装タイプ(索引の定義、メンテナンスおよび作成を行うためのメソッド・ヘッダーを含む)を作成します。型本体のほとんどにはPL/SQLが使用されています。その部分はイタリック体で示しています。

ファンクションODCIINDEXCREATE()内にEXECUTE IMMEDIATE文が含まれるため、型は、AUTHID CURRENT_USER句を使用して作成する必要があります。デフォルトでは、このファンクションは定義者権限で実行されます。後続のドメイン索引の作成でこのファンクションがコールされる場合、実行者の権限は定義者権限とは異なります。

関連項目:

- 「CREATE TYPE」および「CREATE TYPE BODY」を参照してください。

- この文のODCIルーチンの詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。

CREATE OR REPLACE TYPE position_im AUTHID CURRENT_USER AS OBJECT
(
curnum  NUMBER,
howmany NUMBER,
lower_bound NUMBER,
upper_bound NUMBER,
/* lower_bound and upper_bound are used for the
index-based functional implementation */
STATIC FUNCTION ODCIGETINTERFACES(ifclist OUT SYS.ODCIOBJECTLIST) RETURN NUMBER,
STATIC FUNCTION ODCIINDEXCREATE
(ia SYS.ODCIINDEXINFO, parms VARCHAR2, env SYS.ODCIEnv) RETURN NUMBER,
STATIC FUNCTION ODCIINDEXTRUNCATE (ia SYS.ODCIINDEXINFO,
env SYS.ODCIEnv) RETURN NUMBER,
STATIC FUNCTION ODCIINDEXDROP(ia SYS.ODCIINDEXINFO,
env SYS.ODCIEnv) RETURN NUMBER,
STATIC FUNCTION ODCIINDEXINSERT(ia SYS.ODCIINDEXINFO, rid ROWID,
newval NUMBER, env SYS.ODCIEnv) RETURN NUMBER,
STATIC FUNCTION ODCIINDEXDELETE(ia SYS.ODCIINDEXINFO, rid ROWID, oldval NUMBER,
env SYS.ODCIEnv) RETURN NUMBER,
STATIC FUNCTION ODCIINDEXUPDATE(ia SYS.ODCIINDEXINFO, rid ROWID, oldval NUMBER,
newval NUMBER, env SYS.ODCIEnv) RETURN NUMBER,
STATIC FUNCTION ODCIINDEXSTART(SCTX IN OUT position_im, ia SYS.ODCIINDEXINFO,
op SYS.ODCIPREDINFO, qi SYS.ODCIQUERYINFO,
strt NUMBER, stop NUMBER, lower_pos NUMBER,
upper_pos NUMBER, env SYS.ODCIEnv) RETURN NUMBER,
MEMBER FUNCTION ODCIINDEXFETCH(SELF IN OUT position_im, nrows NUMBER,
rids OUT SYS.ODCIRIDLIST, env SYS.ODCIEnv)
RETURN NUMBER,
MEMBER FUNCTION ODCIINDEXCLOSE(env SYS.ODCIEnv) RETURN NUMBER
);
/

CREATE OR REPLACE TYPE BODY position_im
IS
STATIC FUNCTION ODCIGETINTERFACES(ifclist OUT SYS.ODCIOBJECTLIST)
RETURN NUMBER IS
BEGIN
ifclist := SYS.ODCIOBJECTLIST(SYS.ODCIOBJECT('SYS','ODCIINDEX2'));
RETURN ODCICONST.SUCCESS;
END ODCIGETINTERFACES;
STATIC FUNCTION ODCIINDEXCREATE (ia SYS.ODCIINDEXINFO, parms VARCHAR2, env SYS.ODCIEnv) RETURN
NUMBER
IS
stmt   VARCHAR2(2000);
BEGIN
/* Construct the SQL statement */
stmt := 'Create Table ' || ia.INDEXSCHEMA || '.' || ia.INDEXNAME ||
'_STORAGE_TAB' || '(col_val, base_rowid, constraint pk PRIMARY KEY ' ||
'(col_val, base_rowid)) ORGANIZATION INDEX AS SELECT ' ||
ia.INDEXCOLS(1).COLNAME || ', ROWID FROM ' ||
ia.INDEXCOLS(1).TABLESCHEMA || '.' || ia.INDEXCOLS(1).TABLENAME;
EXECUTE IMMEDIATE stmt;
RETURN ODCICONST.SUCCESS;
END;
STATIC FUNCTION ODCIINDEXDROP(ia SYS.ODCIINDEXINFO, env SYS.ODCIEnv) RETURN NUMBER IS
stmt VARCHAR2(2000);
BEGIN
/* Construct the SQL statement */
stmt := 'DROP TABLE ' || ia.INDEXSCHEMA || '.' || ia.INDEXNAME ||
'_STORAGE_TAB';
/* Execute the statement */
EXECUTE IMMEDIATE stmt;
RETURN ODCICONST.SUCCESS;
END;
STATIC FUNCTION ODCIINDEXTRUNCATE(ia SYS.ODCIINDEXINFO, env SYS.ODCIEnv) RETURN NUMBER IS
stmt VARCHAR2(2000);
BEGIN
/* Construct the SQL statement */
stmt := 'TRUNCATE TABLE ' || ia.INDEXSCHEMA || '.' || ia.INDEXNAME || '_STORAGE_TAB';

EXECUTE IMMEDIATE stmt;
RETURN ODCICONST.SUCCESS;
END;
STATIC FUNCTION ODCIINDEXINSERT(ia SYS.ODCIINDEXINFO, rid ROWID,
newval NUMBER, env SYS.ODCIEnv) RETURN NUMBER IS
stmt VARCHAR2(2000);
BEGIN
/* Construct the SQL statement */
stmt := 'INSERT INTO ' || ia.INDEXSCHEMA || '.' || ia.INDEXNAME ||
'_STORAGE_TAB  VALUES (''' || newval || ''' , ''' || rid || ''' )';
/* Execute the SQL statement */
EXECUTE IMMEDIATE stmt;
RETURN ODCICONST.SUCCESS;
END;

STATIC FUNCTION ODCIINDEXDELETE(ia SYS.ODCIINDEXINFO, rid ROWID, oldval NUMBER,
env SYS.ODCIEnv)
RETURN NUMBER IS
stmt VARCHAR2(2000);
BEGIN
/* Construct the SQL statement */
stmt := 'DELETE FROM ' || ia.INDEXSCHEMA || '.' || ia.INDEXNAME ||
'_STORAGE_TAB WHERE col_val = ''' || oldval || ''' AND base_rowid = ''' || rid || '''';
/* Execute the statement */
EXECUTE IMMEDIATE stmt;
RETURN ODCICONST.SUCCESS;
END;
STATIC FUNCTION ODCIINDEXUPDATE(ia SYS.ODCIINDEXINFO, rid ROWID, oldval NUMBER,
newval NUMBER, env SYS.ODCIEnv) RETURN NUMBER IS
stmt VARCHAR2(2000);
BEGIN
/* Construct the SQL statement */
stmt := 'UPDATE ' || ia.INDEXSCHEMA || '.' || ia.INDEXNAME ||
'_STORAGE_TAB SET col_val = ''' || newval || ''' WHERE f2 = '''|| rid ||'''';
/* Execute the statement */
EXECUTE IMMEDIATE stmt;
RETURN ODCICONST.SUCCESS;
END;
STATIC FUNCTION ODCIINDEXSTART(SCTX IN OUT position_im, ia SYS.ODCIINDEXINFO,
op SYS.ODCIPREDINFO, qi SYS.ODCIQUERYINFO,
strt NUMBER, stop NUMBER, lower_pos NUMBER,
upper_pos NUMBER, env SYS.ODCIEnv) RETURN NUMBER IS
rid              VARCHAR2(5072);
storage_tab_name VARCHAR2(65);
lower_bound_stmt VARCHAR2(2000);
upper_bound_stmt VARCHAR2(2000);
range_query_stmt VARCHAR2(2000);
lower_bound      NUMBER;
upper_bound      NUMBER;
cnum             INTEGER;
nrows            INTEGER;

BEGIN
/* Take care of some error cases.
The only predicates in which position operator can appear are
op() = 1     OR
op() = 0     OR
op() between 0 and 1
*/
IF (((strt != 1) AND (strt != 0)) OR
((stop != 1) AND (stop != 0)) OR
((strt = 1) AND (stop = 0))) THEN
RAISE_APPLICATION_ERROR(-20101,
'incorrect predicate for position_between operator');
END IF;
IF (lower_pos > upper_pos) THEN
RAISE_APPLICATION_ERROR(-20101, 'Upper Position must be greater than or
equal to Lower Position');
END IF;
IF (lower_pos <= 0) THEN
RAISE_APPLICATION_ERROR(-20101, 'Both Positions must be greater than zero');
END IF;
storage_tab_name := ia.INDEXSCHEMA || '.' || ia.INDEXNAME ||
'_STORAGE_TAB';
upper_bound_stmt := 'Select MIN(col_val) FROM (Select /*+ INDEX_DESC(' ||
storage_tab_name || ') */ DISTINCT ' ||
'col_val FROM ' || storage_tab_name || ' ORDER BY ' ||
'col_val DESC) WHERE rownum <= ' || lower_pos;
EXECUTE IMMEDIATE upper_bound_stmt INTO upper_bound;
IF (lower_pos != upper_pos) THEN
lower_bound_stmt := 'Select MIN(col_val) FROM (Select /*+ INDEX_DESC(' ||
storage_tab_name || ') */ DISTINCT ' ||
'col_val FROM ' || storage_tab_name ||
' WHERE col_val < ' || upper_bound || ' ORDER BY ' ||
'col_val DESC) WHERE rownum <= ' ||
(upper_pos - lower_pos);
EXECUTE IMMEDIATE lower_bound_stmt INTO lower_bound;
ELSE
lower_bound := upper_bound;
END IF;
IF (lower_bound IS NULL) THEN
lower_bound := upper_bound;
END IF;
range_query_stmt := 'Select base_rowid FROM ' || storage_tab_name ||
' WHERE col_val BETWEEN ' || lower_bound || ' AND ' ||
upper_bound;
cnum := DBMS_SQL.OPEN_CURSOR;
DBMS_SQL.PARSE(cnum, range_query_stmt, DBMS_SQL.NATIVE);
/* set context as the cursor number */
SCTX := position_im(cnum, 0, 0, 0);
/* return success */
RETURN ODCICONST.SUCCESS;
END;
MEMBER FUNCTION ODCIINDEXFETCH(SELF IN OUT position_im, nrows NUMBER,
rids OUT SYS.ODCIRIDLIST, env SYS.ODCIEnv)
RETURN NUMBER IS
cnum    INTEGER;
rid_tab DBMS_SQL.Varchar2_table;
rlist   SYS.ODCIRIDLIST := SYS.ODCIRIDLIST();
i       INTEGER;
d       INTEGER;
BEGIN
cnum := SELF.curnum;
IF self.howmany = 0 THEN
dbms_sql.define_array(cnum, 1, rid_tab, nrows, 1);
d := DBMS_SQL.EXECUTE(cnum);
END IF;
d := DBMS_SQL.FETCH_ROWS(cnum);
IF d = nrows THEN
rlist.extend(d);
ELSE
rlist.extend(d+1);
END IF;
DBMS_SQL.COLUMN_VALUE(cnum, 1, rid_tab);
for i in 1..d loop
rlist(i) := rid_tab(i+SELF.howmany);
end loop;
SELF.howmany := SELF.howmany + d;
rids := rlist;
RETURN ODCICONST.SUCCESS;
END;
MEMBER FUNCTION ODCIINDEXCLOSE(env SYS.ODCIEnv) RETURN NUMBER IS
cnum INTEGER;
BEGIN
cnum := SELF.curnum;
DBMS_SQL.CLOSE_CURSOR(cnum);
RETURN ODCICONST.SUCCESS;
END;
END;
/

次の手順では、索引タイプに関連付けられる演算子に必要なfunction_for_position_betweenファンクション実装を作成します。(PL/SQLブロックはカッコで囲んでいます。)

このファンクションは、索引ベースのファンクション評価で使用するためのものです。そのため、索引コンテキストおよびスキャン・コンテキストをパラメータとして指定します。

関連項目:

- 索引ベースのファンクション実装を作成する場合の詳細は、『Oracle Databaseデータ・カートリッジ開発者ガイド』を参照してください。

- 「CREATE FUNCTION」および『Oracle Database PL/SQL言語リファレンス』を参照してください。

CREATE OR REPLACE FUNCTION function_for_position_between
(col NUMBER, lower_pos NUMBER, upper_pos NUMBER,
indexctx IN SYS.ODCIIndexCtx,
scanctx IN OUT position_im,
scanflg IN NUMBER)
RETURN NUMBER AS
rid              ROWID;
storage_tab_name VARCHAR2(65);
lower_bound_stmt VARCHAR2(2000);
upper_bound_stmt VARCHAR2(2000);
col_val_stmt     VARCHAR2(2000);
lower_bound      NUMBER;
upper_bound      NUMBER;
column_value     NUMBER;
BEGIN
IF (indexctx.IndexInfo IS NOT NULL) THEN
storage_tab_name := indexctx.IndexInfo.INDEXSCHEMA || '.' ||
indexctx.IndexInfo.INDEXNAME || '_STORAGE_TAB';
IF (scanctx IS NULL) THEN
/* This is the first call. Open a cursor for future calls.
First, do some error checking
*/
IF (lower_pos > upper_pos) THEN
RAISE_APPLICATION_ERROR(-20101,
'Upper Position must be greater than or equal to Lower Position');
END IF;
IF (lower_pos <= 0) THEN
RAISE_APPLICATION_ERROR(-20101,
'Both Positions must be greater than zero');
END IF;
/* Obtain the upper and lower value bounds for the range we're interested in.
*/
upper_bound_stmt := 'Select MIN(col_val) FROM (Select /*+ INDEX_DESC(' ||
storage_tab_name || ') */ DISTINCT ' ||
'col_val FROM ' || storage_tab_name || ' ORDER BY ' ||
'col_val DESC) WHERE rownum <= ' || lower_pos;
EXECUTE IMMEDIATE upper_bound_stmt INTO upper_bound;
IF (lower_pos != upper_pos) THEN
lower_bound_stmt := 'Select MIN(col_val) FROM (Select /*+ INDEX_DESC(' ||
storage_tab_name || ') */ DISTINCT ' ||
'col_val FROM ' || storage_tab_name ||
' WHERE col_val < ' || upper_bound || ' ORDER BY ' ||
'col_val DESC) WHERE rownum <= ' ||
(upper_pos - lower_pos);
EXECUTE IMMEDIATE lower_bound_stmt INTO lower_bound;
ELSE
lower_bound := upper_bound;
END IF;
IF (lower_bound IS NULL) THEN
lower_bound := upper_bound;
END IF;
/* Store the lower and upper bounds for future function invocations for
the positions.
*/
scanctx := position_im(0, 0, lower_bound, upper_bound);
END IF;
/* Fetch the column value corresponding to the rowid, and see if it falls
within the determined range.
*/
col_val_stmt := 'Select col_val FROM ' || storage_tab_name ||
' WHERE base_rowid = ''' || indexctx.Rid || '''';
EXECUTE IMMEDIATE col_val_stmt INTO column_value;
IF (column_value <= scanctx.upper_bound AND
column_value >= scanctx.lower_bound AND
scanflg = ODCICONST.RegularCall) THEN
RETURN 1;
ELSE
RETURN 0;
END IF;
ELSE
RAISE_APPLICATION_ERROR(-20101, 'A column that has a domain index of' ||
'Position indextype must be the first argument');
END IF;
END;
/

次の手順は、function_for_position_betweenファンクションを使用するposition_between演算子を作成します。この演算子には、索引列NUMBERを最初の引数として指定し、その後にNUMBERの下限および上限を2番目および3番目の引数として指定します。

関連項目:
「CREATE OPERATOR」

CREATE OR REPLACE OPERATOR position_between
BINDING (NUMBER, NUMBER, NUMBER) RETURN NUMBER
WITH INDEX CONTEXT, SCAN CONTEXT position_im
USING function_for_position_between;

索引コンテキストおよびスキャン・コンテキストが、索引ベースのファンクション評価に渡されるように、このCREATE OPERATOR文にはWITH INDEX CONTEXT, SCAN CONTEXT position_im句が含まれています。

次の手順は、position_operatorに必要な索引タイプposition_indextypeを作成します。

関連項目:
CREATE INDEXTYPE

CREATE INDEXTYPE position_indextype
FOR position_between(NUMBER, NUMBER, NUMBER)
USING position_im;

演算子position_betweenは、索引ベースのファンクション実装を使用します。そのため、索引情報がファンクション評価に渡されるように、参照列にドメイン索引を定義する必要があります。そのため、最後の手順では、索引タイプposition_indextypeを使用してドメイン索引salary_indexを作成します。

関連項目:
「CREATE INDEX」

CREATE INDEX salary_index ON employees(salary)
INDEXTYPE IS position_indextype;

これで、演算子position_betweenを使用して、元の問合せを次のように書き換えることができます。

SELECT last_name, salary FROM employees
WHERE position_between(salary, 10, 20)=1
ORDER BY salary DESC, last_name;

LAST_NAME                     SALARY
------------------------- ----------
Tucker                         10000
King                           10000
Baer                           10000
Bloom                          10000
Fox                             9600
Bernstein                       9500
Sully                           9500
Greene                          9500
Hunold                          9000
Faviet                          9000
McEwen                          9000
Hall                            9000
Hutton                          8800
Taylor                          8600
Livingston                      8400
Gietz                           8300
Chen                            8200
Fripp                           8200
Weiss                           8000
Olsen                           8000
Smith                           8000
Kaufling                        7900

SQL文でのXMLの使用方法

この項では、XMLTypeデータをデータベースで使用する方法を説明します。

XMLType表

サンプル・スキーマoeには表warehousesが含まれ、この表にはXMLType列warehouse_specが含まれます。warehouse_spec情報を持つ別の表を作成するとします。次の例は、CLOB列を1列のみ持つ非常に単純なXMLType表を作成します。

CREATE TABLE xwarehouses OF XMLTYPE
XMLTYPE STORE AS CLOB;

このような表には、次の文に示すように、XMLType構文を使用してデータを挿入することができます。(この例で挿入されるデータは、サンプル表oe.warehousesのwarehouse_spec列にあるデータに対応します。warehouse_idは1です。)

INSERT INTO xwarehouses VALUES
(xmltype('<?xml version="1.0"?>
<Warehouse>
<WarehouseId>1</WarehouseId>
<WarehouseName>Southlake, Texas</WarehouseName>
<Building>Owned</Building>
<Area>25000</Area>
<Docks>2</Docks>
<DockType>Rear load</DockType>
<WaterAccess>true</WaterAccess>
<RailAccess>N</RailAccess>
<Parking>Street</Parking>
<VClearance>10</VClearance>
</Warehouse>'));

関連項目:
XMLTypeおよびそのメンバー・メソッドの詳細は、『Oracle XML DB開発者ガイド』を参照してください。

この表の問合せには、次の文を使用します。

SELECT e.getClobVal() FROM xwarehouses e;

CLOB列には、LOB列に対する制限がすべて適用されます。これらの制限事項を回避するには、XMLスキーマベースの表を作成します。XMLスキーマは、XML要素を対応するオブジェクト・リレーショナル・データにマップします。次の例は、XMLスキーマをローカルに登録します。XMLスキーマ(xwarhouses.xsd)には、xwarehouses表と同じ構造が反映されます。(XMLスキーマの宣言ではPL/SQLおよびDBMS_XMLSCHEMAパッケージが使用されています。例では、これらをイタリック体で示しています。)

関連項目:
XMLスキーマの作成の詳細は、『Oracle XML DB開発者ガイド』を参照してください。

begin
dbms_xmlschema.registerSchema(
'http://www.example.com/xwarehouses.xsd',
'<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.example.com/xwarehouses.xsd"
xmlns:who="http://www.example.com/xwarehouses.xsd"
version="1.0">

<simpleType name="RentalType">
<restriction base="string">
<enumeration value="Rented"/>
<enumeration value="Owned"/>
</restriction>
</simpleType>

<simpleType name="ParkingType">
<restriction base="string">
<enumeration value="Street"/>
<enumeration value="Lot"/>
</restriction>
</simpleType>

<element name = "Warehouse">
<complexType>
<sequence>
<element name = "WarehouseId"   type = "positiveInteger"/>
<element name = "WarehouseName" type = "string"/>
<element name = "Building"      type = "who:RentalType"/>
<element name = "Area"          type = "positiveInteger"/>
<element name = "Docks"         type = "positiveInteger"/>
<element name = "DockType"      type = "string"/>
<element name = "WaterAccess"   type = "boolean"/>
<element name = "RailAccess"    type = "boolean"/>
<element name = "Parking"       type = "who:ParkingType"/>
<element name = "VClearance"    type = "positiveInteger"/>
</sequence>
</complexType>
</element>
</schema>',
TRUE, TRUE, FALSE, FALSE);
end;
/

これで、次の例に示すように、XMLスキーマベースの表を作成できます。

CREATE TABLE xwarehouses OF XMLTYPE
XMLSCHEMA "http://www.example.com/xwarehouses.xsd"
ELEMENT "Warehouse";

デフォルトでは、この表はオブジェクト・リレーショナル表として格納されます。そのため、次の例に示すように、この表にデータを挿入できます。(この例で挿入されるデータは、サンプル表oe.warehousesのwarehouse_spec列にあるデータに対応します。warehouse_idは1です。)

INSERT INTO xwarehouses VALUES(   xmltype.createxml('<?xml version="1.0"?>
<who:Warehouse xmlns:who="http://www.example.com/xwarehouses.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.example.com/xwarehouses.xsd
http://www.example.com/xwarehouses.xsd">
<WarehouseId>1</WarehouseId>
<WarehouseName>Southlake, Texas</WarehouseName>
<Building>Owned</Building>
<Area>25000</Area>
<Docks>2</Docks>
<DockType>Rear load</DockType>
<WaterAccess>true</WaterAccess>
<RailAccess>false</RailAccess>
<Parking>Street</Parking>
<VClearance>10</VClearance>
</who:Warehouse>'));
...

XMLスキーマベースの表には制約を定義できます。その場合は、XML要素Warehouse内の適切な属性を参照するように、XMLDATA疑似列を使用します。

ALTER TABLE xwarehouses ADD (PRIMARY KEY(XMLDATA."WarehouseId"));

xwarehousesのデータはオブジェクト・リレーショナルに格納されるため、可能な場合に基礎となる記憶域を参照できるように、このXMLType表への問合せが書き換えられます。そのため、次の問合せでは、前述の例の主キー制約によって作成された索引を使用します。

SELECT * FROM xwarehouses x
WHERE EXISTSNODE(VALUE(x), '/Warehouse[WarehouseId="1"]',
'xmlns:who="http://www.example.com/xwarehouses.xsd"') = 1;

SELECT * FROM xwarehouses x
WHERE EXTRACTVALUE(VALUE(x), '/Warehouse/WarehouseId',
'xmlns:who="http://www.example.com/xwarehouses.xsd"') = 1;

XMLスキーマベースの表に索引を明示的に作成すると、後続の問合せのパフォーマンスが大幅に向上します。XMLType表にオブジェクト・リレーショナル・ビューを作成することも、オブジェクト・リレーショナル表にXMLTypeビューを作成することもできます。

関連項目:

- XMLDATA疑似列の詳細は、「XMLDATA疑似列」を参照してください。

- 「XMLTypeビューの作成例:」

- 「XMLType表の索引の作成例:」

XMLType列

サンプル表oe.warehousesは、XMLType型のwarehouse_spec列を使用して作成されました。この項の例は、2つのタイプの記憶域を使用して、簡略化したoe.warehouses表を作成します。

最初の例は、CLOBとして格納されたXMLType表を持つ表を作成します。この表ではXMLスキーマが必要ないため、コンテンツ構造は事前に定義しません。

CREATE TABLE xwarehouses (
warehouse_id        NUMBER,
warehouse_spec      XMLTYPE)
XMLTYPE warehouse_spec STORE AS CLOB
(TABLESPACE example
STORAGE (INITIAL 6144)
CHUNK 4000
NOCACHE LOGGING);

次の例でも前述の例とほぼ同じ表を作成しますが、指定されたXMLスキーマによって構造が決められているオブジェクト・リレーショナルXMLType列に、XMLTypeデータが格納されます。

CREATE TABLE xwarehouses (
warehouse_id    NUMBER,
warehouse_spec  XMLTYPE)
XMLTYPE warehouse_spec STORE AS OBJECT RELATIONAL
XMLSCHEMA "http://www.example.com/xwarehouses.xsd"
ELEMENT "Warehouse";

索引
A B C D E F G H I J K L M N O P Q R S T U V W X Z

記号

LIKE演算子で使用する%(パーセント), 6.7.1

Oracle Automatic Storage Managementファイル名の+(プラス記号), 8

数字

20世紀, 2.4.2.4

21世紀, 2.4.2.4

3GLファンクションおよびプロシージャ, コール, 15

A

ABORT LOGICAL STANDBY句

ALTER DATABASE, 10.2, 10.2

ABSファンクション, 7.8 ACCESSED GLOBALLY句

CREATE CONTEXT, 14

ACCOUNT LOCK句

CREATE USER, 17

ALTER USER。「CREATE USER」を参照

ACCOUNT UNLOCK句

CREATE USER, 17

ALTER USER。「CREATE USER」を参照

ACOSファンクション, 7.8 ACTIVATE STANDBY DATABASE句

ALTER DATABASE, 10.2

ADおよびA.D.日時書式要素, 2.4.2.2 ADD句

ALTER DIMENSION, 10.2

ALTER INDEXTYPE, 10.2

ALTER TABLE, 12

ALTER VIEW, 13

ADD DATAFILE句

ALTER TABLESPACE, 12

ADD LOGFILE句

ALTER DATABASE, 10.2

ADD LOGFILE GROUP句

ALTER DATABASE, 10.2

ADD LOGFILE INSTANCE句

ALTER DATABASE, 10.2

ADD LOGFILE MEMBER句

ALTER DATABASE, 10.2, 10.2

ADD LOGFILE THREAD句

ALTER DATABASE, 10.2

ADD OVERFLOW句

ALTER TABLE, 12

ADD PARTITION句

ALTER TABLE, 12, 12, 12

ADD PRIMARY KEY句

ALTER MATERIALIZED VIEW LOG, 11

ADD ROWID句

ALTER MATERIALIZED VIEW, 11

ADD SUPPLEMENTAL LOG DATA句

ALTER DATABASE, 10.2

ADD SUPPLEMENTAL LOG GROUP句

ALTER TABLE, 12

ADD TEMPFILE句

ALTER TABLESPACE, 12

ADD VALUES句

ALTER TABLE ... MODIFY PARTITION, 12, 12

ADD_MONTHSファンクション, 7.8 表への制約の追加, 12 ADMIN USER句

CREATE PLUGGABLE DATABASE, 15

ADMINISTER ANY SQL TUNING SETシステム権限, 18 ADMINISTER DATABASE TRIGGERシステム権限, 18 ADMINISTER KEY MANAGEMENT文, 10.2 ADMINISTER KEY MANAGEMENTシステム権限, 18 ADMINISTER SQL MANAGEMENT OBJECTシステム権限, 18, 18 ADMINISTER SQL TUNING SETシステム権限, 18 拡張索引圧縮

定義, 14

無効化, 14

使用可能化, 10.2

索引再構築, 10.2

高度な行圧縮, 16 ADVISE句

ALTER SESSION, 11

ADVISORシステム権限, 18 集計ファンクション, 7.3 別名

列, 9.2

ビュー問合せの式, 17

問合せおよび副問合せでの指定, 19

ALL句

SELECT, 19

SET CONSTRAINTS, 19

SET ROLE, 19

ALL EXCEPT句

SET ROLE, 19

ALL演算子, 6.2 ALL PRIVILEGES句

GRANT, 18

REVOKE, 18

ALL PRIVILEGESショートカット

AUDIT, 13

ALLショートカット

AUDIT, 13

ALL_COL_COMMENTSデータ・ディクショナリ・ビュー, 13 ALL_INDEXTYPE_COMMENTSデータ・ディクショナリ・ビュー, 13 ALL_MVIEW_COMMENTSデータ・ディクショナリ・ビュー, 13 ALL_OPERATOR_COMMENTSデータ・ディクショナリ・ビュー, 13 ALL_ROWSヒント, 2.6.4.1 ALL_TAB_COMMENTSデータ・ディクショナリ・ビュー, 13 全列ワイルド・カード, 19 ALLOCATE EXTENT句

ALTER CLUSTER, 10.2, 10.2

ALTER INDEX, 10.2

ALTER MATERIALIZED VIEW, 11

ALTER TABLE, 12

ALLOW CORRUPTION句

ALTER DATABASE ... RECOVER, 10.2

ALTER ANY CLUSTERシステム権限, 18 ALTER ANY CUBE DIMENSIONシステム権限, 18 ALTER ANY CUBEシステム権限, 18 ALTER ANY DIMENSIONシステム権限, 18 ALTER ANY INDEXシステム権限, 18 ALTER ANY INDEXTYPEシステム権限, 18 ALTER ANY LIBRARYシステム権限, 18 ALTER ANY MATERIALIZED VIEWシステム権限, 18 ALTER ANY MINING MODELシステム権限, 18 ALTER ANY OPERATORシステム権限, 18 ALTER ANY OUTLINEシステム権限, 18 ALTER ANY PROCEDUREシステム権限, 18 ALTER ANY ROLEシステム権限, 18 ALTER ANY SEQUENCEシステム権限, 18 ALTER ANY SQL PROFILEシステム権限, 18 ALTER ANY SQL TRANSLATION PROFILEシステム権限, 18 ALTER ANY TABLEシステム権限, 18 ALTER ANY TRIGGERシステム権限, 18 ALTER ANY TYPEシステム権限, 18 ALTER AUDIT POLICY文, 10.2 ALTER CLUSTER文, 10.2 ALTER DATABASE LINKシステム権限, 18 ALTER DATABASE文, 10.2 ALTER DATABASEシステム権限, 18 ALTER DIMENSION文, 10.2 ALTER DISKGROUP文, 10.2 ALTER FLASHBACK ARCHIVE文, 10.2 ALTER FUNCTION文, 10.2 ALTER INDEX文, 10.2 ALTER INDEXTYPE文, 10.2 ALTER JAVA CLASS文, 10.2 ALTER JAVA SOURCE文, 10.2 ALTER LIBRARY文, 11 ALTER MATERIALIZED VIEW LOG文, 11 ALTER MATERIALIZED VIEW文, 11 ALTER MATERIALIZED ZONEMAP文, 11 ALTERオブジェクト権限

マイニング・モデル, 18

順序, 18

SQL翻訳プロファイル, 18

表, 18

OLAPキューブ, 18

OLAPキューブ・ディメンション, 18

ALTER OPERATOR文, 11 ALTER OUTLINE文, 11 ALTER PACKAGE文, 11 ALTER PLUGGABLE DATABASE文, 11 ALTER PROCEDURE文, 11 ALTER PROFILE文, 11 ALTER PROFILEシステム権限, 18 ALTER PUBLIC DATABASE LINKシステム権限, 18 ALTER RESOURCE COST文, 11 ALTER RESOURCE COSTシステム権限, 18 ALTER ROLE文, 11 ALTER ROLLBACK SEGMENT文, 11 ALTER ROLLBACK SEGMENTシステム権限, 18 ALTER SEQUENCE文, 11 ALTER SESSION文, 11 ALTER SESSIONシステム権限, 18 ALTER SNAPSHOT。「ALTER MATERIALIZED VIEW」を参照 ALTER SNAPSHOT LOG。「ALTER MATERIALIZED VIEW LOG」を参照 ALTER SYSTEM文, 11 ALTER SYSTEMシステム権限, 18 ALTER TABLE文, 12 ALTER TABLESPACE文, 12 ALTER TABLESPACEシステム権限, 18 ALTER TRIGGER文, 13 ALTER TYPE文, 13 ALTER USER文, 13 ALTER USERシステム権限, 18 ALTER VIEW文, 13 alter_external_table句

ALTER TABLE, 12

記憶域の変更

PDB, 11

AMおよびA.M.日時書式要素, 2.4.2.2 分析ファンクション, 7.4 ANALYZE ANYシステム権限, 18 ANALYZE CLUSTER文, 13 ANALYZE INDEX文, 13 ANALYZE TABLE文, 13 ANCILLARY TO句

CREATE OPERATOR, 15

AND条件, 6.4、6.4 AND DATAFILES句

DROP TABLESPACE, 18, 18

ANSI。「ANSI(米国規格協会)」を参照, C

データ型, 2.1.4

Oracleデータ型への変換, 2.1.4

規格, 1.2, 1.2, C.1 サポートされるデータ型, 2.1 アンチ結合, 9.6.7 ANY演算子, 6.2 APPENDヒント, 2.6.4.2 APPEND_VALUESヒント, 2.6.4.3 APPENDCHILDXMLファンクション, 7.8 アプリケーション・サーバー

ユーザーとしての接続の許可, 13

アプリケーション

ユーザーとしての接続の許可, 13

保護, 14

検証, 14

APPROX_COUNT_DISTINCTファンクション, 7.8 ARCHIVE LOG句

ALTER SYSTEM, 11

アーカイブ・モード

指定, 14

アーカイブREDOログ

位置, 10.2

ARCHIVELOG句

ALTER DATABASE, 10.2, 10.2

CREATE CONTROLFILE, 14

CREATE DATABASE, 14

引数

演算子, 4

算術

DATE値, 2.1.1.16

算術演算子, 4.2 AS CLONE句

CREATE PLUGGABLE DATABASE, 15

AS source_char句

CREATE JAVA, 14

AS副問合せ句

CREATE MATERIALIZED VIEW, 15

CREATE TABLE, 16

CREATE VIEW, 17

ASC句

CREATE INDEX, 14

ASCIIキャラクタ・セット, 2.2.3 ASCIIファンクション, 7.8 ASCIISTRファンクション, 7.8 ASINファンクション, 7.8 ASM_DISKGROUPS初期化パラメータ

ALTER SYSTEMでの設定, 10.2, 14

ASM_DISKSTRING初期化パラメータ

ALTER SYSTEMでの設定, 14

ASSOCIATE STATISTICS文, 13 アスタリスク

問合せの全列ワイルド・カード, 19

非同期のコミット, 13 ATANファンクション, 7.8 ATAN2ファンクション, 7.8 ATTRIBUTE句

ALTER DIMENSION, 10.2

CREATE DIMENSION, 14, 14

属性のクラスタリング, 16 属性

ディメンションの追加, 10.2

ディメンションからの削除, 10.2

オブジェクト型での最大数, 16

ディメンションの定義, 14

ディスク・グループ, 10.2, 14

AUDIT ANYシステム権限, 18 監査ポリシー

コメント, 13

作成, 14

削除, 17

変更, 10.2

AUDIT文, 13

統合監査, 13

ロック, B.2.2

AUDIT SYSTEMシステム権限, 18 監査

オプション

SQL文, 13

方針

値に基づいた方針, 13, 13

SQL文, 13

プロキシ, 13

ユーザー, 13

ディレクトリ, 13

スキーマ, 13

停止, 18

システム権限, 13 AUTHENTICATED BY句

CREATE DATABASE LINK, 14

AUTHENTICATED句

ALTER USER, 13

AUTHENTICATION REQUIRED句

ALTER USER, 13

AUTHID CURRENT_USER句

ALTER JAVA, 10.2

CREATE JAVA, 14, 14

AUTHID DEFINER句

ALTER JAVA, 10.2

CREATE JAVA, 14, 14

AUTOALLOCATE句

CREATE TABLESPACE, 16

AUTOEXTEND句

ALTER DATABASE, 10.2

CREATE DATABASE, 14

自動セグメント領域管理, 16 自動UNDOモード, 11, 14 AVGファンクション, 7.8

B

BACKUP ANY TABLEシステム権限, 18

BACKUP CONTROLFILE句

ALTER DATABASE, 10.2, 10.2

バックアップ, 10.2 基本表圧縮, 16 BCおよびB.C.日時書式要素, 2.4.2.2 BECOME USERシステム権限, 18 BEGIN BACKUP句

ALTER DATABASE, 10.2

ALTER TABLESPACE, 12

BEQUEATH句

CREATE VIEW, 17

BETWEEN条件, 6.12 BFILE

データ型, 2.1.1.20

ロケータ, 2.1.1.20

BFILENAMEファンクション, 7.8 BIN_TO_NUMファンクション, 7.8 バイナリ・ラージ・オブジェクト。「BLOB」を参照 バイナリ演算子, 4.1.1 バイナリXML書式, 16 バイナリXML記憶域, 16 BINDING句

CREATE OPERATOR, 15

バインド

演算子への追加, 11

演算子からの削除, 11

ビット・ベクトル

数値への変換, 7.8

BITANDファンクション, 7.8 BITMAP句

CREATE INDEX, 14

ビットマップ索引, 14

結合索引の作成, 14

空白埋め

書式モデルへの指定, 2.4.3

抑制, 2.4.3

BLOBデータ型, 2.1.1.21

トランザクションのサポート, 2.1.1.21

BLOCKSIZE句

CREATE TABLESPACE, 16

下位N番のレポート, 7.8, 7.8, 7.8 バッファ・キャッシュ

フラッシュ, 11

BUFFER_POOLパラメータ

STORAGE句, 8

BUILD DEFERRED句

CREATE MATERIALIZED VIEW, 15

BUILD IMMEDIATE句

CREATE MATERIALIZED VIEW, 15

BY ACCESS句

AUDIT, 13

BY SESSION句

AUDIT, 13

BYTEキャラクタ・セマンティクス, 2.1.1.1, 2.1.1.5 BYTEの長さセマンティクス, 12

C

CACHE句

ALTER MATERIALIZED VIEW, 11

ALTER MATERIALIZED VIEW LOG, 11

ALTER TABLE, 16

CREATE CLUSTER, 14

CREATE MATERIALIZED VIEW, 15

CREATE MATERIALIZED VIEW LOG, 15

CACHEヒント, 2.6.4.4 CACHEパラメータ

CREATE SEQUENCE, 15

ALTER SEQUENCE。「CREATE SEQUENCE」を参照, 11

CACHE READS句

ALTER TABLE, 12

CREATE TABLE, 16

キャッシュされたカーソル

実行計画, 18

コール仕様。「コール仕様」を参照

プロシージャ, 15

CALL文, 13 コール

CPU時間の制限, 15

読み込まれたデータ・ブロックの制限, 15

CARDINALITYファンクション, 7.8 デカルト積, 9.6.4 CASCADE句

CREATE TABLE, 16

DROP PROFILE, 17

DROP USER, 18

CASCADE CONSTRAINTS句

DROP CLUSTER, 17

DROP TABLE, 18

DROP TABLESPACE, 18

DROP VIEW, 18

REVOKE, 18, 18

CASE式, 5.4

検索, 5.4

単純, 5.4

CASTファンクション, 7.8 CATSEARCH条件, 6.1 CATSEARCH演算子, 4.1 CDB

作成, 14

変更, 10.2

CEILファンクション, 7.8 連鎖行

リスト, 13

クラスタ, 13

CHANGE CATEGORY句

ALTER OUTLINE, 11

CHANGE NOTIFICATIONシステム権限, 18 CHANGE_DUPKEY_ERROR_INDEXヒント, 2.6.4.5 状態の変更

PDB, 11

複数のPDB, 11

CHARキャラクタ・セマンティクス, 2.1.1.1, 2.1.1.5 CHARデータ型, 2.1.1.1

VARCHAR2への変換, 2.4.1

CHARの長さセマンティクス, 12 文字ファンクション

文字値, 7.2.2

数値, 7.2.3

キャラクタ・ラージ・オブジェクト。「CLOB」を参照 文字長セマンティクス, 12 文字リテラル。「テキスト」を参照

日付および数値書式, 2.4

リテラル

SQL構文内, 2.3.1

CHARおよびVARCHAR2データ型のプロパティ, 2.3.1 構文, 2.3.1 キャラクタ・セット

変更, 10.2

キャラクタ・セット・ファンクション, 7.2.4 CHARACTER SETパラメータ

CREATE CONTROLFILE, 14

CREATE DATABASE, 14

キャラクタ・セット

一般的, 2.2.3

データベース, 指定, 14

マルチバイト・キャラクタ, 2.8.1

データベースでの指定, 14

文字列

比較規則, 2.2.3

完全一致, 2.4.3

固定長, 2.1.1.1

各国語キャラクタ・セット, 2.1.1.2

可変長, 2.1.1.3, 2.1.1.9

CHARTOROWIDファンクション, 7.8 CHECK句

制約, 8

CREATE TABLE, 16

CHECK制約, 8 CHECK DATAFILES句

ALTER SYSTEM, 11

CHECKPOINT句

ALTER SYSTEM, 11

チェックポイント

強制実行, 11

CHRファンクション, 7.8 CHUNK句

ALTER TABLE, 12

CREATE TABLE, 16

CLEAR LOGFILE句

ALTER DATABASE, 10.2, 10.2

CLOBデータ型, 2.1.1.22

トランザクションのサポート, 2.1.1.22

クローン・データベース

マウント, 10.2

CLOSE DATABASE LINK句

ALTER SESSION, 11

CLUSTER句

ANALYZE, 13

CREATE INDEX, 14

CREATE TABLE, 16

TRUNCATE, 19

CLUSTERヒント, 2.6.4.6 CLUSTER_DETAILSファンクション, 7.8 CLUSTER_DISTANCEファンクション, 7.8 CLUSTER_IDファンクション, 7.8 CLUSTER_PROBABILITYファンクション, 7.8 CLUSTER_SETファンクション, 7.8 CLUSTERINGヒント, 2.6.4.7 クラスタ

表の割当て, 16

取り出されたブロックのキャッシュ, 14

クラスタ索引, 14

統計情報の収集, 13

作成, 14, 14

未使用エクステントの割当て解除, 10.2

並列度

変更, 10.2, 10.2

作成時, 14

表の削除, 17 エクステントの割当て, 10.2, 10.2 システム権限の付与, 18 ハッシュ, 14

シングルテーブル, 14

ソート, 14, 16

索引, 14 キー値

領域の割当て, 14

領域の変更, 10.2

移行行および連鎖行, 13, 13 変更, 10.2 物理属性

変更, 10.2

指定, 14

未使用領域の解放, 10.2 データベースからの削除, 17 SQL例, 17 記憶域属性

変更, 10.2

記憶特性

変更, 10.2

作成表領域, 14 構造の検証, 13 COALESCE句

パーティション, 12

ALTER INDEX, 10.2

ALTER TABLE, 12, 12, 12

ALTER TABLESPACE, 12

COALESCEファンクション, 7.8

様々なCASE式, 7.8

COALESCE SUBPARTITION句

ALTER TABLE, 12

COLLECTファンクション, 7.8 収集ファンクション, 7.2.9 コレクション型

マルチレベル, 16

コレクション

行の挿入, 18

変更, 12

検索メソッドの変更, 12

ネストした表, 2.1.5.4

空のテスト, 6.6.2

表としての扱い, 18, 19, 19, 19

ネスト解除, 19

例, 19

VARRAY, 2.1.5.3 コレクション型値

データ型への変換, 7.8

列式, 5.5 列REF制約, 8

CREATE TABLE, 16

列値

行へのピボット解除, 19

COLUMN_VALUE疑似列, 3.4 列

追加, 12

別名, 9.2

記憶域の変更, 12

統計タイプの関連付け, 13

索引, 14

コメント, 13

コメントの作成, 13

定義, 16

統計タイプの関連付けの解除, 17

表からの削除, 12

LOB

記憶域属性, 12

最大数, 16 既存の制約の変更, 12 親子関係, 14 プロパティの変更, 12, 12 修飾名, 9.2 REF

記述, 8

名前の変更, 12 値の制限, 8 指定

主キー, 8

制約, 16

デフォルト値, 16

記憶域プロパティ, 16 置換可能な識別型, 7.8 仮想

表への追加, 12

作成, 16

変更, 12

COLUMNS句

ASSOCIATE STATISTICS, 13, 13

DISASSOCIATE STATISTICS, 17

COMMENT ANY MINING MODELシステム権限, 18 COMMENT ANY TABLEシステム権限, 18 COMMENT句

COMMIT, 13

COMMENT文, 13 コメント, 2.6

オブジェクトへの追加, 13

トランザクションとの関連付け, 13

オブジェクトからの削除, 13

SQL文, 2.6.1

エディション, 13

索引タイプ, 13

マイニング・モデル, 13

演算子, 13

スキーマ・オブジェクト, 2.6.2

表の列, 13

表, 13

統合監査ポリシー, 13

データ・ディクショナリからの削除, 13

指定, 2.6.1

表示, 13

コミット

非同期, 13

自動, 13

COMMIT IN PROCEDURE句

ALTER SESSION, 11

COMMIT文, 13 COMMIT TO SWITCHOVER句

ALTER DATABASE, 10.2

比較条件, 6.2 比較ファンクション, 7.2.6 比較セマンティクス

文字列, 2.2.3

COMPILE句

ALTER DIMENSION, 10.2

ALTER JAVA SOURCE, 10.2

ALTER MATERIALIZED VIEW, 11

ALTER VIEW, 13

CREATE JAVA, 14

COMPOSEファンクション, 7.8 複合外部キー, 8 コンポジット・パーティション化

レンジ-リスト, 12, 16

表の作成時, 16, 16

複合主キー, 8 コンポジット・レンジ・パーティション, 16 COMPOSITE_LIMITパラメータ

ALTER PROFILE, 11

CREATE PROFILE, 15

複合条件, 6.11 複合式, 5.3 COMPRESS句

ALTER INDEX ... REBUILD, 14

CREATE TABLE, 16

圧縮

索引キー, 10.2

表, 16

表領域, 16

CON_DBID_TO_IDファンクション, 7.8 CON_GUID_TO_IDファンクション, 7.8 CON_NAME_TO_IDファンクション, 7.8 CON_UID_TO_IDファンクション, 7.8 CONCATファンクション, 7.8 連結演算子, 4.3 条件

BETWEEN, 6.12

比較, 6.2

複合, 6.11

EXISTS, 6.9.1, 6.13

浮動小数点, 6.3

グループ比較, 6.2.2

IN, 6.14

SQL構文内, 6

期間, 6.12

IS [NOT] EMPTY, 6.6.2

IS [NOT] JSON, 6.10.1

IS [NOT] NULL, 6.8

IS ANY, 6.5.1

IS OF type, 6.15

IS PRESENT, 6.5.2

JSON, 6.10

JSON_EXISTS, 6.10.2

JSON_TEXTCONTAINS, 6.10.3

LIKE, 6.7.1

論理, 6.4

MEMBER, 6.6.3

メンバーシップ, 6.6.3, 6.14

モデル, 6.5

多重集合, 6.6

NULL, 6.8

パターン一致, 6.7

レンジ, 6.12

REGEXP_LIKE, 6.7.2

SET, 6.6.1

単純比較, 6.2.1

SUBMULTISET, 6.6.4

UNDER_PATH, 6.9.2

XML, 6.9

CONNECT BY句

問合せおよび副問合せ, 19

SELECT, 9.3, 19

CONNECT句

SELECTおよび副問合せ, 19

CONNECT TO句

CREATE DATABASE LINK, 14

CONNECT_BY_ISCYCLE疑似列, 3.1.1 CONNECT_BY_ISLEAF疑似列, 3.1.2 CONNECT_BY_ROOT演算子, 4.4.2 CONNECT_TIMEパラメータ

ALTER PROFILE, 11

ALTER RESOURCE COST, 11

接続修飾子, 2.9.3.1.1 CONSIDER FRESH句

ALTER MATERIALIZED VIEW, 11

制約

表への追加, 12

変更, 12

CHECK, 8

チェック

トランザクションの終わり, 8

トランザクションの始まり, 8

各DML文の終わり, 8

REF列, 8 遅延可能, 8, 19

規定, 11

定義, 8, 16

表, 16

列, 16

使用禁止, 16

表の作成後, 12

CASCADE, 16

表の作成時, 16

削除, 12, 12, 18 使用可能, 16, 16

表の作成後, 12

表の作成時, 16

外部キー, 8 既存の制約の変更, 12 ビュー

削除, 13, 18

パーティション化参照, 12, 16 主キー, 8

索引の属性, 8

使用可能, 16

参照整合性, 8 名前の変更, 12 制限事項, 8 トランザクション内の状態設定, 19 違反の行の格納, 12 REF表, 8 一意

索引の属性, 8

使用可能, 16

CONSTRAINT(S)セッション・パラメータ, 11 CONTAINS条件, 6.1 CONTAINS演算子, 4.1 コンテキスト・ネームスペース

インスタンスへのアクセス性, 14

パッケージへの関連付け, 14

OCIを使用した初期化, 14

LDAPディレクトリを使用した初期化, 14

データベースからの削除, 17

コンテキスト

ネームスペースの作成, 14

システム権限の付与, 18

controlfile_clauses

ALTER DATABASE, 10.2

制御ファイル

再利用の許可, 14, 14

バックアップ, 10.2

強制ロギング・モード, 14

再作成, 14

スタンバイの作成, 10.2

CONTROLFILE REUSE句

CREATE DATABASE, 14

変換

ファンクション, 7.2.7

文字列から日付への規則, 2.4.4

CONVERTファンクション, 7.8 COPY句

CREATE PLUGGABLE DATABASE, 15

CORRファンクション, 7.8 CORR_Kファンクション, 7.8 CORR_Sファンクション, 7.8 相関副問合せ, 9.7 相関ファンクション

ケンドールのタウb, 7.8

ピアソン, 7.8

スピアマンのロー, 7.8

相関名

索引の実表, 14

DELETE, 17

SELECT, 19

COSファンクション, 7.8 COSHファンクション, 7.8 COUNTファンクション, 7.8 COVAR_POPファンクション, 7.8 COVAR_SAMPファンクション, 7.8 CPU_PER_CALLパラメータ

ALTER PROFILE, 11

CREATE PROFILE, 15

CPU_PER_SESSIONパラメータ

ALTER PROFILE, 11

ALTER RESOURCE COST, 11

CREATE PROFILE, 15

CREATE ANY CLUSTERシステム権限, 18 CREATE ANY CONTEXTシステム権限, 18 CREATE ANY CUBE BUILD PROCESSシステム権限, 18 CREATE ANY CUBE DIMENSIONシステム権限, 18 CREATE ANY CUBEシステム権限, 18 CREATE ANY DIMENSIONシステム権限, 18 CREATE ANY DIRECTORYシステム権限, 18 CREATE ANY INDEXシステム権限, 18 CREATE ANY INDEXTYPEシステム権限, 18 CREATE ANY JOBシステム権限, 18 CREATE ANY LIBRARYシステム権限, 18 CREATE ANY MATERIALIZED VIEWシステム権限, 18 CREATE ANY MEASURE FOLDERシステム権限, 18 CREATE ANY MINING MODELシステム権限, 18 CREATE ANY OPERATORシステム権限, 18 CREATE ANY OUTLINEシステム権限, 18 CREATE ANY PROCEDUREシステム権限, 18 CREATE ANY SEQUENCEシステム権限, 18 CREATE ANY SQL PROFILEシステム権限, 18 CREATE ANY SQL TRANSLATION PROFILEシステム権限, 18 CREATE ANY SYNONYMシステム権限, 18 CREATE ANY TABLEシステム権限, 18 CREATE ANY TRIGGERシステム権限, 18 CREATE ANY TYPEシステム権限, 18 CREATE ANY VIEWシステム権限, 18 CREATE AUDIT POLICY文, 14 CREATE CLUSTER文, 14 CREATE CLUSTERシステム権限, 18 CREATE CONTEXT文, 14 CREATE CONTROLFILE文, 14 CREATE CUBE BUILD PROCESSシステム権限, 18 CREATE CUBE DIMENSIONシステム権限, 18 CREATE CUBEシステム権限, 18 CREATE DATABASE LINK文, 14 CREATE DATABASE LINKシステム権限, 18 CREATE DATABASE文, 14 CREATE DATAFILE句

ALTER DATABASE, 10.2, 10.2

CREATE DIMENSION文, 14 CREATE DIMENSIONシステム権限, 18 CREATE DIRECTORY文, 14 CREATE DISKGROUP文, 14 CREATE EXTERNAL JOBシステム権限, 18 CREATE FLASHBACK ARCHIVE文, 14 CREATE FUNCTION文, 14 CREATE INDEX文, 14 CREATE INDEXTYPE文, 14 CREATE INDEXTYPEシステム権限, 18 CREATE JAVA文, 14 CREATE JOBシステム権限, 18 CREATE LIBRARY文, 15 CREATE LIBRARYシステム権限, 18 CREATE MATERIALIZED VIEW LOG文, 15 CREATE MATERIALIZED VIEW文, 15 CREATE MATERIALIZED VIEWシステム権限, 18 CREATE MATERIALIZED ZONEMAP文, 15 CREATE MEASURE FOLDERシステム権限, 18 CREATE MINING MODELシステム権限, 18 CREATE OPERATOR文, 15 CREATE OPERATORシステム権限, 18 CREATE OUTLINE文, 15 CREATE PACKAGE BODY文, 15 CREATE PACKAGE文, 15

ロック, B.2.2

CREATE PFILE文, 15, 15 CREATE PLUGGABLE DATABASE文, 15 CREATE PLUGGABLE DATABASEシステム権限, 18 CREATE PROCEDURE文, 15

ロック, B.2.2

CREATE PROCEDUREシステム権限, 18 CREATE PROFILE文, 15 CREATE PROFILEシステム権限, 18 CREATE PUBLIC DATABASE LINKシステム権限, 18 CREATE PUBLIC SYNONYMシステム権限, 18 CREATE RESTORE POINT文, 15 CREATE ROLE文, 15 CREATE ROLEシステム権限, 18 CREATE ROLLBACK SEGMENT文, 15 CREATE ROLLBACK SEGMENTシステム権限, 18 CREATE SCHEMA文, 15 CREATE SEQUENCE文, 15 CREATE SEQUENCEシステム権限, 18 CREATE SESSIONシステム権限, 18 CREATE SPFILE文, 15 CREATE SQL TRANSLATION PROFILEシステム権限, 18 CREATE STANDBY CONTROLFILE句

ALTER DATABASE, 10.2, 10.2

CREATE SYNONYM文, 16 CREATE SYNONYMシステム権限, 18 CREATE TABLE文, 16 CREATE TABLEシステム権限, 18 CREATE TABLESPACE文, 16 CREATE TABLESPACEシステム権限, 18 CREATE TRIGGER文, 16 CREATE TRIGGERシステム権限, 18 CREATE TYPE BODY文, 17 CREATE TYPE文, 17 CREATE TYPEシステム権限, 18 CREATE USER文, 17 CREATE USERシステム権限, 18 CREATE VIEW文, 17 CREATE VIEWシステム権限, 18 クロス結合, 19 CUBE句

SELECT文, 19

CUBE_TABLEファンクション, 7.8 キューブ

データの抽出, 7.8

CUME_DISTファンクション, 7.8 累積分布, 7.8 通貨

桁区切り, 2.4.1.1

通貨記号

ISO, 2.4.1.1

ローカル,2.4.1.1

UNION, 2.4.1.1

CURRENT_DATEファンクション, 7.8 CURRENT_SCHEMAセッション・パラメータ, 11 CURRENT_TIMESTAMPファンクション, 7.8 CURRENT_USER句

CREATE DATABASE LINK, 14

CURRVAL疑似列, 3.2, 15 CURSOR式, 5.6 CURSOR_SHARING_EXACTヒント, 2.6.4.8 カーソル

キャッシュ, 18

CVファンクション, 7.8 CYCLEパラメータ

CREATE SEQUENCE, 15

ALTER SEQUENCE。「CREATE SEQUENCE」を参照, 11

D

データ

集計

GROUP BYの複合列, 19

GROUP BYのグルーピング・セットの連結, 19

グルーピング・セット, 19

サブセットの分析, 7.8 頻繁に使用されるデータのキャッシュ, 16 独立性, 16 入力に対する整合性チェック, 2.1.1.6 ロック, B.1 ピボット, 19 検索, 9.1 一時データとしての指定, 16 UNDO

保持, 12, 16

ピボット解除, 19 データ・カートリッジ・ファンクション, 7.8 データ変換, 2.2.7

文字データ型間, 2.2.7.2

暗黙的

デメリット, 2.2.7.1

暗黙的と明示的, 2.2.7.1 暗黙的に行う場合, 2.2.7.2, 2.2.7.3 明示的に行う場合, 2.2.7.4 データ定義言語

ロック, B.2

データ・ディクショナリ

コメントの追加, 13

ロック, B.2

データファイル

オンライン化, 10.2

サイズの変更, 10.2

新規作成, 10.2

表領域の定義, 16, 16, 16

データベースの定義, 14

メディア・リカバリの設計, 10.2

削除, 12, 18, 18

自動拡張の使用可能化, 8

オンライン・バックアップの終了, 10.2, 12

自動拡張, 8

オンライン・バックアップ, 12

オンラインの情報更新, 11

オンライン化, 10.2

破損のリカバリ, 10.2

リカバリ, 10.2

損失または破損した場合の再作成, 10.2

名前の変更, 10.2, 10.2

サイズ変更, 10.2, 10.2

再利用, 8

サイズ, 8

指定, 8, 8

表領域, 16

データベース, 14

システム生成, 10.2 オフライン化, 10.2, 10.2 一時

縮小, 12

データ操作言語(DML)

索引付け中の許可, 10.2

操作

索引作成中, 14

索引再構築中, 12

制限, 11

パラレル化, 16 影響される行の取出し, 17, 18, 19 文, 10.1.2

PL/SQLサポート, 10.1.2

データ・マイニング・ファンクション, 7.2.11 データ・リダクション

システム権限の付与, 18

データ型, 2.1

任意型, 2.1.7

ANSIのサポート, 2.1

BFILE, 2.1.1.20

BLOB, 2.1.1.21

CHAR, 2.1.1.1

文字, 2.1.1

CLOB, 2.1.1.22

比較規則, 2.2

コレクション型値への変換, 7.8

別のデータ型への変換, 7.8

DATE, 2.1.1.10

日時, 2.1.1.9

時間隔, 2.1.1.9

INTERVAL DAY TO SECOND, 2.1.1.15

INTERVAL YEAR TO MONTH, 2.1.1.14

長さセマンティクス, 2.1.1.1, 2.1.1.5

LONG, 2.1.1.9

LONG RAW, 2.1.1.19

メディア型, 2.1.10

NCHAR, 2.1.1.2

NCLOB, 2.1.1.23

NUMBER, 2.1.1.6

NVARCHAR2, 2.1.1.5

Oracleが提供する型, 2.1.6

RAW, 2.1.1.19

ROWID, 2.1.3

SDO_TOPO_GEOMETRY, 2.1.9.2

空間型, 2.1.9

TIMESTAMP, 2.1.1.11

TIMESTAMP WITH LOCAL TIME ZONE, 2.1.1.13

TIMESTAMP WITH TIME ZONE, 2.1.1.12

UROWID, 2.1.3.2

ユーザー定義, 2.1.5

VARCHAR, 2.1.1.4

VARCHAR2, 2.1.1.3

XML型, 2.1.8

データベース・リンク, 9.10

変更, 10.2

クローズ, 11

作成, 2.9.3.1, 14

シノニムの作成, 16

現行のユーザー, 14

システム権限の付与, 18

名前付け, 2.9.3.1.1

パブリック, 14

削除, 17

参照, 2.9.3.2 データベースからの削除, 17 共有, 14 構文, 2.9.3.1.1 パスワードの更新, 10.2 ユーザー名およびパスワード, 2.9.3.1.2 データベース・オブジェクト

削除, 18

非スキーマ, 2.7.2, 2.7.2

スキーマ, 2.7.1

データベース・スマート・フラッシュ・キャッシュ, 8 データベース

アカウント

作成, 17

変更の許可, 11 REDOログ生成の可能化, 10.2 制御ファイルの再利用の許可, 14 ユーザーに対する無制限のリソース, 15 アーカイブ・モードの指定, 14 バックアップの開始, 10.2 ブロック

サイズの指定, 16

取消しベースのリカバリ, 10.2

終了, 10.2

変更ベースのリカバリ, 10.2 特性の変更, 14 グローバル名の変更, 10.2 名前の変更, 14, 14 キャラクタ・セットの指定, 14 スタンバイ状態へのコミット, 10.2 接続文字列, 2.9.3.1.3 一貫性ベースのリカバリ, 10.2 使用の制御, 10.2 スクリプトの作成, 10.2 作成, 14 データファイル

変更, 10.2

指定, 14

デフォルト・エディションの設定, 10.2 メディア・リカバリの設計, 10.2 削除, 17 バックアップの終了, 10.2 すべてのデータの消去, 14 フラッシュバック, 18 システム権限の付与, 18 FLASHBACKモード, 10.2 FORCE LOGGINGモード, 10.2, 14, 14 インスタンス, 14 ユーザーに対するリソース制限, 15 ログ・ファイル

変更, 10.2

指定, 14

管理リカバリ, 10.2 変更, 10.2 マウント, 10.2, 10.2, 14 別のデータベースへのサブセットの移動, 12 ネームスペース, 2.8.1 名前の指定, 10.2 各国語キャラクタ・セットの指定, 14 データ非消失モード, 10.2 オンライン

ログ・ファイルの追加, 10.2

オープン, 10.2, 14 再作成の準備, 10.2 変更禁止, 10.2 保護モード, 10.2 静止状態, 11 読取り専用, 10.2 読み書き両用, 10.2 破損したデータベースの再構成, 10.2 リカバリ, 10.2, 10.2 リカバリ

破損ブロックの許容, 10.2

テスト, 10.2

ストレージ・スナップショットの使用, 10.2

バックアップ制御ファイルの使用, 10.2

制御ファイルの再作成, 14 リモート

アクセス, 9.10

ユーザーの認証, 14

接続, 14

挿入, 18

サービス名, 14

表ロック, 18

以前のバージョンのリストア, 10.2, 12, 16 ユーザーへの読取り専用トランザクションの制限, 10.2 アクティビティの再開, 11 過去の時点に戻す, 18 スタンバイ

ログ・ファイルの追加, 10.2

アクティビティの停止, 11 システム・ユーザー・パスワード, 14 一時ファイル

変更, 10.2

タイムゾーン

判断, 7.8

有効な値の設定, 10.2, 14

時間ベースのリカバリ, 10.2 DATAFILE句

CREATE DATABASE, 14

DATAFILE句

ALTER DATABASE, 10.2, 10.2

DATAFILE OFFLINE句

ALTER DATABASE, 10.2

DATAFILE ONLINE句

ALTER DATABASE, 10.2

DATAFILE RESIZE句

ALTER DATABASE, 10.2

DATAOBJ_TO_MAT_PARTITION関数, 7.8 DATAOBJ_TO_PARTITIONファンクション, 7.8 DATE列

日時列への変換, 12

DATEデータ型, 2.1.1.10

ユリウス, 2.1.1.10.1

日付書式モデル, 2.4.2, 2.4.2.1.2

長い書式, 2.4.2.1.2

句読点, 2.4.2.1.2

短い書式, 2.4.2.1.2

テキスト, 2.4.2.1.2

日付ファンクション, 7.2.5 日付

算術, 2.1.1.16

比較規則, 2.2.2

日時の演算, 2.1.1.16

境界ケース, 11

夏時間の演算, 2.1.1.17

日時列

DATE列からの作成, 12

日時データ型, 2.1.1.9

夏時間, 2.1.1.17

日時式, 5.7 日時フィールド

日時または期間値からの抽出, 7.8

日時書式要素, 2.4.2.1

グローバリゼーション・サポート, 2.4.2.2

大文字化, 2.4.2.1.1

ISO規格, 2.4.2.3

RR, 2.4.2.4

接尾辞, 2.4.2.5

日時ファンクション, 7.2.5 日時リテラル, 2.3.3 DAY日時書式要素, 2.4.2.2 夏時間, 2.1.1.17

境界ケース, 2.1.1.17

開始または終了, 2.1.1.17

DB2データ型, 2.1.4

制限事項, 2.1.4

DBA_2PC_PENDINGデータ・ディクショナリ・ビュー, 11 DBA_COL_COMMENTSデータ・ディクショナリ・ビュー, 13 DBA_INDEXTYPE_COMMENTSデータ・ディクショナリ・ビュー, 13 DBA_MVIEW_COMMENTSデータ・ディクショナリ・ビュー, 13 DBA_OPERATOR_COMMENTSデータ・ディクショナリ・ビュー, 13 DBA_ROLLBACK_SEGSデータ・ディクショナリ・ビュー, 17 DBA_TAB_COMMENTSデータ・ディクショナリ・ビュー, 13 DBMS_ROWIDパッケージ

拡張ROWID, 2.1.3.1

DBTIMEZONEファンクション, 7.8 DDL。「データ定義言語(DDL)」を参照

文, 10.1.1

暗黙的コミット, 10.1.1

再コンパイルの原因, 10.1.1

PL/SQLサポート, 10.1.1

排他的アクセスを必要とする文, 10.1.1 DEALLOCATE UNUSED句

ALTER CLUSTER, 10.2, 10.2

ALTER INDEX, 10.2

ALTER TABLE, 12

DEBUG ANY PROCEDUREシステム権限, 18 DEBUGオブジェクト権限

ファンクション、プロシージャまたはパッケージ, 18

表, 18

ビュー, 18

オブジェクト型, 18

デバッグ

システム権限の付与, 18

小数点文字, 2.3.2.2

指定, 2.4.1.1

DECODEファンクション, 7.8 デコーディング・ファンクション, 7.2.14 DECOMPOSEファンクション, 7.8 DEFAULT句

ALTER TABLE, 12

ALTER TABLESPACE, 12

CREATE TABLE, 16, 16

CREATE TABLESPACE, 16

DEFAULT COST句

ASSOCIATE STATISTICS, 13, 13

デフォルトの索引の抑制, 15 DEFAULTプロファイル

ユーザーへの割当て, 17

DEFAULT ROLE句

ALTER USER, 13

DEFAULT SELECTIVITY句

ASSOCIATE STATISTICS, 13, 13

デフォルトの表領域, 14 DEFAULT TABLESPACE句

ALTER DATABASE, 10.2

ALTER PLUGGABLE DATABASE, 11

ALTER USER, 13

CREATE USER, 17

ALTER USER。「CREATE USER」を参照

デフォルトの表領域

ユーザーへの指定, 13

DEFAULT TEMPORARY TABLESPACE句

ALTER DATABASE, 10.2

ALTER PLUGGABLE DATABASE, 11

CREATE DATABASE, 14

DEFERRABLE句

制約, 8

遅延可能制約, 19 DEFERRED句

SET CONSTRAINTS, 19

定義者権限ビュー, 17 DELETE ANY CUBE DIMENSIONシステム権限, 18 DELETE ANY MEASURE FOLDERシステム権限, 18 DELETE ANY TABLEシステム権限, 18 DELETEオブジェクト権限

表, 18

ビュー, 18

OLAPキューブ・ディメンション, 18

OLAPメジャー・フォルダ, 18

DELETE文, 17

エラー・ロギング, 17

DELETE STATISTICS句

ANALYZE, 13

DELETEXMLファンクション, 7.8 DENSE_RANKファンクション, 7.8 DEPTHファンクション, 7.8 DEREFファンクション, 7.8 DESC句

CREATE INDEX, 14

ディクショナリ

システム権限の付与, 18

ディメンション・オブジェクト

データの抽出, 7.8

ディメンション

属性

追加, 10.2

変更, 10.2

定義, 14

削除, 10.2

無効のディメンションのコンパイル, 10.2 作成, 14 レベルの定義, 14 例, 14 データの抽出, 7.8 システム権限の付与, 18 階層

追加, 10.2

変更, 10.2

定義, 14

削除, 10.2

レベル

追加, 10.2

定義, 14

削除, 10.2

親子階層, 14

データベースからの削除, 17 ディレクトリ・オブジェクト

オペレーティング・システム・ディレクトリの別名, 14

監査, 13, 13

作成, 14

システム権限の付与, 18

再定義, 14

データベースからの削除, 17

ダイレクト・パス・インサート, 2.6.4.2, 2.6.4.3, 18 DISABLE ALL TRIGGERS句

ALTER TABLE, 12

DISABLE句

ALTER INDEX, 10.2

CREATE TABLE, 16

DISABLE DISTRIBUTED RECOVERY句

ALTER SYSTEM, 11

DISABLE NOVALIDATE制約状態, 8 DISABLE PARALLEL DML句

ALTER SESSION, 11

DISABLE QUERY REWRITE句

ALTER MATERIALIZED VIEW, 11

CREATE MATERIALIZED VIEW, 15

DISABLE RESTRICTED SESSION句

ALTER SYSTEM, 11

DISABLE RESUMABLE句

ALTER SESSION, 11

DISABLE ROW MOVEMENT句

ALTER TABLE, 12

CREATE TABLE, 16, 16

DISABLE STORAGE IN ROW句

ALTER TABLE, 12

CREATE TABLE, 16

DISABLE TABLE LOCK句

ALTER TABLE, 12

DISABLE VALIDATE制約状態, 8 DISABLE_PARALLEL_DMLヒント, 2.6.4.9 DISASSOCIATE STATISTICS文, 17 DISCONNECT SESSION句

ALTER SYSTEM, 11

ディスク・グループ・ファイル

権限の設定の変更, 10.2

インテリジェント・データ配置, 10.2

所有者またはユーザー・グループの設定, 10.2

ディスク・グループ

変更, 10.2

作成, 14

表領域, 16

障害グループ, 10.2, 14

ファイル, 8

削除, 17 Oracle ADVMボリュームの管理, 10.2 均衡の再調整, 10.2 属性の設定, 10.2, 14 ファイルの指定, 8 制御ファイルのファイルの指定, 14 ディスク

オンライン化, 10.2

QUORUM, 14

領域, 10.2

REGULAR, 14

置換, 10.2

オフライン化, 10.2

ディスパッチャ・プロセス

追加プロセスの作成, 11

終了, 11

DISTINCT句

SELECT, 19

固有の問合せ, 19 分散問合せ, 9.10

制限事項, 9.10

分散

ヒント, 2.6.4.77

ドメイン索引, 14, 14, 14

LONG列, 12

統計タイプの関連付け, 13

作成の前提条件, 14

ユーザー定義のCPUおよびI/Oコストの判断, 18

統計タイプの関連付けの解除, 17, 17

例, F.1

削除ルーチンの起動, 18

ローカル・パーティション, 14

変更, 10.2

作成のパラレル化, 14

再構築, 10.2

データベースからの削除, 17

システム管理, 14

domain_index_clause

CREATE INDEX, 14

DOWNGRADE句

ALTER DATABASE, 10.2

DRIVING_SITEヒント, 2.6.4.10 DROP ANY CLUSTERシステム権限, 18 DROP ANY CONTEXTシステム権限, 18 DROP ANY CUBE BUILD PROCESSシステム権限, 18 DROP ANY CUBE DIMENSIONシステム権限, 18 DROP ANY CUBEシステム権限, 18 DROP ANY DIMENSIONシステム権限, 18 DROP ANY DIRECTORYシステム権限, 18 DROP ANY INDEXシステム権限, 18 DROP ANY INDEXTYPEシステム権限, 18 DROP ANY LIBRARYシステム権限, 18 DROP ANY MATERIALIZED VIEWシステム権限, 18 DROP ANY MEASURE FOLDERシステム権限, 18 DROP ANY MINING MODELシステム権限, 18 DROP ANY OPERATORシステム権限, 18 DROP ANY OUTLINEシステム権限, 18 DROP ANY PROCEDUREシステム権限, 18 DROP ANY ROLEシステム権限, 18 DROP ANY SEQUENCEシステム権限, 18 DROP ANY SQL PROFILEシステム権限, 18 DROP ANY SQL TRANSLATION PROFILEシステム権限, 18 DROP ANY SYNONYMシステム権限, 18 DROP ANY TABLEシステム権限, 18 DROP ANY TRIGGERシステム権限, 18 DROP ANY TYPEシステム権限, 18 DROP ANY VIEWシステム権限, 18 DROP AUDIT POLICY文, 17 DROP句

ALTER DIMENSION, 10.2

ALTER INDEXTYPE, 10.2

DROP CLUSTER文, 17 DROP COLUMN句

ALTER TABLE, 12

DROP制約句

ALTER VIEW, 13

DROP CONSTRAINT句

ALTER TABLE, 12

DROP CONTEXT文, 17 DROP DATABASE LINK文, 17 DROP DATABASE文, 17 DROP DIMENSION文, 17 DROP DIRECTORY文, 17 DROP DISKGROUP文, 17 DROP FLASHBACK ARCHIVE文, 17 DROP FUNCTION文, 17 DROP INDEX文, 17 DROP INDEXTYPE文, 17 DROP JAVA文, 17 DROP LIBRARY文, 17 DROP LOGFILE句

ALTER DATABASE, 10.2, 10.2

DROP LOGFILE MEMBER句

ALTER DATABASE, 10.2, 10.2

DROP MATERIALIZED VIEW LOG文, 17 DROP MATERIALIZED VIEW文, 17 DROP MATERIALIZED ZONEMAP文, 17 DROP OPERATOR文, 17 DROP OUTLINE文, 17 DROP PACKAGE BODY文, 17 DROP PACKAGE文, 17 DROP PARTITION句

ALTER INDEX, 10.2

ALTER TABLE, 12

DROP PLUGGABLE DATABASE文, 17 DROP PRIMARY制約句

ALTER TABLE, 12

DROP PROCEDURE文, 17 DROP PROFILE文, 17 DROP PROFILEシステム権限, 18 DROP PUBLIC DATABASE LINKシステム権限, 18 DROP PUBLIC SYNONYMシステム権限, 18 DROP RESTORE POINT文, 17 DROP ROLE文, 17 DROP ROLLBACK SEGMENT文, 17 DROP ROLLBACK SEGMENTシステム権限, 18 DROP SEQUENCE文, 18 DROP SUPPLEMENTAL LOG DATA句

ALTER DATABASE, 10.2

DROP SUPPLEMENTAL LOG GROUP句

ALTER TABLE, 12

DROP SYNONYM文, 18 DROP TABLE文, 18 DROP TABLESPACE文, 18 DROP TABLESPACEシステム権限, 18 DROP TRIGGER文, 18 DROP TYPE BODY文, 18 DROP TYPE文, 18 DROP UNIQUE制約句

ALTER TABLE, 12

DROP USER文, 18 DROP USERシステム権限, 18 DROP VALUES句

ALTER TABLE ... MODIFY PARTITION, 12, 12

DROP VIEW文, 18 DUALダミー表, 2.8.1, 9.9 DUMPファンクション, 7.8 DY日時書式要素, 2.4.2.2 DYNAMIC_SAMPLINGヒント, 2.6.4.11

E

EBCDICキャラクタ・セット, 2.2.3

エディショニング・ビュー, 17

エディション

コメント, 13

作成, 14

削除, 17

システム権限の付与, 18

デフォルトをPDBに設定, 11

データベースのデフォルトに設定, 10.2

セッションの設定, 11

埋込みSQL, 10.1.6

プリコンパイラのサポート, 10.1.6

EMPTY_BLOBファンクション, 7.8 EMPTY_CLOBファンクション, 7.8 ENABLE ALL TRIGGERS句

ALTER TABLE, 12

ENABLE句

ALTER INDEX, 10.2

ALTER TRIGGER, 13

CREATE TABLE, 16

ENABLE DISTRIBUTED RECOVERY句

ALTER SYSTEM, 11

ENABLE NOVALIDATE制約状態, 8 ENABLE PARALLEL DML句

ALTER SESSION, 11

ENABLE QUERY REWRITE句

ALTER MATERIALIZED VIEW, 11

CREATE MATERIALIZED VIEW, 15

ENABLE RESTRICTED SESSION句

ALTER SYSTEM, 11

ENABLE RESUMABLE句

ALTER SESSION, 11

ENABLE ROW MOVEMENT句

ALTER TABLE, 12

CREATE TABLE, 16, 16

ENABLE STORAGE IN ROW句

ALTER TABLE, 12

CREATE TABLE, 16

ENABLE TABLE LOCK句

ALTER TABLE, 12

ENABLE VALIDATE制約状態, 8 ENABLE_PARALLEL_DMLヒント, 2.6.4.12 エンコーディング・ファンクション, 7.2.14 暗号化, 16

表領域, 8, 16

暗号化キー

生成, 11

管理, 10.2

END BACKUP句

ALTER DATABASE, 10.2

ALTER DATABASE ... DATAFILE, 10.2

ALTER TABLESPACE, 12

エンタープライズ・ユーザー

データベース・ユーザーとしての接続の許可,13, 13

環境ファンクション, 7.2.16 等価性のテスト, 6.2 等価結合, 9.6.2

ディメンションの定義, 14

等価性のテスト, 6.14 エラー・ロギング

DELETE操作, 17

INSERT操作, 18

MERGE操作, 18

ERROR_ON_OVERLAP_TIMEセッション・パラメータ, 11 EXCEPTIONS INTO句

ALTER TABLE, 12

EXCHANGE PARTITION句

ALTER TABLE, 12, 12

EXCHANGE SUBPARTITION句

ALTER TABLE, 12, 12

パーティション交換

制限事項, 12

EXCLUDING NEW VALUES句

ALTER MATERIALIZED VIEW LOG, 11

CREATE MATERIALIZED VIEW LOG, 15

EXCLUSIVEロック・モード, 18 排他ロック

行ロック(TX), B.1

表ロック(TM), B.1

EXECUTE ANY CLASSシステム権限, 18 EXECUTE ANY INDEXTYPEシステム権限, 18 EXECUTE ANY LIBRARYシステム権限, 18 EXECUTE ANY OPERATORシステム権限, 18 EXECUTE ANY PROCEDUREシステム権限, 18 EXECUTE ANY PROGRAMシステム権限, 18 EXECUTE ANY TYPEシステム権限, 18 EXECUTEオブジェクト権限

ディレクトリ, 18

ライブラリ, 18

オブジェクト型, 18

演算子, 18

実行計画

判断, 18

アウトラインの削除, 17

保存, 15

EXEMPT ACCESS POLICYシステム権限, 18 EXEMPT REDACTION POLICYシステム権限, 18 EXISTS条件, 6.9.1, 6.13 EXISTSNODEファンクション, 7.8 EXPファンクション, 7.8 EXPLAIN PLAN文, 18 EXPLAIN WORK文, 18 明示的なデータ変換, 2.2.7.1, 2.2.7.4 式

CASE, 5.4

宣言型の変更, 7.8

列, 5.5

比較, 7.8

複合, 5.3

DUAL表の計算, 9.9

CURSOR, 5.6

日時, 5.7

SQL構文内, 5.1

時間隔, 5.9

リスト, 5.16

モデル, 5.11

オブジェクト・アクセス, 5.12

プレースホルダ, 5.13

スカラー副問合せ, 5.14

単純, 5.2

型コンストラクタ, 5.15

拡張ROWID

BASE 64, 2.1.3.1

直接利用できない, 2.1.3.1

拡張索引作成機能

例, F.1

EXTENT MANAGEMENT句

CREATE DATABASE, 14

CREATE TABLESPACE, 16, 16

EXTENT MANAGEMENT DICTIONARY句

CREATE TABLESPACE, 16

EXTENT MANAGEMENT LOCAL句

CREATE DATABASE, 14

エクステント

パーティションへの割当て, 12

サブパーティションへの割当て, 12

表への割当て, 12

インスタンスを使用したアクセス制限, 10.2

オブジェクトの最大エクステント数の指定, 8

オブジェクト作成時に割り当てられるエクステント数の指定, 8

オブジェクトの第1エクステントの指定, 8

サイズ増加の割合の指定, 8

オブジェクトの第2エクステントの指定, 8

外部ファンクション, 14, 15, 15 外部LOB, 2.1.1.19 外部プロシージャ, 15 外部表, 16

アクセス・ドライバ, 16

変更, 12

作成, 16

ORACLE_DATAPUMPアクセス・ドライバ, 16

ORACLE_LOADERアクセス・ドライバ, 16

制限事項, 16

外部ユーザー, 15, 17 EXTRACT(日時)ファンクション, 7.8 EXTRACT(XML)ファンクション, 7.8 EXTRACTVALUEファンクション, 7.8

F

FACTヒント, 2.6.4.13

FAILED_LOGIN_ATTEMPTSパラメータ

ALTER PROFILE, 11

CREATE PROFILE, 15

障害グループ

ディスク・グループ用の作成, 10.2, 14

高速リフレッシュ, 15 FEATURE_DETAILSファンクション, 7.8 FEATURE_IDファンクション, 7.8 FEATURE_SETファンクション, 7.8 FEATURE_VALUEファンクション, 7.8 ファイル

REDOログ・ファイル・グループとしての指定, 8

データファイルとしての指定, 8

一時ファイルとしての指定, 8

FIPS

準拠, C.12

フラグ付け, 11

FIRSTファンクション, 7.8 FIRST_ROWS(n)ヒント, 2.6.4.14 FIRST_VALUEファンクション, 7.8 FLAGGERセッション・パラメータ, 11 フラッシュ・キャッシュ, 8 FLASH_CACHEパラメータ

STORAGE句, 8

FLASHBACK ANY TABLEシステム権限, 18, 18, 18 FLASHBACK ARCHIVE ADMINISTERシステム権限, 18 FLASHBACK ARCHIVEオブジェクト権限, 18 フラッシュバック・データ・アーカイブ

作成, 14

削除, 17

変更, 10.2

権限, 18

表のための指定, 12, 16

FLASHBACK DATABASE文, 18 フラッシュバック問合せ, 19

疑似列, 3.3

挿入を指定した使用, 18, 19

FLASHBACK TABLE文, 18 浮動小数点条件, 6.3 浮動小数点数, 2.1.1.8

変換, 7.8, 7.8

NaNの処理, 7.8

FLOORファンクション, 7.8 FLUSH BUFFER_CACHE句

ALTER SYSTEM, 11

FLUSH GLOBAL CONTEXT句

ALTER SYSTEM, 11

FLUSH REDO句

ALTER SYSTEM, 11

FLUSH SHARED_POOL句

ALTER SYSTEM, 11

FM書式モデル修飾子, 2.4.3 FOR句

CREATE INDEXTYPE, 14

EXPLAIN PLAN, 18, 18

EXPLAIN WORK, 18

FOR UPDATE句

CREATE MATERIALIZED VIEW, 15

SELECT, 19, 19

FORCE ANY TRANSACTIONシステム権限, 18 FORCE句

COMMIT, 13

CREATE VIEW, 17

DISASSOCIATE STATISTICS, 17

DROP INDEX, 17

DROP INDEXTYPE, 17

DROP OPERATOR, 17

DROP TYPE, 18

REVOKE, 18

ROLLBACK, 18, 18

強制完全データベース・キャッシュ, 10.2 FORCE LOGGING句

ALTER DATABASE, 10.2

ALTER TABLESPACE, 12

CREATE CONTROLFILE, 14

CREATE DATABASE, 14

CREATE TABLESPACE, 16

FORCE PARALLEL DML句

ALTER SESSION, 11

FORCE TRANSACTIONシステム権限, 18 外部キー制約, 8 外部キー表

ROWID, 2.1.3.2

書式モデル, 2.4

戻り値の書式の変更, 2.4.3.1

日付, 2.4.2

変更, 2.4.2

デフォルト書式, 2.4.2

書式要素, 2.4.2.1

最大長, 2.4.2

修飾子, 2.4.3 数値, 2.4.1 数値, 要素, 2.4.1.1 指定, 2.4.3.1 XML, 2.4.5 書式

データベースからの戻り値, 2.4

データベースに格納された値, 2.4

日付および数値, 「書式モデル」を参照

空きリスト

表、パーティション、クラスタまたは索引の指定, 8

LOBに対する指定, 16

FREELIST GROUPSパラメータ

STORAGE句, 8

FREELISTSパラメータ

STORAGE句, 8

FREEPOOLSパラメータ

LOB記憶域, 16

FROM句

CREATE PLUGGABLE DATABASE, 15

問合せ, 9.6.3

FROM COLUMNS句

DISASSOCIATE STATISTICS, 17

FROM FUNCTIONS句

DISASSOCIATE STATISTICS, 17

FROM INDEXES句

DISASSOCIATE STATISTICS, 17

FROM INDEXTYPES句

DISASSOCIATE STATISTICS, 17

FROM PACKAGES句

DISASSOCIATE STATISTICS, 17

FROM TYPES句

DISASSOCIATE STATISTICS, 17

FROM_TZファンクション, 7.8 FULLヒント, 2.6.4.15 全索引, 14 完全な外部結合, 19 ファンクション式

組込み, 5.8

ユーザー定義, 5.8

ファンクション索引, 14

作成, 14

使用禁止, 10.2, 10.2

使用可能, 10.2, 10.2

リフレッシュ, 10.2, 10.2

ファンクション

3GL, コール, 15

統計タイプの関連付け, 13

実行時のコンパイルの防止, 10.2

組込み

式, 5.8

コール, 13 宣言の変更, 14 定義の変更, 14 索引の定義, 14 統計タイプの関連付けの解除, 17 実行, 13 外部, 14, 15, 15 逆分散, 7.8, 7.8 COMMITまたはROLLBACK文の発行, 11 線形回帰, 7.8 ネーミング規則, 2.8.1 OLAP, 7.7 無効なファンクションの再コンパイル, 10.2 再作成, 14, 14 データベースからの削除, 17 統計情報, デフォルト・コストの割当て, 13 統計情報, デフォルト選択性の定義, 13 ストアド, 14 戻り値の格納, 13 シノニム, 16 ユーザー定義, 7.8

式, 5.8

XML, 7.2.12 「SQLファンクション」を参照 FUNCTIONS句

ASSOCIATE STATISTICS, 13, 13

DISASSOCIATE STATISTICS, 17

FX書式モデル修飾子, 2.4.3

G

GATHER_OPTIMIZER_STATISTICSヒント, 2.6.4.16

一般的な比較ファンクション, 7.2.6

general_recovery句

ALTER DATABASE, 10.2, 10.2

ジオイメージング, 2.1.9 グローバル・アプリケーション・コンテキスト情報

フラッシュ, 11

グローバル索引。「グローバル・パーティション索引」を参照 GLOBALパラメータ

CREATE SEQUENCE, 15

GLOBAL PARTITION BY HASH句

CREATE INDEX, 14

GLOBAL PARTITION BY RANGE句

CREATE INDEX, 14, 14

GLOBAL QUERY REWRITEシステム権限, 18 グローバル順序, 15 GLOBAL TEMPORARY句

CREATE TABLE, 16

グローバル・ユーザー, 15, 17 GLOBAL_TOPIC_ENABLEDシステム・パラメータ, 11 グローバル・パーティション索引, 14, 14 GRANT ANY OBJECT PRIVILEGEシステム権限, 18 GRANT ANY PRIVILEGEシステム権限, 18 GRANT ANY ROLEシステム権限, 18 GRANT CONNECT THROUGH句

ALTER USER, 13, 13, 13

GRANT文

ロック, B.2.2

GRAPHICデータ型

DB2, 2.1.4

SQL/DS, 2.1.4

以上/以下のテスト, 6.2 大のテスト, 6.2 GREATESTファンクション, 7.8 GROUP BY句

CUBE拡張, 19

重複するグループ化の識別, 7.8

SELECTおよび副問合せ, 19, 19

ROLLUP拡張, 19

グループ比較条件, 6.2.2 桁区切り

指定, 2.4.1.1

GROUP_IDファンクション, 7.8 GROUPINGファンクション, 7.8 グルーピング・セット, 19 GROUPING SETS句

SELECTおよび副問合せ, 19

GROUPING_IDファンクション, 7.8 グループ化

重複の排除, 7.8

GUARD ALL句

ALTER DATABASE, 10.2

GUARD句

ALTER DATABASE, 10.2

上書き, 11

GUARD NONE句

ALTER DATABASE, 10.2

GUARD STANDBY句

ALTER DATABASE, 10.2

H

ハッシュ・クラスタ

作成, 14

レンジ・パーティション, 14

単一表の作成, 14

ハッシュ・ファンクションの指定, 14

HASHヒント, 2.6.4.17 HASH IS句

CREATE CLUSTER, 14

ハッシュ・パーティション化句

CREATE TABLE, 16, 16

ハッシュ・パーティション

追加, 12

結合, 12

HASHKEYS句

CREATE CLUSTER, 14

HAVING条件

GROUP BY句, 19

ヒープ構成表

作成, 16

16進数値

戻り値, 2.4.1.1

HEXTORAWファンクション, 7.8 階層ファンクション, 7.2.10 階層問合せ, 9.3, 19

子である行, 3.1.3, 9.3

図による説明, 3.1.3

リーフ行, 3.1.3

演算子, 4.4

CONNECT_BY_ROOT, 4.4.2

PRIOR, 4.4.1

順序付け, 19 親である行, 3.1.3, 9.3 疑似列, 3.1

CONNECT_BY_ISCYCLE, 3.1.1

CONNECT_BY_ISLEAF, 3.1.2

LEVEL, 3.1.3

ルートおよびノードの値の検出, 7.8 階層問合せ句

SELECTおよび副問合せ, 19

階層

ディメンションの追加, 10.2

ディメンションからの削除, 10.2

ディメンションの定義, 14

HIERARCHY句

CREATE DIMENSION, 14, 14

最高水位標

クラスタ, 10.2

索引, 10.2

表, 12, 13

ヒント, 9.2

ALL_ROWS, 2.6.4.1

APPEND, 2.6.4.2

APPEND_VALUES, 2.6.4.3

CACHE, 2.6.4.4

CLUSTER, 2.6.4.6

CLUSTERING, 2.6.4.7

CURSOR_SHARING_EXACT, 2.6.4.8

DISABLE_PARALLEL_DML, 2.6.4.9

DRIVING_SITE, 2.6.4.10

DYNAMIC_SAMPLING, 2.6.4.11

ENABLE_PARALLEL_DML, 2.6.4.12

FACT, 2.6.4.13

FIRST_ROWS(n), 2.6.4.14

FULL, 2.6.4.15

GATHER_OPTIMIZER_STATISTICS, 2.6.4.16

HASH, 2.6.4.17

SQL文, 2.6.3

INDEX, 2.6.4.19

INDEX_ASC, 2.6.4.20

INDEX_COMBINE, 2.6.4.21

INDEX_DESC, 2.6.4.22

INDEX_FFS, 2.6.4.23

INDEX_JOIN, 2.6.4.24

INDEX_SS, 2.6.4.25

INDEX_SS_ASC, 2.6.4.26

INDEX_SS_DESC, 2.6.4.27

INMEMORY, 2.6.4.28

INMEMORY_PRUNING, 2.6.4.29

LEADING, 2.6.4.30

位置構文, 2.6.3

MERGE, 2.6.4.31

MODEL_MIN_ANALYSIS, 2.6.4.32

MONITOR, 2.6.4.33

NO_CLUSTERING, 2.6.4.37

NO_EXPAND, 2.6.4.38

NO_FACT, 2.6.4.39

NO_GATHER_OPTIMIZER_STATISTICS, 2.6.4.40

NO_INDEX, 2.6.4.41

NO_INDEX_FFS, 2.6.4.42

NO_INDEX_SS, 2.6.4.43

NO_INMEMORY, 2.6.4.44

NO_INMEMORY_PRUNING, 2.6.4.45

NO_MERGE, 2.6.4.46

NO_MONITOR, 2.6.4.47

NO_PARALLEL, 2.6.4.49

NO_PARALLEL_INDEX, 2.6.4.51

NO_PQ_CONCURRENT_UNION, 2.6.4.53

NO_PQ_SKEW, 2.6.4.54

NO_PUSH_PRED, 2.6.4.55

NO_PUSH_SUBQ, 2.6.4.56

NO_PX_JOIN_FILTER, 2.6.4.57

NO_QUERY_TRANSFORMATION, 2.6.4.58

NO_RESULT_CACHE, 2.6.4.59

NO_REWRITE, 2.6.4.60

NO_STAR_TRANSFORMATION, 2.6.4.62

NO_STATEMENT_QUEUING, 2.6.4.63

NO_UNNEST, 2.6.4.64

NO_USE_CUBE, 2.6.4.65

NO_USE_HASH, 2.6.4.66

NO_USE_MERGE, 2.6.4.67

NO_USE_NL, 2.6.4.68

NO_XML_QUERY_REWRITE, 2.6.4.69

NO_XMLINDEX_REWRITE, 2.6.4.70

NO_ZONEMAP, 2.6.4.71

NOAPPEND, 2.6.4.35

NOCACHE, 2.6.4.36

NOPARALLEL, 2.6.4.49

NOPARALLEL_INDEX, 2.6.4.51

NOREWRITE, 2.6.4.60

OPT_PARAM, 2.6.4.72

ORDERED, 2.6.4.73

PARALLEL, 2.6.4.74

PARALLEL_INDEX, 2.6.4.75

オプティマイザの引渡し, 19

PQ_CONCURRENT_UNION, 2.6.4.76

PQ_DISTRIBUTE, 2.6.4.77

PQ_FILTER, 2.6.4.78

PQ_SKEW, 2.6.4.79

PUSH_PRED, 2.6.4.80

PUSH_SUBQ, 2.6.4.81

PX_JOIN_FILTER, 2.6.4.82

QB_NAME, 2.6.4.83

REWRITE, 2.6.4.86

問合せブロックの指定, 2.6.3

STAR_TRANSFORMATION, 2.6.4.87

STATEMENT_QUEUING, 2.6.4.88

構文, 2.6.3

UNNEST, 2.6.4.89

USE_CONCAT, 2.6.4.90

USE_CUBE, 2.6.4.91

USE_HASH, 2.6.4.92

USE_MERGE, 2.6.4.93

USE_NL, 2.6.4.94

USE_NL_WITH_INDEX, 2.6.4.95

ヒストグラム

等幅の作成, 7.8

ハイブリッド列圧縮, 16

I

IDENTIFIED BY句

CREATE DATABASE LINK, 14

SET ROLE, 19

ALTER ROLE。「CREATE ROLE」を参照

IDENTIFIED EXTERNALLY句

CREATE ROLE, 15

CREATE USER, 17

ALTER ROLE。「CREATE ROLE」を参照

ALTER USER。「CREATE USER」を参照

IDENTIFIED GLOBALLY句

CREATE ROLE, 15

CREATE USER, 17

ALTER ROLE。「CREATE ROLE」を参照

識別子ファンクション, 7.2.16 ID列, 16 IDLE_TIMEパラメータ

ALTER PROFILE, 11

IEEE754

浮動小数点算術, 2.1.1.8.2

Oracleの規格準拠, 2.1.1.8.2

IGNORE_ROW_ON_DUPKEY_INDEXヒント, 2.6.4.18 IMMEDIATE句

SET CONSTRAINTS, 19

暗黙的なデータ変換, 2.2.7.1, 2.2.7.2, 2.2.7.3 IN条件, 6.14 INCLUDING CONTENTS句

DROP TABLESPACE, 18

INCLUDING DATAFILES句

ALTER DATABASE TEMPFILE DROP句, 10.2

INCLUDING NEW VALUES句

ALTER MATERIALIZED VIEW LOG, 11

CREATE MATERIALIZED VIEW LOG, 15

INCLUDING TABLES句

DROP CLUSTER, 17

不完全なオブジェクト型, 17

作成, 17

INCREMENT BY句

ALTER SEQUENCE。「CREATE SEQUENCE」を参照

INCREMENT BYパラメータ

CREATE SEQUENCE, 15

増分

ブロック・チェンジ・トラッキング, 10.2

INDEX句

ANALYZE, 13

CREATE CLUSTER, 14

INDEXヒント, 2.6.4.19 索引キー

圧縮, 10.2

INDEXオブジェクト権限

表, 18

索引パーティション

サブパーティションの作成, 14

索引サブパーティション, 14 INDEX_ASCヒント, 2.6.4.20 INDEX_COMBINEヒント, 2.6.4.21 INDEX_DESCヒント, 2.6.4.22 INDEX_FFSヒント, 2.6.4.23 INDEX_JOINヒント, 2.6.4.24 INDEX_SSヒント, 2.6.4.25 INDEX_SS_ASCヒント, 2.6.4.26 INDEX_SS_DESCヒント, 2.6.4.27 索引クラスタ

作成, 14

索引, 10.2

拡張索引圧縮, 14

拡張索引圧縮, 有効化, 10.2

新規エクステントの割当て, 10.2

アプリケーション固有, 14

昇順, 14

索引に基づく, 14

ビットマップ, 14

ビットマップ結合, 14

Bツリー, 14

属性の変更, 10.2

並列性の変更, 10.2

統計情報の収集, 13

作成, 14

使用可能または使用禁止として作成, 14

クラスタへの作成, 14

表, 14

未使用領域の解放, 10.2

降順, 14

クエリー・リライト, 14

ファンクション索引, 14

ダイレクト・パス・インサートのログの記録, 10.2 ドメイン, 14, 14, 14 ドメイン例, F.1 索引パーティションの削除, 17 例, 14 完全, 14 高速全体スキャン, 2.6.4.23 ファンクション, 14

作成, 14

グローバル・パーティション索引の作成, 14 グローバル・パーティション, 14, 14

更新, 12

システム権限の付与, 18 オプティマイザによる参照不可, 10.2, 14 ビットマップ結合, 14 ローカル・ドメイン, 14 ローカル・パーティション, 14 再構築操作のログの記録, 10.2 USABLEまたはUNUSABLEとしてマーク付け, 10.2 ブロック内容のマージ, 10.2 索引ブロックの内容のマージ, 10.2 索引パーティション・ブロックの内容のマージ, 10.2 属性の変更, 10.2 移動, 10.2 クラスタ, 14 コンポジット・パーティション表への作成, 14 ハッシュ・パーティション表

作成, 14

索引構成表, 14 リスト・パーティション表

作成, 14

ネストした表の記憶表, 14 パーティション表, 14 レンジ・パーティション表, 14, 14, 14 レンジ・パーティション表への作成, 14 スカラー型オブジェクト属性, 14 表の列, 14 XMLType表, 14 オンライン, 14 作成のパラレル化, 14 部分, 14 パーティション, 2.9.4, 14

ユーザー定義, 14

パーティション化, 14 パーティション, 14

ハッシュ・パーティションの追加, 10.2

新規の追加, 10.2

デフォルト属性の変更, 10.2

物理属性の変更, 10.2

記憶特性の変更, 10.2

ハッシュ・パーティションの結合, 10.2

未使用領域の解放, 10.2

削除, 10.2

UNUSABLEのマーク付け, 10.2, 12

実特性の変更, 10.2

使用禁止化, 10.2

再構築, 10.2

使用禁止のパーティションの再構築, 12

再作成, 10.2

削除, 10.2

名前の変更, 10.2

表領域の指定, 10.2, 10.2

分割, 10.2, 10.2

接頭辞圧縮, 14 接頭辞圧縮, 有効化, 10.2 使用禁止化, 10.2 ごみ箱からの消去, 18 再構築, 10.2 再作成, 10.2 データベースからの削除, 17 名前の変更, 10.2, 10.2 逆, 10.2, 10.2, 10.2, 14 表領域の指定, 10.2, 10.2 使用の統計情報, 10.2 サブパーティション

エクステントの割当て, 10.2

デフォルト属性の変更, 10.2

物理属性の変更, 10.2

記憶特性の変更, 10.2

未使用領域の解放, 10.2, 10.2

UNUSABLEのマーク付け, 10.2

変更, 10.2

移動, 10.2

使用禁止化, 10.2

再構築, 10.2

再作成, 10.2

名前の変更, 10.2

表領域の指定, 10.2, 10.2

表領域, 14 一意, 14 未ソート, 14 制約の適用, 12, 16 構造の検証, 13 INDEXES句

ASSOCIATE STATISTICS, 13, 13

DISASSOCIATE STATISTICS, 17

索引付けプロパティ, 16 索引構成表

ビットマップ索引の作成, 16

作成, 16

マッピング表, 12

作成, 16

移動, 12

索引ブロックの内容のマージ, 12 変更, 12, 12 移動, 12 オーバーフロー・セグメント

記憶域の指定, 12, 16

パーティション化, 2次索引の更新, 10.2 PCT_ACCESS_DIRECT統計情報, 13 主キー索引

結合, 12

再構築, 12 ROWID, 2.1.3.2 2次索引の更新, 10.2 INDEXTYPE句

CREATE INDEX, 14, 14

索引タイプ

演算子の追加, 10.2

変更, 10.2

統計タイプの関連付け, 13

実装タイプの変更, 10.2

コメント, 13

作成, 14

統計タイプの関連付けの解除, 17, 17

削除ルーチンの起動, 17

システム権限の付与, 18

索引タイプに基づく索引, 14

インスタンス, 14

データベースからの削除, 17

INDEXTYPES句

ASSOCIATE STATISTICS, 13, 13

DISASSOCIATE STATISTICS, 17

インダウト・トランザクション

強制実行, 13

強制コミット, 13

ロールバックの強制, 18, 18

ロールバック, 18

不等性のテスト, 6.2 INHERIT ANY PRIVILEGESシステム権限, 18 INHERIT PRIVILEGESオブジェクト権限

ユーザー, 18

INITCAPファンクション, 7.8 INITIALパラメータ

STORAGE句, 8

初期化パラメータ

セッション設定の変更, 11

ALTER SESSIONを使用した設定, 11

INITIALIZED EXTERNALLY句

CREATE CONTEXT, 14

INITIALIZED GLOBALLY句

CREATE CONTEXT, 14

INITIALLY DEFERRED句

制約, 8

INITIALLY IMMEDIATE句

制約, 8

INITRANSパラメータ

ALTER CLUSTER, 10.2

ALTER INDEX, 10.2

ALTER MATERIALIZED VIEW LOG, 11

ALTER TABLE, 12

CREATE TABLE, 8

CREATE INDEX。「CREATE TABLE」を参照

表内制約

ALTER TABLE, 12

CREATE TABLE, 16

インライン・ビュー, 9.7

LATERAL, 19

INMEMORYヒント, 2.6.4.28 INMEMORY_PRUNINGヒント, 2.6.4.29 内部結合, 9.6.5, 19 内部N番のレポート, 7.8 INSERT

ダイレクト・パスと従来型, 18

INSERT ANY CUBE DIMENSIONシステム権限, 18 INSERT ANY MEASURE FOLDERシステム権限, 18 INSERT ANY TABLEシステム権限, 18 INSERT句

MERGE, 18

INSERTオブジェクト権限

表, 18

ビュー, 18

OLAPキューブ・ディメンション, 18

OLAPメジャー・フォルダ, 18

INSERT文, 18

append, 2.6.4.2, 2.6.4.3

エラー・ロギング, 18

INSERTCHILDXMLファンクション, 7.8 INSERTCHILDXMLAFTERファンクション, 7.8 INSERTCHILDXMLBEFOREファンクション, 7.8 インサート

同時の更新, 18

条件, 18

従来型, 18

ダイレクト・パス, 18

マルチテーブル, 18, 18

例, 18

シングルテーブル, 18 MERGEの使用, 18 INSERTXMLAFTERファンクション, 7.8 INSERTXMLBEFOREファンクション, 7.8 インスタンス・リカバリ

中断後の継続, 10.2

INSTANCEセッション・パラメータ, 11 インスタンス

索引エクステントの使用可能化, 10.2

パラメータの設定, 11

INSTRファンクション, 7.8 INSTR2ファンクション, 7.8 INSTR4ファンクション, 7.8 INSTRBファンクション, 7.8 INSTRCファンクション, 7.8 整数

一意の値の生成, 15

SQL構文内, 2.3.2.1

精度, 2.3.2.1

構文, 2.3.2.1

内部LOB, 2.1.1.19 INTERSECT集合演算子, 4.5, 19 期間

算術, 2.1.1.16

データ型, 2.1.1.9

リテラル, 2.3.4

期間条件, 6.12 INTERVAL DAY TO SECONDデータ型, 2.1.1.15 期間式, 5.9 時間隔パーティション, 12, 16

時間隔の変更, 12

INTERVAL YEAR TO MONTHデータ型, 2.1.1.14 INTO句

EXPLAIN PLAN, 18

INSERT, 18

INVALIDATE GLOBAL INDEXES句

ALTER TABLE, 12

逆分散ファンクション, 7.8, 7.8 実行者権限

Javaクラスについての変更, 10.2

Javaクラスの定義, 14, 14

実行者権限ビュー, 17 IS [NOT] EMPTY条件, 6.6.2 IS [NOT] JSON条件, 6.10.1 IS [NOT] NULL条件, 6.8 IS ANY条件, 6.5.1 IS OF type条件, 6.15 IS PRESENT条件, 6.5.2 ISO。「ISO(国際標準化機構)」を参照, C

規格, 1.2, 1.2, C.1

ISOLATION_LEVELセッション・パラメータ, 11 ITERATION_NUMBERファンクション, 7.8

J

Java

クラス

作成, 14, 14

削除, 17

変換, 10.2, 14

Javaソース・スキーマ・オブジェクト

作成, 14

リソース

作成, 14, 14

削除, 17

スキーマ・オブジェクト

名前解決, 14

ソース

コンパイル, 10.2, 14

作成, 14

削除, 17

ジョブ・スケジューラ・オブジェクト権限, 18 JOIN句

CREATE DIMENSION, 14

JOIN KEY句

ALTER DIMENSION, 10.2

CREATE DIMENSION, 14

結合ビュー

例, 17

更新可能化, 17

変更, 17, 18, 19

結合, 9.6

アンチ結合, 9.6.7

条件

定義, 9.6.1

クロス, 19 等価結合, 9.6.2 完全な外部結合, 19 内部, 9.6.5, 19 左側外部結合, 19 自然, 19 外部, 9.6.6

データの稠密化, 9.6.6

グループ化された表, 9.6.6

制限事項, 9.6.6

パラレル, 2.6.4.77 右側外部結合, 19 自己, 9.6.3 セミ結合, 9.6.8 結合条件のない, 9.6.4 JSON

条件, 6.10

JSON_EXISTS条件, 6.10.2 JSON_QUERYファンクション, 7.8 JSON_TABLEファンクション, 7.8 JSON_TEXTCONTAINS条件, 6.10.3 JSON_VALUEファンクション, 7.8 ユリウス日, 2.1.1.10.1

K

KEEP DATAFILES句

DROP PLUGGABLE DATABASE, 17

KEEP DATE TIMEシステム権限, 18 KEEPキーワード

FIRSTファンクション, 7.8

LASTファンクション, 7.8

集計ファンクションとの使用, 7.3

KEEPパラメータ

CREATE SEQUENCE, 15

KEEP SEQUENCEオブジェクト権限

順序, 18

KEEP SYSGUIDシステム権限, 18 キー管理フレームワーク

システム権限の付与, 18

管理, 10.2

キー保存表, 17 キーの反復の排除, 10.2 キーワード, 2.8.1

オブジェクト名, 2.8.1

オプション, A.1.2

必須, A.1.1

KILL SESSION句

ALTER SYSTEM, 11

L

LAGファンクション, 7.8

ラージ・オブジェクト・ファンクション, 7.2.8

ラージ・オブジェクト。「LOBデータ型」を参照, 2.1.1.19

LASTファンクション, 7.8

LAST_DAYファンクション, 7.8

LAST_VALUEファンクション, 7.8

LATERALインライン・ビュー, 19

LEADファンクション, 7.8

LEADINGヒント, 2.6.4.30

LEASTファンクション, 7.8

左側外部結合, 19

LENGTHファンクション, 7.8

LENGTH2ファンクション, 7.8

LENGTH4ファンクション, 7.8

LENGTHBファンクション, 7.8

LENGTHCファンクション, 7.8

小のテスト, 6.2

LEVEL句

ALTER DIMENSION, 10.2

CREATE DIMENSION, 14, 14

レベル列

デフォルト値の指定, 16

LEVEL疑似列, 3.1.3, 19 レベル

ディメンションの追加, 10.2

ディメンションからの削除, 10.2

ディメンションの定義, 14

ライブラリ

作成, 15

システム権限の付与, 18

再作成, 15

データベースからの削除, 17

ライブラリ・ユニット。「Javaスキーマ・オブジェクト」を参照 LIKE条件, 6.7.1 線形回帰ファンクション, 7.8 LIST CHAINED ROWS句

ANALYZE, 13

リスト・パーティション化

デフォルト・パーティションの追加, 12

パーティションの追加, 12

値の追加, 12, 12

デフォルト・パーティションの作成, 16

パーティションの作成, 16

値の削除, 12, 12

デフォルト・パーティションとデフォルト以外のパーティションのマージ, 12

デフォルト・パーティションの分割, 12

リスト・サブパーティション

追加, 12

LISTAGGファンクション, 7.8 リスナー

登録, 11

リテラル, 2.3

日時, 2.3.3

時間隔, 2.3.4

LNファンクション, 7.8 LNNVLファンクション, 7.8 LOB列

追加, 12

圧縮, 16

LONG列からの作成, 2.1.1.9, 12

重複除外, 16

プロパティの定義

マテリアライズド・ビュー, 15

暗号化, 16 変更, 12 記憶域の変更, 12 結合の制限, 9.6.1 制限事項, 2.1.1.19 マテリアライズド・ビューの記憶特性, 11 LOB記憶域句

パーティション, 12

ALTER MATERIALIZED VIEW, 11, 11

ALTER TABLE, 12, 12

CREATE MATERIALIZED VIEW, 15, 15, 15, 15

CREATE TABLE, 16, 16

LOB

属性の初期化, 2.1.1.19

列

LONGとLONG RAWの違い, 2.1.1.19

移入, 2.1.1.19

外部, 2.1.1.19 内部, 2.1.1.19 ロケータ, 2.1.1.19 ロギング属性, 16 物理属性の変更, 12 処理されるバイト数, 16 旧バージョンの保存, 16, 16 キャッシュへの値の保存, 12, 16 ディレクトリの指定, 14 記憶域

属性, 16

特性, 8

インライン, 16

表領域

定義, 16

LOCAL句

CREATE INDEX, 14, 14

ローカル・ユーザー, 15, 17 ロケール非依存, 2.4.2.1.2 ローカル管理表領域

変更, 12

記憶域属性, 8

ローカル・パーティション索引, 14 LOCALTIMESTAMPファンクション, 7.8 位置の透過性, 16 LOCK ANY TABLEシステム権限, 18 LOCK TABLE文, 18 自動ロックの無効化, 18 ロック

データ, B.1

ディクショナリ, B.2

行(TX), B.1

表(TM), B.1

ログ・データ

更新操作中の収集, 10.2

logfile_clauses

ALTER DATABASE, 10.2

ログ・ファイル

追加, 10.2

削除, 10.2

変更, 10.2

登録, 10.2

名前の変更, 10.2

データベースでの指定, 14

LOGファンクション, 7.8 ログ・グループ

追加, 12

削除, 12

LOGFILE句

CREATE DATABASE, 14

LOGFILE GROUP句

CREATE CONTROLFILE, 14

ロギング

REDOログ・サイズ, 8

最小限度の指定, 8

サプリメンタル

削除, 10.2

補助ログ・グループの追加, 12 補助ログ・グループの削除, 12 LOGGING句

ALTER INDEX, 10.2

ALTER MATERIALIZED VIEW, 11

ALTER MATERIALIZED VIEW LOG, 11

ALTER TABLE, 12

ALTER TABLESPACE, 12

CREATE MATERIALIZED VIEW, 15

CREATE MATERIALIZED VIEW LOG, 15

CREATE TABLE, 16

CREATE TABLESPACE, 16

論理条件, 6.4 ロジカル・スタンバイ・データベース

異常終了, 10.2, 10.2

アクティブ, 10.2

停止, 10.2, 10.2

LOGICAL_READS_PER_CALLパラメータ

ALTER PROFILE, 11

LOGICAL_READS_PER_SESSIONパラメータ

ALTER PROFILE, 11

ALTER RESOURCE COST, 11

LogMiner

システム権限の付与, 18

サプリメンタル・ロギング, 12, 16

LOGMININGシステム権限, 18 LONG列

ドメイン索引, 12

LOBへの変換, 2.1.1.9, 12

制限事項, 2.1.1.9

テキスト文字列の格納, 2.1.1.9

ビュー定義の格納, 2.1.1.9

参照先, 2.1.1.9

LONGデータ型, 2.1.1.9

トリガー内, 2.1.1.9

LONG RAWデータ型, 2.1.1.19

CHARデータからの変換, 2.1.1.19

LONG VARGRAPHICデータ型

DB2, 2.1.4, 2.1.4

SQL/DS, 2.1.4

LOWERファンクション, 7.8 LPADファンクション, 7.8 LTRIMファンクション, 7.8

M

MAKE_REFファンクション, 7.8

MANAGE SCHEDULERシステム権限, 18

MANAGE TABLESPACEシステム権限, 18

管理リカバリ

データベース, 10.2

管理スタンバイ・リカバリ

バックグラウンド・プロセス, 10.2

フィジカル・スタンバイからロジカル・スタンバイの作成, 10.2

遅延の上書き, 10.2

制御の復帰, 10.2, 10.2

既存の終了, 10.2, 10.2

MANAGED STANDBY RECOVERY句

ALTER DATABASE, 10.2, 10.2

MAPPING TABLE句

ALTER TABLE, 12, 12

マッピング表

索引構成表, 12, 16

変更, 12

マスター・データベース, 15 マスター表, 15 MATCHES条件, 6.1 MATCHES演算子, 4.1 マテリアライズド結合ビュー, 15 マテリアライズド・ビュー・ログ, 15

作成, 15

新しい値の除外, 11

ロギングの変更, 11

オブジェクトIDに基づく, 11

作成のパラレル化, 15

パーティション属性の変更, 11

パーティション, 15

物理属性

変更, 11

指定, 15

パージ, 11, 15 リフレッシュ, 11, 15 データベースからの削除, 17 高速リフレッシュに必要, 15 同期リフレッシュに必要, 15 ROWIDに基づく, 11 新しい値の保存, 11 古い値の保存, 15 ステージング・ログ, 15 記憶域属性

指定, 15

マテリアライズド・ビュー, 15

更新可能化, 15

ROWIDベースから主キー・ベースへの変更, 11

主キー・ベースへの変更, 11

完全リフレッシュ, 11, 15

圧縮, 11, 15

制約, 8

作成, 15

コメントの作成, 13

並列度, 11, 11

作成時, 15

クエリー・リライトの使用可能化と使用禁止化, 15 例, 15, 15 高速リフレッシュ, 11, 15, 15 レプリケーション, 15, 15 強制リフレッシュ, 11 システム権限の付与, 18 索引特性

変更, 11

メンテナンスする索引, 15 結合, 15 LOB記憶域属性, 11 ロギングの変更, 11 マスター表の削除, 17 オブジェクト型マテリアライズド・ビューの作成, 15 パーティション, 11

圧縮, 11, 15

物理属性, 15

変更, 11, 11

主キー, 15

マスター表の値の記録, 11

クエリー・リライト

資格, 8

使用可能化および使用禁止化, 11

リフレッシュ中の再作成, 11 リフレッシュ, 10.2

マスター表のDML後, 11, 15

モードの変更, 11

次のCOMMITでの, 11, 15

信頼できる制約の使用, 15

リフレッシュ日時の変更, 11 リフレッシュ, 10.2 データベースからの削除, 17 有効範囲の制限, 15 データの取出し, 19 再検証, 11 ROWID, 15 ROWIDの値

マスター表への記録, 11

キャッシュへのブロックの保存, 11 記憶域属性, 15

変更, 11, 11

副問合せ, 15 デフォルトの索引の作成の抑制, 15 シノニム, 16 移入, 15 MAXファンクション, 7.8 MAXDATAFILESパラメータ

CREATE CONTROLFILE, 14

CREATE DATABASE, 14

MAXEXTENTSパラメータ

STORAGE句, 8

MAXINSTANCESパラメータ

CREATE CONTROLFILE, 14

CREATE DATABASE, 14

MAXLOGFILESパラメータ

CREATE CONTROLFILE, 14

CREATE DATABASE, 14

MAXLOGHISTORYパラメータ

CREATE CONTROLFILE, 14

CREATE DATABASE, 14

MAXLOGMEMBERSパラメータ

CREATE CONTROLFILE, 14

CREATE DATABASE, 14

MAXSIZE句

ALTER DATABASE, 10.2

MAXTRANSパラメータ

physical_attributes_clause, 8

MAXVALUEパラメータ

CREATE SEQUENCE, 15

ALTER SEQUENCE。「CREATE SEQUENCE」を参照

メディア・リカバリ

起動時の回避, 10.2

設計, 10.2

使用禁止, 10.2

指定のREDOログ, 10.2

データファイル, 10.2

データベース, 10.2

スタンバイ・データベース, 10.2

表領域, 10.2

使用中の実行, 10.2

準備, 10.2, 10.2

制限事項, 10.2

長期スタンバイ・リカバリ, 10.2

MEDIANファンクション, 7.8 中央値の値, 7.8 MEMBER条件, 6.6.3 メンバーシップ条件, 6.6.3, 6.14 MERGE ANY VIEWシステム権限, 18 MERGEヒント, 2.6.4.31 MERGE PARTITIONS句

ALTER TABLE, 12

MERGE文, 18

削除, 18

エラー・ロギング, 18

挿入, 18

更新, 18

ビューに対するMERGE VIEWオブジェクト権限, 18 merge_insert_clause

MERGE, 18

移行行

リスト, 13

クラスタ, 13

MINファンクション, 7.8 MINEXTENTSパラメータ

STORAGE句, 8

MINIMIZE RECORDS PER BLOCK句

ALTER TABLE, 12

MINIMUM EXTENT句

ALTER TABLESPACE, 12

CREATE TABLESPACE, 16

マイニング・モデル

監査, 13

コメント, 13

MINUS集合演算子, 4.5, 19 MINVALUEパラメータ

CREATE SEQUENCE, 15

ALTER SEQUENCE。「CREATE SEQUENCE」を参照

MODファンクション, 7.8 MODE句

LOCK TABLE, 18

MODEL句

SELECT, 19, 19

モデル条件, 6.5

IS ANY, 6.5.1

IS PRESENT, 6.5.2

モデル式, 5.11 モデル・ファンクション, 7.6 MODEL_MIN_ANALYSISヒント, 2.6.4.32 MODIFY句

ALTER TABLE, 12

MODIFY CONSTRAINT句

ALTER TABLE, 12, 12

ALTER VIEW, 13

MODIFY DEFAULT ATTRIBUTES句

ALTER INDEX, 10.2, 10.2

ALTER TABLE, 12

MODIFY LOB記憶域句

ALTER MATERIALIZED VIEW, 11, 11

ALTER TABLE, 12

MODIFY NESTED TABLE句

ALTER TABLE, 12, 12

MODIFY PARTITION句

ALTER INDEX, 10.2

ALTER MATERIALIZED VIEW, 11

ALTER TABLE, 12

MODIFY scoped_table_ref_constraint句

ALTER MATERIALIZED VIEW, 11

MODIFY SUBPARTITION句

ALTER INDEX, 10.2, 10.2

MODIFY VARRAY句

ALTER TABLE, 12, 12

MON日時書式要素, 2.4.2.2 MONITORヒント, 2.6.4.33 MONITORING USAGE句

ALTER INDEX, 10.2

MONTH日時書式要素, 2.4.2.2 MONTHS_BETWEENファンクション, 7.8 MOUNT句

ALTER DATABASE, 10.2

MOVE句

ALTER TABLE, 12, 12

CREATE PLUGGABLE DATABASE, 15

MOVE ONLINE句

ALTER TABLE, 12

MOVE SUBPARTITION句

ALTER TABLE, 12

マルチレベル・コレクション, 16 多重集合条件, 6.6 MULTISET EXCEPT演算子, 4.6.1 MULTISET INTERSECT演算子, 4.6.2 MULTISETキーワード

CASTファンクション, 7.8

MULTISET演算子, 4.6

MULTISET EXCEPT, 4.6.1

MULTISET INTERSECT, 4.6.2

MULTISET UNION, 4.6.3

MULTISET UNION演算子, 4.6.3 マルチテーブル・インサート, 18

条件, 18

例, 18

無条件, 18

マルチスレッド・サーバー。「共有サーバー」を参照

プロセス

追加プロセスの作成, 11

終了, 11

システム・パラメータ, 11

N

NAME句

SET TRANSACTION, 19

NAMED句

CREATE JAVA, 14

ネームスペース

オブジェクトのネーミング規則, 2.8.1

データベース, 2.8.1

非スキーマ・オブジェクト, 2.8.1

スキーマ・オブジェクト, 2.8.1

NANVLファンクション, 7.8 各国語キャラクタ・セット

変更, 10.2

固定幅と可変幅, 2.1.1.5

マルチバイト・キャラクタ・データ, 2.1.1.23

マルチバイト・キャラクタ・セット, 2.1.1.5

可変長文字列, 2.1.1.5

NATIONAL CHARACTER SETパラメータ

CREATE DATABASE, 14

自然結合, 19 NCHARデータ型, 2.1.1.2 NCHRファンクション, 7.8 NCLOBデータ型, 2.1.1.23

トランザクションのサポート, 2.1.1.23

ネストした副問合せ, 9.7 NESTED TABLE句

ALTER TABLE, 12, 12

CREATE TABLE, 16, 16

ネストした表, 2.1.5.4, 6.6.1, 7.8, 7.8

戻り値の変更, 12

組合せ, 4.6

VARRAYとの比較, 2.2.5

比較規則, 2.2.5

作成, 17

既存の列からの作成, 7.8

索引構成表としての定義, 12

階層の判断, 6.6.4

本体の削除, 18

仕様部の削除, 18

マテリアライズド・ビュー, 15, 15

索引列, 14

変更, 12

列プロパティの変更, 12

マルチレベル, 16

パーティション化されているネストした表の列, 12

記憶特性, 12, 16

NEW_TIMEファンクション, 7.8 NEXT句

ALTER MATERIALIZED VIEW ... REFRESH, 11

NEXTパラメータ

STORAGE句, 8

NEXT_DAYファンクション, 7.8 NEXTVAL疑似列, 3.2, 15 NLS_CHARSET_DECL_LENファンクション, 7.8 NLS_CHARSET_IDファンクション, 7.8 NLS_CHARSET_NAMEファンクション, 7.8 NLS_DATE_LANGUAGE初期化パラメータ, 2.4.2.2 NLS_INITCAPファンクション, 7.8 NLS_LANGUAGE初期化パラメータ, 2.4.2.2, 9.5 NLS_LOWERファンクション, 7.8 NLS_SORT初期化パラメータ, 9.5 NLS_TERRITORY初期化パラメータ, 2.4.2.2 NLS_UPPERファンクション, 7.8 NLSSORTファンクション, 7.8 NO FORCE LOGGING句

ALTER DATABASE, 10.2

ALTER TABLESPACE, 12

NO_CLUSTERINGヒント, 2.6.4.37 NO_EXPANDヒント, 2.6.4.38 NO_FACTヒント, 2.6.4.39 NO_GATHER_OPTIMIZER_STATISTICSヒント, 2.6.4.40 NO_INDEXヒント, 2.6.4.41 NO_INDEX_FFSヒント, 2.6.4.42 NO_INDEX_SSヒント, 2.6.4.43 NO_INMEMORYヒント, 2.6.4.44 NO_INMEMORY_PRUNINGヒント, 2.6.4.45 NO_MERGEヒント, 2.6.4.46 NO_MONITORヒント, 2.6.4.47 NO_PARALLELヒント, 2.6.4.49 NO_PARALLEL_INDEX, 2.6.4.51 NO_PQ_CONCURRENT_UNIONヒント, 2.6.4.53 NO_PQ_SKEWヒント, 2.6.4.54 NO_PUSH_PREDヒント, 2.6.4.55 NO_PUSH_SUBQヒント, 2.6.4.56 NO_PX_JOIN_FILTERヒント, 2.6.4.57 NO_QUERY_TRANSFORMATIONヒント, 2.6.4.58 NO_RESULT_CACHEヒント, 2.6.4.59 NO_REWRITEヒント, 2.6.4.60 NO_STAR_TRANSFORMATIONヒント, 2.6.4.62 NO_STATEMENT_QUEUINGヒント, 2.6.4.63 NO_UNNESTヒント, 2.6.4.64 NO_USE_CUBEヒント, 2.6.4.65 NO_USE_HASHヒント, 2.6.4.66 NO_USE_MERGEヒント, 2.6.4.67 NO_USE_NLヒント, 2.6.4.68 NO_XML_QUERY_REWRITEヒント, 2.6.4.69 NO_XMLINDEX_REWRITEヒント, 2.6.4.70 NO_ZONEMAPヒント, 2.6.4.71 NOAPPENDヒント, 2.6.4.35 NOARCHIVELOG句

ALTER DATABASE, 10.2, 10.2

CREATE CONTROLFILE, 14

CREATE DATABASE, 10.2, 14

NOAUDIT文, 18

統合監査, 18

ロック, B.2.2

NOCACHE句

ALTER CLUSTER, 10.2

ALTER MATERIALIZED VIEW, 11

ALTER MATERIALIZED VIEW LOG, 11, 11

ALTER TABLE, 16

CREATE CLUSTER, 14

CREATE MATERIALIZED VIEW, 15

CREATE MATERIALIZED VIEW LOG, 15

CREATE SEQUENCE, 15

ALTER SEQUENCE。「CREATE SEQUENCE」を参照

NOCACHEヒント, 2.6.4.36 NOCOMPRESS句

ALTER INDEX ... REBUILD, 14

CREATE TABLE, 16

NOCOPY句

CREATE PLUGGABLE DATABASE, 15

NOCYCLEパラメータ

CREATE SEQUENCE, 15

ALTER SEQUENCE。「CREATE SEQUENCE」を参照, 11

NOFORCE句

CREATE JAVA, 14

CREATE VIEW, 17

NOKEEPパラメータ

CREATE SEQUENCE, 15

NOLOGGINGモード

強制ロギング・モード, 8

非パーティション・オブジェクト, 8

パーティション・オブジェクト, 8

NOMAXVALUEパラメータ

CREATE SEQUENCE, 15

ALTER SEQUENCE。「CREATE SEQUENCE」を参照

NOMINIMIZE RECORDS PER BLOCK句

ALTER TABLE, 12

NOMINVALUEパラメータ

CREATE SEQUENCE, 15

ALTER SEQUENCE。「CREATE SEQUENCE」を参照, 11

NOMONITORING USAGE句

ALTER INDEX, 10.2

NONE句

SET ROLE, 19

空でないサブセット, 7.8 不等価性のテスト, 6.14 非スキーマ・オブジェクト

リスト, 2.7.2

ネームスペース, 2.8.1

NOORDERパラメータ

CREATE SEQUENCE, 15

ALTER SEQUENCE。「CREATE SEQUENCE」を参照, 11

NOPARALLEL句

CREATE INDEX, 8, 16

NOPARALLELヒント, 2.6.4.49 NOPARALLEL_INDEXヒント, 2.6.4.51 NORELY句

制約, 8

NORESETLOGS句

CREATE CONTROLFILE, 14

NOREVERSEパラメータ

ALTER INDEX ... REBUILD, 10.2, 10.2

NOREWRITEヒント, 2.6.4.60 NOROWDEPENDENCIES句

CREATE CLUSTER, 14

CREATE TABLE, 16

NOSORT句

ALTER INDEX, 14

NOT条件, 6.4, 6.4 NOT DEFERRABLE句

制約, 8

NOT IDENTIFIED句

CREATE ROLE, 15

ALTER ROLE。「CREATE ROLE」を参照

NOT IN副問合せ

NOT EXISTS副問合せへの変換, 7.8

NOT NULL句

CREATE TABLE, 16

NOWAIT句

LOCK TABLE, 18

NTH_VALUEファンクション, 7.8 NTILEファンクション, 7.8 NULL, 2.5

0(ゼロ)との違い, 2.5

条件, 2.5.3

表, 2.5.3

ファンクション, 7.1 比較条件, 2.5.2 NULL条件, 6.8 NULLIFファンクション, 7.8

CASE式の書式, 7.8

NULL関連ファンクション, 7.2.15 NUMBERデータ型, 2.1.1.6

VARCHAR2への変換, 2.4.1

精度, 2.1.1.6

スケール, 2.1.1.6

数値書式モデル, 2.4.1 数値ファンクション, 7.2.1 数

比較規則, 2.2.1

浮動小数点, 2.1.1.6, 2.1.1.8

SQL構文内, 2.3.2

精度, 2.3.2.2

フルスペルでの表記, 2.4.2.5

構文, 2.3.2.2

数値ファンクション, 7.2.1 数値の優先順位, 2.1.1.9 NUMTODSINTERVALファンクション, 7.8 NUMTOYMINTERVALファンクション, 7.8 NVARCHAR2データ型, 2.1.1.5 NVLファンクション, 7.8 NVL2ファンクション, 7.8

O

オブジェクト・アクセス式, 5.12

OBJECT IDENTIFIER句

CREATE TABLE, 16

オブジェクト・インスタンス

型, 6.15

オブジェクト権限

付与, 15

複数, 15

特定の列, 18

データベース・オブジェクト

取消し, 18

取消し, 18

ロール, 18, 18

ユーザー, 18, 18

PUBLIC, 18

オブジェクト参照ファンクション, 7.5 オブジェクト表

行の追加, 18

階層の一部, 16

作成, 16, 16

問合せ, 16

システム生成の列名, 16, 16, 17, 17

最新バージョンへの更新, 12

アップグレード, 12

オブジェクト型列

プロパティの定義

マテリアライズド・ビュー, 15, 15

型の階層, 16 階層のメンバーシップ, 12 プロパティの変更

表, 12, 12

代替性, 12 オブジェクト型マテリアライズド・ビュー

作成, 15

オブジェクト型, 2.1.5.1

統計タイプの関連付け, 13

属性, 2.9.5

型の階層, 16

階層のメンバーシップ, 12

代替性, 12

本体

作成, 17

再作成, 17

比較規則, 2.2.4

MAPファンクション, 2.2.4

ORDERファンクション, 2.2.4

コンポーネント, 2.1.5.1 作成, 17 メンバー・メソッドの定義, 17 統計タイプの関連付けの解除, 17, 18 本体の削除, 18 仕様部の削除, 18 システム権限の付与, 18 識別子, 3.5 不完全, 17 メソッド, 2.9.5 サブタイプの権限, 18 統計タイプ, 13 値, 3.6 参照。「REF」を参照 オブジェクト・ビュー, 17

実表

行の追加, 18

作成, 17 サブビューの作成, 17 定義, 17 問合せ, 17 OBJECT_ID疑似列, 3.5, 16, 16, 17, 17 OBJECT_VALUE疑似列, 3.6 オブジェクト。「オブジェクト型」または「データベース・オブジェクト」を参照 ODCIIndexInsertメソッド

索引タイプのサポート, 10.2, 14

OF句

CREATE VIEW, 17

OFFLINE句

ALTER TABLESPACE, 12

CREATE TABLESPACE, 16

OIDINDEX句

CREATE TABLE, 16

OID。「オブジェクト識別子」を参照

REFに含まれる, 2.1.5.2

オブジェクト・ビュー, 17

主キー, 16

指定, 16

索引の指定, 16

システム生成, 16

OLAPファンクション, 7.7 ON句

CREATE OUTLINE, 15

ON COMMIT句

CREATE TABLE, 16

ON COMMIT REFRESHオブジェクト権限

マテリアライズド・ビュー, 18

ON COMMIT REFRESHシステム権限, 18 ON DEFAULT句

AUDIT, 13

NOAUDIT, 18

ON DELETE CASCADE句

制約, 8

ON DELETE SET NULL句

制約, 8

ON DIRECTORY句

AUDIT, 13, 13

NOAUDIT, 18

ON MINING MODEL句

AUDIT, 13

ON object句

NOAUDIT, 18

REVOKE, 18

ON PREBUILT TABLE句

CREATE MATERIALIZED VIEW, 15

オンライン・バックアップ

表領域のオンライン・バックアップの終了, 12

ONLINE句

ALTER TABLESPACE, 12

CREATE INDEX, 14

CREATE TABLESPACE, 16

オンライン索引, 14

再構築, 12

オンラインREDOログ

再初期化, 10.2

OPEN句

ALTER DATABASE, 10.2

OPEN READ ONLY句

ALTER DATABASE, 10.2

OPEN READ WRITE句

ALTER DATABASE, 10.2

オペランド, 4 オペレーティング・システム・ファイル

削除, 18, 18

削除, 10.2

演算子, 4

索引タイプへの追加, 10.2

変更, 11

算術, 4.2

バイナリ, 4.1.1

コメント, 13

連結, 4.3

CONNECT_BY_ROOT, 4.4.2

索引タイプからの削除, 10.2

システム権限の付与, 18

MULTISET EXCEPT, 4.6.1

MULTISET INTERSECT, 4.6.2

MULTISET UNION, 4.6.3

優先順位, 4.1.2

PRIOR, 4.4.1

集合, 4.5, 19

実装の指定, 15

単項, 4.1.1

ユーザー定義, 4.7

ファンクションへのバインド, 11, 15

コンパイル, 11

作成, 15

削除, 17

バインド実装方法, 15

実装タイプ, 15

バインドの戻り型, 15

OPT_PARAMヒント, 2.6.4.72 OPTIMALパラメータ

STORAGE句, 8

OR条件, 6.4, 6.4 OR REPLACE句

CREATE CONTEXT, 14

CREATE DIRECTORY, 14

CREATE FUNCTION, 14, 14

CREATE LIBRARY, 15

CREATE OUTLINE, 15

CREATE PACKAGE, 15

CREATE PACKAGE BODY, 15

CREATE PROCEDURE, 15

CREATE TRIGGER, 16

CREATE TYPE, 17

CREATE TYPE BODY, 17

CREATE VIEW, 17

ORA_DST_AFFECTEDファンクション, 7.8 ORA_DST_CONVERTファンクション, 7.8 ORA_DST_ERRORファンクション, 7.8 ORA_HASHファンクション, 7.8 ORA_INVOKING_USERファンクション, 7.8 ORA_INVOKING_USERIDファンクション, 7.8 ORA_ROWSCN疑似列, 3.7 Oracle ADVMボリューム, 10.2 Oracle Automatic Storage Management

クラスタ内のノードの移行, 11

Oracle Call Interface, 1.5 Oracleの予約語, E.1 Oracle Text

組込み条件, 6.1

CATSEARCH, 6.1

CONTAINS, 6.1

ドメイン索引の作成, 14

MATCHES, 6.1

演算子, 4.1

CATSEARCH, 4.1

CONTAINS, 4.1

MATCHES, 4.1

SCORE, 4.1

Oracleのツール製品

SQLのサポート, 1.5

ORDAudioデータ型, 2.1.10 ORDDicomデータ型, 2.1.10 ORDDocデータ型, 2.1.10 ORDER BY句

問合せ, 9.5

SELECT, 9.5, 19, 19

ROWNUM, 3.9

ORDER句

ALTER SEQUENCE。「CREATE SEQUENCE」を参照

ORDERパラメータ

CREATE SEQUENCE, 15

ORDER SIBLINGS BY句

SELECT, 19

ORDEREDヒント, 2.6.4.73 ORDImageデータ型, 2.1.10 序数

指定, 2.4.2.5

フルスペルでの表記, 2.4.2.5

ORDVideoデータ型, 2.1.10 ORGANIZATION EXTERNAL句

CREATE TABLE, 16, 16

ORGANIZATION HEAP句

CREATE TABLE, 16

ORGANIZATION INDEX句

CREATE TABLE, 16

外部結合, 9.6.6

制限事項, 9.6.6

アウトライン

異なるカテゴリへの割当て, 11

異なるカテゴリへの割当て, 11, 11

コピー, 15

作成, 15

文に対する作成, 15

データベースからの削除, 17

動的な使用可能化または使用禁止化, 15

現行のセッションによる使用, 15

PUBLICによる使用, 15

システム権限の付与, 18

オプティマイザによるプライベート・アウトラインの使用, 11

再構築, 11, 11

再コンパイル, 11

名前の変更, 11, 11, 11

置換え, 15

グループの格納, 15

オプティマイザによる使用, 11

実行計画の生成での使用, 11

実行計画の生成での使用, 15

表外制約

CREATE TABLE, 16

OVER句

分析ファンクション, 7.4

OVERFLOW句

ALTER INDEX, 10.2

ALTER TABLE, 12

CREATE TABLE, 16

P

パッケージ本体

作成, 15

再作成, 15

データベースからの削除, 17

パッケージ・プロシージャ

削除, 17

パッケージ

統計タイプの関連付け, 13

作成, 15

統計タイプの関連付けの解除, 17, 17

再定義, 15

データベースからの削除, 17

シノニム, 16

PACKAGES句

ASSOCIATE STATISTICS, 13, 13

DISASSOCIATE STATISTICS, 17

PARALLEL句

ALTER CLUSTER, 10.2, 10.2

ALTER INDEX, 10.2

ALTER MATERIALIZED VIEW, 11, 11

ALTER MATERIALIZED VIEW LOG, 11, 11

ALTER TABLE, 12

CREATE CLUSTER, 14

CREATE INDEX, 14

CREATE MATERIALIZED VIEW, 15, 15

CREATE MATERIALIZED VIEW LOG, 15, 15

CREATE TABLE, 16, 16

パラレル実行, 8

ヒント, 2.6.4.74

DDL文, 11

DML文, 11

PARALLELヒント, 2.6.4.74 PARALLEL_INDEXヒント, 2.6.4.75 パラメータ・ファイル

作成, 15, 15

メモリー, 15

パラメータ

構文

オプション, A.1.2

必須, A.1.1

PARAMETERS句

CREATE INDEX, 14, 14

部分索引, 14 PARTITION ... LOB記憶域句

ALTER TABLE, 12

PARTITION BY HASH句

CREATE TABLE, 16, 16

PARTITION BY LIST句

CREATE TABLE, 16, 16

PARTITION BY RANGE句

CREATE TABLE, 16, 16

PARTITION BY REFERENCE句

CREATE TABLE, 16, 16

PARTITION句

ANALYZE, 13

CREATE INDEX, 14

CREATE TABLE, 16

DELETE, 17

INSERT, 18

LOCK TABLE, 18

UPDATE, 19

パーティション索引, 2.9.4, 14, 14, 14

ローカルのパーティション索引の作成, 14

ユーザー定義, 14

パーティション化された索引構成表

2次索引の更新, 10.2

パーティション表, 2.9.4 拡張パーティション表名

DML文, 2.9.4

制限事項, 2.9.4

構文, 2.9.4

パーティション化

ハッシュ, 16, 16

リスト, 16, 16

レンジ, 16, 16

参照, 16, 16

句

ALTER INDEX, 10.2

ALTER TABLE, 12

期間, 16 マテリアライズド・ビュー・ログ, 11, 15 マテリアライズド・ビュー, 11, 15, 15 時間隔パーティションを持つレンジ, 16 参照制約, 12, 16 システム, 16 パーティション

追加, 12

行の追加, 18

エクステントの割当て, 12

リテラル値に基づくパーティション, 16

コンポジット

指定, 16

非パーティション表への変換, 12 未使用領域の解放, 12 削除, 12 表との交換, 12 エクステント

索引への割当て, 10.2

ハッシュ

追加, 12

結合, 12

指定, 16

索引, 14 行の挿入, 18 リスト・サブパーティションの追加, 12 LOB記憶特性, 12 ロック, 18 ロギング属性, 16 挿入操作のロギング, 12 マージ, 12 変更, 12, 12 物理属性

変更, 12

レンジ

追加, 12

指定, 16

行の削除, 12, 17 名前の変更, 12 値の変更, 19 分割, 12 記憶特性, 8 表領域

定義, 16

PASSWORD EXPIRE句

CREATE USER, 17

ALTER USER。「CREATE USER」を参照

PASSWORD_GRACE_TIMEパラメータ

ALTER PROFILE, 11

CREATE PROFILE, 15

PASSWORD_LIFE_TIMEパラメータ

ALTER PROFILE, 11

CREATE PROFILE, 15

PASSWORD_LOCK_TIMEパラメータ

ALTER PROFILE, 11

CREATE PROFILE, 15

PASSWORD_REUSE_MAXパラメータ

ALTER PROFILE, 11

CREATE PROFILE, 15

PASSWORD_REUSE_TIMEパラメータ

ALTER PROFILE, 11

CREATE PROFILE, 15

PASSWORD_VERIFY_FUNCTIONパラメータ

ALTER PROFILE, 11

CREATE PROFILE, 15

パスワード

期限切れ, 17

猶予期間, 15

複雑さに対する保証, 15

使用および再利用の制限, 15

ロック, 15

使用禁止化, 15

パラメータ

CREATE PROFILE, 15

特殊文字, 17 PATHファンクション, 7.8 PATH_VIEW, 6.9.1, 6.9.2 パターン一致条件, 6.7 PCT_ACCESS_DIRECT統計情報

索引構成表, 13

PCTFREEパラメータ

ALTER CLUSTER, 10.2

ALTER INDEX, 10.2

ALTER MATERIALIZED VIEW LOG, 11

ALTER TABLE, 12

CREATE TABLE, 8

CREATE MATERIALIZED VIEW。「CREATE TABLE」を参照。

PCTINCREASEパラメータ

STORAGE句, 8

PCTTHRESHOLDパラメータ

CREATE TABLE, 16

PCTUSEDパラメータ

ALTER CLUSTER, 10.2

ALTER INDEX, 10.2

ALTER MATERIALIZED VIEW LOG, 11

ALTER TABLE, 12

CREATE TABLE, 8

CREATE INDEX。「CREATE TABLE」を参照

PCTVERSIONパラメータ

LOB記憶域, 16

LOB記憶域句, 12

PDB

管理ユーザー, 15

バックアップ, 11

変更

グローバル名, 11

状態, 11, 11

ストレージ制限, 11

クローニング, 15 作成

ソースPDBのクローニング, 15

シード・データベースの使用, 15

デフォルト・エディションの設定, 11 例

作成, 15

削除, 17

変更, 11

ファイル名の生成, 15 システム権限の付与, 18 データファイルの変更, 11 一時ファイルの変更, 11 CDBに接続, 15 リカバリ, 11 タイム・ゾーンの設定, 11 ストレージ制限, 15 切断, 11 接続用XMLファイル, 15 PERCENT_RANKファンクション, 7.8 PERCENTILE_CONTファンクション, 7.8 PERCENTILE_DISCファンクション, 7.8 PERMANENT句

ALTER TABLESPACE, 12

physical_attributes_clause

ALTER CLUSTER, 10.2

ALTER INDEX, 10.2

ALTER MATERIALIZED VIEW LOG, 11

ALTER TABLE, 12

CREATE CLUSTER, 14

CREATE MATERIALIZED VIEW, 15

CREATE TABLE, 16, 16

フィジカル・スタンバイ・データベース

アクティブ, 10.2

スナップショット・スタンバイ・データベースへの変換, 10.2

ピボット操作, 19

例, 19

構文, 19

プレースホルダ式, 5.13 計画管理

システム権限の付与, 18

プラン・スタビリティ, 15 PLAN_TABLEサンプル表, 18 P.M.日時書式要素, 2.4.2.2, 2.4.2.2 POSIX正規表現規格, D POWERファンクション, 7.8 POWERMULTISETファンクション, 7.8 POWERMULTISET_BY_CARDINALITYファンクション, 7.8 PQ_CONCURRENT_UNIONヒント, 2.6.4.76 PQ_DISTRIBUTEヒント, 2.6.4.77 PQ_FILTERヒント, 2.6.4.78 PQ_SKEWヒント, 2.6.4.79 優先順位

条件, 6.1.1

数値, 2.1.1.9

演算子, 4.1.2

精度

桁数, 2.3.2.2

NUMBERデータ型, 2.1.1.6

プリコンパイラ, 1.5 事前定義されているロール, 18 PREDICTIONファンクション, 7.8 PREDICTION_BOUNDSファンクション, 7.8 PREDICTION_COSTファンクション, 7.8 PREDICTION_DETAILSファンクション, 7.8 PREDICTION_PROBABILITYファンクション, 7.8 PREDICTION_SETファンクション, 7.8 接頭辞圧縮, 16

定義, 14

無効化, 14

使用可能化, 10.2

索引再構築, 10.2

索引構成表, 16

PREPARE TO SWITCHOVER句

ALTER DATABASE, 10.2

PRESENTNNVファンクション, 7.8 PRESENTVファンクション, 7.8 XML出力の出力整形, 7.8 PREVIOUSファンクション, 7.8 プライマリ・データベース

フィジカル・スタンバイ・データベースへの変換, 10.2

PRIMARY KEY句

制約, 8

CREATE TABLE, 16

主キー制約, 8

使用可能, 16

索引, 16

主キー

値の生成, 15

PRIOR句

階層問合せ, 9.3

PRIOR演算子, 4.4.1 PRIVATE句

CREATE OUTLINE, 15

プライベート・アウトライン

オプティマイザによる使用, 11

PRIVATE_SGAパラメータ

ALTER PROFILE, 11

ALTER RESOURCE COST, 11

権限

オブジェクト型のサブタイプ, 18

権限受領者からの取消し, 18

「システム権限」または「オブジェクト権限」を参照

プロシージャ

3GL, コール, 15

コール, 13

作成, 15

実行, 13

外部, 15

システム権限の付与, 18

依存するローカル・オブジェクトの無効化, 17

COMMITまたはROLLBACK文の発行, 11

ネーミング規則, 2.8.1

再コンパイル, 11

再作成, 15

データベースからの削除, 17

シノニム, 16

PROFILE句

CREATE USER, 17

ALTER USER。「CREATE USER」を参照

プロファイル

リソース制限の追加, 11

ユーザーへの割当て, 17

リソース制限の変更, 11

作成, 15

例, 15

ユーザーへの割当ての削除, 17 リソース制限の削除, 11 システム権限の付与, 18 変更の例, 11 データベースからの削除, 17 プロキシ句

ALTER USER, 13, 13

プロキシ・ユーザー

データベース・ユーザーとしての接続の許可, 13

擬似例, 3

COLUMN_VALUE, 3.4

CONNECT_BY_ISCYCLE, 3.1.1

CONNECT_BY_ISLEAF, 3.1.2

CURRVAL, 3.2

フラッシュバック問合せ, 3.3

階層問合せ, 3.1

LEVEL, 3.1.3

NEXTVAL, 3.2

OBJECT_ID, 3.5, 16, 16, 17, 17

OBJECT_VALUE, 3.6

ORA_ROWSCN, 3.7

ROWID, 3.8

ROWNUM, 3.9

バージョン問合せ, 3.3

XMLDATA, 3.10

PUBLIC句

CREATE OUTLINE, 15

CREATE SYNONYM, 16

DROP DATABASE LINK, 17

パブリック・データベース・リンク

削除, 17

パブリック・シノニム, 16

削除, 18

PURGE DBA_RECYCLEBINシステム権限, 18 PURGE文, 18 PUSH_PREDヒント, 2.6.4.80 PUSH_SUBQヒント, 2.6.4.81 PX_JOIN_FILTERヒント, 2.6.4.82

Q

QB_NAMEヒント, 2.6.4.83

問合せ, 9.1, 19

コメント, 9.2

複合, 9.5

相関

左相関, 19

デフォルト・ロック, B.1 定義済, 9.1 分散, 9.10 値で戻された行のグループ化, 19 階層問合せでの順序付け, 19 ヒント, 9.2 結合, 9.6, 19 行ロック, 19 行の複数のバージョン, 19 過去のデータ, 19 戻された行の順序付け, 19 外部結合, 19 複数表の参照, 9.6 SELECT構文のリスト, 9.2 すべての列の選択, 19 任意の行からの選択, 19 結果のソート, 9.5 構文, 9.1 トップレベル, 9.1 上位N番, 3.9, 19 階層。「階層問合せ」を参照 クエリー・リライト

ディメンション, 14

定義済, 19

QUERY REWRITEオブジェクト権限

マテリアライズド・ビュー, 18

QUERY REWRITEシステム権限, 18 QUIESCE RESTRICTED句

ALTER SYSTEM, 11

QUOTA句

CREATE USER, 17

ALTER USER。「CREATE USER」を参照

R

範囲条件, 6.12

レンジ・パーティション

時間隔パーティションへの変換, 12

レンジ・パーティション

追加, 12

作成, 16

値, 16

RANKファンクション, 7.8 RATIO_TO_REPORTファンクション, 7.8 RAWデータ型, 2.1.1.19

CHARデータからの変換, 2.1.1.19

RAWTOHEXファンクション, 7.8 RAWTONHEXファンクション, 7.8 READ ANY TABLEシステム権限, 18 READオブジェクト権限

マテリアライズド・ディレクトリ, 18

マテリアライズド・ビュー, 18

表, 18

ビュー, 18

READ ONLY句

ALTER TABLESPACE, 12

ALTER VIEW, 13

READ WRITE句

ALTER TABLESPACE, 12

ALTER VIEW, 13

REBUILD句

ALTER INDEX, 10.2

ALTER OUTLINE, 11

REBUILD PARTITION句

ALTER INDEX, 10.2

REBUILD SUBPARTITION句

ALTER INDEX, 10.2

REBUILD UNUSABLE LOCAL INDEXES句

ALTER TABLE, 12

RECOVER AUTOMATIC句

ALTER DATABASE, 10.2

RECOVER CANCEL句

ALTER DATABASE, 10.2, 10.2

RECOVER句

ALTER DATABASE, 10.2

RECOVER CONTINUE句

ALTER DATABASE, 10.2, 10.2

RECOVER DATABASE句

ALTER DATABASE, 10.2, 10.2

RECOVER DATAFILE句

ALTER DATABASE, 10.2, 10.2

RECOVER LOGFILE句

ALTER DATABASE, 10.2, 10.2

RECOVER MANAGED STANDBY DATABASE句

ALTER DATABASE, 10.2

RECOVER TABLESPACE句

ALTER DATABASE, 10.2, 10.2

RECOVERABLE, 10.2, 16

「LOGGING句」を参照

リカバリ

データの廃棄, 10.2

分散リカバリの使用可能化, 11

中断後のインスタンスの継続, 10.2

メディア・リカバリの設計, 10.2

メディア, 使用中の実行, 10.2

データベース, 10.2

recovery_clauses

ALTER DATABASE, 10.2

再帰的副問合せのファクタリング, 19 ごみ箱

オブジェクトの消去, 18

REDOログ・ファイル

指定, 8

制御ファイルのための指定, 14

REDOログ, 10.2

追加, 10.2, 10.2

ロジカル・スタンバイ・データベースへの適用, 10.2

アーカイブ位置, 11

自動アーカイブ, 11

自動名前生成, 10.2, 10.2

消去, 10.2

削除, 10.2, 10.2

スレッドの使用可能化および使用禁止化, 10.2

手動アーカイブ, 11

すべて, 11

グループ番号, 11

SCN, 11

現行, 11

次, 11

順序番号, 11

メンバー

既存のグループへの追加, 10.2

削除, 10.2

名前の変更, 10.2

変更の削除, 10.2 再利用, 8 サイズ, 8 指定, 8, 14

メディア・リカバリ用, 10.2

アーカイブ・モードの指定, 14 グループの切替え, 11 REF列

範囲の最限定, 11

指定, 16

表や列からの指定, 16

REF制約

マテリアライズド・ビューの有効範囲の定義, 11

ALTER TABLE, 12

REFファンクション, 7.8 参照パーティション化, 16 参照パーティション表, 12

メンテナンス操作, 12

REFERENCES句

CREATE TABLE, 16

REFERENCESオブジェクト権限

表, 18

ビュー, 18

参照整合性制約, 8 REFRESH句

ALTER MATERIALIZED VIEW, 11, 11

CREATE MATERIALIZED VIEW, 15

REFRESH COMPLETE句

ALTER MATERIALIZED VIEW, 11

CREATE MATERIALIZED VIEW, 15

REFRESH FAST句

ALTER MATERIALIZED VIEW, 11

CREATE MATERIALIZED VIEW, 15

REFRESH FORCE句

ALTER MATERIALIZED VIEW, 11

CREATE MATERIALIZED VIEW, 15

REFRESH ON COMMIT句

ALTER MATERIALIZED VIEW, 11

CREATE MATERIALIZED VIEW, 15

REFRESH ON DEMAND句

ALTER MATERIALIZED VIEW, 11

CREATE MATERIALIZED VIEW, 15

REF, 2.1.5.2, 8

オブジェクト識別子のコンテナ, 2.1.5.2

DANGLING, 13

更新, 13

検証, 13

REFTOHEXファンクション, 7.8 REGEXP_COUNTファンクション, 7.8 REGEXP_INSTRファンクション, 7.8 REGEXP_LIKE条件, 6.7.2 REGEXP_REPLACEファンクション, 7.8 REGEXP_SUBSTRファンクション, 7.8 REGISTER句

ALTER SYSTEM, 11

REGISTER LOGFILE句

ALTER DATABASE, 10.2

REGR_AVGXファンクション, 7.8 REGR_AVGYファンクション, 7.8 REGR_COUNTファンクション, 7.8 REGR_INTERCEPTファンクション, 7.8 REGR_R2ファンクション, 7.8 REGR_SLOPEファンクション, 7.8 REGR_SXXファンクション, 7.8 REGR_SXYファンクション, 7.8 REGR_SYYファンクション, 7.8 正規表現

多言語の構文, D.1

演算子, 多言語拡張, D.2

Oracleのサポート, D

Perlによる演算子, D.3

部分正規表現, 7.8, 7.8

リレーショナル表

作成, 16, 16

RELY句

制約, 8

REMAINDERファンクション, 7.8 RENAME句

ALTER INDEX, 10.2

ALTER OUTLINE, 11

ALTER TABLE, 12

ALTER TABLESPACE, 12

ALTER TRIGGER, 13

RENAME CONSTRAINT句

ALTER TABLE, 12

RENAME DATAFILE句

ALTER TABLESPACE, 12

RENAME FILE句

ALTER DATABASE, 10.2, 10.2

RENAME GLOBAL_NAME句

ALTER DATABASE, 10.2

ALTER PLUGGABLE DATABASE, 11

RENAME PARTITION句

ALTER INDEX, 10.2

ALTER TABLE, 12

RENAME文, 18 RENAME SUBPARTITION句

ALTER INDEX, 10.2

ALTER TABLE, 12

REPLACEファンクション, 7.8 レプリケーション

行レベル依存の追跡, 14, 16

予約語, 2.8.1, E.1 順序のリセット, 10.2 RESETLOGSパラメータ

CREATE CONTROLFILE, 14

RESOLVE句

ALTER JAVA CLASS, 10.2

CREATE JAVA, 14

RESOLVER句

ALTER JAVA CLASS, 10.2

ALTER JAVA SOURCE, 10.2

CREATE JAVA, 14

リソース・マネージャ, 11 リソース・パラメータ

CREATE PROFILE, 15

RESOURCE_VIEW, 6.9.1, 6.9.2 応答時間

最適化, 2.6.4.14

リストア・ポイント

保証付き, 15

保存済, 15

使用

表のフラッシュバック, 18

データベースのフラッシュバック, 18

RESTRICTED SESSIONシステム権限, 18, 18 結果キャッシュ, 16 RESULT_CACHEヒント, 2.6.4.84 再開可能な領域割当て, 11 RESUMABLEシステム権限, 18 RESUME句

ALTER SYSTEM, 11

RETENTIONパラメータ

LOB記憶域, 16

RETRY_ON_ROW_CHANGEヒント, 2.6.4.85 RETURN句

CREATE OPERATOR, 15

RETURNING句

DELETE, 17

INSERT, 18

UPDATE, 19, 19, 19

REUSE句

CREATE CONTROLFILE, 14

ファイル指定, 8

REVERSE句

CREATE INDEX, 14

逆索引, 14 REVERSEパラメータ

ALTER INDEX ... REBUILD, 10.2, 10.2

REVOKE CONNECT THROUGH句

ALTER USER, 13, 13, 13

REVOKE文, 18

ロック, B.2.2

REWRITEヒント, 2.6.4.86 右側外部結合, 19 ロール, 18

認可

パスワード, 15

外部サービス, 15

データベース, 15

エンタープライズ・ディレクトリ・サービス, 15

変更, 11

作成, 15 使用禁止

現行セッション, 19, 19

使用可能

現行セッション, 19, 19

付与, 18, 18

システム権限, 18

ユーザー, 18

別のロール, 18

PUBLIC, 18

パスワードによる識別, 15 外部からの識別, 15 エンタープライズ・ディレクトリ・サービスを使用した識別, 15 パッケージを使用した識別, 15 データベースからの削除, 17 取消し, 18

別のロール, 17, 18

PUBLIC, 18

ユーザー, 17, 18

ROLES句

CREATE PLUGGABLE DATABASE, 15

ロールバック・セグメント

データベースからの削除, 17

最適なサイズの指定, 8

ロールバック・セグメントの付与

システム権限, 18

ROLLBACK文, 18 UNDOのロールバック, 11, 14 ROLLUP句

SELECT文, 19

ROUND(日付)ファンクション, 7.8

書式モデル, 7.8

ROUND(数値)ファンクション, 7.8 ルーチン

コール, 13

実行, 13

行コンストラクタ, 5.16 ROW EXCLUSIVEロック・モード, 18 行制限, 19 行ロック, B.1 ROW SHAREロック・モード, 18 行値コンストラクタ, 5.16 行値

列へのピボット, 19

ROW_NUMBERファンクション, 7.8 ROWDEPENDENCIES句

CREATE CLUSTER, 14

CREATE TABLE, 16

ROWIDデータ型, 2.1.3, 2.1.3.1 ROWID疑似列, 2.1.3, 2.1.3.2, 3.8 ROWID, 2.1.3

説明, 2.1.3

拡張

BASE 64, 2.1.3.1

直接利用できない, 2.1.3.1

非物理, 2.1.3.2 外部キー表, 2.1.3.2 索引構成表, 2.1.3.2 使用方法, 3.8 ROWIDTOCHARファンクション, 7.8 ROWIDTONCHARファンクション, 7.8 行レベル依存の追跡, 14, 16 行レベル・ロック, B.1 ROWNUM疑似列, 3.9 行

表への追加, 18

パーティション間の移動, 16

挿入

パーティション, 18

リモート・データベース, 18

サブパーティション, 18

ロック, B.1 ロック, B.1 パーティション間の移動, 16 削除

クラスタ, 19, 19

表, 19, 19

パーティションおよびサブパーティション, 17

表およびビュー, 17

階層順序の選択, 9.3 制約の指定, 8 制約違反時の格納, 12 RPADファンクション, 7.8 RR日時書式要素, 2.4.2.4 RTRIMファンクション, 7.8 実行時のコンパイル

回避, 11, 13

S

SAMPLE句

SELECT, 19

SELECTおよび副問合せ, 19

SAVEPOINT文, 19 セーブポイント

消去, 13

ロールバック, 18, 18

指定, 19

スカラー副問合せ, 5.14 位取り

精度より大きい, 2.1.1.6

NUMBERデータ型, 2.1.1.6

SCHEMA句

CREATE JAVA, 14

スキーマ・オブジェクト, 2.7.1

デフォルトのバッファ・プールの定義, 8

削除, 18

他のスキーマ内, 2.9.2

リスト, 2.7.1

名前解決, 2.9.1

ネームスペース, 2.8.1

名前の指定

例, 2.8.2

ガイドライン, 2.8.3

ルール, 2.8.1

オブジェクト型, 2.1.5.1 リモート・データベース, 2.9.3 パーティション索引, 2.9.4 パーティション表, 2.9.4 部分, 2.8 位置の保護, 16 所有者の保護, 16 代替名の提供, 16 再認可, 10.1.1 再コンパイル, 10.1.1 参照, 2.9, 11 リモート・ビューへのアクセス, 14 構造の検証, 13 スキーマ

セッションの変更, 11

作成, 15

定義, 2.7.1

科学表記法, 2.4.1.1 SCN_TO_TIMESTAMPファンクション, 7.8 SCOPE FOR句

ALTER MATERIALIZED VIEW, 11

CREATE MATERIALIZED VIEW, 15

SCORE演算子, 4.1 SDO_GEOMETRYデータ型, 2.1.9 SDO_GEORASTERデータ型, 2.1.9 SDO_TOPO_GEOMETRYデータ型, 2.1.9.2 セキュリティ

規定, 16

セキュリティ句

ALTER SYSTEM, 11

セグメント属性句

CREATE TABLE, 16

SEGMENT MANAGEMENT句

CREATE TABLESPACE, 16

セグメント

領域管理

自動, 16

手動, 16

ビットマップの使用, 16

空きリストの使用, 16

表

縮小化, 10.2, 11, 11, 12

SELECT ANY CUBE DIMENSIONシステム権限, 18 SELECT ANY CUBEシステム権限, 18 SELECT ANY DICTIONARYシステム権限, 18 SELECT ANY MINING MODELシステム権限, 18 SELECT ANY SEQUENCEシステム権限, 18 SELECT ANY TABLEシステム権限, 18 SELECT構文のリスト, 9.2

順序付け, 9.5

SELECTオブジェクト権限

ビューに対する付与, 18, 18

マテリアライズド・ビュー, 18

マイニング・モデル, 18

順序, 18

表, 18

ビュー, 18

OLAPキューブ, 18

OLAPキューブ・ディメンション, 18

SELECT文, 9.1, 19 自己結合, 9.6.3 セミ結合, 9.6.8 順序, 3.2, 15

値へのアクセス, 15

変更

増分値, 11

作成, 15 無制限での作成, 15 グローバル,15 システム権限の付与, 18 連続する値の保証, 15 使用方法, 3.2.2 増分値の設定, 15 増分, 15 初期値の設定, 15 トランザクションの再生中に値を保持, 15 最大値

排除, 11

設定, 15

設定または変更, 11

最小値

排除, 11

設定, 15

設定または変更, 11

キャッシュされた値の数の変更, 11 値の順序付け, 11 値の事前割当て, 15 値のリサイクル, 11 データベースからの削除, 18 名前の変更, 18 再開, 18

異なる番号, 11

事前に定義した制限, 15

値, 15

再利用, 15 セッション, 15 事前に定義した制限での停止, 15 シノニム, 16 使用場所, 3.2.1 サーバー・パラメータ・ファイル

作成, 15

メモリー, 15

サーバー・ウォレット

キー, 11

サービス名

リモート・データベース, 14

セッション制御文, 10.1.4

PL/SQLサポート, 10.1.4

セッション・ロック

解放, 11

SESSIONパラメータ

CREATE SEQUENCE, 15

セッション・パラメータ

設定の変更, 11

INSTANCE, 11

セッション順序, 15 SESSION_ROLESビュー, 19 セッション

リソース・コスト制限の計算, 11

リソース・コスト制限の変更, 11

切断, 11

システム権限の付与, 18

CPU時間の制限, 11

読み取るデータ・ブロックの制限, 11

非アクティブ期間の制限, 11

プライベートSGA領域の制限, 11

リソース・コストの制限, 11

合計経過時間の制限, 11

リソースの合計の制限, 11

特性の変更, 11

制限, 11

権限を持つユーザーに制限, 11

別のインスタンスへの切替え, 11

終了, 11

インスタンス全体で終了, 11

タイムゾーンの設定, 11

SESSIONS_PER_USERパラメータ

ALTER PROFILE, 11

SESSIONTIMEZONEファンクション, 7.8 SET句

ALTER SESSION, 11

ALTER SYSTEM, 11

SET条件, 6.6.1 SET CONSTRAINT(S)文, 19 SET CONTAINERシステム権限, 18 SET DANGLING TO NULL句

ANALYZE, 13

SET DATABASE句

CREATE CONTROLFILE, 14

SET ENCRYPTION KEY句

ALTER SYSTEM, 11

SET ENCRYPTION WALLET句

ALTER SYSTEM, 11

SETファンクション, 7.8 集合演算子, 4.5, 19

INTERSECT, 4.5

MINUS, 4.5

UNION, 4.5

UNION ALL, 4.5

SET ROLE文, 19 SET STANDBY DATABASE句

ALTER DATABASE, 10.2

SET STATEMENT_ID句

EXPLAIN PLAN, 18

EXPLAIN WORK, 18

SET TIME_ZONE句

ALTER DATABASE, 10.2, 10.2

ALTER PLUGGABLE DATABASE, 11

ALTER SESSION, 11

CREATE DATABASE, 14

SET TRANSACTION文, 19 SET UNUSED句

ALTER TABLE, 12

SGA。「システム・グローバル領域(SGA)」を参照 SHARE ROW EXCLUSIVEロック・モード, 18 SHARE UPDATEロック・モード, 18 SHARED句

CREATE DATABASE LINK, 14

共有プール

フラッシュ, 11

短絡評価

DECODEファンクション, 7.8

SHRINK SPACE句

ALTER INDEX, 10.2

ALTER MATERIALIZED VIEW, 11

ALTER MATERIALIZED VIEW LOG, 11

ALTER TABLE, 12

SHUTDOWN句

ALTER SYSTEM, 11

SI_AverageColorデータ型, 2.1.10 SI_Colorデータ型, 2.1.10 SI_ColorHistogramデータ型, 2.1.10 SI_FeatureListデータ型, 2.1.10 SI_PositionalColorHistogramデータ型, 2.1.10 SI_StillImageデータ型, 2.1.10 SI_Textureデータ型, 2.1.10 兄弟関係

階層問合せでの順序付け, 19

SIGNファンクション, 7.8 単純比較条件, 6.2.1 単純式, 5.2 SINファンクション, 7.8 SINGLE TABLE句

CREATE CLUSTER, 14

単一行ファンクション, 7.2 シングルテーブル・インサート, 18 SINHファンクション, 7.8 SIZE句

ALTER CLUSTER, 10.2

CREATE CLUSTER, 14

ファイル指定, 8

SOME演算子, 6.2 SOUNDEXファンクション, 7.8 SOURCE_FILE_NAME_CONVERT句

CREATE PLUGGABLE DATABASE, 15

SP日時書式要素の接尾辞, 2.4.2.5 特殊文字

パスワード, 15

フルスペルで表した数

指定, 2.4.2.5

SPLIT PARTITION句

ALTER INDEX, 10.2

ALTER TABLE, 12

SPTH日時書式要素の接尾辞, 2.4.2.5 SQL Developer, 1.5 SQLファンクション, 7.1

ABS, 7.8

ACOS, 7.8

ADD_MONTHS, 7.8

集計ファンクション, 7.3

分析ファンクション, 7.4

APPENDCHILDXML, 7.8

LOB列への適用, 7.1

APPROX_COUNT_DISTINCT, 7.8

ASCII, 7.8

ASCIISTR, 7.8

ASIN, 7.8

ATAN, 7.8

ATAN2, 7.8

AVG, 7.8

BFILENAME, 7.8

BIN_TO_NUM, 7.8

BITAND, 7.8

CARDINALITY, 7.8

CAST, 7.8

CEIL, 7.8

文字ファンクション

文字値, 7.2.2

数値, 7.2.3

キャラクタ・セット・ファンクション, 7.2.4 CHARTOROWID, 7.8 CHR, 7.8 CLUSTER_DETAILS, 7.8 CLUSTER_DISTANCE, 7.8 CLUSTER_ID, 7.8 CLUSTER_PROBABILITY, 7.8 CLUSTER_SET, 7.8 COALESCE, 7.8 COLLECT, 7.8 収集ファンクション, 7.2.9 COMPOSE, 7.8 CON_DBID_TO_ID, 7.8 CON_GUID_TO_ID, 7.8 CON_NAME_TO_ID, 7.8 CON_UID_TO_ID, 7.8 CONCAT, 7.8 変換ファンクション, 7.2.7 CONVERT, 7.8 CORR, 7.8 CORR_K, 7.8 CORR_S, 7.8 COS, 7.8 COSH, 7.8 COUNT, 7.8 COVAR_POP, 7.8 COVAR_SAMP, 7.8 CUBE_TABLE, 7.8 CUME_DIST, 7.8 CURRRENT_DATE, 7.8 CURRRENT_TIMESTAMP, 7.8 CV, 7.8 データ・カートリッジ・ファンクション, 7.8 データ・マイニング・ファンクション, 7.2.11 DATAOBJ_TO_MAT_PARTITION, 7.8 DATAOBJ_TO_PARTITION, 7.8 日時ファンクション, 7.2.5 DBTIMEZONE, 7.8 DECODE, 7.8 DECOMPOSE, 7.8 DELETEXML, 7.8 DENSE_RANK, 7.8 DEPTH, 7.8 DEREF, 7.8 DUMP, 7.8 EMPTY_BLOB, 7.8 EMPTY_CLOB, 7.8 エンコーディング・ファンクションおよびデコーディング・ファンクション, 7.2.14 環境ファンクションおよび識別子ファンクション, 7.2.16 EXISTSNODE, 7.8 EXP, 7.8 EXTRACT(日時), 7.8 EXTRACT (XML), 7.8 EXTRACTVALUE, 7.8 FEATURE_DETAILS, 7.8 FEATURE_ID, 7.8 FEATURE_SET, 7.8 FEATURE_VALUE, 7.8 FIRST, 7.8 FIRST_VALUE, 7.8 FLOOR, 7.8 FROM_TZ, 7.8 一般的な比較ファンクション, 7.2.6 GREATEST, 7.8 GROUP_ID, 7.8 GROUPING, 7.8 GROUPING_ID, 7.8 HEXTORAW, 7.8 階層ファンクション, 7.2.10 INITCAP, 7.8 INSERTCHILDXML, 7.8 INSERTCHILDXMLAFTER, 7.8 INSERTCHILDXMLBEFORE, 7.8 INSERTXMLAFTER, 7.8 INSERTXMLBEFORE, 7.8 INSTR, 7.8 INSTR2, 7.8 INSTR4, 7.8 INSTRB, 7.8 INSTRC, 7.8 ITERATION_NUMBER, 7.8 JSON_QUERY, 7.8 JSON_TABLE, 7.8 JSON_VALUE, 7.8 LAG, 7.8 ラージ・オブジェクト・ファンクション, 7.2.8 LAST, 7.8 LAST_DAY, 7.8 LAST_VALUE, 7.8 LEAD, 7.8 LEAST, 7.8 LENGTH, 7.8 LENGTH2, 7.8 LENGTH4, 7.8 LENGTHB, 7.8 LENGTHC, 7.8 線形回帰, 7.8 LISTAGG, 7.8 LN, 7.8 LNNVL, 7.8 LOCALTIMESTAMP, 7.8 LOG, 7.8 LOWER, 7.8 LPAD, 7.8 LTRIM, 7.8 MAKE_REF, 7.8 MAX, 7.8 MEDIAN, 7.8 MIN, 7.8 MOD, 7.8 モデル・ファンクション, 7.6 MONTHS_BETWEEN, 7.8 NANVL, 7.8 NCHR, 7.8 NEW_TIME, 7.8 NEXT_DAY, 7.8 NLS_CHARSET_DECL_LEN, 7.8 NLS_CHARSET_ID, 7.8 NLS_CHARSET_NAME, 7.8 NLS_INITCAP, 7.8 NLS_LOWER, 7.8 NLS_UPPER, 7.8 NLSSORT, 7.8 NTH_VALUE, 7.8 NTILE, 7.8 NULLIF, 7.8 NULL関連ファンクション, 7.2.15 数値ファンクション, 7.2.1 NUMTODSINTERVAL, 7.8 NUMTOYMINTERVAL, 7.8 NVL, 7.8 NVL2, 7.8 オブジェクト参照ファンクション, 7.5 OLAPファンクション, 7.7 ORA_DST_AFFECTED, 7.8 ORA_DST_CONVERT, 7.8 ORA_DST_ERROR, 7.8 ORA_HASH, 7.8 ORA_INVOKING_USER, 7.8 ORA_INVOKING_USERID, 7.8 PATH, 7.8 PERCENT_RANK, 7.8 PERCENTILE_CONT, 7.8 PERCENTILE_DISC, 7.8 POWER, 7.8 POWERMULTISET, 7.8 POWERMULTISET_BY_CARDINALITY, 7.8 PREDICTION, 7.8 PREDICTION_BOUNDS, 7.8 PREDICTION_COST, 7.8 PREDICTION_DETAILS, 7.8 PREDICTION_PROBABILITY, 7.8 PREDICTION_SET, 7.8 PRESENTNNV, 7.8 PRESENTV, 7.8 PREVIOUS, 7.8 RANK, 7.8 RATIO_TO_REPORT, 7.8 RAWTOHEX, 7.8 RAWTONHEX, 7.8 REF, 7.8 REFTOHEX, 7.8 REGEXP_COUNT, 7.8 REGEXP_INSTR, 7.8 REGEXP_REPLACE, 7.8 REGEXP_SUBSTR, 7.8 REGR_AVGX, 7.8 REGR_AVGY, 7.8 REGR_COUNT, 7.8 REGR_INTERCEPT, 7.8 REGR_R2, 7.8 REGR_SLOPE, 7.8 REGR_SXX, 7.8 REGR_SXY, 7.8 REGR_SYY, 7.8 REMAINDER, 7.8 REPLACE, 7.8 ROUND(日付), 7.8 ROUND(数値), 7.8 ROW_NUMBER, 7.8 ROWIDTOCHAR, 7.8 ROWIDTONCHAR, 7.8 RPAD, 7.8 RTRIM, 7.8 SCN_TO_TIMESTAMP, 7.8 SESSIONTIMEZONE, 7.8 SET, 7.8 SIGN, 7.8 SIN, 7.8 単一行ファンクション, 7.2 SINH, 7.8 SOUNDEX, 7.8 SQRT, 7.8 STANDARD_HASH, 7.8 STATS_BINOMIAL_TEST, 7.8 STATS_CROSSTAB, 7.8 STATS_F_TEST, 7.8 STATS_KS_TEST, 7.8 STATS_MODE, 7.8 STATS_MW_TEST, 7.8 STATS_ONE_WAY_ANOVA, 7.8 STATS_T_TEST_INDEP, 7.8, 7.8 STATS_T_TEST_INDEPU, 7.8, 7.8 STATS_T_TEST_ONE, 7.8, 7.8 STATS_T_TEST_PAIRED, 7.8, 7.8 STATS_WSR_TEST, 7.8 STDDEV, 7.8 STDDEV_POP, 7.8 STDDEV_SAMP, 7.8 SUBSTR, 7.8 SUBSTR2, 7.8 SUBSTR4, 7.8 SUBSTRB, 7.8 SUBSTRC, 7.8 SUM, 7.8 SYS_CONNECT_BY_PATH, 7.8 SYS_CONTEXT, 7.8 SYS_DBURIGEN, 7.8 SYS_EXTRACT_UTC, 7.8 SYS_GUID, 7.8 SYS_OP_ZONE_ID, 7.8 SYS_TYPEID, 7.8 SYS_XMLAGG, 7.8 SYS_XMLGEN, 7.8 SYSDATE, 7.8 SYSTIMESTAMP, 7.8 TAN, 7.8 TANH, 7.8 TIMESTAMP_TO_SCN, 7.8 TO_BINARY_DOUBLE, 7.8 TO_BINARY_FLOAT, 7.8 TO_BLOB, 7.8 TO_CHAR(文字), 7.8 TO_CHAR(日時), 7.8 TO_CHAR(数値), 7.8 TO_CLOB, 7.8 TO_DATE, 7.8 TO_DSINTERVAL, 7.8 TO_LOB, 7.8 TO_MULTI_BYTE, 7.8 TO_NCHAR(文字), 7.8 TO_NCHAR(日時), 7.8 TO_NCHAR(数値), 7.8 TO_NCLOB, 7.8 TO_NUMBER, 7.8 TO_SINGLE_BYTE, 7.8 TO_TIMESTAMP, 7.8 TO_TIMESTAMP_TZ, 7.8 TO_YMINTERVAL, 7.8 TRANSLATE, 7.8 TRANSLATE ... USING, 7.8 TREAT, 7.8 TRIM, 7.8 TRUNC(日付), 7.8 TRUNC(数値), 7.8 t検定, 7.8 TZ_OFFSET, 7.8 UID, 7.8 UNISTR, 7.8 UPDATEXML, 7.8 UPPER, 7.8 USER, 7.8 USERENV, 7.8 VALUE, 7.8 VAR_POP, 7.8 VAR_SAMP, 7.8 VARIANCE, 7.8 VSIZE, 7.8 WIDTH_BUCKET, 7.8 XMLファンクション, 7.2.12 XMLAGG, 7.8 XMLCAST, 7.8 XMLCDATA, 7.8 XMLCOLATTVAL, 7.8 XMLCOMMENT, 7.8 XMLCONCAT, 7.8 XMLDIFF, 7.8 XMLELEMENT, 7.8 XMLEXISTS, 7.8 XMLFOREST, 7.8 XMLISVALID, 7.8 XMLPARSE, 7.8 XMLPATCH, 7.8 XMLPI, 7.8 XMLQUERY, 7.8 XMLROOT, 7.8 XMLSEQUENCE, 7.8 XMLSERIALIZE, 7.8 XMLTABLE, 7.8 XMLTRANSFORM, 7.8 SQL文

ALTER FLASHBACK ARCHIVE, 10.2

監査

アクセス, 13

セッション, 13

停止, 18

正常終了, 13

CREATE FLASHBACK ARCHIVE, 14 DDL, 10.1.1 実行計画の判断, 18 DML, 10.1.2 DROP FLASHBACK ARCHIVE, 17 構成, 10.2 ロールバック, 18 セッション制御, 10.1.4 再開可能な領域割当て, 11 結果キャッシュへの格納, 16 停止およびコンパイル, 11 システム制御, 10.1.5 セッション中の実行の監査, 13 トランザクション制御, 10.1.3 種類, 10.1 取消し, 18 SQL翻訳プロファイル

監査, 13

オブジェクト権限の付与, 18, 18

システム権限の付与, 18

SQL:99規格, 1.2 SQL*Loaderの挿入のログの記録, 10.2 SQL/DSデータ型, 2.1.4

制限事項, 2.1.4

SQRTファンクション, 7.8 ステージング・ログ, 15 スタンドアロン・プロシージャ

削除, 17

標準SQL, C

Oracle拡張機能, C.13

STANDARD_HASHファンクション, 7.8 スタンバイ・データベース

プライマリ・データベースとの同期, 11

スタンバイ・データベース

アクティブ, 10.2

Data Guard, 10.2

プライマリ状態へのコミット, 10.2

使用の制御, 10.2

フィジカル・スタンバイへの変換, 10.2

メディア・リカバリの設計, 10.2

マウント, 10.2

リカバリ, 10.2

STAR_TRANSFORMATIONヒント, 2.6.4.87 STAR_TRANSFORMATION_ENABLED初期化パラメータ, 2.6.4.87 START LOGICAL STANDBY APPLY句

ALTER DATABASE, 10.2

START WITH句

ALTER MATERIALIZED VIEW ... REFRESH, 11

問合せおよび副問合せ, 19

SELECTおよび副問合せ, 19

START WITHパラメータ

CREATE SEQUENCE, 15

startup_clauses

ALTER DATABASE, 10.2

STATEMENT_QUEUINGヒント, 2.6.4.88 統計情報

索引再構築中の収集, 10.2

データ・ディクショナリからの削除, 13

関連付けの強制解除, 17

バルク・ロードのための収集, 2.6.4.16, 2.6.4.40

索引の使用, 10.2

スカラー・オブジェクト属性

収集, 13

スキーマ・オブジェクト

収集, 13

削除, 13

ユーザー定義

削除, 17, 17, 17, 18, 18

統計タイプ

関連付け

列, 13

ドメイン索引, 13

ファンクション, 13

索引タイプ, 13

オブジェクト型, 13

パッケージ, 13

関連付けの解除

列, 17

ドメイン索引, 17

ファンクション, 17

索引タイプ, 17

オブジェクト型, 17

パッケージ, 17

STATS_BINOMIAL_TESTファンクション, 7.8 STATS_CROSSTABファンクション, 7.8 STATS_F_TESTファンクション, 7.8 STATS_KS_TESTファンクション, 7.8 STATS_MODEファンクション, 7.8 STATS_MW_TESTファンクション, 7.8 STATS_ONE_WAY_ANOVAファンクション, 7.8 STATS_T_TEST_INDEPファンクション, 7.8, 7.8 STATS_T_TEST_INDEPUファンクション, 7.8, 7.8 STATS_T_TEST_ONEファンクション, 7.8, 7.8 STATS_T_TEST_PAIREDファンクション, 7.8, 7.8 STATS_WSR_TESTファンクション, 7.8 STDDEVファンクション, 7.8 STDDEV_POPファンクション, 7.8 STDDEV_SAMPファンクション, 7.8 STOP LOGICAL STANDBY句

ALTER DATABASE, 10.2, 10.2

STORAGE句

ALTER CLUSTER, 10.2

ALTER INDEX, 10.2

ALTER MATERIALIZED VIEW LOG, 11

CREATE MATERIALIZED VIEW LOG, 15

CREATE TABLE, 8

CREATE MATERIALIZED VIEW LOG。「CREATE TABLE」を参照

記憶域パラメータ

デフォルトの変更, 12

リセット, 19, 19

ストレージ・スナップショットの最適化, 10.2 STORE IN句

ALTER TABLE, 12, 16

ストアド・ファンクション, 14 文字列リテラル。「テキスト・リテラル」を参照。

データベースのキャラクタ・セットへの変換, 2.3.1

文字列

ASCII値への変換, 7.8

Unicodeへの変換, 7.8

Structured Query Language(SQL)

説明, 1

ファンクション, 7.1

キーワード, A.1.1

Oracleのツール製品のサポート, 1.5

パラメータ, A.1.1

規格, 1.2, C

文

コストの判断, 18

構文, 10.2, A.1 構造

ロック, B.2

部分正規表現

正規表現, 7.8, 7.8

SUBMULTISET条件, 6.6.4 SUBPARTITION BY HASH句

CREATE TABLE, 16, 16

SUBPARTITION BY LIST句

CREATE TABLE, 16

SUBPARTITION句

ANALYZE, 13

DELETE, 17

INSERT, 18

LOCK TABLE, 18

UPDATE, 19

サブパーティション・テンプレート

作成, 12

置換え, 12

拡張サブパーティション表名

DML文, 2.9.4

制限事項, 2.9.4

構文, 2.9.4

サブパーティション

追加, 12, 12

行の追加, 18

エクステントの割当て, 12

結合, 12, 12

非パーティション表への変換, 12

作成, 16

テンプレートの作成, 12, 16

未使用領域の解放, 12

表との交換, 12

ハッシュ, 16

行の挿入, 18

リスト, 16

リスト・サブパーティションの追加, 12

ロック, 18

挿入操作のロギング, 12

別のセグメントへの移動, 12

物理属性

変更, 12

行の削除, 12, 17 名前の変更, 12 値の変更, 19 指定, 16 テンプレートの作成, 16 テンプレートの削除, 12 テンプレートの置換え, 12 副問合せ, 9.1, 9.7, 19, 19, 19

副問合せを含む, 9.7

相関, 9.7

定義済, 9.1

拡張された副問合せのネスト解除, 9.8

インライン・ビュー, 9.7

ネスト, 9.7

過去のデータ, 19

スカラー, 5.14

表データの挿入, 16

ネスト解除, 9.8

式のかわりに使用, 5.14

SUBSTRファンクション, 7.8 SUBSTR2ファンクション, 7.8 SUBSTR4ファンクション, 7.8 SUBSTRBファンクション, 7.8 SUBSTRCファンクション, 7.8 小計値

導出, 19

サブタイプ

安全な削除, 18

SUMファンクション, 7.8 サプリメンタル・ロギング

識別キー(フル), 10.2

最小, 10.2

SUSPEND句

ALTER SYSTEM, 11

長期スタンバイ・リカバリ・モード, 10.2 SWITCH LOGFILE句

ALTER SYSTEM, 11

SYNC WITH PRIMARY

ALTER SESSIONの句, 11

同期リフレッシュ, 15 シノニム

定義の変更, 18

作成, 16

システム権限の付与, 18

ローカル, 16

プライベート・シノニムの削除, 18

パブリック, 16

削除, 18

リモート, 16 データベースからの削除, 18 名前の変更, 18, 18 シノニム, 16 構文図, A.1

ループ, A.1.3

複数の部分に分割された図, A.1.4

SYSユーザー

パスワードの割当て, 14

SYS_CONNECT_BY_PATHファンクション, 7.8 SYS_CONTEXTファンクション, 7.8 SYS_DBURIGENファンクション, 7.8 SYS_EXTRACT_UTCファンクション, 7.8 SYS_GUIDファンクション, 7.8 SYS_NC_ROWINFO$列, 16, 17 SYS_OP_ZONE_IDファンクション, 7.8 SYS_SESSION_ROLESネームスペース, 7.8 SYS_TYPEIDファンクション, 7.8 SYS_XMLAGGファンクション, 7.8 SYS_XMLGENファンクション, 7.8 SYSAUX句

CREATE DATABASE, 14

SYSAUX表領域

作成, 14, 16

SYSBACKUPシステム権限, 18 SYSDATEファンクション, 7.8 SYSDBAシステム権限, 18 SYSDGシステム権限, 18 SYSKMシステム権限, 18 SYSOPERシステム権限, 18 システム変更番号

取得,3.7

システム制御文, 10.1.5

PL/SQLサポート, 10.1.5

システム・グローバル領域

フラッシュ, 11, 11

更新, 11

システム・パラメータ

GLOBAL_TOPIC_ENABLED, 11

システム・パーティション化, 16 システム権限

ADMINISTER ANY SQL TUNING SET, 18

ADMINISTER DATABASE TRIGGER, 18

ADMINISTER KEY MANAGEMENT, 18

ADMINISTER SQL MANAGEMENT OBJECT, 18, 18

ADMINISTER SQL TUNING SET, 18

ADVISOR, 18

ALTER ANY CLUSTER, 18

ALTER ANY CUBE, 18

ALTER ANY CUBE DIMENSION, 18

ALTER ANY DIMENSION, 18

ALTER ANY INDEX, 18

ALTER ANY INDEXTYPE, 18

ALTER ANY LIBRARY, 18

ALTER ANY MATERIALIZED VIEW, 18

ALTER ANY MINING MODEL, 18

ALTER ANY OPERATOR, 18

ALTER ANY OUTLINE, 18

ALTER ANY PROCEDURE, 18

ALTER ANY ROLE, 18

ALTER ANY SEQUENCE, 18

ALTER ANY SQL PROFILE, 18

ALTER ANY SQL TRANSLATION PROFILE, 18

ALTER ANY TABLE, 18

ALTER ANY TRIGGER, 18

ALTER ANY TYPE, 18

ALTER DATABASE, 18

ALTER DATABASE LINK, 18

ALTER PROFILE, 18

ALTER PUBLIC DATABASE LINK, 18

ALTER RESOURCE COST, 18

ALTER ROLLBACK SEGMENT, 18

ALTER SESSION, 18

ALTER SYSTEM, 18

ALTER TABLESPACE, 18

ALTER USER, 18

ANALYZE ANY, 18

AUDIT ANY, 18

AUDIT SYSTEM, 18

BACKUP ANY TABLE, 18

BECOME USER, 18

CHANGE NOTIFICATION, 18

COMMENT ANY MINING MODEL, 18

COMMENT ANY TABLE, 18

CREATE ANY CLUSTER, 18

CREATE ANY CONTEXT, 18

CREATE ANY CUBE, 18

CREATE ANY CUBE BUILD PROCESS, 18

CREATE ANY CUBE DIMENSION, 18

CREATE ANY DIMENSION, 18

CREATE ANY DIRECTORY, 18

CREATE ANY INDEX, 18

CREATE ANY INDEXTYPE, 18

CREATE ANY JOB, 18

CREATE ANY LIBRARY, 18

CREATE ANY MATERIALIZED VIEW, 18

CREATE ANY MEASURE FOLDER, 18

CREATE ANY MINING MODEL, 18

CREATE ANY OPERATOR, 18

CREATE ANY OUTLINE, 18

CREATE ANY PROCEDURE, 18

CREATE ANY SEQUENCE, 18

CREATE ANY SQL PROFILE, 18

CREATE ANY SQL TRANSLATION PROFILE, 18

CREATE ANY SYNONYM, 18

CREATE ANY TABLE, 18

CREATE ANY TRIGGER, 18

CREATE ANY TYPE, 18

CREATE ANY VIEW, 18

CREATE CLUSTER, 18

CREATE CUBE, 18

CREATE CUBE BUILD PROCESS, 18

CREATE CUBE DIMENSION, 18

CREATE DATABASE LINK, 18

CREATE DIMENSION, 18

CREATE EXTERNAL JOB, 18

CREATE INDEXTYPE, 18

CREATE JOB, 18

CREATE LIBRARY, 18

CREATE MATERIALIZED VIEW, 18

CREATE MEASURE FOLDER, 18

CREATE MINING MODEL, 18

CREATE OPERATOR, 18

CREATE PLUGGABLE DATABASE, 18

CREATE PROCEDURE, 18

CREATE PROFILE, 18

CREATE PUBLIC DATABASE LINK, 18

CREATE PUBLIC SYNONYM, 18

CREATE ROLE, 18

CREATE ROLLBACK SEGMENT, 18

CREATE SEQUENCE, 18

CREATE SESSION, 18

CREATE SQL TRANSLATION PROFILE, 18

CREATE SYNONYM, 18

CREATE TABLE, 18

CREATE TABLESPACE, 18

CREATE TRIGGER, 18

CREATE TYPE, 18

CREATE USER, 18

CREATE VIEW, 18

DEBUG ANY PROCEDURE, 18

DELETE ANY CUBE DIMENSION, 18

DELETE ANY MEASURE FOLDER, 18

DELETE ANY TABLE, 18

DROP ANY CLUSTER, 18

DROP ANY CONTEXT, 18

DROP ANY CUBE, 18

DROP ANY CUBE BUILD PROCESS, 18

DROP ANY CUBE DIMENSION, 18

DROP ANY DIMENSION, 18

DROP ANY DIRECTORY, 18

DROP ANY INDEX, 18

DROP ANY INDEXTYPE, 18

DROP ANY LIBRARY, 18

DROP ANY MATERIALIZED VIEW, 18

DROP ANY MEASURE FOLDER, 18

DROP ANY MINING MODEL, 18

DROP ANY OPERATOR, 18

DROP ANY OUTLINE, 18

DROP ANY PROCEDURE, 18

DROP ANY ROLE, 18

DROP ANY SEQUENCE, 18

DROP ANY SQL PROFILE, 18

DROP ANY SQL TRANSLATION PROFILE, 18

DROP ANY SYNONYM, 18

DROP ANY TABLE, 18

DROP ANY TRIGGER, 18

DROP ANY TYPE, 18

DROP ANY VIEW, 18

DROP PROFILE, 18

DROP PUBLIC DATABASE LINK, 18

DROP PUBLIC SYNONYM, 18

DROP ROLLBACK SEGMENT, 18

DROP TABLESPACE, 18

DROP USER, 18

EXECUTE ANY CLASS, 18

EXECUTE ANY INDEXTYPE, 18

EXECUTE ANY LIBRARY, 18

EXECUTE ANY OPERATOR, 18

EXECUTE ANY PROCEDURE, 18

EXECUTE ANY PROGRAM, 18

EXECUTE ANY TYPE, 18

EXEMPT ACCESS POLICY, 18

EXEMPT REDACTION POLICY, 18

FLASHBACK ANY TABLE, 18, 18, 18

FLASHBACK ARCHIVE ADMINISTER, 18

ジョブ・スケジューラのタスク, 18

アドバイザ・フレームワーク, 18

FORCE ANY TRANSACTION, 18

FORCE TRANSACTION, 18

GLOBAL QUERY REWRITE, 18

GRANT ANY OBJECT PRIVILEGE, 18

GRANT ANY PRIVILEGE, 18

GRANT ANY ROLE, 18

付与, 15, 18

ロール, 18

ユーザー, 18

PUBLIC, 18

INHERIT ANY PRIVILEGES, 18 INSERT ANY CUBE DIMENSION, 18 INSERT ANY MEASURE FOLDER, 18 INSERT ANY TABLE, 18 KEEP DATE TIME, 18 KEEP SYSGUID, 18 リスト, 13, 18 LOCK ANY TABLE, 18 LOGMINING, 18 MANAGE SCHEDULER, 18 MANAGE TABLESPACE, 18 MERGE ANY VIEW, 18 ON COMMIT REFRESH, 18 PURGE DBA_RECYCLEBIN, 18 QUERY REWRITE, 18 READ ANY TABLE, 18 RESTRICTED SESSION, 18, 18 RESUMABLE, 18 取消し, 18

ロール, 18

ユーザー, 18

PUBLIC, 18

SELECT ANY CUBE, 18 SELECT ANY CUBE DIMENSION, 18 SELECT ANY DICTIONARY, 18 SELECT ANY MINING MODEL, 18 SELECT ANY SEQUENCE, 18 SELECT ANY TABLE, 18 SET CONTAINER, 18 SYSBACKUP, 18 SYSDBA, 18 SYSDG, 18 SYSKM, 18 SYSOPER, 18 TRANSLATE ANY SQL, 18 UNDER ANY TYPE, 18 UNDER ANY VIEW, 18 UNLIMITED TABLESPACE, 18 UPDATE ANY CUBE, 18 UPDATE ANY CUBE BUILD PROCESS, 18 UPDATE ANY CUBE DIMENSION, 18 UPDATE ANY TABLE, 18 USE ANY SQL TRANSLATION PROFILE, 18 SYSTEM表領域

ローカル管理, 14

SYSTEMユーザー

パスワードの割当て, 14

SYSTIMESTAMPファンクション, 7.8

T

TABLE句

ANALYZE, 13

INSERT, 18

SELECT, 19, 19

TRUNCATE, 19

UPDATE, 19, 19

TABLEコレクション式, 19 表の圧縮, 11, 12, 15, 16

高度な行圧縮, 16

ベーシック, 16

バルク・ロード操作中, 16

データのアーカイブ, 16

ハイブリッド列, 16

表ロック

問合せ, 18

使用禁止, 12

継続期間, 18

使用可能化, 12

EXCLUSIVE, 18, 18

モード, 18

パーティション, 18

リモート・データベース, 18

サブパーティション, 18

ROW EXCLUSIVE, 18, 18

ROW SHARE, 18, 18

SHARE, 18

SHARE ROW EXCLUSIVE, 18

SHARE UPDATE, 18

表パーティション

圧縮, 12, 16

REF表制約, 8

CREATE TABLE, 16

表

制約の追加, 12

行の追加, 18

別名, 2.9.5

CREATE INDEX, 14

DELETE, 17

エクステントの割当て, 12 クラスタへの割当て, 16 並列度の変更, 12 既存値の変更, 19 統計情報の収集, 13 コメント, 13 圧縮, 12, 16 作成, 16

複数, 15

コメントの作成, 13 データベースの外部へのデータの格納, 16 未使用領域の解放, 12 デフォルト物理属性

変更, 12

並列度

指定, 16

統計タイプの関連付けの解除, 18 削除

クラスタ, 17

所有者, 18

索引, 18

パーティション, 18

追跡の有効化, 16 外部, 16

作成, 16

制限事項, 16

外部構成, 16 以前のバージョンへのフラッシュバック, 18 システム権限の付与, 18 ヒープ構成, 16 索引構成, 16

オーバーフロー・セグメント, 16

索引ブロックの領域, 16

副問合せを使用した行の挿入, 16 ダイレクト・パスを使用した挿入, 18 問合せ内での結合, 19 LOB記憶特性, 8 ロック, 18 ロギング

挿入操作, 12

表作成, 16

移行行および連鎖行, 13 移動, 12 新しいセグメントへの移動, 12 索引構成表の移動, 12 ネスト

記憶特性, 16

オブジェクト

作成, 16

問合せ, 16

XMLTypeの作成, 16 構成の定義, 16 パラレル作成, 16 パラレル化

デフォルト値の設定, 16

パーティション属性, 12 パーティション化, 2.9.4, 16, 16

行をパーティション間で移動可能にする, 12

デフォルト属性, 12

物理属性

変更, 12

ごみ箱からの消去, 18 読取り専用モード, 12 読取り/書込みモード, 12 参照パーティション, 12, 12, 16 リレーショナル

作成, 16

リモート・ビューへのアクセス, 14 データベースからの削除, 18 行の削除, 17 名前の変更, 12, 18 制限

ブロックのレコード, 12

データの取出し, 19 キャッシュへのブロックの保存, 16 SQL例, 16 記憶域属性

定義, 16

記憶特性

定義, 8

記憶域プロパティ, 16, 16 サブパーティション属性, 12 シノニム, 16 表領域

定義, 16, 16

一時

データの存続期間, 16

セッション固有, 16

トランザクション固有, 16

非クラスタ化, 17 ビューを介した更新, 17 構造の検証, 13 XMLTypeビューの問合せ, 16 TABLESPACE句

ALTER INDEX ... REBUILD, 10.2

CREATE CLUSTER, 14

CREATE INDEX, 14

CREATE MATERIALIZED VIEW, 15

CREATE MATERIALIZED VIEW LOG, 15

CREATE TABLE, 16

表領域, 12

ユーザーの領域の割当て, 17

書込み操作の許可, 12

自動セグメント領域管理, 16

データファイルのバックアップ, 12

bigfile, 16

データベースのデフォルト表領域, 14

デフォルトの一時表領域, 14

サイズ変更, 12

UNDO, 14

オンライン化, 12, 16 未使用エクステントの結合, 12 変換

永続表領域から一時表領域, 12

一時表領域から永続表領域, 12

作成, 16 データファイル

追加, 12

名前の変更, 12

デフォルト, 10.2

ユーザーへの指定, 13

デフォルトの永続表領域, 14 デフォルトの一時表領域, 10.2

名前の確認, 10.2

メディア・リカバリの設計, 10.2 コンテンツの削除, 18 暗号化, 8, 16 オンライン・バックアップの終了, 12 エクステント・サイズ, 16 システム権限の付与, 18 FLASHBACKモード, 12, 16 FORCE LOGGINGモード, 12, 16 ローカル管理, 8

変更, 12

ロギング属性, 12, 16 エクステント管理, 16 読取り専用, 12 損失または破損した場合の再構成, 10.2, 10.2 リカバリ, 10.2, 10.2 データベースからの削除, 18 名前の変更, 12 未使用のエクステント・サイズ, 12 smallfile, 16

データベースのデフォルト表領域, 14

デフォルトの一時表領域, 14

UNDO, 14

指定

データファイル, 16

表, 16

ユーザー, 17

索引再構築, 12

オフライン化, 12, 16 一時ファイル

追加, 12

一時

作成, 16

データベースの定義, 14

縮小, 12

ユーザーへの指定, 13, 17

UNDO

変更, 12

作成, 14, 16

削除, 18

TANファンクション, 7.8 TANHファンクション, 7.8 TDE。「透過的データ暗号化」を参照 一時ファイル

オンライン化, 10.2

表領域の定義, 16, 16, 16

データベースの定義, 14

自動拡張の使用禁止化, 10.2

削除, 10.2, 12

自動拡張の使用可能化, 8, 10.2

自動拡張, 8

名前の変更, 10.2

サイズ変更, 10.2

再利用, 8

縮小, 12

サイズ, 8

指定, 8, 8

オフライン化, 10.2

TEMPFILE句

ALTER DATABASE, 10.2, 10.2

TEMPORARY句

ALTER TABLESPACE, 12

CREATE TABLESPACE, 16

一時表

作成, 16, 16

セッション固有, 16

トランザクション固有, 16

TEMPORARY TABLESPACE句

ALTER USER, 13

CREATE USER, 17

ALTER USER。「CREATE USER」を参照

一時表領域グループ

ユーザーへの再割当て, 13

ユーザーへの指定, 17

一時表領域

作成, 16

デフォルト, 10.2

データベース作成時のエクステント管理の指定, 14

ユーザーへの指定, 13, 17

TEST句

ALTER DATABASE ... RECOVER, 10.2

セットのテスト, 6.6.1 TH日時書式要素の接尾辞, 2.4.2.5 スループット

最適化, 2.6.4.1

THSP日時書式要素の接尾辞, 2.4.2.5 TIMEデータ型

DB2, 2.1.4, 2.1.4

SQL/DS, 2.1.4, 2.1.4

時刻書式モデル

短い書式, 2.4.1.1, 2.4.2.1.2

タイムゾーン

タイムゾーン・データファイルの変更, 7.8

データの変換, 5.7

セッションの確認, 7.8

書式設定, 2.4.2.1.2

データベースのタイムゾーンの指定, 14

TIME_ZONEセッション・パラメータ, 11 タイムスタンプ

ローカル・タイムゾーンへの変換, 5.7

TIMESTAMPデータ型, 2.1.1.11

DB2, 2.1.4, 2.1.4

SQL/DS, 2.1.4, 2.1.4

TIMESTAMP WITH LOCAL TIME ZONEデータ型, 2.1.1.13 TIMESTAMP WITH TIME ZONEデータ型, 2.1.1.12 TIMESTAMP_TO_SCNファンクション, 7.8 TO SAVEPOINT句

ROLLBACK, 18

TO_BINARY_DOUBLEファンクション, 7.8 TO_BINARY_FLOATファンクション, 7.8 TO_BLOBファンクション, 7.8 TO_CHAR(文字)ファンクション, 7.8 TO_CHAR(日時)ファンクション, 7.8

書式モデル, 2.4.2, 2.4.3

TO_CHAR(数値)ファンクション, 7.8

書式モデル, 2.4.1, 2.4.3

TO_CLOBファンクション, 7.8 TO_DATEファンクション, 7.8

書式モデル, 2.4.2, 2.4.2.4, 2.4.3

TO_DSINTERVALファンクション, 7.8 TO_LOBファンクション, 7.8 TO_MULTI_BYTEファンクション, 7.8 TO_NCHAR(文字)ファンクション, 7.8 TO_NCHAR(日時)ファンクション, 7.8 TO_NCHAR(数値)ファンクション, 7.8 TO_NCLOBファンクション, 7.8 TO_NUMBERファンクション, 7.8

書式モデル, 2.4.1

TO_SINGLE_BYTEファンクション, 7.8 TO_TIMESTAMPファンクション, 7.8 TO_TIMESTAMP_TZファンクション, 7.8 TO_YMINTERVALファンクション, 7.8 トップレベルSQL文, 13 上位N番のレポート, 3.9, 7.8, 7.8, 7.8, 19 追跡

表に対する有効化, 12, 16

トランザクション制御文, 10.1.3

PL/SQLサポート, 10.1.3

トランザクション

完了, 11

割当て

ロールバック・セグメント, 19

自動コミット, 13 変更の確定, 13 コメント, 13 分散トランザクションの強制実行, 11 終了, 13 暗黙的コミット, 10.1.1, 10.1.2, 10.1.4, 10.1.5 インダウト

コミット, 13

強制実行, 13

変換, 19

分離レベル, 19 ロックの解除, 13 名前の指定, 19 読取り専用, 19 読み書き両用, 19 ロールバック, 11, 18

セーブポイント, 18

セーブポイント, 19 TRANSLATE ... USINGファンクション, 7.8 TRANSLATE ANY SQLシステム権限, 18 TRANSLATEファンクション, 7.8 TRANSLATE SQLオブジェクト権限

ユーザー, 18

透過的データ暗号化, 16

キー管理, 10.2

マスター鍵, 11

TREATファンクション, 7.8 トリガー

コンパイル, 13

作成, 16

データベース

変更, 13

削除, 18, 18

使用禁止, 12, 13 使用可能化, 12, 13, 13, 16 システム権限の付与, 18 INSTEAD OF

削除, 17

再作成, 16 データベースからの削除, 18 名前の変更, 13 TRIMファンクション, 7.8 TRUNC(日付)ファンクション, 7.8

書式モデル, 7.8

TRUNC(数値)ファンクション, 7.8 TRUNCATE PARTITION句

ALTER TABLE, 12

TRUNCATE SUBPARTITION句

ALTER TABLE, 12

TRUNCATE_CLUSTER文, 19 TRUNCATE_TABLE文, 19 型コンストラクタ式, 5.15 型。「オブジェクト型」または「データ型」を参照 TYPES句

ASSOCIATE STATISTICS, 13, 13

DISASSOCIATE STATISTICS, 17

TZ_OFFSETファンクション, 7.8

U

UIDファンクション, 7.8

単項演算子, 4.1.1

UNDER ANY TYPEシステム権限, 18

UNDER ANY VIEWシステム権限, 18

UNDER句

CREATE VIEW, 17

UNDERオブジェクト権限

型, 18

ビュー, 18

UNDER_PATH条件, 6.9.2 UNDO

ロールバック, 11, 14

システム管理, 11, 14

UNDO表領域句

CREATE DATABASE, 14

CREATE TABLESPACE, 16

UNDO表領域

作成, 14, 16

削除, 18

変更, 12

期限が切れていないデータの保持, 12, 16

UNDO_RETENTION初期化パラメータ

ALTER SYSTEMでの設定, 18

統合監査ポリシー

コメント, 13

作成, 14

削除, 17

変更, 10.2

統合監査

ALTER AUDIT POLICY文, 10.2

AUDIT文, 13

CREATE AUDIT POLICY文, 14

DROP AUDIT POLICY文, 17

NOAUDIT文, 18

UNIFORM句

CREATE TABLESPACE, 16

UNION ALL集合演算子, 4.5, 19 UNION集合演算子, 4.5, 19 UNIQUE句

CREATE INDEX, 14

CREATE TABLE, 16

SELECT, 19

一意制約

条件, 14

使用可能, 16

索引, 16

一意の要素, 7.8 一意索引, 14 一意の問合せ, 19 UNISTRファンクション, 7.8 ユニバーサルROWID。「UROWID」を参照

外部キー表, 2.1.3.2

索引構成表, 2.1.3.2

説明, 2.1.3.2

UNLIMITED TABLESPACEシステム権限, 18 UNNESTヒント, 2.6.4.89 コレクション・ネスト解除, 19

例, 19

副問合せのネスト解除, 9.8 アンピボット操作, 19

例, 19

構文, 19

UNQUIESCE句

ALTER SYSTEM, 11

UNRECOVERABLE, 10.2, 16

「NOLOGGING句」を参照

未ソート索引, 14 UNUSABLE句

ALTER INDEX, 10.2

UNUSABLE LOCAL INDEXES句

ALTER MATERIALIZED VIEW, 11

ALTER TABLE, 12

UPDATE ANY CUBE BUILD PROCESSシステム権限, 18 UPDATE ANY CUBE DIMENSIONシステム権限, 18 UPDATE ANY CUBEシステム権限, 18 UPDATE ANY TABLEシステム権限, 18 UPDATE BLOCK REFERENCES句

ALTER INDEX, 10.2, 10.2

UPDATE GLOBAL INDEXES句

ALTER TABLE, 12

UPDATEオブジェクト権限

表, 18

ビュー, 18

OLAPキューブ, 18

OLAPキューブ・ディメンション, 18

更新操作

サプリメンタル・ログ・データの収集, 10.2

UPDATE SET句

MERGE, 18

UPDATE文, 19 更新

同時の挿入, 18

MERGEの使用, 18, 18

UPDATEXMLファンクション, 7.8 UPGRADE句

ALTER DATABASE, 10.2

ALTER TABLE, 12

UPPERファンクション, 7.8 URL

生成, 7.8

UROWIDデータ型, 2.1.3.2 USABLE句

ALTER INDEX, 10.2

USE ANY SQL TRANSLATION PROFILEシステム権限, 18 USEオブジェクト権限

SQL翻訳プロファイル, 18

USE_CONCATヒント, 2.6.4.90 USE_CUBEヒント, 2.6.4.91 USE_HASHヒント, 2.6.4.92 USE_MERGEヒント, 2.6.4.93 USE_NLヒント, 2.6.4.94 USE_NL_WITH_INDEXヒント, 2.6.4.95 USE_PRIVATE_OUTLINESセッション・パラメータ, 11 USE_STORED_OUTLINESセッション・パラメータ, 11, 11 USERファンクション, 7.8 ユーザー・グループ

メンバーの追加または削除, 10.2

ディスク・グループへの追加, 10.2

ディスク・グループからの削除, 10.2

USER SYS句

CREATE DATABASE, 14

USER SYSTEM句

CREATE DATABASE, 14

USER_COL_COMMENTSデータ・ディクショナリ・ビュー, 13 USER_INDEXTYPE_COMMENTSデータ・ディクショナリ・ビュー, 13 USER_MVIEW_COMMENTSデータ・ディクショナリ・ビュー, 13 USER_OPERATOR_COMMENTSデータ・ディクショナリ・ビュー, 13 USER_TAB_COMMENTSデータ・ディクショナリ・ビュー, 13 ユーザー定義ファンクション, 7.8

名前の優先順位, 7.8

ネーミング規則, 7.8

ユーザー定義演算子, 4.7 ユーザー定義の統計情報

削除, 17, 17, 17, 18, 18

ユーザー定義型, 2.1.5 USERENVファンクション, 7.8 USERENVネームスペース, 7.8 ユーザー

領域の割当て, 17

データベース・リンク, 14

割当て

デフォルト・ロール, 13

プロファイル, 17

認証, 13 リモート・サーバーの認証, 14 認証の変更, 13 作成, 17 デフォルトの表領域, 13, 17 表およびビューへのアクセスの制限, 18 外部, 15, 17 グローバル, 15, 17 システム権限の付与, 18 ローカル, 15, 17 アカウントのロック, 17 オペレーティング・システム

ディスク・グループへの追加, 10.2

ディスク・グループからの削除, 10.2

パスワードの期限切れ, 17 データベースからの削除, 18 SQL例, 17 一時表領域, 13, 17 USING BFILE句

CREATE JAVA, 14, 14

USING BLOB句

CREATE JAVA, 14

USING句

ALTER INDEXTYPE, 10.2

ASSOCIATE STATISTICS, 13, 13

CREATE DATABASE LINK, 14

CREATE INDEXTYPE, 14

CREATE PLUGGABLE DATABASE, 15

USING CLOB句

CREATE JAVA, 14

USING INDEX句

ALTER MATERIALIZED VIEW, 11

ALTER TABLE, 12

制約, 8

CREATE MATERIALIZED VIEW, 15

CREATE TABLE, 16

USING NO INDEX句

CREATE MATERIALIZED VIEW, 15

USING ROLLBACK SEGMENT句

ALTER MATERIALIZED VIEW ... REFRESH, 11

CREATE MATERIALIZED VIEW, 15

UTC

日時値から抽出, 7.8

UTCオフセット

タイムゾーン地域名に置換, 2.3.3

UTLCHN.SQLスクリプト, 13 UTLEXPT1.SQLスクリプト, 12 UTLXPLAN.SQLスクリプト, 18

V

VALIDATE句

DROP TYPE, 18

VALIDATE REF UPDATE句

ANALYZE, 13

VALIDATE STRUCTURE句

ANALYZE, 13

検証

クラスタ, 13

データベース・オブジェクト

オフライン, 13

オンラインのデータベース・オブジェクト, 13 索引, 13 表, 13 VALUEファンクション, 7.8 VALUES句

CREATE INDEX, 14

INSERT, 18

VALUES LESS THAN句

CREATE TABLE, 16

VAR_POPファンクション, 7.8 VAR_SAMPファンクション, 7.8 VARCHARデータ型, 2.1.1.4 VARCHAR2データ型, 2.1.1.3

NUMBERへの変換, 2.4.1

VARGRAPHICデータ型

DB2, 2.1.4, 2.1.4

SQL/DS, 2.1.4, 2.1.4

VARIANCEファンクション, 7.8 VARRAY句

ALTER TABLE, 12, 12

VARRAY列プロパティ

ALTER TABLE, 12, 12, 12

CREATE MATERIALIZED VIEW, 15, 15

CREATE TABLE, 16, 16

VARRAY, 2.1.5.3

戻り値の変更, 12

ネストした表との比較, 2.2.5

比較規則, 2.2.5

作成, 17

本体の削除, 18

仕様部の削除, 18

列プロパティの変更, 12

記憶特性, 12, 12, 16

表外に格納, 2.1.5.3

バージョン問合せ

疑似列, 3.3

ビュー制約, 8, 17

マテリアライズド・ビュー, 8

削除, 18

変更, 13

ビュー

実表

行の追加, 18

変更

定義, 18

実表の値, 19

作成

実表の前, 17

コメント, 13

複数, 15

オブジェクト・サブビューの作成, 17 定義者権限, 17 定義, 17 制約の削除, 13 エディショニング, 17 システム権限の付与, 18 実行者権限, 17 制約の変更, 13 オブジェクト・ビューの作成, 17 再コンパイル, 13 再作成, 17 リモート・ビューへのアクセス, 14 削除

データベース, 18

実表の行, 17

名前の変更, 18 データの取出し, 19 副問合せ, 17

制限, 17

シノニム, 16 更新可能, 17 結合

キー保存表, 17

更新可能化, 17

XMLType, 17 XMLTypeの作成, 17 XMLTypeの問合せ, 17 仮想列

表への追加, 12

作成, 16

変更, 12

VSIZEファンクション, 7.8

W

WHENEVER NOT SUCCESSFUL句

NOAUDIT, 18

WHENEVER SUCCESSFUL句

AUDIT sql_statements, 13

NOAUDIT, 18

WHERE句

DELETE, 17

問合せおよび副問合せ, 19

SELECT, 9.3

UPDATE, 19

WIDTH_BUCKETファンクション, 7.8 WITH ... AS句

SELECT, 19

WITH ADMIN OPTION句

GRANT, 18

WITH CHECK OPTION句

CREATE VIEW, 17, 17

DELETE, 17

INSERT, 18

SELECT, 19

UPDATE, 19

WITH句

SELECT, 19

WITH GRANT OPTION句

GRANT, 18

WITH HIERARCHY OPTION

GRANT, 18

WITH INDEX CONTEXT句

CREATE OPERATOR, 15

WITH OBJECT ID句

CREATE MATERIALIZED VIEW LOG, 15

WITH OBJECT IDENTIFIER句

CREATE VIEW, 17

WITH OBJECT OID。「WITH OBJECT IDENTIFIER」を参照。 WITH PRIMARY KEY句

ALTER MATERIALIZED VIEW, 11

CREATE MATERIALIZED VIEW ... REFRESH, 15

CREATE MATERIALIZED VIEW LOG, 15

WITH READ ONLY句

CREATE VIEW, 17, 17

DELETE, 17

INSERT, 18

SELECT, 19

UPDATE, 19

WITH ROWID句

REF制約, 8

CREATE MATERIALIZED VIEW ... REFRESH, 15

CREATE MATERIALIZED VIEW LOG, 15

WITH SEQUENCE句

CREATE MATERIALIZED VIEW LOG, 15

WRITE句

COMMIT, 13

WRITEオブジェクト権限

ディレクトリ, 18

X

XML

条件, 6.9

データ

記憶域, 16

データベース・リポジトリ

SQLアクセス, 6.9.1, 6.9.2

ドキュメント

XMLのフラグメントから生成, 7.8

データベースからの検索, 7.8

例, F.2 書式モデル, 2.4.5 フラグメント, 7.8 ファンクション, 7.2.12 XMLAGGファンクション, 7.8 XMLCASTファンクション, 7.8 XMLCDATAファンクション, 7.8 XMLCOLATTVALファンクション, 7.8 XMLCOMMENTファンクション, 7.8 XMLCONCATファンクション, 7.8 XMLDATA疑似列, 3.10 XMLDIFFファンクション, 7.8 XMLELEMENTファンクション, 7.8 XMLEXISTSファンクション, 7.8 XMLFORESTファンクション, 7.8 XMLGenFormatTypeオブジェクト, 2.4.5 XMLIndex

作成, 14

変更, 10.2

XMLISVALIDファンクション, 7.8 XMLPARSEファンクション, 7.8 XMLPATCHファンクション, 7.8 XMLPIファンクション, 7.8 XMLQUERYファンクション, 7.8 XMLROOTファンクション, 7.8 XMLスキーマ

表への追加, 16

単一および複数, 16

XMLSEQUENCEファンクション, 7.8 XMLSERIALIZEファンクション, 7.8 XMLTABLEファンクション, 7.8 XMLTRANSFORMファンクション, 7.8 XMLType列

プロパティ, 12, 16

記憶域, 16, 16

バイナリXML書式での保存, 16

XMLType記憶域句

CREATE TABLE, 16

XMLType表

作成, 16, 16

索引の作成, 14

XMLTypeビュー, 17

問合せ, 17

Z

ゾーン・マップ

作成, 15

変更, 11

データベースからの削除, 17

Oracleの法律上の注意点

コピーライト

Copyright © 1994-2017, Oracle and/or its affiliates. All rights reserved.

ライセンス制約の保証と結果的に生じる損害の免責

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

保証免責

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクルまでご連絡ください。

制限付権利について

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.

危険な用途への使用について

このソフトウェアまたはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアまたはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、Oracle Corporationおよびその関連会社は一切の責任を負いかねます。

商標と登録商標について

OracleおよびJavaはオラクルおよびその関連会社の登録商標です。その他の社名、商品名等は各社の商標または登録商標である場合があります。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

第三者のコンテンツ、製品、サービスに対する免責事項

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

Pre-General Availability (一般提供前)版のドキュメントについて

このドキュメントがPre-General Availability (一般提供前)版の場合:

このドキュメントはPre-General Availability (一般提供前)版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。Oracle Corporationおよびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。

非公開のPre-General Availability (一般提供前)版のドキュメントについて

このドキュメントが非公開のPre-General Availability (一般提供前)版の場合:

このドキュメントに含まれる情報は、情報の共有のみを目的としたものであって、顧客諮問委員会(Customer Advisory Board)のメンバーとしてのお客様の立場でのみ、またはお客様のPre-General Availability Trial Agreement (Pre-GAトライアル契約)のみに従って検討されるべきものとします。マテリアル、コード、または機能の提供をお約束するものではなく、購入決定を行う際の判断材料とすべきではありません。このドキュメントに記載されている特徴または機能の開発、リリースおよび時期については、オラクルの裁量により決定されます。

このドキュメントには、ソフトウェアまたは印刷物などの形式を問わず、オラクルが独占的な権利を有する財産的情報が含まれています。この機密資料へのアクセスと使用は、お客様とオラクルとの間で締結され、お客様が遵守に同意した、Oracle Master Agreement、Oracle License and Oracle Services Agreement (オラクル・ライセンスおよびサービスに関する契約書)、Oracle Partner Network Agreement、Oracle Distribution Agreementまたはその他のライセンス契約の条件に従うものとします。このドキュメントとその内容の開示、コピー、複製および配布には、オラクルによる事前の承諾を必要とします。このドキュメントはライセンス契約の一部となるものではなく、オラクルおよびその子会社や関連会社との契約を構成するものではありません。

ドキュメントのアクセシビリティ

オラクルのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

サポートをご契約のお客様には、My Oracle Supportを通して電子支援サービスを提供しています。詳細情報は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info)か、聴覚に障害のあるお客様は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs)を参照してください。