Oracle® TimesTen In-Memory Database

SQLリファレンス

11gリリース2(11.2.2)

B66446-05(原本部品番号:E21642-12)

2015年3月

Oracle TimesTen In-Memory Database SQLリファレンス, 11gリリース2(11.2.2)

B66446-05

Copyright © 2011, 2015, 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およびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

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およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

目次

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

はじめに

- 対象読者

- 関連ドキュメント

- 表記規則

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

新機能

- リリース11.2.2.6.0の新機能

- リリース11.2.2.5.0の新機能

- リリース11.2.2.4.0の新機能

- リリース11.2.2.1.0の新機能

- リリース11.2.2.0.0の新機能

1 データ型

- データ型の仕様

- ANSI SQLデータ型

- Oracle型モードでの下位互換用にサポートされている型

- TimesTen型のマッピング

- 文字データ型

- CHAR

- NCHAR

- VARCHAR2

- NVARCHAR2

- 数値データ型

- NUMBER

- TT_BIGINT

- TT_INTEGER

- TT_SMALLINT

- TT_TINYINT

- 浮動小数点数

- BINARY_DOUBLE

- BINARY_FLOAT

- FLOATおよびFLOAT(n)

- BINARYデータ型およびVARBINARYデータ型

- 数値の優先順位

- LOBデータ型

- BLOB

- CLOB

- NCLOB

- NULLのLOBと空のLOBの違い

- LOBの初期化

- ROWIDデータ型

- 日時データ型

- DATE

- TIME

- TIMESTAMP

- TT_DATE

- TT_TIMESTAMP

- TimesTenの時間隔

- 時間隔データ型の使用

- DATEデータ型およびTIMEデータ型の使用

- タイム・ゾーン変換の処理

- 算術演算における日時データ型および時間隔データ型

- 日時および時間隔の算術演算の制限

- 記憶域要件

- データ型比較ルール

- 数値

- 日付値

- 文字値

- バイナリ・ソートおよび言語ソート

- 空白埋め比較セマンティクスおよび非空白埋め比較セマンティクス

- データ型変換

- 暗黙的なデータ型変換

- Null値

- INFおよびNAN

- 定数値

- 主キーの値

- InfおよびNaN(浮動小数点の条件)の選択

- InfおよびNaNを含む式

- オーバーフローと切り捨て

- アンダーフロー

- レプリケーションの制限

- TimesTen型モード(下位互換モード)

- TimesTen型モードでサポートされているデータ型

- TimesTen型モードでサポートされているOracleデータ型

2 名前、ネームスペースおよびパラメータ

- 基本名

- 所有者名

- 複合識別子

- ネームスペース

- 動的パラメータ

- 重複したパラメータ名

- パラメータからのデータ型の推測

3 式

- 式の指定

- 副問合せ

- 定数

- 書式モデル

- 数値書式モデル

- 日時書式モデル

- ROUNDおよびTRUNC日付関数の書式モデル

- TimesTen日時データ型TO_CHARの書式モデル

- CASE式

- ROWID

- ROWNUM擬似列

4 関数

- 数値関数

- 文字値を戻す文字関数

- 数値を戻す文字関数

- 文字列関数

- LOB関数

- NLSキャラクタ・セット関数

- 一般的な比較関数

- Null関連の比較関数

- 変換関数

- 日時関数

- 集計関数

- 分析関数

- SQL構文

- パラメータ

- エンコーディング関数

- ユーザー/セッション関数

- キャッシュ・グリッド関数

- ABS

- ADD_MONTHS

- ASCIISTR

- AVG

- CAST

- CHR

- CEIL

- COALESCE

- CONCAT

- COUNT

- CURRENT_USER

- DECODE

- DENSE_RANK

- EMPTY_BLOB

- EMPTY_CLOB

- EXTRACT

- FIRST_VALUE

- FLOOR

- GREATEST

- GROUP_ID

- GROUPING

- GROUPING_ID

- INSTR、INSTRB、INSTR4

- LAST_VALUE

- LEAST

- LENGTH、LENGTHB、LENGTH4

- LOWERおよびUPPER

- LPAD

- LTRIM

- MAX

- MIN

- MOD

- MONTHS_BETWEEN

- NCHR

- NLS_CHARSET_ID

- NLS_CHARSET_NAME

- NLSSORT

- NULLIF

- NUMTODSINTERVAL

- NUMTOYMINTERVAL

- NVL

- POWER

- RANK

- REPLACE

- ROUND (日付)

- ROUND (式)

- ROW_NUMBER

- RPAD

- RTRIM

- SESSION_USER

- SIGN

- SOUNDEX

- SQRT

- SUBSTR、SUBSTRB、SUBSTR4

- SUM

- SYS_CONTEXT

- SYSDATEおよびGETDATE

- SYSTEM_USER

- TIMESTAMPADD

- TIMESTAMPDIFF

- TO_BLOB

- TO_CHAR

- TO_CLOB

- TO_DATE

- TO_LOB

- TO_NCLOB

- TO_NUMBER

- TRIM

- TRUNC(日付)

- TRUNC (式)

- TT_HASH

- TTGRIDMEMBERID

- TTGRIDNODENAME

- TTGRIDUSERASSIGNEDNAME

- UID

- UNISTR

- USER

5 検索条件

- 検索条件の一般的な構文

- ALL/ NOT IN条件(副問合せ)

- ALL/ NOT IN条件(値リスト)

- ANY/ IN条件(副問合せ)

- ANY/ IN条件(値リスト)

- BETWEEN条件

- 比較条件

- EXISTS条件

- IS INFINITE条件

- IS NAN条件

- IS NULL条件

- LIKE条件

- NCHAR、NVARCHAR2およびNCLOBデータ型の文字列のパターン一致

6 SQL文

- SQL文内のコメント

- 文レベルのオプティマイザ・ヒント

- SQL構文

- パラメータ

- 説明

- 文レベルのオプティマイザ・ヒントをサポートするSQL文

- ヒントの理解

- 例

- ALTER ACTIVE STANDBY PAIR

- ALTER CACHE GROUP

- ALTER FUNCTION

- ALTER PACKAGE

- ALTER PROCEDURE

- ALTER REPLICATION

- ALTER SESSION

- ALTER TABLE

- ALTER USER

- CALL

- COMMIT

- CREATE ACTIVE STANDBY PAIR

- CREATE CACHE GROUP

- CREATE FUNCTION

- CREATE INDEX

- CREATE MATERIALIZED VIEW

- CREATE MATERIALIZED VIEW LOG

- CREATE PACKAGE

- CREATE PACKAGE BODY

- CREATE PROCEDURE

- CREATE REPLICATION

- CHECK CONFLICTS

- CREATE SEQUENCE

- CREATE SYNONYM

- CREATE TABLE

- 列定義

- 表のインメモリー列圧縮

- CREATE USER

- CREATE VIEW

- DELETE

- DROP ACTIVE STANDBY PAIR

- DROP CACHE GROUP

- DROP FUNCTION

- DROP INDEX

- DROP MATERIALIZED VIEW

- DROP MATERIALIZED VIEW LOG

- DROP PACKAGE [BODY]

- DROP PROCEDURE

- DROP REPLICATION

- DROP SEQUENCE

- DROP SYNONYM

- DROP TABLE

- DROP USER

- DROP VIEW

- FLUSH CACHE GROUP

- GRANT

- INSERT

- INSERT...SELECT

- LOAD CACHE GROUP

- MERGE

- REFRESH CACHE GROUP

- REFRESH MATERIALIZED VIEW

- REVOKE

- ROLLBACK

- SELECT

- WithClause

- SelectList

- TableSpec

- JoinedTable

- DerivedTable

- GROUP BY句

- SQL構文

- パラメータ

- 例

- ROLLUP、CUBEおよびGROUPING SETS句

- TRUNCATE TABLE

- UNLOAD CACHE GROUP

- UPDATE

- 結合更新

7 権限

- システム権限

- オブジェクト権限

- 権限の階層

- PUBLICロール

8 予約語

索引

はじめに

Oracle TimesTen In-Memory Database (TimesTen)は、高速なレスポンスとスループットのためのメモリーが最適化されたリレーショナル・データベースです。このデータベースは、実行時にメモリー内に完全に格納され、ディスク記憶域にデータを記録することでリカバリおよび再起動が可能です。レプリケーション機能によって、高可用性が実現されます。TimesTenでは、OracleインタフェースであるPL/SQL、OCIおよびPro*C/C++に加えて、標準的なアプリケーション・インタフェースであるJDBC、ODBCおよびODP.NETがサポートされます。TimesTenは、単独で利用することも、Oracle Databaseのキャッシュとしても利用できます。

対象読者

このドキュメントでは、TimesTen SQLの拡張を含む、TimesTen SQLのデータ型、文、式、関数のリファレンスを提供します。

このガイドを使用するには、データベース・システムの動作について理解している必要があります。また、SQL(Structured Query Language)の知識も必要です。

関連ドキュメント

TimesTenのドキュメントは、次の場所のOracle Technology Networkで入手できます。

http://www.oracle.com/technetwork/database/database-technologies/timesten/documentation/index.html

Oracle DatabaseのドキュメントもOracle Technology Networkで入手できます。これは、TimesTenでサポートされているが、詳しく説明されていないOracle Databaseの機能の場合に役立ちます。

http://www.oracle.com/pls/db112/homepage/

表記規則

TimesTenは複数のプラットフォームをサポートしています。このマニュアルに記述されている内容は、特に表記しないかぎり、サポートされるすべてのプラットフォームに適用されます。Windowsという語はサポートされるすべてのWindowsプラットフォームを指し、UNIXという語はサポートされるすべてのUNIXプラットフォームおよびLinuxを指します。TimesTenでサポートされる特定のプラットフォームのバージョンについては、『Oracle TimesTen In-Memory Databaseリリース・ノート』のプラットフォームに関する説明を参照してください。

注意:
TimesTenドキュメントでは、用語としての「データ・ストア」と「データベース」は同じです。両方の用語は、TimesTenデータベースを指します。

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

規則

意味

太字

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

イタリック体

イタリックは、ユーザーが特定の値を指定するプレースホルダ変数を示します。

monospace

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

固定幅フォントのイタリック

固定幅フォントのイタリック体は、置き換える必要があるコード例の変数です。次に例を示します。
Driver=install_dir/lib/libtten.sl

install_dirをご使用のTimesTenインストール・ディレクトリに置き換えます。

[ ]

大カッコは、コマンドライン内の項目が任意であることを表します。

{ }

中カッコは、コマンドライン内の縦線(|)で区切られた項目のうち、1つが必須であることを表します。

|

選択項目の引数を区切る縦線(パイプ)。

. . .

引数の後の水平の省略記号は、1行のコマンドラインで複数の引数を使用できることを表します。

%

%は、UNIXのシェル・プロンプトを表します。

#

#は、UNIXのルート・プロンプトを表します。

TimesTenのマニュアルでは、次の変数を使用して、パス、ファイルおよびユーザー名を表します。

規則

意味

install_dir

TimesTenの現在のリリースがインストールされているディレクトリのパスです。

TTinstance

TimesTenのインストールで指定するインスタンス名です。インストール時に、英数字の一意のインスタンス名でTimesTenの各インストールを識別する必要があります。この名前はインストール・パスに表示されます。

bitsまたはbb

32または64の2桁の数字は、32-bitまたは64-bitのオペレーティング・システムを表します。

releaseまたはrr

リリース番号の最初の3つの部分(ドットが付く場合と付かない場合があります)。リリース番号の最初の3つの部分は、TimesTenのメジャー・リリースを表します。たとえば、1122または11.2.2はTimesTen 11gリリース2(11.2.2)を表します。

DSN

データソースの名前です。

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

Oracleのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

サポートを購入した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)を参照してください。

新機能

この項では、このリファレンス・ガイドで説明されているリリース11.2.2の新機能のリストと、詳細情報へのリンクを記載します。

リリース11.2.2.6.0の新機能

- IN、ANY、SOME、またはALL条件に使用する値リスト内の定数式、動的パラメータ、およびNULLのサポートが追加されました。詳細は、「ALL / NOT IN条件(値リスト)」および「ANY / IN条件(値リスト)」を参照してください。

リリース11.2.2.5.0の新機能

- WITH句を使用する場合は、メインの問合せで集合演算子UNION、MINUS、およびINTERSECTを指定できます。WITH句の詳細は、「WITH句」を参照してください。

- CREATE [UNIQUE] HASH INDEX文を使用してハッシュ索引を作成できます。ハッシュ索引作成の詳細は、「CREATE INDEX」を参照してください。

- SQL文で文レベル・オプティマイザ・ヒントを使用できます。文レベルのオプティマイザ・ヒントの詳細は、「文レベルのオプティマイザ・ヒント」を参照してください。

- CREATE TABLE文では、列の定義のNOT NULL制約の一部としてキーワードENABLEを指定できます。詳細は、「列の定義」を参照してください。

- UPDATE文のSET句では、複数の副問合せを指定できます。UPDATE文のSET句では、SELECT DISTINCT副問合せも指定できます。UPDATE文の詳細は、「UPDATE」を参照してください。

- ALTER SESSION文のSET COMMIT_BUFFER_SIZE_MAX句を使用して、接続の実行中のコミット・バッファの最大サイズを設定できます。詳細は、「ALTER SESSION」を参照してください。

- UNLOAD CACHE GROUP文でCOMMIT EVERY n ROWS句を指定できます。詳細は、「UNLOAD CACHE GROUP」を参照してください。

- CREATE ACTIVE STANDBY PAIRおよびALTER ACTIVE STANDBY PAIR文の両方で、StoreAttributeとしてTABLE DEFINITION CHECKING句を指定できます。詳細は、「CREATE ACTIVE STANDBY PAIR」を参照してください。

- スカラー副問合せでDISTINCT修飾子を指定できます。詳細は、「副問合せ」を参照してください。

リリース11.2.2.4.0の新機能

- INSERT...SELECT文では、FROM句または副問合せ内のターゲット表を参照できます。詳細は、「INSERT...SELECT」を参照してください。

- 表にALTERを実行して、デフォルト値を持つNOT NULL列を追加します。DEFAULT句は必須です。ALTER TABLE文の詳細は、「ALTER TABLE」を参照してください。

リリース11.2.2.1.0の新機能

- 表のインメモリー列圧縮のサポート。圧縮は列レベルで定義され、データをより効率的に格納します。列での重複する値の冗長な格納を削除し、全表スキャンを実行するSQL問合せのパフォーマンスを向上させます。CREATE TABLE、ALTER TABLEおよびCREATE INDEXの各文により定義される表圧縮サポートの詳細は、「表のインメモリー列圧縮」、「CREATE TABLE」、「ALTER TABLE」および「CREATE INDEX」を参照してください。

リリース11.2.2.0.0の新機能

- LOB(ラージ・オブジェクト)データ型のサポート。これには、CLOB(キャラクタLOB)、NCLOB(各国語キャラクタLOB)およびBLOB(バイナリLOB)データ型が含まれます。詳細は、「LOBデータ型」を参照してください。
LOBのサポートが、CREATE TABLE、SELECT、INSERTおよびUPDATE SQL文に追加されました。LOBは、LIKEおよびIS [NOT] NULL演算子、REPLACE、LOWER、UPPER、TRIM、LTRIM、RTRIM、ASCIISTR、INSTR、INSTRB、INSTR4、SUBSTR、SUBSTRB、SUBSTR4、NLSSORT、LPAD、RPAD、TO_DATE、TO_NUMBER、TO_CHAR、LENGTH、LENGTHB、CONCATおよびNVL関数でもサポートされます。

- LOB関数、EMPTY_CLOB、EMPTY_BLOB、TO_LOB、TO_CLOB、TO_NCLOBおよびTO_BLOBのサポート。詳細は、「LOB関数」を参照してください。

- GROUP BY文のサポート。このリリースでは、GROUPING SETS、ROLLUPおよびCUBE句に対するサポートが追加されました。さらに、GROUPING、GROUPING_IDおよびGROUP_ID関数も追加されました。GROUP BY文の新しい句の詳細は、「GROUP BY句」を参照してください。新しい関数については、「集計関数」、「GROUP_ID」、「GROUPING」および「GROUPING_ID」を参照してください。

- SELECT文でWITH句を使用する副問合せファクタのサポート。詳細は、「SELECT」および「WithClause」を参照してください。

- SQL関数は「式」の章から独立し、新しい第4章「関数」にアルファベット順に並べられています。この再編成により、集計関数、文字列関数およびユーザー/セッション関数にリストされているすべての関数が、このアルファベット順のリストに追加されました。

- 分析関数のサポート。「分析関数」を参照してください。

- AnalyticClauseを集計関数AVG、COUNT、MAX、MINおよびSUMで指定できます。詳細は、「集計関数」および「分析関数」を参照してください。特定の集計関数「AVG」、「COUNT」、「MAX」、「MIN」および「SUM」も参照してください。

- キャッシュ・グリッド関数を使用して、キャッシュ・グリッド内のデータの場所を判別し、そのノードの情報に対する問合せを実行できます。詳細は、「キャッシュ・グリッド関数」を参照してください。

- TimesTenは、暗黙的なデータ型変換の追加サポートを提供します。「暗黙的なデータ型変換」を参照してください。

- TimesTenは、日時算術演算の追加サポートを提供します。「算術演算における日時データ型および時間隔データ型」を参照してください。

- 集計関数でDISTINCTを指定して、引数式の重複行を排除した値のみを考慮するようにできます。詳細は、「集計関数」を参照してください。

- LIKE条件内のソースまたはパターンで、文字列、列、式、関数の結果またはその任意の組合せを使用できます。詳細は、「LIKE条件」を参照してください。

- TimesTenはMONTHS_BETWEEN関数をサポートします。詳細は、「MONTHS_BETWEEN」を参照してください。

- NLSキャラクタ・セット関数を使用して、キャラクタ・セット名またはID番号を取得できます。詳細は、「NLSキャラクタ・セット関数」を参照してください。

- TimesTenでは、NULL値のサポートが拡張されます。詳細は、「NULL値」を参照してください。

- TimesTenはNULLIF関数をサポートします。詳細は、「NULLIF」を参照してください。

- ORDER BY句でNULLS FIRSTまたはNULLS LASTを使用できます。詳細は、「SELECT」を参照してください。

- 範囲索引はTツリー索引と呼ばれていました。すべての出力およびコマンドで、現在では範囲という用語が使用されています。たとえば、「NLSSORT」では、出力は「列での一意でない範囲索引」などの範囲索引を示します。

- REPLACE関数のサポートが追加されました。これは、特定の文字列内の一続きの文字を別の一連の文字で置換したり、文字列全体を削除します。詳細は、「REPLACE」を参照してください。

- TimesTenはSOUNDEX関数をサポートします。「SOUNDEX」を参照してください。

- TimesTenは、TIMESTAMPADD関数およびTIMESTAMPDIFF関数をサポートします。「TIMESTAMPADD」および「TIMESTAMPDIFF」を参照してください。

1 データ型

データ型は値のセットを定義します。データ型の参照は、コンテキストに指定可能な値のセットを指定します。データ型は、表から検索された値、または式や定数に従って計算された値に応じて決まります。

TimesTenでは、ODBC標準に基づいてデータ型が変換されます。詳細は、Microsoft社や様々なサード・パーティから入手できる、ODBC APIリファレンスのドキュメントを参照してください。次のサイトに、Microsoft社のODBC APIリファレンスのドキュメントがあります。

http://msdn.microsoft.com/en-us/library/ms714562(VS.85).aspx

TimesTenキャッシュを使用する場合、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のOracle DatabaseとTimesTenデータ型間のマッピングに関する項を参照してください。この項では、パススルー問合せで行われる型変換およびキャッシュ・グループの列の作成に有効なデータ型を比較します。

次の各項では、TimesTenのデータ型について説明します。

- データ型の仕様

- ANSI SQLデータ型

- Oracle型モードでの下位互換用にサポートされている型

- TimesTen型のマッピング

- 文字データ型

- 数値データ型

- BINARYデータ型およびVARBINARYデータ型

- 数値の優先順位

- LOBデータ型

- ROWIDデータ型

- 日時データ型

- TimesTenの時間隔

- 記憶域要件

- データ型比較ルール

- データ型変換

- Null値

- INFおよびNAN

- オーバーフローと切り捨て

- アンダーフロー

- レプリケーションの制限

- TimesTen型モード(下位互換モード)

データ型の仕様

TimesTenでは、デフォルトのOracle型モードで表1-1のデータ型がサポートされています。型モードはデータ・ストア属性です。TypeMode=0はOracle型モードを示し、TypeMode=1はTimesTenモードを示します。データ型モードの詳細は、「TimesTen型モード(下位互換モード)」を参照してください。『Oracle TimesTen In-Memory Databaseリファレンス』のTypeModeに関する項も参照してください。

表1-1 Oracle型モードでサポートされているデータ型

データ型

説明

BINARY(n)

nバイトの固定長バイナリの値

nに指定できる値は、1から8300です。BINARYデータは、後続の0(ゼロ)を使用してその列の最大長まで調整されます。かわりに、TT_BINARY(n)を指定することもできます。

詳細は、「BINARYおよびVARBINARYデータ型」を参照してください。

BINARY_DOUBLE

64ビットの浮動小数点数

BINARY_DOUBLEは、+Inf、-InfおよびNaN値をサポートする倍精度ネイティブ浮動小数点数です。BINARY_DOUBLEは指数と小数部からなる近似値です。指数またはE表記法を使用できます。BINARY_DOUBLEにはバイナリ精度53が指定されています。

正の最小有限値: 2.22507485850720E-308

正の最大有限値: 1.79769313486231E+308

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

BINARY_FLOAT

32ビットの浮動小数点数

BINARY_FLOATは、+Inf、-InfおよびNaN値をサポートする単精度ネイティブ浮動小数点型です。BINARY_FLOATは指数と小数部からなる近似値です。指数またはE表記法を使用できます。BINARY_FLOATにはバイナリ精度24が指定されています。

正の最小有限値: 1.17549E-38F

正の最大有限値: 3.40282E+38F

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

BLOB

バイナリ・ラージ・オブジェクト

最大サイズが16 MBの可変長バイナリの値です。

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

CHAR[ACTER][(n[BYTE|CHAR])]

長さがnバイトまたはn文字の固定長文字列

デフォルトは1バイトです。

BYTEは、列にバイト長セマンティクスが使用されていることを示します。nに指定できる値は、1バイト以上8300バイト以下です。

CHARは、列に文字長セマンティクスが使用されていることを示します。CHARの最小長は1文字です。最大長は8300バイトに収まる文字数によって異なります。これは使用されているデータベース・キャラクタ・セットによって決まります。キャラクタ・セットがAL32UTF8の場合、1文字当たり最大4バイトが必要になる可能性があるため、CHARの長さは、キャラクタ・セットに応じて2075から8300の範囲に制限されます。

長さが0(ゼロ)の文字列は、NULLとして解釈されます。

CHARのデータは後続の空白を使用してその列の最大長まで調整されます。空白埋め比較セマンティクスが使用されます。

かわりに、ORA_CHAR[(n[BYTE|CHAR])]を指定することもできます。

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

CLOB

シングルバイト・キャラクタまたはマルチバイト・キャラクタを含むキャラクタ・ラージ・オブジェクト

最大サイズが4 MBの可変長ラージ・オブジェクトです。

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

DATE

日付と時刻の情報(世紀、年、月、日、時、分、秒)

書式は次のとおりです。

YYYY-MM-DD HHMISS。

有効な日付の範囲は紀元前4712年1月1日から西暦9999年12月31日です。

小数秒はありません。

かわりに、ORA_DATEを指定することもできます。

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

INTERVAL [+/-] IntervalQualifier

時間隔型

TimesTenでは、型INTERVALとIntervalQualifierで表現される時間隔型を部分的にサポートします。IntervalQualifierは、精度を持たない単一フィールド型のみを指定できます。デフォルトの先行精度は、すべての時間隔型で8桁です。単一フィールド型には、年、月、日、時間、分または秒を指定できます。現在、時間隔型に指定できるのは定数のみです。

注意: 時間隔型の列は指定できません。実行時にSQL式で使用される非永続型があります。さらに、時間隔データ型が返される比較では、時間隔データ型を完結した式の最終結果に使用することはできません。この時間隔の結果から必要な要素を抽出するには、EXTRACT関数を使用する必要があります。

詳細は、「TimesTenの時間隔」を参照してください。

NCHAR[(n)]

n×2バイトのUnicode文字の固定長文字列

必要なバイト数は2*nです。ここでnは指定された文字数です。NCHAR文字制限はバイト制限の半分であるため、最大サイズは4150です。

長さが0(ゼロ)の文字列は、NULLとして解釈されます。

NCHARのデータはU+0020 SPACEを使用してその列の最大長まで調整されます。空白埋め比較セマンティクスが使用されます。

かわりに、ORA_NCHAR[(n)]を指定することもできます。

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

NCLOB

Unicode文字を含む各国語キャラクタ・ラージ・オブジェクト

最大サイズが4 MBの可変長文字値。

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

NUMBER[(p [,s])]

精度とスケールが指定された数値

精度の範囲は1から38桁です。スケールの範囲は-84から127です。精度とスケールの両方ともオプションです。

精度およびスケールを指定しない場合は、最大精度の38および柔軟なスケールが指定されたとみなされます。

NUMBERは、負のスケールおよび精度より大きいスケールをサポートしています。

NUMBERは、1.0 x 10-130から1.0 x 10^126未満の絶対値を含む正と負の固定数値および0(ゼロ)を格納します。値が1.0 x 10^126以上の絶対値である算術式を指定すると、エラーが戻されます。

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

NVARCHAR2(n)

n×2バイトのUnicode文字の可変長文字列

必要なバイト数は2*nです。ここでnは指定された文字数です。NVARCHAR2文字制限はバイト制限の半分であるため、最大サイズは2,097,152(2^21)です。nを指定する必要があります。

長さが0(ゼロ)の文字列は、NULLとして解釈されます。

非空白埋め比較セマンティクスが使用されます。

かわりに、ORA_NVARCHAR2(n)を指定することもできます。

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

ROWID

表の行またはマテリアライズド・ビューの行のアドレスを表す18バイトの文字列

リテラルのROWID値は、一重引用符で囲んでCHAR定数として指定してください。

詳細は、「ROWIDデータ型」を参照してください。

TIME

00:00:00(午前0時)から23:59:59(午後11時59分59秒)の間の時刻

書式はHH:MI:SSです。

かわりに、TT_TIMEを指定することもできます。

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

TIMESTAMP

[(fractional_seconds_precision)]

日付の年、月および日の値に加えて、時間の時、分および秒の値

fractional_seconds_precisionは、秒のフィールドの小数部の桁数です。有効な日付の範囲は紀元前4712年1月1日から西暦9999年12月31日です。

TT_TIMESTAMPの記憶域サイズはTIMESTAMPより小さくなります。TT_TIMESTAMPの処理速度はTIMESTAMPより速くなります。これは、TT_TIMESTAMPが1753年1月1日以降のマイクロ秒数を含む8バイトの整数であるためです。比較が非常に速くなります。TIMESTAMPでは紀元前4712年以降の日時データを格納できるため、TIMESTAMPの範囲はTT_TIMESTAMPより大きくなります。また、TIMESTAMPでは最大9桁の小数秒の精度がサポートされ、TT_TIMESTAMPでは6桁の小数秒の精度がサポートされています。

小数秒の精度の範囲は0(ゼロ)から9です。デフォルトは6です。書式は次のとおりです。

YYYY-MM-DD HH:MI:SS [.FFFFFFFFF]

かわりに、ORA_TIMESTAMP[(fractional_seconds_precision)]を指定することもできます。

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

TT_BIGINT

-9,223,372,036,854,775,808-(2^63)から9,223,372,036,854,775,807(2^63-1)の範囲の符号付き8バイト整数

NUMBERデータ型ではなくTT_BIGINTを使用します。TT_BIGINTは、NUMBER型より小さいサイズで、高速なパフォーマンスを提供します。19桁より大きい整数を格納する必要がある場合は、NUMBER(p)(p > 19)を使用します。

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

TT_DATE

日付情報(世紀、年、月、日)

書式はYYYY-MM-DD(MMは2006-10-28のような整数で表される)です。

有効な日付は、1753-01-01(1753年1月1日)から9999-12-31(9999年12月31日)の間の日付です。

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

TT_INTEGER

-2,147,483,648(-2^31)から2,147,483,647(2^31-1)の範囲の符号付き整数

TT_INTEGERはネイティブの符号付き整数データ型です。INTEGERではなくTT_INTEGERを使用します。INTEGERはNUMBERデータ型にマップされます。TT_INTEGERは、NUMBER型より小さいサイズで、高速なパフォーマンスを提供します。19桁より大きい整数を格納する必要がある場合は、NUMBER(p)(p > 19)を使用します。

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

TT_SMALLINT

-32,768(-2^15)から32,767(2^15-1)の範囲のネイティブ符号付き16バイト整数

SMALLINTではなくTT_SMALLINTを使用します。SMALLINTはNUMBERデータ型にマップされます。

TT_SMALLINTは、NUMBER型より小さいサイズで、高速なパフォーマンスを提供します。19桁より大きい整数を格納する必要がある場合は、NUMBER(p)(p > 19)を使用します。

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

TT_TIMESTAMP

1753-01-01 00:00:00(1753年1月1日午前0時)から9999-12-31 23:59:59(9999年12月31日午後11時59分59秒)の間の日付と時刻

マイクロ秒に満たない端数は、「Data Truncated」エラーになります。書式はYYYY-MM-DD HH:MI:SS [.FFFFFFFFF]です。

TT_TIMESTAMPは、TIMESTAMPより記憶域サイズが小さく、処理速度はTIMESTAMPより速くなります。これは、TT_TIMESTAMPが1753年1月1日以降のマイクロ秒数を含む8バイトの整数であるためです。比較が非常に速くなります。TIMESTAMPでは紀元前4712年以降の日時データを格納できるため、TIMESTAMPの範囲はTT_TIMESTAMPより大きくなります。また、TIMESTAMPでは最大9桁の小数秒の精度がサポートされ、TT_TIMESTAMPでは6桁の小数秒の精度がサポートされています。

TT_TIMESTAMP(6)を指定できます。

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

TT_TINYINT

0から255(2^8-1)の範囲の符号なし整数

NUMBERデータ型ではなくTT_TINYINTを使用します。TT_TINYINTは、NUMBER型より小さいサイズで、高速なパフォーマンスを提供します。19桁より大きい整数を格納する必要がある場合は、NUMBER(p)(p > 19)を使用します。

TT_TINYINTは符号なしのため、TT_TINYINTを否定するデータ型はTT_SMALLINTになります。

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

VARBINARY(n)

1から4194304 (222)の範囲の、最大長がnバイトの可変長バイナリの値

かわりに、TT_VARBINARY(n)を指定することもできます。

詳細は、「BINARYおよびVARBINARYデータ型」を参照してください。

VARCHAR[2](n[BYTE|CHAR])

最小1バイトから最大4194304 (222)バイトの範囲の、最大長がnバイトまたはn文字の可変長文字列

nを指定する必要があります。BYTEは、列にバイト長セマンティクスが使用されていることを示します。

CHARは、列に文字長セマンティクスが使用されていることを示します。

長さが0(ゼロ)の文字列は、NULLとして解釈されます。

非空白埋め比較セマンティクスが使用されます。

VARCHAR型は使用しないでください。VARCHAR型は現在VARCHAR2と同じ意味で使用されていますが、再定義される予定です。

かわりに、ORA_VARCHAR2(n[BYTE|CHAR])を指定することもできます。

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

ANSI SQLデータ型

TimesTenでは、Oracle型モードでANSI SQLデータ型がサポートされています。これらのデータ型は、TimesTenデータ型に変換され、データはTimesTenデータ型として保存されます。表1-2に、ANSI SQLデータ型とTimesTenデータ型とのマッピングを示します。

表1-2 データ型のマッピング: ANSI SQLからTimesTen

ANSI SQLデータ型

TimesTenデータ型

CHARACTER VARYING(n[BYTE|CHAR])または

CHAR VARYING(n[BYTE|CHAR])

VARCHAR2(n[BYTE|CHAR])

文字セマンティクスがサポートされています。

DOUBLE [PRECISION]

NUMBER

バイナリ精度126の浮動小数点数。

かわりに、FLOAT(126)またはORA_FLOAT(126)を指定することもできます。

FLOAT[(b)]

NUMBER

バイナリ精度bを使用する浮動小数点数。bに使用できる値は1から126ビットです。

FLOATは正確な数値型です。FLOATは、浮動スケールおよび指定された精度で列を定義する場合に使用します。NUMBER型では、浮動スケールはサポートされていますが、精度は指定できません。精度が低いと必要な領域も小さくなるため、FLOATを指定できる場合は、NUMBERより適しています。bを指定しない場合、精度はデフォルトで126バイナリ(38桁)になります。

BINARY_FLOATとBINARY_DOUBLEは不正確な数値型であるため、FLOATとは浮動型が異なります。さらに、BINARY_FLOATおよびBINARY_DOUBLEはIEEE標準に準拠しているため、FLOATとBINARY_FLOAT/BINARY_DOUBLEとではセマンティクスが異なります。

内部的には、FLOATはNUMBER型として実装されます。

かわりに、ORA_FLOATを指定することもできます。次に例を示します。

FLOAT(24) = ORA_FLOAT(24)

FLOAT(53) = ORA_FLOAT(53)

FLOAT(n) = ORA_FLOAT(n)

INT[EGER]

NUMBER(38,0)

TT_INTEGERはネイティブの32ビット整数型です。TT_INTEGERはNUMBER型と比べてサイズが小さくなり、より高速のパフォーマンスを提供するため、このデータ型を使用します。

NATIONAL CHARACTER(n)または

NATIONAL CHAR(n)

NCHAR(n)

NATIONAL CHARACTER VARYING(n)または

NATIONAL CHAR VARYING(n)または

NCHAR VARYING(n)

NVARCHAR2(n)

NUMERIC[(p[,s])]または

DEC[IMAL][(p[,s])]

NUMBER(p,s)

精度pおよびスケールs.を使用して、固定小数点数を指定します。これは固定小数点数でのみ使用できます。スケールを指定しない場合、sはデフォルトで0(ゼロ)に設定されます。

REAL

NUMBER

バイナリ精度63の浮動小数点数。

かわりに、ORA_FLOAT(63)またはFLOAT(63)を指定することもできます。

SMALLINT

NUMBER(38,0)

TT_SMALLINTはネイティブの符号付き整数データ型です。TT_SMALLINTは、NUMBER型より小さいサイズで、高速なパフォーマンスを提供します。

Oracle型モードでの下位互換用にサポートされている型

TimesTenでは、Oracle型モードでの下位互換用に表1-3のデータ型がサポートされています。

表1-3 Oracle型モードでの下位互換性用にサポートされているデータ型

データ型

説明

TT_CHAR[(n[BYTE|CHAR])]

長さがnバイトまたはn文字の固定長文字列

デフォルトは1バイトです。

BYTEは、列にバイト長セマンティクスが使用されていることを示します。nに指定できる値は、1バイト以上8300バイト以下です。

CHARは、列に文字長セマンティクスが使用されていることを示します。CHARの最小長は1文字です。最大長は8300バイトに収まる文字数によって異なります。これは使用されているデータベース・キャラクタ・セットによって決まります。キャラクタ・セットがAL32UTF8の場合、1文字当たり最大4バイトが必要になる可能性があるため、CHARの長さは、キャラクタ・セットに応じて2075から8300の範囲に制限されます。

長さが0(ゼロ)の空の文字列を列に挿入すると、SQLのNULL値が挿入されます。この処理は、Oracle型モードでのみ有効です。

TT_CHARデータは、後続の空白を使用して列の最大長まで調整されます。空白埋め比較セマンティクスが使用されます。

TT_DECIMAL[(p[,s])]

固定の最大精度(総桁数)とスケール(小数点の右側の桁数)を定義した正確な数値

精度pには1から40を指定します。スケールsには0からpを指定します。精度のデフォルト値は40、スケールのデフォルト値は0です。

TT_DECIMALではなく、より高速のパフォーマンスを提供するNUMBERデータ型を使用します。

TT_NCHAR[(n)]

n×2バイトのUnicode文字の固定長文字列

必要なバイト数は2*nです。ここでnは指定された文字数です。NCHAR文字制限はバイト制限の半分であるため、最大サイズは4150です。

長さが0(ゼロ)の空の文字列を列に挿入すると、SQLのNULL値が挿入されます。この処理は、Oracle型モードでのみ有効です。

TT_NCHARデータは、U+0020 SPACEを使用してその列の最大長まで調整されます。空白埋め比較セマンティクスが使用されます。

TT_NVARCHAR(n)

n×2バイトのUnicode文字の可変長文字列

必要なバイト数は2*nです。ここでnは指定された文字数です。TT_NVARCHAR文字制限はバイト制限の半分であるため、最大サイズは2,097,152(2^21)です。nを指定する必要があります。

長さが0(ゼロ)の空の文字列を列に挿入すると、SQLのNULL値が挿入されます。この処理は、Oracle型モードでのみ有効です。

空白埋め比較セマンティクスが使用されます。

TT_VARCHAR(n[BYTE|CHAR])

最大長がnバイトまたはn文字の可変長文字列

nを指定する必要があります。BYTEは、列にバイト長セマンティクスが使用されていることを示します。nに指定できる値は、1バイト以上4194304(2^22)バイト以下です。

CHARは、列に文字長セマンティクスが使用されていることを示します。

長さが0(ゼロ)の空の文字列を列に挿入すると、SQLのNULL値が挿入されます。この処理は、Oracle型モードでのみ有効です。

空白埋め比較セマンティクスが使用されます。

TimesTen型のマッピング

表1-4の左側の列に示されているデータ型の名前は、以前のリリースのTimesTenで使用されていたデータ型です。TypeModeが0(ゼロ)(デフォルト)に設定されている場合、これはOracle型モードを示し、データ型の名前がOracle型モードの新しい名前に変更されることがあります。Oracle型モードでのデータ型の名前は右側の列に示されています。この表では、左側の列のデータ型から右側の列の対応するデータ型へのマッピングを示します。

表1-4 データ型のマッピング: TimesTenデータ型からOracle型モードのTimesTenデータ型

TimesTenデータ型

Oracle型モードでのTimesTenデータ型

BIGINT

TT_BIGINT

Oracle型モードでは、TT_BIGINTを指定します。TT_BIGINTの詳細は、「データ型の仕様」を参照してください。

BINARY(n)

BINARY(n)

Oracle型モードで、このデータ型は同じ名前を使用します。BINARY(n)の詳細は、「データ型の仕様」を参照してください。

CHAR[ACTER][(n)]

TT_CHAR[(n[BYTE|CHAR])]

Oracle型モードでは、TT_CHARを指定します。文字セマンティクスがサポートされています。TT_CHAR型の詳細は、「Oracle型モードでの下位互換用にサポートされている型」を参照してください。

DATE

TT_DATE

Oracle型モードでは、TT_DATEを指定します。TT_DATEの詳細は、「データ型の仕様」を参照してください。

DEC[IMAL][(p[,s])]または

NUMERIC[(p[,s])]

TT_DECIMAL[(p[,s])]

Oracle型モードでは、TT_DECIMALを指定します。

TT_DECIMALの詳細は、「Oracle型モードでの下位互換用にサポートされている型」を参照してください。

DOUBLE [PRECISION]または

FLOAT[(53)]

BINARY_DOUBLE

Oracle型モードでは、BINARY_DOUBLEを指定します。BINARY_DOUBLEの詳細は、「データ型の仕様」を参照してください。

INT[EGER]

TT_INT[EGER]

Oracle型モードでは、TT_INTEGERを指定します。TT_INTEGERの詳細は、「データ型の仕様」を参照してください。

INTERVAL IntervalQualifier

INTERVAL IntervalQualifier

Oracle型モードで、このデータ型は同じ名前を使用します。時間隔型の詳細は、「データ型の仕様」を参照してください。

NCHAR[(n)]

TT_NCHAR[(n)]

Oracle型モードでは、TT_CHARを指定します。TT_NCHARの詳細は、「Oracle型モードでの下位互換用にサポートされている型」を参照してください。

NVARCHAR(n)

TT_NVARCHAR(n)

Oracle型モードでは、TT_NVARCHARを指定します。TT_NVARCHARの詳細は、「Oracle型モードでの下位互換用にサポートされている型」を参照してください。

REALまたは

FLOAT(24)

BINARY_FLOAT

Oracle型モードでは、BINARY_FLOATを指定します。BINARY_FLOATの詳細は、「データ型の仕様」を参照してください。

SMALLINT

TT_SMALLINT

Oracle型モードでは、TT_SMALLINTを指定します。TT_SMALLINTの詳細は、「データ型の仕様」を参照してください。

TIME

TIME

Oracle型モードで、このデータ型は同じ名前を使用します。TIMEの詳細は、「データ型の仕様」を参照してください。

TIMESTAMP

TT_TIMESTAMP

Oracle型モードでは、TT_TIMESTAMPを指定します。TT_TIMESTAMPの詳細は、「データ型の仕様」を参照してください。

TINYINT

TT_TINYINT

Oracle型モードでは、TT_TINYINTを指定します。TT_TINYINTの詳細は、「データ型の仕様」を参照してください。

VARBINARY(n)

VARBINARY(n)

Oracle型モードで、このデータ型は同じ名前を使用します。VARBINARY(n)の詳細は、「データ型の仕様」を参照してください。

VARCHAR(n)

TT_VARCHAR(n[BYTE|CHAR])

Oracle型モードでは、TT_VARCHARを指定します。文字セマンティクスがサポートされています。TT_VARCHARの詳細は、「Oracle型モードでの下位互換用にサポートされている型」を参照してください。

文字データ型

文字データ型は、文字(英数字)データをデータベース・キャラクタ・セットまたはUTF-16書式で格納します。文字データはバイト値を使用する文字列に格納されます。バイト値は、データベース作成時に定義されるデータベース・キャラクタ・セットのいずれかに対応しています。シングルバイト・キャラクタ・セットとマルチバイト・キャラクタ・セットの両方がサポートされています。

文字データ型には次のものがあります。

- CHAR

- NCHAR

- VARCHAR2

- NVARCHAR2

CHAR

CHAR型は、固定長文字列を指定します。CHAR列に値を挿入する際、定義されている列長よりその値が短い場合は、列長にあわせてTimesTenの空白文字が埋め込まれます。CHAR列に値を挿入する際に、その値が定義されている列長より長い場合は、エラーが戻されます。

デフォルトでは、列長はバイトで定義されます。CHAR修飾子を使用し、列長を文字で定義します。文字のサイズは、データベース・キャラクタ・セットに応じて1バイトから4バイトの範囲になります。BYTE修飾子およびCHAR修飾子は、NLS_LENGTH_SEMANTICSパラメータ設定より優先されます。NLS_LENGTH_SEMANTICSの詳細は、「ALTER SESSION」を参照してください。『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のグローバリゼーション・サポートの属性の設定に関する項も参照してください。

注意:
CHAR型を使用すると、長さが0(ゼロ)の文字列はNULLとして解釈されます。TT_CHAR型を使用すると、長さが0(ゼロ)の文字列は、NULL以外の有効な値となります。CHARとTT_CHARの両方で、空白埋め比較セマンティクスが使用されます。TT_CHAR型は下位互換用にサポートされています。

次の例では、表を作成します。列は型CHARおよびTT_CHARを使用して定義されます。これらの型では、空白埋め比較セマンティクスが使用されます。

Command> CREATE TABLE typedemo (name CHAR (20), nnme2 TT_CHAR (20));
Command> INSERT INTO typedemo VALUES ('SMITH     ','SMITH     ');
1 row inserted.
Command> DESCRIBE typedemo;
Table USER.TYPEDEMO:
Columns:
NAME                            CHAR (20)
NAME2                           TT_CHAR (20)
1 table found.
(primary key columns are indicated with *)
Command> SELECT * FROM typedemo;
< SMITH     , SMITH      >
1 row found.
Command> # Expect 1 row found; blank-padded comparison semantics
Command> SELECT * FROM typedemo WHERE name = 'SMITH';
< SMITH     , SMITH      >
1 row found.
Command> SELECT * FROM typedemo WHERE name2 = 'SMITH';
< SMITH     , SMITH      >
1 row found.
Command> # Expect 0 rows; blank padded comparison semantics.
Command> SELECT * FROM typedemo WHERE name > 'SMITH';
0 rows found.
Command> SELECT * FROM typedemo WHERE name2 > 'SMITH';
0 rows found.

次の例では、表typedemoを変更し、列name3を追加します。列name3は、文字セマンティクスで定義されます。

Command> ALTER TABLE typedemo ADD COLUMN name3 CHAR (10 CHAR);
Command> DESCRIBE typedemo;
Table USER.TYPEDEMO:
Columns:
NAME                            CHAR (20)
NAME2                           TT_CHAR (20)
NAME3                           CHAR (10 CHAR)
1 table found.

NCHAR

NCHARデータ型は、2バイトのUnicode文字の固定長文字列です。NCHARデータ型は、Unicodeの空白文字U+0020 SPACEを使用して指定した長さまで調整されます。空白埋め比較セマンティクスが使用されます。

注意:
NCHAR型を使用すると、長さが0(ゼロ)の文字列はNULLとして解釈されます。TT_NCHAR型を使用すると、長さが0(ゼロ)の文字列は、NULL以外の有効な値となります。NCHARとTT_NCHARの両方で、空白埋め比較セマンティクスが使用されます。TT_NCHAR型は下位互換用にサポートされています。

次の例では、表typedemoを変更し、列Name4を追加します。データ型はNCHARです。

Command> ALTER TABLE typedemo ADD COLUMN Name4 NCHAR (10);
Command> DESCRIBE typedemo;

Table USER.TYPEDEMO:
Columns:
NAME                            CHAR (20)
NAME2                           TT_CHAR (20)
NAME3                           CHAR (10 CHAR)
NAME4                           NCHAR (10)
1 table found.

VARCHAR2

VARCHAR2データ型は、可変長文字列を指定します。VARCHAR2列を定義する場合は、バイトまたは文字の最大数を定義します。各値は指定したとおりに格納されます。この値が列の最大長を超えることはできません。

最大長を指定する必要があります。最小値は1バイト以上である必要があります。文字の最大長を指定するには、CHAR修飾子を使用します。たとえば、VARCHAR2(10 CHAR)です。

文字のサイズは、データベース・キャラクタ・セットに応じて1バイトから4バイトの範囲になります。BYTE修飾子およびCHAR修飾子は、NLS_LENGTH_SEMANTICSパラメータ設定より優先されます。NLS_LENGTH_SEMANTICSの詳細は、「ALTER SESSION」を参照してください。『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のグローバリゼーション・サポートの属性の設定に関する項も参照してください。

NULL値は、行内の各NULL値可能フィールドに対して単一ビットとして格納されます。32ビット・プラットフォームでは、値がNULLであるNOT INLINE VARCHAR2(n)は、(NULLビット)+ 4バイトの記憶域を使用します。一方、値がNULLであるINLINE VARCHAR2(n)は、(NULLビット)+ 4バイト+ nバイトの記憶域を使用します。つまり、値がNULLであるNOT INLINE VARCHAR2(n)よりもnバイト余計に記憶域を使用します。この記憶域の原則は、すべての可変長データ型(TT_VARCHAR、TT_NVARCHAR、VARCHAR2、NVARCHAR2、VARBINARY)に適用されます。

注意:

- VARCHARデータ型は、使用しないでください。VARCHAR2を使用してください。これら2つの型は現在同じ意味で使用されていますが、VARCHARデータ型は、別のセマンティクスを使用する別のデータ型として再定義される可能性があります。

- VARCHAR2型を使用すると、長さが0(ゼロ)の文字列はNULLとして解釈されます。TT_VARCHAR型を使用すると、長さが0(ゼロ)の文字列は、NULL以外の有効な値となります。VARCHAR2では非空白埋め比較セマンティクスが使用されます。TT_VARCHARでは空白埋め比較セマンティクスが使用されます。TT_VARCHAR型は下位互換用にサポートされています。

次の例では、表typedemoを変更し、列name5とname6を追加します。name5列は型VARCHAR2により定義されます。name6列はTT_VARCHARにより定義されます。次の例では、列name5での非空白埋め比較セマンティクスの使用と、列name6での空白埋め比較セマンティクスの使用を示しています。

Command> ALTER TABLE typedemo ADD COLUMN name5 VARCHAR2 (20);
Command> ALTER TABLE typedemo ADD COLUMN name6 TT_VARCHAR (20);
Command> DESCRIBE typedemo;
Table USER.TYPEDEMO:
Columns:
NAME                            CHAR (20)
NAME2                           TT_CHAR (20)
NAME3                           CHAR (10 CHAR)
NAME4                           NCHAR (10)
NAME5                           VARCHAR2 (20) INLINE
NAME6                           TT_VARCHAR (20) INLINE
1 table found.
(primary key columns are indicated with *)
Command> #Insert SMITH followed by 5 spaces into all columns
Command> INSERT INTO typedemo VALUES
> ('SMITH     ', 'SMITH     ', 'SMITH     ', 'SMITH     ','SMITH     ',
> 'SMITH');
1 row inserted.
Command> # Expect 0; Nonpadded comparison semantics
Command> SELECT COUNT (*) FROM typedemo WHERE name5 = 'SMITH';
< 0 >
1 row found.
Command> # Expect 1; Blank-padded comparison semantics
Command> SELECT COUNT (*) FROM typedemo WHERE name6 = 'SMITH';
< 1 >
1 row found.
Command> # Expect 1; Nonpadded comparison semantics
Command> SELECT COUNT (*) FROM typedemo WHERE name5 > 'SMITH';
< 1 >
1 row found.
Command> # Expect 0; Blank-padded comparison semantics
Command> SELECT COUNT (*) FROM typedemo WHERE name6 > 'SMITH';
< 0 >
1 row found.

NVARCHAR2

NVARCHAR2データ型は、2バイトのUnicode文字の可変長文字列です。NVARCHAR2列を定義する場合は、文字の最大数を定義します。各値は指定したとおりに格納されます。この値が列の最大長を超えることはできません。

注意:
NVARCHAR2型を使用すると、長さが0(ゼロ)の文字列はNULLとして解釈されます。TT_NVARCHAR型を使用すると、長さが0(ゼロ)の文字列は、NULL以外の有効な値となります。NVARCHAR2では非空白埋め比較セマンティクスが使用されます。TT_NVARCHARでは空白埋め比較セマンティクスが使用されます。TT_NVARCHAR型は下位互換用にサポートされています。

次の例では、表typedemoを変更し、列Name7を追加します。データ型はNVARCHAR2です。

Command> ALTER TABLE typedemo ADD COLUMN Nnme7 NVARCHAR2 (20);
Command> DESCRIBE typedemo;
Table USER1.TYPEDEMO:
Columns:
NAME                            CHAR (20)
NAME2                           TT_CHAR (20)
NAME3                           CHAR (10 CHAR)
NAME4                           NCHAR (10)
NAME5                           VARCHAR2 (20) INLINE
NAME6                           TT_VARCHAR (20) INLINE
NAME7                           NVARCHAR2 (20) INLINE
1 table found.

数値データ型

数値型では、正および負の固定小数点数と浮動小数点数、0(ゼロ)、無限大、および演算での未定義の結果として生成される値(NaN(非数))が格納されます。

TimesTenは、正確な数値型と近似値型の両方のデータ型をサポートします。算術演算は数値型に対してのみ実行できます。同様に、SUM集計およびAVG集計でも数値型が必要になります。

正確な数値型は次のとおりです。

- NUMBER

- TT_BIGINT

- TT_INTEGER

- TT_SMALLINT

- TT_TINYINT

近似値型は、次のとおりです。

- BINARY_DOUBLE

- BINARY_FLOAT

- FLOATおよびFLOAT(n)

NUMBER

NUMBERデータ型は、0(ゼロ)と、絶対値が1.0×10-130以上1.0×10^126未満の範囲にある正と負の固定小数点数を格納します。NUMBERの各値は5から22バイトである必要があります。

固定小数点数はNUMBER(p,s)として指定します。

- 引数pは精度(有効な10進数の総桁数)です。最上位桁は最も左にあるゼロ以外の桁で、最下位桁は最も右の既知の桁です。

- 引数sはスケール(小数点から最下位桁までの桁数)です。スケールの範囲は-84から127です。

- 正のスケールは、小数点の右側にある最下位桁まで(最下位桁も含む)の有効桁数です。

- スケールが負の場合、小数点の左側にある桁数です。この場合は最下位有効桁を含みません。スケールが負の場合、数値は整数部分の右から指定された桁数のみ丸められるため、最下位有効桁は小数点の左側になります。

スケールは、精度より大きくできます。たとえば、E表記法があります。スケールが精度より大きい場合、精度は小数点の右側の最大有効桁数を指定します。たとえば、列をNUMBER(4,5)型として定義し、その列に.000127を挿入すると、その値は.00013として格納されます。小数点以下1桁目の数字はゼロである必要があります。TimesTenでは、値は小数点以下5桁に丸められます。

値が精度を超えると、エラーが戻されます。値がスケールを超えると、その値は丸められます。

NUMBER(p)は、精度pおよびスケール0の固定小数点数を表すため、NUMBER(p,0)と同じです。

浮動小数点数はNUMBERとして指定してください。精度およびスケールを指定しない場合は、最大精度および最大スケールが使用されます。

次の例では、NUMBERデータ型で定義され、異なる精度とスケールが指定された列col6、col7、col8およびcol9を追加することにより、表numericsを変更します。

Command> ALTER TABLE numerics ADD col6 NUMBER;
Command> ALTER TABLE numerics ADD col7 NUMBER (4,2);
Command> ALTER TABLE numerics ADD col8 NUMBER (4,-2);
Command> ALTER TABLE numerics ADD col8 NUMBER (2,4);
Command> ALTER TABLE numerics ADD col9 NUMBER (2,4);
Command> DESCRIBE numerics;
Table USER1.NUMERICS:
Columns:
COL1                            TT_TINYINT
COL2                            TT_SMALLINT
COL3                            TT_INTEGER
COL4                            TT_INTEGER
COL5                            TT_BIGINT
COL6                            NUMBER
COL7                            NUMBER (4,2)
COL8                            NUMBER (4,-2)
COL9                            NUMBER (2,4)
1 table found.
(primary key columns are indicated with *)

次の例では、表numbercomboを作成し、異なる精度とスケールを指定したNUMBERデータ型で列を定義します。値123.89が列に挿入されます。

Command> CREATE TABLE numbercombo (col1 NUMBER, col2 NUMBER (3),
> col3 NUMBER (6,2), col4 NUMBER (6,1), col5 NUMBER (6,-2));
Command> DESCRIBE numbercombo;
Table USER1.NUMBERCOMBO:
Columns:
COL1                            NUMBER
COL2                            NUMBER (3)
COL3                            NUMBER (6,2)
COL4                            NUMBER (6,1)
COL5                            NUMBER (6,-2)
1 table found.
(primary key columns are indicated with *)
Command> INSERT INTO numbercombo VALUES (123.89,123.89,123.89,123.89,123.89);
1 row inserted.
Command> VERTICAL ON;
Command> SELECT * FROM numbercombo;
COL1:   123.89
COL2:   124
COL3:   123.89
COL4:   123.9
COL5:   100
1 row found.

次の例では、表を作成し、NUMBER(4,2)データ型で列を定義します。値123.89を挿入しようとすると、オーバーフローのエラーになります。

Command> CREATE TABLE invnumbervalue (col6 NUMBER (4,2));
Command> INSERT INTO invnumbervalue VALUES (123.89);
2923: Number type value overflow
The command failed.

次の例では、表を作成し、精度より大きいスケールを使用したNUMBERデータ型で列を定義します。値が列に挿入されます。

Command> CREATE TABLE numbercombo2 (col1 NUMBER (4,5), col2 NUMBER (4,5),
> col3 NUMBER (4,5), col4 NUMBER (2,7), col5 NUMBER (2,7),
> col6 NUMBER (2,5), col7 NUMBER (2,5));
Command> INSERT INTO numbercombo2 VALUES
> (.01234, .00012, .000127, .0000012, .00000123, 1.2e-4, 1.2e-5);
1 row inserted.
Command> DESCRIBE numbercombo2;
Table USER1.NUMBERCOMBO2:
Columns:
COL1                            NUMBER (4,5)
COL2                            NUMBER (4,5)
COL3                            NUMBER (4,5)
COL4                            NUMBER (2,7)
COL5                            NUMBER (2,7)
COL6                            NUMBER (2,5)
COL7                            NUMBER (2,5)
1 table found.

(primary key columns are indicated with *)
Command> SELECT * FROM numbercombo2;
COL1:   .01234
COL2:   .00012
COL3:   .00013
COL4:   .0000012
COL5:   .0000012
COL6:   .00012
COL7:   .00001
1 row found.

TT_BIGINT

TT_BIGINTデータ型は、-9,223,372,036,854,775,808(-2^63)から9,223,372,036,854,775,807(2^63-1)の範囲の符号付き整数です。このデータ型で必要な記憶域は8バイトであるため、NUMBERデータ型よりサイズが小さくなります。また、NUMBERデータ型より高いパフォーマンスを提供します。BIGINTは指定できません。

次の例では、表numericsを変更し、BIGINTデータ型でcol5を追加します。エラーが生成されます。2つ目のALTER TABLEによって、TT_BIGINTデータ型でcol5が追加されます。

Command> ALTER TABLE numerics ADD COLUMN col5 BIGINT;
3300: BIGINT is not a valid type name; use TT_BIGINT instead
The command failed.
Command> ALTER TABLE numerics ADD COLUMN col5 TT_BIGINT;
Command> DESCRIBE numerics;
Table USER1.NUMERICS:
Columns:
COL1                            TT_TINYINT
COL2                            TT_SMALLINT
COL3                            TT_INTEGER
COL4                            TT_INTEGER
COL5                            TT_BIGINT
1 table found.
(primary key columns are indicated with *)

TT_INTEGER

TT_INTEGERデータ型は、-2,147,483,648(-2^31)から2,147,483,647(2^31 -1)の範囲の符号付き整数です。このデータ型で必要な記憶域は4バイトであるため、NUMBERデータ型よりサイズが小さくなります。また、NUMBERデータ型より高いパフォーマンスを提供します。TT_INTEGERのかわりにTT_INTを指定できます。INTEGERまたはINTを指定すると、これらの型はNUMBER(38)にマップされます。

次の例では、表numericsを変更し、INTデータ型でcol3を追加します。表の説明にデータ型がNUMBER(38)であることが示されています。列col3は削除されます。2つ目のALTER TABLEによって、INTEGERデータ型でcol2が追加されます。表の説明にデータ型がNUMBER(38)であることが示されています。列col3は削除されます。次に、データ型TT_INTEGERおよびTT_INTで、列col3およびcol4が追加されます。表の説明に両方のデータ型がTT_INTEGERであることが示されます。

Command> ALTER TABLE numerics ADD col3 INT;
Command> DESCRIBE numerics;
Table USER1.NUMERICS:
Columns:
COL1                            TT_TINYINT
COL2                            TT_SMALLINT
COL3                            NUMBER (38)
1 table found.
(primary key columns are indicated with *)
Command> ALTER TABLE numerics  col3;
Command> ALTER TABLE numerics ADD col3 INTEGER;
Command> DESCRIBE numerics;
Table USER1.NUMERICS:
Columns:
COL1                            TT_TINYINT
COL2                            TT_SMALLINT
COL3                            NUMBER (38)
1 table found.
(primary key columns are indicated with *)
Command> ALTER TABLE numerics  col3;
Command> ALTER TABLE numerics ADD COLUMN col3 TT_INTEGER;
Command> DESCRIBE numerics;
Table USER1.NUMERICS:
Columns:
COL1                            TT_TINYINT
COL2                            TT_SMALLINT
COL3                            TT_INTEGER
1 table found.
(primary key columns are indicated with *)
Command> ALTER TABLE numerics ADD col4 TT_INT;
Command> DESCRIBE numerics;
Table USER1.NUMERICS:
Columns:
COL1                            TT_TINYINT
COL2                            TT_SMALLINT
COL3                            TT_INTEGER
COL4                            TT_INTEGER
1 table found.
(primary key columns are indicated with *)

TT_SMALLINT

TT_SMALLINTデータ型は、-32,768(-2^15)から32,767(2^15-1)の範囲の符号付き整数です。このデータ型で必要な記憶域は2バイトであるため、NUMBERデータ型よりサイズが小さくなります。また、NUMBERデータ型より高いパフォーマンスを提供します。SMALLINTデータ型は、指定することはできますが、NUMBER(38)にマップされます。

次の例では、表numericsを変更し、SMALLINTデータ型でcol2を追加します。表の説明にデータ型がNUMBER(38)であることが示されています。列col2は削除されます。2つ目のALTER TABLEによって、TT_SMALLINTデータ型でcol2が追加されます。

Command> ALTER TABLE numerics ADD COLUMN col2 SMALLINT;
Command> DESCRIBE Numerics;
Table USER1.NUMERICS:
Columns:
COL1                            TT_TINYINT
COL2                            NUMBER (38)
1 table found.
(primary key columns are indicated with *)
Command> ALTER TABLE numerics  COLUMN col2;
Command> ALTER TABLE numerics ADD COLUMN col2 TT_SMALLINT;
Command> DESCRIBE numerics;
Table USER1.NUMERICS:
Columns:
COL1                            TT_TINYINT
COL2                            TT_SMALLINT
1 table found.
(primary key columns are indicated with *)

TT_TINYINT

TT_TINYINTデータ型は、0から255(2^8-1)の範囲の符号なし整数です。このデータ型で必要な記憶域は1バイトであるため、NUMBERデータ型よりサイズが小さくなります。また、NUMBERデータ型より高いパフォーマンスを提供します。TT_TINYINTを否定するデータ型はTT_SMALLINTです。また、TINYINTを指定することはできません。

次の例では、col1という列をデータ型TINYINTで定義するnumericsという表を最初に作成します。エラーが戻されます。その後、データ型TT_TINYINTで列を再定義します。

Command> CREATE TABLE numerics (col1 TINYINT);
3300: TINYINT is not a valid type name; use TT_TINYINT instead
The command failed.
Command> CREATE TABLE numerics (col1 TT_TINYINT);
Command> DESCRIBE numerics;
Table USER1.NUMERICS:
Columns:
COL1                            TT_TINYINT
1 table found.
(primary key columns are indicated with *)

浮動小数点数

浮動小数点数には、小数点を含めることも、含めないこともできます。また、浮動小数点数の範囲は、指数を使用して拡張することができます(たとえば、1.2E-20などです)。

浮動小数点数ではスケールを使用しません。これは、小数点の後に表示できる桁数が制限されていないためです。

バイナリの浮動小数点数は、バイナリ精度(数字0と1)を使用して格納されます。NUMBERデータ型の場合は、10進数の精度(数字0から9)を使用して格納されます。

NUMBERでサポートされている範囲と精度内にあるリテラル値は、NUMBERとして格納されます。これは、リテラルが10進数の精度を使用して表されるためです。

浮動小数点数には、次のいずれかのデータ型を使用します。

- BINARY_DOUBLE

- BINARY_FLOAT

- FLOATおよびFLOAT(n)

BINARY_DOUBLE

BINARY_DOUBLEは、64ビット倍精度の浮動小数点数です。

BINARY_FLOATおよびBINARY_DOUBLEはいずれも、特別な値であるInf、-InfおよびNaN(非数)をサポートし、IEEE標準に準拠しています。

浮動小数点数の制限は次のとおりです。

- BINARY_FLOAT

- 正の最小有限値: 1.17549E-38F

- 正の最大有限値: 3.40282E+38F

- BINARY_DOUBLE

- 正の最小有限値: 2.22507485850720E-308

- 正の最大有限値: 1.79769313486231E+308

次の例では表を作成し、BINARY_FLOATおよびBINARY_DOUBLEデータ型で2つの列を定義します。

Command> CREATE TABLE BfBd (Col1 BINARY_FLOAT, Col2 BINARY_DOUBLE);
Command> DESCRIBE BfBd;
Table UISER1.BFBD:
Columns:
COL1                            BINARY_FLOAT
COL2                            BINARY_DOUBLE
1 table found.
(primary key columns are indicated with *)

BINARY_FLOAT

BINARY_FLOATは、32ビット単精度の浮動小数点数です。

FLOATおよびFLOAT(n)

TimesTenでは、ANSI型FLOATもサポートされます。FLOATは、正確な数値型であり、NUMBER型として実装されます。nの値は、格納できる精度のビット数(1から126)を示します。2進精度から10進精度に変換するには、nに0.30103を乗算します。10進精度から2進精度に変換するには、10進精度に3.32193を乗算します。2進精度の126桁は、10進精度の38桁とほぼ等しくなります。

BINARYデータ型およびVARBINARYデータ型

BINARYデータ型は、長さがnバイトの固定長のバイナリ値(nの値の範囲は1から8300バイト)です。BINARYデータ型にはnバイトの記憶域が必要です。データは後続の0(ゼロ)を使用してその列の最大長まで調整されます。ゼロ埋め比較セマンティクスが使用されます。

VARBINARYデータ型は、最大長がnバイトの可変長のバイナリ値(nの値は1から4,194,304(2^22)バイト)です。

次の例では表を作成し、2つの列(データ型BINARYで定義されるcol1とデータ型VARBINARYで定義されるcol2)を定義します。次に、各列にバイナリ・データが挿入されます。BINARY値では、右側にゼロが埋め込まれることに注意してください。

注意:
TimesTenで16進リテラルをバイナリ・データとして割り当てる方法の詳細は、「定数」でHexadecimalLiteralの説明を参照してください。

Command> CREATE TABLE bvar (col1 BINARY (10), col2 VARBINARY (10));
Command> DESCRIBE bvar;
Table USER1.BVAR:
Columns:
COL1                            BINARY (10)
COL2                            VARBINARY (10) INLINE
1 table found.
(primary key columns are indicated with *)

Command> INSERT INTO bvar (col1, col2)
> VALUES (0x4D7953514C, 0x39274D);
1 row inserted.

Command> select * from bvar;
< 4D7953514C0000000000, 39274D >
1 row found.

数値の優先順位

式の結果の型は、型の優先順位が最も高いオペランドにより決定されます。数値の優先順位は次のとおりです(高い順位から低い順位へ)。

- BINARY_DOUBLE

- BINARY_FLOAT

- NUMBER

- TT_BIGINT

- TT_INTEGER

- TT_SMALLINT

- TT_TINYINT

たとえば、TT_INTEGERとBINARY_FLOAT値の合計は、BINARY_FLOATのほうが数値の優先順位が高いため、BINARY_FLOAT型になります。同様に、NUMBERとBINARY_DOUBLE値の積はBINARY_DOUBLE型になります。

LOBデータ型

ラージ・オブジェクト(LOB)データ型では、テキスト、イメージ、ビデオ、空間データなどの、サイズの大きい非構造化データを格納できます。LOBには、BLOB、CLOBおよびNCLOBデータ型があります。

LOBデータ型の列では、データの挿入や更新を行うことができます。更新操作では、EMPTY_CLOBまたはEMPTY_BLOBを使用してLOB値をNULL、つまり空の値に設定したり、LOB全体を新しいデータに置き換えることができます。別のLOB値でLOB値を更新できます。LOB列が含まれている行を削除すると、LOB値も削除されます。

LOBデータ型のセマンティクスは、次のSQLセマンティクスと似ています。

- BLOBデータ型はSQL VARBINARYセマンティクスを使用します。

- CLOBデータ型はSQL VARCHAR2セマンティクスを使用します。

- NCLOBデータ型はSQL NVARCHAR2セマンティクスを使用します。

次のSQL文、演算子および関数は、1つ以上のLOBデータ型を引数として受け入れます。

- SQL文: CREATE TABLE、SELECT、INSERTおよびUPDATE

- 演算子: LIKEおよびIS [NOT] NULL

- 関数: ASCIISTR、CONCAT、INSTR、INSTRB、INSTR4、LENGTH、LENGTHB、LOWER、LPAD、NLSSORT、NVL、TRIM、LTRIM、RTRIM、SUBSTR、SUBSTRB、SUBSTR4、REPLACE、RPAD、SOUNDEX、TO_DATE、TO_NUMBER、TO_CHARおよびUPPER

注意:
LOBデータ型のサポートの詳細は、前述の文、演算子および関数のドキュメントを参照してください。第6章「SQL文」、第5章「検索条件」および第4章「関数」をそれぞれ参照してください。

説明

- LOB変換SQL関数(TO_BLOB、TO_CLOBおよびTO_LOB)は、必要なLOBデータ型への変換を行います。

- LOB列は常に表外に保存されるため、LOB列の宣言時にはINLINE属性を使用できません。

- 1つの表内に複数のLOBデータ型の列を定義できます。

- LOB列で主キーを作成できません。LOB列には、索引(範囲、ハッシュ、ビットマップ)を定義できません。

- ディテール表にLOB列が含まれている場合は、マテリアライズド・ビューを作成できません。

- SQLに加えて、PL/SQL、ODBC、JDBC、OCIおよびPRO*C/C++でLOB固有のAPIを使用してLOBを作成および更新できます。これらのAPIの詳細は、該当するTimesTenの開発者ガイドを参照してください。

次の各項では、各LOBデータ型についてさらに詳しく説明します。

- BLOB

- CLOB

- NCLOB

さらに、次の各項では、LOB全般に関する詳細情報も示します。

- NULLのLOBと空のLOBの違い

- LOBの初期化

BLOB

バイナリLOB(BLOB)データ型は、構造化されていないバイナリ・ラージ・オブジェクトを格納するために使用します。BLOBデータの最大サイズは16MBです。

注意:
TimesTenで16進リテラルをバイナリ・データとして割り当てる方法の詳細は、「定数」でHexadecimalLiteralの説明を参照してください。

列でBLOBを定義する場合、VARBINARYやその他の可変長データ型の場合とは異なり、最大文字数は定義しません。かわりに、この列では次を定義します。

Command> CREATE TABLE blob_content (
> id NUMBER PRIMARY KEY,
> blob_column BLOB );

BLOBを操作するために、次の関数が提供されます。

- BLOBを初期化する方法には、空のBLOBを初期化するためのEMPTY_BLOB関数を含む、2つの方法があります。BLOBの初期化の詳細は、「LOBの初期化」を参照してください。空のLOBとNULLのLOBとの違いの詳細は、「NULLのLOBと空のLOBの違い」を参照してください。

- バイナリ値をBLOBに変換するには、TO_LOBまたはTO_BLOB関数を使用します。詳細は、「TO_BLOB」および「TO_LOB」を参照してください。

CLOB

キャラクタLOB(CLOB)データ型は、シングルバイト・キャラクタ・データおよびマルチバイト・キャラクタ・データを格納するために使用します。CLOBデータの最大サイズは4MBです。CLOBに格納できる最大文字数は、シングルバイト・キャラクタ・セットまたはマルチバイト・キャラクタ・セットのいずれを使用しているかによって異なります。

列でCLOBを定義する場合、VARCHARやその他の可変長データ型の場合とは異なり、最大文字数は定義しません。かわりに、この列では次を定義します。

Command> CREATE TABLE clob_content (
> id NUMBER PRIMARY KEY,
> clob_column CLOB );

CLOBを操作するために、次の関数が提供されます。

- CLOBを初期化する方法には、空のCLOBを初期化するためのEMPTY_CLOB関数を含む、2つの方法があります。CLOBの初期化の詳細は、「LOBの初期化」を参照してください。空のLOBとNULLのLOBとの違いの詳細は、後述の「NULLのLOBと空のLOBの違い」を参照してください。

- 文字列をCLOBに変換するには、TO_LOBまたはTO_CLOB関数を使用します。詳細は、「TO_CLOB」および「TO_LOB」を参照してください。

NCLOB

各国語キャラクタLOB(NCLOB)データ型は、Unicodeデータを格納するために使用します。NCLOBデータの最大サイズは4MBです。

列でNCLOBを定義する場合、VARCHARやその他の可変長データ型の場合とは異なり、最大文字数は定義しません。かわりに、この列では次を定義します。

Command> CREATE TABLE nclob_content (
> id NUMBER PRIMARY KEY,
> nclob_column NCLOB );

NCLOBデータ型では、次の関数がサポートされます。

- NCLOBを初期化する方法には、空のNCLOBを初期化するためのEMPTY_CLOB関数を含む、2つの方法があります。NCLOBの初期化の詳細は、「LOBの初期化」を参照してください。空のLOBとNULLのLOBとの違いの詳細は、この直後の「NULLのLOBと空のLOBの違い」を参照してください。

- 文字列をNCLOBに変換するには、TO_LOBまたはTO_CLOB関数を使用します。詳細は、「TO_CLOB」および「TO_LOB」を参照してください。

NULLのLOBと空のLOBの違い

NULLのLOBは、空のLOBとは意味が異なります。

- NULLのLOBはNULLの値を持つため、NULLのLOBをリクエストするとNULLが返されます。

- 空のLOBは、EMPTY_CLOBまたはEMPTY_BLOB関数により初期化されます。これらの関数はLOBを初期化して、長さが0(ゼロ)のNULL以外の値にします。EMPTY_CLOBまたはEMPTY_BLOB関数を使用して、NULL値不可列でLOBを初期化することもできます。

LOBの初期化

次の2つの方法のいずれかにより、LOBを初期化できます。

- EMPTY_BLOBまたはEMPTY_CLOB関数を使用して、BLOB、CLOBまたはNCLOB列に空のLOBを挿入できます。これは、データがないが、データの準備用にLOBを作成する場合に役立ちます。NULL値不可のLOB列を初期化する場合にも有用です。

- データを直接挿入することにより、LOBを初期化します。EMPTY_BLOBまたはEMPTY_CLOB関数を使用してLOBを初期化する必要はなく、単にデータを直接挿入できます。

次に、各タイプの初期化の例を示します。

次の例に示すように、EMPTY_CLOB関数を使用してLOBを初期化できます。

Command> INSERT INTO clob_content (id, clob_column)
> VALUES (1, EMPTY_CLOB( ) );
1 row inserted.

次の例に示すように、データを直接挿入して、LOBを初期化できます。

Command> INSERT INTO clob_content(id, clob_column)
> VALUES (4, 'Demonstration of the LOB initialization.');
1 row inserted.

次の例に示すように、UPDATE文を使用して、既存のLOB値を初期化または更新できます。

Command> UPDATE blob_content
> SET blob_column = 0x000AF4511
> WHERE id = 1;
1 row updated.

Command> select * from blob_content;
< 1, 0000AF4511 >
1 rows found.

Command> UPDATE clob_content
> SET clob_column = 'Demonstration of the CLOB data type '
> WHERE id = 1;
1 row updated.

Command> SELECT * FROM clob_content;
< 1, Demonstration of the CLOB data type >

ROWIDデータ型

表またはマテリアライズド・ビューの行のアドレスは、行ID (ROWID)と呼ばれます。行IDのデータ型はROWIDです。ROWIDは、ROWID擬似列を問い合せることで確認できます。ROWID擬似列の詳細は、「ROWID」を参照してください。

SQL文では、リテラルのROWID値は、次のように一重引用符で囲んだ定数として指定してください。

Command> SELECT ROWID, last_name
> FROM employees
> WHERE department_id = 20;

< BMUFVUAAACOAAAALhM, Hartstein >
< BMUFVUAAACOAAAAMhM, Fay >
2 rows found.

Command> SELECT ROWID, last_name FROM employees
> WHERE ROWID='BMUFVUAAACOAAAALhM';
< BMUFVUAAACOAAAALhM, Hartstein >
1 row found.

ROWIDデータ型を次のように使用します。

- 表の列またはマテリアライズド・ビューの列のデータ型として使用できます。

- 次のタイプの式で使用できます。

- リテラル

- 比較: <、<=、>、>=、BETWEEN

- CASE式

- CAST

- COALESCE

- COUNT

- DECODE

- GREATEST

- IN

- IS NULL

- LEAST

- MAX

- MIN

- NVL

- TO_CHAR

- TT_HASH

- ORDER BY句およびGROUP BY句で使用できます。

- INSERT...SELECT文で使用できます。次の例では、列col1はROWIDデータ型で定義されています。

Command> DESCRIBE master;

Table MYUSER.MASTER:
Columns:
*ID                              ROWID NOT NULL
NAME                            CHAR (30)

1 table found.
(primary key columns are indicated with *)

Command> INSERT INTO master(id, name) SELECT ROWID, last_name FROM employees;
107 rows inserted.
Command> SELECT * FROM master;
< BMUFVUAAACOAAAAGhG, King                           >
< BMUFVUAAACOAAAAHhG, Kochhar                        >
< BMUFVUAAACOAAAAIhG, De Haan                        >
...
107 rows found.

次に示すように、TO_CHAR関数をROWID擬似列で使用できます。

Command> INSERT INTO master(id, name)
> SELECT TO_CHAR(ROWID), last_name FROM employees;
107 rows inserted.
Command> SELECT * FROM master;
< BMUFVUAAACOAAAAGhG, King                           >
< BMUFVUAAACOAAAAHhG, Kochhar                        >
...
107 rows found.

次に示すように、CAST関数をROWID擬似列で使用できます。

Command> CREATE TABLE master (id CHAR(20) NOT NULL PRIMARY KEY,
> name CHAR(30));
Command> INSERT INTO master(id, name) SELECT CAST(ROWID AS CHAR(20)),
> last_name from employees;
107 rows inserted.

暗黙的な型変換は、値の割当てと、ROWIDデータとCHARデータ間またはROWIDデータとVARCHAR2データ間の比較処理でサポートされています。

CHAR、VARCHAR2およびROWIDのオペランドがCOALESCE、DECODE、NVLまたはCASE式(「CASE式」を参照)で組み合せて使用されている場合、結果のデータ型はROWIDになります。CHAR値およびVARCHAR2値を使用した式は、ROWID値に変換されて式が評価されます。

CONCATなどの文字列関数でROWID値を使用するには、アプリケーションでSQL TO_CHAR関数を使用してROWID値を明示的にCHAR値に変換する必要があります。

日時データ型

日時データ型には次のものがあります。

- DATE

- TIME

- TIMESTAMP

- TT_DATE

- TT_TIMESTAMP

DATE

DATE値の書式はYYYY-MM-DD HH:MI:SSで、範囲は-4712-01-01(紀元前4712年1月1日)から9999-12-31(西暦9999年12月31日)です。小数秒はありません。DATE型では7バイトの記憶域が必要です。

TimesTenでは、ユーザー指定のNLS_DATE_FORMAT設定はサポートされていません。SQL TO_CHARおよびTO_DATE関数を使用して、他の形式を指定できます。

TIME

TIME値の書式はHH:MI:SSで、範囲は00:00:00(午前0時)から23:59:59(午後11時59分59秒)です。TIMEデータ型では8バイトの記憶域が必要です。

TIMESTAMP

TIMESTAMP値の書式は、YYYY-MM-DD HH:MI:SS [.FFFFFFFFF]です。小数秒の精度の範囲は0(ゼロ)から9です。デフォルトは6です。日付の範囲は-4712-01-01(紀元前4712年1月1日)から9999-12-31(西暦9999年12月31日)までです。TIMESTAMP型では12バイトの記憶域が必要です。TIMESTAMP型は日付の範囲が広く、TT_TIMESTAMPより高い精度をサポートします。

TimesTenでは、ユーザー指定のNLS_TIMESTAMP_FORMAT設定はサポートされていません。SQLのTO_CHARおよびTO_DATE関数を使用すると、その他の書式を指定できます。

TT_DATE

TT_DATE値の書式はYYYY-MM-DDで、範囲は1753-01-01(西暦1753年1月1日)から9999-12-31(西暦9999年12月31日)です。TT_DATEデータ型では4バイトの記憶域が必要です。

TT_TIMESTAMP

TT_TIMESTAMP値の書式は、YYYY-MM-DD HH:MI:SS [.FFFFFFFFF]です。小数秒の精度は6です。範囲は1753-01-01 00:00:00(1753年1月1日の午前0時)から9999-12-31 23:59:59(9999年12月31日の午後11時59分59秒)です。TT_TIMESTAMP型では8バイトの記憶域が必要です。TT_TIMESTAMPは、TIMESTAMPデータ型より高速で、記憶域サイズが小さくなります。

TimesTenの時間隔

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

- 時間隔データ型の使用

- DATEデータ型およびTIMEデータ型の使用

- タイム・ゾーン変換の処理

- 算術演算における日時データ型および時間隔データ型

時間隔データ型の使用

TimesTen型モードを使用している場合は、時間隔型の詳細について、Oracle TimesTen In-Memory Database APIおよびSQLリファレンス・ガイド、リリース6.0.3を参照してください。

TimesTenの時間隔型は、定数で指定する場合または式の中間結果を表す場合でのみ使用できます。時間隔型は最終結果に使用することはできません。列に時間隔型を定義することはできません。「データ型の仕様」を参照してください。

時間隔である単一フィールドのリテラルを式に指定することはできますが、時間隔データ型を戻す完結した式は指定できません。時間隔の結果から必要な要素を抽出するには、かわりにEXTRACT関数を使用する必要があります。

TimesTenでは、次の形式の時間隔リテラルがサポートされています。

INTERVAL [+/-] CharString IntervalQualifier

DATEデータ型およびTIMEデータ型の使用

この項では、DATE、TIMEおよびTIMESTAMPの各データ型の例を示します。

DATE型のdcol列とTIME型のtcol列を含む、sampleという名前の表を作成するには、次を使用します。

CREATE TABLE sample (tcol TIME, dcol DATE);

sample表にDATEとTIMEの値を挿入する構文は、次のとおりです。

INSERT INTO sample VALUES (TIME '12:00:00', DATE '1998-10-28');

sample表の、1998年10月29日の正午から午後4時までの行をすべて選択する構文は、次のとおりです。

SELECT * FROM sample WHERE dcol = DATE '1998-10-29'
AND tcol BETWEEN TIME '12:00:00' AND TIME '16:00:00';

TIMESTAMPデータ型のtscol列を含む、sample2という名前の表を作成して、1998年10月29日の正午から午後4時までの行をすべて選択するには、次の文を使用します。

CREATE TABLE sample2 (tscol TIMESTAMP);
INSERT INTO sample2 VALUES (TIMESTAMP '1998-10-28 12:00:00');
SELECT * FROM sample2 WHERE tscol
BETWEEN TIMESTAMP '1998-10-29 12:00:00' AND '1998-10-29 16:00:00';

注意:
TIME、DATEおよびTIMESTAMP型については、リテラルと文字列の両方の書式を使用できます。たとえばTIMEの値は、timestring ('12:00:00')およびtimeliteral (TIME '16:00:00')の両方の書式で指定できます。TimesTenでは、最初の値をCHAR型として読み取り、後で必要に応じてTIME型に変換します。2番目の値はTIMEとして読み取ります。前述の例では、リテラル書式を使用しています。マイクロ秒に満たない端数は、「Data truncated」エラーになります。

タイム・ゾーン変換の処理

TimesTenでは、TIMEZONEはサポートされません。TIMEおよびTIMESTAMPデータ型値は、時差の調整を行わずに格納されます。アプリケーションでは、あるタイムゾーンを想定し、データベースに値を送信する前に、TIMEおよびTIMESTAMPをそのタイムゾーンに変換する必要があります。たとえば、アプリケーションでタイムゾーンを太平洋標準時間と想定します。アプリケーションで太平洋夏時間または東部標準時間のTIMEおよびTIMESTAMP値を使用している場合は、TIMEおよびTIMESTAMPを太平洋標準時間に変換する必要があります。

算術演算における日時データ型および時間隔データ型

TimesTen型モードを使用している場合は、算術演算での日時型および時間隔型の詳細について、Oracle TimesTen In-Memory Database APIおよびSQLリファレンス・ガイド、リリース6.0.3を参照してください。

日付、タイムスタンプおよび時間隔データで算術演算を実行できます。TimesTenでは、次のルールに従って結果が計算されます。

- ORA_DATEまたはORA_TIMESTAMP値に数値を加算、またはそこから数値を減算できます。TimesTenでは内部的にORA_TIMESTAMP値をORA_DATE値に変換します。

- TT_DATEまたはTT_TIMESTAMP値に数値を加算、またはそこから数値を減算でき、結果として得られる値はそれぞれTT_DATEまたはTT_TIMESTAMPになります。

- 数値は日数として扱われます。たとえば、SYSDATE + 1は、明日になります。SYSDATE - 7は、1週間前になります。

- 2つの日付列の減算により、2つの日付間の日数が得られます。戻り型は数値です。

- 日付値の加算はできません。日付値またはタイムスタンプ値の乗算や除算はできません。

表1-5に、日時の演算処理のマトリックスを示します。ダッシュはサポートされていない操作を表します。このマトリックスでは、Oracle型モードを使用していることが前提になります。

表1-5 DateTime算術演算

DATE

TT_DATE

TIMESTAMP

TT_TIMESTAMP

NUMERIC

INTERVAL

DATE

+(プラス)

—

—

—

—

DATE

DATE

-(マイナス)

NUMBER

NUMBER

INTERVAL

INTERVAL

DATE

DATE

*(乗算)

—

—

—

—

—

—

/(除算)

—

—

—

—

—

—

TT_DATE

+(プラス)

—

—

—

—

TT_DATE

TT_DATE

-(マイナス)

NUMBER

TT_BIGINT

INTERVAL

INTERVAL

TT_DATE

TT_DATE

*(乗算)

—

—

—

—

—

—

/(除算)

—

—

—

—

—

—

TIMESTAMP

+(プラス)

—

—

—

—

DATE

TIMESTAMP

-(マイナス)

INTERVAL

INTERVAL

INTERVAL

INTERVAL

DATE

TIMESTAMP

*(乗算)

—

—

—

—

—

—

/(除算)

—

—

—

—

—

—

TT_TIMESTAMP

+(プラス)

—

—

—

—

TT_TIMESTAMP

TT_TIMESTAMP

-(マイナス)

INTERVAL

INTERVAL

INTERVAL

INTERVAL

TT_TIMESTAMP

TT_TIMESTAMP

*(乗算)

—

—

—

—

—

—

/(除算)

—

—

—

—

—

—

NUMERIC

+(プラス)

DATE

TT_DATE

DATE

TT_TIMESTAMP

なし

—

-(マイナス)

—

—

—

—

なし

—

*(乗算)

—

—

—

—

なし

INTERVAL

/(除算)

—

—

—

—

なし

—

INTERVAL

+(プラス)

DATE

TT_DATE

TIMESTAMP

TT_TIMESTAMP

—

INTERVAL

-(マイナス)

—

—

—

—

INTERVAL

*(乗算)

—

—

—

—

INTERVAL

—

/(除算)

—

—

—

—

INTERVAL

—

注意:
時間隔データ型は、完結した式の最終結果に使用することはできません。この時間隔の結果から必要な要素を抽出するには、EXTRACT関数を使用する必要があります。

SELECT tt_date1 - tt_date2 FROM t1;
SELECT EXTRACT(DAY FROM timestamp1-timestamp2) FROM t1;
SELECT * FROM t1 WHERE timestamp1 - timestamp2 = NUMTODSINTERVAL(10, 'DAY');
SELECT SYSDATE + NUMTODSINTERVAL(20,'SECOND') FROM dual;
SELECT EXTRACT (SECOND FROM timestamp1-timestamp2) FROM dual;
/* select the microsecond difference between two timestamp values d1 and d2 */
SELECT 1000000*(EXTRACT(DAY FROM d1-d2)*24*3600+
EXTRACT(HOUR FROM d1-d2)*3600+
EXTRACT(MINUTE FROM d1-d2)*60+EXTRACT(SECOND FROM d1-d2) FROM d1;

この例では、2つの列にTIMESTAMP値を挿入してから、EXTRACT関数を使用してそれらの2つの値を減算します。

Command> CREATE TABLE ts (id TIMESTAMP, id2 TIMESTAMP);
Command> INSERT INTO ts VALUES (TIMESTAMP '2007-01-20 12:45:23',
> TIMESTAMP '2006-12-25 17:34:22');
1 row inserted.
Command> SELECT EXTRACT (DAY FROM id - id2) FROM ts;
< 25 >
1 row found.

次の問合せでは、エラーが戻されます。結果がINTERVALとなるSELECT文は実行できません。

SELECT timestamp1 - timestamp2 FROM t1;

INTERVAL YEAR TO MONTHとINTERVAL DAY TO SECONDは比較できません。

SELECT * FROM t1 WHERE timestamp1 - timestamp2 = NUMTOYMINTERVAL(10, 'YEAR');

INTERVAL DAY TO SECONDとINTERVAL DAYは比較できません。

SELECT * FROM t1 WHERE timestamp1 - timestamp2 = INTERVAL '10' DAY;

INTERVAL DAY TO SECONDからYEARを抽出することはできません。

SELECT EXTRACT (YEAR FROM timestamp1 - timestamp2) FROM dual;

日時および時間隔の算術演算の制限

日時および時間隔の算術演算を実行する場合、次の制限を考慮してください。

- INTERVAL YEARとINTERVAL MONTHに対してDATEおよびTIMESTAMP型を使用した加算または減算の結果は終了しません。たとえば、DATEまたはTIMESTAMPの2004-02-29に1年を追加すると、2005年2月29日は存在しないため(2005年はうるう年ではありません)、日付算術エラー(TimesTenエラー2787)になります。INTERVALの1月をDATEの2005-01-30に追加すると、2月に30日はないため同じエラーになります。

- 結果はINTERVAL DAYに対して終了します。

- 時間隔データ型は、完結した式の最終結果に使用することはできません。時間隔の結果から必要な要素を抽出するには、EXTRACT関数を使用する必要があります。

記憶域要件

宣言された列の長さが128バイトより大きい可変長の列は表外に保存されます。宣言された列の長さが128バイト以下の可変長の列は、表内に保存されます。すべてのLOBデータ型は表外に保存されます。

文字セマンティクスの場合、表外に保存されるバイトの数はキャラクタ・セットによって異なります。たとえば、文字ごとに4バイトが必要なキャラクタ・セットでは、宣言された列の長さが32(128/4)より大きい可変長の列は表外に保存されます。

表1-6に、データ型別の記憶域要件を示します。

表1-6 データ型別の記憶域要件

データ型

必要な記憶域

BINARY(n)

nバイト

BINARY_DOUBLE

8バイト

BINARY_FLOAT

4バイト

CHAR(n[BYTE|CHAR])

nバイト、または文字セマンティクスを使用する場合はn文字

文字セマンティクスを使用する場合、列長(n)は、長さセマンティクスとキャラクタ・セットに基づきます。

DATE

7バイト

時間隔

TimesTenでは、時間隔型を格納することはできません。

NCHAR(n)

必要なバイト数は2×nです。nは文字数です。

NUMBER

5から22バイト

NVARCHAR2(n)

NOT INLINE列の場合:

32ビット・プラットフォームでは、2×(値の長さ)+20バイト(最小28バイト)。

64ビット・プラットフォームでは、2×(値の長さ)+24バイト(最小40バイト)。

INLINE列の場合:

32ビット・プラットフォームでは、2×(列の長さ)+4バイト。

64ビット・プラットフォームでは、2×(列の長さ)+8バイト。

ROWID

12バイト

TIMESTAMP

12バイト

TT_BIGINT

8バイト

TT_DATE

4バイト

TT_DECIMAL(p,s)

約p/2バイト

TT_INT[EGER]

4バイト

TT_SMALLINT

2バイト

TT_TIME

8バイト

TT_TIMESTAMP

8バイト

TT_TINYINT

1バイト

VARBINARY(n)

NOT INLINE列の場合:

32ビット・プラットフォームでは、値の長さ+20バイト(最小28バイト)。

64ビット・プラットフォームでは、値の長さ+24バイト(最小40バイト)。

INLINE列の場合:

32ビット・プラットフォームでは、列の長さ+4バイト。

64ビット・プラットフォームでは、列の長さ+8バイト。

VARCHAR2(n[BYTE|CHAR])

NOT INLINE列の場合:

32ビット・プラットフォームでは、値の長さ+20バイト(最小28バイト)。NULL値は(nullビット)+4バイト、または4.125バイトとして格納されます。

64ビット・プラットフォームでは、値の長さ+24バイト(最小40バイト)。NULL値は(nullビット)+8バイト、または8.125バイトとして格納されます。

この記憶域の原則は、すべての可変長NOT INLINEデータ型(TT_VARCHAR、TT_NVARCHAR、VARCHAR2、NVARCHAR2およびVARBINARY)に適用されます。

INLINE列の場合:

32ビット・プラットフォームでは、n+4バイト。NULL値は(nullビット)+n+4バイトとして格納されます。

64ビット・プラットフォームでは、n+8バイト。NULL値は(nullビット)+n+8バイトとして格納されます。

文字セマンティクスを使用する場合、列長(n)は、長さセマンティクスとキャラクタ・セットに基づきます。

BLOBおよびCLOB

32ビット・プラットフォームでは、値の長さ+36バイト(最小40バイト)

64ビット・プラットフォームでは、値の長さ+48バイト(最小56バイト)

NCLOB

32ビット・プラットフォームでは、2×(値の長さ)+36バイト(最小40バイト)

64ビット・プラットフォームでは、2×(値の長さ)+48バイト(最小56バイト)

データ型比較ルール

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

数値

大きな値は小さな値より大きくなります。-1は10よりも小さく、-10は-1より小さくなります。

浮動小数点値NaNは、他のすべての数値より大きく、NaN自体と同等です。

日付値

新しい日付の方が古い日付より大きいとみなされます。たとえば、'10-AUG-2005'に相当する日付は、'30-AUG-2006'に相当する日付よりも小さく、'30-AUG-2006 1:15 pm'は、'30-AUG-2006 10:10 am'より大きくなります。

文字値

文字値は、次の方法で比較されます。

- バイナリ・ソートおよび言語ソート

- 空白埋め比較セマンティクスおよび非空白埋め比較セマンティクス

バイナリ・ソートおよび言語ソート

バイナリ・ソートでは、データベース・キャラクタ・セットでの文字の数値コードの連結値に従って文字列が比較されます。キャラクタ・セット内のある文字の数値がもう一方の文字の数値より大きい場合、その文字がもう一方の文字より大きいと判断されます。空白はすべての文字より小さくなります。

言語ソートは、数値コードのバイナリ順序が、比較している文字の言語順序と一致しない場合に役立ちます。言語ソートでは、NLS_SORTによって設定された言語ルールに基づいて、SQLソートおよびSQL比較が行われます。言語ソートの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の言語ソートに関する説明を参照してください。

デフォルトはバイナリ・ソートです。

空白埋め比較セマンティクスおよび非空白埋め比較セマンティクス

空白埋め比較セマンティクスを使用している場合に2つの値の長さが異なると、両方が同じ長さになるまで短い方の値に空白が追加されます。その後、最初の異なる文字が検出されるまで1文字ずつ値が比較されます。この最初の違いが検出された位置で、より大きな文字を持つ値が、大きい方の値とみなされます。2つの値に異なる文字がない場合、これらは同等であるとみなされます。つまり、2つの値の違いが後続の空白の数のみである場合、これらの値は同等であるとみなされます。

空白埋め比較セマンティクスは、比較対象の両方の値がCHAR型またはNCHAR型の式あるいはテキスト・リテラルである場合に使用します。

非空白埋め比較セマンティクスを使用している場合、最初の異なる文字が検出されるまで2つの値が1文字ずつ比較されます。この最初に違いが検出された位置で、より大きな文字を持つ値が、大きい方の値とみなされます。長さが異なる2つの値が短い方の値の最後まで同じである場合は、長い方が大きい値とみなされます。長さが同じ2つの値に異なる文字がない場合、これらは同等であるとみなされます。

非空白埋め比較セマンティクスは、比較対象の両方の値にVARCHAR2型またはNVARCHAR2型が使用されている場合に使用します。

空白埋め比較セマンティクスを使用した場合の例は、次のとおりです。

'a   ' = 'a'

非空白埋め比較セマンティクスを使用した場合の例は、次のとおりです。

'a   ' > 'a'

データ型変換

通常、1つの式に異なるデータ型の値を使用することはできません。ただし、TimesTenでは、データ型間の暗黙的および明示的な変換の両方がサポートされています。暗黙的な変換のアルゴリズムは、ソフトウェア・リリースの変更によって変更されることがあり、明示的な変換を指定しておくと、その動作は将来的にも確実になるため、明示的な変換をお薦めします。

暗黙的なデータ型変換

あるデータ型から別のデータ型への変換が適切である場合、TimesTenは値を変換します。

表1-7および表1-8に、TimesTenの暗黙的なデータ型変換をマトリックスで示します。セル内のYESは、その変換がサポートされていることを示します。セル内のNOは、その変換がサポートされていないことを示します。表の後に、暗黙的な変換のルールを示します。

表1-7 暗黙的なデータ型変換

CHAR

VARCHAR2

NCHAR

NVARCHAR2

DATE

TT_DATE

TIMESTAMP

TT_TIMESTAMP

CHAR

—

YES

YES

YES

YES

YES

YES

YES

VARCHAR2

YES

—

YES

YES

YES

YES

YES

YES

NCHAR

YES

YES

—

YES

YES

YES

YES

YES

NVARCHAR2

YES

YES

YES

—

YES

YES

YES

YES

DATE

YES

YES

YES

YES

—

YES

YES

YES

TT_DATE

YES

YES

YES

YES

YES

—

YES

YES

TIMESTAMP

YES

YES

YES

YES

YES

YES

—

YES

TT_TIMESTAMP

YES

YES

YES

YES

YES

YES

YES

—

NUMERIC

YES

YES

YES

YES

NO

NO

NO

NO

BLOB

NO

NO

NO

NO

NO

NO

NO

NO

CLOB

YES

YES

YES

YES

NO

NO

NO

NO

NCLOB

YES

YES

YES

YES

NO

NO

NO

NO

BINARY/ VARBINARY

YES

YES

YES

YES

NO

NO

NO

NO

ROWID

YES

YES

YES

YES

NO

NO

NO

NO

表1-8 暗黙的なデータ型変換(前の表の続き)

NUMERIC

BLOB

CLOB

NCLOB

BINARY/ VARBINARY

ROWID

CHAR

YES

YES

YES

YES

YES

YES

VARCHAR2

YES

YES

YES

YES

YES

YES

NCHAR

YES

YES

YES

YES

YES

YES

NVARCHAR2

YES

YES

YES

YES

YES

YES

DATE

NO

NO

NO

NO

NO

NO

TT_DATE

NO

NO

NO

NO

NO

NO

TIMESTAMP

NO

NO

NO

NO

NO

NO

TT_TIMESTAMP

NO

NO

NO

NO

NO

NO

NUMERIC

—

NO

NO

NO

NO

NO

BLOB

NO

—

NO

NO

YES

NO

CLOB

NO

NO

—

YES

NO

NO

NCLOB

NO

NO

YES

—

NO

NO

BINARY/ VARBINARY

NO

YES

YES

YES

—

NO

ROWID

NO

NO

NO

NO

NO

—

次のルールが適用されます。

- 文字データ型と非文字データ型に対する算術演算および比較中に、TimesTenはすべての文字データ型を数値または日時のいずれかの適切なデータ型に変換します。CHAR/VARCHAR2とNCHAR/NVARCHAR2の算術演算では、TimesTenはNUMBERに変換します。

- 算術演算では、文字値を数値に変換する場合、浮動小数点値INFおよびNANはサポートされません。

- 連結操作では、TimesTenにより、他のオペランドに応じて、文字データ型以外のデータ型がCHAR、NCHAR、VARCHAR2またはNVARCHAR2に変換されます。

- 数値と文字値を比較する場合、TimesTenは文字データを数値に変換します。

- 数値と日時値を比較する場合、TimesTenは文字データを日時値に変換します。

- タイムスタンプ値からDATE値への変換では、タイムスタンプ値の秒の小数部は切り捨てられます。

- BINARY_FLOATからBINARY_DOUBLEへの変換は正確に行われます。

- BINARY_DOUBLEの値がBINARY_FLOATでサポートされている精度のビット数よりも多いビット数を使用している場合、BINARY_DOUBLEからBINARY_FLOATへの変換は正確に行われません。

- 文字値または正確な数値(TT_TINYINT、TT_SMALLINT、TT_INTEGER、TT_BIGINT、NUMBER)と浮動小数点値(BINARY_FLOAT、BINARY_DOUBLE)間で変換を行うと、不正確になる場合があります。これは、文字値および正確な数値では10進数の精度が使用され、浮動小数点数ではバイナリ精度が使用されるためです。

- 数値を操作する際、TimesTenは、通常、最大容量を確保するために精度およびスケールを調整します。この場合、このような操作によって変換された数値データ型は、基礎となる表に含まれる数値データ型と異なることがあります。

- 代入を実行する場合、TimesTenは等号(=)の右側の値を左側の代入ターゲットのデータ型に変換します。

- SQL関数または演算子に不当なデータ型の引数を指定して使用する場合、TimesTenで暗黙的な変換がサポートされていれば、その引数を正当なデータ型に変換します。

- INSERT、INSERT... SELECTおよびUPDATE操作中に、TimesTenは変更する列のデータ型に値を変換します。

- キャラクタ・セットがTIMESTEN8である場合を除いて、CHAR/VARCHAR2とNCHAR/NVARCHAR2間の暗黙的および明示的な変換がサポートされます。暗黙的な変換の例を次に示します。

Command> CREATE TABLE convdemo (c1 CHAR (10), x1 TT_INTEGER);
Command> CREATE TABLE convdemo2 (c1 NCHAR (10), x2 TT_INTEGER);
Command> INSERT INTO convdemo VALUES ('ABC', 10);
1 row inserted.
Command> INSERT INTO convdemo VALUES ('def', 100);
1 row inserted.
Command> INSERT INTO convdemo2 SELECT * FROM convdemo;
2 rows inserted.
Command> SELECT x1,x2,convdemo.c1, convdemo2.c1
> FROM convdemo, convdemo2 where Convdemo.c1 = convdemo2.c1;
X1, X2, C1, C1
< 10, 10, ABC       , ABC        >
< 100, 100, def       , def        >
2 rows found.

Null値

NULL値は値がないことを示します。これは、存在しない値のプレースホルダとして使用されます。実際のデータ値が不定または値に意味がない場合に、NULLを使用してください。NULLは値0(ゼロ)と同じではないため、0(ゼロ)の数値を表すためにNULL値を使用しないでください。式内のパラメータには、そのデータ型に関係なく、NULLを含めることができます。さらに、表の作成時に列にNOT NULLまたはPRIMARY KEY整合性制約を指定している場合を除き、表内のすべての列にはそのデータ型に関係なくNULLを含めることができます。

NULLの次の特性は、行、パラメータ、ローカル変数の処理に影響します。

- デフォルトでは、NULLはソートにおいて最も優先順位が高い値としてソートされます。ただし、ORDER BY句でNULLS FIRSTまたはNULLS LASTを使用して、NULLのソート順序値を変更できます。

- GROUP BYまたはSELECT DISTINCTの演算を除き、2つのNULL値は非等価です。

- NULLを含む算術式は、NULLに評価されます。実際、オペランドにNULLを指定した場合、(連結演算子を除く)すべての演算子はNULLを戻します。たとえば、(5-col)のcolがNULLの場合、NULLと評価されます。

- NULLを検査するには、比較条件IS NULLまたはIS NOT NULLを使用します。NULLはデータの欠落を表すため、任意の値や別のNULLとの関係で等号や不等号は成り立ちません。そのため、select * from employees where mgr_id = NULLという文は、このNULLに対する比較を行うことができないため、0(ゼロ)に評価されます。ただし、select * from employees where mgr_id is NULLという文は、会社のCEOを返します。CEOがマネージャを持たない唯一の従業員であるためです。詳細は、「IS NULL条件」を参照してください。

- NULL値自体は演算子または条件のオペランドとして直接使用できます。たとえば、(1 = NULL)比較がサポートされます。これは、(1 = CAST(NULL AS INT))のように、NULLを適切なデータ型にキャストする場合と同じです。両方の方法がサポートされ、同じ結果を返します。

これらの属性によって、次のような場合は、NULLを含む列、行、パラメータが無視されます。

- NULLを含む列を結合して表を結合した場合。

- 集計関数を実行した場合。

第5章「検索条件」で説明するSQL条件を使用して、NULLを明示的にテストできます。TimesTenでサポートされるAPIにより、NULL値を処理する方法が提供されます。たとえば、ODBCアプリケーションで、関数SQLBindCol、SQLBindParameter、SQLGetDataおよびSQLParamDataを使用して、NULL値の入出力を処理します。

INFおよびNAN

TimesTenでは、IEEE浮動小数点値Inf(正の無限大)、-Inf(負の無限大)およびNaN(非数)がサポートされています。

定数値

定数値は、浮動小数点定数が許可されている場合に使用できます。次の定数がサポートされています。

- BINARY_FLOAT_INFINITY

- -BINARY_FLOAT_INFINITY

- BINARY_DOUBLE_INFINITY

- -BINARY_DOUBLE_INFINITY

- BINARY_FLOAT_NAN

- BINARY_DOUBLE_NAN

次の例では、BINARY_FLOAT型の列およびTT_INTEGER型の列を含む表を作成します。BINARY_FLOAT_INFINITYおよびBINARY_FLOAT_NANは、BINARY_FLOAT型の列に挿入されます。

Command> CREATE TABLE bfdemo (id BINARY_FLOAT, Ii2 TT_INTEGER);
Command> INSERT INTO bfdemo VALUES (BINARY_FLOAT_INFINITY, 50);
1 row inserted.
Command> INSERT INTO bfdemo VALUES (BINARY_FLOAT_NAN, 100);
1 row inserted.
Command> SELECT * FROM bfdemo;
< INF, 50 >
< NAN, 100 >
2 rows found.

主キーの値

Inf、-InfおよびNaNは、主キーで定義された列で使用できる値です。これは、主キーで定義された列では使用できないNULLとは異なります。

BINARY_FLOAT列およびBINARY_DOUBLE列には、Inf、-InfおよびNaNの値のみ挿入できます。

InfおよびNaN(浮動小数点の条件)の選択

浮動小数点の条件によって、式が無限大であるか、演算での未定義の結果(NaN(非数))であるかが判別されます。

次の構文を考えてみます。

Expression IS [NOT] {NAN|INFINITE}

Expression は、数値データ型、または数値データ型に暗黙的に変換可能なデータ型に解決される必要があります。

次の表に、浮動小数点の条件を示します。

条件

処理

例

IS [NOT] NAN

NOTを指定せずExpressionが値NaNの場合、TRUEが返されます。NOTを指定してExpressionが値NaNでない場合、TRUEが返されます。

SELECT * FROM bfdemo WHERE id IS
NOT NAN;
ID, ID2
< INF, 50 >
1 row found.

IS [NOT] INFINITE

NOTを指定せずExpressionが値+Infまたは-Infの場合、TRUEが返されます。NOTを指定してExpressionが値+Infおよび-Infのいずれでもない場合、TRUEが返されます。

SELECT * FROM bfdemo WHERE id IS
NOT INFINITE;
ID, ID2
< NAN, 100 >
1 row found.

注意:
定数キーワードは、特定のBINARY_FLOAT値およびBINARY_DOUBLE値を表します。比較キーワードは、値のプロパティに対応しており、いずれの型に対しても固有ではありません(ただし、BINARY_FLOAT型、BINARY_DOUBLE型、またはBINARY_FLOATやBINARY_DOUBLEに変換可能な型に対しては、TRUEとしてのみ評価されます)。

InfとNaNの比較には、次のルールが適用されます。

- Inf(または-Inf)と有限値の間での比較は、想定したとおりの結果になります。たとえば、5 > -Infなどです。

- (Inf = Inf)および(Inf > -Inf)は両方ともTRUEと評価されます。

- (NaN = NaN)はTRUEと評価されます。

照合順序に関しては次のように適用されます。

- -Infは、他のすべての値より低い優先順位でソートされます。

- Infは、NaNおよびNULLより低い優先順位でソートされ、他のすべての値よりは高い優先順位でソートされます。

- NaNは、Infより高い優先順位でソートされます。

- NULLは、NaNより高い優先順位でソートされます。NULLは、すべての照合順序で常に最大の値となります。

InfおよびNaNを含む式

- 浮動小数点値を含む式では、Inf、-InfまたはNaNが生成される場合があります。これらの値は、式でオーバーフローまたは例外状態が生成された場合、あるいは式内の1つ以上の値がInf、-InfまたはNaNの場合に生成される可能性があります。InfおよびNaNは、オーバーフローまたは0(ゼロ)による除算が条件の場合に生成されます。

- 集計関数では、Inf、-InfおよびNaNの値は無視されません。NULL値は無視されます。集計(または任意のSELECTの結果)からInfおよびNaNを除外する場合は、IS NOT NAN条件およびIS NOT INFINITE条件の両方を使用します。

オーバーフローと切捨て

処理の内容によっては、データがオーバーフローするかまたは切り捨てられる場合があります。オーバーフローはエラーになり、Infが生成される場合があります。切り捨ての場合、重要ではないデータが失われます。

INSERTまたはUPDATE文を使用して、正確な値をデータベースに保存する際、目的の列のスケールがその値より小さい場合にかぎり、切捨てが行われます。このような切捨てが行われた場合、警告が戻されます。オーバーフローのため値が収まらない場合は、特別な値Infが戻され、指定した値は挿入されません。

TimesTenでは、計算中、値がデータベースに挿入されるとき、またはデータベースの値が更新されるときに、近似値の切捨てを行うことがあります。INSERTまたはUPDATEに対してのみエラーが戻されます。近似値がオーバーフローした場合は、特別な値Infが戻されます。

次のような場合に、オーバーフローが発生します。

- 算術演算時、積算の結果の値がその型で使用できる最大値より大きい場合に、オーバーフローが発生することがあります。算術演算は、第3章「式」で定義されています。

- 集計関数の使用時に、複数の数値の合計が結果の型で使用できる最大値を超えると、オーバーフローが発生することがあります。集計関数は第3章「式」で定義されています。

- 型変換時に、たとえばTT_INTEGER値がTT_SMALLINT値に変換されると、オーバーフローが発生することがあります。

次のように、英数字または数値データ型では、切捨てによってエラーまたは警告が発生する場合があります。

- 文字データで、文字列がターゲット型には長すぎるために切り捨てられると、エラーが発生します。NCHAR型およびNVARCHAR2型では、Unicode文字境界で常に切捨てが行われます。NCHARデータ型では、シングルバイト値(Unicode文字の半分)には意味がなく、使用できません。

- 数値データで、数値の小数部から後続の0(ゼロ)以外の数字が削除されると、警告が発生します。

アンダーフロー

近似値が、ハードウェアで表現できないほど0(ゼロ)に近似する場合、アンダーフローが発生して0(ゼロ)になり、切捨ての警告が戻されます。

レプリケーションの制限

レプリケートするデータベース内のデータ型のサイズには次の制限があります。

- VARCHAR2およびVARBINARY列は4MBを超えることはできません。文字長セマンティクスが使用されている場合は、4MBに制限されます。4MBで表すことができる文字数は、データベースのキャラクタ・セットによって決定されます。最小文字数は1,000,000/4、つまり250,000文字です。

- NVARCHAR2列は、500,000文字(4MB)を超えることはできません。

TimesTen型モード(下位互換モード)

TimesTenでは、データ型の下位互換モード(TimesTen型モード)がサポートされています。これはデータ・ストア作成属性TypeModeを使用して指定され、TypeMode=1はTimesTenモードを示します。型モードにより、デフォルトのデータ型が決まります。たとえば、TimesTen型モードのDATEのデフォルトはTT_DATEであり、Oracle型モードのDATEのデフォルトはORA_DATEです。

型モードの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』の「TypeMode」を参照してください。TimesTen型モードでのデータ型の使用法の詳細は、Oracle TimesTen In-Memory Database APIおよびSQLリファレンス・ガイド、リリース6.0.3を参照してください。

TimesTen型モードでサポートされているデータ型

表1-9 TimesTen型モードでサポートされているデータ型

データ型

説明

BIGINT

-9,223,372,036,854,775,808-(2^63)から9,223,372,036,854,775,807(2^63-1)の範囲の符号付き8バイト整数

かわりに、TT_BIGINTを指定することもできます。

BINARY(n)

nバイトの固定長バイナリの値。nに指定できる値は、1から8300です。

BINARYデータは、後続の0(ゼロ)を使用してその列の最大長まで調整されます。

BINARY_DOUBLE

64ビットの浮動小数点数

BINARY_DOUBLEは倍精度のネイティブの浮動小数点数です。+Inf、-InfおよびNaNの各値をサポートしています。BINARY_DOUBLEは指数と小数部からなる近似値です。指数またはE表記法を使用できます。BINARY_DOUBLEにはバイナリ精度53が指定されています。

正の最小有限値: 2.22507485850720E-308

正の最大有限値: 1.79769313486231E+308

かわりに、DOUBLE [PRECISION]またはFLOAT[(53)]を指定することもできます。

BINARY_FLOAT

32ビットの浮動小数点数

BINARY_FLOATは単精度のネイティブの浮動小数点型です。+Inf、-InfおよびNaNの各値をサポートしています。BINARY_FLOATは指数と小数部からなる近似値です。指数またはE表記法を使用できます。BINARY_FLOATにはバイナリ精度24が指定されています。

正の最小有限値: 1.17549E-38F

正の最大有限値: 3.40282E+38F

かわりに、REALまたはFLOAT(24)を指定することもできます。

CHAR[ACTER][(n [BYTE|CHAR])]

長さがnバイトまたはn文字の固定長文字列

デフォルトは1バイトです。

BYTEは、列にバイト長セマンティクスが使用されていることを示します。nバイトに指定できる値は、1から8300です。

CHARは、列に文字長セマンティクスが使用されていることを示します。CHARの最小長は1文字です。最大長は8300バイトに収まる文字数によって異なります。これは使用されているデータベース・キャラクタ・セットによって決まります。キャラクタ・セットがAL32UTF8の場合、1文字当たり最大4バイトが必要になる可能性があるため、CHARの長さは、キャラクタ・セットに応じて2075から8300の範囲に制限されます。

長さが0(ゼロ)の文字列は、NULL以外の有効な値です。文字列値""は長さが0(ゼロ)の空の文字列ですが、NULL値ではありません。ただし、PL/SQLでは、長さが0(ゼロ)の文字列は常にNULLとみなされます。そのため、PL/SQLを使用する場合、SQL内のすべての空の文字列パラメータは、TimesTenデータベースに値が渡される前に、PL/SQLによってNULLに変換されます。

CHARのデータは後続の空白を使用してその列の最大長まで調整されます。空白埋め比較セマンティクスが使用されます。空白埋めセマンティクスおよび非空白埋めセマンティクスの詳細は、「空白埋め比較セマンティクスおよび非空白埋め比較セマンティクス」を参照してください。

かわりに、TT_CHAR[(n [BYTE|CHAR])]を指定することもできます。

DATE

日付情報(世紀、年、月、日)

書式はYYYY-MM-DD(MMは整数で表される)です。たとえば、2006-10-28と指定します。

記憶域サイズは4バイトです。

有効な日付は、1753-01-01(1753年1月1日)から9999-12-31(9999年12月31日)の間の日付です。

かわりに、TT_DATEを指定することもできます。

DEC[IMAL][(p[,s])]または

NUMERIC[(p[,s])]

固定の最大精度(総桁数)とスケール(小数点の右側の桁数)を定義した正確な数値

精度pの値には1から40を指定します。スケールsの値には0からpを指定します。精度のデフォルト値は40、スケールのデフォルト値は0です。

INTERVAL [+/-] IntervalQualifier

時間隔

TimesTenでは、INTERVALとIntervalQualifierで表現される時間隔型を部分的にサポートします。IntervalQualifierは、精度を持たない単一フィールド型のみを指定できます。デフォルトの先行精度は、すべての時間隔型で8桁です。単一フィールド型には、YEAR、MONTH、DAY、HOUR、MINUTEまたはSECONDのいずれかを指定できます。現在、時間隔型に指定できるのは定数のみです。

NCHAR[(n)]

n×2バイトのUnicode文字の固定長文字列

必要なバイト数は2*nです。ここでnは指定された文字数です。NCHAR文字制限はバイト制限の半分であるため、最大サイズは4150です。記憶域のデフォルトおよび最小バイト数は2n(2)です。

長さが0(ゼロ)の文字列は、NULL以外の有効な値です。文字列値""は長さが0(ゼロ)の空の文字列ですが、NULL値ではありません。ただし、PL/SQLでは、長さが0(ゼロ)の文字列は常にNULLとみなされます。そのため、PL/SQLを使用する場合、SQL内のすべての空の文字列パラメータは、TimesTenデータベースに値が渡される前に、PL/SQLによってNULLに変換されます。

NCHARのデータはU+0020 SPACEを使用してその列の最大長まで調整されます。空白埋め比較セマンティクスが使用されます。空白埋めセマンティクスおよび非空白埋めセマンティクスの詳細は、「空白埋め比較セマンティクスおよび非空白埋め比較セマンティクス」を参照してください。

かわりに、TT_NCHAR[(n)]を指定することもできます。

NATIONAL CHARACTERおよびNATIONAL CHARは、NCHARのシノニムです。

SMALLINT

-32,768(-2^15)から32,767(2^15-1)の範囲のネイティブ符号付き16バイト整数

かわりに、TT_SMALLINTを指定することもできます。

TIME

00:00:00(午前0時)から23:59:59(午後11時59分59秒)の間の時刻

書式はHH:MI:SSです。記憶域サイズは8バイトです。

TIMESTAMP

1753-01-01 00:00:00(1753年1月1日午前0時)から9999-12-31 23:59:59(9999年12月31日午後11時59分59秒)の間の日付と時刻

マイクロ秒に満たない端数は、「Data Truncated」エラーになります。書式はYYYY-MM-DD HH:MI:SS [.FFFFFFFFF]です。

記憶域サイズは8バイトです。

かわりに、TT_TIMESTAMPまたは[TT_]TIMESTAMP(6)を指定することもできます。

TINYINT

0から255(2^8-1)の範囲の符号なし整数

TINYINTは符号なしのため、TINYINTを否定するデータ型はSMALLINTになります。

かわりに、TT_TINYINTを指定することもできます。

INT[EGER]

-2,147,483,648(-2^31)から2,147,483,647(2^31-1)の範囲の符号付き整数

かわりに、TT_INTEGERを指定することもできます。

NVARCHAR(n)

n×2バイトのUnicode文字の可変長文字列

必要なバイト数は2*nです。ここでnは指定された文字数です。NVARCHAR文字制限はバイト制限の半分であるため、最大サイズは2,097,152(2^21)です。nを指定する必要があります。

長さが0(ゼロ)の文字列は、NULL以外の有効な値です。文字列値""は長さが0(ゼロ)の空の文字列ですが、NULL値ではありません。ただし、PL/SQLでは、長さが0(ゼロ)の文字列は常にNULLとみなされます。そのため、PL/SQLを使用する場合、SQL内のすべての空の文字列パラメータは、TimesTenデータベースに値が渡される前に、PL/SQLによってNULLに変換されます。

空白埋め比較セマンティクスが使用されます。空白埋めセマンティクスおよび非空白埋めセマンティクスの詳細は、「空白埋め比較セマンティクスおよび非空白埋め比較セマンティクス」を参照してください。

かわりに、TT_NVARCHAR(n)を指定することもできます。

NATIONAL CHARACTER VARYING、NATIONAL CHAR VARYINGおよびNCHAR VARYINGは、NVARCHARのシノニムです。

VARCHAR(n[BYTE|CHAR])

最大長がnバイトまたはn文字の可変長文字列。nを指定する必要があります。

BYTEは、列にバイト長セマンティクスが使用されていることを示します。nバイトに指定できる値は、1から4194304(2^22)です。

CHARは、列に文字長セマンティクスが使用されていることを示します。

長さが0(ゼロ)の文字列は、NULL以外の有効な値です。文字列値""は長さが0(ゼロ)の空の文字列ですが、NULL値ではありません。ただし、PL/SQLでは、長さが0(ゼロ)の文字列は常にNULLとみなされます。そのため、PL/SQLを使用する場合、SQL内のすべての空の文字列パラメータは、TimesTenデータベースに値が渡される前に、PL/SQLによってNULLに変換されます。

空白埋め比較セマンティクスが使用されます。空白埋めセマンティクスおよび非空白埋めセマンティクスの詳細は、「空白埋め比較セマンティクスおよび非空白埋め比較セマンティクス」を参照してください。

かわりに、TT_VARCHAR(n[BYTE|CHAR])を指定することもできます。

VARBINARY(n)

最大長がnバイトの可変長バイナリの値

nに指定できる値は、1から4194304(2^22)です。

TimesTen型モードでサポートされているOracleデータ型

表1-10 TimesTen型モードでサポートされているOracleデータ型

データ型

説明

NUMBER[(p [,s])]

精度とスケールが指定された数値

精度値の範囲は1から38桁です。スケール値の範囲は-84から127です。精度とスケールの両方ともオプションです。

精度およびスケールを指定しない場合は、最大精度の38および柔軟なスケールが指定されたとみなされます。

NUMBERは、精度より大きいスケールおよび負のスケールをサポートしています。

NUMBERは、1.0 x 10-130から1.0 x 10^126未満の絶対値を含む正と負の固定数値および0(ゼロ)を格納します。値が1.0 x 10^126以上の絶対値である算術式を指定すると、エラーが戻されます。

TimesTen型モードのNUMBERデータ型は、最も小さい(最も0に近い)値として10E-89を格納します。

ORA_CHAR[(n [BYTE|CHAR])]

長さがnバイトまたはn文字の固定長文字列

デフォルトは1バイトです。

BYTEは、列にバイト長セマンティクスが使用されていることを示します。nバイトに指定できる値は、1から8300です。

CHARは、列に文字長セマンティクスが使用されていることを示します。CHARの最小長は1文字です。最大長は8300バイトに収まる文字数によって異なります。これは使用されているデータベース・キャラクタ・セットによって決まります。キャラクタ・セットがAL32UTF8の場合、1文字当たり最大4バイトが必要になる可能性があるため、CHARの長さは、キャラクタ・セットに応じて2075から8300の範囲に制限されます。

長さが0(ゼロ)の文字列は、NULL以外の有効な値です。文字列値""は長さが0(ゼロ)の空の文字列ですが、NULL値ではありません。ただし、PL/SQLでは、長さが0(ゼロ)の文字列は常にNULLとみなされます。そのため、PL/SQLを使用する場合、SQL内のすべての空の文字列パラメータは、TimesTenデータベースに値が渡される前に、PL/SQLによってNULLに変換されます。

ORA_CHARのデータは、後続の空白を使用して列の最大長まで調整されます。空白埋め比較セマンティクスが使用されます。空白埋めセマンティクスおよび非空白埋めセマンティクスの詳細は、「空白埋め比較セマンティクスおよび非空白埋め比較セマンティクス」を参照してください。

ORA_DATE

日付と時刻の情報(世紀、年、月、日、時、分、秒)

書式はYYYY-MM-DD HHMISSです。

有効な日付の範囲は紀元前4712年1月1日から西暦9999年12月31日です。

記憶域サイズは7バイトです。小数秒はありません。

ORA_NCHAR[(n)]

長さがn×2バイトのUnicode文字の固定長文字列

必要なバイト数は2*nです。ここでnは指定された文字数です。NCHAR文字制限はバイト制限の半分であるため、最大サイズは4150です。記憶域のデフォルトおよび最小バイト数は2n(2)です。

長さが0(ゼロ)の文字列は、NULL以外の有効な値です。文字列値""は長さが0(ゼロ)の空の文字列ですが、NULL値ではありません。ただし、PL/SQLでは、長さが0(ゼロ)の文字列は常にNULLとみなされます。そのため、PL/SQLを使用する場合、SQL内のすべての空の文字列パラメータは、TimesTenデータベースに値が渡される前に、PL/SQLによってNULLに変換されます。

ORA_NCHARのデータは、U+0020 SPACEを使用してその列の最大長まで調整されます。空白埋め比較セマンティクスが使用されます。空白埋めセマンティクスおよび非空白埋めセマンティクスの詳細は、「空白埋め比較セマンティクスおよび非空白埋め比較セマンティクス」を参照してください。

ORA_NVARCHAR2(n)

n×2バイトのUnicode文字の可変長文字列

必要なバイト数は2*nです。ここでnは指定された文字数です。ORA_NVARCHAR2文字制限はバイト制限の半分であるため、最大サイズは2,097,152(2^21)です。nを指定する必要があります。

長さが0(ゼロ)の文字列は、NULL以外の有効な値です。文字列値""は長さが0(ゼロ)の空の文字列ですが、NULL値ではありません。ただし、PL/SQLでは、長さが0(ゼロ)の文字列は常にNULLとみなされます。そのため、PL/SQLを使用する場合、SQL内のすべての空の文字列パラメータは、TimesTenデータベースに値が渡される前に、PL/SQLによってNULLに変換されます。

非空白埋め比較セマンティクスが使用されます。

空白埋めセマンティクスおよび非空白埋めセマンティクスの詳細は、「空白埋め比較セマンティクスおよび非空白埋め比較セマンティクス」を参照してください。

ORA_VARCHAR2(n[BYTE|CHAR])

最大長がnバイトまたはn文字の可変長文字列

BYTEは、列にバイト長セマンティクスが使用されていることを示します。nバイトに指定できる値は、1から4194304(2^22)です。nを指定する必要があります。

CHARは、列に文字長セマンティクスが使用されていることを示します。

長さが0(ゼロ)の文字列は、NULL以外の有効な値です。文字列値""は長さが0(ゼロ)の空の文字列ですが、NULL値ではありません。ただし、PL/SQLでは、長さが0(ゼロ)の文字列は常にNULLとみなされます。そのため、PL/SQLを使用する場合、SQL内のすべての空の文字列パラメータは、TimesTenデータベースに値が渡される前に、PL/SQLによってNULLに変換されます。

非空白埋め比較セマンティクスが使用されます。空白埋めセマンティクスおよび非空白埋めセマンティクスの詳細は、「空白埋め比較セマンティクスおよび非空白埋め比較セマンティクス」を参照してください。

ORA_TIMESTAMP

[(fractional_seconds_precision)]

日付データ型の年、月および日の値に加えて、時間の時、分および秒の値

Fractional_seconds_precisionは、秒のフィールドの小数部の桁数です。有効な日付の範囲は紀元前4712年1月1日から西暦9999年12月31日です。

小数秒の精度の範囲は0(ゼロ)から9です。デフォルトは6です。書式は次のとおりです。

YYYY-MM-DD HH:MI:SS [.FFFFFFFFF]

記憶域サイズは12バイトです。

2 名前、ネームスペースおよびパラメータ

この章では、TimesTen SQL文で使用する名前およびパラメータの一般的なルールについて説明します。内容は次のとおりです。

- 基本名

- 所有者名

- 複合識別子

- ネームスペース

- 動的パラメータ

- 重複したパラメータ名

- パラメータからのデータ型の推測

基本名

基本名(単純名)は、列、表、ビューおよび索引を指します。基本名は、次の規則に従う必要があります。

- 基本名の最大長は30文字です。

- 名前には文字(AからZおよびaからz)、10進数(0から9)、$、#、@、アンダースコア(_)を組み合せて指定することができます。識別子の場合は、先頭に文字(AからZおよびaからz)を使用する必要があり、数字や特殊文字を使用することはできません。ただし、パラメータ名の場合は、先頭に文字(AからZおよびaからz)、10進数(0から9)、または特殊文字の$、#、@、アンダースコア(_)を使用できます。

- TimesTenでは、小文字(aからz)が対応する大文字(AからZ)に変更されます。このため、名前では大文字と小文字は区別されません。

- 名前が二重引用符で囲まれている場合は、どのような文字の組合せでも(有効な文字セットにはない場合でも)使用できます。名前が引用符で囲まれている場合、名前の最初の文字には、1つ以上の空白を含む任意の文字を使用できます。
列、表、または索引が、二重引用符で囲まれた名前で最初に定義され、その名前が前述の2つ目の規則に従っていない場合、以後そのオブジェクトを参照する際には常に二重引用符を使用する必要があります。

- Unicode文字を名前に使用することはできません。

所有者名

所有者名は、表を作成したアカウントのユーザー名です。TimesTenで定義される表と索引には、所有者のSYSまたはTTREPが付与されます。ユーザー・オブジェクトは、所有者名SYSまたはTTREPでは作成できません。所有者名と表名はすべて大文字に変換されます。

TimesTenの表の所有者は、ユーザーIDの設定またはログイン名によって決まります。キャッシュ・グループの場合、Oracle Database表の所有者名は、TimesTen表の所有者名と常に一致させる必要があります。

所有者名は、指定しない場合は自動的に設定されますが、ユーザーが表を作成する際に指定できます。「CREATE TABLE」を参照してください。所有者名を作成する場合は、基本名の作成と同じ規則に従ってください。「基本名」を参照してください。

複合識別子

基本名とユーザー名は単純名です。単純名は、ピリオド(.)で区切られた複数の基本名と所有者名を結合した、複合識別子と結合されることがあります。

通常、複合識別子はその一部を省略して簡略化できます。完全修飾名を使用しない場合、欠けている部分のかわりにデフォルト値が使用されます。たとえば、所有する表を参照する際、所有者名(とピリオド)を省略すると、ユーザーのログイン名に基づいて所有者名が生成されます。

構成要素をすべて含む完全な複合識別子を、完全修飾名といいます。異なる所有者が同じ名前の表と索引を所有することができます。これらのオブジェクトの完全修飾名は一意である必要があります。

複合識別子には、次のものがあります。

- 列識別子: [[Owner.]TableName.]ColumnName

- [Owner.]IndexName

- 表識別子: [Owner.]TableName

- 行識別子: [[Owner.]TableName.]rowid

ネームスペース

SQL構文では、同じネームスペースを共有するオブジェクト名はそれぞれ一意である必要があります。これは、名前がSQL構文内で参照されたときに、正しいオブジェクトを見つけることができるようにするためです。

指定されたオブジェクト名がそれを所有するユーザーの名前(ネームスペース)で修飾されていない場合、オブジェクトに対する検索順序は次のようになります。

1. 現在のユーザー・ネームスペース内にあるすべてのオブジェクト名から一致する名前を検索します。一致が検出されると、オブジェクト名は解決されます。

2. ユーザーのネームスペース内で一致が検出されない場合、パブリック・シノニムなどのオブジェクトを含むPUBLICネームスペースで一致を検索します。パブリック・シノニムはSYSおよびTTREPオブジェクトに事前定義されています。一致が検出されると、オブジェクト名は解決されます。そうでない場合、そのオブジェクトは存在しません。

同じユーザーが所有する表、ビュー、マテリアライズド・ビュー、順序、プライベート・シノニム、PL/SQLパッケージ、ファンクション、プロシージャおよびキャッシュ・グループは、1つのネームスペースを共有しているため、これらの各オブジェクトの名前はそのネームスペース内で一意である必要があります。固有のネームスペース内に索引が作成されます。

たとえば、表とビューは同じネームスペースにあるため、同じユーザーが所有する表とビューは同じ名前を持つことができません。しかし、表と索引は異なるネームスペースにあるため、同じユーザーが所有する表と索引は同じ名前を持つことができます。

異なるユーザーが所有する表は、異なるユーザーのネームスペースに存在するため、同じ名前を持つことができます。

動的パラメータ

動的パラメータは、アプリケーション・プログラムとTimesTen間で情報を渡します。TimesTenでは、SQLコマンドのプレースホルダとして動的パラメータが使用され、実行時に実際の値に置き換えられます。

SQLコマンド内で使用され、TimesTenの基本名のルールを満たしている必要がある場合、動的パラメータ名の前にコロン(:)が必要です。ただし、識別子とは異なり、パラメータ名の最初の文字には次のいずれかの文字を使用できます。

- 大文字: AからZ

- 小文字: aからz

- 数字: 0から9

- 特殊文字: # $ @ _

注意:
:DynamicParameterシーケンスを使用するかわりに、アプリケーションで、各動的パラメータに?を使用できます。

拡張された:スタイルのパラメータ・マーカーは、次の書式で指定できます。

:parameter [INDICATOR] :indicator

:indicatorは:parameterの要素とみなされます。異なるパラメータとしてカウントされません。このスタイルのパラメータ・マーカーに対して?を指定しないでください。

重複したパラメータ名

次のSQL文について考えてみます。

SELECT * FROM t1 WHERE c1=:a AND c2=:a AND c3=:b AND c4=:a;

通常、TimesTenでは、SQL文において同じパラメータ名のインスタンスが複数存在する場合、同じパラメータが複数出現しているとみなされます。パラメータにパラメータ番号を割り当てる場合、TimesTenでは、各パラメータ名の最初の出現に対してのみパラメータ番号が割り当てられます。特定の名前が2回目以降に出現しても、独自のパラメータ番号は割り当てられません。この場合、TimesTenアプリケーションは、SQL文における一意のパラメータすべてに対して値をバインドします。同じパラメータ名の異なる出現に対して別の値をバインドしたり、パラメータやパラメータの出現をバインドしないでおくことはできません。

Oracle Databaseでは、SQL文において同じパラメータ名のインスタンスが複数存在する場合、異なるパラメータとしてみなされます。パラメータ番号を割り当てる場合、Oracle Databaseでは名前の重複にかかわらず、パラメータが出現するたびに番号が割り当てられます。Oracle Databaseアプリケーションは、少なくとも、各パラメータ名の最初の出現に対して値をバインドします。特定のパラメータがこれ以降に出現した場合は、アプリケーションはパラメータの出現をバインドしないでおくことも、この出現に対して異なる値をバインドすることもできます。

次の表に、各パラメータに対してTimesTenおよびOracle Databaseによって割り当てられるパラメータ番号を伴う問合せを示します。

問合せ

TimesTenのパラメータ番号

Oracle Databaseのパラメータ番号

SELECT *

FROM t1

WHERE c1=:a

1

1

AND c2=:a

1

2

AND c3=:b

2

3

AND c4=:a;

1

4

この例におけるTimesTenのパラメータ番号の合計数は2です。この例におけるOracle Databaseのパラメータの合計数は4です。アプリケーションで指定されたパラメータ・バインディングによって、従来のTimesTenの動作とOracle Databaseの動作とでは異なる結果となります。

DuplicateBindMode一般接続属性を使用すると、SQL文においてパラメータが重複して出現した場合に、アプリケーションで従来のTimesTenのパラメータ・バインディングを使用するか、またはOracleスタイルのパラメータ・バインディングを使用するかを指定できます。デフォルトでは、Oracleスタイルのパラメータ・バインディングが指定されています。

パラメータからのデータ型の推測

次の文について考えてみます。

SELECT :a FROM dual;

TimesTenでは、問合せからパラメータaのデータ型を推測できません。TimesTenは次のエラーを戻します。

2778: Cannot infer type of parameter from its use
The command failed.

パラメータのデータ型を宣言するには、CAST関数を使用します。

SELECT CAST (:a AS NUMBER) FROM dual;

3 式

式は、次の目的に使用します。

- INSERT...SELECT文の選択リスト

- WHERE句およびHAVING句の条件

- GROUP BY句およびORDER BY句

- INSERT文およびMERGE文のVALUES句

- UPDATE文およびMERGE文のSET句

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

- 式の指定

- 副問合せ

- 定数

- 書式モデル

- CASE式

- ROWID

- ROWNUM擬似列

式の指定

式には、SQL処理で使用する値を指定します。

式は、算術演算子、比較演算子、文字列またはバイナリ演算子、ビット演算子、あるいは第4章「機能」で説明する任意の関数で連結された1つまたは複数のプライマリで構成できます。プライマリは、SQL構文に示された項目から算出される、符号付きまたは符号なしの値です。

SQL構文

{ColumnName | ROWID | {? | :DynamicParameter} |
Function | Constant | (Expression)}

または

[[+ |-] {ColumnName | SYSDATE | TT_SYSDATE|GETDATE() |
{? | :DynamicParameter} | Function |
Constant | {~ | + | -} Expression}]
[...]

または

Expression1 [& | | | ^ | + | / | * | - ] Expression2

または

Expression1 | | Expression2

または

Expression

構成要素

説明

+, –

単項プラスと単項マイナス
単項マイナスはプライマリの符号を変更します。デフォルトの設定では、符号は変更しません。

ColumnName

値を取得する列の名前
列名の詳細は、第2章「名前、ネームスペースおよびパラメータ」を参照してください。

ROWID

表に保存される各行の一意のID
ROWID値はROWID擬似列から取得されます。

?
:DynamicParameter

動的パラメータのプレースホルダ
動的パラメータの値は、実行時に設定されます。

Function

計算された値
第4章「関数」を参照してください。

Constant

特定の値
「定数」を参照してください。

(Expression)

カッコで囲まれた任意の式

Expression1
Expression2

指定された式
Expression1およびExpression2は、ビット単位演算子とともに使用すると、整数型またはバイナリ型にできます。式のデータ型には互換性が必要です。第1章「データ型」を参照してください。

*

2つのプライマリを乗算します。

/

2つのプライマリを除算します。

+

2つのプライマリを加算します。

–

2つのプライマリを減算します。

&

2つのオペランドのビット単位のAND
Expression1およびExpression2の対応するビットがいずれも1の場合にのみ、ビットを1に設定します。ビットが異なるか、いずれも0の場合は、ビットを0に設定します。

|

2つのオペランドのビット単位のOR
Expression1およびExpression2の対応するビットのうち、いずれかまたは両方が1の場合は、ビットを1に設定します。対応するビットの両方が0の場合は、ビットを0に設定します。

~

オペランドのビット単位のNOT
Expressionを1つのみ取り出し、オペランドの各ビットを逆にして、すべての1を0(ゼロ)に、0(ゼロ)を1に変更します。

^

2つのオペランドの排他OR
Expression1およびExpression2の対応するビットが異なる場合にビットを1に設定し、同じ場合に0(ゼロ)に設定します。一方のビットが0(ゼロ)で他方のビットが1の場合、対応する結果ビットは1に設定されます。それ以外の場合、対応する結果ビットは0(ゼロ)に設定されます。

||

連結演算子
両方の式が文字列の場合に、Expression1とExpression2を連結します。両方の式の値を含む、新しい文字列値を作成します。「CONCAT」も参照してください。

説明

- 数値間の計算には、算術演算子を使用できます。「数値データ型」を参照してください。

- 日時値および時間隔型でも、算術演算子を使用できます。日時式の結果は、日時データ型または時間隔データ型です。

- 文字列値に算術演算子は使用できません。

- 式の各要素は、次の順序で評価されます。

- カッコ内の関数および式。

- 単項プラスと単項マイナス。

- *および/処理。

- +および–処理。

- 優先順位が同じ要素については、左から右の順に評価されます。

- 式をカッコで囲み、評価の順序を制御できます。次に例を示します。

10 * 2 – 1 = 19 but 10 * (2 – 1) = 10

- 評価される式によっては、データ型の変換、切捨て、アンダーフロー、オーバーフローが発生する場合があります。第1章「データ型」を参照してください。

- 数値式のいずれかのオペランドがNULLの場合、結果はNULLになります。

- NVLは、2つのパラメータ(両方とも式で指定)をとるため、TimesTenではどちらの位置にもNULLは使用できません。式にNULL値が含まれる場合、比較演算子や他の条件はNULLと評価されます。NULL値を含む比較演算子や条件の評価の詳細は、第5章「検索条件」を参照してください。TimesTenではNULLを挿入することはできますが、通常、INSERTには特定の値のみが使用され、一般的な式は使用されません。

- 条件に、別々のROWID等式を指定するか、またはINを使用すると、問合せオプティマイザと実行エンジンで複数のROWID検索が可能です。たとえば、複数の高速ROWID検索は、次のように実行します。

WHERE ROWID = :v1 OR ROWID = :v2

あるいは、次のように指定します。

WHERE ROWID IN (:v1, :v2)

- ?または:DynamicParameterは、式の中で動的パラメータとして使用できます。

例

この例では、任意のSELECT文のWHERE句における動的パラメータを示します。

SELECT * FROM purchasing.orders
WHERE partnumber = ? AND ordernumber > ?
ORDER BY ordernumber;

この例では、UPDATE文のWHERE句およびSET句における動的パラメータを示します。

UPDATE purchasing.parts
SET salesprice = :dynamicparameter1
WHERE partnumber = :dynamicparameter2;

この例では、DELETE文のWHERE句における動的パラメータを示します。

DELETE FROM purchasing.orderitems
WHERE itemnumber BETWEEN ? AND ?;

この例では、INSERT文のVALUES句における動的パラメータを示します。この例では、?と:dynamicparameterの両方をpurchasing.orderitems表の2番目と4番目の列の両方に対応する:dynamicparameter1で使用します。そのため、この式には、2番目と4番目の列の両方に使用する2番目のパラメータを使用して、4つの動的パラメータのみを渡す必要があります。

INSERT INTO purchasing.orderitems VALUES
(?,:dynamicparameter1,
:dynamicparameter2,
:dynamicparameter1,?);

この例には、?および:dynamicparameterの両方を同じSQL文で使用できることと、両方のタイプの動的パラメータを繰り返すことの意味上の違いが示されています。

ビット単位演算子の例を次に示します。

Command> SELECT 0x183D & 0x00FF FROM dual;
< 003D >
1 row found.
Command> SELECT ~255 FROM dual;
< -256 >
1 row found.
Command> SELECT 0x08 | 0x0F FROM dual;
< 0F >
1 row found.

副問合せ

TimesTenでは、検索条件のINSERT...SELECT文、CREATE VIEW文またはUPDATE文、およびUPDATE文のSET句で、導出された表として副問合せがサポートされます。サポートされるのは、表の副問合せおよびスカラー副問合せです。TimesTenでは、行の副問合せはサポートされません。副問合せでは、HAVING句または結合表を使用して集計を指定できます。副問合せは相関も可能です。

SQL構文

[NOT] EXISTS | [NOT] IN (Subquery)
Expression {= | <> | > | >= | < | <= } [ANY | ALL] (Subquery)
Expression [NOT] IN (ValueList | Subquery)

ValueListは定数式のリストです。各定数式は、定数値または定数値になる式(数字、文字列、日付など)を指定します。バインドされた値(?または:DynamicParameter)、NULL、および定数値を返す関数のコールのサポートが含まれます。

説明

TimesTenでは、各項で説明した特性を持つ問合せがサポートされます。

表の副問合せ

- 副問合せは、マテリアライズド・ビューを作成する文を除き、任意の文のWHEREまたはHAVING句に指定できます。表の副問合せは、1つの条件に1つのみ指定できます。これらの条件は、WHERE句やHAVING句、WHERE句やHAVING句内のOR式または結合された表のON句に指定できます。CASE式、マテリアライズド・ビューまたは外部結合のために+演算子を使用するHAVING句には指定できません。

- 副問合せは、EXISTSまたはNOT EXISTS条件、ANYまたはALLを使用する限定条件または比較条件に指定できます。比較条件および限定条件の両方に使用できる演算子は、=、<、>、<=、>=、<>です。UNIQUEまたはNOT UNIQUE演算子を使用して、副問合せを外部問合せに連結することはできません。

- 限定条件または比較条件に指定できる副問合せは1つのみです。副問合せは、条件の右側のオペランドまたは左側のオペランドとして指定します。両方には指定しません。

- 副問合せにORDER BY句を指定することはできません。

- FIRST NumRowsは、副問合せの文ではサポートされていません。

- 限定条件または比較条件に指定された問合せでは、基礎となるSELECTの選択リストは単一の式にする必要があります。比較条件で指定される問合せの場合に、基礎となるSELECTが単一の行を戻すときは、その戻り値が選択結果になります。基礎となるSELECTが行を戻さない場合、戻り値はNULLです。副問合せが複数の行を戻す場合はエラーになります。

スカラー副問合せ

スカラー副問合せは単一の値を返します。

- 外部問合せの各行に1行のみを戻すことを、コンパイル時にオプティマイザが検出できないような条件を含むスカラー副問合せは、検証できません。OR式にこのような副問合せを指定することはできません。

例

次に、1件以上の未発送の発注を含む顧客リストの副問合せの例を示します。

SELECT customers.name FROM customers
WHERE EXISTS (SELECT 1 FROM orders
WHERE customers.id = orders.custid
AND orders.status = 'unshipped');

SELECT customers.name FROM customers
WHERE customers.id = ANY
(SELECT orders.custid FROM orders
WHERE orders.status = 'unshipped');

SELECT customers.name FROM customers
WHERE customers.id IN
(SELECT orders.custid FROM orders
WHERE orders.status = 'unshipped');

この例では、発注日と同じ日付に発送されたアイテムをリストします。

SELECT line_items.id FROM line_items
WHERE line_items.ship_date =
(SELECT orders.order_date FROM orders
WHERE orders.id = line_items.order_id);

定数

定数はリテラル値です。

SQL構文

{IntegerValue | FloatValue |FloatingPointLiteral|
FixedPointValue | 'CharacterString'|
'NationalCharacterString' | HexadecimalLiteral |
'DateString' | DateLiteral |'TimeString' |
TimeLiteral | 'TimestampString' | TimestampLiteral |
IntervalLiteral | BINARY_FLOAT_INFINITY |
BINARY_DOUBLE_INFINITY | -BINARY_FLOAT_INFINITY |
-BINARY_DOUBLE_INFINITY | BINARY_FLOAT_NAN |
BINARY_DOUBLE_NAN
}

定数

説明

IntegerValue

TT_INTEGER、TT_BIGINT、TT_SMALLINTデータ型と互換性のある整数、またはTT_TINYINTデータ型と互換性のある符号なし整数です。
次に例を示します。

155, 5, -17

FloatValue

BINARY_FLOATデータ型またはBINARY_DOUBLEデータ型と互換性のある浮動小数点数です。
次に例を示します。

.2E-4, 1.23e -4, 27.03, -13.1

FloatingPointLiteral

浮動小数点リテラル
これらは、BINARY_FLOATデータ型およびBINARY_DOUBLEデータ型と互換性があります。fまたはFは、数値が32ビット浮動小数点数(BINARY_FLOAT型)であることを示します。dまたはDは、数値が64ビット浮動小数点数(BINARY_DOUBLE型)であることを示します。次に例を示します。

123.23F, 0.5d

FixedPointValue

BINARY_FLOAT、BINARY_DOUBLE、NUMBERデータ型と互換性のある固定小数点数です。
次に例を示します。

27.03

CharacterString

CHARデータ型またはVARCHAR2データ型と互換性のある文字列です。
文字列定数は、一重引用符で囲みます。次に例を示します。

'DON''T JUMP!'

行中の2つの一重引用符は一重引用符として解釈され、区切り文字や空の文字列としては解釈されません。

NationalCharacterString

NCHARデータ型またはNVARCHAR2データ型と互換性のある文字列です。
各国語文字列定数の先頭には、Nまたはnのインジケータが付加され、一重引用符で区切られます。次に例を示します。

N'Here''s how!'

行中の2つの一重引用符は、一重引用符として解釈されます。

各国語文字列定数は、次の組合せで構成されます。

- ASCII文字

- UTF-8にエンコードされたUnicode文字

- エスケープされたUnicode文字

ASCII文字およびUTF-8にエンコードされた文字は、対応するUTF-16書式のUnicode文字に内部的に変換されます。

エスケープされたUnicode文字の書式は\uxxxxです。xxxxは、Unicode文字を表す4桁の16進数字です。次に例を示します。

N'This is an \u0061'

これは、次と同じです。

N'This is an a'

もう1つの\を使用して、\u自体をエスケープできます。シーケンス\\uは、常に\uに変換されます。他のエスケープ文字は認識されません。

HexadecimalLiteral

16進リテラル
数字0-9とA-F(またはa-f)を含む16進リテラルは、BINARY、VARBINARY、CHAR、VARCHAR2およびBLOBデータ型と互換性があります。HexadecimalLiteral定数の先頭には、文字0xを付加する必要があります。次に例を示します。

0xFFFAB0880088343330FFAA7

または

0x000A001231

奇数桁の16進数字の先頭には、偶数桁にするために0が付加されます。たとえば、値0x123は0x0123に変換されます。

文字リテラルを指定する場合は、文字のバイナリ値を使用します。たとえば、次に、表tabvbのVARBINARY列のcolbinに16進リテラルおよび文字リテラルが挿入されるときに格納される内容を示します。

Command> insert into tabvb values (0x1234);
1 row inserted.
Command> insert into tabvb values ('1234');
1 row inserted.
Command> select colbin from tabvb;
< 1234 >
< 31323334 >
2 rows found.

ただし、Oracle Databaseは'1234'などの文字リテラルのみを受け入れ、その文字リテラルを0x1234のバイナリ・リテラルに変換する点が異なります。結果として、insert into tabvb values ('1234');は、Oracle DatabaseとTimesTenで動作が異なります。Oracle Databaseは、0x1234を16進リテラルとして受け入れません。

sDateString

一重引用符(')で囲まれたYYYY-MM-DD HH:MI:SS書式の文字列です。
次に例を示します。

'2007-01-27 12:00:00'

YYYYフィールドの値は4桁である必要があります。MMとDDフィールドには2桁の値を指定します。空白は、後続の空白(日のフィールドの後)のみ使用できます。範囲は'-4713-01-01'(紀元前4712年1月1日)から'9999-12-31'(9999年12月31日)までです。時刻部分は必須ではありません。次に例を示します。

'2007-01-27'

TT_DATEデータ型の場合、文字列の書式はYYYY-MM-DDで、範囲は'1753-01-01'から'9999-12-31'までです。

TimesTen型モードを使用している場合、DateStringの詳細は、Oracle TimesTen In-Memory Databaseリリース6.0.3のドキュメントを参照してください。

DateLiteral

書式: DATE DateString
次に例を示します。

DATE '2007-01-27' or DATE '2007-01-27 12:00:00'

TT_DATEデータ型の場合、リテラルTT_DATEを使用します。次に例を示します。

TT_DATE '2007-01-27'.

TT_DATEリテラルでは時刻部分は指定しないでください。

DATEキーワードの大文字と小文字は区別されません。

TimesTenでは、ODBCの日付リテラル構文もサポートされます。次に例を示します。

{d '2007-01-27'}.

詳細はODBCドキュメントを参照してください。

TimesTen型モードを使用している場合、DateLiteralの詳細は、Oracle TimesTen In-Memory Databaseリリース6.0.3のドキュメントを参照してください。

TimeString

一重引用符(')で囲まれたHH:MI:SS書式の文字列です。
次に例を示します。

'20:25:30'

範囲は'00:00:00'から'23:59:59'までです。コンポーネントはすべて2桁である必要があります。後続の空白(2番目のフィールドの後)のみ使用できます。

TimeLiteral

書式: TIME TimeString
次に例を示します。

TIME '20:25:30'

TIMEキーワードの大文字と小文字は区別されません。

使用例:

INSERT INTO timetable VALUES (TIME '10:00:00');

SELECT * FROM timetable WHERE col1 < TIME '10:00:00';

TimesTenでは、ODBCの時間リテラル構文もサポートされます。次に例を示します。

{t '12:00:00'}

TimestampString

一重引用符(')で囲まれたYYYY-MM-DD HH:MI:SS [.FFFFFFFFF]書式の文字列です。
範囲は'-4713-01-01'(紀元前4712年1月1日)から'9999-12-31'(9999年12月31日)までです。年のフィールドは、4桁である必要があります。他のフィールドは、小数部を除いて2桁の値である必要があります。小数部は0から9桁で指定できます。TT_TIMESTAMPデータ型の場合、一重引用符(')で囲まれたYYYY-MM-DD HH:MI:SS[.FFFFFF]書式の文字列です。範囲は'1753-01-01 00:00:00.000000'から'9999-12-31 23:59:59.999999'です。小数部は0から6桁で指定できます。

C1というCHAR列があり、TIMEを比較する場合は、次の文を実行できます。

SELECT * FROM testable WHERE C1 = TIME '12:00:00'

この例では、C1の値が適切なTIME構文に従っていれば、C1から得られるCHARの各値は、比較の前にTIME値に変換されます。

TimesTen型モードを使用している場合、TimestampStringの詳細は、Oracle TimesTen In-Memory Databaseリリース6.0.3のドキュメントを参照してください。

TimestampLiteral

書式: TIMESTAMP TimestampString
次に例を示します。

TIMESTAMP '2007-01-27 11:00:00.000000'

TIMESTAMPデータ型の場合は、小数フィールドで0から9桁の小数秒がサポートされます。TT_TIMESTAMPデータ型の場合は、小数フィールドで0から6桁の小数秒がサポートされます。

TIMESTAMPキーワードの大文字と小文字は区別されません。

CHARデータ型およびVARCHAR2データ型のDATE/TIME/TIMESTAMPの比較を実行するには、リテラル構文を使用します。

TimesTenでは、ODBCのタイムスタンプ・リテラル構文もサポートされます。次に例を示します。

{ts '9999-12-31 12:00:00'}

TimesTen型モードを使用している場合、TimestampLiteralの詳細は、Oracle TimesTen In-Memory Databaseリリース6.0.3のドキュメントを参照してください。

IntervalLiteral

書式: INTERVAL [+\-] CharacterString IntervalQualifier
次に例を示します。

INTERVAL '8' DAY

BINARY_FLOAT_INFINITY | BINARY_DOUBLE_INFINITY

正の無限大
INF(正の無限大)は、BINARY_FLOATデータ型およびBINARY_DOUBLEデータ型と互換性があるIEEE浮動小数点値です。定数値BINARY_FLOAT_INFINITYまたはBINARY_DOUBLE_INFINITYを使用して、正の無限大を表します。

-BINARY_FLOAT_INFINITY | -BINARY_DOUBLE_INFINITY

負の無限大
-INF(負の無限大)は、BINARY_FLOATデータ型およびBINARY_DOUBLEデータ型と互換性があるIEEE浮動小数点値です。定数値-BINARY_FLOAT_INFINITYおよび-BINARY_DOUBLE_INFINITYを使用して、負の無限大を表します。

BINARY_FLOAT_NAN |
BINARY_DOUBLE_NAN

非数
NaN(非数)は、BINARY_FLOATデータ型およびBINARY_DOUBLEデータ型と互換性があるIEEE浮動小数点値です。定数値BINARY_FLOAT_NANまたはBINARY_DOUBLE_NANを使用して、NaNを表します。

書式モデル

書式モデルは、文字列に格納された日時および数値データの書式を示す文字リテラルです。文字列を日付または数値に変換する場合は、書式モデルによって、TimesTenでの文字列の解釈方法が決まります。

この項では、次の書式モデルについて説明します。

- 数値書式モデル

- 日時書式モデル

- ROUNDおよびTRUNC日付関数の書式モデル

- TimesTen日時データ型TO_CHARの書式モデル

数値書式モデル

数値書式モデルは、次の関数で使用します。

- NUMBER、BINARY_FLOATまたはBINARY_DOUBLEデータ型の値をVARCHAR2データ型に変換するTO_CHAR関数。

- CHARまたはVARCHAR2データ型の値をNUMBERデータ型に変換するTO_NUMBER関数。

デフォルトのamerican_america NLS言語および地域の設定が使用されます。

数値書式モデルは、1つ以上の数値書式要素で構成されます。次の表に、数値書式モデルの要素を示します。数値書式モデルに書式要素MI、SまたはPRが指定されないかぎり、負の戻り値の先頭には自動的に負の符号が付けられ、正の戻り値の先頭には空白が付けられます。

表3-1 数値書式要素

要素

例

説明

,(カンマ)

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通貨記号を戻します。

D

99D99

指定された位置に小数点文字を戻します。デフォルトはピリオド(.)です。

制限:

1つの数値書式モデルで指定できる小数点文字は1つのみです。

EEEE

9.9EEEE

科学表記法で値を戻します。

G

9G999

指定された位置にグループ・セパレータを戻します。1つの数値書式モデルに複数のグループ・セパレータを指定できます。

制限:

数値書式モデルでは、小数点文字(ピリオド)の右側にグループ・セパレータは使用できません。

L

L999

指定した位置にローカル通貨記号を戻します。

MI

999MI

後続のマイナス符号(-)を含む負の値を戻します。

後続の空白を含む正の値を戻します。

制限:

MI書式の要素は、数値書式モデルの末尾にのみ使用できます。

PR

999PR

山カッコ(< >)の中に負の値を戻します。

先行および後続の空白を含む正の値を戻します。

制限:

PR書式の要素は、数値書式モデルの末尾にのみ使用できます。

RN

RN

値を大文字のローマ数字として戻します。

rn

rn

値を小文字のローマ数字として戻します。

1から3999までの整数を値として指定できます。

S

S9999

先行のマイナス符号(-)を含む負の値を戻します。

先行のプラス符号(+)を含む正の値を戻します。

S

9999S

後続のマイナス符号(-)を含む負の値を戻します。

後続のプラス符号(+)を含む正の値を戻します。

制限:

S書式の要素は、数値書式モデルの先頭または末尾にのみ使用できます。

TM

TM

テキストの最小数値書式モデルは、文字の最小数を(10進出力で)戻します。この要素の大文字と小文字は区別されません。

デフォルトはTM9で、出力が64文字を超えないかぎり、固定表記法で数値を戻します。出力が64文字を超える場合は、TimesTenによって自動的に科学表記法で数値が戻されます。

制限:

- この要素の前に他の要素を指定することはできません。

- この要素の後に、9を1つか、Eを1つか、または(e)を指定できますが、これらを組み合せることはできません。次の文は、エラーを戻します。
SELECT TO_NUMBER (1234, 'TM9e') FROM dual;

U

U9999

指定された位置にユーロまたは他の二重通貨記号を戻します。

V

999V99

10nを乗算した値を戻します(この値は必要に応じて丸められます)。nはVに続く9の数です。

X

XXXX

指定された桁数の16進値を戻します。指定された数値が整数でない場合は、TimesTenによって整数に丸められます。

制限:

- この要素は、正の値または0(ゼロ)のみを受け入れます。負の値はエラーを戻します。

- この要素の前には、先行の0(ゼロ)を戻す0(ゼロ)またはFMのみを指定できます。その他の要素はすべてエラーを戻します。Xに0(ゼロ)もFMも指定しない場合は、常に戻り値に先行空白が含まれます。

日時書式モデル

日時書式モデルは、次の関数で使用します。

- 日時値のデフォルト書式以外の文字値を変換するTO_CHAR関数またはTO_DATE関数。

- デフォルト書式以外の日時値を文字列に変換するTO_CHAR関数。

日時書式モデルの合計の長さは、22文字を超えることができません。

デフォルトのamerican_america NLS言語および地域の設定が使用されます。

日時書式モデルは、表3-2に示す、1つ以上の日時書式要素で構成されます。

表3-2 日時書式要素

要素

説明

-/,.;:"text"

句読点および引用符付きテキストは、結果で複製されます。

AD

A.D.

ピリオド付きまたはピリオドなしで西暦を示します。

AM

A.M.

ピリオド付きまたはピリオドなしで午前を示します。

BC

B.C.

ピリオド付きまたはピリオドなしで紀元前を示します。

D

曜日(1から7)

DAY

曜日。最大幅の名前を表示するために空白で埋められます。

DD

日付(1から31)

DDD

通日

DL

長い日付書式

デフォルトのAMERICAN_AMERICAロケールの場合、これは、書式'fmDay, Month dd, yyyy'を指定することと同じになります。

制限:

この書式は、空白で区切られたTS要素でのみ指定できます。

DS

短い日付書式

デフォルトのAMERICAN_AMERICAロケールの場合、これは、書式'MM/DD/RRRR'を指定することと同じになります。

制限:

この書式は、空白で区切られたTS要素でのみ指定できます。

DY

曜日の省略名

FM

先行または後続の空白はありません。

FX

文字データと書式モデルが完全に一致します。

HH

時間(1から12)

HH24

時間(0から23)

J

ユリウス日

紀元前4712年1月1日からの日数です。Jで指定される数値は整数である必要があります。

MI

分(0から59)

MM

月(01から12。1月=01)

MON

月の省略名

MONTH

月の名前。最大幅の名前を表示するために空白で埋められます。

RM

ローマ数字での月(IからXII。1月=I)

RR

20世紀の年(21世紀に2桁のみを使用)

RRRR

年を丸めます。

4桁または2桁で入力できます。2桁の場合、RRと同じ値が返されます。この機能を使用しない場合は、年を4桁で入力します。

SS

秒(0から59)

SSSSS

午前0時以降の秒数(0から86399)

TS

短い時間書式

制限:

この書式は、空白で区切られたDL要素またはDS要素でのみ指定できます。

X

ローカル基数文字

次に例を示します。

'HH:MI:SSXFF'

Y,YYY

指定の位置にカンマを付けた年

YYYY

SYYYY

年(4桁)

Sによって、紀元前の日付の前にマイナス符号が付けられます。

YYY

YY

Y

年の下3桁、下2桁または下1桁

ROUNDおよびTRUNC日付関数の書式モデル

次の表に、ROUNDおよびTRUNC日付関数に使用可能な書式モデルと、日付が丸められる場合や切り捨てられる場合の単位を示します。デフォルトのモデルDDでは、時刻部分が午前0時に丸められるか切り捨てられた日付が戻されます。

書式モデル

丸め単位または切捨て単位

CC
SCC

世紀
4桁の年の下2桁が01から99(01および99を含む)の場合、世紀はその年の上2桁に1を加えた値になります。

4桁の年の下2桁が00の場合、世紀はその年の上2桁と等しい値になります。たとえば、2002は21を返し、2000は20を返す。

SYYYY
YYYY

YEAR

SYEAR

YYY

YY

Y

年(7月1日で切上げ)

IYYY
IYY

IY

I

ISO年

Q

四半期(四半期の2番目の月の16日で切上げ)

MONTH
MON

MM

RM

月の名前(16日で切上げ)

WW

対象となる年の最初の日と同じ曜日

IW

ISO週の最初の日と同じ曜日(月曜日)

W

対象となる月の最初の日と同じ曜日

DDD
DD

J

通日

DAY
DY

D

開始曜日

HH
HH12

HH24

時刻

MI

分

TimesTen日時データ型TO_CHARの書式モデル

この書式モデルは、TO_CHAR関数を呼び出してTT_TIMESTAMPまたはTT_DATEの日時値を変換する場合に使用します。また、TO_CHAR関数を呼び出してNUMBERまたはORA_FLOAT以外の任意の数値を変換する場合にも使用します。

- 指定した書式に数値が適合しない場合、値は切り捨てられます。

- 書式文字列は、50文字以内で指定します。

- Dの結果は、常に小数点になります。NLSパラメータを使用して、その値を変更することはできません。

- 1e-126未満または1e126より大きい絶対値を含む浮動小数点を、TO_CHAR関数への入力として指定した場合、エラーが発生します。

書式

説明

DD

日付(1から31)

MM

月(1から12)

MON

月(3文字の接頭辞)

MONTH

月(空白が埋め込まれた9文字の正式名)

YYYY

年(4桁)

Y,YYY

年(カンマ付き)

YYY

年(末尾3桁)

YY

年(末尾2桁)

Y

年(末尾1桁)

Q

四半期

HH

時刻(1から12)

HH12

時刻(1から12)

HH24

時刻(0から23)

MI

分(0から59)

SS

秒(0から59)

FF

6桁の精度の秒の小数部

FFn

nで指定される精度の秒の小数部

AM

正午標識

A.M.

正午標識

PM

正午標識

P.M.

正午標識

- /  ,  . ; :

出力される記号

"text"

出力されるテキスト

9

桁

0

先行または後続0(ゼロ)

.

小数点

,

カンマ

EEEE

科学表記法

S

符号モード

B

空白モード
数字がない場合、文字列は空白で埋められます。

FM

非空白モード(埋込みモード)
この要素が使用される場合、後続または先行の空白は削除されます。

$

先行ドル記号

CASE式

条件付きの値を指定します。単純なCASE式と検索対象のCASE式がサポートされています。CASE式は、式を任意の場所で指定でき、必要に応じて何度でも使用できます。

一連のIF文を使用するかわりに、CASE式を使用すると、条件が満たされた場合に適切な値を返す一連の条件を使用できます。CASE式を使用すると、問合せを簡略化し、効率のよいコードを記述できます。

SQL構文

検索対象のCASE式の構文は、次のとおりです。

CASE
{WHEN SearchCondition THEN Expression1}[…]
[ELSE Expression2]
END

単純なCASE式の構文は、次のとおりです。

CASE Expression
{WHEN CompExpression THEN Expression1}[…]
[ELSE Expression2]
END

パラメータ

CASEには、次のパラメータがあります。

パラメータ

説明

WHEN SearchCondition

検索条件を指定します。この句は副問合せを指定できません。

WHEN CompExpression

比較するオペランドを指定します。

Expression

各CompExpressionと比較する最初のオペランドを指定します。

THEN Expression1

結果の式を指定します。

ELSE Expression2

条件を満たさない場合の結果の式を指定します。ELSE句を指定しないと、TimesTenによってELSE NULL句が式に追加されます。

説明

CASE式は、INSERT文の値の句の中では指定できません。

例

色の値を指定する検索対象のCASE文を指定するには、次の文を使用します。

SELECT CASE
WHEN color=1 THEN 'red'
WHEN color=2 THEN 'blue'
ELSE 'yellow'
END FROM cars;

色の値を指定する単純なCASE文を指定するには、次のようにします。

SELECT CASE color
WHEN 1 THEN 'red'
WHEN 2 THEN 'blue'
ELSE 'yellow'
END FROM cars;

ROWID

TimesTenでは、表に保存される各行にrowidと呼ばれる一意のIDが割り当てられます。このROWIDのデータ型はROWIDです。ROWIDは、ROWID擬似列を問い合せることで確認できます。

ROWID擬似列は実際の列ではないため、データベース領域は不要です。また、更新したり、索引を作成したり、削除することはできません。

ROWID値は表に行が存在する間は使用されますが、元の行が削除されると、そのROWIDはシステムによって違う行に割り当てられる場合があります。0(ゼロ)はROWIDに使用できません。

ROWIDはリカバリ、バックアップおよびリストア処理を行っても使用できます。ただし、レプリケーション、ttMigrateまたはttBulkCpの処理を行うと使用できなくなります。

ROWIDの詳細は、「式の指定」を参照してください。ROWIDデータ型の詳細は、「ROWIDデータ型」を参照してください。

ROWNUM擬似列

問合せによって戻される行ごとに、ROWNUM擬似列によって、行が選択された順序を示す数値が戻されます。最初に選択された行にはROWNUMとして1が、2番目に選択された行にはROWNUMとして2が割り当てられ、以降も同様の割当てが行われます。

次の例に示すようにROWNUMを使用して、問合せによって戻される行数を制限します。

SELECT * FROM employees WHERE ROWNUM < 10;

行が選択された順序は、使用している索引および結合順序によって異なります。ORDER BY句を指定すると、ソートが行われる前にROWNUMが割り当てられます。ただし、ORDER BY句を指定すると、使用している索引および結合順序が変更される可能性があります。選択された行の順序が変更されると、選択された各行に関連付けられているROWNUM値も変更される可能性があります。

たとえば、別の索引が使用された場合、次の問合せは、以前に実行した問合せとは異なる従業員を戻す可能性があります。

SELECT * FROM employees WHERE ROWNUM < 10 ORDER BY last_name;

比較条件「ROWNUM値＞正の整数」は、常に偽となるため注意してください。たとえば、次の問合せでは行が戻されません。

SELECT * FROM employees WHERE ROWNUM > 1;

ROWNUMを使用して一意の値を表の各行に割り当てます。次に例を示します。

UPDATE my_table SET column1 = ROWNUM;

問合せにFIRST NumRowsまたはROWS m TO nが含まれている場合は、ROWNUMを使用して戻される行の数を制限しないでください。たとえば、次の問合せでは、エラー・メッセージが戻されます。

SELECT FIRST 2 * FROM employees WHERE ROWNUM <1 ORDER BY employee_id;
2974: Using rownum to restrict number of rows returned cannot be combined with
first N or rows M to N

4 関数

関数は、データを操作し、結果を戻します。この章には、すべての関数のアルファベット順のリストに加え、次の関数の概要も含まれています。

- 数値関数

- 文字値を戻す文字関数

- 数値を戻す文字関数

- 文字列関数

- LOB関数

- NLSキャラクタ・セット関数

- 一般的な比較関数

- Null関連の比較関数

- 変換関数

- 日時関数

- 集計関数

- 分析関数

- エンコーディング関数

- ユーザー/セッション関数

- キャッシュ・グリッド関数

数値関数

数値ファンクションは入力として数値を受け取り、結果として数値を戻します。数値関数は、次のとおりです。

- ABS

- CEIL

- FLOOR

- MOD

- POWER

- ROUND (式)

- SIGN

- SQRT

- TRUNC (式)

文字値を戻す文字関数

文字値を戻す文字関数は、次のとおりです。

- CHR

- CONCAT

- LOWERおよびUPPER

- LPAD

- LTRIM

- NCHR

- NLSSORT

- REPLACE

- RPAD

- RTRIM

- SOUNDEX

- SUBSTR、SUBSTRB、SUBSTR4

- TRIM

数値を戻す文字関数

数値を戻す文字関数は、次のとおりです。

- ASCIISTR

- INSTR、INSTRB、INSTR4

- LENGTH、LENGTHB、LENGTH4

文字列関数

TimesTenでは、次の文字列関数がSELECT文でサポートされています。

- INSTR、INSTRB、INSTR4

- LENGTH、LENGTHB、LENGTH4

- SUBSTR、SUBSTRB、SUBSTR4

文字列関数を指定する選択済の値によって、SELECTがマテリアライズされます。これによって時間と領域の両方においてオーバーヘッドが発生します。

LOB関数

次のEMPTY_*関数は、LOBをNULL以外の値に初期化します。

- EMPTY_BLOB

- EMPTY_CLOB

次のTO_*関数は、特定のデータ型を任意のLOBデータ型に変換します。

- TO_BLOB

- TO_CLOB

- TO_LOB

- TO_NCLOB

NLSキャラクタ・セット関数

NLSキャラクタ・セット関数は、指定されたキャラクタ・セットに関する情報を戻します。

- NLS_CHARSET_ID

- NLS_CHARSET_NAME

一般的な比較関数

一般的な比較関数は、入力式の比較を実行します。一般的な比較ファンクションを次に示します。

- DECODE

- GREATEST

- LEAST

NULL関連の比較関数

NULL関連関数は、式をNULLと比較するか、式の比較に基づいてNULLを返します。NULL関連の比較関数は次のとおりです。

- COALESCE

- NULLIF

- NVL

変換関数

変換ファンクションは、あるデータ型から他のデータ型に値を変換します。一部の変換関数の名前は、TO_datatypeの表記規則に従います。

SQL変換関数は次のとおりです。

- ASCIISTR

- CAST

- NUMTODSINTERVAL

- NUMTOYMINTERVAL

- TO_CHAR

- TO_DATE

- TO_NUMBER

- UNISTR

日時関数

日時データ型の詳細な説明は、「日時データ型」を参照してください。

日時関数は次のとおりです。

- ADD_MONTHS

- EXTRACT

- MONTHS_BETWEEN

- NUMTODSINTERVAL

- NUMTOYMINTERVAL

- ROUND (日付)

- SYSDATEおよびGETDATE

- TIMESTAMPADD

- TIMESTAMPDIFF

- TO_DATE

- TRUNC(日付)

集計関数

集計関数は、グループ内のすべての行で特定の操作を実行します。集計ファンクションは、単一行ではなく行のグループに基づいて1つの結果行を戻します。通常、SELECT文のGROUP BY句とともに使用され、戻される列はグループに分かれます。GROUP BY句を指定しないと、選択リストの集計関数が問合せ対象の表またはビューのすべての行に適用されます。

選択リストまたはHAVING句に集計関数を指定できます。詳細は、「SELECT」を参照してください。式の値は、WHERE句の条件を満たす各行を使用して計算されます。

単一の引数をとる多くの集計関数では、ALLキーワードまたはDISTINCTキーワードを使用できます。デフォルトは、ALLです。ALLまたはDISTINCTを使用できるかどうかについては、各集計関数の構文を参照してください。

- DISTINCTを集計関数で指定すると、引数式の重複を排除した値のみが考慮されます。

- ALLを集計関数で指定すると、重複を含むすべての値が考慮されます。

たとえば、1、1、1、3の平均値はDISTINCTでは2となります。これらの結果のALLの平均は、1.5になります。

GROUP BY句内のROLLUPおよびCUBE句は、列の値がNULL値で表される超集合行を生成します。超集合行はNULLで示されるため、NULL値および超集合結果を含む問合せ結果を区別することが困難な場合があります。さらに、戻された小計内で、指定された小計の正確な集計レベルをどのように探し出すかということも問題です。この問題を解決するには、GROUP_ID、GROUPINGおよびGROUPING_ID関数を使用します。

次の内容の詳細は、第1章「データ型」を参照してください。

- 集計関数の評価において実行される切捨てとデータ型の変換。

- 数値引数を含む集計関数の精度とスケール。

- 集計関数の結果のデータ型の制御。

集計関数のリストは、次のとおりです。

- AVG

- COUNT

- GROUP_ID

- GROUPING

- GROUPING_ID

- MAX

- MIN

- SUM

分析関数

分析関数は行のグループに基づいて集計値を計算します。集計関数との違いは、グループごとに複数の行を戻す点です。行のグループをウィンドウといい、analytic_clauseで定義されます。

分析関数は、問合せで最後に実行される演算(最後のORDER BY句を除く)の集合です。すべての結合、WHERE句、GROUP BY句およびHAVING句は、分析関数が処理される前に実行されます。最後のORDER BY句は、分析関数の結果を順序変更するために使用されます。分析関数は、問合せまたは副問合せの選択リスト、およびORDER BY句に指定できます。

分析関数を使用すると、問合せの結果セットをパーティションと呼ばれる行グループに分割できます。列または式でパーティションを定義できます。問合せ結果セットは、すべての行を持つ1つのパーティション、少数の大きなパーティション、またはそれぞれが数行しか持たない多数の小さなパーティションに分割可能です。

パーティションの行ごとに、スライディング・ウィンドウを定義できます。このウィンドウで、カレント行の計算に使用される行の範囲が決まります。ウィンドウ・サイズは、行の物理的な数に基づきます。ウィンドウには開始行および終了行があり、片方の端または両方の端で移動できます。たとえば、累積SUM関数を定義したウィンドウには、パーティションの最後の行に固定された開始行が含まれ、終了行は開始点からパーティションの最後の行までスライドします。反対に、移動平均を定義したウィンドウには開始点と終了点の両方のスライドが含まれます。

ウィンドウは、パーティションのすべての行、またはパーティション内の1行と同じ大きさに設定できます。

各関数には、複数の順序式を指定できます。これは、2番目の式が最初の式にある同一値との間の関連性を変換できるため、値をランク付けする関数を使用する場合に有効です。

通常、分析ファンクションは、累積集計、移動集計、センター集計およびレポート集計の実行に使用されます。

制限:

- 分析関数は、グローバル問合せまたはマテリアライズド・ビューをサポートしていません。

分析関数のリストは、次のとおりです。アスタリスク(*)付きの関数は、WindowingClauseをサポートしています。

- AVG *

- COUNT *

- DENSE_RANK

- FIRST_VALUE *

- LAST_VALUE *

- MAX *

- MIN *

- RANK

- ROW_NUMBER

- SUM *

SQL構文

分析関数の構文:

AnalyticFunctionName ([arguments]) OVER ([AnalyticClause])

AnalyticClause::= QueryPartitionClause [ORDER BY OrderByClause [,...]
[WindowingClause]] |
ORDER BY OrderByClause [,...] [WindowingClause]

QueryPartitionClause::= PARTITION BY { Expression[,Expression]... |
(Expression [,Expression]...)
}

OrderByClause::= Expression [ASC|DESC] [NULLS {FIRST|LAST}]

WindowingClause::= ROWS { BETWEEN StartPoint AND EndPoint |
StartPoint
}

StartPoint::= UNBOUNDED PRECEDING | CURRENT ROW | PosNumConstantExpr
{ PRECEDING | FOLLOWING }

EndPoint::= UNBOUNDED FOLLOWING | CURRENT ROW | PosNumConstantExpr
{ PRECEDING | FOLLOWING }

パラメータ

パラメータ

説明

AnalyticFunctionName

分析関数の名前。

arguments

分析関数の引数。引数の数は分析関数によって異なります。関数に対する引数の詳細は、特定の関数を参照してください。

OVER ( [ AnalyticClause ] )

関数が分析関数であることを示します。この句は、FROM、WHERE、GROUP BYおよびHAVING句の後に計算されます。
AnalyticClauseを指定しない場合、分析関数は、パーティション化や順序変更を行わず、またはウィンドウを使用せずに結果セット全体で評価されます。

QueryPartitionClause

AnalyticClauseで使用されるオプションの句。PARTITION BY句で示されます。指定すると、問合せ結果セットがExpressionリストに基づいてグループにパーティション化されます。この句を省略すると、ファンクションは問合せ結果セットのすべての行を単一のグループとして扱います。
同じまたは異なるPARTITIONキーを使用して、同じ問合せに複数の分析関数を指定できます。

Expressionに有効な値は、定数、列、非分析関数または関数式です。

ORDER BY OrderByClause

AnalyticClauseで使用されるオプションの句。この句を使用して、パーティション内のデータの順序を指定します。Expressionは、列の名前または位置には指定できません。
各キーがExpressionで定義され、順序付けシーケンスで修飾された複数キーのパーティション内での値を順序付けできます。

分析関数は、この句で指定された順序で動作します。ただし、この句は、結果の順序は保証しません。最終結果の順序を保証するには、問合せのORDER BY句を使用してください。

ORDER BY OrderByClauseを指定し、QueryPartitionClauseまたはWindowingClauseのいずれかを指定しない場合、デフォルト・ウィンドウはROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROWになります。

ORDER BY OrderByClauseを指定しないと、順序は不確定になります。

ASC | DESC

順序付けシーケンス(昇順または降順)を指定します。デフォルトはASCです。
句はオプションです。

NULLSFIRST|NULLSLAST

NULL値を含む行を、順序付けシーケンスの最初に指定するか最後に指定するかを指定します。NULLS LASTは、昇順のデフォルトです。NULLS FIRSTは、降順のデフォルトです。
句はオプションです。

WindowingClause

句は、ROWSキーワードで示されます。物理単位(行)で表されるウィンドウを行ごとに指定します。ウィンドウは、関数結果の計算に使用されます。関数は、ウィンドウのすべての行に適用されます。ウィンドウは、問合せ結果セット内またはパーティションの上から下まで移動します。
ORDER BY OrderByClauseを指定しないと、WindowingClauseを指定できません。

分析関数が戻す値は、順序付けシーケンスの結果が一意の順序でなければ非決定的な結果を生成することがあります。この場合、OrderByClauseに複数の列を指定して、順序を一意にします。

WindowingClauseを使用できる関数のリストは、「分析関数」を参照してください。

BETWEEN...AND

BETWEEN...AND句を使用すると、ウィンドウに開始点(StartPoint)および終了点(EndPoint)を指定できます。
BETWEEN...AND句を省略して終了点を1つ指定しようとすると、TimesTenはこの終了点を開始点とみなし、デフォルトでカレント行を終了点に指定します。

StartPoint

有効な値は、UNBOUNDED PRECEDING、CURRENT ROW、PosNumConstantExpr、PRECEDINGまたはPosNumConstantExpr FOLLOWINGです。
PosNumConstantExprは、正の定数値または結果が正の整数値になる式のいずれかである必要があります。

EndPoint

有効な値は、UNBOUNDED FOLLOWING、CURRENT ROW、PosNumConstantExpr PRECEDINGまたはPosNumConstantExpr FOLLOWINGです。
PosNumConstantExprは、正の定数値または結果が正の整数値になる式のいずれかである必要があります。

UNBOUNDED PRECEDING

UNBOUNDED PRECEDINGを使用して、パーティションの最初の行でウィンドウが開始することを示します。
終了点として使用することはできません。

UNBOUNDED FOLLOWING

UNBOUNDED FOLLOWINGを使用して、パーティションの最後の行でウィンドウが終了することを示します。
開始点として使用することはできません。

CURRENT ROW

CURRENT ROWが開始点のとき、ウィンドウがカレント行から始まることを指定します。この場合、PosNumConstantExpr PRECEDINGを終了点にすることはできません。
CURRENT ROWが終了点のとき、ウィンドウがカレント行で終了することを指定します。この場合、PosNumConstantExpr FOLLOWINGを開始点にすることはできません。

PosNumConstantExpr {PRECEDING | FOLLOWING }

PosNumConstantExpr FOLLOWINGが開始点の場合、終了点はPosNumConstantExpr FOLLOWINGまたはUNBOUNDED FOLLOWINGである必要があります。PosNumConstantExpr PRECEDINGが終了点の場合、開始点はPosNumConstantExpr PRECEDINGまたはUNBOUNDED PRECEDINGである必要があります。
終了点PosNumConstantExprは、開始点PosNumConstantExprよりも大きいか同等である必要があります。

PosNumConstantExprは、正の定数値または結果が正の整数値になる式のいずれかである必要があります。

エンコーディング関数

エンコーディング関数は、入力式に基づいた値を返します。

- TT_HASH

注意:
DECODEは、「一般的な比較関数」に含まれます。

ユーザー/セッション関数

TimesTenは、次のユーザー/セッション関数をサポートします。

- CURRENT_USER

- SESSION_USER

- SYS_CONTEXT

- SYSTEM_USER

- UID

- USER

キャッシュ・グリッド関数

データの場所を変更せずにグローバル問合せを実行する必要がある場合があります。キャッシュ・グリッド関数を使用すると、キャッシュ・グリッド内のデータの場所を特定し、メンバーからの情報に対する問合せを実行できます。

グローバル問合せで次のSQL関数を使用して、キャッシュ・グリッド内でのデータの場所に関する情報を取得すると、ユーザーはこの情報を使用して戻された各行をグリッドのメンバーにマッピングできます。

- TTGRIDMEMBERID(): グローバル問合せ内で実行されると、戻される行ごとに、所有メンバーのキャッシュ・グリッド内のメンバーIDを指定します。

- TTGRIDNODENAME(): グローバル問合せ内で実行されると、データが配置されているキャッシュ・グリッド内のノードの名前を戻します。

- TTGRIDUSERASSIGNEDNAME(): グローバル問合せ内で、データが配置されているキャッシュ・グリッド内のノードにユーザーが割り当てた名前を戻します。

これらの関数は、SELECT文およびSELECT文の次の句で使用できます。

- WHERE句

- GROUP BY句

- ORDER BY句

詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のキャッシュ・グリッド内にあるデータの場所情報の取得に関する項を参照してください。

ABS

ABS関数は、Expressionの絶対値を戻します。

SQL構文

ABS(Expression)

パラメータ

ABSには、次のパラメータがあります。

パラメータ

説明

Expression

オペランドまたは列には、任意の数値データ型を指定できます。Expressionの絶対値が戻されます。

説明

- ExpressionがTT_DECIMALまたはNUMBER型の場合、戻されるデータ型は最大の精度およびスケールを持つNUMBERです。それ以外の場合、ABSでは、Expressionの数値データ型と同じデータ型が戻されます。

- Expressionの値がNULLの場合、NULLが戻されます。Expressionの値が-INFの場合、INFが戻されます。

例

表abstestを作成してBINARY_FLOATおよびTT_INTEGER型の列を定義します。値-BINARY_FLOAT_INFINITYおよび-10を挿入します。ABSをコールして絶対値を戻します。戻り値はINFおよび10になります。

Command> CREATE TABLE abstest (col1 BINARY_FLOAT, col2 TT_INTEGER);
Command> INSERT INTO abstest VALUES
> (-BINARY_FLOAT_INFINITY, -10);
1 row inserted.
Command> SELECT ABS (col1) FROM abstest;
< INF >
1 row found.
Command> SELECT ABS (col2) FROM abstest;
< 10 >
1 row found.

ADD_MONTHS

ADD_MONTHS関数は、日付dateに月数integerを加算した値を戻します。

SQL構文

ADD_MONTHS(Date,Integer)

パラメータ

ADD_MONTHSには、次のパラメータがあります。

パラメータ

説明

Date

日時値、または日時値に変換可能な任意の値。

Integer

整数値、または整数値に変換可能な値。

説明

- 戻り型は、dateのデータ型にかかわらず常にDATEです。サポートされるデータ型は、DATE、TIMESTAMP、ORA_TIMESTAMPおよびORA_DATEです。

- データ型TIME、TT_TIME、TT_DATEおよびTT_TIMESTAMPはサポートされていません。

- dateが月の最終日である場合、または結果となる月の日数がdateの日付部分より少ない場合、結果となる月の最終日が戻されます。それ以外の場合は、dateと同じ日付部分が結果として戻されます。

例

ADD_MONTHS関数をコールして、2007年1月31日という日付に1か月を加算します。2月の最終日が戻されます。

Command> SELECT ADD_MONTHS (DATE '2007-01-31', 1) FROM dual;
< 2007-02-28 00:00:00 >
1 row found.

dateがTIMESTAMP型の場合、ADD_MONTHSによりDATEデータ型が戻されます。

Command> DESCRIBE SELECT ADD_MONTHS (TIMESTAMP '2007-01-31
> 10:00:00', 1) FROM dual;
Prepared Statement:
Columns:
EXP                             DATE NOT NULL

HRスキーマを使用して、employee_id、last_nameおよびhire_dateを表示する、employees表の先頭の5行を選択します。CREATE TABLE ... AS SELECT文を使用して新しい表temp_hire_dateを作成します。ADD_MONTHSをコールして元のhire_dateに23か月を加算します。

Command> SELECT FIRST 5 employee_id, last_name, hire_date FROM employees;
< 100, King, 1987-06-17 00:00:00 >
< 101, Kochhar, 1989-09-21 00:00:00 >
< 102, De Haan, 1993-01-13 00:00:00 >
< 103, Hunold, 1990-01-03 00:00:00 >
< 104, Ernst, 1991-05-21 00:00:00 >
5 rows found.
Command> CREATE TABLE temp_hire_date (employee_id, last_name,
> hire_date) AS SELECT FIRST 5 employee_id, last_name,
> ADD_MONTHS (hire_date, 23) FROM employees;
5 rows inserted.
Command> SELECT * FROM temp_hire_date;
< 100, King, 1989-05-17 00:00:00 >
< 101, Kochhar, 1991-08-21 00:00:00 >
< 102, De Haan, 1994-12-13 00:00:00 >
< 103, Hunold, 1991-12-03 00:00:00 >
< 104, Ernst, 1993-04-21 00:00:00 >
5 rows found.

ASCIISTR

ASCIISTR関数は、すべてのキャラクタ・セットでの文字列または文字列に解決される式のいずれかを引数とし、データベース・キャラクタ・セットのASCIIバージョンの文字列を戻します。非ASCII文字はUnicodeエスケープに変換されます。

SQL構文

ASCIISTR ([N]'String')

パラメータ

ASCIISTRには、次のパラメータがあります。

パラメータ

説明

[N]'String'

ASCIISTR関数に渡される文字列に対して評価する文字列または式。文字列は任意のキャラクタ・セットで指定できます。値は、CHAR、VARCHAR、VARCHAR2、NCHAR、NVARCHAR、NVARCHAR2、CLOBまたはNCLOBデータ型を含む、サポートされているデータ型になります。TimesTenデータ型およびOracle Databaseデータ型の両方がサポートされます。データベース・キャラクタ・セットのASCIIバージョンの文字列が戻されます。文字列をUTF-16書式で渡す場合は、Nを指定します。

説明

ASCIISTR関数を使用すると、データベース・キャラクタ・セット以外の文字列値の表現を確認できます。

例

次の例では、ASCIISTR関数を呼び出し、'Aäa'を引数としてUTF-16書式で渡します。ASCIIバージョンはWE8ISO8859P1キャラクタ・セットで戻されます。非ASCII文字äは、Unicodeエンコード値に変換されます。

Command> connect "dsn=test; ConnectionCharacterSet= WE8ISO8859P1";
Connection successful: DSN=test;UID=user1;DataStore=/datastore/user1/test;
DatabaseCharacterSet=WE8ISO8859P1;
ConnectionCharacterSet=WE8ISO8859P1;PermSize=32;TypeMode=0;
(Default setting AutoCommit=1)
Command> SELECT ASCIISTR (n'Aäa') FROM dual;
< A\00E4a >
1 row found.

AVG

引数の値の平均値を計算します。NULL値は無視されます。

SQL構文

AVG ([ALL | DISTINCT] Expression) [OVER ([AnalyticClause])]

パラメータ

AVGには、次のパラメータがあります。

パラメータ

説明

Expression

任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。

ALL

集計関数の引数に重複する行を含めます。ALLまたはDISTINCTのいずれも指定しない場合、ALLとみなされます。

DISTINCT

集計関数の引数から、重複する列の値を削除します。

OVER ([AnalyticClause])

指定すると、集計分析関数を示します。分析関数の詳細は、「分析関数」を参照してください。

説明

- GROUP BYが使用されていない空の表でAVGを計算すると、AVGはNULLを戻します。

- 空のグループまたはグループ化された空の表(GROUP BYを使用)でAVGを計算すると、AVGは何も戻しません。

- AVGは、SUM/COUNTとして評価されます。結果のデータ型は、DIV演算子に適用されるルールを使用して導出されます。

- 問合せでAnalyticClauseを指定しない場合、AVGは集計関数として機能します。

- DISTINCTおよびAnalyticClauseを指定する場合は、QueryPartitionClauseのみを指定できます。OrderByClauseおよびWindowingClauseは指定できません。

例

HRスキーマで従業員の平均給与を計算します。CASTを使用して平均を列のデータ型としてキャストします。

Command> SELECT CAST(AVG (salary) AS NUMBER (8,2)) FROM employees;
< 6461.68 >

CAST

データをある型から別の型に変換できます。CASTは定数が使用可能な場合に使用できます。CASTは引数の正確なデータ型を指定する場合に役立ちます。-のような単項演算子、またはTO_CHARやTO_DATEのような1つのオペランドを持つ関数の場合に特にあてはまります。

値は、互換性のあるデータ型に対してのみCASTできます。ただし、NULLを除きます。NULLは他の任意のデータ型にキャストできます。NULLリテラルを必要なターゲット・タイプに変換する場合、CASTは必要ありません。

次の変換がサポートされています。

- 数値から数値または2進化10進コード(BCD)へ

- NCHAR to NCHAR

- CHAR文字列からBINARY文字列またはDATE、TIMEまたはTIMESTAMPへ

- BINARY文字列からBINARYまたはCHAR文字列へ

- DATE、TIMEまたはTIMESTAMPからCHARへ

SQL構文

CAST
( {Expression | NULL} AS DataType )

パラメータ

CASTには、次のパラメータがあります。

パラメータ

説明

Expression

変換する値を指定します。

AS DataType

結果のデータ型を指定します。

説明

- ドメイン名へのCASTはサポートされていません。

- 選択済の値をキャストすると、CAST式を使用しない場合よりも、SELECT文の実行により多くの時間とメモリーを消費する可能性があります。

例

INSERT INTO t1 VALUES(TO_CHAR(CAST(? AS REAL)));
SELECT CONCAT(x1, CAST (? AS CHAR(10))) FROM t1;
SELECT * FROM t1 WHERE CAST (? AS INT)=CAST(? AS INT);

CHR

CHR関数は、データベース・キャラクタ・セットに指定されたバイナリ値を持つ文字を戻します。

SQL構文

CHR(n)

パラメータ

CHRには、次のパラメータがあります。

パラメータ

説明

n

データベース・キャラクタ・セットのバイナリ値。このバイナリ値を持つ文字が戻されます。結果のデータ型はVARCHAR2型になります。

説明

- シングルバイト・キャラクタ・セットでは、n >256の場合、TimesTenによってn mod 256のバイナリ値が戻されます。

- マルチバイト・キャラクタ・セットでは、nを1つのコード・ポイントに解決する必要があります。無効なコード・ポイントは検証されません。無効なコード・ポイントを指定した場合、結果は不確定です。

例

次の例は、ASCIIベースのシステムで、キャラクタ・セットWE8ISO8859P1で実行します。

Command> SELECT CHR(67)||CHR(65)||CHR(84) FROM dual;
< CAT >
1 row found.

CEIL

CEIL関数は、Expression以上の最小の整数を戻します。

SQL構文

CEIL(Expression)

パラメータ

CEILには、次のパラメータがあります。

パラメータ

説明

Expression

オペランドまたは列には、任意の数値データ型を指定できます。

説明

- ExpressionがTT_DECIMALまたはNUMBER型の場合、戻されるデータ型は最大の精度およびスケールを持つNUMBERです。それ以外の場合、CEILでは、Expressionの数値データ型と同じデータ型が戻されます。

- Expressionの値がNULLの場合、NULLが戻されます。Expressionの値が-INF、INFまたはNaNの場合、戻り値はそれぞれ-INF、INFまたはNaNです。

例

employees表の従業員のcommission_pctを合計し、CEILをコールして、SUMで戻される値以上で最小となる整数を戻します。SUM関数で戻される値は7.8で、CEIL関数で戻される値は8になります。

Command> SELECT SUM (commission_pct) FROM employees;
< 7.8 >
1 row found.
Command> SELECT CEIL (SUM (commission_pct)) FROM employees;
< 8 >
1 row found.

COALESCE

COALESCE関数は、式リスト内の最初のNULL以外の式を戻します。すべての式がNULLと評価された場合は、NULLを戻します。

SQL構文

COALESCE(Expression1, Expression2 [,...])

パラメータ

COALESCEには、次のパラメータがあります。

パラメータ

説明

Expression1, Expression2 [,...]

式リスト内の式。式リスト内の最初のNULL以外の式が戻されます。
各式は順に評価され、2つ以上の式が存在する必要があります。

説明

- この関数は、NVL一般関数です。

- COALESCEは、CASE式の一種として使用します。次に例を示します。

COALESCE (Expression1, Expression2)

これは、次と同じです。

CASE WHEN Expression1 IS NOT NULL THEN Expression1
ELSE Expression2
END

例

次に、COALESCE式を使用した例を示します。COALESCE式を使用して、manager_id = 100である従業員のうち最初の10人に対して、commission_pctを戻します。commission_pctがNOT NULLの場合、commission_pctの元の値が戻されます。commission_pctがNULLの場合には、0(ゼロ)が戻されます。

Command> SELECT FIRST 10 employee_id, COALESCE (commission_pct, 0) FROM
employees WHERE manager_id = 100;
< 101, 0 >
< 102, 0 >
< 114, 0 >
< 120, 0 >
< 121, 0 >
< 122, 0 >
< 123, 0 >
< 124, 0 >
< 145, .4 >
< 146, .3 >
10 rows found.

CONCAT

CONCAT関数は、新しい文字列を作成するために、ある文字列と別の文字列を連結します。

SQL構文

CONCAT(Expression1, Expression2)

パラメータ

CONCATには、次のパラメータがあります。

パラメータ

説明

Expression1

CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOB式。

Expression2

CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOB式。

説明

- CONCATはExpression2と連結されたExpression1を返します。

- Expression1とExpression2のデータ型には互換性がある必要があります。

- Expression2がNULLの場合、CONCATはExpression1を返します。Expression1がNULLの場合、CONCATはExpression2を返します。

- Expression1とExpression2が両方NULLであれば、CONCATはNULLを返します。

- NCHARとNVARCHAR2も同様に扱われます。扱われるオペランドのいずれかが可変長であれば、戻り値も可変長になります。その他の場合、戻り値は固定長です。

- CONCATの戻り型はExpression1とExpression2の型によって異なります。2つの異なるデータ型を連結すると、結果を含むことのできるデータ型が戻されます。そのため、引数の1つが各国語文字データ型の場合は、戻り値は各国語文字データ型となります。引数の1つがLOBの場合、戻り値はLOBとなります。
次の表に、戻り型の決定方法の例を示します。

Expression1

Expression2

CONCAT

CHAR(m)

CHAR(n)

CHAR(m+n)

CHAR(m)

VARCHAR2(n)

VARCHAR2(m+n)

VARCHAR2(m)

CHAR(n)

VARCHAR2(m+n)

VARCHAR2(m)

VARCHAR2(n)

VARCHAR2(m+n)

CLOB

NCLOB

NCLOB

NCLOB

NCHAR

NCLOB

NCLOB

CHAR(n)

NCLOB

NCHAR(n)

CLOB

NCLOB

例

次の例では、姓と名前を連結します。

Command> SELECT CONCAT(CONCAT(first_name, ' '), last_name), salary
FROM employees;
< Steven King, 24000 >
< Neena Kochhar, 17000 >
< Lex De Haan, 17000 >
< Alexander Hunold, 9000 >
...
107 rows found.

次の例では、列idを列id2と連結します。この例では、結果のデータ型はNCHAR(40)になります。

Command> CREATE TABLE cat (id CHAR (20), id2 NCHAR (20));
Command> INSERT INTO cat VALUES ('abc', 'def');
1 row inserted.
Command> SELECT CONCAT (id,id2) FROM cat;
< abc                 def                  >
1 row found.

||演算子の詳細は、「式の指定」を参照してください。

COUNT

WHERE句を満たすすべての行数を、NULL値の行も含めてカウントします。結果のデータ型はTT_INTEGERです。

COUNTは集計関数で、集計分析関数にもなります。集計関数の詳細は、「集計関数」を参照してください。分析関数の詳細は、「分析関数」を参照してください。表の行数の詳細は、『Oracle TimesTen In-Memory Databaseシステム表およびビュー・リファレンス』の「SYS.TABLES」にあるNUMTUPSフィールドに関する説明を参照してください。

SQL構文

COUNT ({* | [ALL | DISTINCT]{Expression|ROWID}})
[OVER ([AnalyticClause])]

パラメータ

COUNTには、次のパラメータがあります。

パラメータ

説明

Expression

任意の数値データ型、または暗黙的に数値型に変換可能な数値以外の型を取ります。
すべての行をカウントします。NULL値を含む行はカウントされません。結果のデータ型はTT_INTEGERです。表の行数の詳細は、『Oracle TimesTen In-Memory Databaseシステム表およびビュー・リファレンス』の「SYS.TABLES」にあるNUMTUPSフィールドに関する説明を参照してください。

*

WHERE句を満たす行の数を、重複行およびNULL値の行も含めてカウントします。COUNTはNULLを返すことはありません。結果のデータ型はTT_INTEGERです。表の行数の詳細は、『Oracle TimesTen In-Memory Databaseシステム表およびビュー・リファレンス』の「SYS.TABLES」にあるNUMTUPSフィールドに関する説明を参照してください。

ALL

集計関数の引数に重複する行を含めます。ALLまたはDISTINCTのいずれも指定しない場合、ALLとみなされます。

DISTINCT

集計関数の引数から、重複する列の値を削除します。

ROWID

TimesTenでは、表に保存される各行にROWIDと呼ばれる一意のIDが割り当てられます。ROWID値はROWID擬似列から取得されます。詳細は、「ROWID」を参照してください。

OVER ([AnalyticClause])

指定すると、集計分析関数を示します。分析関数の詳細は、「分析関数」を参照してください。

説明

- GROUP BY句が使用されていない空の表で集計関数を計算すると、COUNTは0を返します。

- 空のグループまたはグループ化された空の表(GROUP BYを使用)で集計関数を計算すると、COUNTは何も返しません。

- 問合せでAnalyticClauseを使用しない場合、COUNTは集計関数として機能します。

- DISTINCTおよびAnalyticClauseを指定する場合は、QueryPartitionClauseのみを指定できます。OrderByClauseおよびWindowingClauseは指定できません。

例

従業員の数をカウントします。

Command> SELECT COUNT(*) "TOTAL EMP" FROM employees;

TOTAL EMP
< 107 >
1 row found.

個々のマネージャIDを重複しないように選択して、マネージャの数をカウントします。

Command> SELECT COUNT(DISTINCT manager_id) "Managers" FROM employees;

MANAGERS
< 18 >
1 row found.

CURRENT_USER

データベースに現在接続しているTimesTenユーザーの名前を返します。

SQL構文

CURRENT_USER

パラメータ

CURRENT_USERにはパラメータがありません。

例

データベースに現在接続しているユーザーの名前を返すには、次の文を使用します。

SELECT CURRENT_USER FROM dual;

DECODE

DECODE関数は、式を各検索値と1つずつ比較します。式が検索値と等しい場合、結果の値が戻されます。一致するものがない場合は、デフォルト値(指定されている場合)が戻されます。それ以外の場合は、NULLが戻されます。

SQL構文

DECODE(Expression, {SearchValue, Result [,...])} [,Default])

パラメータ

DECODEには、次のパラメータがあります。

パラメータ

説明

Expression

検索値と比較される式。Expressionは、CHAR、VARCHAR2、NCHARまたはNVARCHAR2データ型を取ります。TimesTenデータ型およびOracle Databaseデータ型の両方がサポートされます。

SearchValue

式が1つ以上の検索値と比較されます。

Result

式がSearchValueと等しい場合、指定されたResult値が戻されます。

Default

一致するものが検出されない場合、デフォルト値が戻されます。Defaultはオプションです。Defaultが指定されず、一致するものが検出されない場合、NULLが戻されます。

説明

式がNULLの場合、NULL式はNULL検索値と等しくなります。

例

次の例では、DECODE関数を呼び出します。locations表で、列country_idが'IT'と等しい場合は、'Italy'が戻されます。country_idが'JP'と等しい場合は、'Japan'が戻されます。country_idが'US'と等しい場合は、'United States'が戻されます。country_idが'IT'、'JP'または'US'と等しくない場合は、'Other'が戻されます。

Command> SELECT location_id,
> DECODE (country_id, 'IT', 'Italy',
> 'JP', 'Japan', 'US', 'United States', 'Other')
> FROM locations WHERE location_id < 2000;

LOCATION_ID, EXP
< 1000, Italy >
< 1100, Italy >
< 1200, Japan >
< 1300, Japan >
< 1400, United States >
< 1500, United States >
< 1600, United States >
< 1700, United States >
< 1800, Other >
< 1900, Other >
10 rows found.

DENSE_RANK

DENSE_RANK関数は分析関数で、順序付けされた行のグループ内の行のランクを計算し、そのランクをNUMBER型として戻します。

SQL構文

DENSE_RANK () OVER ( [QueryPartitionClause] OrderByClause )

パラメータ

DENSE_RANKには、次のパラメータがあります。

パラメータ

説明

QueryPartitionClause

構文、セマンティクスおよび制限の詳細は、「分析関数」を参照してください。

OrderByClause

構文、セマンティクスおよび制限の詳細は、「分析関数」を参照してください。

説明

- ランクは1から始まる連続した整数です。ランクの最大値は、問合せが戻す一意の数値です。同ランクの場合、ランクの値はスキップされません。そのランク付け基準に関して同じ値を持つ行は、同じランクになります。

- DENSE_RANKは、他の行について、問合せで戻される各行のランクを計算します。この計算は、OrderByClauseにあるExpressionsの値に基づいて行われます。

例

人事部門または購買部門で働くすべての従業員の部門名、従業員名および給与を選択します。この2つの部門それぞれについて、一意の各給与に対するランクを計算します。同じ給与は同じランクになります。

Command> SELECT d.department_name, e.last_name, e.salary, DENSE_RANK()
>  OVER (PARTITION BY e.department_id ORDER BY e.salary) AS dense
> FROM employees e, departments d
> WHERE e.department_id = d.department_id
>    AND d.department_id IN ('30', '40')
> ORDER BY e.last_name, e.salary, d.department_name, dense;
< Purchasing, Baida, 2900, 4 >
< Purchasing, Colmenares, 2500, 1 >
< Purchasing, Himuro, 2600, 2 >
< Purchasing, Khoo, 3100, 5 >
< Human Resources, Mavris, 6500, 1 >
< Purchasing, Raphaely, 11000, 6 >
< Purchasing, Tobias, 2800, 3 >
7 rows found.

EMPTY_BLOB

EMPTY_BLOB関数を使用すると、BLOB列を長さが0(ゼロ)で空のBLOBに初期化できます。この関数は、LOBをNULL以外の値に初期化するため、NOT NULLと宣言されているBLOBの初期化に使用できます。

SQL構文

EMPTY_BLOB ()

パラメータ

EMPTY_BLOBにはパラメータがありません。

説明

INSERT文のVALUES句またはUPDATE文のSET句でのみEMPTY_BLOBを使用できます。

例

次の例では、EMPTY_BLOB関数を使用して、NULL以外のBLOB列を長さが0(ゼロ)の値に初期化します。

Command> CREATE TABLE blob_content (
> id NUMBER PRIMARY KEY,
> blob_column BLOB NOT NULL); -- Does not allow a NULL value

Command> INSERT INTO blob_content (id, blob_column)
> VALUES (1, EMPTY_BLOB( ) );
1 row inserted.

EMPTY_CLOB

EMPTY_CLOB関数を使用すると、CLOBまたはNCLOB列を長さが0(ゼロ)で空のCLOBまたはNCLOBに初期化できます。CLOBデータ型とNCLOBデータ型の両方が、EMPTY_CLOB関数で初期化されます。この関数は、LOBをNULL以外の値に初期化するため、NOT NULLと宣言されているCLOBまたはNCLOBの初期化に使用できます。

SQL構文

EMPTY_CLOB ()

パラメータ

EMPTY_CLOBにはパラメータがありません。

説明

INSERT文のVALUES句またはUPDATE文のSET句でのみEMPTY_CLOBを使用できます。

例

次の例では、EMPTY_CLOB関数を使用して、NULL以外のCLOB列を長さが0(ゼロ)の値に初期化します。

Command> CREATE TABLE clob_content (
> id NUMBER PRIMARY KEY,
> clob_column CLOB NOT NULL ); -- This definition does not allow a NULL value

Command> INSERT INTO clob_content (id, clob_column)
> VALUES (1, EMPTY_CLOB( ) );
1 row inserted.

EXTRACT

EXTRACT関数は、指定された日時フィールドの値を、日時または時間隔の値の式からNUMBERデータ型として抽出して返します。この関数は、日時フィールドの値を非常に大きな表で操作する場合に役立つことがあります。

TimesTen型モードを使用している場合、EXTRACT関数の詳細は、Oracle TimesTen In-Memory Databaseリリース6.0.3のドキュメントを参照してください。

SQL構文

EXTRACT (DateTimeField FROM IntervalExpression | DateTimeExpression)

パラメータ

EXTRACTには、次のパラメータがあります。

パラメータ

説明

DateTimeField

IntervalExpressionまたはDateTimeExpressionから抽出されるフィールドです。指定できるフィールドは、YEAR、MONTH、DAY、HOUR、MINUTEまたはSECONDです。

IntervalExpression

時間隔の結果です。

DateTimeExpression

日時の式です。たとえば、TIME、DATE、TIMESTAMPなどです。

説明

- DateTimeFieldとDateTimExpressionまたはIntervalExpressionを組み合せた結果が、あいまいになる場合があります。この場合、TimesTenではUNKNOWNが返されます。

- 抽出するフィールドは、IntervalExpressionまたはDateTimeExpressionのフィールドである必要があります。たとえば、DATE値からは、YEAR、MONTHおよびDAYのみを抽出できます。同様に、TIME、DATEまたはTIMESTAMPデータ型からは、HOUR、MINUTEまたはSECONDのみを抽出できます。

- フィールドは、NUMBER値に抽出されます。

例

次に、秒のフィールドを時間隔の結果sysdate-t1.createtimeから抽出する例を示します。

SELECT EXTRACT(SECOND FROM sysdate-t1.createtime) FROM t1;

次に、秒のフィールドをシステム表dualのsysdateから抽出する例を示します。

Command> SELECT EXTRACT (SECOND FROM sysdate) FROM dual;
< 20 >
1 row found.

FIRST_VALUE

FIRST_VALUE関数は分析関数で、順序付けられた値の集合にある最初の値を戻します。

SQL構文

FIRST_VALUE (Expression [IGNORE NULLS]) OVER (AnalyticClause)

パラメータ

FIRST_VALUEには、次のパラメータがあります。

パラメータ

説明

Expression

サポートされるExpressionsの詳細は、「分析関数」を参照してください。

IGNORE NULLS

FIRST_VALUEが、集合内の最初のNULL以外の値を戻し、集合内のすべての値がNULLの場合はNULLを戻すようにするにはIGNORE NULLSを指定します。句はオプションです。

OVER (AnalyticClause)

構文、セマンティクスおよび制限の詳細は、「分析関数」を参照してください。

説明

- 集合内の最初の値がNULLの場合、IGNORE NULLSを指定していないかぎり、FIRST_VALUEはNULLを戻します。関数が、集合内の最初のNULL以外の値を戻し、集合内のすべての値がNULLの場合はNULLを戻すようにするにはIGNORE NULLSを指定します。

例

FIRST_VALUE関数を使用して、部門90の各従業員について、給与が最も少ない従業員の姓を選択します。

Command> SELECT department_id, last_name, salary, FIRST_VALUE (last_name) OVER
>   (ORDER BY salary ASC ROWS UNBOUNDED PRECEDING) AS lowest_sal
> FROM
>  (SELECT * FROM employees WHERE department_id = 90 ORDER BY employee_id)
> ORDER BY department_id, last_name, salary, lowest_sal;
< 90, De Haan, 17000, Kochhar >
< 90, King, 24000, Kochhar >
< 90, Kochhar, 17000, Kochhar >
3 rows found.

FLOOR

FLOOR関数は、Expression以下の最大の整数を戻します。

SQL構文

FLOOR (Expression)

パラメータ

FLOORには、次のパラメータがあります。

パラメータ

説明

Expression

オペランドまたは列には、任意の数値データ型を指定できます。

説明

- ExpressionがTT_DECIMALまたはNUMBER型の場合、戻されるデータ型は最大の精度およびスケールを持つNUMBERです。それ以外の場合、FLOORでは、Expressionの数値データ型と同じデータ型が戻されます。

- Expressionの値がNULLの場合、NULLが戻されます。Expressionの値が-INF、INFまたはNaNの場合、戻り値はそれぞれ-INF、INFまたはNaNです。

例

employees表の従業員のcommission_pctを合計します。次に、FLOORをコールして、SUMで戻される値以下で最大となる整数を戻します。SUM関数で戻される値は7.8で、FLOOR関数で戻される値は7になります。

Command> SELECT SUM (commission_pct) FROM employees;
< 7.8 >
1 row found.
Command> SELECT FLOOR (SUM (commission_pct)) FROM employees;
< 7 >
1 row found.

GREATEST

GREATEST関数は、1つ以上の式のリストのうち、最大のものを戻します。

SQL構文

GREATEST (Expression [,...])

パラメータ

GREATESTには、次のパラメータがあります。

パラメータ

説明

Expression [,...]

最大の式の値を決定するために評価される1つ以上の式のリスト。オペランドまたは列には、数値、文字または日付を指定できます。リスト内の各式は、同じデータ型ファミリから採用する必要があります。

説明

- リスト内の各式は、同じデータ型ファミリまたは日付サブファミリから採用する必要があります。データ型ファミリには、数値、文字および日付が含まれます。日付ファミリには、4つのサブファミリ(日付ファミリ、TIMEファミリ、TT_DATEファミリおよびTT_TIMESTAMPファミリ)が含まれます。たとえば、式のリストに数値式と文字式を指定することはできません。同様に、式のリストに日付式とTT_TIMESTAMP式を指定することはできません。

- 最初のExpressionが数値の場合、TimesTenにより数値の優先順位が最も高い引数が決定されます。比較の前に、残りの引数は暗黙的にそのデータ型に変換され、そのデータ型が戻されます。

- 最初のExpressionが文字ファミリに属しており、オペランドまたは列がCHARまたはVARCHAR2型の場合、戻されるデータ型はVARCHAR2です。オペランドまたは列がNCHARまたはNVARCHAR2型の場合、戻されるデータ型はNVARCHAR2です。戻されるデータ型の長さは、最も大きい式の長さに等しくなります。あるオペランドまたは列がCHARまたはVARCHAR2型で、別のオペランドまたは列がNCHARまたはNVARCHAR2の場合、戻されるデータ型はNVARCHAR2です。

- TimesTenでは、文字ファミリのデータ型に対して非空白埋め比較セマンティクスが使用されます。

- 最初の式が日付ファミリの場合、戻されるデータ型は、最初の式と同じデータ型です。

- いずれかの式がNULLの場合、結果はNULLになります。

- 最初のExpressionが文字ファミリに属しており、オペランドまたは列がTT_CHARまたはTT_VARCHAR型の場合、戻されるデータ型はTT_VARCHARです。オペランドまたは列がTT_NCHARまたはTT_NVARCHAR型の場合、戻されるデータ型はTT_NVARCHARです。戻されるデータ型の長さは、最も大きい式の長さに等しくなります。

- 最大で256個の式を指定できます。

GREATEST関数を使用して、最大値の文字列を戻します。

Command> SELECT GREATEST ('GREAT', 'GREATER', 'GREATEST') FROM dual;
< GREATEST >
1 row found.

GREATEST関数を使用して、最大値の数値式を戻します。この例の場合、数値の優先順位が最も高いデータ型はBINARY_DOUBLEのため、比較の前に各引数は暗黙的にBINARY_DOUBLEに変換され、BINARY_DOUBLEデータ型が戻されます。

Command> SELECT GREATEST (10, 10.55, 10.1D) FROM dual;
< 10.5500000000000 >
1 row found.

DESCRIBEコマンドを使用して、戻されるデータ型がBINARY_DOUBLEであることを確認します。

Command> DESCRIBE SELECT GREATEST (10, 10.55, 10.1D) FROM dual;

Prepared Statement:
Columns:
EXP                             BINARY_DOUBLE NOT NULL

GREATEST関数を使用して、最大値のDATE式を戻します。DATEおよびTIMESTAMPは、同じ日付ファミリです。

Command> SELECT GREATEST (DATE '2007-09-30',
> TIMESTAMP '2007-09-30:10:00:00') FROM dual;
< 2007-09-30 10:00:00 >
1 row found.

GREATEST関数を使用して、TT_DATE式およびTT_TIMESTAMP式のリスト内の最大値を戻そうと試みます。TT_DATEとTT_TIMESTAMPは異なる日付サブファミリに属しており、同じ式のリスト内では使用できないため、エラーが戻されます。

Command> SELECT GREATEST (TT_DATE '2007-09-30', TT_TIMESTAMP
> '2007-09-30:10:00:00') FROM dual;
2817: Invalid data type TT_TIMESTAMP for argument 2 for function GREATEST
The command failed.

GREATEST関数を使用して、最大値のTT_DATE式を戻します。

Command> SELECT GREATEST (TT_DATE '2007-09-30',
> TT_DATE '2007-09-29', TT_DATE '2007-09-28') FROM dual;
< 2007-09-30 >
1 row found.

GROUP_ID

GROUP_ID関数は、GROUP BY句によるSELECT問合せの結果の重複するグループを識別します。この関数は一意のグループに数値0(ゼロ)を戻し、後続の重複するグループ行は1から始まるより大きな数値を受け取ります。GROUP_ID関数は、問合せ結果から重複グループを除外します。重複する値を生成する可能性がある複雑な問合せを行う場合、HAVING GROUP_ID() = 0条件を指定することによって重複する行を除外できます。

注意:
GROUP BY句の詳細は、「GROUP BY句」を参照してください。HAVING句の詳細は、「SELECT」を参照してください。

構文

GROUP_ID関数は、1つのGROUP BY句を含むSELECT文にのみ適用できます。選択リストおよびSELECT問合せのHAVING句で使用できます。

GROUP_ID()

パラメータ

GROUP_IDにはパラメータがありません。

例

次の例では、GROUP_IDがどのように一意のグループに0(ゼロ)を戻し、重複グループを識別するために0より大きい数値を戻すのかを示します。次の例では、部門番号、マネージャID、およびマネージャ内の給与合計を出力します。結果の出力は、マネージャおよび部門でROLLUP句を使用してグループ化され、超集合結果を示します。

Command> SELECT department_id as DEPT, manager_id AS MGR,
GROUP_ID(), SUM(salary) as SALARY
FROM employees
WHERE manager_id > 146
GROUP BY manager_id, ROLLUP(manager_id, department_id)
ORDER BY manager_id, department_id;

DEPT, MGR, EXP, SALARY
< 80, 147, 0, 46600 >
< <NULL>, 147, 1, 46600 >
< <NULL>, 147, 0, 46600 >
< 80, 148, 0, 51900 >
< <NULL>, 148, 0, 51900 >
< <NULL>, 148, 1, 51900 >
< 80, 149, 0, 43000 >
< <NULL>, 149, 0, 7000 >
< <NULL>, 149, 0, 50000 >
< <NULL>, 149, 1, 50000 >
< 20, 201, 0, 6000 >
< <NULL>, 201, 0, 6000 >
< <NULL>, 201, 1, 6000 >
< 110, 205, 0, 8300 >
< <NULL>, 205, 0, 8300 >
< <NULL>, 205, 1, 8300 >
16 rows found.

GROUPING

GROUPING関数を使用すると、NULLが格納されたNULLなのか小計または総計を示すのかを判断できます。単一の列を引数として使用すると、GROUPINGは、ROLLUPまたはCUBE演算によって生成されたNULL値が出現した場合に1を戻し、小計または総計であることを示します。格納されたNULLなど、その他の値では0(ゼロ)を戻します。

注意:
ROLLUP句およびCUBE句の詳細は、「GROUP BY句」を参照してください。

構文

GROUPING関数は、1つのGROUP BY句を含むSELECT文のみに適用できます。選択リストおよびGROUP BY句を含むSELECT問合せのHAVING句で使用できます。GROUPING関数の構文で示される式は、GROUP BY句に含まれる式のいずれかと一致している必要があります。

次の構文は、GROUPINGを使用し、式の結果が集計として示されているかどうかを識別します。

SELECT ...  [GROUPING(Expression) ... ]  ...
GROUP BY ... { RollupCubeClause | GroupingSetsClause } ...

次の構文は、HAVING句内のGROUPINGを使用し、式の結果が集計として示されているのかどうかを識別します。

SELECT ...
GROUP BY ... { RollupCubeClause | GroupingSetsClause } ...
HAVING GROUPING(Expression) = 1

パラメータ

パラメータ

説明

Expression

有効な式の構文。第3章「式」を参照してください。

RollupCubeClause

GROUP BY句には、1つ以上のROLLUPまたはCUBE句が含まれることがあります。詳細は、「GROUP BY句」を参照してください。

GroupingSetsClause

GROUP BY句には、1つ以上のGROUPING SETS句が含まれることがあります。GROUPING SETS句を使用すると、データベースが戻すデータのグループを明示的に指定できます。詳細は、「GROUPING SETS」を参照してください。

例

次の例では、部門の総計が出現した場合に、GROUPING関数がどのように1を戻すのかを示します。

Command> SELECT department_id AS DEPT,
GROUPING(department_id) AS DEPT_GRP, SUM(salary) AS SALARY
FROM emp_details_view
GROUP BY ROLLUP(department_id)
ORDER BY department_id;
DEPT, DEPT_GRP, SALARY
< 10, 0, 4400 >
< 20, 0, 19000 >
< 30, 0, 24900 >
< 40, 0, 6500 >
< 50, 0, 156400 >
< 60, 0, 28800 >
< 70, 0, 10000 >
< 80, 0, 304500 >
< 90, 0, 58000 >
< 100, 0, 51600 >
< 110, 0, 20300 >
< <NULL>, 1, 684400 >
12 rows found.

次の例では、各列にGROUPING関数を使用し、総計のNULL値を判断できることを示します。

Command> SELECT department_id AS DEPT, job_id AS JOB,
GROUPING(department_id) AS DEPT_GRP, GROUPING(job_id) AS JOB_GRP,
GROUPING_ID(department_id, job_id) AS GRP_ID, SUM(salary) AS SALARY
FROM emp_details_view
GROUP BY CUBE(department_id, job_id)
ORDER BY department_id, job_id, grp_id ASC;

DEPT, JOB, DEPT_GRP, JOB_GRP, GRP_ID, SALARY
< 10, AD_ASST, 0, 0, 0, 4400 >
< 10, <NULL>, 0, 1, 1, 4400 >
< 20, MK_MAN, 0, 0, 0, 13000 >
< 20, MK_REP, 0, 0, 0, 6000 >
< 20, <NULL>, 0, 1, 1, 19000 >
< 30, PU_CLERK, 0, 0, 0, 13900 >
< 30, PU_MAN, 0, 0, 0, 11000 >
< 30, <NULL>, 0, 1, 1, 24900 >
...
< 110, AC_ACCOUNT, 0, 0, 0, 8300 >
< 110, AC_MGR, 0, 0, 0, 12000 >
< 110, <NULL>, 0, 1, 1, 20300 >
< <NULL>, AC_ACCOUNT, 1, 0, 2, 8300 >
< <NULL>, AC_MGR, 1, 0, 2, 12000 >
< <NULL>, AD_ASST, 1, 0, 2, 4400 >
< <NULL>, AD_PRES, 1, 0, 2, 24000 >
< <NULL>, AD_VP, 1, 0, 2, 34000 >
< <NULL>, FI_ACCOUNT, 1, 0, 2, 39600 >
< <NULL>, FI_MGR, 1, 0, 2, 12000 >
< <NULL>, HR_REP, 1, 0, 2, 6500 >
< <NULL>, IT_PROG, 1, 0, 2, 28800 >
< <NULL>, MK_MAN, 1, 0, 2, 13000 >
< <NULL>, MK_REP, 1, 0, 2, 6000 >
< <NULL>, PR_REP, 1, 0, 2, 10000 >
< <NULL>, PU_CLERK, 1, 0, 2, 13900 >
< <NULL>, PU_MAN, 1, 0, 2, 11000 >
< <NULL>, SA_MAN, 1, 0, 2, 61000 >
< <NULL>, SA_REP, 1, 0, 2, 243500 >
< <NULL>, SH_CLERK, 1, 0, 2, 64300 >
< <NULL>, ST_CLERK, 1, 0, 2, 55700 >
< <NULL>, ST_MAN, 1, 0, 2, 36400 >
< <NULL>, <NULL>, 1, 1, 3, 684400 >
50 rows found.

GROUPING_ID

GROUPING_ID関数は、ROLLUPまたはCUBE句による集計の正確なGROUP BYレベルを示す数値を戻します。

注意:
ROLLUPおよびCUBE句の詳細は、「GROUP BY句」を参照してください。

GROUPING_ID関数は、ROLLUPまたはCUBEからグループ列の順序付けリストを入力として取得し、次のステップでグループIDを計算します。

1. GROUPING関数をリストの個々の列に適用します。結果は1および0(ゼロ)の集合で、1はROLLUPまたはCUBEで生成された超集合を示します。

2. 引数リストの列と同じ順序でこれらの1および0(ゼロ)を配置し、ビット・ベクトルを作成します。

3. このビット・ベクトルを2進数から10進数に変換します。これがグループIDとして戻されます。

たとえば、CUBE(department_id, job_id)でグループ化すると、戻り値は表4-1のようになります。

表4-1 CUBE(department_id, job_id)でのGROUPING_IDの例

集計レベル

ビット・ベクトル

GROUPING_ID

部門および職務の通常のグループ行

0 0

0

job_idで集計されたdepartment_idの小計

0 1

1

department_idで集計されたjob_idの小計

1 0

2

総計

1 1

3

GROUPING_ID関数を問合せで使用し、サマリー行のみが表示されるように行をフィルタリングできます。HAVING句でGROUPING_ID関数を使用すると、総計および小計を含む行のみに出力を制限できます。これは、GROUPING_ID関数の比較を追加して、結果がHAVING句で0(ゼロ)よりも大きくなるときに実行できます。

構文

GROUPING_ID関数は、GROUP BY句、GROUPING関数、およびROLLUP句、CUBE句またはGROUPING SETS句のいずれかを含むSELECT文にのみ適用できます。選択リストおよびSELECT問合せのHAVING句で使用できます。

GROUPING_ID(Expression [, Expression ]...)

パラメータ

パラメータ

説明

Expression

有効な式の構文。第3章「式」を参照してください。

例

次の例では、GROUPING_ID関数にHAVING句のフィルタがあり、戻り値は0(ゼロ)以上になります。小計または総計のいずれかを含まない行は除外されます。次の例では、グループID1で識別される部門の小計、グループID2の職務IDの小計、およびグループID3の総計を示します。

Command> SELECT department_id AS DEPT, job_id AS JOB,
GROUPING_ID(department_id, job_id) AS GRP_ID,
SUM(salary) AS SALARY
FROM emp_details_view
GROUP BY CUBE(department_id, job_id)
HAVING GROUPING_ID(department_id, job_id) > 0
ORDER BY department_id, job_id, grp_id ASC;

DEPT, JOB, GRP_ID, SALARY
< 10, <NULL>, 1, 4400 >
< 20, <NULL>, 1, 19000 >
< 30, <NULL>, 1, 24900 >
< 40, <NULL>, 1, 6500 >
< 50, <NULL>, 1, 156400 >
< 60, <NULL>, 1, 28800 >
< 70, <NULL>, 1, 10000 >
< 80, <NULL>, 1, 304500 >
< 90, <NULL>, 1, 58000 >
< 100, <NULL>, 1, 51600 >
< 110, <NULL>, 1, 20300 >
< <NULL>, AC_ACCOUNT, 2, 8300 >
< <NULL>, AC_MGR, 2, 12000 >
< <NULL>, AD_ASST, 2, 4400 >
< <NULL>, AD_PRES, 2, 24000 >
< <NULL>, AD_VP, 2, 34000 >
< <NULL>, FI_ACCOUNT, 2, 39600 >
< <NULL>, FI_MGR, 2, 12000 >
< <NULL>, HR_REP, 2, 6500 >
< <NULL>, IT_PROG, 2, 28800 >
< <NULL>, MK_MAN, 2, 13000 >
< <NULL>, MK_REP, 2, 6000 >
< <NULL>, PR_REP, 2, 10000 >
< <NULL>, PU_CLERK, 2, 13900 >
< <NULL>, PU_MAN, 2, 11000 >
< <NULL>, SA_MAN, 2, 61000 >
< <NULL>, SA_REP, 2, 243500 >
< <NULL>, SH_CLERK, 2, 64300 >
< <NULL>, ST_CLERK, 2, 55700 >
< <NULL>, ST_MAN, 2, 36400 >
< <NULL>, <NULL>, 3, 684400 >
31 rows found.

INSTR、INSTRB、INSTR4

ある文字列が別の文字列内に検出された場合に、その最初の位置を識別します。サブストリングが文字列内で検出されない場合は0(ゼロ)が返されます。返される位置は、常にSourceExprの開始と関連します。INSTRは、NUMBER型を返します。

TimesTen型モードを使用している場合、INSTR関数の詳細は、Oracle TimesTen In-Memory Databaseリリース6.0.3のドキュメントを参照してください。

SQL構文

{INSTR | INSTRB | INSTR4} ( SourceExpr, SearchExpr [,m[,n]])

パラメータ

INSTRには、次のパラメータがあります。

パラメータ

説明

SourceExpr

SearchExprの位置を検出するために検索される文字列です。値は、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBデータ型を含むサポートされた文字データ型になります。TimesTenデータ型およびOracle Databaseデータ型の両方がサポートされます。

SearchExpr

文字列SourceExprで検出されるサブストリングです。SearchExprがSourceExprにない場合は、0(ゼロ)が返されます。文字列のいずれかの長さが0(ゼロ)の場合は、NULLが返されます。

m

検索を開始する位置です(オプション)。mが0(ゼロ)に指定された場合、結果は0(ゼロ)です。mが正の値の場合、検索はCharExpr2+mから開始されます。mが負の値の場合、検索はCharExpr2の終わりからm文字目で開始されます。

n

nには正の値を指定する必要があります。検索結果では、CharExpr1のn番目の出現位置が返されます。

説明

INSTRは、キャラクタ・セットで定義された文字を使用して文字列を計算します。INSTRBには、文字でなくバイトを使用します。INSTR4には、UCS4コード・ポイントを使用します。

例

次の例では、INSTRを使用して、文字列'Washington'で使用されるサブストリング'ing'の位置を判別します。

Command> SELECT INSTR ('Washington', 'ing') FROM dual;
< 5 >
1 row found.

次の例では、INSTRを使用して、COUNT関数への入力として従業員の数に市外局番650を指定します。

Command> SELECT COUNT(INSTR(phone_number, '650')) FROM employees;
< 107 >
1 row found.

LAST_VALUE

LAST_VALUE関数は分析関数で、順序付けられた値の集合にある最後の値を戻します。

SQL構文

LAST_VALUE (Expression [IGNORE NULLS]) OVER (AnalyticClause)

パラメータ

LAST_VALUEには、次のパラメータがあります。

パラメータ

説明

Expression

サポートされるExpressionsの詳細は、「分析関数」を参照してください。

IGNORE NULLS

LAST_VALUEが、集合内の最後のNULL以外の値を戻し、集合内のすべての値がNULLの場合はNULLを戻すようにするにはIGNORE NULLSを指定します。句はオプションです。

OVER (AnalyticClause)

構文、セマンティクスおよび制限の詳細は、「分析関数」を参照してください。

説明

- 集合内の最後の値がNULLの場合、IGNORE NULLSを指定していないかぎり、LAST_VALUEはNULLを戻します。関数が、集合内の最後のNULL以外の値を戻し、集合内のすべての値がNULLの場合はNULLを戻すようにするには、IGNORE NULLSを指定します。

例

LAST_VALUE関数を使用して、給与が最も高い従業員の雇用開始日を各行に戻します。

Command> SELECT last_name, salary, hire_date,
>  LAST_VALUE (hire_date) OVER (ORDER BY salary
>    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS lv
> FROM
> (SELECT * FROM employees WHERE department_id = 90 ORDER BY hire_date)
> ORDER BY last_name, salary, hire_date, lv;
< De Haan, 17000, 1993-01-13 00:00:00, 1987-06-17 00:00:00 >
< King, 24000, 1987-06-17 00:00:00, 1987-06-17 00:00:00 >
< Kochhar, 17000, 1989-09-21 00:00:00, 1987-06-17 00:00:00 >
3 rows found.

LEAST

LEAST関数は、1つ以上の式のリストのうち、最小のものを戻します。

SQL構文

LEAST (Expression [,...])

パラメータ

LEASTには、次のパラメータがあります。

パラメータ

説明

Expression [,...]

最小の式の値を決定するために評価される1つ以上の式のリスト。オペランドまたは列には、数値、文字または日付を指定できます。リスト内の各式は、同じデータ型ファミリから採用する必要があります。

説明

- リスト内の各式は、同じデータ型ファミリまたは日付サブファミリから採用する必要があります。データ型ファミリには、数値、文字および日付が含まれます。日付ファミリには、4つのサブファミリ(日付ファミリ、TIMEファミリ、TT_DATEファミリおよびTT_TIMESTAMPファミリ)が含まれます。たとえば、式のリストに数値式と文字式を指定することはできません。同様に、式のリストに日付式とTT_TIMESTAMP式を指定することはできません。

- 最初のExpressionが数値の場合、TimesTenにより数値の優先順位が最も高い引数が決定されます。比較の前に、残りの引数は暗黙的にそのデータ型に変換され、そのデータ型が戻されます。

- 最初のExpressionが文字ファミリに属しており、オペランドまたは列がCHARまたはVARCHAR2型の場合、戻されるデータ型はVARCHAR2です。オペランドまたは列がNCHARまたはNVARCHAR2型の場合、戻されるデータ型はNVARCHAR2です。戻されるデータ型の長さは、最も大きい式の長さに等しくなります。あるオペランドまたは列がCHARまたはVARCHAR2型で、別のオペランドまたは列がNCHARまたはNVARCHAR2の場合、戻されるデータ型はNVARCHAR2です。

- TimesTenでは、文字ファミリのデータ型に対して非空白埋め比較セマンティクスが使用されます。

- 最初の式が日付ファミリの場合、戻されるデータ型は、最初の式と同じデータ型です。

- いずれかの式がNULLの場合、結果はNULLになります。

- 最初のExpressionが文字ファミリに属しており、オペランドまたは列がTT_CHARまたはTT_VARCHAR型の場合、戻されるデータ型はTT_VARCHARです。オペランドまたは列がTT_NCHARまたはTT_NVARCHAR型の場合、戻されるデータ型はTT_NVARCHARです。戻されるデータ型の長さは、最も大きい式の長さに等しくなります。

- 最大で256個の式を指定できます。

LEAST関数を使用して、最小値の文字列を戻します。

Command> SELECT LEAST ('SMALL','SMALLER','SMALLEST') FROM dual;
< SMALL >
1 row found.

LEAST関数を使用して、最小値の数値式を戻します。この例の場合、数値の優先順位が最も高いデータ型はNUMBERのため、比較の前に各引数は暗黙的にNUMBERに変換され、NUMBERデータ型が戻されます。最初に表leastexを記述し、列col1およびcol2に定義されているデータ型を確認します。次に、SELECT * FROM leastexを実行してデータを確認します。最後にLEAST関数を呼び出します。

Command> DESCRIBE leastex;

Table SAMPLEUSER.LEASTEX:
Columns:
COL1                            NUMBER (2,1)
COL2                            TT_BIGINT

1 table found.
(primary key columns are indicated with *)
Command> SELECT * FROM leastex;
< 1.1, 1 >
1 row found.
Command> SELECT LEAST (Col2,Col1) from leastex;
< 1 >
1 row found.

DESCRIBEコマンドを使用して、戻されるデータ型がNUMBERであることを確認します。

Command> DESCRIBE SELECT LEAST (Col2,Col1) FROM leastex;

Prepared Statement:
Columns:
EXP                             NUMBER

LEAST関数を使用して、最小値のDATE式を戻します。DATEおよびTIMESTAMPは、同じ日付ファミリです。

Command> SELECT LEAST (DATE '2007-09-17',
> TIMESTAMP '2007-09-17:10:00:00') FROM dual;
< 2007-09-17 00:00:00 >
1 row found.

LEAST関数を使用して、TT_DATE式およびTT_TIMESTAMP式のリスト内の最小値を戻そうと試みます。TT_DATEとTT_TIMESTAMPは異なる日付サブファミリに属しており、同じ式のリスト内では使用できないため、エラーが戻されます。

Command> SELECT LEAST (TT_DATE '2007-09-17',
> TT_TIMESTAMP '2007-09-17:01:00:00') FROM dual;
2817: Invalid data type TT_TIMESTAMP for argument 2 for function LEAST
The command failed.

LEAST関数を使用して、最小値のTIME式を戻します。

Command> SELECT LEAST (TIME '13:59:59', TIME '13:59:58',
> TIME '14:00:00') FROM dual;
< 13:59:58 >
1 row found.

LENGTH、LENGTHB、LENGTH4

式内の指定した文字列の長さを返します。LENGTHはNUMBER型を返します。

TimesTen型モードを使用している場合、LENGTH関数の詳細は、Oracle TimesTen In-Memory Databaseリリース6.0.3のドキュメントを参照してください。

SQL構文

{LENGTH|LENGTHB|LENGTH4} (CharExpr)

パラメータ

LENGTHには、次のパラメータがあります。

パラメータ

説明

CharExpr

長さを返す対象の文字列です。サポートされるCharExprのデータ型は、CHAR、VARCHAR2、NCHARまたはNVARCHAR2です。LENGTHおよびLENGTHBは、CLOB、NCLOBおよびBLOBデータ型もサポートします。

説明

LENGTH関数は、CharExprの長さを戻します。LENGTHは、キャラクタ・セットで定義された文字を使用して長さを計算します。LENGTHBは、文字数ではなくバイト数を使用します。LENGTH4には、UCS4コード・ポイントを使用します。

例

文字列'William'の長さを判別します。

Command> SELECT LENGTH('William') FROM dual;
< 7 >
1 row found.

次の例では、NCLOBデータの長さを判別します。

Command> SELECT nclob_column FROM nclob_content;
< Demonstration of the NCLOB data type >
1 row found.

Command> SELECT LENGTH(nclob_column) FROM nclob_content;
< 36 >
1 row found.

LOWERおよびUPPER

LOWER関数は、CHAR、NCHAR、VARCHAR2、NVARCHAR2、CLOBまたはNCLOB型の式を小文字に変換します。UPPER関数は、CHAR、NCHAR、VARCHAR2、NVARCHAR2、CLOBまたはNCLOB型の式を大文字に変換します。CHAR型およびVARCHAR2型では、文字セマンティクスがサポートされています。結果のデータ型は式のデータ型と同じです。

SQL構文

{UPPER | LOWER} (Expression1)

パラメータ

LOWERおよびUPPERには、次のパラメータがあります。

パラメータ

説明

Expression1

小文字(LOWERを使用した場合)または大文字(UPPERを使用した場合)に変換される式。

説明

LOWER(?)およびUPPER(?)はサポートされませんが、CAST演算子と組み合せることができます。次に例を示します。

LOWER(CAST(? AS CHAR(30)))

Command> SELECT LOWER (last_name) FROM employees WHERE employee_id = 100;
< king >
1 row found.

LPAD

LPAD関数は、左側がExpression2の連続文字で埋め込まれたn文字の長さのExpression1を戻します。この関数は、問合せの出力を書式設定する場合に役立ちます。

SQL構文

LPAD (Expression1, n [,Expression2])

パラメータ

LPADには、次のパラメータがあります。

パラメータ

説明

Expression1

左側を文字で埋め込むCHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB、NCLOBオペランドまたは列。Expression1がnより長い場合、LPADでは、nに一致するExpression1の一部分が戻されます。

n

LPAD関数で戻される文字の長さ。NUMBER型の整数、またはNUMBER型の整数に暗黙的に変換可能な値である必要があります。

Expression2

Expression1の左側を埋め込む連続文字。Expression2を指定しない場合、デフォルトで単一の空白文字に設定されます。オペランドまたは列には、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOB型を指定できます。

説明

- Expression1がCHARまたはVARCHAR2型の場合、戻されるデータ型はVARCHAR2です。Expression1がNCHARまたはNVARCHAR2型の場合、戻されるデータ型はNVARCHAR2です。Expression1がLOBの場合、戻されるデータ型は指定されたLOBデータ型と同じになります。

- nが定数の場合、戻されるデータ型の長さはnに等しくなります。それ以外の場合、結果の最大長である8300が戻されます。

- Expression1とExpression2には、TT_CHAR、TT_VARCHAR、TT_NCHARおよびTT_NVARCHARを指定できます。Expression1がTT_CHARまたはTT_VARCHAR型の場合、戻されるデータ型はTT_VARCHARです。Expression1がTT_NCHARまたはTT_NVARCHAR型の場合、戻されるデータ型はTT_NVARCHARです。

- CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBデータ型の場合:

- Expression1またはExpression2のいずれかがNULLの場合、結果はNULLです。nが0(ゼロ)以下の場合も、結果はNULLです。

- TT_CHAR、TT_VARCHAR、TT_NCHARおよびTT_NVARCHAR型の場合:

- Expression1またはExpression2のいずれかがNULLではなく、nが0(ゼロ)以下の場合、結果は空の文字列です。

例

次の例では、20文字になるように左側をピリオドで埋め込んだ、最初の5人の従業員の名前を出力します。

Command> SELECT FIRST 5 LPAD (last_name, 20, '.')
> FROM employees
> ORDER BY last_name;
< ................Abel >
< ................Ande >
< ............Atkinson >
< ..............Austin >
< ................Baer >
5 rows found.

LPAD関数を使用して、文字列'LPAD Function'の左側を文字列'DEMO-ONLY'と2個の空白で埋め込みます。文字列DEMO-ONLYは、関数によって文字出力合計で定義された回数(3回)繰り返されます。

Command> SELECT LPAD ('LPAD Function', 46, 'DEMO-ONLY  ') FROM dual;
< DEMO-ONLY  DEMO-ONLY  DEMO-ONLY  LPAD Function >
1 row found.

長さ-1を使用してLPAD関数をコールします。NULLが戻されます。

Command> SELECT LPAD ('abc', -1, 'a')  FROM dual;
< <NULL> >
1 row found.

LTRIM

LTRIM関数は、Expression1の左端から、Expression2に含まれるすべての文字を削除します。TimesTenでは、Expression1の最初の文字からスキャンが開始され、Expression2に存在しない文字になるまでExpression2に指定した文字がすべて削除された後、結果が戻されます。

SQL構文

LTRIM (Expression1 [,Expression2])

パラメータ

LTRIMには、次のパラメータがあります。

パラメータ

説明

Expression1

切捨ての対象とするCHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB、NCLOBオペランドまたは列。Expression1が文字リテラルの場合、一重引用符でその文字を囲みます。

Expression2

Expression1の切捨てに使用するオプションの式。Expression2が文字リテラルの場合、一重引用符でその文字を囲みます。Expression2を指定しない場合、デフォルトで単一の空白文字に設定されます。オペランドまたは列には、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOB型を指定できます。

説明

- Expression1がCHARまたはVARCHAR2型の場合、戻されるデータ型はVARCHAR2です。Expression1がNCHARまたはNVARCHAR2型の場合、戻されるデータ型はNVARCHAR2です。Expression1がCLOBまたはNCLOBの場合、戻されるデータ型は指定されたLOBデータ型と同じになります。戻されるデータ型の長さは、Expression1のデータ型の長さに等しくなります。

- Expression1がCHAR長セマンティクスで定義されたデータ型の場合、戻される長さはCHAR長セマンティクスで表現されます。

- Expression1またはExpression2のいずれかがNULLの場合、結果はNULLです。

- Expression1とExpression2には、TT_CHAR、TT_VARCHAR、TT_NCHARおよびTT_NVARCHARを指定できます。Expression1がTT_CHARまたはTT_VARCHAR型の場合、戻されるデータ型はTT_VARCHARです。Expression1がTT_NCHARまたはTT_NVARCHAR型の場合、戻されるデータ型はTT_NVARCHARです。

- Expression1がCHARまたはVARCHAR2型で、Expression2がNCHARまたはNVARCHAR2型の場合、Expression2はLTRIMの実行前にCHARまたはVARCHAR2に変換されます。Expression2の変換は失われる可能性があります。Expression2の切捨て文字がデータベースのキャラクタ・セットに含まれない場合、問合せにより予期しない結果が発生する可能性があります。

- CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOB型の場合:

- Expression1のすべての文字がLTRIM関数により削除された場合、結果はNULLになります。

- TT_CHAR、TT_VARCHAR、TT_NCHARおよびTT_NVARCHAR型の場合:

- Expression1のすべての文字がLTRIM関数により削除された場合、結果は空の文字列になります。

例

LTRIM関数をコールして、左端の'x'および'y'を文字列から削除します。LTRIMは、'xy'というパターンではなく、個々に出現する'x'と'y'を削除します。

Command> SELECT LTRIM ('xxxyyyxyxyLTRIM Example', 'xy') FROM dual;
< LTRIM Example >
1 row found.

LTRIM関数をコールして、SYSDATEからYYYY-MM-DDを削除します。TO_CHARをコールして、SYSDATEをVARCHAR2に変換します。

Command> SELECT LTRIM (TO_CHAR(SYSDATE), '2007-08-21') FROM dual;
<  22:54:39 >
1 row found.

LTRIMをコールして、Expression1からすべての文字を削除します。最初の例では、データ型がCHARであるため、NULLが戻されます。2番目の例では、データ型がTT_CHARであるため、空の文字列が戻されます。

Command> CREATE TABLE ltrimtest (col1 CHAR (4), col2 TT_CHAR (4));
Command> INSERT INTO ltrimtest VALUES ('ABBB','ABBB');
1 row inserted.
Command> SELECT LTRIM (col1, 'AB') FROM ltrimtest;
< <NULL> >
1 row found.
Command> SELECT LTRIM (col2, 'AB') FROM ltrimtest;
<  >
1 row found.

MAX

引数の値の最大値を検索します(英数字型のASCII比較)。NULL値は無視されます。MAXは、数値、文字およびBINARYデータ型に適用できます。MAXは集計関数で、集計分析関数にもなります。集計関数の詳細は、「集計関数」を参照してください。分析関数の詳細は、「分析関数」を参照してください。

SQL構文

MAX ([ALL | DISTINCT]{Expression | ROWID}) [OVER ([AnalyticClause])]

パラメータ

MAXには、次のパラメータがあります。

パラメータ

説明

Expression

任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。

ALL

集計関数の引数に重複する行を含めます。ALLまたはDISTINCTのいずれも指定しない場合、ALLとみなされます。

DISTINCT

集計関数の引数から、重複する列の値を削除します。

ROWID

TimesTenでは、表に保存される各行にROWIDと呼ばれる一意のIDが割り当てられます。ROWID値はROWID擬似列から取得されます。詳細は、「ROWID」を参照してください。

OVER ([AnalyticClause])

指定すると、集計分析関数を示します。分析関数の詳細は、「分析関数」を参照してください。

説明

- GROUP BYが使用されていない空の表でMAXを計算すると、MAXはNULLを戻します。

- 空のグループまたはグループ化された空の表(GROUP BYを使用)でMAXを計算すると、MAXは何も戻しません。

- 結果のデータ型はソースと同じになります。

- 問合せでAnalyticClauseを使用しない場合、MAXは集計関数として機能します。

例

最高給与を検索します。

Command> SELECT MAX(salary) "Max Salary" FROM employees;

MAX SALARY
< 24000 >
1 row found.

MIN

引数の値の最小値を検索します(英数字型のASCII比較)。NULL値は無視されます。MINは、数値、文字およびBINARYデータ型に適用できます。集計関数の詳細は、「集計関数」を参照してください。MINは、集計分析関数にもなります。分析関数の詳細は、「分析関数」を参照してください。

SQL構文

MIN ([ALL | DISTINCT]{Expression|ROWID}) [OVER (AnalyticClause)]

パラメータ

MINには、次のパラメータがあります。

パラメータ

説明

Expression

任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。

ALL

集計関数の引数に重複する行を含めます。ALLまたはDISTINCTのいずれも指定しない場合、ALLとみなされます。

DISTINCT

集計関数の引数から、重複する列の値を削除します。

ROWID

TimesTenでは、表に保存される各行にROWIDと呼ばれる一意のIDが割り当てられます。ROWID値はROWID擬似列から取得されます。詳細は、「ROWID」を参照してください。

OVER (AnalyticClause)

指定すると、集計分析関数を示します。分析関数の詳細は、「分析関数」を参照してください。

説明

- GROUP BYが使用されていない空の表でMIN関数を計算すると、MINはNULLを戻します。

- 空のグループまたはグループ化された空の表(GROUP BYを使用)でMIN関数を計算すると、MINは何も戻しません。

- 結果のデータ型はソースと同じになります。

- 問合せでAnalyticClauseを使用しない場合、MINは集計関数として機能します。

例

最低給与を示します。

Command> SELECT MIN(salary) "Min Salary" FROM employees;

MIN SALARY
< 2100 >

最初の雇用日を示します。

Command> SELECT MIN(hire_date) "Earliest Hire Date" FROM employees;

EARLIEST HIRE DATE
< 1987-06-17 00:00:00 >
1 row found.

MOD

あるINTEGER式を2番目のINTEGER式で除算した余りを返します。

SQL構文

MOD(Expression1, Expression2)

パラメータ

MODには、次のパラメータがあります。

パラメータ

説明

Expression1

INTEGER式。

Expression2

INTEGER式。

説明

- MODはExpression1をExpression2で除算した余りを返します。

- Expression2が0の場合、MODはExpression1を返します。

- Expression1かExpression2のいずれかがNULLであれば、MODはNULLを返します。

- MODはバイナリ算術演算として扱われるため、戻り型は第1章「データ型」に説明する規則に従って決まります。

- MOD関数の動作は、2つのオペランドのいずれかが負の場合には古典数学のモジュール関数とは異なる動作をします。次の表に、その違いを示します。

M

N

古典数学のモジュール関数

MOD(M,N)

11

3

2

2

11

-3

-1

2

-11

3

1

-2

-11

-3

-2

-2

次の例では、式mの値が式nの値で割り切れるかどうかをテストします。

SELECT m, n FROM test WHERE MOD(m, n) = 0;

MONTHS_BETWEEN

MONTHS_BETWEEN関数は、日付date1とdate2の間の月数を戻します。

SQL構文

MONTHS_BETWEEN(date1, date2)

パラメータ

MONTHS_BETWEENには、次のパラメータがあります。

パラメータ

説明

date1

日時値、または日時値に変換可能な任意の値。

date2

日時値、または日時値に変換可能な任意の値。

説明

入力パラメータは、TIMEまたはTT_TIMEデータ型を除き、サポートされているすべての日時データ型の組合せになります。サポートされている日時データ型は、DATE、TIMESTAMP、TT_DATE、TT_TIMESTAMP、ORA_DATEおよびORA_TIMESTAMPです。すべての日時データ型の詳細は、第1章「データ型」を参照してください。

戻りデータ型は、NUMBERです。

MONTHS_BETWEENは、日付date1とdate2の間の月数を戻します。

- date1がdate2より後の日付の場合、結果は正の値になります。

- date1がdate2より前の日付の場合、結果は負の値になります。

- date1およびdate2が、両方とも月の同じ日または月の最終日の場合、戻される結果は整数になります。それ以外の場合、戻される結果は、date1とdate2のパラメータの時刻部分の差を考慮した1か月31日を基準とする小数になります。

例

次の例では、2つの日付間の月数を計算します。

Command> SELECT MONTHS_BETWEEN(DATE '1995-02-02', DATE '1995-01-01')
AS Months FROM dual;

MONTHS
< 1.03225806451613 >
1 row found.

Command> SELECT MONTHS_BETWEEN(DATE '2010-02-02', DATE '2010-10-01') "Months"
FROM dual;

MONTHS
< -7.96774193548387 >
1 row found.

次のコマンドでは、CASTを使用し、CHAR文字列を明示的にタイムスタンプに変換します。最初の結果は整数に丸められます。

Command> SELECT ROUND ( MONTHS_BETWEEN (CAST ('2010-04-15 14:13:52'
AS TIMESTAMP), CAST ('2000-12-31 00:00:00' AS TIMESTAMP))),
MONTHS_BETWEEN (CAST ('2010-04-15 14:13:52' AS TIMESTAMP),
CAST ('2000-12-31 00:00:00' AS TIMESTAMP))
FROM dual;

< 112, 111.502998805257 >
1 row found.

NCHR

NCHR関数は、指定されたUnicode値を持つ文字を戻します。

SQL構文

NCHR(n)

パラメータ

NCHRには、次のパラメータがあります。

パラメータ

説明

n

指定されたUnicode値。このUnicode値を持つ文字が戻されます。結果のデータ型はNVARCHAR2型になります。

例

次の例では、NCHAR文字187が戻されます。

Command> SELECT NCHR(187) FROM dual;
< > >
1 row found.

NLS_CHARSET_ID

NLS_CHARSET_IDは、キャラクタ・セット名に対応するキャラクタ・セットID番号を戻します。

注意:
サポートされているキャラクタ・セットの完全なリストは、『Oracle TimesTen In-Memory Databaseリファレンス』のサポートされているキャラクタ・セットに関する説明を参照してください。

SQL構文

NLS_CHARSET_ID(String)

パラメータ

NLS_CHARSET_IDには、次のパラメータがあります。

パラメータ

説明

String

入力文字列の引数は、キャラクタ・セットを表す実行時のVARCHAR2値です。この文字列では、大文字と小文字は区別されません。
入力文字列がTimesTenの有効なキャラクタ・セットに対応している場合は関連するキャラクタ・セットID番号が戻され、対応していない場合はNULLが戻されます。

CHAR_CSを指定すると、データベース・キャラクタ・セットID番号が戻されます。NCHAR_CSを指定すると、各国語キャラクタ・セットID番号が戻されます。他の入力文字列値は、AL32UTF8などのOracle Database NLSのキャラクタ・セット名として解釈されます。

例

次の例では、キャラクタ・セットUS7ASCIIのキャラクタ・セットID番号を戻します。

Command> select nls_charset_id('US7ASCII') from dual;
< 1 >
1 row found.

NLS_CHARSET_IDの結果をNLS_CHARSET_NAMEへの入力として使用する、次の項「NLS_CHARSET_NAME」の例も参照してください。

NLS_CHARSET_NAME

NLS_CHARSET_NAMEは、キャラクタ・セットID番号に対応するキャラクタ・セット名を戻します。

注意:
サポートされているキャラクタ・セットの完全なリストは、『Oracle TimesTen In-Memory Databaseリファレンス』のサポートされているキャラクタ・セットに関する説明を参照してください。

SQL構文

NLS_CHARSET_NAME(Number)

パラメータ

NLS_CHARSET_NAMEには、次のパラメータがあります。

パラメータ

説明

Number

キャラクタ・セットIDを表す番号。番号がTimesTenの有効なキャラクタ・セットIDに対応していない場合、NULLが戻されます。

説明

キャラクタ・セット名は、データベース・キャラクタ・セットのVARCHAR2値として戻されます。

例

次の例では、キャラクタ・セットID番号1に対応するデータベース・キャラクタ・セットを戻します。

Command> select nls_charset_name(1) from dual;
< US7ASCII >
1 row found.

次の例では、結果がNLS_CHARSET_NAME関数に指定されるNLS_CHARSET_ID関数内のキャラクタ・セット名としてCHAR_CSを指定することで、データベース・キャラクタ・セットの名前を判別して、同じ結果を取得します。

SELECT NLS_CHARSET_NAME(NLS_CHARSET_ID('CHAR_CS')) FROM dual;
< US7ASCII >
1 row found.

関連情報は、前の項「NLS_CHARSET_ID」を参照してください。

NLSSORT

指定された文字列に対してソート・キー値を戻します。

SQL構文

NLSSORT (String [,'NLS_SORT = SortName'])

パラメータ

NLSSORTには、次のパラメータがあります。

パラメータ

説明

String

Stringを指定すると、NLSSORTによって、Stringをソートするために使用されるソート・キー値が戻されます。Stringにサポートされているデータ型は、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBおよびNCLOBです。

['NLS_SORT = SortName']

SortNameは、言語ソート順序またはBINARYのいずれかです。このパラメータを省略すると、現在のセッションのデフォルトのソート順序が使用されます。アクセントを区別しないソートの場合は接尾辞-aiを、大/小文字を区別しないソートの場合は-ciをSortNameの末尾に追加します。指定可能な言語のSortName値の詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のサポートされている言語ソートに関する説明を参照してください。

説明

- 戻されるソート・キー値のデータ型はVARBINARY型になります。

- 言語比較用に言語索引を作成できます。

例

次の例は、文字列のバイナリ値ではなく、言語ソート順序に基づいたソートおよび比較の処理を示しています。また、この例は、ALTER SESSION... SET NLS_SORT文を使用することによって同じ結果が得られることも示しています。

Command> CREATE TABLE nsortdemo (name VARCHAR2 (15));
Command> INSERT INTO nsortdemo VALUES ('Gaardiner');
1 row inserted.
Command> INSERT INTO nsortdemo VALUES ('Gaberd');
1 row inserted.
Command> INSERT INTO nsortdemo VALUES ('Gaasten');
1 row inserted.
Command> # Perform Sort
Command> SELECT * FROM nsortdemo ORDER BY name;
< Gaardiner >
< Gaasten >
< Gaberd >
3 rows found.
Command> #Use function to perform sort
Command> SELECT * FROM nsortdemo ORDER BY NLSSORT (name, 'NLS_SORT = XDanish');
< Gaberd >
< Gaardiner >
< Gaasten >
3 rows found.
Command># comparison operation
Command> SELECT * FROM nsortdemo where Name > 'Gaberd';
< Gardiner >
1 row found.
Command> #Use function in comparison operation
Command> SELECT * FROM nsortdemo WHERE NLSSORT (name, 'NLS_SORT = XDanish') >
> NLSSORT ('Gaberd', 'NLS_SORT = XDanish');
< Gaardiner >
< Gaasten >
2 rows found.
Command> #Use ALTER SESSION to obtain the same results
Command> ALTER SESSION SET NLS_SORT = 'XDanish';
Session altered.
Command> SELECT * FROM nsortdemo ORDER BY name;
< Gaberd >
< Gaardiner >
< Gaasten >
3 rows found.
Command> SELECT * FROM nsortdemo WHERE name > 'Gaberd';
< Gaardiner >
< Gaasten >
2 rows found.

次の例では、言語索引を作成します。

Command> CREATE INDEX danishindex
> ON nsortdemo (NLSSORT (name, 'NLS_SORT =XDanish'));
Command> INDEXES N%;
Indexes on table USER1.NSORTDEMO:
DANISHINDEX: non-unique range index on columns:
NLSSORT(NAME,'NLS_SORT = XDanish')
1 index found.
1 index found on 1 table.

NULLIF

NULLIFは、2つの式を比較します。値が同じ場合、NULLIFはNULLを戻し、異なる場合は最初の式を戻します。

SQL構文

NULLIF(Expression1, Expression2)

パラメータ

NULLIFには、次のパラメータがあります。

パラメータ

説明

Expression1

Expression2と等しいかどうかを判断するためにテストされる式。Expression1には、リテラルNULLを指定できません。

Expression2

Expression1と等しいかどうかを判断するためにテストされる式。

説明

- 両方のパラメータが数値データ型の場合、Timestenは、数値の優先順位が高い方の引数を判断し、残りの引数をこのデータ型に暗黙的に変換して、このデータ型を戻します。パラメータが数値データ型ではない場合、それらのデータ型ファミリは同じである必要があります。

- LOBデータ型は、NULLIFでサポートされません。TIMEデータ型は、両方の列がTIMEデータ型の場合のみサポートされます。

- NULLIFファンクションは、次のCASE式と論理的に同じです。

CASE WHEN Expression1 = Expression2 THEN NULL ELSE Expression1 END

注意:
詳細は、「CASE式」を参照してください。

例

次の例では、入社時から職務が変わった従業員を選択し、job_history表のjob_idとemployees表の現在のjob_idが異なる場合は職務が変わったことがわかります。NULLIFを新旧のjob_idエントリに適用すると、エントリが同じ場合はNULLが戻され、異なる場合は職種を変更した従業員が示されます。

Command> SELECT e.last_name, NULLIF(e.job_id, j.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";

< De Haan, AD_VP >
< Hartstein, MK_MAN >
< Kaufling, ST_MAN >
< Kochhar, AD_VP >
< Kochhar, AD_VP >
< Raphaely, PU_MAN >
< Taylor, SA_REP >
< Taylor, <NULL> >
< Whalen, AD_ASST >
< Whalen, <NULL> >
10 rows found.

NUMTODSINTERVAL

数または式をINTERVAL DAY TO SECOND型に変換します。

SQL構文

NUMTODSINTERVAL (Expression1, IntervalUnit)

パラメータ

NUMTODSINTERVALには、次のパラメータがあります。

パラメータ

説明

Expression1

この引数には、任意のNUMBER値または暗黙的にNUMBER値に変換できる式のいずれかを指定できます。

IntervalUnit

'DAY'、'HOUR'、'MINUTE'または'SECOND'のいずれかの文字列定数です。

例

SYSDATEとともにNUMTODSINTERVALを使用する例です。

Command> SELECT SYSDATE + NUMTODSINTERVAL(20,'SECOND') FROM dual;
< 2007-01-28 09:11:06 >

NUMTOYMINTERVAL

数または式をINTERVAL YEAR TO MONTH型に変換します。

SQL構文

NUMTOYMINTERVAL (Expression1, 'IntervalUnit')

パラメータ

NUMTOYMINTERVALには、次のパラメータがあります。

パラメータ

説明

Expression1

この引数には、任意のNUMBER値または暗黙的にNUMBER値に変換できる式のいずれかを指定できます。

IntervalUnit

'YEAR'または'MONTH'のいずれかの文字列定数です。

例

NUMTOYMINTERVALを使用する例です。

Command> SELECT SYSDATE + NUMTOYMINTERVAL(1,'MONTH') FROM dual;
< 2007-02-28 09:23:28 >
1 row found.

NVL

NVL関数は、NULL値を2番目の値に置き換えます。

SQL構文

NVL(Expression1, Expression2)

パラメータ

NVLには、次のパラメータがあります。

パラメータ

説明

Expression1

値がNULLであるかをテストする式で、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB、NCLOBまたはBLOB式を指定できます。

Expression2

Expression1の値がNULLの場合に使用されるかわりの値で、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB、NCLOBまたはBLOB式を指定できます。

説明

- Expression1とExpression2のデータ型には互換性がある必要があります。データ型が異なる場合、可能であればデータ型を暗黙的に変換します。暗黙的に変換できない場合、エラーが戻されます。
次に、データ型を暗黙的に変換する方法について説明します。

- Expression1が文字データの場合、Expression2をExpression1と同じデータ型に変換し、Expression1のキャラクタ・セットのVARCHAR2で結果を戻します。

- Expression1が数値の場合、TimesTenでは数値の優先順位が最も高い式が判断され、もう一方の引数がそのデータ型に暗黙的に変換されて、そのデータ型が戻されます。

- Expression1がNULLの場合、NVL関数はExpression2を返します。Expression1がNOT NULLの場合、NVL関数はExpression1を返します。

- NVL関数は、SELECT、UPDATE、DELETE文のWHERE句またはHAVING句、およびSELECT文のSELECTリストにおいて使用できます。

例

この例では、姓がBで始まる従業員に対して、commission_pctのNULL値を確認し、それらの値を'Not Applicable'に置き換えます。

Command> SELECT last_name, NVL(TO_CHAR(commission_pct), 'Not Applicable')
> FROM employees
> WHERE last_name LIKE 'B%'
> ORDER BY last_name;

< Baer, Not Applicable >
< Baida, Not Applicable >
< Banda, .1 >
< Bates, .15 >
< Bell, Not Applicable >
< Bernstein, .25 >
< Bissot, Not Applicable >
< Bloom, .2 >
< Bull, Not Applicable >
9 rows found.

POWER

POWER関数は、BaseのExponent乗を戻します。BaseとExponentには任意の数値を指定できますが、Baseが負数の場合、Exponentは整数である必要があります。

SQL構文

POWER (Base, Exponent)

パラメータ

POWERには、次のパラメータがあります。

パラメータ

説明

Base

オペランドまたは列には、任意の数値型を指定できます。POWERにより、この値のExponent乗が戻されます。

Exponent

オペランドまたは列には、任意の数値型を指定できます。Baseが負数の場合、Exponentは整数である必要があります。

説明

BaseまたはExponentのいずれかがBINARY_FLOATまたはBINARY_DOUBLE型の場合、戻されるデータ型はBINARY_DOUBLEです。BaseがNUMBERまたはTT_DECIMAL型で、ExponentがBINARY_FLOATまたはBINARY_DOUBLE型ではない場合、戻されるデータ型は、最大の精度およびスケールを持つNUMBERです。BaseがTT*数値型のいずれか(TT_BIGINT、TT_INTEGER、TT_SMALLINTまたはTT_TINYINT)である場合、戻されるデータ型はBINARY_DOUBLEです。

例

POWER関数を使用して、employee_idが145に等しい従業員のcommission_pctを2乗して戻します。

Command> SELECT employee_id, commission_pct FROM employees
WHERE employee_id = 145;

< 145, .4 >
1 row found.

Command> SELECT POWER (commission_pct,2) FROM employees WHERE employee_id = 145;
< .16 >
1 row found.

RANK

RANK関数は、値のグループにおける値のランクを計算する分析関数です。

SQL構文

RANK () OVER ( [QueryPartitionClause] OrderByClause )

パラメータ

RANKには、次のパラメータがあります。

パラメータ

説明

QueryPartitionClause

構文、セマンティクスおよび制限の詳細は、「分析関数」を参照してください。

OrderByClause

構文、セマンティクスおよび制限の詳細は、「分析関数」を参照してください。

説明

- 戻り型はNUMBERです。

- そのランク付け基準に関して同じ値を持つ行は、同じランクになります。TimesTenは連結行の数を連結ランクに追加して、次のランクを計算します。そのため、ランクは連続した数値でない場合があります。

- RANKは、ある問合せが戻す他の行について、その問合せが戻す各行のランクを計算します。この計算は、OrderByClauseの式の値に基づいて行われます。

例

RANK関数を使用して、給与や歩合に基づいて部門80の最初の10人の従業員をランク付けします。給与が同じ場合は同じランクになるため、連続しないランクになります。

Command> SELECT first 10 department_id, last_name, salary, commission_pct,
>  RANK() OVER (PARTITION BY department_id
>    ORDER BY salary DESC, commission_pct) "Rank"
> FROM employees WHERE department_id = 80
> ORDER BY department_id, last_name, salary, commission_pct, "Rank";
< 80, Abel, 11000, .3, 5 >
< 80, Ande, 6400, .1, 31 >
< 80, Banda, 6200, .1, 32 >
< 80, Bates, 7300, .15, 26 >
< 80, Bernstein, 9500, .25, 14 >
< 80, Bloom, 10000, .2, 9 >
< 80, Cambrault, 7500, .2, 23 >
< 80, Cambrault, 11000, .3, 5
< 80, Doran, 7500, .3, 24 >
< 80, Errazuriz, 12000, .3, 3 >
10 rows found.

REPLACE

REPLACEは、指定した文字列の連続文字を別の文字列に置換するか、文字列をすべて削除します。

SQL構文

REPLACE (String, SearchString [,ReplacementString] )

パラメータ

REPLACEには、次のパラメータがあります。

パラメータ

説明

String

置換するサブストリングを含むソース文字列。

SearchString

元の文字列で置換される文字列。SearchStringがNULLの場合、元のStringが変更されずに戻されます。

ReplacementString

元の文字列に出現するすべての検索文字列の置換に使用される文字列。ReplacementStringが省略されているかNULLの場合、出現するすべてのSearchStringはソースStringから削除されます。

説明

- REPLACEは、出現するすべてのSearchStringをソースStringのReplacementStringに置換する文字列を戻します。

- String、SearchStringおよびReplacementStringには、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBデータ型を指定できます。TimesTenデータ型およびOracle Databaseデータ型の両方がサポートされます。BLOBを除く文字ではないすべてのデータ型は、暗黙的に文字列データ型に変換されます。

- StringがCHARまたはVARCHAR2の場合、戻される文字列はVARCHAR2データ型です。StringがNCHARまたはNVARCHAR2の場合、戻される文字列はNVARCHAR2データ型です。CLOBまたはNCLOBデータ型では、戻されるデータ型はStringで指定されるデータ型と同じになります。キャラクタ・セットは、ソースStringと同じになります。

- 戻される文字列の長さが0(ゼロ)の場合、NULLがOracle Database データ型に戻され、長さ0(ゼロ)の文字列がTimesTenデータ型に戻されます。すべてのデータ型の詳細は、第1章「データ型」を参照してください。

例

次の例では、Canadaのすべての場所を出力し、国コードCAをCanadaに置換して読みやすくします。

Command> SELECT location_id, street_address,
> city, state_province, postal_code,
> REPLACE(country_id, 'CA', 'Canada')
> FROM LOCATIONS
> WHERE country_id LIKE 'CA';

< 1800, 147 Spadina Ave, Toronto, Ontario, M5V 2L7, Canada >
< 1900, 6092 Boxwood St, Whitehorse, Yukon, YSW 9T2, Canada >
2 rows found.

ROUND (日付)

書式モデルfmtで指定された単位に丸められた日付を戻します。戻される値の型はDATEです。fmtを指定しない場合、dateは最も近い日に丸められます。

SQL構文

ROUND (Date [,Fmt])

パラメータ

ROUND(日付)には、次のパラメータがあります。

パラメータ

説明

Date

丸められる日付。日付値に解決される必要があります。
fmtを指定しない場合、dateは最も近い日に丸められます。

[,Fmt]

書式モデルの丸め単位。fmtには、定数またはパラメータのいずれかを指定します。

説明

- 日付には、DATEまたはTIMESTAMP型を指定できます。戻されるデータ型はDATEです。

- データ型TT_DATEおよびTT_TIMESTAMPはサポートされていません。

- fmtでの使用がサポートされる書式モデルの詳細は、「ROUNDおよびTRUNC日付関数の書式モデル」を参照してください。

例

書式モデルとして'YEAR'を指定し、Dateを翌年の最初の日に丸めます。

Command> SELECT ROUND (DATE '2007-08-25','YEAR') FROM dual;
< 2008-01-01 00:00:00 >
1 row found.

Fmtを省略します。Dateは時刻13:00:00を含むTIMESTAMP型として指定します。Dateは最も近い日に丸められます。

Command> SELECT ROUND (TIMESTAMP '2007-08-16 13:00:00') FROM dual;
< 2007-08-17 00:00:00 >
1 row found.

ROUND (式)

ROUND関数は、小数点の右側がExpression2の桁数に丸められたExpression1を戻します。

SQL構文

ROUND (Expression1 [,Expression2])

パラメータ

ROUNDには、次のパラメータがあります。

パラメータ

説明

Expression1

オペランドまたは列には、任意の数値型を指定できます。

Expression2

何桁に丸めるかを示すオペランドまたは列。負数を指定すると、小数点の左側のその桁を丸めることができます。Expression2を省略した場合、Expression1は小数部が0(ゼロ)桁になるように丸められます。この式は整数である必要があります。

説明

- Expression2を省略すると、戻されるデータ型は、Expression1がTT_DECIMAL型の場合を除き、Expression1の数値データ型と同じです。Expression1がTT_DECIMAL型で、Expression2を省略した場合、戻されるデータ型は、最大の精度およびスケールを持つNUMBERです。

- Expression2を指定した場合、戻されるデータ型は、最大の精度およびスケールを持つNUMBERです。

- Expression1がBINARY_FLOATまたはBINARY_DOUBLE型の場合、Expression1の値は、最も近い偶数値に丸められます。それ以外の場合、Expression1の値は、0(ゼロ)から遠い方に丸められます(つまり、x.5が正数の場合はx+1に、x.5が負数の場合はx-1に丸められます)。

例

小数点の右側が2桁となるように数値を丸めます。

Command> SELECT ROUND (15.5555,2) FROM dual;
< 15.56 >
1 row found.

Expression2に負数を指定して小数点の左側で数値を丸めます。

Command> SELECT ROUND (15.5555,-1) FROM dual;
< 20 >
1 row found.

浮動小数点数を丸めます。浮動小数点数は、最も近い偶数値に丸められます。NUMBER型の式を丸める場合(正数の場合は値が切り上げられる)と比較してください。

Command> SELECT ROUND (1.5f), ROUND (2.5f) FROM dual;
< 2.00000000000000, 2.00000000000000 >
1 row found.
Command> SELECT ROUND (1.5), ROUND (2.5) FROM dual;
< 2, 3 >
1 row found.

ROW_NUMBER

ROW_NUMBER関数は分析関数で、OrderByClauseに指定された行の、1から始まる順序シーケンスで、この関数が適用される各行(パーティションの各行、または問合せが戻す各行)に一意の数値を割り当てます。

SQL構文

ROW_NUMBER () OVER ( [QueryPartitionClause] OrderByClause )

パラメータ

ROW_NUMBERには、次のパラメータがあります。

パラメータ

説明

QueryPartitionClause

構文、セマンティクスおよび制限の詳細は、「分析関数」を参照してください。

OrderByClause

構文、セマンティクスおよび制限の詳細は、「分析関数」を参照してください。

説明

- ROWNUM擬似列は、表や結合処理された行の集合からTimesTenが行を選択する順序を示す番号を戻します。その一方、分析関数であるROW_NUMBERは、番号を割り当てる前に問合せの結果の順序付けを強力にサポートします。

- 指定された範囲のROW_NUMBER値を取得する問合せ内に、ROW_NUMBERを使用した副問合せをネストすることで、内側の問合せの結果から正確な行のサブセットを得ることができます。一貫した結果を戻すには、問合せで決定的なソート順序を使用する必要があります。

- 戻りデータ型は、NUMBERです。

例

ROW_NUMBERを使用すると、各部門の最も支給額の高い上位3人の従業員が戻されます。従業員が3人未満の部門については、3行未満の行が戻されます。

Command> SELECT FIRST 10 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;
< 10, Jennifer, Whalen, 4400 >
< 20, Michael, Hartstein, 13000 >
< 20, Pat, Fay, 6000 >
< 30, Den, Raphaely, 11000 >
< 30, Alexander, Khoo, 3100 >
< 30, Shelli, Baida, 2900 >
< 40, Susan, Mavris, 6500 >
< 50, Adam, Fripp, 8200 >
< 50, Matthew, Weiss, 8000 >
< 50, Payam, Kaufling, 7900 >
10 rows found.

RPAD

RPAD関数は、Expression2を必要な数だけ繰り返して右側を埋め込んだn文字の長さのExpression1を戻します。この関数は、問合せの出力を書式設定する場合に役立ちます。

SQL構文

RPAD (Expression1, n [,Expression2])

パラメータ

RPADには、次のパラメータがあります。

パラメータ

説明

Expression1

右側を文字で埋め込むCHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB、NCLOBオペランドまたは列。Expression1がnより長い場合、RPADでは、nに一致するExpression1の一部分が戻されます。

n

RPAD関数で戻される文字の長さ。NUMBER型の整数、またはNUMBER型の整数に暗黙的に変換可能な値である必要があります。

Expression2

Expression1の右側を文字で埋め込むCHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB、NCLOBオペランドまたは列。Expression2を指定しない場合、デフォルトで単一の空白文字に設定されます。

説明

- Expression1がCHARまたはVARCHAR2型の場合、戻されるデータ型はVARCHAR2です。Expression1がNCHARまたはNVARCHAR2型の場合、戻されるデータ型はNVARCHAR2です。Expression1がLOBの場合、戻されるデータ型は指定されたLOBデータ型と同じになります。

- nが定数の場合、戻されるデータ型の長さはnに等しくなります。それ以外の場合、結果の最大長である8300が戻されます。

- Expression1とExpression2には、TT_CHAR、TT_VARCHAR、TT_NCHARおよびTT_NVARCHARを指定できます。Expression1がTT_CHARまたはTT_VARCHAR型の場合、戻されるデータ型はTT_VARCHARです。Expression1がTT_NCHARまたはTT_NVARCHAR型の場合、戻されるデータ型はTT_NVARCHARです。

- CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBデータ型の場合:

- Expression1またはExpression2のいずれかがNULLの場合、結果はNULLです。nが0(ゼロ)以下の場合も、結果はNULLです。

- TT_CHAR、TT_VARCHAR、TT_NCHARおよびTT_NVARCHAR型の場合:

- Expression1またはExpression2のいずれかがNULLではなく、nが0(ゼロ)以下の場合、結果は空の文字列です。

例

employees表のfirst_nameとlast_nameを連結します。RPAD関数をコールして、右側が空白文字で埋め込まれた長さ12のfirst_nameを戻し、もう一度RPADをコールして右側が空白文字で埋め込まれた長さ12のlast_nameを戻します。先頭の5行を選択します。

Command> SELECT FIRST 5 CONCAT (RPAD (first_name,12),
> RPAD (last_name,12)) FROM employees
> ORDER BY first_name, last_name;
< Adam        Fripp        >
< Alana       Walsh        >
< Alberto     Errazuriz    >
< Alexander   Hunold       >
< Alexander   Khoo         >
5 rows found.

RPAD関数をコールして、右側がドット文字('.')で埋め込まれた長さ20のlast_nameを戻します。employees表を使用して、先頭の5行を選択します。

Command> SELECT FIRST 5 RPAD (last_name,20,'.') FROM employees
> ORDER BY last_name;
< Abel................ >
< Ande................ >
< Atkinson............ >
< Austin.............. >
< Baer................ >
5 rows found.

RTRIM

RTRIM関数は、Expression1の右端から、Expression2に含まれるすべての文字を削除します。TimesTenでは、Expression1の最後の文字から逆方向にスキャンが開始され、Expression2に存在しない文字になるまでExpression2に指定した文字がすべて削除された後、結果が戻されます。

SQL構文

RTRIM (Expression1 [,Expression2])

パラメータ

RTRIMには、次のパラメータがあります。

パラメータ

説明

Expression1

切捨ての対象とするCHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB、NCLOBオペランドまたは列。Expression1が文字リテラルの場合、引用符でその文字を囲みます。

Expression2

Expression1の切捨てに使用するオプションの式。Expression2が文字リテラルの場合、一重引用符でその文字を囲みます。Expression2を指定しない場合、デフォルトで単一の空白文字に設定されます。オペランドまたは列には、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOB型を指定できます。

説明

- Expression1がCHARまたはVARCHAR2型の場合、戻されるデータ型はVARCHAR2です。Expression1がNCHARまたはNVARCHAR2型の場合、戻されるデータ型はNVARCHAR2です。Expression1がCLOBまたはNCLOBの場合、戻されるデータ型は指定されたLOBデータ型と同じになります。戻されるデータ型の長さは、Expression1のデータ型の長さに等しくなります。

- Expression1がCHAR長セマンティクスで定義されたデータ型の場合、戻される長さはCHAR長セマンティクスで表現されます。

- Expression1またはExpression2のいずれかがNULLの場合、結果はNULLです。

- Expression1とExpression2には、TT_CHAR、TT_VARCHAR、TT_NCHARおよびTT_NVARCHARを指定できます。Expression1がTT_CHARまたはTT_VARCHAR型の場合、戻されるデータ型はTT_VARCHARです。Expression1がTT_NCHARまたはTT_NVARCHAR型の場合、戻されるデータ型はTT_NVARCHARです。

- Expression1がCHARまたはVARCHAR2型で、Expression2がNCHARまたはNVARCHAR2型の場合、Expression2はRTRIMの実行前にCHARまたはVARCHAR2に変換されます。Expression2の変換は失われる可能性があります。Expression2の切捨て文字がデータベースのキャラクタ・セットに含まれない場合、問合せにより予期しない結果が発生する可能性があります。

- CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBおよびNCLOB型の場合:

- Expression1のすべての文字がRTRIM関数により削除された場合、結果はNULLになります。

- TT_CHAR、TT_VARCHAR、TT_NCHARおよびTT_NVARCHAR型の場合:

- Expression1のすべての文字がRTRIM関数により削除された場合、結果は空の文字列になります。

例

次の例では、表rtrimtestのcol1から後続の空白を削除します。

Command> CREATE TABLE rtrimtest (col1 VARCHAR2 (25));
Command> INSERT INTO rtrimtest VALUES ('abc     ');
1 row inserted.
Command> SELECT * FROM rtrimtest;
< abc      >
1 row found.
Command> SELECT RTRIM (col1) FROM rtrimtest;
< abc >
1 row found.

RTRIM関数をコールして、右端の'x'および'y'を文字列から削除します。RTRIMは、'xy'というパターンではなく、個々に出現する'x'と'y'を削除します。

Command> SELECT RTRIM ('RTRIM Examplexxxyyyxyxy', 'xy') FROM dual;
< RTRIM Example >
1 row found.

RTRIMをコールして、Expression1からすべての文字を削除します。最初の例では、データ型がCHARであるため、NULLが戻されます。2番目の例では、データ型がTT_CHARであるため、空の文字列が戻されます。

Command> CREATE TABLE rtrimtest (col1 CHAR (4), col2 TT_CHAR (4));
Command> INSERT INTO rtrimtest VALUES ('BBBA', 'BBBA');
1 row inserted.
Command> SELECT RTRIM (col1, 'AB') FROM rtrimtest;
< <NULL> >
1 row found.
Command> SELECT RTRIM (col2, 'AB') FROM rtrimtest;
<  >
1 row found.

SESSION_USER

データベースに現在接続しているTimesTenユーザーの名前を返します。

SQL構文

SESSION_USER

パラメータ

SESSION_USERにはパラメータがありません。

例

セッション・ユーザーの名前を返すには、次の文を使用します。

SELECT SESSION_USER FROM dual;

SIGN

SIGN関数は、Expressionの符号を戻します。

SQL構文

SIGN (Expression)

パラメータ

SIGNには、次のパラメータがあります。

パラメータ

説明

Expression

オペランドまたは列には、任意の数値データ型を指定できます。

説明

- ExpressionがNUMBERまたはTT_DECIMAL型の場合、戻されるデータ型は最大の精度およびスケールを持つNUMBERです。それ以外の場合、戻されるデータ型はTT_INTEGERです。
バイナリの浮動小数点数ではない数値型の場合、符号は次のようになります。

- -1: Expressionの値が0より小さい場合

- 0: Expressionの値が0の場合

- 1: Expressionの値が0より大きい場合

- 浮動小数点数(BINARY_FLOATおよびBINARY_DOUBLE)の場合、このファンクションは数値の符号ビットを戻します。符号ビットは次のようになります。

- -1: Expressionの値が0より小さい場合

- +1: Expressionの値が0以上、またはExpressionの値がNaNに等しい場合

例

これらの例では、様々なデータ型を使用してSIGN関数の使用方法を具体的に示します。作成済の表signexに、異なるデータ型の列が定義されています。まず、表signexを記述し、各列のデータ型を確認します。次に、各列を選択してそれぞれの列の値を取得します。SIGN関数を使用して列の符号を戻します。

Command> DESCRIBE signex;

Table SAMPLEUSER.SIGNEX:
Columns:
COL1                            TT_INTEGER
COL2                            TT_BIGINT
COL3                            BINARY_FLOAT
COL4                            NUMBER (3,2)

1 table found.
(primary key columns are indicated with *)
Command> SELECT col1 FROM signex;
< 10 >
< -10 >
< 0 >
3 rows found.
Command> SELECT SIGN (col1) FROM signex;
< 1 >
< -1 >
< 0 >
3 rows found.
Command> SELECT col2 FROM signex;
< 0 >
< -3 >
< 0 >
3 rows found.
Command> SELECT SIGN (col2) FROM signex;
< 0 >
< -1 >
< 0 >
3 rows found.
Command> SELECT col3 FROM signex;
< 3.500000 >
< -3.560000 >
< NAN >
3 rows found.
Command> SELECT SIGN (col3) FROM signex;
< 1 >
< -1 >
< 1 >
3 rows found.
Command> SELECT col4 FROM signex;
< 2.2 >
< -2.2 >
< 0 >
3 rows found.
Command> SELECT SIGN (col4) FROM signex;
< 1 >
< -1 >
< 0 >
3 rows found.

SOUNDEX

SOUNDEX関数は、文字列の音声シグネチャを判別し、発音が類似した文字列の比較を可能にします。SOUNDEXを使用すると、綴りが異なっても発音が類似した英単語を比較できます。

SQL構文

SOUNDEX (InputString)

パラメータ

SOUNDEXには、次のパラメータがあります。

パラメータ

説明

InputString

有効な値は、ORAおよびTTバリアントの付いたCHAR、VARCHAR2、NCHARおよびNVARCHAR2とCLOBおよびNCLOBです。データ型がCLOBまたはNCLOBの場合、TimesTenは結果を戻す前に暗黙的な変換を実行します。

説明

- 英数字の文字列を、文字列の最初の文字で始まり3つの数字が続く4文字のコードに変換します。

- 音声表現については、『The Art of Computer Programming, Volume 3: Sorting and Searching』(Donald E.Knuth著)で次のように定義されています。

1. 文字列の最初の文字を残し、A、E、I、O、Uの文字が出てきた場合にはすべて削除します。文字の処理で大文字と小文字は区別されません。

2. H、WおよびYが出てきた場合には、すべて削除します。

3. 残った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

4. 2つ以上の同じ数字を含む文字が元の名前内(ステップ1実行前の名前)で隣接している場合は、数字を1つ残してすべて削除します。

5. 結果の最初の4文字を戻します(結果が4文字より少ない場合は'0'を埋め込みます)。

- InputStringにsoundexコードを作成できない場合、この関数はNULLを戻します。たとえば、InputStringに英字が含まれていない場合は、NULLが戻されます。

- 入力型と出力型のマッピング:

入力型

出力型

VARCHAR2(x)、CHAR、CLOB

VARCHAR2(4)

TT_CHAR(x)、TT_VARCHAR(x)

TT_VARCHAR(4)

NVARCHAR2(x)、NCHAR(x)、NCLOB

NVARCHAR2(4)

TT_NCHAR(x)、TT_NVARCHAR(x)

TT_NVARCHAR(4)

例

SOUNDEX関数を使用して、姓が'Taylor'である従業員の音声シグネチャを戻します。

Command> SELECT last_name, first_name, SOUNDEX (last_name)
> FROM employees where last_name = 'Taylor';
< Taylor, Jonathon, T460 >
< Taylor, Winston, T460 >
2 rows found.

この関数を再度呼び出して、文字列'Tailor'の音声シグネチャを戻します。この関数の3回目の呼出しを行い、姓の音声が文字列'Tailor'に類似した各従業員の姓名を戻します。

Command> SELECT SOUNDEX ('Tailor') FROM dual;
< T460 >
1 row found.

Command> SELECT last_name, first_name FROM employees WHERE SOUNDEX (last_name) =
> SOUNDEX ('Tailor');
< Taylor, Jonathon >
< Taylor, Winston >
2 rows found.

SQRT

SQRT関数は、Expressionの平方根を戻します。

SQL構文

SQRT(Expression)

パラメータ

SQRTには、次のパラメータがあります。

パラメータ

説明

Expression

オペランドまたは列には、任意の数値データ型を指定できます。

説明

- ExpressionがNUMBERまたはTT_DECIMAL型の場合、戻されるデータ型は最大の精度およびスケールを持つNUMBERです。ExpressionがBINARY_FLOAT型の場合、戻されるデータ型はBINARY_FLOATです。それ以外の場合、戻されるデータ型はBINARY_DOUBLEです。

- ExpressionがNUMBERまたはTT_DECIMAL型の場合、Expressionの値には負数を指定できません。

- Expressionがバイナリの浮動小数点数(BINARY_FLOATまたはBINARY_DOUBLE)に解決される場合は、次のようになります。

- Expressionの値が0以上の場合、結果は正数です。

- Expressionの値が-0の場合、結果は-0です。

- Expressionの値が0より小さい場合、結果はNaNです。

例

SQRT関数を使用して、-10の絶対値の平方根を戻します。次に、その値をBINARY_FLOATにキャストします。

Command> SELECT CAST (SQRT (ABS (-10)) AS BINARY_FLOAT ) FROM dual;
< 3.162278 >
1 row found.

SUBSTR、SUBSTRB、SUBSTR4

ソース文字列のサブストリングを表す文字列を返します。返されたサブストリングは、指定された文字数で、指定された開始点から始まり、文字列の開始または終了のいずれかに関連します。

SQL構文

{SUBSTR | SUBSTRB | SUBSTR4}=(Source, m, n)

パラメータ

SUBSTRには、次のパラメータがあります。

パラメータ

説明

Source

この関数がサブストリングを返す対象の文字列です。値には、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBデータ型などのサポートされている文字データ型を指定できます。TimesTenデータ型およびOracle Databaseデータ型の両方がサポートされます。
SourceがCHAR文字列の場合、結果はCHARまたはVARCHAR2文字列になります。SourceがNCHAR文字列の場合、結果はNVARCHAR2文字列になります。SourceがLOBの場合、結果はLOBデータ型と同じになります。

m

サブストリングを開始する位置です。mが正の値の場合、返される文字列の最初の文字は、charで指定される文字列の最初からm文字目になります。mが負の値の場合、文字列の最後からm文字目になります。ABS(m)が文字列の長さを超える場合は、NULL値が返されます。

n

サブストリングに含まれる文字数です。nが省略された場合、charで指定した文字列の終わりまでのすべての文字が返されます。nが1より小さいか、char、mまたはnがNULLの場合、NULLが返されます。

説明

SUBSTRは、キャラクタ・セットで定義された文字を使用して長さを計算します。SUBSTRBには、文字でなくバイトを使用します。SUBSTR4は、UCS4コードポイントを使用します。

例

employeesの先頭の5行で、last_nameの最初の3文字を選択します。

SELECT FIRST 5 SUBSTR(last_name,1,3) FROM employees;
< Kin >
< Koc >
< De  >
< Hun >
< Ern >
5 rows found.

employeesの先頭の5行で、last_nameの最後の5文字を選択します。

SELECT FIRST 5 SUBSTR(last_name,-5,5) FROM employees;
< <NULL> >
< chhar >
<  Haan >
< unold >
< Ernst >
5 rows found.

SUM

引数の値の合計を計算します。NULL値は無視されます。SUMは集計関数です。SUMは、集計分析関数にもなります。集計関数の詳細は、「集計関数」を参照してください。分析関数の詳細は、「分析関数」を参照してください。

SQL構文

SUM ([ALL | DISTINCT] Expression) [OVER ([AnalyticClause])]

パラメータ

SUMには、次のパラメータがあります。

パラメータ

説明

Expression

任意の数値データ型、または暗黙的に数値データ型に変換可能な数値以外のデータ型を取ります。

ALL

集計関数の引数に重複する行を含めます。ALLまたはDISTINCTのいずれも指定しない場合、ALLとみなされます。

DISTINCT

集計関数の引数から、重複する列の値を削除します。

OVER ([AnalyticClause])

指定すると、集計分析関数を示します。分析関数の詳細は、「分析関数」を参照してください。

説明

- GROUP BYが使用されていない空の表でSUM関数を計算すると、SUMはNULLを戻します。

- 空のグループまたはグループ化された空の表(GROUP BYを使用)でSUM関数を計算すると、SUMは何も戻しません。

- ソースがTT_TINYINT、TT_SMALLINTまたはTT_INTEGERの場合、結果のデータ型はTT_INTEGERです。

- ソースがNUMBERの場合、結果のデータ型は精度とスケールが定義されていないNUMBERになります。

- ソースがTT_DECIMALの場合、結果のデータ型は最大精度が定義されたTT_DECIMALになります。

- その他のすべてのデータ型の場合、結果のデータ型はソースと同じになります。

- 問合せでAnalyticClauseを使用しない場合、SUMは集計関数として機能します。

- DISTINCTおよびAnalyticClauseを指定する場合は、QueryPartitionClauseのみを指定できます。OrderByClauseおよびWindowingClauseは指定できません。

例

すべての従業員の給与を合計します。

Command> SELECT SUM(salary) Total FROM employees;

TOTAL
< 691400 >
1 row found.

SYS_CONTEXT

現在のセッションに関する情報を戻します。

戻り値のデータ型はVARCHAR2です。

SQL構文

SYS_CONTEXT('namespace', 'parameter' [, length ])

パラメータ

SYS_CONTEXTには、次のパラメータがあります。

パラメータ

説明

namespace

値: USERENV
他の値の場合には、NULLを戻します。

parameter

サポートされる値は、次のとおりです。

- AUTHENTICATION_METHOD

- CURRENT_USER

- CURRENT_USERID

- IDENTIFICATION_TYPE

- LANG

- LANGUAGE

- NLS_SORT

- SESSION_USER

- SESSION_USERID

- SID

length

長さは1から4000までのバイト値です。

parameterに対してサポートされる値の説明は、次のとおりです。

パラメータ

説明

AUTHENTICATION_METHOD

次のタイプのユーザーに対する認証方法を戻します。

- パスワードによって認証されるローカル・データベース・ユーザー

- オペレーティング・システムによって認証される外部ユーザー

CURRENT_USER

現在アクティブな権限を持つデータベース・ユーザー名。この名前は、アクティブな任意の定義者権限オブジェクトの所有者を反映するよう、セッション中に変更される場合があります。定義者権限オブジェクトがアクティブでない場合、CURRENT_USERはSESSION_USERと同じ値を戻します。ビュー定義の本体で直接使用される場合、このパラメータはビューを使用しているカーソルを実行しているユーザーを戻します。カーソルで使用されるビューは、定義者権限とみなされません。

CURRENT_USERID

現在アクティブな権限を持つデータベース・ユーザーの識別子。

IDENTIFICATION_TYPE

データベースでユーザーが作成された方法を戻します。特に、CREATE/ALTER USER構文に、IDENTIFIED句が反映されます。次のリストに、ユーザーの作成中に使用された構文と戻される識別タイプを示します。

- IDENTIFIED BY パスワード: LOCAL

- IDENTIFIED EXTERNALLY: EXTERNAL

LANG

既存の'LANGUAGE'パラメータより短い形式の、言語名のISO略称。

LANGUAGE

セッションで現在使用中の言語と地域、およびデータベース・キャラクタ・セット。書式は次のとおりです。
language_territory.characterset

NLS_SORT

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

SESSION_USER

ログオン時のデータベース・ユーザー名。この値はセッション中を通して変更されません。

SESSION_USERID

ログオン時のデータベース・ユーザーの識別子。

SID

現在の接続の接続ID。

説明

戻り値のデータ型はVARCHAR2です。

例

SELECT SYS_CONTEXT('USERENV', 'CURRENT_USER') FROM dual;
< TTUSER >
1 row found.

SELECT SYS_CONTEXT('USERENV', 'LANGUAGE') FROM dual;
< AMERICAN_AMERICA.AL32UTF8 >
1 row found.

SELECT SYS_CONTEXT('USERENV', 'IDENTIFICATION_TYPE') FROM dual;
< EXTERNAL >
1 row found.

SYSDATEおよびGETDATE

書式YYYY-MM-DD HH:MI:SSで日付を戻します。この日付は、ローカルの現在の日時を表し、文を実行したシステムによって決定されます。

TimesTen型モードを使用している場合、SYSDATEの詳細は、Oracle TimesTen In-Memory Databaseリリース6.0.3のドキュメントを参照してください。

SQL構文

SYSDATE | GETDATE( )

パラメータ

SYSDATEおよびGETDATE関数にはパラメータがありません。

説明

- SYSDATEおよびGETDATEの機能は同じです。SYSDATEは、Oracle Database構文と互換性があります。GETDATEはMicrosoft SQLサーバー構文と互換性があります。

- SYSDATEとGETDATEに引数はありません。DATE値を戻します。

- SYSDATEまたはGETDATEの値は、実行時にのみ検索されます。

- 日付に対する変更(たとえば、異なるタイムゾーンやサマータイムの組込みなど)は、システム・レベルで実行する必要があります。SYSDATEまたはGETDATEを使用して日付を変更することはできません。

- SYSDATE関数とGETDATE関数はDATEデータ型を戻します。DATEの書式は'YYYY-MM-DD HH:MI:SS'です。

- SYSDATEとGETDATEは組込み関数で、日付式を使用しているところで使用できます。これらは、INSERT...SELECTの選択リスト、WHERE句、挿入値に使用できます。SUMまたはAVG集計(オペランドは数値である必要があります)、COUNT集計(列名が必要です)では使用できません。

- SYSDATEとGETDATEは、単一のSQL文では、同じDATE値を戻します。

- TT_SYSDATEリテラルおよびORA_SYSDATEリテラルがサポートされています。TT_SYSDATEは、TT_TIMESTAMPデータ型を戻します。ORA_SYSDATEはDATEデータ型を戻します。

例

この例では、SYSDATEを呼び出して、表内のすべての行に対して同じ日付と時刻を戻します。

Command> SELECT SYSDATE FROM dual;
< 2006-09-03 10:33:43 >
1 row found.

この例では、SYSDATEを呼び出して、現在の日付と時刻を列datecolに挿入します。

Command> CREATE TABLE t (datecol DATE);
Command> INSERT INTO t VALUES (SYSDATE);
1 row inserted.
Command> SELECT * FROM t;
< 2006-09-03 10:35:50 >
1 row found.

この例では、GETDATE表の新しい行それぞれに同じ日付の値を挿入します。ただし、問合せの実行には数秒かかります。

INSERT INTO t1 SELECT GETDATE(), col1
FROM t2 WHERE ...;

TO_CHARをSYSDATEともに使用して、表dualから日付を戻します。

Command> SELECT TO_CHAR (SYSDATE) FROM dual;
< 2006-09-03 10:56:35 >
1 row found.

この例では、TT_SYSDATEを呼び出してTT_TIMESTAMPデータ型を戻してから、ORA_SYSDATEを呼び出してDATEデータ型を戻します。

Command> SELECT tt_sysdate FROM dual;
< 2006-10-31 20:02:19.440611 >
1 row found.
Command> SELECT ora_sysdate FROM dual;
< 2006-10-31 20:02:30 >
1 row found.

SYSTEM_USER

オペレーティング・システムによって識別されている現在のデータベース・ユーザーの名前を返します。

SQL構文

SYSTEM_USER

パラメータ

SYSTEM_USERにはパラメータがありません。

例

オペレーティング・システム・ユーザーの名前を返すには、次の文を使用します。

SELECT SYSTEM_USER FROM dual;

TIMESTAMPADD

TIMESTAMPADD関数は、指定された時間隔数をタイムスタンプに加算し、変更されたタイムスタンプを戻します。

SQL構文

TIMESTAMPADD (Interval, IntegerExpression, TimestampExpression)

パラメータ

TIMESTAMPADDには、次のパラメータがあります。

パラメータ

説明

Interval

指定された時間隔。リテラルとして表す必要があります。説明セクションに有効な値を示します。

IntegerExpression

TT_BIGINTに対して評価する式。

TimestampExpression

日時式。有効なデータ型は、ORA_DATE、ORA_TIMESTAMP、TT_DATEおよびTT_TIMESTAMPです。(別名のDATEおよびTIMESTAMPデータ型も有効です)。TT_TIMEはサポートされていません。

説明

- Intervalに有効な値は、次のとおりです。

- SQL_TSI_FRAC_SECOND

- SQL_TSI_SECOND

- SQL_TSI_MINUTE

- SQL_TSI_HOUR

- SQL_TSI_DAY

- SQL_TSI_WEEK

- SQL_TSI_MONTH

- SQL_TSI_QUARTER

- SQL_TSI_YEAR

- SQL_TSI_FRAC_SECONDは、10億分の1秒単位で表されます。

- 戻り型は、元のデータ型と同じです。たとえば、式がTIMESTAMP型の場合、結果のデータ型はTIMESTAMPになります。正数のタイムスタンプ式(0001-01-01)のみ、問合せと結果の両方で使用できます。TT_DATEおよびTT_TIMESTAMPでは、データ型の開始範囲が1753-01-01であるため、タイムスタンプ式はこの日付と同等かそれ以上である必要があります。

- IntegerExpressionまたはTimestampExpressionがNULLの場合、結果はNULLです。

- 関数は、IntegerExpressionで求められる時間間隔の合計と時間隔を計算し、指定されたTimestampExpressionに加算します。1年加算するとタイムスタンプは12か月進み、1週間加算するとタイムスタンプは7日進みます。IntegerExpressionが負の場合は、指定された時間隔がTimestampExpressionから減算されます。

- 指定された時間隔およびタイムスタンプ式を使用することによって、精度が失われる可能性があります。たとえば、時間隔がSQL_TSI_HOURで、IntegerExpressionに2およびTimestampExpressionにTT_DATEを指定すると、TimesTenは2時間を0日として扱い、元の日付に0日を加算した合計を戻すため、精度が失われることがあります。ただし、IntegerExpressionが48の場合、TimesTenは48時間を2日として扱い、元の日付に2日加算した合計を戻します。この場合、精度は失われません。

- タイムスタンプの追加によって指定された構成要素がオーバーフローになる場合(60秒以上、24時間以上、12か月以上など)、オーバーフローは次の構成要素に引き継がれます。たとえば、秒の構成要素がオーバーフローになると、分の構成要素が進められます。

例

TIMESTAMPADD関数を使用して、タイムスタンプ'2009-11-30 10:00:00'に3か月加算します。TimesTenは、年を増分し、2月の28日に対応するように日付部分を調整します。

Command> SELECT TIMESTAMPADD (SQL_TSI_MONTH, 3, TIMESTAMP '2010-11-30 10:00:00')
> FROM dual;
< 2011-02-28 10:00:00 >
1 row found.

TIMESTAMPADD関数を使用して、タイムスタンプ'2010-12-31 23:59:59'に1秒加算します。TimesTenは、すべてのタイムスタンプの構成要素にオーバーフローを伝播し、適切に構成要素を進めます。

Command> SELECT TIMESTAMPADD (SQL_TSI_SECOND, 1, TIMESTAMP '2010-12-31 23:59:59')
> FROM dual;
< 2011-01-01 00:00:00 >
1 row found.

TIMESTAMPDIFF

TIMESTAMPDIFF関数は、2つのタイムスタンプ間の指定された時間隔の合計を戻します。

SQL構文

TIMESTAMPDIFF (Interval, TimestampExpression1, TimestampExpression2)

パラメータ

TIMESTAMPDIFFには、次のパラメータがあります。

パラメータ

説明

Interval

指定された時間隔。リテラルとして表す必要があります。説明セクションに有効な値を示します。

TimestampExpression1

日時式。有効なデータ型は、ORA_DATE、ORA_TIMESTAMP、TT_DATEおよびTT_TIMESTAMPです。(別名のDATEおよびTIMESTAMPデータ型も有効です。)TT_TIMEはサポートされていません。

TimestampExpression2

日時式。有効なデータ型は、ORA_DATE、ORA_TIMESTAMP、TT_DATEおよびTT_TIMESTAMPです。(別名のDATEおよびTIMESTAMPデータ型も有効です。)TT_TIMEはサポートされていません。

説明

- Intervalに有効な値は、次のとおりです。

- SQL_TSI_FRAC_SECOND

- SQL_TSI_SECOND

- SQL_TSI_MINUTE

- SQL_TSI_HOUR

- SQL_TSI_DAY

- SQL_TSI_WEEK

- SQL_TSI_MONTH

- SQL_TSI_QUARTER

- SQL_TSI_YEAR

- SQL_TSI_FRAC_SECONDは、10億分の1秒単位で表されます。

- Intervalは、タイムスタンプの差を戻す単位を決定します。たとえば、SQL_TSI_YEARを指定すると、タイムスタンプの差は年数で戻されます。

- TimesTenは、TimestampExpression2からTimestampExpression1を引いた差を結果として戻します。戻り型は、TT_BIGINTです。

- 正数のタイムスタンプ式(0001-01-01)のみ使用できます。TT_DATEおよびTT_TIMESTAMPでは、データ型の開始範囲が1753-01-01であるため、タイムスタンプ式はこの日付と同等かそれ以上である必要があります。

- TimestampExpression1またはTimestampExpression2がNULLの場合、結果はNULLです。

- いずれかのタイムスタンプ式が日付値で、Intervalで小数秒、秒、分または時間が指定されると、TimesTenでタイムスタンプの差が計算される前に、タイムスタンプの時間部分が0(ゼロ)に設定されます。

- 関数は、まず、より上位の時間隔型を指定された時間隔型に変換することによって、指定されたIntervalの単位で各タイムスタンプを表します。たとえば、指定された時間隔が月数の場合、年数が月数に変換されます。つまり、1年は12か月、1週間は7日などです。2つのタイムスタンプ間の日数を検出するために、正確な日数が計算されます。月数は日数によって変わるため、TimesTenでは1か月の日数は想定されていません。

- 関数は、時間隔の小数部分が時間隔の境界をまたぐときに、指定された時間隔を増分します。たとえば、2009-12-31と2010-01-01の間の年の差は、年の小数部が翌年にまたがるため(2009年から2010年)、1年となります。ただし、2010-01-01と2010-12-31の差は、時間隔の小数部分が境界をまたがないため0年です。2010年内になります。

- 関数は、週の差を計算する場合は、最初に日数で差を計算してから、その結果を丸める前に7で除算します。TimesTenでは、1週間は日曜日から始まると想定されています。そのため、2010-10-21(木曜日)と2010-10-25(次の月曜日)の週の差は1週間になります。週の開始を火曜日とすると、同じ日付間の差は0週間になります。

例

TIMESTAMPDIFF関数を使用して、2008-02-01と2008-03-01の日付間の差を日数で計算します。2008年はうるう年のため、結果は29日になります。1か月を30日と想定しなくても、正確に計算されます。

Command> SELECT TIMESTAMPDIFF (SQL_TSI_DAY, DATE '2008-02-01',
> DATE '2008-03-01') FROM dual;
< 29 >
1 row found.

TIMESTAMPDIFF関数を使用して、2009-02-01と2009-03-01の日付間の差を月数で計算します。月の時間隔の境界をまたぐため、関数は1を戻します。2つ目の例では、時間隔に日数が指定されているため、結果は28になります。

Command> SELECT TIMESTAMPDIFF (SQL_TSI_MONTH, DATE '2009-02-01',
> DATE '2009-03-01') FROM dual;
< 1 >
1 row found.

Command> SELECT TIMESTAMPDIFF (SQL_TSI_DAY, DATE '2009-02-01',
> DATE '2009-03-01') FROM dual;
< 28 >
1 row found.

TIMESTAMPDIFF関数を使用して、2009-02-01と2009-02-29の日付間の差を月数で計算します。月の時間隔の境界をまたがないため、関数は0(ゼロ)を戻します。

Command> SELECT TIMESTAMPDIFF (SQL_TSI_MONTH, DATE '2009-02-01',
> DATE '2009-02-28') FROM dual;
< 0 >
1 row found.

TIMESTAMPDIFF関数を使用して、型が混在した期間の時間差を小数秒で示します。1時間の時間差は、ナノ秒(小数秒の単位)で戻されます。データ型の時間部分は00:00:00に設定されます。

Command> SELECT TIMESTAMPDIFF (SQL_TSI_FRAC_SECOND,
> TT_TIMESTAMP '2009-12-31 01:00:00.00', DATE '2009-12-31') FROM dual;
< -3600000000000 >
1 row found.

TO_BLOB

TO_BLOB関数は、VARBINARYまたはBINARYをBLOBに変換します。

SQL構文

TO_BLOB ( ValidDataType )

パラメータ

TO_BLOBには、次のパラメータがあります。

パラメータ

説明

ValidDataType

値は、VARBINARYまたはBINARYデータ型になります。

例

次の例では、BINARY列およびVARBINARY列を持つ表を作成します。TO_BLOB関数は、BINARYおよびVARBINARYデータをBLOBに変換するためにこれらの列の値で使用されます。

Command> CREATE TABLE bvar
> (col1 BINARY (10), col2 VARBINARY (10));

Command> INSERT INTO bvar (col1, col2)
> VALUES (0x4D7953514C, 0x39274D);
1 row inserted.

Command> SELECT * FROM bvar;
< 4D7953514C0000000000, 39274D >
1 row found.

Command> SELECT TO_BLOB(col1), TO_BLOB(col2)
> FROM bvar;
< 4D7953514C0000000000, 39274D >
1 row found.

TO_CHAR

TO_CHAR関数は、DATE、TIMESTAMPまたは数値の入力値をVARCHAR2に変換します。

TimesTen型モードを使用している場合、TO_CHAR関数の詳細は、Oracle TimesTen In-Memory Databaseリリース6.0.3のドキュメントを参照してください。

SQL構文

TO_CHAR ( Expression1[, Expression2 [, Expression3]])

パラメータ

TO_CHARには、次のパラメータがあります。

パラメータ

説明

Expression1

DATE、TIMESTAMP、CLOB、NCLOBまたは数式。

Expression2

書式文字列。省略された場合、TimesTenではデフォルトの日付書式(YYYY-MM-DD)が使用されます。

Expression3

現在は無視されているNLSパラメータを指定するための、CHARまたはVARCHAR2式。

説明

- TO_CHARでは、式に指定されたデータ型に応じて異なる日時書式モデルがサポートされています。DATEまたはTIMESTAMPデータ型のTO_CHARに使用される日時書式モデルの詳細は、「日時書式モデル」を参照してください。TT_DATEまたはTT_TIMESTAMPデータ型のTO_CHARに使用される日時書式モデルの詳細は、「ROUNDおよびTRUNC日付関数の書式モデル」を参照してください。

- TO_CHARでは、式に指定された数値データ型に応じて異なる数値書式モデルがサポートされています。NUMBERまたはORA_FLOATデータ型のTO_CHARに使用される数値書式モデルの詳細は、「数値書式モデル」を参照してください。その他のすべての数値データ型のTO_CHARに使用される数値書式モデルの詳細は、「ROUNDおよびTRUNC日付関数の書式モデル」を参照してください。

例

SELECT FIRST 5 first_name,
TO_CHAR (hire_date, 'MONTH DD, YYYY'),
TO_CHAR (salary, '$999999.99')
FROM employees;
< Steven, JUNE      17, 1987,   $24000.00 >
< Neena, SEPTEMBER 21, 1989,   $17000.00 >
< Lex, JANUARY   13, 1993,   $17000.00 >
< Alexander, JANUARY   03, 1990,    $9000.00 >
< Bruce, MAY       21, 1991,    $6000.00 >
5 rows found.

SELECT TO_CHAR(-0.12,'$B99.9999') FROM dual;
<   -$.1200 >
1 row found.

SELECT TO_CHAR(-12, 'B99999PR') FROM dual;
<     12  >
1 row found.

SELECT TO_CHAR(-12,'FM99999') FROM dual;
< -12 >
1 row found.

SELECT TO_CHAR(1234.1,'9,999.999') FROM dual;
<  1,234.100 >
1 row found.

TO_CLOB

TO_CLOB関数は、次の値のいずれかをCLOBに変換します。

- CHAR、VARCHAR2、NVARCHAR2、TT_VARCHAR、TT_NVARCHARまたはNCLOBデータ型のいずれかに含まれる文字値

- DATEまたはTIMESTAMPデータ型に含まれる日時値

- NUMBER、BINARY_FLOATまたはBINARY_DOUBLEデータ型に含まれる数値

SQL構文

TO_CLOB ( ValidDataType )

パラメータ

TO_CLOBには、次のパラメータがあります。

パラメータ

説明

ValidDataType

前述の有効なデータ型のいずれかの値。

説明

TO_CLOB関数は、INTERVALまたはTIMESTAMP with TIMEZONEデータ型に含まれる値では動作しません。

例

次の例では、TO_CLOB関数を使用して文字列を変換します。

Command> DESCRIBE clob_content;

Table USER1.CLOB_CONTENT:
Columns:
*ID                              NUMBER (38) NOT NULL
CLOB_COLUMN                     CLOB NOT NULL

1 table found.
(primary key columns are indicated with *)

Command> INSERT INTO clob_content (id, clob_column)
> VALUES (3, EMPTY_CLOB());
1 row inserted.

Command> UPDATE clob_content
> SET clob_column = TO_CLOB('Demonstration of the TO_CLOB function.')
> WHERE id = 3;
1 row updated.

TO_DATE

TO_DATE関数は、CHAR、VARCHAR2、CLOBまたはNCLOB引数をDATEデータ型の値に変換します。

TimesTen型モードを使用している場合、TO_DATE関数の詳細は、Oracle TimesTen In-Memory Databaseリリース6.0.3のドキュメントを参照してください。

SQL構文

TO_DATE (Expression1[, Expression2 [, Expression3]])

パラメータ

TO_DATEには、次のパラメータがあります。

パラメータ

説明

Expression1

CHAR、VARCHAR2、CLOBまたはNCLOB式。

Expression2

書式文字列。この式は、通常は必須です。オプションになるのは、Expression1がデフォルトの日付書式YYYY-MM-DD HHMISSである場合のみです。

Expression3

現在は無視されているNLSパラメータを指定するための、CHARまたはVARCHAR2式。

説明

TO_DATE関数では、日時書式モデルを使用できます。日時書式モデルの詳細は、「日時書式モデル」を参照してください。

例

Command> SELECT TO_DATE ('1999, JAN 14', 'YYYY, MON DD') FROM dual;
< 1999-01-14 00:00:00 >
1 row found.

Command> SELECT TO_CHAR(TO_DATE('1999-12:23','YYYY-MM:DD')) FROM dual;
< 1999-12-23 00:00:00 >
1 row found.

Command> SELECT TO_CHAR(TO_DATE('12-23-1997 10 AM:56:20',
'MM-DD-YYYY HH AM:MI:SS'), 'MONTH DD, YYYY HH:MI-SS AM') FROM DUAL;
< DECEMBER  23, 1997 10:56-20 AM >
1 row found.

Command> SELECT TO_CHAR(TO_DATE('12-23-1997 15:56:20',
'MM-DD-YYYY HH24:MI:SS'), 'MONTH DD, YYYY HH24:MI-SS') FROM DUAL;
< DECEMBER  23, 1997 15:56-20 >
1 row found.

TO_LOB

TO_LOB関数は、CLOBおよびVARBINARYデータ型に指定されたTT_VARCHARおよびVARCHAR2データ型をBLOBに変換します。

SQL構文

TO_LOB ( ValidDataType )

パラメータ

TO_LOBには、次のパラメータがあります。

パラメータ

説明

ValidDataType

値は、TT_VARCHAR、VARCHAR2またはBINARYデータ型になります。

説明

この関数は、TT_VARCHAR、VARCHAR2またはVARBINARY列でのみ、およびLOB列が定義されている表でCREATE TABLE AS SELECTまたはINSERT...SELECT文を使用する場合にのみ使用できます。

例

次の例では、LOB列を持つ表のINSERT...SELECT文内でTO_LOB関数を使用する方法を示します。

Command> CREATE TABLE clb(c CLOB);
Command> CREATE TABLE vc (v VARCHAR2(2000));
Command> INSERT INTO vc(v)
> VALUES ('Showing the functionality of the TO_LOB function');
1 row inserted.

Command> INSERT INTO clb
SELECT TO_LOB(v) FROM vc;
1 row inserted.

Command> SELECT * FROM clb;
< Showing the functionality of the TO_LOB function >
1 row found.

前述の制限のため、TO_CLOBまたはTO_BLOB関数を使用できるすべての場合にTO_LOB関数を使用できるわけではありません。次の例では、この方法でTO_LOB関数の使用を試みた場合に受け取るエラーを示します。

Command> SELECT TO_LOB(col1)
> FROM bvar;
2610: Operand data type 'BINARY' invalid for operator
'TO_LOB' in expr ( TO_LOB( BVAR.COL1 ))
The command failed.

TO_NCLOB

TO_NCLOB関数は、次の値のいずれかをNCLOBに変換します。

- CHAR、VARCHAR2、NVARCHAR2、TT_VARCHAR、TT_NVARCHARまたはNCLOBデータ型のいずれかに含まれる文字値

- DATEまたはTIMESTAMPデータ型に含まれる日時値

- NUMBER、BINARY_FLOATまたはBINARY_DOUBLEデータ型に含まれる数値

SQL構文

TO_NCLOB ( ValidDataType )

パラメータ

TO_NCLOBには、次のパラメータがあります。

パラメータ

説明

ValidDataType

前述の有効なデータ型のいずれかの値。

例

次の例では、VARCHAR2 job_title列のデータをNCLOBデータ型に変換します。

Command> SELECT TO_NCLOB(job_title) FROM jobs;

< Public Accountant >
< Accounting Manager >
< Administration Assistant >
< President >
< Administration Vice President >
< Accountant >
< Finance Manager >
< Human Resources Representative >
< Programmer >
< Marketing Manager >
< Marketing Representative >
< Public Relations Representative >
< Purchasing Clerk >
< Purchasing Manager >
< Sales Manager >
< Sales Representative >
< Shipping Clerk >
< Stock Clerk >
< Stock Manager >
19 rows found.

TO_NUMBER

式をNUMBER型の値に変換します。

SQL構文

TO_NUMBER (Expression[, Format])

パラメータ

TO_NUMBERには、次のパラメータがあります。

パラメータ

説明

Expression

変換する式で、値はCHAR、VARCHAR2、NCHAR、NVARCHAR2、BINARY_FLOAT、BINARY_DOUBLE、CLOBまたはNCLOB型になります。

Format

指定した書式が、ExpressionをNUMBER型の値に変換する場合に使用されます。書式文字列は数値書式モデルを示します。書式には定数またはパラメータを使用できます。

説明

TO_NUMBER関数では、数値書式モデルを使用できます。数値書式モデルの詳細は、「数値書式モデル」を参照してください。

例

Command> SELECT TO_NUMBER ('100.00', '999D99') FROM dual;
< 100 >
1 row found.

Command> SELECT TO_NUMBER ('1210.73', '9999.99') FROM dual;
< 1210.73 >
1 row found.

TRIM

TRIM関数は、文字列から先行文字または後続文字(あるいはその両方)を削除します。

SQL構文

TRIMには、次の4つの構文オプションがあります。

- Trim_characterと組み合せてTRIM修飾子の1つ(LEADING、TRAILINGまたはBOTH)を指定します。

TRIM ( LEADING|TRAILING|BOTH Trim_character FROM Expression )

- Trim_characterなしでTRIM修飾子の1つ(LEADING、TRAILINGまたはBOTH)を指定します。この場合、Trim_characterはデフォルトで空白になります。

TRIM ( LEADING|TRAILING|BOTH FROM Expression )

- TRIM修飾子なしでTrim_characterを指定すると、Trim_characterの先行文字と後続文字の両方がExpressionから削除されます。

TRIM (Trim_character FROM Expression )

- 修飾子またはTrim_characterなしでExpressionを指定すると、Expressionから先行および後続の空白文字が削除されます。

TRIM ( Expression )

パラメータ

TRIMには、次のパラメータがあります。

パラメータ

説明

LEADING | TRAILING | BOTH

LEADING、TRAILINGまたはBOTHは、TRIM関数の修飾子です。LEADINGは、ExpressionからTrim_characterのすべての先行文字を削除します。TRAILINGは、ExpressionからTrim_characterのすべての後続文字を削除します。BOTHは、ExpressionからTrim_characterの先行文字と後続文字を削除します。

[Trim_character]

指定する場合、Trim_characterはExpressionから切り捨てるCHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB、NCLOBオペランドまたは列を表します。1つの文字のみを指定できます。Trim_characterを指定しない場合、デフォルトで単一の空白文字に設定されます。Trim_characterが文字リテラルの場合、一重引用符でその文字を囲みます。

Expression

Expressionは、切り捨てる対象とするCHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB、NCLOBオペランドまたは列です。Expressionが文字リテラルの場合、一重引用符でその文字を囲みます。

説明

- ExpressionがCHARまたはVARCHAR2型の場合、戻されるデータ型はVARCHAR2です。ExpressionがNCHARまたはNVARCHAR2型の場合、戻されるデータ型はNVARCHAR2です。ExpressionがCLOB型の場合、戻されるデータ型はCLOBです。ExpressionがNCLOB型の場合、戻されるデータ型はNCLOBです。戻されるデータ型の長さは、Expressionのデータ型の長さに等しくなります。

- ExpressionがCHAR長セマンティクスで定義されたデータ型の場合、戻される長さはCHAR長セマンティクスで表現されます。

- Trim_characterまたはExpressionのいずれかがNULLの場合、結果はNULLです。

- Trim_characterとExpressionには、TT_CHAR、TT_VARCHAR、TT_NCHARおよびTT_NVARCHARを指定できます。ExpressionがTT_CHARまたはTT_VARCHAR型の場合、戻されるデータ型はTT_VARCHARです。ExpressionがTT_NCHARまたはTT_NVARCHAR型の場合、戻されるデータ型はTT_NVARCHARです。

- Trim_characterがNCHARまたはNVARCHAR2型で、ExpressionがCHARまたはVARCHAR2型の場合、Trim_characterはTRIMの実行前にCHARまたはVARCHAR2に変換されます。Trim_characterの変換は失われる可能性があります。Trim_characterがデータベースのキャラクタ・セットに含まれない場合、問合せにより予期しない結果が発生する可能性があります。

- CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBおよびNCLOB型の場合:

- Expressionのすべての文字がTRIM関数により削除された場合、結果はNULLになります。

- TT_CHAR、TT_VARCHAR、TT_NCHARおよびTT_NVARCHAR型の場合:

- Expressionのすべての文字がTRIM関数により削除された場合、結果は空の文字列になります。

例

TRIM関数を修飾子とともに使用し、Expressionの'0000TRIM Example0000'からTrim_characterの'0'(ゼロ)を削除します。

Command> SELECT TRIM (LEADING '0' FROM '0000TRIM Example0000') FROM dual;
< TRIM Example0000 >
1 row found.
Command> SELECT TRIM (TRAILING '0' FROM '0000TRIM Example0000') FROM dual;
< 0000TRIM Example >
1 row found.
Command> SELECT TRIM (BOTH '0' FROM '0000TRIM Example0000') FROM dual;
< TRIM Example >
1 row found.

TRIM関数を修飾子とともに使用し、空白文字を削除します。Trim_characterは指定しません。Trim_characterのデフォルト値は、空白文字です。

Command> SELECT TRIM (LEADING FROM '    TRIM Example    ') FROM dual;
< TRIM Example     >
1 row found.
Command> SELECT TRIM (TRAILING FROM '    TRIM Example    ') FROM dual;
<     TRIM Example >
1 row found.
Command> SELECT TRIM (BOTH FROM '    TRIM Example    ') FROM dual;
< TRIM Example >
1 row found.

TRIM関数をTrim_characterの'0'(ゼロ)とともに使用します。修飾子は指定しません。Expressionの'0000TRIM Example0000'から、先行および後続の'0'(ゼロ)が削除されます。

Command> SELECT TRIM ('0' FROM '0000TRIM Example0000') FROM dual;
< TRIM Example >
1 row found.

TRIM関数を修飾子またはTrim_characterなしで使用します。先行および後続の空白文字が削除されます。

< TRIM Example >
1 row found.
Command> SELECT TRIM ('    TRIM Example    ') FROM dual;

TRUNC (日付)

書式モデルfmtで指定された単位に時刻部分が切り捨てられた日付を戻します。戻される値の型はDATEです。fmtを指定しない場合、dateは最も近い日に切り捨てられます。

SQL構文

TRUNC (date [,fmt])

パラメータ

TRUNC(日付)には、次のパラメータがあります。

パラメータ

説明

date

切り捨てられる日付。dateにはDATEデータ型を指定します。この関数は、書式モデルで指定された単位に時刻部分が切り捨てられたDATEデータ型を戻します。fmtを指定しない場合、日付は最も近い日に切り捨てられます。DATEデータ型を指定しない場合は、エラーが戻されます。

[,fmt]

書式モデルの切捨て単位。fmtには、定数またはパラメータのいずれかを指定します。

説明

fmtでの使用が許可される書式モデルの詳細は、「ROUNDおよびTRUNC日付関数の書式モデル」を参照してください。

例

Command> SELECT TRUNC (TO_DATE ('27-OCT-92','DD-MON-YY'),'YEAR') FROM dual;
< 2092-01-01 00:00:00 >
1 row found.

TRUNC (式)

一定の小数位の桁数に切り捨てられた数値を戻します。

SQL構文

TRUNC (Expression [,m])

パラメータ

TRUNCには、次のパラメータがあります。

パラメータ

説明

Expression

切り捨てる式。オペランドの型はNUMBERである必要があります。オペランドの型がNUMBERでない場合、エラーが戻されます。戻される値の型はNUMBERです。

[,m]

切り捨てられた後の小数位の桁数。mを省略すると、数値は0位に切り捨てられます。mの値を負にすると、小数点の左側m桁を切り捨てる(ゼロにする)ことができます。

例

SELECT TRUNC (15.79,1) FROM dual;
< 15.7 >
1 row found.

SELECT TRUNC (15.79,-1) FROM dual;
< 10 >
1 row found.

TT_HASH

TT_HASH関数は、式(または式のリスト)のハッシュ値を戻します。この値は、ハッシュ索引で使用される値です。

SQL構文

TT_HASH(Expression [,...])

パラメータ

TT_HASHには、次のパラメータがあります。

パラメータ

説明

Expression [,...]

式(または式のリスト)のハッシュ値を決定するために使用される1つ以上の式。

説明

- 各式は、既知のデータ型を使用し、NULL値不可である必要があります。式のハッシュ値は、式の値と型の両方に依存します。たとえば、TT_INTEGERで値が25のTT_HASHは、NUMBERまたはBINARY_DOUBLEで値が25のTT_HASHとは異なる場合があります。式のリストを指定する場合は、TT_HASHの結果はリスト内の式の順序によって異なります。

- 単純列参照でない定数および式は、アプリケーションで制御できない内部入力ルールの影響を受けるため、単純列参照でない式に適した値をTT_HASHで計算する場合の最適な方法は、CASTを使用して式を適切な型にキャストする方法です。

- TT_HASHの結果のデータ型は、32ビット・モードではTT_INTEGER、64ビット・モードではTT_BIGINTです。

- TT_HASHは、SQL文内の式を使用できるすべての場所で使用できます。たとえば、TT_HASHでは、SELECTリスト、WHEREまたはHAVING句、ORDER BY句、GROUP BY句で使用できます。

- エラー・メッセージ、トレース・メッセージおよびttXactAdminの出力ではハッシュ値が符号付き10進数として表示されるため、値がTT_HASH出力と一致します。

例

次の問合せは、指定されたハッシュ値に主キー列がハッシュされる行のセットを検索します。

SELECT * FROM t1
WHERE TT_HASH(pkey_col1, pkey_col2, pkey_col3) = 12345678;

TTGRIDMEMBERID

グローバル問合せ内で実行されると、戻される行ごとに、所有メンバーのキャッシュ・グリッド内のメンバーIDを指定します。

SQL構文

TTGRIDMEMBERID()

パラメータ

TTGRIDMEMBERID()にはパラメータがありません。

説明

TTGRIDMEMBERID()は、グローバル問合せ内で実行されると、キャッシュ・グリッド内で戻される各行が配置されているメンバーのメンバーIDを持つTT_INTEGERを戻します。グローバル問合せ内で実行されない場合は、現在のメンバーIDが戻されます。メンバーのノードがグリッドにアタッチされていない場合は、NULLが戻されます。

自動コミットをOFFに設定する必要があります。

この関数の詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のキャッシュ・グリッド内にあるデータの場所情報の取得に関する項を参照してください。

例

次の例では、自動コミットがOFFに設定されており、GlobalProcessingオプティマイザ・ヒントを1に設定して、グローバル問合せ部分に続く文を作成します。SELECT文によって、従業員データが存在するメンバーの従業員番号とメンバーIDが取得されます。次の出力は、従業員行がメンバー2および4にあることを示しています。

Command> AUTOCOMMIT OFF;
Command> CALL ttOptSetFlag('GlobalProcessing', 1);
Command> SELECT employee_id, TTGRIDMEMBERID() FROM employees;
< 7900, 2 >
< 7902, 4 >
2 rows found.

次の例では、ORDER BY句でTTGRIDMEMBERID()を使用します。

Command> AUTOCOMMIT OFF;
Command> CALL ttOptSetFlag('GlobalProcessing', 1);
Command> SELECT employee_id, TTGRIDMEMBERID() FROM employees
ORDER BY TTGRIDMEMBERID();
< 7900, 2 >
< 7902, 4 >
2 rows found.

次の例では、WHERE句でTTGRIDMEMBERID()を使用します。

Command> AUTOCOMMIT OFF;
Command> CALL ttOptSetFlag('GlobalProcessing', 1);
Command> SELECT employee_id, TTGRIDMEMBERID() FROM employees
WHERE TTGRIDMEMBERID()=2;
< 7900, 2 >
1 row found.

次の例では、ローカル問合せとしてTTGRIDMEMBERID()を実行し、ローカル・メンバーIDの1を取得します。

Command> SELECT TTGRIDMEMBERID() FROM dual;
< 1 >
1 row found.

TTGRIDNODENAME

グローバル問合せ内で実行されると、データが配置されているキャッシュ・グリッド内のノードの名前を戻します。

SQL構文

TTGRIDNODENAME()

パラメータ

TTGRIDNODENAME()にはパラメータがありません。

説明

TTGRIDNODENAME()は、戻される各行が配置されているノードのノード名を持つTT_VARCHAR(64)を戻し、これによりキャッシュ・グリッド内のデータの場所を示します。ノードがグリッドにアタッチされていない場合は、NULLが戻されます。

自動コミットをOFFに設定する必要があります。

詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のキャッシュ・グリッド内にあるデータの場所情報の取得に関する項を参照してください。

例

次の例では、自動コミットがOFFに設定されており、GlobalProcessingオプティマイザ・ヒントを1に設定して、グローバル問合せ部分に続く文を作成します。SELECT文によって、従業員データが存在するノードの従業員番号と名前が取得されます。次の出力は、従業員行がメンバー2および4にあることを示しています。

Command> AUTOCOMMIT OFF;
Command> CALL ttOptSetFlag('GlobalProcessing', 1);
Command> SELECT employee_id, TTGRIDNODENAME() FROM employees;
< 7900, MYGRID_member2 >
< 7902, MYGRID_member4 >
2 rows found.

TTGRIDUSERASSIGNEDNAME

グローバル問合せ内で、データが配置されているキャッシュ・グリッド内のノードにユーザーが割り当てた名前を戻します。

SQL構文

TTGRIDUSERASSIGNEDNAME()

パラメータ

TTGRIDUSERASSIGNEDNAME()にはパラメータがありません。

説明

TTGRIDUSERASSIGNEDNAME()は、データが配置されているグリッドのノードにユーザーが割り当てたノード名を持つTT_VARCHAR(30)を戻します。ノードがグリッドにアタッチされていない場合は、NULLが戻されます。

自動コミットをOFFに設定する必要があります。

詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のキャッシュ・グリッド内にあるデータの場所情報の取得に関する項を参照してください。

例

次の例には、ユーザー割当て名がalone1、alone2のメンバーのキャッシュ・グリッド、およびノードcacheactとcachestandのアクティブ・スタンバイ・ペアが含まれています。スタンバイ・データベースのデータはアクティブ・データベースと同じですが、問合せではスタンバイ・データベースからデータは戻されません。

次の例では、employees表のTTGRIDUSERASSIGNEDNAME()によってemployee_idおよびユーザー割当てノード名をグリッド・メンバーから取得します。戻される行は、キャッシュ・インスタンスの各行を所有するグリッド・ノードを示します。

Command> AUTOCOMMIT OFF;
Command> CALL ttOptSetFlag('GlobalProcessing', 1);
Command> SELECT employee_id, TTGRIDUSERASSIGNEDNAME() FROM employees;
Command> COMMIT;
< 100, alone1>
< 101, alone2>
< 102, cacheact>
< 103, alone1>
< 104, cacheact>
...

後続の問合せは、データの所有権を変更せずに適切なノードにアクセスできます。たとえば、TTGRIDUSERASSIGNEDNAME()を含めてこの問合せをグリッド・ノードcacheactで実行し、データが配置されているノードがcacheactであることを確認します。

Command> AUTOCOMMIT OFF;
Command> CALL ttOptSetFlag('GlobalProcessing', 1);
Command> SELECT employee_id, last_name, hire_date, TTGRIDUSERASSIGNEDNAME()
FROM employees WHERE employee_id=104;
< 104, Ernst, cacheact, 1991-05-21 00:00:00 >

次の例では、従業員データが存在するノードの従業員番号とユーザー割当て名を取得し、戻されるデータをユーザー割当て名別に順序付けします。

Command> AUTOCOMMIT OFF;
Command> CALL ttOptSetFlag('GlobalProcessing', 1);
Command> SELECT employee_id, TTGRIDUSERASSIGNEDNAME() FROM employees ORDER BY
TTGRIDUSERASSIGNEDNAME() ASC;
< 7900, member2 >
< 7902, member4 >
2 rows found.

UID

この関数は、セッション・ユーザーを一意に識別する整数(TT_INTEGER)を戻します。

SQL構文

UID

パラメータ

UIDにはパラメータがありません。

例

SELECT UID FROM dual;
< 10 >
1 row found.

UNISTR

UNISTRは、NVARCHAR2型のデータに解決される文字列を引数として取り、UTF-16書式の値を戻します。Unicodeエスケープがサポートされています。文字列に文字のUnicodeエンコード値を指定できます。

SQL構文

UNISTR ('String')

パラメータ

UNISTRには、次のパラメータがあります。

パラメータ

説明

'String'

UNISTR関数に渡される文字列。文字列はNVARCHAR2型に解決されます。TimesTenでは、値はUTF-16書式で戻されます。文字列の一部としてUnicodeエスケープを指定できます。

例

次の例は、UNISTR関数を呼び出し、引数として文字列'A\00E4a'を渡します。戻される値は、UTF-16書式の文字列の値です。

Command> SELECT UNISTR ('A\00E4a') FROM dual;
<Aäa> 1 row found.

USER

データベースに現在接続しているTimesTenユーザーの名前を返します。

SQL構文

USER

パラメータ

USERにはパラメータがありません。

例

データベースに現在接続しているユーザーの名前を返すには、次の文を使用します。

SELECT USER FROM dual;

5 検索条件

検索条件には、選択、更新または削除する行を選択するための条件を指定します。検索条件は、INSERT...SELECT、UPDATEなどのDML文、およびCREATE VIEWなどの一部のDDL文の句や式に指定できるパラメータです。

検索条件の一般的な構文

検索条件は、単一の条件、または論理演算子ANDやORによって連結された複数の条件です。条件は、式においてTRUE、FALSE、UNKNOWNとして評価される処理です。行に対して条件がTRUEと評価された場合、その行はそれ以降の処理対象になります。条件がFALSEまたはNULLと評価された場合、行は処理対象とはなりません。

SQL構文

[NOT]
{BetweenPredicate | ComparisonPredicate | InPredicate |
LikePredicate | NullPredicate | InfinitePredicate | NaNPredicate |
QuantifiedPredicate |(SearchCondition)}
[{AND | OR} [NOT]
{BetweenPredicate | ComparisonPredicate | InPredicate |
LikePredicate | NullPredicate | QuantifiedPredicate | (SearchCondition)}
] [...]

パラメータ

構成要素

説明

NOT、AND、OR

論理演算子には、次のものがあります。

- NOTは、それに続く条件の値を否定します。

- ANDで結ばれた2つの条件がTRUEと評価された場合、TRUEと評価されます。

- ORで結ばれた条件のいずれか一方がTRUEと評価された場合はTRUEと評価され、いずれもFALSEと評価された場合はFALSEと評価されます。

- 条件がNULLと評価された場合の演算子の動作については、「説明」を参照してください。

BetweenPredicate

式が一定の値の範囲に含まれているかどうかを判断します。たとえば、A BETWEEN B AND CはA >= B AND A<= Cと同じです。

ComparisonPredicate

<、<=、>、>=、=、<>のいずれかの演算子を使用して、2つの式(または2つの式のリスト)を比較します。

InPredicate

指定したセット内の要素と式(または式のリスト)が一致するかどうかを判断します。

ExistsPredicate

副問合せが行を返すかどうかを判断します。

LikePredicate

特定の文字列パターンが式に含まれているかどうかを判断します。

NullPredicate

値がNULLであるかどうかを判断します。

InfinitePredicate

式が無限大(正または負の無限大)であるかどうかを判断します。

NaNPredicate

式が演算での未定義の結果(非数)であるかどうかを判断します。

QuantifiedPredicate

指定したセットと式(または式のリスト)に特定の関係があるかどうかを判断します。

(SearchCondition)

前述のいずれかの条件をカッコで囲みます。

説明

- 検索条件の条件は、次のように評価されます。

- カッコで囲んだ条件は、最初に評価されます。

- NOTは、各条件に対して適用されます。

- ANDは、右側の条件に、左から右の方向に適用されます。

- ORは、末尾の条件に、左から右の方向に適用されます。

図5-1は、論理演算によって算出される値を示します。疑問符(?)は、NULL値を示します。

図5-1 論理演算によって算出される値

- 行の検索条件がNULLと評価された場合、行は検索条件を満たさないため処理対象になりません。

- 互換性のあるデータ型のみを比較できます。

- TT_TINYINT、TT_SMALLINT、TT_INTEGER、TT_BIGINT、NUMBER、BINARY_FLOATおよびBINARY_DOUBLEは、互換性があります。

- CHAR、VARCHAR2、BINARYおよびVARBINARYは、長さに関係なく互換性があります。

- CHAR、VARCHAR2、NCHAR、NVARCHAR2、TT_TIME、DATEおよびTIMESTAMPは、互換性があります。

- 比較演算での値の拡張については、第3章「式」を参照してください。

- 互換性のある異なるデータ型の値をTimesTenで比較する方法については、「数値データ型」を参照してください。

ALL/ NOT IN条件(副問合せ)

ALLまたはNOT IN条件は、副問合せが返すすべての値と同じ方法で比較の左側のオペランドを比較する必要があることを示します。ALL条件は、式(または式のリスト)が、副問合せによって返されるすべての行と、比較演算子で指定したとおりの関係である場合にTRUEと評価されます。同様に、NOT IN条件は、式(または式のリスト)が副問合せによって返される値と一致しない場合にTRUEと評価されます。

SQL構文

RowValueConstructor {CompOp ALL | NOT IN} (Subquery)

RowValueConstructorの構文は、次のとおりです。

RowValueConstructorElement | (RowValueConstuctorList) | Subquery

RowValueConstructorListの構文は、次のとおりです。

RowValueConstructorElement [{, RowValueConstructorElement} ... ]

RowValueConstructorElementの構文は、次のとおりです。

Expression | NULL

CompOpの構文は、次のとおりです。

{= | <> | > | >= | < | <= }

パラメータ

構成要素

説明

Expression

式の構文の詳細は、「式の指定」を参照してください。ALL条件には、数値式も数値以外の式も使用できますが、両方の式の型には互換性がある必要があります。

=

等しい。

<>

異なる。

>

より大きい。

>=

以上。

<

未満。

<=

以下。

Subquery

副問合せの構文については、「副問合せ」を参照してください。

説明

- ALL条件では、0(ゼロ)行以上の行を返し、キーワードALLを使用して変更される比較演算子を使用します。互換性のある異なるデータ型の値をTimesTenで比較する方法については、「数値データ型」を参照してください。

- RowValueConstructorListが指定されている場合は、演算子=および<>のみを使用できます。

例

副問合せのあるNOT INの例です。

SELECT * FROM customers
WHERE cid NOT IN
(SELECT cust_id FROM returns)
AND cid > 5000;

SELECT * FROM customers
WHERE cid NOT IN
(SELECT cust_id FROM returns)
AND cid NOT IN
(SELECT cust_id FROM complaints);

SELECT COUNT(*) From customers
WHERE cid NOT IN
(SELECT cust_id FROM returns)
AND cid NOT IN
(SELECT cust_id FROM complaints);

exclBookList以外の本または価格が$20より高いすべての本を選択する例を示します。

SELECT * FROM books
WHERE id NOT IN (SELECT id FROM exclBookList) OR books.price>20;

次の問合せは、job_history表からemployee_idおよびjob_idを返します。この例では、NOT IN条件に式のリストおよび副問合せを使用しています。

Command> SELECT employee_id, job_id FROM job_history
> WHERE (employee_id, job_id)
> NOT IN (SELECT employee_id, job_id FROM employees);
< 101, AC_ACCOUNT >
< 101, AC_MGR >
< 102, IT_PROG >
< 114, ST_CLERK >
< 122, ST_CLERK >
< 176, SA_MAN >
< 200, AC_ACCOUNT >
< 201, MK_REP >
8 rows found.

ALL/ NOT IN条件(値リスト)

ALL/NOT IN限定条件は、指定された値のリストと式(または式のリスト)を比較します。ALL条件は、ValueListのすべての値が、式(または式のリスト)と比較演算子に指定した関係にある場合にTRUEと評価されます。同様に、NOT IN条件は、式(または式のリスト)が、指定されたリスト内の値のいずれとも一致しない場合にTRUEと評価されます。

SQL構文

RowValueConstructor {CompOp ALL | NOT IN} ValueList

RowValueConstructorの構文は、次のとおりです。

RowValueConstructorElement | (RowValueConstructorList) |

RowValueConstructorListの構文は、次のとおりです。

RowValueConstructorElement[{, RowValueConstructorElement} ... ]

RowValueConstructorElementの構文は、次のとおりです。

Expression | NULL

CompOpの構文は、次のとおりです。

{= | <> | > | >= | < | <= }

ValueListの要素が1つの構文は、次のとおりです(カッコは不要です)。

ConstantExpression

ValueListの要素が複数ある構文は、次のとおりです。

({ConstantExpression} [,...] )

ValueListが空の構文は、次のとおりです。

( )

パラメータ

構成要素

説明

Expression

取得する値を指定します。ValueListの値は、式と互換性がある必要があります。式の構文については、「式の指定」を参照してください。

ConstantExpression

定数値または定数値になる式(数字、文字列、日付など)を指定します。バインドされた値(?または:DynamicParameter)、NULL、および定数値を返す関数のコールのサポートが含まれます。

=

等しい。

<>

異なる。

>

より大きい。

>=

以上。

<

未満。

<=

以下。

ALL

ValueListのすべての値が、式(または式のリスト)と比較演算子に指定した関係にある場合にTRUEとなります。

ValueList

値のリストはRowValueConstructor値と比較されます。
ValueListは、空のリストにするか(SQL生成ツールで生成される場合もある)、ConstantExpressionで構成できます。

ValueListには、列参照、シーケンス、副問合せ、ROWID値、またはROWNUM値を含めることはできません。

RowValueConstructorがリストの場合は、ValueListをネストできます。例: (x, y) not in ((1+1, 2), (abs(-1), 5+1))

説明

- Expressionの値がXで、(a,b, ..., z)がValueListの要素、OPが比較演算子の場合は、次のような関係となります。

- X OP ALL (a,b,...,z)は、X OP a AND X OP b AND...AND X OP zと同じです。

- Expressionの値がXで、(a,b,..., z)がValueListの要素である場合は、次のような関係となります。

- X NOT IN (a,b,...,z)は、NOT (X IN (a,b,...,z))と同じです。

- すべての文字データ型は、NLS_SORTセッション・パラメータの現在の値に従って比較されます。

- 互換性のある異なるデータ型の値をTimesTenで比較する方法については、「数値データ型」を参照してください。

- ALLを設定した、NOT INまたはNOT EXISTSを、OR式で指定できます。

- ALLを設定した、INまたはEXISTSを、OR式で指定できます。

- 空のValueListを評価すると、Expression NOT INの結果はTRUEとなります。

- RowValueConstructorListが指定されている場合は、演算子=および<>のみを使用できます。

例

NOT IN条件で空の選択リストを問い合せる例を示します。

SELECT * FROM t1 WHERE x1 NOT IN ();

ValueListの例は、「ANY / IN条件(value list)」の例の項を参照してください。

ANY/ IN条件(副問合せ)

ANY条件は、比較演算子を使用して2つの式を比較します。最初の式が、副問合せによって返されるすべての行と、比較演算子で指定したとおりの関係である場合、条件はTRUEと評価されます。同様に、IN条件は、表の副問合せと式(または式のリスト)を比較します。式(または式のリスト)が副問合せによって返された値と等しい場合、IN条件はTRUEと評価されます。

SQL構文

RowValueConstructor {CompOp ANY | IN} (Subquery)

RowValueConstructorの構文は、次のとおりです。

RowValueConstructorElement | (RowValueConstructorList) | Subquery

RowValueConstructorListの構文は、次のとおりです。

RowValueConstructorElement[{, RowValueConstructorElement} ... ]

RowValueConstructorElementの構文は、次のとおりです。

Expression | NULL

CompOpの構文は、次のとおりです。

{= | <> | > | >= | < | <= }

パラメータ

構成要素

説明

Expression

式の構文の詳細は、「式の指定」を参照してください。ANY条件には、数値式も数値以外の式も使用できますが、両方の式の型には互換性がある必要があります。

=

等しい。

<>

異なる。

>

より大きい。

>=

以上。

<

未満。

<=

以下。

Subquery

副問合せの構文については、「副問合せ」を参照してください。

説明

ANY条件では、0(ゼロ)行以上の行を返し、キーワードANYを使用して変更される比較演算子を使用します。互換性のある異なるデータ型の値をTimesTenで比較する方法については、「数値データ型」を参照してください。

例

この例では、1件以上の未発送の発注がある顧客のリストを取得します。

SELECT customers.name FROM customers
WHERE customers.id = ANY
(SELECT orders.custid FROM orders
WHERE orders.status = 'unshipped');

これは、副問合せを含むIN条件の例です。1件以上の未発送の発注がある顧客をSELECT文で選択します。

SELECT customers.name FROM customers
WHERE customers.id IN
(SELECT orders.custid FROM orders
WHERE orders.status = 'unshipped');

この例では、IN条件に副問合せを指定する集計問合せを使用して、exclBookListにある本の最高価格を検索します。

SELECT MAX(price) FROM books WHERE id IN (SELECT id FROM exclBookList);

IN条件および副問合せに式のリストを使用した例を示します。

SELECT * FROM t1 WHERE (x1,y1) IN (SELECT x2,y2 FROM t2);

ANY条件および副問合せに式のリストを使用した例を示します。

SELECT * FROM t1 WHERE (x1,y1) < ANY (SELECT x2,y2 FROM t2);

次に、ANY条件に式のリストを使用した例を示します。

Command> columnlabels on;
Command> SELECT * FROM t1;
X1, Y1
< 1, 2 >
< 3, 4 >
2 rows found.
Command> SELECT * FROM t2;
X2, Y2
< 3, 4 >
< 1, 2 >
2 rows found.

ANY/ IN条件(値リスト)

ANYまたはIN限定条件は、指定された値のリストと式(または式のリスト)を比較します。ANY条件は、ValueListの1つ以上の値が、式(または式のリスト)と比較演算子に指定した関係にある場合にTRUEと評価されます。同様に、IN条件は、式(または式のリスト)が、指定されたリスト内の値のいずれかと一致する場合にTRUEと評価されます。

SQL構文

RowValueConstructor {CompOp {ANY | SOME} | IN} ValueList

RowValueConstructorの構文は、次のとおりです。

RowValueConstructorElement | (RowValueConstructorList) |

RowValueConstructorListの構文は、次のとおりです。

RowValueConstructorElement[{, RowValueConstructorElement} ... ]

RowValueConstructorElementの構文は、次のとおりです。

Expression | NULL

CompOpの構文は、次のとおりです。

{= | <> | > | >= | < | <= }

ValueListの要素が1つの構文は、次のとおりです(カッコは不要です)。

ConstantExpression

ValueListの要素が複数ある構文は、次のとおりです。

({ConstantExpression} [,...] )

ValueListが空の構文は、次のとおりです。

( )

パラメータ

構成要素

説明

Expression

取得する値を指定します。ValueListの値は、式と互換性がある必要があります。式の構文については、「式の指定」を参照してください。

ConstantExpression

定数値または定数値になる式(数字、文字列、日付など)を指定します。バインドされた値(?または:DynamicParameter)、NULL、および定数値を返す関数のコールのサポートが含まれます。

=

等しい。

<>

異なる。

>

より大きい。

>=

以上。

<

未満。

<=

以下。

{ANY|
SOME}

ValueListの1つ以上の値が、式(または式のリスト)と比較演算子に指定した関係にある場合にTRUEとなります。SOMEはANYのシノニムです。

ValueList

値のリストはRowValueConstructor値と比較されます。
ValueListは、空のリストにするか(SQL生成ツールで生成される場合もある)、ConstantExpressionで構成できます。

ValueListには、列参照、シーケンス、副問合せ、ROWID値、またはROWNUM値を含めることはできません。

RowValueConstructorがリストの場合は、ValueListをネストできます。例: (x, y) not in ((1+1, 2), (abs(-1), 5+1))

説明

- Expressionの値がXで、(a,b, ..., z)がValueListの要素、OPが比較演算子の場合は、次のような関係となります。

- X OP ANY (a,b,...,z)は、X OP a OR X OP b OR...OR X OP zと同じです。

- Expressionの値がXで、(a,b,..., z)がValueListの要素である場合は、次のような関係となります。

- X IN (a,b,...,z)は、X = a OR X = b OR...OR X = zと同じです。

- すべての文字データ型は、NLS_SORTセッション・パラメータの現在の値に従って比較されます。

- 互換性のある異なるデータ型の値をTimesTenで比較する方法については、「数値データ型」を参照してください。

- 空のValueListを評価すると、Expression INの結果はFALSEとなります。

例

項目100、200または300の発注が含まれている項目番号をすべて選択します。

SELECT DISTINCT OrderItems.ItemNumber
FROM OrderItems
WHERE OrderItems.Quantity = ANY (100, 200, 300)

重量が12、16、17の部品の番号を検索します。

SELECT Parts.PartNumber FROM Parts
WHERE Parts.Weight IN (12, 16, 17);

シリアル番号が'1123-P-01'、'1733-AD-01'、:SerialNumberまたは:SerialIndである部品の部品番号を検索します。:SerialNumberと:SerialIndは動的パラメータで、その値は実行時に指定されます。

SELECT PartNumber FROM Purchasing.Parts
WHERE SerialNumber
IN ('1123-P-01', '1733-AD-01',:SerialNumber, :SerialInd);

次の例では、IN条件で空の選択リストを問い合せます。

SELECT * FROM t1 WHERE x1 IN ();

次の例では、INを使用した式のリストを使用します。

SELECT * FROM t1 WHERE (x1,y1) IN ((1,2), (3,4));

次の3つの例は、ttIsqlを使用した、定数式の使用を示しています。表TにはNUMBER型の列Xが1つあり、次のデータがあります。

Command> select * from t;
< 1 >
< 2 >
< 3 >
< 4 >
< 5 >
5 rows found.

最初の例は、問合せで定数式を使用します。

Command> select x from t where x in (abs(1-2), to_number('1')+2, 3);
< 1 >
< 3 >
2 rows found.

2番目の例は、動的パラメータも使用します。

Command> select x from t where x = any (1+?, 1+3, ?);

Type '?' for help on entering parameter values.
Type '*' to end prompting and abort the command.
Type '-' to leave the parameter unbound.
Type '/;' to leave the remaining parameters unbound and execute the command.

Enter Parameter 1 '_QMARK_1' (NUMBER) > 1
Enter Parameter 2 '_QMARK_2' (NUMBER) > 5
< 2 >
< 4 >
< 5 >
3 rows found.

3番目の例は、NULLも使用します。

Command> select x from t where x in (null, 1, 3+1, 2);
< 1 >
< 2 >
< 4 >
3 rows found.

次の例では、DATE型の列MYDATEが1つあり、次のデータを持つ表T_DATEを考慮します。

Command> select * from t_date;
< 2013-08-13 00:00:00 >
< 2013-08-14 00:00:00 >
< 2013-08-15 00:00:00 >
3 rows found.

この例では、日付の定数式を使用します。

Command> select mydate from t_date where mydate in (date '2013-08-12'+1,
date '2013-08-12'+2);
< 2013-08-13 00:00:00 >
< 2013-08-14 00:00:00 >
2 rows found.

次の例では、VARCHAR2(32)型の列COL1が1つあり、次のデータを持つ表MYCHARSを考慮します。

Command> select * from mychars;
< abc >
< def >
< ghi >
3 rows found.

この例は、定数式を戻す関数のコールを使用します。

Command> select col1 from mychars where col1 in (ltrim('abcdef', 'abc'));
< def >
1 row found.

次に、IN条件に式のリストを使用した例を示します。この問合せは、DEPARTMENT_ID = 240およびLOCATION_ID = 1700である部門のDEPARTMENT_NAMEを返します。

注意:
IN条件の右側の式は、二重カッコ(( ))で囲む必要があります。

Command> SELECT department_name FROM departments
> WHERE (department_id, location_id) IN ((240,1700));
< Government Sales >
1 row found.

BETWEEN条件

BETWEEN条件では、値が次のとおりであるかどうかを判断します。

- 2番目の値以上であること

および

- 3番目の値以下であること

値が指定した範囲内にあれば条件はTRUEと評価されます。

SQL構文

Expression1 [NOT] BETWEEN Expression2 AND Expression3

パラメータ

パラメータ

説明

Expression1、Expression2、Expression3

式の構文の詳細は、「式の指定」を参照してください。BETWEEN条件には、数値式も数値以外の式も使用できますが、すべての式の型には互換性がある必要があります。

説明

- 2番目の値が3番目の値より大きい場合、BETWEENではFALSEと評価され、NOT BETWEENではTRUEと評価されます。

- BETWEENまたはNOT BETWEENのExpression2またはExpression3のいずれかがNULLである場合については、次の表を参照してください。

Expression2

Expression3

BETWEEN

NOT BETWEEN

<= Expression1

NULL

NULL

NULL

> Expression1

NULL

FALSE

TRUE

NULL

>= Expression1

NULL

NULL

NULL

< Expression1

NULL

NULL

- Expression2とExpression3は使用できる値の範囲を表し、Expression2が指定された範囲内で使用できる最小の値を、Expression3が使用できる最大の値を示します。BETWEEN条件では、小さい値を先に指定する必要があります。
比較については、「比較条件」を参照してください。

- BETWEEN条件は、NCHAR型ではサポートされません。

例

$250.00以下および$1500.00以上の価格の部品を25%割り引きます。

UPDATE Purchasing.Parts
SET SalesPrice = SalesPrice * 0.75
WHERE SalesPrice NOT BETWEEN 250.00 AND 1500.00;

比較条件

比較条件は、比較演算子を使用して2つの式を比較します。最初の式が2番目の式と、比較演算子で指定したとおりの関係である場合に、条件はTRUEと評価されます。

SQL構文

RowValueConstructor CompOp RowValueConstructor2

RowValueConstructorの構文は、次のとおりです。

RowValueConstructorElement | (RowValueConstructorList) | ScalarSubquery

RowValueConstructorListの構文は、次のとおりです。

RowValueConstructorElement[{, RowValueConstructorElement} ... ]

RowValueConstructor2(1つの式)の構文は、次のとおりです。

Expression

RowValueConstructor2(式のリスト)の構文は、次のとおりです。

((Expression[,...]))

CompOpの構文は、次のとおりです。

{= | <> | > | >= | < | <= }

パラメータ

構成要素

説明

Expression

式の構文の詳細は、「式の指定」を参照してください。比較条件には、数値式も数値以外の式も使用できますが、両方の式には互換性がある必要があります。

ScalarSubquery

単一の値を返す副問合せ。スカラー副問合せとその制限については、「副問合せ」を参照してください。

=

等しい。

<>

異なる。

>

より大きい。

>=

以上。

<

未満。

<=

以下。

説明

- すべての文字データ型は、NLS_SORTセッション・パラメータの現在の値に従って比較されます。

- RowValueConstructorListが指定されている場合は、演算子=および<>のみを使用できます。

- 互換性のある異なるデータ型の値をTimesTenで比較する方法については、「数値データ型」を参照してください。

- 比較条件の片方の辺がUNKNOWNまたはNULLと評価された場合、これは条件および条件の否定のいずれもTRUEではないことを意味します。

- NULL値自体は演算子または条件のオペランドとして直接使用できます。たとえば、(1 = NULL)比較がサポートされます。これは、(1 = CAST(NULL AS INT))のように、NULLを適切なデータ型にキャストする場合と同じです。両方の方法がサポートされ、同じ結果を返します。

例

20日未満の期間で配送する必要のある部品の番号を検索します。

SELECT PartNumber FROM Purchasing.SupplyPrice
WHERE DeliveryDays < 20;

この問合せは、salary=9500かつcommission_pct=.25である従業員のlast_nameを返します。

注意:
等号の右側の式は、二重カッコ(( ))で囲む必要があります。

Command> SELECT last_name FROM employees
> WHERE(salary,commission_pct) = ((9500,.25));
< Bernstein >
1 row found.

この問合せは、manager_id = 205である従業員のlast_nameを返します。従業員のdepartment_idおよびmanager_idは、employeesとdepartmentsの両方の表に格納されています。departments表から情報を抽出するには、副問合せを使用します。

Command> SELECT last_name FROM employees
> WHERE (department_id, manager_id) =
> (SELECT department_id, manager_id FROM departments
> WHERE manager_id = 205);
< Gietz >
1 row found.

EXISTS条件

EXISTS条件は、表の副問合せの有無を確認します。EXISTSの場合は副問合せで1行以上を返す場合、NOT EXISTSの場合は行を返さない場合に、条件がTRUEと評価されます。

SQL構文

[NOT] EXISTS (Subquery)

パラメータ

EXISTS条件には、次のパラメータがあります。

パラメータ

説明

Subquery

副問合せの構文については、「副問合せ」を参照してください。

説明

- 副問合せとEXISTSを組み合せて指定すると、行の存在についてテストできます。EXISTSは行の空のセットの有無をテストします。副問合せが1行以上の行を返す場合、副問合せはTRUEと評価されます。

- 副問合せとNOT EXISTSを組み合せて指定すると、行の不在についてテストできます。NOT EXISTSは行の空のセットの有無をテストします。副問合せが行を返さない場合、副問合せはTRUEと評価されます。

- 結合順序がNOT EXISTS副問合せの結合順序の要件と競合するttOptSetOrder組込みプロシージャを使用して発行される場合、指定された結合順序は無視され、警告が発行されて問合せが実行されます。

- 次の表に、TimesTenでのEXISTSおよびNOT EXISTSの使用方法について、サポートの有無を示します。

問合せ/副問合せの説明

NOT EXIST

EXIST

副問合せでの集計

サポートされている

サポートされている

メインの問合せでの集計

サポートされている

サポートされている

OR句での副問合せ

サポートされている

サポートされている

ttOptSetOrder組込みプロシージャを使用した結合順序

制限付きサポート

サポートされている

例

1件以上の未発送の発注がある顧客を検索します。

SELECT customers.name FROM customers
WHERE EXISTS (SELECT 1 FROM orders
WHERE customers.id = orders.custid
AND orders.status = 'unshipped');

未発送の発注がない顧客を検索します。

SELECT customers.name FROM customers
WHERE NOT EXISTS (SELECT 1 FROM orders
WHERE customers.id = orders.custid
AND orders.status = 'unshipped');

IS INFINITE条件

IS INFINITE条件は、式が無限大(正の無限大(INF)または負の無限大(-INF))であるかどうかを判断します。

SQL構文

Expression IS [NOT] INFINITE

パラメータ

パラメータ

説明

Expression

テストする式。

説明

- IS INFINITE条件は、式が正または負の無限大の場合にTRUEと評価されます。

- IS NOT INFINITE条件は、式が正および負の無限大ではない場合にTRUEと評価されます。

- 式は、数値データ型、または数値データ型に暗黙的に変換可能なデータ型に解決される必要があります。

- 2つの正の無限大の値は等しくなります。2つの負の無限大の値は等しくなります。

- 浮動小数点値を含む式では、Inf、-InfまたはNaNが生成される場合があります。これらの値は、式でオーバーフローまたは例外状態が生成された場合、あるいは式内の1つ以上の値がInf、-InfまたはNaNの場合に生成される可能性があります。InfおよびNaNは、オーバーフローまたは0(ゼロ)による除算が条件の場合に生成されます。

- 集計関数では、Inf、-InfおよびNaNの値は無視されません。NULL値は無視されます。集計(または任意の選択)からInfおよびNaNを除外する場合は、IS NOT NAN条件およびIS NOT INFINITE条件の両方を使用します。

- 負の無限大(-INF)は、他のすべての値より下位にソートされます。正の無限大(INF)は、他のすべての値より上位、かつNaN(非数)およびNULL値より下位にソートされます。

- InfおよびNaNの詳細は、「INFおよびNAN」を参照してください。

IS NAN条件

IS NAN条件は、式が演算での未定義の結果(非数またはNaN)であるかどうかを判断します。

SQL構文

Expression IS [NOT] NAN

パラメータ

パラメータ

説明

Expression

テストする式。

説明

- IS NAN条件は、式が非数の場合にTRUEと評価されます。

- IS NOT NAN条件は、式が非数ではない場合にTRUEと評価されます。

- 式は、数値データ型、または数値データ型に暗黙的に変換可能なデータ型に解決される必要があります。

- 2つのNaN(非数)の値は等しくなります。

- 浮動小数点値を含む式では、Inf、-InfまたはNaNが生成される場合があります。これらの値は、式でオーバーフローまたは例外状態が生成された場合、あるいは式内の1つ以上の値がInf、-InfまたはNaNの場合に生成される可能性があります。InfおよびNaNは、オーバーフローまたは0(ゼロ)による除算が条件の場合に生成されます。

- 集計関数では、Inf、-InfおよびNaNの値は無視されません。NULL値は無視されます。集計(または任意の選択)からInfおよびNaNを除外する場合は、IS NOT NAN条件およびIS NOT INFINITE条件の両方を使用します。

- NaN(非数)は、正の無限大を含む他のすべての値より上位、かつNULL値より下位にソートされます。

- InfおよびNaNの詳細は、「INFおよびNAN」を参照してください。

IS NULL条件

IS NULL条件は、式にNULL値が含まれているかどうかを判断します。式がNULLの場合、TRUEと評価されます。NOTオプションを使用すると、式がNOT NULLの場合にTRUEと評価されます。

SQL構文

{ColumnName | Constant | Expression | LOBDataType} IS [NOT] NULL

パラメータ

パラメータ

説明

ColumnName

値を取得する列の名前。列名の詳細は、第2章「名前、ネームスペースおよびパラメータ」を参照してください。

Constant

特定の値。「定数」を参照してください。

Expression

テストする式。

LOBDataType

テストするCLOB、BLOBまたはNCLOBデータ型の値。

例

IS NULLを使用して、会社の社長(マネージャを持たない唯一の人物)を識別します。

Command> SELECT * FROM employees
> WHERE manager_id IS NULL;
< 100, Steven, King, SKING, 515.123.4567, 1987-06-17 00:00:00, AD_PRES, 24000,
<NULL>, <NULL>, 90 >
1 row found.

次の文ではIS NULLを使用して、州または都道府県を持たない場所をすべて識別しています。

Command> SELECT * FROM locations
> WHERE state_province IS NULL;
< 1000, 1297 Via Cola di Rie, 00989, Roma, <NULL>, IT >
< 1100, 93091 Calle della Testa, 10934, Venice, <NULL>, IT >
< 1300, 9450 Kamiya-cho, 6823, Hiroshima, <NULL>, JP >
< 2000, 40-5-12 Laogianggen, 190518, Beijing, <NULL>, CN >
< 2300, 198 Clementi North, 540198, Singapore, <NULL>, SG >
< 2400, 8204 Arthur St, <NULL>, London, <NULL>, UK >
6 rows found.

LIKE条件

ソースに特定のパターンが含まれている場合に、LIKE条件はTRUEと評価されます。LIKE条件は、指定されたパターンをソースで検索して、文字値の部分間の突合せを行います。

SQL構文

Source [NOT] LIKE Pattern
[ESCAPE {'EscapeChar' | {? | :DynamicParameter} }]

Patternの構文は次のとおりです。

Expression [ || Expression ] [ ... ]

パラメータ

パラメータ

説明

Source

このソースに出現する指定されたパターンがすべて検出されます。ソースには、式、列、関数の結果の文字列またはこれらの任意の組合せを指定することができ、これがパターンの突合せが行われるソースに使用される文字列になります。ソースには、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOBまたはNCLOBを使用できます。式の詳細は、第3章「式」を参照してください。NCHAR、NVARCHARまたはNCLOB内の各国語キャラクタ文字列内での検索の詳細は、「NCHAR、NVARCHAR2およびNCLOBデータ型の文字列のパターン一致」を参照してください。

Pattern

1つ以上の式により、ソース内で検索する文字パターンを示します。パターンのデータ型は、CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB、NCLOBなどの文字列データ型である必要があります。
複数の式を連結して、パターンに使用する文字列を生成できます。

パターンは文字(数字と特殊文字を含む)で構成されます。たとえば、NAME LIKE 'Annie'は、空白を含まないAnnieという名前にかぎりTRUEと評価されます。

次の1つ以上の記号を使用して、部分一致をテストする条件を使用することもできます。

- _記号は、単一の文字を表します。次に例を示します。
BOBとTOMは、ともに条件NAME LIKE '_O_'を満たします。

- %記号は、0(ゼロ)文字以上の文字列を表します。次に例を示します。
MARIEとRENATEは、ともに条件NAME LIKE '%A%'を満たします。

_と%記号は、パターンの中で自由に組み合せて繰り返し使用できます。ただし、記号をパターン内のリテラルとして使用するには、ESCAPE句を使用し、EscapeCharパラメータで定義したエスケープ文字を、それらの記号の前に指定する必要があります。

Expression

パターン内に含まれる式には、列、動的パラメータまたは文字列に評価される関数の結果を使用できます。式の構文の詳細は、「式の指定」を参照してください。

EscapeChar

パターン内の_と%記号をリテラルとして解釈させる場合に使用できる、オプションのエスケープ文字を定義します。
エスケープ文字は単一の文字である必要があります。エスケープ文字をパターンに使用する場合は、その後に続けてエスケープ文字自体、_記号または%記号と指定する必要があります。そのようなペアによって、パターンの2番目文字の単一リテラルの出現が表現されます。エスケープ文字では、大文字と小文字は常に区別されます。_または%をエスケープ文字として使用することはできません。

?
DynamicParameter

準備されたSQL文の動的パラメータです。パラメータの値は、文の実行時に設定されます。

説明

- エスケープ文字が指定されている場合を除き、パターン内の_または%記号はワイルド・カード文字として機能します。エスケープ文字を指定した場合、それに後続するワイルド・カードまたはエスケープ文字はリテラルとして扱われます。エスケープ文字に後続する文字がワイルド・カードまたはエスケープ文字ではない場合、エラーになります。

- 式、列、文字列、動的パラメータまたは関数の結果を組み合せてパターンを指定する場合、||演算子を使用してアイテムを連結し、最終的なパターンを指定できます。

- LIKE条件を使用する文字式を比較するすべての条件において、大/小文字は区別されます。

- 式の値、パターン、エスケープ文字がNULLの場合、LIKE条件はNULLと評価されます。

- LIKE条件がマルチバイト・キャラクタ・セットで使用される場合、処理に時間がかかることがあります。

- NCHAR、NVARCHARまたはNCLOB内の各国語キャラクタ文字列内での検索の詳細は、「NCHAR、NVARCHAR2およびNCLOBデータ型の文字列のパターン一致」を参照してください。

例

姓が'Sm'で始まる従業員を検索します。

Command> SELECT employee_id, last_name,first_name FROM employees
> WHERE last_name LIKE 'Sm%'
> ORDER BY employee_id,last_name,first_name;
< 159, Smith, Lindsey >
< 171, Smith, William >
2 rows found.

姓が'SM'で始まる従業員を検索します。last_nameが大文字の'SM'で始まる従業員がいないため、この問合せでは結果は返されません。

Command> SELECT employee_id, last_name,first_name from employees
> WHERE last_name LIKE 'SM%'
> ORDER BY employee_id,last_name,first_name;
0 rows found.

ただし、姓列のソース値を大文字に変換することによって、'SM'で始まるすべての名前を検出できます。

Command> SELECT employee_id, last_name, first_name FROM employees
> WHERE UPPER(last_name) LIKE ('SM%');
< 159, Smith, Lindsey >
< 171, Smith, William >
2 rows found.

?で示される動的パラメータを使用して、姓が'Sm'で始まる従業員を実行時に検索します。

Command> SELECT employee_id, last_name,first_name FROM employees
> WHERE last_name like ?
> ORDER BY employee_id,last_name,first_name;

Type '?' for help on entering parameter values.
Type '*' to end prompting and abort the command.
Type '-' to leave the parameter unbound.
Type '/;' to leave the remaining parameters unbound and execute the command.

Enter Parameter 1 '_QMARK_1' (VARCHAR2) > 'Sm%'
< 159, Smith, Lindsey >
< 171, Smith, William >
2 rows found.

:aで示されるバインド変数を使用して、姓が'Sm'で始まる従業員を実行時に検索します。

Command> SELECT employee_id, last_name,first_name FROM employees
> WHERE last_name LIKE :a
> ORDER BY employee_id,last_name,first_name;

Type '?' for help on entering parameter values.
Type '*' to end prompting and abort the command.
Type '-' to leave the parameter unbound.
Type '/;' to leave the remaining parameters unbound and execute the command.

Enter Parameter 1 'A' (VARCHAR2) > 'Sm%'
< 159, Smith, Lindsey >
< 171, Smith, William >
2 rows found.

姓が'Smit'で始まる従業員について、そのマネージャの姓を検索します。従業員の名前と姓、およびマネージャの姓を表示します。

Command> SELECT e1.first_name || ' ' || e1.last_name||' works for '||e2.last_name
>    FROM employees e1, employees e2
>    WHERE e1.manager_id = e2.employee_id
>    AND e1.last_name like 'Smit';
< Lindsey Smith works for Partners >
< William Smith works for Cambrault >
2 rows found.

この問合せパターンでは、検索対象のパターンとして、last_name列を参照します。

Command> SELECT e1.first_name || ' ' || e1.last_name||
> ' works for ' || e2.last_name
> FROM employees e1, employees e2
> WHERE e1.manager_id = e2.employee_id
> AND 'Smith' like e1.last_name;
< Lindsey Smith works for Partners >
< William Smith works for Cambrault >
2 rows found.

パターンには、列または関数の結果を指定できます。次の例では、UPPER関数を、ソースのlast_name列と検索対象の'ma'検索文字列の両方で使用します。

Command> SELECT last_name, first_name FROM employees
> WHERE upper(last_name) LIKE UPPER('ma%');
< Markle, Steven >
< Marlow, James >
< Mallin, Jason >
< Matos, Randall >
< Marvins, Mattea >
< Mavris, Susan >
6 rows found.

次の問合せは、動的パラメータを使用したパターンのリクエストを示します。

Command> SELECT first_name || ' ' || last_name
> FROM employees WHERE last_name like ?;

Type '?' for help on entering parameter values.
Type '*' to end prompting and abort the command.
Type '-' to leave the parameter unbound.
Type '/;' to leave the remaining parameters unbound and execute the command.

Enter Parameter 1 '_QMARK_1' (VARCHAR2) > 'W%'
< Matthew Weiss >
< Alana Walsh >
< Jennifer Whalen >
3 rows found.

次の問合せでは、パターンで文字列と動的パラメータを組み合せています。

Command> SELECT first_name || ' ' || last_name
> FROM employees WHERE last_name like 'W' || ?;

Type '?' for help on entering parameter values.
Type '*' to end prompting and abort the command.
Type '-' to leave the parameter unbound.
Type '/;' to leave the remaining parameters unbound and execute the command.

Enter Parameter 1 '_QMARK_1' (VARCHAR2) > '%'
< Matthew Weiss >
< Alana Walsh >
< Jennifer Whalen >
3 rows found.

NCHAR、NVARCHAR2およびNCLOBデータ型の文字列のパターン一致

LIKE条件は、NCHAR、NVARCHAR2およびNCLOB型の文字列のパターン一致に使用できます。パターン一致文字は、次のとおりです。

文字

説明

U+005F SPACING UNDERSCORE

単一のUnicode文字を表します。

U+0025 PERCENT SIGN

0(ゼロ)文字以上のUnicode文字列を表します。

説明

- エスケープ文字は、単一のUnicode文字またはパラメータと同様にサポートされます。

- LIKEオペランドの型は、すべてのキャラクタ・タイプの組合せになります。

- LIKE条件では、大/小文字およびアクセントを区別しないNLS_SORTがサポートされています。

例

これらの例では、Unicode文字U+0021 EXCLAMATION MARKは、Unicode文字U+005F SPACING UNDERSCOREのエスケープとして使用されています。Unicode文字U+0025 PERCENT SIGNはエスケープされず、パターン一致としてみなされます。

VendorNameは、NCHARまたはNVARCHAR2の列です。

SELECT VendorName FROM Purchasing.Vendors
WHERE VendorName LIKE N'ACME!_%' ESCAPE N'!';

この例は次の例と同等です。

SELECT VendorName FROM Purchasing.Vendors
WHERE VendorName LIKE N'ACME!\u005F\u0025' ESCAPE N'!';

6 SQL文

この章では、TimesTenで使用可能なSQL文について説明します。

通常、SQL文とはデータ操作言語(DML)文またはデータ定義言語(DDL)文のいずれかです。

DML文はデータベース・オブジェクトを変更します。DML文の例として、INSERT、UPDATEおよびDELETEがあげられます。

DDL文はデータベース・スキーマを変更します。DDL文の例として、CREATE TABLEおよびDROP TABLEがあげられます。

SQL文内のコメント

文内のキーワード、パラメータまたは句読点の間に、コメントを表示できます。次の2通りの方法で、文内にコメントを含めることができます。

- スラッシュとアスタリスク(/*)を使用してコメントを開始します。この後にコメントのテキストを続けます。テキストは複数行にまたがってもかまいません。アスタリスクとスラッシュ(*/)を使用してコメントを終了します。開始文字と終了文字は、空白や改行によってテキストから切り離す必要はありません。

- ハイフン2個(--)を使用してコメントを開始します。この後にコメントのテキストを続けます。テキストは1行しか使用できません。コメントの最後に改行を使用します。

文レベルのオプティマイザ・ヒント

文レベルのオプティマイザ・ヒントは、TimesTen問合せオプティマイザに命令を渡すSQL文のコメントです。問合せに対して最適な実行計画を選択するとき、オプティマイザではこれらのヒントが考慮されます。

内容は次のとおりです。

- SQL構文

- パラメータ

- 説明

- 文レベルのオプティマイザ・ヒントをサポートするSQL文

- ヒントの理解

- 例

文レベルとトランザクション・レベルのオプティマイザ・ヒントの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のオプティマイザ・ヒントを使用した実行計画の変更に関する項も参照してください。

SQL構文

SQL文には、文レベルのオプティマイザ・ヒントが1つ以上あるコメントを1つ付けることができます。文レベルのオプティマイザ・ヒントをサポートするSQL文は、DELETE、INSERT、MERGE、SELECT、UPDATE、INSERT...SELECT、およびCREATE TABLE...AS SELECTです。ヒントはDELETE、INSERT、MERGE、SELECT、またはUPDATEキーワードの後に記述します。(DELETE、INSERT、MERGE、SELECT、またはUPDATEキーワードは、SQL VERBとも呼びます。)表6-1「SQL文への文レベル・ヒントの配置」にSQL文へのヒントの正しい配置を示します。

文レベルのオプティマイザ・ヒントはコメント構文に埋め込みます。TimesTenでは、1行のコメントおよび複数行のコメント内のヒントがサポートされます。ヒントのあるコメントが複数行の場合は、コメント構文/*+...*/を使用します。ヒントのあるコメントが1行の場合は、コメント構文--+を使用します。

構文

SQL VERB {/*+ [CommentText] hint [{hint|CommentText} [...]] */ |
--+ [CommentText] hint [{hint|CommentText} [...]] }
hint::= FlagHint | JoinOrderHint | IndexHint
FlagHint::= FlagName (0|1)
JoinOrderHint::= TT_JoinOrder (CorrelationName CorrelationName [...])
IndexHint::= TT_Index (CorrelationName,IndexName,{0|1} [;...])
FlagName::= TT_BranchAndBound|TT_DynamicLoadEnable|TT_DynamicLoadErrorMode|
TT_FirstRow|TT_ForceCompile|TT_GenPlan|TT_GlobalLocalJoin|
TT_GlobalProcessing|TT_HashGb|TT_HashScan|TT_IndexedOr|TT_MergeJoin|
TT_NestedLoop|TT_NoRemRowIdOpt|TT_Range|TT_Rowid|TT_RowLock|
TT_ShowJoinOrder|TT_TblLock|TT_TblScan|TT_TmpHash|TT_TmpRange|
TT_TmpTable|TT_UseBoyerMooreStringSearch

パラメータ

パラメータ

説明

SQL VERB

SQL VERBはDELETE、INSERT、MERGE、SELECT、UPDATEキーワードのいずれかを指します。文レベルのオプティマイザ・ヒントをコメント構文に埋め込みます。コメント構文に文レベルのオプティマイザ・ヒントがある場合は、コメント構文はSQL VERBの後に記述する必要があります。

/*+ hint */

1つ以上のヒントがコメント構文に埋め込まれています。コメント構文は1行または複数行になります。プラス記号(+)は、文レベルのオプティマイザ・ヒントの開始を意味します。
アスタリスク(*)とプラス記号(+)の間にスペースは入れません。

--+ hint

1つ以上のヒントがコメント構文に埋め込まれています。コメント構文は1行のみになります。プラス記号(+)は、文レベルのオプティマイザ・ヒントの開始を意味します。
ダッシュ(-)とプラス記号(+)の間にスペースは入れません。

hint

文レベルのオプティマイザ・ヒント。SQL文では、1つのコメント文字列として、1行以上の文レベルのオプティマイザ・ヒントがサポートされます。1つのSQL文に対して1つ以上のヒントが含まれるコメントを1つ指定できます。コメントはDELETE、INSERT、MERGE、SELECT、またはUPDATEキーワードの後に記述する必要があります。
コメント内に複数のヒントを指定する場合は、ヒント間にスペースを入れないようにします。

文レベルのオプティマイザ・ヒントは、1つのSQL文を範囲とし、問合せごとにセマンティクスを持ちます。

文レベルのオプティマイザ・ヒントの名前と型は、トランザクション・レベルのオプティマイザ・ヒントにマップされます。トランザクション・レベルのオプティマイザ・ヒントは、組込みプロシージャttOptSetFlag、ttOptSetOrder、またはttOptUseIndexにより呼び出されます。

トランザクション・レベルのヒントは、そのトランザクションを範囲とし、トランザクション・セマンティクスを持ちます。自動コミットは0に設定する必要があります。トランザクション・レベルのオプティマイザ・ヒントは、トランザクションの間有効です。

詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』の「ttOptSetFlag」、「ttOptSetOrder」、または「ttOptUseIndex」を参照してください。

CommentText

コメント文字列内のテキスト。文レベルのオプティマイザ・ヒントとコメント・テキストの両方を1つのコメント内で使用できます。ヒントとコメント・テキスト間にスペースを入れるようにしてください。

FlagHint

FlagHintは、TimesTen問合せオプティマイザの実行計画への影響を有効または無効にする文レベルのオプティマイザ・フラグを指します。これらのフラグは、組込みプロシージャttOptSetFlagで使用されるフラグにマップされます。
文レベルのオプティマイザ・ヒント・フラグは文のみで有効で、トランザクション・レベルのオプティマイザ・ヒント・フラグはトランザクション中に有効です。

FlagName ( 0|1)

FlagNameは、文レベルのオプティマイザ・ヒント・フラグの名前を指します。
フラグの値は0か1を指定します。1を指定するとフラグが有効になります。0を指定するとフラグが無効になります。値はカッコで囲みます。

たとえば、ttIsqlで文レベルのネストされたループ・フラグを設定するには、次のように実行します。

Command> SELECT /*+ TT_NestedLoop (1)
> */ ...

ttIsqlでトランザクション・レベルのネストされたループ・フラグを設定するには、次のように実行します。

Command> AUTOCOMMIT OFF;
Command> CALL
> ttOptSetFlag('NestedLoop',1);

TT_BranchAndBound

組込みプロシージャttOptSetFlagのBranchAndBoundフラグにマップされたフラグ。

TT_DynamicLoadEnable

組込みプロシージャttOptSetFlagのDynamicLoadEnableフラグにマップされたフラグ。

TT_DynamicLoadErrorMode

組込みプロシージャttOptSetFlagのDynamicLoadErrorModeフラグにマップされたフラグ。

TT_FirstRow

組込みプロシージャttOptSetFlagのFirstRowフラグにマップされたフラグ。

TT_ForceCompile

組込みプロシージャttOptSetFlagのForceCompileフラグにマップされたフラグ。

TT_GenPlan

組込みプロシージャttOptSetFlagのGenPlanフラグにマップされたフラグ。

TT_GlobalLocalJoin

組込みプロシージャttOptSetFlagのGlobalLocalJoinフラグにマップされたフラグ。

TT_GlobalProcessing

組込みプロシージャttOptSetFlagのGlobalProcessingフラグにマップされたフラグ。

TT_HashGb

組込みプロシージャttOptSetFlagのHashGbフラグにマップされたフラグ。

TT_HashScan

組込みプロシージャttOptSetFlagのHashフラグにマップされたフラグ。

TT_IndexedOr

組込みプロシージャttOptSetFlagのIndexedOrフラグにマップされたフラグ。

TT_MergeJoin

組込みプロシージャttOptSetFlagのMergeJoinフラグにマップされたフラグ。

TT_NestedLoop

組込みプロシージャttOptSetFlagのNestedLoopフラグにマップされたフラグ。

TT_NoRemRowIdOpt

組込みプロシージャttOptSetFlagのNoRemRowIdOptフラグにマップされたフラグ。

TT_Range

組込みプロシージャttOptSetFlagのRangeフラグにマップされたフラグ。

TT_Rowid

組込みプロシージャttOptSetFlagのRowidフラグにマップされたフラグ。

TT_RowLock

組込みプロシージャttOptSetFlagのRowlockフラグにマップされたフラグ。

TT_ShowJoinOrder

組込みプロシージャttOptSetFlagのShowJoinOrderフラグにマップされたフラグ。

TT_TblLock

組込みプロシージャttOptSetFlagのTblLockフラグにマップされたフラグ。

TT_TblScan

組込みプロシージャttOptSetFlagのScanフラグにマップされたフラグ。

TT_TmpHash

組込みプロシージャttOptSetFlagのTmpHashフラグにマップされたフラグ。

TT_TmpRange

組込みプロシージャttOptSetFlagのTmpRangeフラグにマップされたフラグ。

TT_TmpTable

組込みプロシージャttOptSetFlagのTmpTableフラグにマップされたフラグ。

TT_UseBoyerMooreStringSearch

組込みプロシージャttOptSetFlagのUseBoyerMooreStringSearchフラグにマップされたフラグ。

JoinOrderHint::= TT_JoinOrder ( CorrelationName CorrelationName [...] )

JoinOrderHintは、文レベルのオプティマイザ・ヒントTT_JoinOrderの構文を指します。TT_JoinOrderヒントの指示により、オプティマイザは指定の順序で表を結合します。この結合順序は文でのみ有効です。
TT_JoinOrderおよび複数の相関名を指定します。相関名はカッコで囲みます。

CorrelationNameは、SQL文の問合せまたは副問合せで指定した表の別名を指します。このヒントを使用する際は、表の実際の名前ではなく相関名を使用してください。

たとえば、employees表とdepartments表を結合し、employees表の相関名にemps、departments表の相関名にdeptsを指定した後、ttIsqlのTT_JoinOrderヒントを指定するには、次のように実行します。

Command> SELECT /*+ TT_JoinOrder
> (EMPS DEPTS)*/...

TT_JoinOrderヒントに構文エラーがある場合、TimesTenではそのヒントは無視されます。TT_JoinOrderヒントに閉じカッコがない場合、残りのコメント文字列は無視されます。つまり、TT_JoinOrderヒントの後に追加の文レベルのオプティマイザ・ヒントを指定し、TT_JoinOrderヒントに閉じカッコがない場合、追加の文レベルのオプティマイザ・ヒントは無視されます。

組込みプロシージャttOptSetOrderを実行すると、トランザクション中の結合順序を指定できます。文レベルのオプティマイザ・ヒントTT_JoinOrderは、その文のみに有効です。

ttOptSetOrderの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttOptSetOrderに関する説明を参照してください。

IndexHint::= TT_INDEX (CorrelationName IndexName {0|1} [;...] )

IndexHintは、文レベルのオプティマイザ・ヒントTT_INDEXの構文を指します。オプティマイザに表の索引を使用するかを指示するには、TT_INDEXヒントを使用します。索引ヒントは文のみで有効です。
CorrelationNameは、SQL文の問合せまたは副問合せで指定した表の別名を指します。表の実際の名前ではなく、相関名を使用してください。

IndexNameは、オプティマイザが表で考慮する索引を指します。

オプティマイザで索引を考慮しないようにするには、0を指定します。オプティマイザで索引を考慮するようにするには、1を指定します。

たとえば、employees表の問合せにemp_name_ix索引を使用するようにオプティマイザに指示し、employees表に相関名eを指定した後、ttIsqlのTT_INDEXヒントを指定するには、次のように実行します。

Command> SELECT /*+ TT_INDEX
> (E,EMP_NAME_IX,1) */ ...

TT_INDEXヒントに複数のCorrelationName, IndexName, {0|1}を指定するには、セミコロン(;)を使用します。CorrelationName、IndexNameの各パラメータに、0または1を指定する必要があります。

TT_Indexヒントに構文エラーがある場合、TimesTenではそのヒントは無視されます。TT_Indexヒントに閉じカッコがない場合、残りのコメント文字列は無視されます。つまり、TT_Indexヒントの後に追加の文レベルのオプティマイザ・ヒントを指定し、TT_Indexヒントに閉じカッコがない場合、追加の文レベルのオプティマイザ・ヒントは無視されます。

組込みプロシージャttOptUseIndexを実行し、トランザクション中の索引ヒントを指定できます。文レベルのオプティマイザ・ヒントTT_INDEXは、その文のみに有効です。

ttOptUseIndexの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttOptUseIndexに関する説明を参照してください。

注意:
前の表で説明しているフラグの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttOptSetFlagに関する項を参照してください。

説明

- コメント構文に文レベルのオプティマイザ・ヒントを埋め込みます。/*または—でコメントを開始します。コメント構文を開始した後、プラス記号(+)を追加します。プラス記号(+)により、TimesTenではコメントがヒントのリストとして解釈されます。プラス記号(+)はコメント・デリミタの直後に記述する必要があります。(/*または--の直後)。コメント・デリミタとプラス記号(+)の間にはスペースを入れません。
次の例では、アスタリスク(*)とプラス記号(+)の間にスペースがあるため、ヒントは無視されます。

Command> SELECT /* + TT_TblScan (1) This hint is ignored because there is a
> space between the star (*) and the plus (+) sign. */ ...

- hintは、TimesTenでサポートされる文レベルのオプティマイザ・ヒントの1つです。プラス記号(+)とヒントの間にスペースを入れることができます。コメントに複数のヒントがある場合は、1つ以上のスペースでヒントを区切ります。たとえば、1行で2つのヒントを指定するには、次のように実行します。

Command> SELECT --+ TT_MergeJoin (0) TT_NestedLoop (1)
> ...

- コメント内のヒントにコメント・テキストを組み入れることができます。たとえば、次のように実行します。

Command> SELECT /*+ TT_HashScan (1) This demonstrates a hint followed by a
> comment string. */ ...

- TimesTenでは、次の場合にコメントが無視され、エラーは戻されません。

- ヒントがDELETE、INSERT、MERGE、SELECT、またはUPDATEキーワードの後に記述されていない場合。

- ヒントにスペルミスや構文エラーがある場合。同じコメント内に複数のヒントがあり、構文的に正しいヒントと構文的に正しくないヒントがある場合、TimesTenでは、不正なヒントは無視され、正しいヒントが採用されます。

- TT_JoinOrderヒントかTT_Indexヒントのいずれかを使用し、閉じカッコがないと、残りのヒント文字列は無視されます。

- 互いに競合するヒントがある場合、コメントの右端のヒントが使用されます。たとえば、コメント文字列が/*+TT_TblScan (0)...TT_TblScan (1) */の場合は、右端のTT_TblScan(1)が使用されます。

- 文レベルのオプティマイザ・ヒントは、競合するトランザクション・レベルのオプティマイザ・ヒントをオーバーライドします。つまり、文レベルのオプティマイザ・ヒントと競合するトランザクション・レベルのオプティマイザ・ヒントを指定すると、文レベルのオプティマイザ・ヒントは、競合するトランザクション・レベルのオプティマイザ・ヒントをオーバーライドします。たとえば、ttOptSetFlagを呼び出し、範囲フラグを有効にし、SQL問合せを発行して文レベルのオプティマイザ・フラグTT_Rangeを無効にすると、この問合せの範囲フラグが無効になります。問合せを実行した後、問合せ実行前にトランザクションに配置された元の範囲フラグ設定は、トランザクション実行中は有効のままです。詳細は、例6-1「SELECT問合せでの文レベルのオプティマイザ・ヒントの使用」を参照してください。

- 副問合せでは文レベルのオプティマイザ・ヒントを使用しないでください。

- TimesTen問合せオプティマイザは、パススルー文の文レベルのオプティマイザ・ヒントを認識しません。TimesTenでは、パススルー文のSQLテキストはOracle Databaseに渡され、Oracle DatabaseのSQL規則に従って処理されます。

文レベルのオプティマイザ・ヒントをサポートするSQL文

文レベルのオプティマイザ・ヒントは、DELETE、INSERT、MERGE、SELECT、およびUPDATEで指定できます。また、CREATE TABLE...AS SELECT文およびINSERT... SELECT文でも文レベルのオプティマイザ・ヒントを指定できます。ヒントはコメント構文内に指定し、コメント構文はSQL VERBの直後に記述します。(たとえば、DELETE /*+ ヒント */...のようにします。)表6-1に文レベルのヒントの正しい配置を示します。

表6-1 SQL文への文レベルのヒントの配置

SQL文

ヒントの配置

CREATE TABLE... AS SELECT

CREATE TABLE...AS SELECT [ヒント]...

CREATE TABLE...AS SELECT文ではトランザクション・レベルのヒントを使用しないでください。

DELETE

DELETE [hint] ...

INSERT

INSERT [hint] ...

INSERT...SELECT

INSERT...SELECT [hint]...

MERGE

MERGE [hint]...

SELECT

SELECT [hint]...

副問合せではヒントを指定しないでください。

SELECT...{UNION|MINUS| INTERSECT} SELECT...

SELECT [ヒント] {UNION|MINUS|INTERSECT} SELECT...

UPDATE

UPDATE [hint]...

ヒントの理解

ヒントを使用することで、問合せの実行計画の選択決定においてTimesTen問合せオプティマイザに作用することができます。

トランザクション・レベルのオプティマイザ・ヒントを表示するには、組込みプロシージャttOptSetFlagを実行します。組込みプロシージャttOptGetFlagの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のttOptGetFlagに関する説明を参照してください。

文レベルのオプティマイザ・ヒントとトランザクション・レベルのオプティマイザ・ヒントの違いの概要を表6-2「文レベルのオプティマイザ・ヒントとトランザクション・レベルのオプティマイザ・ヒントの違い」に示します。TimesTenオプティマイザはコストベースのオプティマイザであり、統計と索引を使用して問合せ計画を生成するため、ヒントを使用する前に、統計の更新の必要性を確認してください。問合せオプティマイザの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のTimesTen問合せオプティマイザに関する説明を参照してください。

表6-2 文レベルのオプティマイザ・ヒントとトランザクション・レベルのオプティマイザ・ヒントの違い

文レベルのオプティマイザ・ヒント

トランザクション・レベルのオプティマイザ・ヒント

SQL文のコメント構文内のSQL VERBの後に指定します。

組込みプロシージャttOptSetFlag、ttOptSetOrder、ttOptUseIndexをコールすることで指定します。

ヒントはSQL文を範囲とします。文レベルでオプティマイザに指示する場合に使用します。

ヒントはトランザクションを範囲とします。トランザクション・レベルでオプティマイザに指示する場合に使用します。

自動コミットは無効になります。これはヒントがSQL文を範囲とするためです。文の実行後は、それ以降の文および問合せではそのヒントは無効になります。

自動コミットは有効です。自動コミットをオフに設定します。文が自身のトランザクションで実行されるため、自動コミットをオフにしないと、ヒントが有効になりません。自動コミットをオフに設定すると、ヒントがトランザクションで有効になります(コミットまたはロールバックを発行するまで)。

オプティマイザは文に対してのみヒントを使用します。

オプティマイザはトランザクションのすべての文にヒントを使用します。

ヒントはCREATE TABLE...AS SELECT文でサポートされます。

ヒントはCREATE TABLE...AS SELECT文でサポートされません。この文はDDL文であり、TimesTenではDDL文が暗黙的にコミットされるためです。

トランザクション・レベルのオプティマイザ・ヒントが指定されたトランザクションで文レベルのオプティマイザ・ヒントを指定すると、そのヒントは、SQL文のトランザクション・レベルのヒントをオーバーライドします。SQL文の実行後は、元のトランザクション・レベルのオプティマイザ・ヒントは、トランザクション中は有効のままです。

ヒントは、トランザクションの間有効です。SQL文で文レベルのオプティマイザ・ヒントを指定すると、文レベルのオプティマイザ・ヒントはその文に対して有効となり、オプティマイザはその文にトランザクション・レベルのヒントを使用しません。トランザクション実行後は、元のトランザクション・レベルのオプティマイザ・ヒントは、トランザクション中は有効のままです。

特定の文に対してオプティマイザを有効にするには、文レベルのオプティマイザ・ヒントを使用します。ヒントは、オプティマイザに指示する文ごとに指定する必要があります。文に対して複数の変更が生じる場合があります。

トランザクションのすべての文に対してオプティマイザを適用するには、トランザクション・レベルのオプティマイザ・ヒントを使用します。ヒントを文ごとに指定する必要はありません。ヒントはトランザクション中は有効なため、トランザクションのすべての文に表示されます。

例

次の例は、文レベルのオプティマイザ・ヒントとトランザクション・レベルのオプティマイザ・ヒントの使用方法を説明しています。TimesTenオプティマイザは、コストベースのオプティマイザであり、文の最適な実行計画を判断して生成します。実行計画は、参照する表にある索引の他に、列および表の利用可能な統計に基づきます。統計の再計算や索引の変更時は、TimesTenオプティマイザは、再計算された統計および索引変更に基づいて実行計画を変更する場合があります。実行計画は多様なため、これらの例はあくまで実例です。次の例があります。

- 例6-1「SELECT問合せでの文レベルのオプティマイザ・ヒントの使用」

- 例6-2「ヒントの有効化および無効化」

- 例6-3「TT_JoinOrderを使用した結合順序の指定」

- 例6-4「文レベルのオプティマイザ・ヒントTT_INDEXの使用」

例6-1 SELECT問合せでの文レベルのオプティマイザ・ヒントの使用

問合せの実行計画を表示します。次に、文レベルのオプティマイザ・ヒントを使用して、オプティマイザに別の実行計画を選択するように指示します。次の問合せを考慮します。

Command> SELECT r.region_name, c.country_name
> FROM regions r, countries c
> WHERE r.region_id = c.region_id
> ORDER BY c.region_id;

ttIsql EXPLAINコマンドを使用してオプティマイザが生成した計画を表示します。注意:

- オプティマイザは、それぞれのスキャンに表レベル・ロッキングを使用して2つの範囲スキャンを実行します。

- オプティマイザは、MergeJoin処理を使用して2つの表を結合します。

Command> EXPLAIN SELECT r.region_name, c.country_name
FROM regions r, countries c
WHERE r.region_id = c.region_id
ORDER BY c.region_id;

Query Optimizer Plan:

STEP:                1
LEVEL:               2
OPERATION:           TblLkRangeScan
TBLNAME:             COUNTRIES
IXNAME:              COUNTR_REG_FK
INDEXED CONDITION:   <NULL>
NOT INDEXED:         <NULL>

STEP:                2
LEVEL:               2
OPERATION:           TblLkRangeScan
TBLNAME:             REGIONS
IXNAME:              REGIONS
INDEXED CONDITION:   R.REGION_ID >= C.REGION_ID
NOT INDEXED:         <NULL>

STEP:                3
LEVEL:               1
OPERATION:           MergeJoin
TBLNAME:             <NULL>
IXNAME:              <NULL>
INDEXED CONDITION:   C.REGION_ID = R.REGION_ID
NOT INDEXED:         <NULL>

ここで文レベルのオプティマイザ・ヒントを使用して、低レベル・ロッキングを使用したスキャンの実行、およびNestedLoop処理を使用した表の結合をオプティマイザに指示します。自動コミットをオンに設定すると、文レベルのオプティマイザ・ヒントがSQL文を範囲としているために自動コミット設定が無効になることが分かります。

Command> autocommit on;
Command> EXPLAIN SELECT /*+ TT_RowLock (1), TT_TblLock (0), TT_MergeJoin (0),
> TT_NestedLoop (1) */
> r.region_name, c.country_name
> FROM regions r, countries c
> WHERE r.region_id = c.region_id
> ORDER BY c.region_id;

Query Optimizer Plan:

STEP:                1
LEVEL:               3
OPERATION:           RowLkRangeScan
TBLNAME:             REGIONS
IXNAME:              REGIONS
INDEXED CONDITION:   <NULL>
NOT INDEXED:         <NULL>

STEP:                2
LEVEL:               3
OPERATION:           RowLkRangeScan
TBLNAME:             COUNTRIES
IXNAME:              COUNTR_REG_FK
INDEXED CONDITION:   C.REGION_ID = R.REGION_ID
NOT INDEXED:         <NULL>

STEP:                3
LEVEL:               2
OPERATION:           NestedLoop
TBLNAME:             <NULL>
IXNAME:              <NULL>
INDEXED CONDITION:   <NULL>
NOT INDEXED:         <NULL>

STEP:                4
LEVEL:               1
OPERATION:           OrderBy
TBLNAME:             <NULL>
IXNAME:              <NULL>
INDEXED CONDITION:   <NULL>
NOT INDEXED:         <NULL>

文レベルのオプティマイザ・ヒントなしで問合せを再度準備します。文レベルのオプティマイザ・ヒントがSQL文を範囲とするため、元の実行計画に戻ります。

Command> EXPLAIN SELECT r.region_name, c.country_name
FROM regions r, countries c
WHERE r.region_id = c.region_id
ORDER BY c.region_id;

Query Optimizer Plan:

STEP:                1
LEVEL:               2
OPERATION:           TblLkRangeScan
TBLNAME:             COUNTRIES
IXNAME:              COUNTR_REG_FK
INDEXED CONDITION:   <NULL>
NOT INDEXED:         <NULL>

STEP:                2
LEVEL:               2
OPERATION:           TblLkRangeScan
TBLNAME:             REGIONS
IXNAME:              REGIONS
INDEXED CONDITION:   R.REGION_ID >= C.REGION_ID
NOT INDEXED:         <NULL>

STEP:                3
LEVEL:               1
OPERATION:           MergeJoin
TBLNAME:             <NULL>
IXNAME:              <NULL>
INDEXED CONDITION:   C.REGION_ID = R.REGION_ID
NOT INDEXED:         <NULL>

例6-2 ヒントの有効化および無効化

この例は、類似の関数を実行するヒントを有効または無効にするかを明確にオプティマイザに指示することの重要性を示しています。たとえば、ハッシュ・ヒントおよび範囲ヒントにより、表のハッシュ・アクセス・パスまたは範囲アクセス・パスのいずれかを使用するようにオプティマイザに指示する場合です。特定のアクセス・パスをオプティマイザが確実に選択できるよう、1つのヒントを有効にしてその他すべての関連ヒントを無効にします。

表を作成し、表の1列目にハッシュ索引、2列目に範囲索引を作成します。

Command> CREATE TABLE test (col1 NUMBER, col2 NUMBER);
Command> CREATE HASH INDEX h_index ON test (col1);
Command> CREATE INDEX hr_index ON test (col2);

自動コミットをオフにし、組み込みプロシージャttOptGetFlagを実行して、トランザクションの現在のトランザクション・レベルのオプティマイザ・ヒントを表示します。1に設定すると、フラグは無効です。

Command> autocommit off;
Command> CALL ttOptGetFlag ('Hash');
< Hash, 1 >
1 row found.
Command> CALL ttOptGetFlag ('Scan');
< Scan, 1 >
1 row found.

ttIsq EXPLAINコマンドを使用して、WHERE句と動的パラメータを使用したSELECT問合せの計画を確認します。オプティマイザはハッシュ・スキャンを使用します。

Command> EXPLAIN SELECT * FROM test WHERE col1 = ? and col2 = ?;

Query Optimizer Plan:

STEP:                1
LEVEL:               1
OPERATION:           RowLkHashScan
TBLNAME:             TEST
IXNAME:              H_INDEX
INDEXED CONDITION:   TEST.COL1 = _QMARK_1
NOT INDEXED:         TEST.COL2 = _QMARK_2

文レベルのオプティマイザ・ヒントTT_Rangeを使用して、オプティマイザに範囲スキャンの使用を指示します。オプティマイザにハッシュ・スキャンの無効化を指示していないため、オプティマイザはTT_Rangeヒントを無視し、ハッシュ・スキャンを使用します。文を変更し、オプティマイザにハッシュ・スキャンを使用せずに範囲スキャンを使用するように指示します。そのためには、文レベルのオプティマイザ・ヒントTT_Rangeを有効にし、文レベルのオプティマイザ・ヒントTT_HashScanを無効にします。オプティマイザはTT_Rangeヒントを無視しなくなります。

Command> EXPLAIN SELECT --+ TT_Range (1) Single line comment to set TT_Range
> * FROM TEST WHERE col1 = ? and col2 = ?;

Query Optimizer Plan:

STEP:                1
LEVEL:               1
OPERATION:           RowLkHashScan
TBLNAME:             TEST
IXNAME:              H_INDEX
INDEXED CONDITION:   TEST.COL1 = _QMARK_1
NOT INDEXED:         TEST.COL2 = _QMARK_2

Command> EXPLAIN SELECT /*+ TT_Range (1) TT_HashScan (0)
> Multiple line comment to enable TT_Range and disable TT_HashScan */
> * FROM TEST WHERE col1 = ? and col2 = ?;

Query Optimizer Plan:

STEP:                1
LEVEL:               1
OPERATION:           RowLkRangeScan
TBLNAME:             TEST
IXNAME:              HR_INDEX
INDEXED CONDITION:   TEST.COL2 = _QMARK_2
NOT INDEXED:         TEST.COL1 = _QMARK_1

文レベルのオプティマイザ・ヒントを使用せず、コミットやロールバックを発行せずに、問合せを再度準備します。オプティマイザは、問合せの実行前に有効なトランザクション・レベルのオプティマイザ・ヒントを使用します。文レベルのオプティマイザ・ヒントがSQL文を範囲とするため、オプティマイザはトランザクション・レベルのオプティマイザ・ヒントを使用します。

Command> EXPLAIN SELECT * FROM TEST WHERE col1 = ? and col2 = ?;

Query Optimizer Plan:

STEP:                1
LEVEL:               1
OPERATION:           RowLkHashScan
TBLNAME:             TEST
IXNAME:              H_INDEX
INDEXED CONDITION:   TEST.COL1 = _QMARK_1
NOT INDEXED:         TEST.COL2 = _QMARK_2

例6-3 TT_JoinOrderを使用した結合順序の指定

文レベルのオプティマイザ・ヒントTT_JoinOrderを使用して、オプティマイザに特定の結合順序の使用を指示します。まずトランザクション・レベルのオプティマイザ・ヒントを使用して、トランザクションでの特定の結合順序の使用をオプティマイザに指示します。次に文レベルのオプティマイザ・ヒントを使用して、文のみで結合順序の変更をオプティマイザに指示します。

Command> CALL ttOptSetOrder ('e d j');
Command> EXPLAIN SELECT *
FROM employees e, departments d, job_history j
WHERE e.department_id = d.department_id
AND e.hire_date = j.start_date;

Query Optimizer Plan:

STEP:                1
LEVEL:               3
OPERATION:           TblLkRangeScan
TBLNAME:             EMPLOYEES
IXNAME:              EMP_DEPT_FK
INDEXED CONDITION:   <NULL>
NOT INDEXED:         <NULL>

STEP:                2
LEVEL:               3
OPERATION:           TblLkRangeScan
TBLNAME:             DEPARTMENTS
IXNAME:              DEPARTMENTS
INDEXED CONDITION:   D.DEPARTMENT_ID >= E.DEPARTMENT_ID
NOT INDEXED:         <NULL>

STEP:                3
LEVEL:               2
OPERATION:           MergeJoin
TBLNAME:             <NULL>
IXNAME:              <NULL>
INDEXED CONDITION:   E.DEPARTMENT_ID = D.DEPARTMENT_ID
NOT INDEXED:         <NULL>

STEP:                4
LEVEL:               2
OPERATION:           TblLkRangeScan
TBLNAME:             JOB_HISTORY
IXNAME:              JOB_HISTORY
INDEXED CONDITION:   <NULL>
NOT INDEXED:         E.HIRE_DATE = J.START_DATE

STEP:                5
LEVEL:               1
OPERATION:           NestedLoop
TBLNAME:             <NULL>
IXNAME:              <NULL>
INDEXED CONDITION:   <NULL>
NOT INDEXED:         <NULL>

トランザクション・レベルの結合順序オプティマイザ・ヒントを、そのSQL文に対してのみオーバーライドするようオプティマイザに指示するには、文レベルのオプティマイザ・ヒントTT_JoinOrderを使用します。

Command> EXPLAIN SELECT --+ TT_JoinOrder (e j d)
> *
> FROM employees e, departments d, job_history j
> WHERE e.department_id = d.department_id
> AND e.hire_date = j.start_date;

Query Optimizer Plan:

STEP:                1
LEVEL:               3
OPERATION:           TblLkRangeScan
TBLNAME:             EMPLOYEES
IXNAME:              EMP_DEPT_FK
INDEXED CONDITION:   <NULL>
NOT INDEXED:         <NULL>

STEP:                2
LEVEL:               3
OPERATION:           TblLkRangeScan
TBLNAME:             JOB_HISTORY
IXNAME:              JOB_HISTORY
INDEXED CONDITION:   <NULL>
NOT INDEXED:         E.HIRE_DATE = J.START_DATE

STEP:                3
LEVEL:               2
OPERATION:           NestedLoop
TBLNAME:             <NULL>
IXNAME:              <NULL>
INDEXED CONDITION:   <NULL>
NOT INDEXED:         <NULL>

STEP:                4
LEVEL:               2
OPERATION:           TblLkRangeScan
TBLNAME:             DEPARTMENTS
IXNAME:              DEPARTMENTS
INDEXED CONDITION:   D.DEPARTMENT_ID >= E.DEPARTMENT_ID
NOT INDEXED:         <NULL>

STEP:                5
LEVEL:               1
OPERATION:           MergeJoin
TBLNAME:             <NULL>
IXNAME:              <NULL>
INDEXED CONDITION:   E.DEPARTMENT_ID = D.DEPARTMENT_ID
NOT INDEXED:         <NULL>

問合せを再度準備し、トランザクションで有効だった結合順序が有効のままであるかを確認します。

Command> EXPLAIN SELECT *
> FROM employees e, departments d, job_history j
> WHERE e.department_id = d.department_id
> AND e.hire_date = j.start_date;

Query Optimizer Plan:

STEP:                1
LEVEL:               3
OPERATION:           TblLkRangeScan
TBLNAME:             EMPLOYEES
IXNAME:              EMP_DEPT_FK
INDEXED CONDITION:   <NULL>
NOT INDEXED:         <NULL>

STEP:                2
LEVEL:               3
OPERATION:           TblLkRangeScan
TBLNAME:             DEPARTMENTS
IXNAME:              DEPARTMENTS
INDEXED CONDITION:   D.DEPARTMENT_ID >= E.DEPARTMENT_ID
NOT INDEXED:         <NULL>

STEP:                3
LEVEL:               2
OPERATION:           MergeJoin
TBLNAME:             <NULL>
IXNAME:              <NULL>
INDEXED CONDITION:   E.DEPARTMENT_ID = D.DEPARTMENT_ID
NOT INDEXED:         <NULL>

STEP:                4
LEVEL:               2
OPERATION:           TblLkRangeScan
TBLNAME:             JOB_HISTORY
IXNAME:              JOB_HISTORY
INDEXED CONDITION:   <NULL>
NOT INDEXED:         E.HIRE_DATE = J.START_DATE

STEP:                5
LEVEL:               1
OPERATION:           NestedLoop
TBLNAME:             <NULL>
IXNAME:              <NULL>
INDEXED CONDITION:   <NULL>
NOT INDEXED:         <NULL>

例6-4 文レベルのオプティマイザ・ヒントTT_INDEXの使用

emp_name_ix索引を使用するemployees表で問合せを実行します。次に、文レベルのオプティマイザ・ヒントTT_INDEXを使用して、この索引を使用しないことをオプティマイザに指示します。まずttIsqlコマンドindexesを実行し、employees表の索引を表示します。

Command> indexes employees;

Indexes on table TESTUSER.EMPLOYEES:
EMPLOYEES: unique range index on columns:
EMPLOYEE_ID
(referenced by foreign key index JHIST_EMP_FK on table TESTUSER.JOB_HISTORY)
TTUNIQUE_0: unique range index on columns:
EMAIL
EMP_DEPT_FK: non-unique range index on columns:
DEPARTMENT_ID
(foreign key index references table TESTUSER.DEPARTMENTS(DEPARTMENT_ID))
EMP_JOB_FK: non-unique range index on columns:
JOB_ID
(foreign key index references table TESTUSER.JOBS(JOB_ID))
EMP_NAME_IX: non-unique range index on columns:
LAST_NAME
FIRST_NAME
5 indexes found.

5 indexes found on 1 table.

ttIsqlコマンドEXPLAINを使用して、last_name列でWHERE句を使用するemployees表でのSELECT問合せの実行計画を表示します。

Command> EXPLAIN SELECT e.first_name
> FROM employees e
> WHERE e.last_name BETWEEN 'A' AND 'B';

Query Optimizer Plan:

STEP:                1
LEVEL:               1
OPERATION:           RowLkRangeScan
TBLNAME:             EMPLOYEES
IXNAME:              EMP_NAME_IX
INDEXED CONDITION:   E.LAST_NAME >= 'A' AND E.LAST_NAME <= 'B'
NOT INDEXED:         <NULL>

文レベルのオプティマイザ・ヒントTT_INDEXを使用して、索引emp_name_ixを使用しないことをオプティマイザに指示します。

Command> EXPLAIN SELECT --+ TT_INDEX (E,EMP_NAME_IX,0)
> e.first_name
> FROM employees e
> WHERE e.last_name BETWEEN 'A' AND 'B';

Query Optimizer Plan:

STEP:                1
LEVEL:               1
OPERATION:           TblLkRangeScan
TBLNAME:             EMPLOYEES
IXNAME:              EMPLOYEES
INDEXED CONDITION:   <NULL>
NOT INDEXED:         E.LAST_NAME <= 'B' AND E.LAST_NAME >= 'A'

ALTER ACTIVE STANDBY PAIR

アクティブ・スタンバイ・ペアは、次の方法で変更できます。

- サブスクライバ・データベースを追加または削除します。

- ストア属性を変更します。
サブスクライバには、PORTおよびTIMEOUT属性のみを設定できます。

- 表、順序またはキャッシュ・グループをレプリケーション・スキームに含めます。

- 表、順序またはキャッシュ・グループをレプリケーション・スキームから除外します。

『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアのその他の変更に関する説明を参照してください。

必要な権限

ADMIN

SQL構文

ALTER ACTIVE STANDBY PAIR {
SubscriberOperation |
StoreOperation | InclusionOperation |
NetworkOperation } [...]

SubscriberOperationの構文は、次のとおりです。

{ADD | DROP } SUBSCRIBER FullStoreName

StoreOperationの構文は、次のとおりです。

ALTER STORE FullStoreName SET StoreAttribute

InclusionOperationの構文は、次のとおりです。

[{ INCLUDE | EXCLUDE }{TABLE [[Owner.]TableName [,...]]|
CACHE GROUP [[Owner.]CacheGroupName [,...]]|
SEQUENCE [[Owner.]SequenceName [,...]]} [,...]]

NetworkOperationの構文は、次のとおりです。

ADD ROUTE MASTER FullStoreName SUBSCRIBER FullStoreName
{ { MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost }
PRIORITY Priority } [...]
DROP ROUTE MASTER FullStoreName SUBSCRIBER FullStoreName
{ MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost } [...]

パラメータ

パラメータ

説明

ADD SUBSCRIBER FullStoreName

サブスクライバ・データベースを指定します。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベース・ファイル名です。

DROP SUBSCRIBER FullStoreName

指定したサブスクライバ・データベースに更新が送信されないように指定します。この処理は、レプリケーション・スキームの持つサブスクライバが1つのみの場合に失敗します。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベース・ファイル名です。

ALTER STORE FullStoreName SET StoreAttribute

データベースの属性への変更を指定します。サブスクライバには、PORTおよびTIMEOUT属性のみを設定できます。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベース・ファイル名です。
StoreAttribute句の詳細は、「CREATE ACTIVE STANDBY PAIR」を参照してください。

FullStoreName

次のいずれかとして指定されたデータベースです。

- SELF

- データベース・ファイル名の接頭辞

たとえば、データベースのパスがdirectory/subdirectory/data.ds0の場合、使用するデータベース名はdataになります。

この名前は、DSNの記述のDataStore属性で指定されるデータベース・ファイル名で、オプションでホストIDを次の書式で指定できます。

DataStoreName [ON Host]

Hostは、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のネットワークの構成に関する項で説明されているように、IPアドレスか、または1つ以上のIPアドレスに割り当てられたリテラル・ホスト名です。ホスト名に特殊文字が含まれている場合は、二重引用符で囲む必要があります。たとえば、"MyHost-500"のようになります。

{INCLUDE|EXCLUDE}
{[TABLE [Owner.]TableName[,...]|

CACHE GROUP

[[Owner.]CacheGroupName]|[,...]

SEQUENCE [[Owner.]SequenceName [,...]}

[,...]

指定された表、順序またはキャッシュ・グループをレプリケーションに含めるか、またはレプリケーションから除外します。
INCLUDEを指定すると、表、順序またはキャッシュ・グループがレプリケーションに追加されます。INCLUDE句は、オブジェクト型(表、順序またはキャッシュ・グループ)ごとに1つ使用します。

EXCLUDEを指定すると、表、順序またはキャッシュ・グループがレプリケーションから除外されます。EXCLUDE句は、オブジェクト型(表、キャッシュ・グループまたは順序)ごとに1つ使用します。

ADD ROUTE MASTER FullStoreName SUBSCRIBER FullStoreName

NetworkOperationをレプリケーション・スキームに追加します。各サブスクライバ・ストアへのすべてのアウトバウンド接続に対してマスター・ストアが使用するネットワーク・インタフェースを制御できます。ADD ROUTE句のコンテキストでは、各マスター・データベースは他のマスター・データベースのサブスクライバであり、各読取り専用サブスクライバは両方のマスター・データベースのサブスクライバです。
複数回指定できます。

FullStoreNameには、ON "host"を指定する必要があります。

DROP ROUTE MASTER FullStoreName SUBSCRIBER FullStoreName

レプリケーション・スキームからNetworkOperationを削除します。
複数回指定できます。

FullStoreNameには、ON "host"を指定する必要があります。

MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost

MasterHostおよびSubscriberHostは、マスターおよびサブスクライバ・ストアのネットワーク・インタフェースのIPアドレスです。IPV6のドット表記または正規形式で指定するか、あるいはコロン表記で指定します。
句は複数回指定できます。ADDおよびDROP ROUTE MASTERの両方に対して有効です。

PRIORITY Priority

1から99の整数で表される変数。IPアドレスの優先順位を示します。整数値が小さいほど、優先度は高くなります。同じ優先度を持つアドレスが複数指定されている場合は、エラーが返されます。ピア接続の確立に使用する複数のIPアドレスの順序を制御します。
NetworkOperation句の構文で必須です。MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost句の後ろに記述します。

説明

- アクティブ・スタンバイ・ペアを変更する前に、レプリケーション・エージェントを停止する必要があります。例外は、「ALTER SESSION」で説明されているように、DDL_REPLICATION_LEVELおよびDDL_REPLICATION_ACTION属性の値に基づいて自動的にレプリケートされて含まれるオブジェクトおよび文の場合です。

- アクティブ・データベースのアクティブ・スタンバイ・ペア・レプリケーション・スキームのみを変更できます。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアのその他の変更に関する説明を参照してください。

- TimesTenでOracle Clusterwareを使用する場合は、ALTER ACTIVE STANDBY PAIRは使用できません。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のコマンドおよびSQL文の制限に関する説明を参照してください。
かわりに、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のスキーマの変更に関する説明で説明されているタスクを実行します。

- ADD SUBSCRIBER FullStoreNameは、サブスクライバをレプリケーション・スキームに追加する場合に使用します。

- DROP SUBSCRIBER FullStoreNameは、サブスクライバをレプリケーション・スキームから削除する場合に使用します。

- INCLUDEまたはEXCLUDE句は、指定された表、順序またはキャッシュ・グループをレプリケーション・スキームに含めるか、またはレプリケーション・スキームから除外する場合に使用します。INCLUDEまたはEXCLUDE句は、オブジェクト型(表、順序またはキャッシュ・グループ)ごとに1つ使用します。ALTER ACTIVE STANDBY文は、「ALTER SESSION」で説明されているように、DDL_REPLICATION_LEVELおよびDDL_REPLICATION_ACTION属性の値に基づいて自動的にレプリケートされて含まれるオブジェクトおよび文には必要ありません。ただし、DDL_REPLICATION_LEVELが2以上で、DDL_REPLICATION_ACTION="EXCLUDE"の場合は、INCLUDE句を使用して、レプリケートされたオブジェクトをレプリケーション・スキームに含めます。

- DDL_REPLICATION_LEVELが2以上の場合は、INCLUDE句はアクティブ・データベースの空の表でのみ使用できます。スタンバイおよびサブスクライバの対応する表の内容は、表がレプリケーション・スキームに追加される前に切り捨てられます。

例

サブスクライバをレプリケーション・スキームに追加します。

ALTER ACTIVE STANDBY PAIR
ADD SUBSCRIBER rep4;

2つのサブスクライバをレプリケーション・スキームから削除します。

ALTER ACTIVE STANDBY PAIR
DROP SUBCRIBER rep3
DROP SUBSCRIBER rep4;

rep3およびrep4データベースのストア属性を変更します。

ALTER ACTIVE STANDBY PAIR
ALTER STORE rep3 SET PORT 23000 TIMEOUT 180
ALTER STORE rep4 SET PORT 23500 TIMEOUT 180;

1つの表、1つの順序および2つのキャッシュ・グループをレプリケーション・スキームに追加します。

ALTER ACTIVE STANDBY PAIR
INCLUDE TABLE my.newtab
INCLUDE SEQUENCE my.newseq
INCLUDE CACHE GROUP my.newcg1, my.newcg2;

NetworkOperation句をアクティブ・スタンバイ・ペアに追加します。

ALTER ACTIVE STANDBY PAIR
ADD ROUTE MASTER rep1 ON "machine1" SUBSCRIBER rep2 ON "machine2"
MASTERIP "1.1.1.1" PRIORITY 1 SUBSCRIBERIP "2.2.2.2" PRIORITY 1;

関連項目

「CREATE ACTIVE STANDBY PAIR」
「DROP ACTIVE STANDBY PAIR」

ALTER CACHE GROUP

ALTER CACHE GROUP文を使用して、AUTOREFRESHの状態、時間隔およびモードを変更できます。

Oracle Database表の更新は、AUTOREFRESHを使用してTimesTenキャッシュ・グループに伝播させることができます。AUTOREFRESHは、キャッシュ・グループがユーザー管理キャッシュ・グループであるか、またはAUTOREFRESH句でREADONLYとして定義されている場合に有効にできます。

ALTER CACHE GROUPを使用して設定した任意の値または状態は永続的です。それらの設定はデータベースに保存されるため、デーモンやキャッシュ・エージェントを再起動した場合にも引き続き使用されます。

キャッシュ・グループの種類については、「ユーザー管理キャッシュ・グループおよびシステム管理キャッシュ・グループ」を参照してください。

必要な権限

キャッシュ・グループの所有者に必要な権限はありません。

別のユーザーのキャッシュ・グループの場合はALTER ANY CACHE GROUPが必要です。

SQL構文

この文は、キャッシュ・グループのAUTOREFRESHモードを変更し、これによって、自動リフレッシュ操作中に更新される行が決まります。

ALTER CACHE GROUP [Owner.]GroupName
SET AUTOREFRESH MODE
{INCREMENTAL | FULL}

この文は、キャッシュ・グループのAUTOREFRESHの時間隔を変更します。

ALTER CACHE GROUP [Owner.]GroupName
SET AUTOREFRESH INTERVAL IntervalValue
{MINUTE[S] | SECOND[S] | MILLISECOND[S] }

この文は、AUTOREFRESHの状態を変更します。

ALTER CACHE GROUP [Owner.]GroupName
SET AUTOREFRESH STATE
{ON | OFF | PAUSED}

パラメータ

パラメータ

説明

[Owner.]GroupName

新しいキャッシュ・グループに割り当てられる名前。

AUTOREFRESH

Oracle Database表への変更を自動的にTimesTenに伝播するように指定します。詳細は、「キャッシュ・グループのAUTOREFRESH」を参照してください。

MODE

自動リフレッシュ時に更新されるキャッシュ内の行を指定します。INCREMENTAL句が指定された場合、TimesTenは前回の伝播以降にOracle Databaseに加えられた変更のみをリフレッシュします。FULL句が指定された場合、またはFULL句もINCREMENTAL句も指定されなかった場合、TimesTenは自動リフレッシュのたびにキャッシュ内のすべての行を更新します。デフォルトのモードはINCREMENTALです。

INTERVAL
IntervalValue

AUTOREFRESHを実行する頻度を分、秒またはミリ秒単位の整数値で指定します。デフォルト値は10分です。指定した時間隔でAUTOREFRESHを完了できない場合は、実行時に警告が生成され、現在の処理が終了するまで次回のAUTOREFRESHを待機します。待機キューが10に達すると、サポート・ログに通知メッセージが生成されます。

STATE

AUTOREFRESHをオン、オフまたは一時停止のいずれかに変更します。デフォルトでは、AUTOREFRESH STATEはONです。

ON

指定した時間隔でAUTOREFRESHが実行されるようにスケジュールします。

OFF

スケジュールされたAUTOREFRESHを取り消し、TimesTenではINCREMENTALリフレッシュに必要な情報が保持されません。このため、後でAUTOREFRESHを再度オンに設定した場合、最初のリフレッシュはFULLです。

PAUSED

スケジュールされたAUTOREFRESHを取り消しますが、TimesTenではINCREMENTALリフレッシュに必要な情報が保持されます。このため、後でAUTOREFRESHを再度オンに設定した場合、完全リフレッシュは不要です。

説明

- リフレッシュは、ALTER CACHE GROUP...SET AUTOREFRESH STATEを実行した直後には実行されません。この文では、AUTOREFRESHの状態を変更するだけです。ALTER CACHE GROUP文を含むトランザクションをコミットすると、AUTOREFRESHのスケジュールのためにキャッシュ・エージェントにはすぐに通知されますが、コミットはリフレッシュの完了を待たずに実行されます。自動リフレッシュ操作のスケジューリングはトランザクションの一部ですが、リフレッシュ自体はトランザクションの一部ではありません。

- ALTER CACHE GROUP... SET AUTOREFRESH STATE OFF文を実行し、現在実行中の自動リフレッシュ操作がある場合、次のような結果になります。

- LockWaitの時間隔が0の場合、ALTER文はロックのタイムアウト・エラーで失敗します。

- LockWaitの時間隔が0以外の場合、現在の自動リフレッシュ・トランザクションはロールバックされ、ALTER文の処理が続行されます。これは、同じ自動リフレッシュ間隔を持つすべてのキャッシュ・グループに影響します。

- AUTOREFRESHが設定されたキャッシュ・グループとAUTOREFRESHが設定されていないキャッシュ・グループの間では、レプリケートできません。

- ALTER CACHE GROUP文がレプリケートされているトランザクションの一部である場合、およびレプリケーション・スキームにRETURN TWOSAFE属性が指定されている場合、トランザクションは失敗する可能性があります。

- ALTER CACHE GROUP文はシリアライズ可能分離レベルでは実行できません。実行しようとするとエラー・メッセージが返されます。

関連項目

CREATE CACHE GROUP

ALTER FUNCTION

ALTER FUNCTION文は、スタンドアロンのストアド・ファンクションを再コンパイルします。明示的に再コンパイルすることによって、実行時に暗黙的に再コンパイルする必要がなくなり、関連する実行時コンパイル・エラーおよびパフォーマンス・オーバーヘッドが発生しなくなります。

パッケージに含まれるファンクションを再コンパイルするには、ALTER PACKAGE文を使用してパッケージを再コンパイルします。

必要な権限

PL/SQLファンクションの所有者に必要な権限はありません。

別のユーザーのファンクションの場合はALTER ANY PROCEDUREが必要です。

SQL構文

ALTER FUNCTION [Owner.]FunctionName COMPILE
[CompilerParametersClause [...]]
[REUSE SETTINGS]

パラメータ

パラメータ

説明

[Owner.]FunctionName

再コンパイルするファンクションの名前。

COMPILE

ファンクションの再コンパイルを発生させる必須キーワード。ファンクションを正常にコンパイルできなかった場合は、ttIsqlコマンドのSHOW ERRORSを使用してコンパイラのエラー・メッセージを表示します。

CompilerParametersClause

このオプション句を使用して、いずれかのPL/SQL永続コンパイラ・パラメータの値を指定します。PL/SQL永続コンパイラ・パラメータには、PLSQL_OPTIMIZE_LEVEL、PLSCOPE_SETTINGSおよびNLS_LENGTH_SEMANTICSがあります。
文の中で各パラメータを1回指定できます。

この句のパラメータを省略してREUSE SETTINGSを指定した場合、前回のコンパイルでパラメータに値を指定していると、この(前回の)値がTimesTenによって使用されます。パラメータを省略し、かつ、REUSE SETTINGSを指定しないか、または前回のコンパイルでパラメータに値を指定しなかった場合、TimesTenによってセッション環境からパラメータの値が取得されます。

REUSE SETTINGS

このオプション句を使用して、TimesTenがコンパイラのスイッチ設定を削除および再取得しないようにします。REUSE SETTINGSを指定すると、TimesTenによって既存の設定が保持され、値を指定していないパラメータのコンパイルに使用されます。

説明

- ALTER FUNCTION文は、既存ファンクションの宣言または定義を変更しません。ファンクションを再宣言または再定義するには、CREATE FUNCTION文を使用します。

- ファンクションが依存しているオブジェクトが無効な場合、TimesTenは最初にこれらのオブジェクトを再コンパイルします。

- また、TimesTenは、再コンパイルされたファンクションをコールするファンクションや、再コンパイルされたファンクションをコールするファンクションが定義されているパッケージの本体など、ファンクションに依存しているオブジェクトをすべて無効にします。

- TimesTenによってファンクションが正常に再コンパイルされると、そのファンクションは有効になります。ファンクションの再コンパイルでコンパイル・エラーになった場合、TimesTenによってエラーが返され、ファンクションは無効のままになります。ttIsqlコマンドのSHOW ERRORSを使用して、コンパイル・エラーを表示します。

- 再コンパイル中に、TimesTenはすべての永続コンパイラ設定を削除し、セッションからこれらの設定を再取得して、コンパイルの最後に格納します。この処理を回避するには、REUSE SETTINGS句を指定します。

関連項目

CREATE FUNCTION

ALTER PACKAGE

ALTER PACKAGE文は、パッケージ仕様部、パッケージ本体またはその両方を明示的に再コンパイルします。明示的に再コンパイルすることによって、実行時に暗黙的に再コンパイルする必要がなくなり、関連する実行時コンパイル・エラーが発生しなくなります。

この文では、同時にすべてのパッケージ・オブジェクトを再コンパイルします。ALTER PROCEDURE文またはALTER FUNCTION文を使用して、パッケージに含まれるプロシージャまたはファンクションを個別に再コンパイルすることはできません。

必要な権限

パッケージの所有者に必要な権限はありません。

別のユーザーのパッケージの場合はALTER ANY PROCEDUREが必要です。

SQL構文

ALTER PACKAGE [Owner.]PackageName COMPILE
[PACKAGE|SPECIFICATION|BODY]
[CompilerParametersClause [...]]
[REUSE SETTINGS]

パラメータ

パラメータ

説明

[Owner.]PackageName

再コンパイルするパッケージの名前。

COMPILE

パッケージ仕様部、パッケージ本体またはその両方の再コンパイルを強制するために使用される必須の句。

[PACKAGE|SPECIFICATION|BODY]

パッケージ仕様部と本体の両方を再コンパイルするには、PACKAGEを指定します。パッケージ仕様部を再コンパイルするには、SPECIFICATIONを指定します。パッケージ本体を再コンパイルするには、BODYを指定します。
PACKAGEがデフォルトです。

CompilerParametersClause

このオプション句を使用して、いずれかのPL/SQL永続コンパイラ・パラメータの値を指定します。PL/SQL永続コンパイラ・パラメータには、PLSQL_OPTIMIZE_LEVEL、PLSCOPE_SETTINGSおよびNLS_LENGTH_SEMANTICSがあります。
文の中で各パラメータを1回指定できます。

この句のパラメータを省略してREUSE SETTINGSを指定した場合、前回のコンパイルでパラメータに値を指定していると、この(前回の)値がTimesTenによって使用されます。パラメータを省略し、かつ、REUSE SETTINGSを指定しないか、または前回のコンパイルでパラメータに値を指定しなかった場合、TimesTenによってセッション環境からパラメータの値が取得されます。

REUSE SETTINGS

このオプション句を使用して、TimesTenがコンパイラのスイッチ設定を削除および再取得しないようにします。REUSE SETTINGSを指定すると、TimesTenによって既存の設定が保持され、値を指定していないパラメータのコンパイルに使用されます。

説明

- パッケージ仕様部を再コンパイルすると、TimesTenは、パッケージ内のプロシージャまたはファンクションをコールするプロシージャなど、仕様部に依存しているローカル・オブジェクトを無効にします。パッケージの本体もまた仕様部に依存しています。この後、先にこれらの依存オブジェクトのいずれかを明示的に再コンパイルしないで参照すると、このオブジェクトはTimesTenによって実行時に暗黙的に再コンパイルされます。

- パッケージ本体を再コンパイルした場合、パッケージ仕様部に依存しているオブジェクトは無効になりません。本体が依存しているオブジェクトが無効な場合、TimesTenは最初にこれらのオブジェクトを再コンパイルします。TimesTenによって本体が正常に再コンパイルされると、その本体は有効になります。

- パッケージを再コンパイルすると、仕様部と本体の両方が明示的に再コンパイルされます。コンパイル・エラーが発生しなかった場合、仕様部および本体は有効になります。コンパイル・エラーが発生した場合、TimesTenによってエラーが返され、パッケージは無効のままになります。

関連項目

CREATE PACKAGE

ALTER PROCEDURE

ALTER PROCEDURE文は、スタンドアロンのストアド・プロシージャを再コンパイルします。明示的に再コンパイルすることによって、実行時に暗黙的に再コンパイルする必要がなくなり、関連する実行時コンパイル・エラーおよびパフォーマンス・オーバーヘッドが発生しなくなります。

パッケージに含まれるプロシージャを再コンパイルするには、ALTER PACKAGE文を使用してパッケージを再コンパイルします。

必要な権限

プロシージャの所有者に必要な権限はありません。

別のユーザーのプロシージャの場合はALTER ANY PROCEDUREが必要です。

SQL構文

ALTER PROCEDURE [Owner.]ProcedureName COMPILE
[CompilerParametersClause [...]]
[REUSE SETTINGS]

パラメータ

パラメータ

説明

[Owner.]ProcedureName

再コンパイルするプロシージャの名前。

COMPILE

プロシージャの再コンパイルを発生させる必須キーワード。プロシージャを正常にコンパイルできなかった場合は、ttIsqlコマンドのSHOW ERRORSを使用してコンパイラのエラー・メッセージを表示します。

CompilerParametersClause

このオプション句を使用して、いずれかのPL/SQL永続コンパイラ・パラメータの値を指定します。PL/SQL永続コンパイラ・パラメータには、PLSQL_OPTIMIZE_LEVEL、PLSCOPE_SETTINGSおよびNLS_LENGTH_SEMANTICSがあります。
文の中で各パラメータを1回指定できます。

この句のパラメータを省略してREUSE SETTINGSを指定した場合、前回のコンパイルでパラメータに値を指定していると、この(前回の)値がTimesTenによって使用されます。パラメータを省略し、かつ、REUSE SETTINGSを指定しないか、または前回のコンパイルでパラメータに値を指定しなかった場合、TimesTenによってセッション環境からパラメータの値が取得されます。

REUSE SETTINGS

このオプション句を使用して、TimesTenがコンパイラのスイッチ設定を削除および再取得しないようにします。REUSE SETTINGSを指定すると、TimesTenによって既存の設定が保持され、値を指定していないパラメータのコンパイルに使用されます。

説明

- ALTER PROCEDURE文は、既存プロシージャの宣言または定義を変更しません。プロシージャを再宣言または再定義するには、CREATE PROCEDURE文を使用します。

- プロシージャが依存しているオブジェクトが無効な場合、TimesTenは最初にこれらのオブジェクトを再コンパイルします。

- また、TimesTenは、再コンパイルされたプロシージャをコールするプロシージャや、再コンパイルされたプロシージャをコールするプロシージャが定義されているパッケージの本体など、プロシージャに依存しているオブジェクトをすべて無効にします。

- TimesTenによってプロシージャが正常に再コンパイルされると、そのプロシージャは有効になります。プロシージャの再コンパイルでコンパイル・エラーになった場合、TimesTenによってエラーが返され、プロシージャは無効のままになります。ttIsqlコマンドのSHOW ERRORSを使用して、コンパイル・エラーを表示します。

- 再コンパイル中に、TimesTenはすべての永続コンパイラ設定を削除し、セッションからこれらの設定を再取得して、コンパイルの最後に格納します。この処理を回避するには、REUSE SETTINGS句を指定します。

例

システム・ビューUSER_PLSQL_OBJECT_SETTINGSに問合せを発行して、プロシージャquery_empのPLSQL_OPTIMIZE_LEVELおよびPLSCOPE_SETTINGSを確認します。PLSQL_OPTIMIZE_LEVELを3に変更することで、query_empを変更します。結果を確認します。

Command> SELECT PLSQL_OPTIMIZE_LEVEL, PLSCOPE_SETTINGS
> FROM user_plsql_object_settings WHERE  name = 'QUERY_EMP';
< 2, IDENTIFIERS:NONE >
1 row found.

Command> ALTER PROCEDURE query_emp COMPILE PLSQL_OPTIMIZE_LEVEL = 3;

Procedure altered.

Command> SELECT PLSQL_OPTIMIZE_LEVEL, PLSCOPE_SETTINGS
> FROM user_plsql_object_settings WHERE  name = 'QUERY_EMP';
< 3, IDENTIFIERS:NONE >
1 row found.

関連項目

CREATE PROCEDURE

ALTER REPLICATION

ALTER REPLICATION文では、レプリケーション要素の追加、変更、削除を行い、クラシック・レプリケーション・スキームに関連するデータベースのレプリケーション属性を変更します。

ほとんどのALTER REPLICATION処理は、レプリケーション・エージェントが停止している場合(ttAdmin -repStop)にのみサポートされます。ただし、レプリケーション・エージェントの実行中にサブスクライバ・データベースをレプリケーション・スキームに動的に追加することは可能です。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のクラシック・レプリケーション・スキームの変更に関する項を参照してください。

必要な権限

ADMIN

SQL構文

ALTER REPLICATION文の構文は、次のとおりです。

ALTER REPLICATION [Owner.]ReplicationSchemeName
ElementOperation [...] | StoreOperation |
NetworkOperation [...]

ElementOperationを1回以上指定します。

ADD ELEMENT ElementName
{ DATASTORE |
{ TABLE [Owner.]TableName [CheckConflicts] } |
SEQUENCE [Owner.]SequenceName }
{ MASTER | PROPAGATOR } FullStoreName
{ SUBSCRIBER FullStoreName [,... ] [ReturnServiceAttribute] } [ ... ] }
{ INCLUDE | EXCLUDE }
{ TABLE [[Owner.]TableName[,...]] |
CACHE GROUP [[Owner.]CacheGroupName[,...]] |
SEQUENCE [[Owner.]SequenceName[,...]] } [,...]

ALTER ELEMENT { ElementName | * IN FullStoreName ]
ADD SUBSCRIBER FullStoreName [,...] [ReturnServiceAttribute] |
ALTER SUBSCRIBER FullStoreName [,...]   |
SET [ReturnServiceAttribute]   |
DROP SUBSCRIBER FullStoreName [,... ]

ALTER ELEMENT * IN FullStoreName
SET { MASTER | PROPAGATOR } FullStoreName

ALTER ELEMENT ElementName
{SET NAME NewElementName | SET CheckConflicts}

ALTER ELEMENT ElementName
{ INCLUDE | EXCLUDE } { TABLE [Owner.]TableName |
CACHE GROUP [Owner.]CacheGroupName |
SEQUENCE [Owner.]SequenceName }[,...]

DROP ELEMENT { ElementName | * IN FullStoreName }

CheckConflictsは、TABLE要素をレプリケートした場合にのみ設定できます。構文の詳細は、「CHECK CONFLICTS」を参照してください。

ReturnServiceAttributeの構文は、次のとおりです。

{ RETURN RECEIPT [BY REQUEST] | NO RETURN }

StoreOperation句:

ADD STORE FullStoreName [StoreAttribute [... ]]
ALTER STORE FullStoreName SET StoreAttribute [... ]

StoreAttributeの構文は、次のとおりです。

DISABLE RETURN {SUBSCRIBER | ALL} NumFailures
RETURN SERVICES {ON | OFF} WHEN [REPLICATION] STOPPED
DURABLE COMMIT {ON | OFF}
RESUME RETURN Milliseconds
LOCAL COMMIT ACTION {NO ACTION | COMMIT}
RETURN WAIT TIME Seconds
COMPRESS TRAFFIC {ON | OFF}
PORT PortNumber
TIMEOUT Seconds
FAILTHRESHOLD Value
CONFLICT REPORTING SUSPEND AT Value
CONFLICT REPORTING RESUME AT Value
TABLE DEFINITION CHECKING {EXACT|RELAXED}

NetworkOperationを1回以上指定します。

ADD ROUTE MASTER FullStoreName SUBSCRIBER FullStoreName
{ { MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost }
PRIORITY Priority } [...]

DROP ROUTE MASTER FullStoreName SUBSCRIBER FullStoreName
{ MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost } [...]

パラメータ

パラメータ

説明

[Owner.]ReplicationSchemeName

クラシック・レプリケーション・スキームに割り当てる名前です。

ADD ELEMENT ElementName

新しい要素を既存のクラシック・レプリケーション・スキームに追加します。ElementNameは、30文字以下の識別子です。DATASTORE要素を使用する場合、ElementNameの最初の20文字を、他のDATASTORE要素名に対して一意にする必要があります。
要素がDATASTOREの場合、すべての表とキャッシュ・グループがデータベースに含まれます。データベースの一部にSEQUENCE要素が含まれる場合、その要素のRETURNサービスはこの文では変更されません。

ADD ELEMENT ElementName DATASTORE
{INCLUDE | EXCLUDE}

{TABLE [[Owner.]TableName [,...]]|

CACHE GROUP [[Owner.]CacheGroupName [,...]]|

SEQUENCE [[Owner.]SequenceName[,...]]} [,...]

新しいDATASTORE要素を既存のクラシック・レプリケーション・スキームに追加します。ElementNameは、30文字以下の識別子です。DATASTORE要素を使用する場合、ElementNameの最初の20文字を、他のDATASTORE要素名に対して一意にする必要があります。
INCLUDEは、指定された表とキャッシュ・グループのみをデータベースに含めます。INCLUDE句は、オブジェクト型(表、キャッシュ・グループまたは順序)ごとに1つ使用します。

EXCLUDEは、指定された表、キャッシュ・グループおよび順序を除外して、すべての表とキャッシュ・グループをデータベースに含めます。EXCLUDE句は、オブジェクト型(表、キャッシュ・グループまたは順序)ごとに1つ使用します。

要素が順序の場合、RETURN属性は適用されず、競合チェックはサポートされず、循環する順序はエラーを返します。

ADD SUBSCRIBER FullStoreName

追加のサブスクライバ・データベースを指定します。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベース・ファイル名です。

ALTER ELEMENT * IN FullStoreName
SET { MASTER | PROPAGATOR } FullStoreName

FullStoreNameがMASTERまたはPROPAGATORであるすべての要素を変更します。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベース・ファイル名です。
この構文を一連の要素名に使用すると、次の操作を実行できます。

- サブスクライバの追加、変更、削除。

- 要素セットのMASTERまたはPROPAGATORのステータスの設定。

変更されるデータベースの一部にSEQUENCE要素が含まれる場合、その要素のRETURNサービスはこの文では変更されません。

ALTER ELEMENT ElementName

サブスクライバが追加または削除される要素の名前です。

ALTER ELEMENT
ElementName1

SET NAME ElementName2

ElementName1をElementName2の名前に変更します。TABLE型の要素の名前のみを変更できます。

ALTER ELEMENT ElementName
{INCLUDE|EXCLUDE}

{TABLE [Owner.]TableName |

CACHE GROUP [Owner.]CacheGroupName | SEQUENCE [Owner.]SequenceName} [,...]

ElementNameは、変更する要素の名前です。
INCLUDEは、指定された表とキャッシュ・グループをデータベースに追加します。INCLUDE句は、オブジェクト型(表またはキャッシュ・グループ)ごとに1つ使用します。

EXCLUDEは、指定された表とキャッシュ・グループをデータベースから削除します。EXCLUDE句は、オブジェクト型(表、キャッシュ・グループまたは順序)ごとに1つ使用します。

要素が順序の場合、RETURN属性は適用されず、競合チェックはサポートされず、循環する順序はエラーを返します。

ALTER SUBSCRIBER FullStoreName
SET RETURN RECEIPT

[BY REQUEST]|NO RETURN

RETURN RECEIPTサービスを有効化、無効化または変更するように、サブスクライバ・データベースを変更します。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベース・ファイル名です。

CheckConflicts

データベース間でTABLE要素を双方向にレプリケートするための同時書込みで、レプリケーションの競合をチェックします。DATASTORE型の要素をレプリケートする場合は、競合をチェックできません。「CHECK CONFLICTS」を参照してください。

COMPRESS TRAFFIC {ON | OFF}

レプリケートされた通信量を圧縮して、ネットワークの帯域幅の量を削減します。ONは、STOREで定義されたデータベースに対してレプリケートされた通信量をすべて圧縮するように指定します。OFF(デフォルト)は、通信量を圧縮しないように指定します。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のレプリケートされた通信量の圧縮に関する説明を参照してください。

CONFLICT REPORTING SUSPEND AT Value

競合解消のレポートを一時停止します。
Valueは、負でない整数です。デフォルトは0(一時停止なし)です。競合のレポートは、競合の割合がValueを超えると一時的に停止されます。Valueを0に設定すると、競合のレポートの一時停止が無効になります。

この句は、表レベルのレプリケーションで有効です。

CONFLICT REPORTING RESUME AT Value

競合解消のレポートを再開します。
Valueは、負でない整数です。競合のレポートは、競合の割合がValueを下回ると再開されます。デフォルトは1です。

この句は、表レベルのレプリケーションで有効です。

DISABLE RETURN {SUBSCRIBER | ALL} NumFailures

NumFailuresで指定されているタイムアウト回数を経過した後、RETURNサービスのブロッキングを無効にするようにRETURNサービス障害ポリシーを設定します。SUBSCRIBERを選択すると、レプリケートされた更新を、指定されているタイムアウト期間内に確認できなかったサブスクライバのみにこのポリシーが適用されます。ALLを選択すると、いずれかのサブスクライバから応答がなかった場合、すべてのサブスクライバにこのポリシーが適用されます。この障害ポリシーは、RETURN RECEIPTまたはRETURN TWOSAFEサービスのいずれかで指定できます。
DISABLE RETURNが指定され、RESUME RETURNが指定されていない場合、データベースのレプリケーション・エージェントが再起動されるまでRETURNサービスはオフのままです。

詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービス・タイムアウト・エラーおよびレプリケーション状態変更の管理に関する説明を参照してください。

DURABLE COMMIT {ON | OFF}

DurableCommits一般接続属性設定を上書きします。DURABLE COMMIT ONは、レプリケーション・エージェントが実行中か停止しているかに関係なく、永続コミットを有効にします。

DROP ELEMENT * IN FullStoreName

FullStoreNameがMASTERであるすべての要素のレプリケーションの記述を削除します。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベース・ファイル名です。

DROP ELEMENT ElementName

ElementNameのレプリケーションの記述を削除します。

DROP SUBSCRIBER FullStoreName

指定したサブスクライバ・データベースに更新が送信されないように指定します。この処理は、クラシック・レプリケーション・スキームの持つサブスクライバが1つのみの場合に失敗します。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベース・ファイル名です。

FAILTHRESHOLD Value

サブスクライバ・データベースのために累積できるログ・ファイルの数。この値を超えると、サブスクライバはFailedの状態に設定されます。
0を指定すると、この上限は設定されません。これがデフォルトです。

詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のトランザクション・ログ障害しきい値の設定に関する説明を参照してください。

FullStoreName

次のいずれかとして指定されたデータベースです。

- SELF

- データベース・ファイル名の接頭辞

たとえば、データベースのパスがdirectory/subdirectory/data.ds0の場合、データベース名はdataになります。

この名前は、DSNの記述のDataStore属性で指定されるデータベース・ファイル名で、オプションでホストIDを次の書式で指定できます。

DataStoreName [ON Host]

Hostは、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のネットワークの構成に関する項で説明されているように、IPアドレスか、または1つ以上のIPアドレスに割り当てられたリテラル・ホスト名です。ホスト名に特殊文字が含まれている場合は、二重引用符で囲む必要があります。たとえば、"MyHost-500"のようになります。

LOCAL COMMIT ACTION {NO ACTION | COMMIT}

タイムアウト・イベントのRETURN TWOSAFEトランザクションで実行されるデフォルトのアクションを指定します。
NO ACTION: タイムアウト時、コミット関数はアプリケーションに戻り、トランザクションをコミット・コールに入ったときと同じ状態のままにしますが、レプリケートされた表をアプリケーションが更新できない場合を除きます。アプリケーションはコミットのみを再発行できます。トランザクションはロールバックできません。これがデフォルトです。

COMMIT: タイムアウト時、コミット関数はCOMMITを実行して、トランザクションをローカルに終了しようとします。同じトランザクション上でこれ以上の処理を行うことはできません。

この設定は、localActionパラメータを指定してttRepSyncSetプロシージャをコールすることで、特定のトランザクションに対して無効にすることができます。

MASTER FullStoreName

アプリケーションで特定の要素が更新されるデータベース。更新はMASTERデータベースによってSUBSCRIBERデータベースに送信されます。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベース・ファイル名です。

NO RETURN

RETURNサービスを使用しないように指定します。これがデフォルトです。
RETURNサービスの使用の詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービスの使用に関する説明を参照してください。

PORT PortNumber

このデータベースのレプリケーション・エージェントが接続をリスニングするTCP/IPポート番号です。指定しない場合は、レプリケーション・エージェントによってポート番号が自動的に割り当てられます。
相互にレプリケートするすべてのTimesTenデータベースで、同じポート番号を使用する必要があります。

PROPAGATOR FullStoreName

レプリケートされた更新を受け取って他のデータベースに渡すデータベース。

RESUME RETURN Milliseconds

DISABLE RETURNによってRETURNサービスのブロッキングが無効になった場合、この属性によって、RETURNサービスのブロッキングを再度有効にするタイミングに関するポリシーを設定します。RETURNサービスのブロッキングは、障害が発生したサブスクライバが、Millisecondsで指定された時間よりも短い間隔でレプリケートされた更新を確認するとすぐに再度有効になります。
DISABLE RETURNが指定され、RESUME RETURNが指定されていない場合、データベースのレプリケーション・エージェントが再起動されるまでRETURNサービスはオフのままです。

RETURN RECEIPT [BY REQUEST]

RETURN RECEIPTサービスを有効にし、これによって、マスター・データベースに対してトランザクションをコミットするアプリケーションは、すべてのサブスクライバがトランザクションを受信するまでブロックされます。
RETURN RECEIPTにより、すべてのトランザクションにサービスが適用されます。RETURN RECEIPT BY REQUESTを指定した場合は、ttRepSyncSetプロシージャを使用して、選択したトランザクションに対してRETURN RECEIPTサービスを有効にできます。RETURNサービスの使用の詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービスの使用に関する説明を参照してください。

RETURN SERVICES {ON | OFF} WHEN [REPLICATION] STOPPED

レプリケーションが無効になっている場合のRETURNサービスのオンまたはオフを設定します。
OFFは、レプリケーション無効時にRETURNサービスを無効する設定であり、RETURN RECEIPTサービスのデフォルトです。ONは、レプリケーション無効時にもRETURNサービスを有効のままにできる設定であり、RETURN TWOSAFEサービスのデフォルトです。

詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービス・タイムアウト・エラーおよびレプリケーション状態変更の管理に関する説明を参照してください。

RETURN TWOSAFE[BY REQUEST]

RETURN TWOSAFEサービスを有効にし、これによって、マスター・データベースに対してトランザクションをコミットするアプリケーションは、すべてのサブスクライバがトランザクションをコミットするまでブロックされます。
RETURN TWOSAFEにより、すべてのトランザクションにサービスが適用されます。RETURN TWOSAFE BY REQUESTを指定した場合は、ttRepSyncSetプロシージャを使用して、選択したトランザクションに対してRETURN RECEIPTサービスを有効にできます。RETURNサービスの使用の詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービスの使用に関する説明を参照してください。

RETURN WAIT TIME Seconds

RETURNサービスの応答を待機する秒数を指定します。デフォルト値は10秒です。値が0(ゼロ)の場合は、タイムアウトがないことを意味します。ttRepSyncSetプロシージャにreturnWaitパラメータを設定してアプリケーションからコールすることによって、このタイムアウト設定を上書きできます。

SET {MASTER | PROPAGATOR} FullStoreName

任意のデータベースを任意の要素のMASTERまたはPROPAGATORに設定します。FullStoreNameは、データベースのファイルの基本名である必要があります。

SUBSCRIBER FullStoreName

MASTERデータベースから更新を受け取るデータベース。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベース・ファイル名です。

TABLE DEFINITION CHECKING {EXACT|RELAXED}

サブスクライバで実行される表定義チェックの種類を指定します。

- EXACT: マスターおよびサブスクライバで表が一致している必要があります。

- RELAXED: 表には同じキー定義、列の数および列のデータ型が必要です。

デフォルトはRELAXEDです。

注意: TABLE DEFINITION CHECKING EXACTを使用している場合、データベースを移行するにはttMigrate -exactUpgradeを使用します。TABLE DEFINITION CHECKING RELAXEDを使用している場合、データベースを移行するにはttMigrate -relaxedUpgradeを使用します。

TIMEOUT Seconds

レプリケーション・エージェントがリモート・レプリケーション・エージェントからの応答を待機する最大時間(秒)。デフォルトは120秒です。
注意: リモート・レプリケーション・エージェントからの応答の遅延の原因となる大規模なトランザクションの場合、エージェントは、トランザクションのサイズに基づいて、必要に応じてタイムアウトを次第に大きい値にスケーリングします。大規模なトランザクションに対してTIMEOUTを60秒以下に設定した場合、このスケーリングは行われず、エージェントは応答の待機をタイムアウトします。『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のリモート・レプリケーション・エージェントからの応答のタイムアウトの待機の設定に関する項も参照してください。

ADD ROUTE MASTER FullStoreName SUBSCRIBER FullStoreName

NetworkOperationをレプリケーション・スキームに追加します。各サブスクライバ・ストアへのすべてのアウトバウンド接続に対してマスター・ストアが使用するネットワーク・インタフェースを制御できます。
複数回指定できます。

FullStoreNameには、ON "host"を指定する必要があります。

DROP ROUTE MASTER FullStoreName SUBSCRIBER FullStoreName

クラシック・レプリケーション・スキームからNetworkOperationを削除します。
複数回指定できます。

FullStoreNameには、ON "host"を指定する必要があります。

MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost

MasterHostおよびSubscriberHostは、マスターおよびサブスクライバ・ストアのネットワーク・インタフェースのIPアドレスです。IPV6のドット表記または正規形式で指定するか、あるいはコロン表記で指定します。
句は複数回指定できます。ADDおよびDROP ROUTE MASTERの両方に対して有効です。

PRIORITY Priority

1から99の整数で表される変数。IPアドレスの優先順位を示します。整数値が小さいほど、優先度は高くなります。同じ優先度を持つアドレスが複数指定されている場合は、エラーが返されます。ピア接続の確立に使用する複数のIPアドレスの順序を制御します。
NetworkOperation句の構文で必須です。MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost句の後ろに記述します。

説明

- ALTER ELEMENT DROP SUBSCRIBERは、特定のレプリケーション要素のサブスクライバを削除します。

- レプリケーション要素の名前が、別のデータベースにすでに定義されているレプリケーション要素の名前と競合する場合は、ALTER ELEMENT SET NAMEを使用してレプリケーション要素の名前を変更できます。SET NAMEでは、* IN FullStoreNameは使用できません。FullStoreNameは、データベースのファイルの基本名である必要があります。たとえば、データベースのファイル名がdata.ds0の場合、ファイルの基本名はdataになります。

- ALTER ELEMENT SET MASTERを使用して、レプリケーション要素のマスター・データベースを変更できます。MASTER操作には、* IN FullStoreNameオプションを使用する必要があります。つまり、マスター・データベースは、そのレプリケーション要素すべての所有権を送信して、マスター・ロールを完全に放棄する必要があります。通常、このオプションは、(共通の)MASTERの障害の後に、SUBSCRIBERデータベースで要求されるALTER REPLICATION文で使用します。

- マスター要素の所有権をサブスクライバに送信するには、次の手順を実行します。

1. レプリケートされた各表に対してALTER REPLICATION DROP ELEMENTを実行し、レプリケートされた要素を手動で削除します。

2. 新しく指定したMASTER/SUBSCRIBERロールを付けてALTER REPLICATION ADD ELEMENTを使用して、各表をレプリケーション・スキームに追加します。

- ALTER REPLICATION ALTER ELEMENT SET MASTERでは、以前のマスターは自動的にはサブスクライバとしてスキームに保持されません。保持する必要がある場合は、ALTER REPLICATION ALTER ELEMENT ADD SUBSCRIBER文を実行します。

注意:
ALTER ELEMENT DROP MASTERという文はありません。各レプリケーション要素のMASTERデータベースは1つのみである必要があり、現在指定されているMASTERはレプリケーション・スキームから削除できません。

- NetworkOperation句を使用する前に、レプリケーション・エージェントを停止してください。

- 次のレプリケーション・スキームはALTER REPLICATION文で変更できません。

- アクティブ・スタンバイ・ペア。かわりに、ALTER ACTIVE STANDBY PAIRを使用します。

- クラスタウェア管理のアクティブ・スタンバイ・ペア。かわりに、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のスキーマの変更に関する説明で説明されているタスクを実行します。

例

この例では、データベースwest上で更新してデータベースeastにレプリケートする追加の表westleadsのクラシック・レプリケーション・スキームを設定します。

ALTER REPLICATION r1
ADD ELEMENT e3 TABLE westleads
MASTER west ON "westcoast"
SUBSCRIBER east ON "eastcoast";

この例では、表westleadsにサブスクライバ(backup)を追加します。

ALTER REPLICATION r1
ALTER ELEMENT e3
ADD SUBSCRIBER backup ON "backupserver";

この例では、表westleadsの要素名をe3からnewelementnameに変更します。

ALTER REPLICATION r1
ALTER ELEMENT e3
SET NAME newelementname;

この例では、現在のマスターwestのすべての要素について、newwestをマスターに指定します。

ALTER REPLICATION r1
ALTER ELEMENT * IN west
SET MASTER newwest;

この要素は、eastのポート番号を変更します。

ALTER REPLICATION r1
ALTER STORE east ON "eastcoast" SET PORT 22251;

この例では、my.tab1表をmy.rep1レプリケーション・スキームのds1データベース要素に追加します。

ALTER REPLICATION my.rep1
ALTER ELEMENT ds1 DATASTORE
INCLUDE TABLE my.tab1;

この例では、my.cg1キャッシュ・グループをmy.rep1レプリケーション・スキームのds1データベースに追加します。

ALTER REPLICATION my.rep1
ALTER ELEMENT ds1 DATASTORE
INCLUDE CACHE GROUP my.cg1;

この例では、ds1データベースをmy.rep1レプリケーション・スキームに追加します。データベースには、my.tab2表、my.cg2キャッシュ・グループおよびmy.cg3キャッシュ・グループが含まれています。

ALTER REPLICATION my.rep1
ADD ELEMENT ds1 DATASTORE
MASTER rep2
SUBSCRIBER rep1, rep3
INCLUDE TABLE my.tab2
INCLUDE CACHE GROUP my.cg2, my.cg3;

この例では、ds2データベースをレプリケーション・スキームに追加しますが、my.tab1表、my.cg0キャッシュ・グループおよびmy.cg1キャッシュ・グループが除外されます。

ALTER REPLICATION my.rep1
ADD ELEMENT ds2 DATASTORE
MASTER rep2
SUBSCRIBER rep1
EXCLUDE TABLE my.tab1
EXCLUDE CACHE GROUP my.cg0, my.cg1;

NetworkOperation句を追加します。

ALTER REPLICATION r
ADD ROUTE MASTER rep1 ON "machine1" SUBSCRIBER rep2 ON "machine2"
MASTERIP "1.1.1.1" PRIORITY 1 SUBSCRIBERIP "2.2.2.2"
PRIORITY 1
MASTERIP "3.3.3.3" PRIORITY 2 SUBSCRIBERIP "4.4.4.4" PRIORITY 2;

NetworkOperation句を削除します。

ALTER REPLICATION r
DROP ROUTE MASTER repl ON "machine1" SUBSCRIBER rep2 ON "machine2"
MASTERIP "1.1.1.1" SUBSCRIBERIP "2.2.2.2"
MASTERIP "3.3.3.3" SUBSCRIBERIP "4.4.4.4";

関連項目

「ALTER ACTIVE STANDBY PAIR」
「CREATE ACTIVE STANDBY PAIR」
「CREATE REPLICATION」
「DROP ACTIVE STANDBY PAIR」
「DROP REPLICATION」

表をデータベースから削除するには、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のクラシック・レプリケーション・スキーム内のレプリケートされた表の変更に関する項を参照してください。

ALTER SESSION

ALTER SESSION文は、セッション・パラメータを動的に変更します。これは、現在のセッションの同等の接続属性の設定を上書きします(適用可能な場合)。

必要な権限

なし

SQL構文

ALTER SESSION SET
{DDL_REPLICATION_ACTION={'INCLUDE'|'EXCLUDE'} |
DDL_REPLICATION_LEVEL={1|2|3} |
NLS_SORT = {BINARY| SortName} |
NLS_LENGTH_SEMANTICS = {BYTE|CHAR} |
NLS_NCHAR_CONV_EXCP = {TRUE|FALSE} |
ISOLATION_LEVEL = {SERIALIZABLE | READ COMMITTED} |
PLSQL_TIMEOUT = n |
PLSQL_OPTIMIZE_LEVEL = {0|1|2|3}|
PLSCOPE_SETTINGS = {'IDENTIFIERS:ALL'|'IDENTIFIERS:NONE'} |
PLSQL_CONN_MEM_LIMIT = n |
PLSQL_CCFLAGS = 'name1:value1, name2:value2,..., nameN:valueN' |
REPLICATION_TRACK = TrackNumber |
COMMIT_BUFFER_SIZE_MAX = n
}

パラメータ

パラメータ

説明

DDL_REPLICATION_ACTION={'INCLUDE'|'EXCLUDE'}

表または順序のいずれかの作成時に表または順序をアクティブ・スタンバイ・ペアに含めるには、DDL_REPLICATION_ACTIONをINCLUDEに設定します。表または順序のいずれかの作成時に表または順序をアクティブ・スタンバイ・ペアに含めない場合は、DDL_REPLICATION_ACTIONをEXCLUDEに設定します。デフォルトはINCLUDEです。
EXCLUDEに設定した場合:

- 表をレプリケーション・スキームに追加するには、後でALTER ACTIVE STANDBY PAIR ... INCLUDE TABLEをアクティブ・データベースで実行する必要があります。この文を実行すると表の内容は切り捨てられるため、すべての表がすべてのアクティブ・スタンバイ・データベースおよびサブスクライバで空である必要があります。

- 順序をレプリケーション・スキームに追加するには、後でALTER ACTIVE STANDBY PAIR ... INCLUDE SEQUENCEをアクティブ・データベースで実行する必要があります。

この属性が有効なのは、DDL_REPLICATION_LEVELが2以上の場合のみです。

詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアでのDDL変更に関する説明を参照してください。

注意: 同等の接続属性はDDLReplicationActionです。

DDL_REPLICATION_LEVEL={1|2|3}

DDLがアクティブ・スタンバイ・ペアのすべてのデータベースにわたってレプリケートされるかどうかを指定します。値は次のいずれかです。

- 1: デフォルト。ALTER TABLEを使用して、アクティブ・データベースのレプリケートされる表に対して列を追加または削除します。変更は、スタンバイ・データベースの表にレプリケートされます。

- 2: アクティブ・データベースからスタンバイ・データベースへの、表、シノニムまたは索引の作成または削除のレプリケーションをサポートします。これには、グローバル一時表の作成または削除は含まれますが、CREATE TABLE AS SELECTは含まれません。この文は、空の表に索引が作成された場合にのみレプリケートされます。

- 3: レベル2でサポートされているすべてのDDLのレプリケーション、ビューと順序(マテリアライズド・ビューは含まれません)の作成または削除のレプリケーションをサポートし、ttCacheUidPwdSet組込みプロシージャをコールすると、キャッシュ管理ユーザーIDおよびパスワードの設定を変更します。
注意: キャッシュ・グループを定義した後に、キャッシュ管理ユーザーIDを変更することはできませんが、キャッシュ管理パスワードは変更できます。

詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアでのDDL変更に関する説明を参照してください。

注意: 同等の接続属性はDDLReplicationLevelです。

NLS_SORT={BINARY| SortName}

言語の比較に使用する照合の順序を示します。
大/小文字を区別しないソートの場合またはアクセントを区別しないソートの場合は、BINARYまたはSortName値に_CIまたは_AIを追加します。

NLS_SORTを指定しない場合、デフォルトはBINARYです。

SortNameでサポートされる値の完全なリストは、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の言語ソートに関する説明を参照してください。

大/小文字を区別しないソートまたはアクセントを区別しないソートの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の大/小文字を区別しない言語ソートまたはアクセントを区別しない言語ソートに関する説明を参照してください。

NLS_LENGTH_SEMANTICS ={BYTE|CHAR}

長さセマンティクス構成のデフォルトを設定します。BYTEはバイト長セマンティクスを示します。CHARは文字長セマンティクスを示します。デフォルトはBYTEです。
長さセマンティクスの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の長さセマンティクスおよびデータ記憶域に関する説明を参照してください。

NLS_NCHAR_CONV_EXCP = {TRUE|FALSE}

NCHAR/NVARCHAR2データとCHAR/VARCHAR2データ間でキャラクタ・タイプの暗黙的または明示的な変換中にデータの損失があった場合に、エラーを報告するかどうかを指定します。TRUEを指定するとエラーが報告されます。FALSEを指定するとエラーは報告されません。デフォルトは、FALSEです。

ISOLATION_LEVEL = {SERIALIZABLE|READ COMMITTED}

分離レベルを設定します。変更は次のトランザクションから有効になります。
分離レベルの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のトランザクションの分離レベルに関する項を参照してください。

注意: 同等の接続属性はIsolationです。

PLSQL_TIMEOUT= n

PL/SQLプロシージャが自動的に終了されるまでの実行時間を制御します。nは時間(秒)を表します。0(時間制限なし)または正の整数を指定します。デフォルトは30です。
この値を変更すると、新しい値は、現在実行しているPL/SQLプログラム・ユニットおよび同じ接続でこの後実行される他のすべてのプログラム・ユニットに影響します。

データベースでPL/SQLが無効になっているときにこの属性を指定した場合、TimesTenによってエラーがスローされます。

PLSQL_OPTIMIZE_LEVEL = {0|1|2|3}

PL/SQLライブラリ・ユニットのコンパイルに使用する最適化レベルを指定します。設定値が高いほど、コンパイラでPL/SQLライブラリ・ユニットを最適化するのに多くの処理が必要になります。可能な値は0、1、2または3です。デフォルトは2です。
データベースでPL/SQLが無効になっているときにこの属性を指定した場合、TimesTenによってエラーが返されます。

詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のPLSQL_OPTIMIZE_LEVELに関する説明を参照してください。

PLSCOPE_SETTINGS = '{IDENTIFIERS:ALL |IDENTIFIERS:NONE}'

PL/SQLコンパイラで相互参照情報を生成するかどうかを制御します。相互参照情報を生成するには、IDENTIFIERS:ALLを指定します。デフォルトはIDENTIFIERS:NONEです。
データベースでPL/SQLが無効になっているときにこの属性を指定した場合、TimesTenによってエラーが返されます。

詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のPLSCOPE_SETTINGSに関する説明を参照してください。

PLSQL_CONN_MEM_LIMIT = n

この接続でPL/SQLが使用できるプロセス・ヒープ・メモリーの最大量を指定します。nは整数(MB単位)です。デフォルトは100です。
データベースでPL/SQLが無効になっているときにこの属性を指定した場合、TimesTenによってエラーが返されます。

詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』のPLSQL_CONN_MEM_LIMITに関する説明を参照してください。

PLSQL_CCFLAGS = 'name1:value1, name2:value2, ..., nameN:valueN'

PL/SQLユニットの条件付きコンパイルを制御する問合せディレクティブを指定し、確認する条件に応じて、PL/SQLプログラムの機能をカスタマイズできます。たとえば、デバッグ機能をアクティブ化するには、次のようにします。

PLSQL_CCFLAGS = 'DEBUG:TRUE'

REPLICATION_TRACK = TrackNumber

追跡ベース・パラレル・レプリケーションを管理している場合は、レプリケーション追跡に接続を割り当てることができます。接続によって発行されたすべてのトランザクションは、追跡が変更されないかぎり、この追跡に割り当てられます。
指定された番号が、存在しないレプリケーション・トラックXに対してである場合、トランザクションはXをReplicationParallelismで割った余りとして計算されたトラック番号に割り当てられます。

先行する操作がすべて読取り操作だった場合を除き、トランザクションの途中でトラックを変更することはできません。

詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』の自動パラレル・レプリケーション環境内のレプリケーション・トラックの指定に関する項を参照してください。

同等の接続属性はReplicationTrackです。

COMMIT_BUFFER_SIZE_MAX= n

接続の実行中に、コミット・バッファの最大サイズを変更します。nは整数で表現され、コミット・バッファの最大サイズ(MB)を示します。
変更は次のトランザクションから有効になります。

ttConfiguration組込みプロシージャをコールして、現在構成されているコミット・バッファの最大サイズを確認します。0を指定すると、デフォルト・サイズでバッファが設定されます。デフォルト・サイズは128KBです。

コミット・バッファおよびトランザクションの再利用操作の詳細は、『Oracle TimesTen In-Memory Databaseオペレーションガイド』のトランザクションの再利用操作に関する説明、および『Oracle TimesTen In-Memory Databaseリファレンス』のCommitBufferSizeMaxに関する説明を参照してください。

注意: 同等の接続属性はCommitBufferSizeMaxです。

説明

- ALTER SESSION文は、そのセッションで次に実行されるコマンドから作用します。新しいセッション・パラメータはただちに有効になります。

- 文字比較を含む演算では、言語を区別する照合順番がサポートされています。大/小文字を区別しないソートは、DISTINCT値の解釈に影響することがあります。

- CHARとNCHAR間の暗黙的および明示的な変換がサポートされています。

- TIMESTEN8キャラクタ・セットを使用している場合は、CHARとNCHAR間の変換ができません。

- サポートされているキャラクタ・セットで、SQL文字列関数を使用できます。たとえば、UPPERおよびLOWER関数では、ASCII以外のCHARおよびVARCHAR2文字とNCHARおよびNVARCHAR2文字がサポートされています。

- 選択したキャラクタ・セットによっては、CHARおよびVARCHAR2列のデータに対するメモリー消費に影響する可能性があります。

- レプリケーション・スキームに含まれるすべてのデータベースのキャラクタ・セットが一致している必要があります。

- 既存の表をアクティブ・スタンバイ・ペアに追加するには、DDL_REPLICATION_LEVELを2以上に設定し、DDL_REPLICATION_ACTIONをINCLUDEに設定します。または、DDL_REPLICATION_ACTIONがEXCLUDEに設定されている場合は、ALTER ACTIVE STANDBY PAIR ... INCLUDE TABLE文を使用できます。この場合、ALTER ACTIVE STANDBY PAIR ... INCLUDE TABLE文を実行すると表の内容は切り捨てられるため、この文を実行する前に、表は空であり、すべてのデータベースに存在している必要があります。

- 既存の順序またはビューをアクティブ・スタンバイ・ペアに追加するには、DDL_REPLICATION_LEVELを3に設定します。順序をレプリケーション・スキームに含めるには、DDL_REPLICATION_ACTIONをINCLUDEに設定する必要があります。これは、マテリアライズド・ビューには適用されません。

- オブジェクトは、受信側データベースがそのレベルのレプリケーションをサポートするTimesTenリリースであり、アクティブ・スタンバイ・ペアのレプリケーション・スキーム用に構成されている場合にのみレプリケートされます。たとえば、11.2.2.7.0より前のデータベース・リリースへの順序のレプリケーション(DDL_REPLICATION_LEVEL=3が必要)は、サポートされません。受信側データベースは、DDL_REPLICATION_LEVEL=2でサポートされているオブジェクトのレプリケーション用に、リリース11.2.1.8.0以上である必要があります。

例

ALTER SESSION文を使用してCOMMIT_BUFFER_SIZE_MAXを500MBに設定します。まず、ttConfigurationをコールして現在の接続設定を表示します。ALTER SESSION文を使用して、COMMIT_BUFFER_SIZE_MAXを500に変更します。ttConfigurationをコールして、新しい設定を表示します。

Command>  CALL ttConfiguration ('CommitBufferSizeMax');
< CommitBufferSizeMax, 0 >
1 row found.
Command> ALTER SESSION SET COMMIT_BUFFER_SIZE_MAX = 500;

Session altered.

Command> CALL ttConfiguration ('CommitBufferSizeMax');
< CommitBufferSizeMax, 500 >
1 row found.

ALTER SESSION文を使用して、PLSQL_TIMEOUTを60秒に変更します。2つ目のALTER SESSION文を使用して、PLSQL_OPTIMIZE_LEVELを3に変更します。次に、ttConfigurationをコールして新しい値を表示します。

Command> ALTER SESSION SET PLSQL_TIMEOUT = 60;
Session altered.Command> ALTER SESSION SET PLSQL_OPTIMIZE_LEVEL = 3;
Session altered.

Command> CALL TTCONFIGURATION ();
< CkptFrequency, 600 >
< CkptLogVolume, 0 >
< CkptRate, 0 >
...
< PLSQL_OPTIMIZE_LEVEL, 3 >
< PLSQL_TIMEOUT, 60 >
...
47 rows found.

この例では、PLSQL_TIMEOUTを20秒に設定します。無限にループするプログラムを実行してみます。20秒で実行が終了し、エラーが戻されます。

Command> ALTER SESSION SET PLSQL_TIMEOUT = 20;

Command> DECLARE v_timeout NUMBER;
> BEGIN
>   LOOP
>     v_timeout :=0;
>     EXIT WHEN v_timeout < 0;
>   END LOOP;
> END;
> /
8509: PL/SQL execution terminated; PLSQL_TIMEOUT exceeded

ttConfigurationをコールして、現在のPLSCOPE_SETTINGSの値を表示します。ALTER SESSION文を使用して、PLSCOPE_SETTINGSの値をIDENTIFIERS:ALLに変更します。ダミーのプロシージャpを作成します。システム・ビューSYS.USER_PLSQL_OBJECT_SETTINGSに問合せを発行して、プロシージャpに新しい設定が適用されていることを確認します。

Command> CALL TTCONFIGURATION ();
< CkptFrequency, 600 >
< CkptLogVolume, 0 >
< CkptRate, 0 >
...
< PLSCOPE_SETTINGS, IDENTIFIERS:NONE >
...
47 rows found.

Command> ALTER SESSION SET PLSCOPE_SETTINGS = 'IDENTIFIERS:ALL';
Session altered.

Command> CREATE OR REPLACE PROCEDURE p IS
> BEGIN
>  NULL;
> END;
> /
Procedure created.

Command> SELECT PLSCOPE_SETTINGS FROM SYS.USER_PLSQL_OBJECT_SETTINGS WHERE
> NAME = 'p';
< IDENTIFIERS:ALL >
1 row found.

次の例では、ALTER SESSION文を使用してNLS_SORT設定をBINARYからBINARY_CIに変更し、さらにBINARY_AIに変更しています。データベースおよび接続のキャラクタ・セットはWE8ISO8859P1です。

Command> connect "dsn=cs;ConnectionCharacterSet=WE8ISO8859P1";
Connection successful: DSN=cs;UID=user;DataStore=/datastore/user/cs;
DatabaseCharacterSet=WE8ISO8859P1;
ConnectionCharacterSet=WE8ISO8859P1;PermSize=32;TypeMode=0;
(Default setting AutoCommit=1)
Command>#Create the Table
Command> CREATE TABLE collatingdemo (letter VARCHAR2 (10));
Command>#Insert values
Command> INSERT INTO collatingdemo VALUES ('a');
1 row inserted.
Command> INSERT INTO collatingdemo VALUES ('A');
1 row inserted.
Command> INSERT INTO collatingdemo VALUES ('Y');
1 row inserted.
Command> INSERT INTO collatingdemo VALUES ('ä');
1 row inserted.
Command>#SELECT
Command> SELECT * FROM collatingdemo;
< a >
< A >
< Y >
< ä >
4 rows found.
Command>#SELECT with ORDER BY
Command> SELECT * FROM collatingdemo ORDER BY letter;
< A >
< Y >
< a >
< ä >
4 rows found.
Command>#set NLS_SORT to BINARY_CI and SELECT
Command> ALTER SESSION SET NLS_SORT = BINARY_CI;
Command> SELECT * FROM collatingdemo ORDER BY letter;
< a >
< A >
< Y >
< Ä >
< ä >
4 rows found.
Command>#Set NLS_SORT to BINARY_AI and SELECT
Command> ALTER SESSION SET NLS_SORT = BINARY_AI;
Command> SELECT * FROM collatingdemo ORDER BY letter;
< ä >
< a >
< A >
< Y >
4 rows found.

次の例では、ユーザー定義のパラレル・レプリケーションを有効にし(アクティブ・スタンバイ・ペアではサポートされません)、ALTER SESSION文を使用して、現在の接続でのレプリケーションのトラック番号を5に変更します。レプリケーション・スキームのパラレル・レプリケーションを有効にするには、ReplicationApplyOrderingを1に設定します。次に、REPLICATION_TRACKは常にReplicationParallelism以下の番号に設定します。たとえば、ReplicationParallelism接続属性を、REPLICATION_TRACKに設定された値である5よりも大きい6に設定できます。

Command> ALTER SESSION SET REPLICATION_TRACK = 5;
Session altered.

次の例では、変更スタンバイ・レプリケーション・ペアのアクティブ・データベースでDDL_REPLICATON_LEVELを2に設定し、DDLReplicationActionを'INCLUDE'に設定して、列、表、シノニムおよび索引の追加および削除のレプリケーションを有効にします。

Command > ALTER SESSION SET DDL_REPLICATION_LEVEL=2;
Session altered.

Command > ALTER SESSION SET DDL_REPLICATION_ACTION='INCLUDE';
Session altered.

注意:
DDL_REPLICATION_LEVELおよびDDL_REPLICATION_ACTIONの同等の接続属性は、それぞれDDLReplicationLevelおよびDDLReplicationActionです。

ALTER TABLE

ALTER TABLE文は、既存の表定義を変更します。

必要な権限

表の所有者に必要な権限はありません。

別のユーザーの表の場合はALTER ANY TABLEが必要です。

ALTER TABLE...ADD FOREIGN KEYの場合、変更される表の所有者に、外部キー句で参照される表のREFERENCES権限が必要です。

SQL構文

1つの列の追加:

ALTER TABLE [Owner.]TableName
ADD [COLUMN] ColumnName ColumnDataType
[DEFAULT DefaultVal] [[NOT] INLINE] [UNIQUE] [NULL]
[COMPRESS (CompressColumns [,...])]

複数の列の追加:

ALTER TABLE [Owner.]TableName
ADD (ColumnName ColumnDataType
[DEFAULT DefaultVal] [[NOT] INLINE] [UNIQUE] [NULL] [,... ] )
[COMPRESS (CompressColumns [,...])]

NOT NULL列の追加(注意: DEFAULT句が必要):

ALTER TABLE [Owner.]TableName
ADD [COLUMN] ColumnName ColumnDataType
NOT NULL [ENABLE] DEFAULT DefaultVal [[NOT] INLINE] [UNIQUE]
[COMPRESS (CompressColumns [,...])]

複数のNOT NULL列の追加(注意: DEFAULT句が必要):

ALTER TABLE [Owner.]TableName
ADD (ColumnName ColumnDataType
NOT NULL [ENABLE] DEFAULT DefaultVal [[NOT] INLINE] [UNIQUE] [,...])
[COMPRESS (CompressColumns [,...])]

CompressColumnsの構文は次のとおりです。

{ColumnDefinition | (ColumnDefinition [,...])} BY DICTIONARY
[MAXVALUES = CompressMax]

列の削除:

ALTER TABLE [Owner.]TableName
DROP {[COLUMN] ColumnName | (ColumnName [,... ] )}

注意:
圧縮列グループの列を削除する場合は、圧縮列グループのすべての列を指定する必要があります。

範囲索引を使用した主キー制約の追加:

ALTER TABLE [Owner.]TableName ADD CONSTRAINT ConstraintName
PRIMARY KEY (ColumnName [,... ])

ハッシュ索引を使用した主キー制約の追加:

ALTER TABLE [Owner.]TableName ADD CONSTRAINT ConstraintName
PRIMARY KEY (ColumnName [,... ])
USE HASH INDEX PAGES = RowPages | CURRENT

外部キーおよびON DELETE CASCADE (オプション)の追加:

ALTER TABLE [Owner.]TableName
ADD [CONSTRAINT ForeignKeyName] FOREIGN KEY
(ColumnName [,...]) REFERENCES RefTableName
[(ColumnName [,...])] [ON DELETE CASCADE]

外部キーの削除:

ALTER TABLE [Owner.]TableName
DROP CONSTRAINT ForeignKeyName

注意:
ALTER TABLEを使用して主キー制約を削除することはできません。制約を削除するには、表を削除してから再作成する必要があります。

ハッシュ索引のサイズ変更:

ALTER TABLE [Owner.]TableName
SET PAGES = RowPages | CURRENT

主キーで使用する索引をハッシュ索引に変更:

ALTER TABLE [Owner.]TableName
USE HASH INDEX PAGES = RowPages | CURRENT

主キーで使用する索引をUSE RANGE INDEX句で範囲索引に変更するには、次のように実行します。

ALTER TABLE [Owner.]TableName
USE RANGE INDEX

列のデフォルト値の変更:

ALTER TABLE [Owner.]TableName
MODIFY (ColumnName DEFAULT DefaultVal)

列の一意制約の追加または削除:

ALTER TABLE Owner.]TableName
{ADD | DROP} UNIQUE (ColumnName)

NULL値可能な列のデフォルト値をNULLに変更することによるデフォルト値の削除:

ALTER TABLE [Owner.]TableName
MODIFY (ColumnName DEFAULT NULL)

LRUエージングの追加:

ALTER TABLE [Owner.]TableName
ADD AGING LRU [ON | OFF]

時間ベースのエージングの追加:

ALTER TABLE [Owner.]TableName
ADD AGING USE ColumnName LIFETIME num1
{SECOND[S] | MINUTE[S] | HOUR[S] | DAY[S]}
[CYCLE num2 {SECOND[S] | MINUTE[S] | HOUR[S] | DAY[S] }]
[ON | OFF]

エージング状態の変更:

ALTER TABLE [Owner.]TableName
SET AGING {ON | OFF}

エージングの削除:

ALTER TABLE [Owner.]TableName
DROP AGING

存続期間の変更(時間ベースのエージングの場合):

ALTER TABLE [Owner.]TableName
SET AGING LIFETIME num1 {SECOND[S] | MINUTE[S] | HOUR[S] | DAY[S]}

サイクルの変更(時間ベースのエージングの場合):

ALTER TABLE [Owner.]TableName
SET AGING CYCLE num2 {SECOND[S] | MINUTE[S] | HOUR[S] | DAY[S]}

パラメータ

パラメータ

説明

[Owner.] TableName

変更する表を指定します。

UNIQUE

列ColumnNameの各行の値が一意である必要があることを示します。

MODIFY

指定した列の属性を新しい値に変更します。

DEFAULT [DefaultVal |NULL]

列のデフォルト値(DefaultVal)を指定します。NULLを指定すると、列のデフォルト値が削除されます。デフォルト値にSYSDATEを指定した列を追加すると、既存の行の列の値のみが、列が追加された時点のシステム日付になります。デフォルト値がUSER関数の1つである場合、列の値はALTER TABLE文を実行したセッションのユーザーの値になります。現在、ROWIDデータ型のデフォルト値を割り当てることはできません。
列のデフォルト値を変更しても、既存の行は変更されません。

注意: レプリケーション・スキームの一部である表にNOT NULL列を追加するには、DDL_REPLICATON_LEVELが3以上である必要があります。

ColumnName

ALTER TABLE文に含める列の名前。新しい列に、既存の列または別の新しい列と同じ名前を指定することはできません。NOT NULL列を追加する場合は、DEFAULT句を含める必要があります。

ColumnDataType

追加する列のデータ型です。追加のパラメータが必要なデータ型もあります。指定できるデータ型の詳細は、第1章「データ型」を参照してください。

NOT NULL [ENABLE]

列を追加する場合に、NOT NULLを指定できます。NOT NULLを指定する場合は、DEFAULT句を含める必要があります。任意で、NOT NULL句の後にENABLEを指定できます。NOT NULL制約は常に有効なため、ENABLEの指定は必須ではありません。

INLINE|NOT INLINE

デフォルトでは、宣言された列の長さが128バイトより大きい可変長の列は表外に保存されます。宣言された列の長さが128バイト以下の可変長の列は、表内に保存されます。INLINEおよびNOT INLINEキーワードを使用すると、表を作成するときのデフォルトの動作を無効にすることができます。

COMPRESS (CompressColumns [,...])

圧縮が有効な表について圧縮列グループを定義します。表の1つ以上の列を含めることができます。
圧縮グループで複数列を定義する場合は、列をINLINEとして指定する必要があります。アウトライン列は、それが圧縮グループ内の唯一の列である場合のみ、圧縮グループに指定できます。

各圧縮列グループは、最大16列に制限されます。

圧縮列の詳細は、「表のインメモリー列圧縮」を参照してください。

BY DICTIONARY

各圧縮列グループの圧縮ディクショナリを定義します。

MAXVALUES = CompressMax

CompressMaxは、表の個別値の合計数であり、圧縮列グループ・ポインタ列のサイズを1、2または4バイトに設定し、ディクショナリ表のエントリの最大数のサイズを設定します。
ディクショナリ表の場合、NULLは1つの一意の値としてカウントされます。

CompressMaxは、1から2^32-1までの整数です。

MAXVALUES句を省略した場合の最大サイズのデフォルトは232-1であり、ポインタ列に4バイトが使用されます。値が2^32-1よりも大きい場合は、エラーがスローされます。

圧縮ディクショナリの最大サイズ指定の詳細は、「表のインメモリー列圧縮」を参照してください。

ADD CONSTRAINT ConstraintName PRIMARY KEY (ColumnName
[,... ] ) [USE HASH INDEX PAGES = RowPages | CURRENT]

表に主キー制約を追加します。主キーの列はNOT NULLとして定義する必要があります。
主キー制約を適用するために使用する索引の名前としてConstraintNameを指定します。主キーに対して使用するNOT NULL列の名前としてColumnNameを指定します。

主キーに対してハッシュ索引を使用するには、USE HASH INDEX句を指定します。指定しない場合、主キー制約には範囲索引が使用されます。

CURRENTを指定すると、表内の現在の行数を使用してページ・カウント値が計算されます。RowPagesを指定する場合は、ページ数が使用されます。RowPagesの値は、表の想定行数を256で除算して決定します。たとえば、表に256,000行ある場合は、RowPagesに1000を指定します(256000/256=1000)。

RowPagesの値は、0を含まない正の定数である必要があります。

TimesTenでは、表に行がない場合は、PAGES=CURRENTを指定しないことをお薦めします。

推定した数が小さすぎると、パフォーマンスが悪化します。ハッシュ索引作成の詳細は、「列の定義」を参照してください。

注意: ADD CONSTRAINTを使用して指定された主キー制約を追加する前に、ALTER TABLEを使用して主キー制約を削除できないことに注意してください。制約を削除するには、表を削除してから再作成する必要があります。

CONSTRAINT

外部キーを削除することを指定します。オプションで、追加された外部キーの名前をユーザーが指定するように指定します。

ForeignKeyName

追加または削除する外部キーの名前です。すべての外部キーは、ユーザーが名前を指定しなかった場合、デフォルトの名前が割り当てられます。ユーザーが指定した名前またはシステムの名前のいずれかをDROP FOREIGN KEY句で指定できます。

FOREIGN KEY

外部キーを追加することを指定します。「CREATE TABLE」の下の「FOREIGN KEY」を参照してください。(これは、外部キーを削除する構文の一部ではありません。)

REFERENCES

外部キーが別の表を参照することを指定します。

RefTableName

外部キーが参照する表の名前です。

[ON DELETE CASCADE]

ON DELETE CASCADE参照アクションを有効にします。指定されている場合、参照先キーの値を含む行が親表から削除されると、依存する外部キーの値を持つ子表の行も削除されます。

USE HASH INDEX
PAGES = RowPages | CURRENT

主キーで使用する索引をハッシュ索引に変更します。主キーですでにハッシュ索引を使用している場合、この句はSET PAGES句と同じです。

USE RANGE INDEX

主キーで使用する索引を範囲索引に変更します。主キーですでに範囲索引を使用している場合、この句は無視されます。

SET PAGES = RowPages | CURRENT

表の想定ページ数に基づいてハッシュ索引のサイズを変更します。CURRENTを指定すると、表内の現在の行数を使用してページ・カウント値が計算されます。RowPagesを指定する場合は、ページ数が使用されます。RowPagesの値は、表の想定行数を256で除算して決定します。たとえば、表に256,000行ある場合は、RowPagesに1000を指定します(256000/256=1000)。
RowPagesの値は、0を含まない正の定数である必要があります。

TimesTenでは、表に行がない場合は、PAGES=CURRENTを指定しないことをお薦めします。

推定した数が小さすぎると、パフォーマンスが悪化します。ハッシュ索引作成の詳細は、「列の定義」を参照してください。

ADD AGING LRU [ON | OFF]

エージング・ポリシーが定義されていない既存の表に、LRUエージングを追加します。
LRUエージング・ポリシーでは、エージングのタイプ(LRU)、エージング状態(ONまたはOFF)およびLRUエージング属性を定義します。

エージング状態をONまたはOFFのいずれかに設定します。ONはエージング状態が有効であり、エージングが自動的に実行されることを示します。OFFはエージング状態が無効であり、エージングが自動的に実行されないことを示します。両方の場合、エージング・ポリシーが定義されます。デフォルトはONです。

LRU属性はプロシージャttAgingLRUConfigをコールして定義します。LRU属性はSQLレベルでは定義できません。

LRUエージングの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の表へのエージングの実装に関する説明を参照してください。

ADD AGING USE ColumnName...[ON| OFF]

エージング・ポリシーが定義されていない既存の表に、時間ベースのエージングを追加します。
時間ベースのエージング・ポリシーでは、エージングのタイプ(時間ベース)、エージング状態(ONまたはOFF)および時間ベースのエージング属性を定義します。

エージング状態をONまたはOFFのいずれかに設定します。ONはエージング状態が有効であり、エージングが自動的に実行されることを示します。OFFはエージング状態が無効であり、エージングが自動的に実行されないことを示します。両方の場合、エージング・ポリシーが定義されます。デフォルトはONです。

時間ベースのエージング属性はSQLレベルで定義され、LIFETIME句およびCYCLE句で指定します。

時間ベース・エージングに使用する列の名前としてColumnNameを指定します。列は、NOT NULLのTIMESTAMPデータ型またはDATEデータ型として定義します。この列の値がSYSDATEから差し引かれ、指定した単位(分、時間、日数)を使用して切り捨てられた後、LIFETIME値との比較が行われます。結果がLIFETIME値より大きい場合、その行はエージングの候補となります。

エージングに使用される列の値は、アプリケーションによって更新されます。この列の値が不明な行がある場合、その行がエージ・アウトされないようにするには、列に大きなデフォルト値を定義します(この列はNULLにはできません)。

TT_TIMESTAMPデータ型またはTT_DATEデータ型を使用してエージング列を定義できます。TT_DATEデータ型を選択する場合は、LIFETIME単位としてDAYSを指定する必要があります。

時間ベースのエージングの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の表へのエージングの実装に関する説明を参照してください。

LIFETIME Num1 {SECOND[S] | MINUTE[S] | HOUR[S] | DAY[S]

時間ベースのエージング・ポリシーを既存の表に追加する場合は、ADD AGING USE ColumnName句の後にLIFETIME句を指定します。LIFETIMEの設定を変更するには、SET AGING句の後にLIFETIME句を指定します。
LIFETIME句には、データがキャッシュに保持されることが保証される時間を指定します。

Num1には、行がキャッシュに保持される時間の長さを、秒、分、時間または日数で表す正の整定数を指定します。LIFETIME値を超えた行はエージ・アウト(表から削除)されます。エージング列をTT_DATEデータ型を使用して定義する場合は、LIFETIME単位としてDAYSを指定する必要があります。

時間の単位の概念がサポートされています。時間の単位にDAYSを指定した場合、タイムスタンプの日付が同じ日になっているすべての行が同時にエージ・アウトされます。また、HOURSを時間の単位に指定した場合は、タイムスタンプ値の時間が同じ行が、すべて同時にエージ・アウトされます。LIFETIMEの3 DAYSは、LIFETIMEの72 HOURS(3×24)やLIFETIMEの432 MINUTES(3×24×60)とは異なります。

CYCLE Num2 {SECOND[S]| MINUTE[S]| HOUR[S]|DAY[S]}

時間ベースのエージング・ポリシーを既存の表に追加する場合は、LIFETIME句の後にオプションでCYCLE句を指定します。
CYCLEは、時間ベースのエージング属性です。

CYCLE句は、データが指定したLIFETIME値を超えているかどうか、その結果エージ・アウト(削除)する必要があるかどうかを確認するために、システムで行をチェックする頻度を指定します。

Num2には、正の整数を指定します。

CYCLE句を指定しない場合、デフォルト値は5分です。Num2に0を指定した場合、エージング・スレッドは1秒ごとに起動します。

エージング状態がOFFの場合、エージングは自動的に実行されず、CYCLE句は無視されます。

CYCLE設定を変更するには、SET AGING句の後にCYCLE句を指定します。

SET AGING {ON|OFF}

エージング状態を変更します。エージング・ポリシーが事前に定義されている必要があります。ONにすると、自動エージングが有効になります。OFFにすると、自動エージングが無効になります。外部のスケジューラでエージングを制御するには、エージングを無効にしてttAgingScheduleNow組込みプロシージャを起動します。

DROP AGING

表からエージング・ポリシーを削除します。一度定義すると、変更することはできません。エージングを削除してから再定義してください。

SET AGING LIFETIME Num1 {SECOND[S]| MINUTE[S]|HOUR[S] |DAY[S]}

この句を使用して時間ベースのエージングの存続期間を変更します。
Num1 には、正の整数を指定します。

エージング列をTT_DATEデータ型を使用して定義した場合は、LIFETIME単位としてDAYSを指定する必要があります。

SET AGING CYCLE Num2 {SECOND[S]| MINUTE[S]| HOUR[S]|DAY[S]}

この句を使用して時間ベースのエージングのサイクルを変更します。
Num2は、正の整数である必要があります。

ALTER TABLEを使用する場合のパーティションの理解

表を作成すると、初期パーティションが作成されます。表にALTERを実行して列を追加すると、セカンダリ・パーティションが作成されます。各ALTER TABLE文に対して、1つのセカンダリ・パーティションが作成されます。セカンダリ・パーティション内の列については、その列に主キー制約を作成したり、その列を時間ベースのエージングに使用することはできません。

ttMigrate -r -relaxedUpgradeを使用すると、複数のパーティションをまとめることができます。これは、初期パーティションと1つ以上のセカンダリ・パーティションが、初期パーティションと呼ばれる単一のパーティションにまとめられることを意味します。複数のパーティションをまとめると、表にALTERを実行して列に主キー制約を追加したり、その列を時間ベースのエージングに使用することができます。これは、列がセカンダリ・パーティションにはなく、現在は初期パーティションに存在するためです。

データベースがレプリケーションに関係し、複数のパーティションをまとめる必要がある場合は、(CREATE REPLICATION文の) StoreAttribute TABLE DEFINITION CHECKING RELAXEDを使用する必要があります。マスターとサブスクライバの両方で、あるいはマスターまたはサブスクライバで-duplicateを使用して、ttMigrate -r -relaxedUpgradeを実行します。

ttSchemaを使用して、列のパーティション番号を表示します。ttSchemaによって、セカンダリ・パーティション番号1はパーティション1として、セカンダリ・パーティション番号2はパーティション2として、以降同様に表示されます。

例として、2つの列を持つ表MyTabを作成します。この表にALTERを使用して、Col3およびCol4の2つの列を、NOT NULL DEFAULT句を指定して追加します。

Command> CREATE TABLE MyTab (Col1 NUMBER, Col2 VARCHAR2 (30));
Command> ALTER TABLE MyTab ADD (Col3 NUMBER NOT NULL DEFAULT 10, Col4 TIMESTAMP
NOT NULL DEFAULT TIMESTAMP '2012-09-03 12:00:00');

ttSchemaを使用して、Col3およびCol4がセカンダリ・パーティション1に含まれていることを確認します。

ttschema -DSN sampledb_1122
-- Database is in Oracle type mode
create table TESTUSER.MYTAB (
COL1 NUMBER,
COL2 VARCHAR2(30 BYTE) INLINE,
COL3 NUMBER NOT NULL DEFAULT 10,
COL4 TIMESTAMP(6) NOT NULL DEFAULT TIMESTAMP '2012-09-03 12:00:00');
-- column COL3 partition 1
-- column COL4 partition 1

Col3に主キー制約を、Col4に時間ベースのエージングを追加してみます。初期パーティションに含まれていない列には、主キー制約も、時間ベースのエージングも追加できないため、エラーが表示されます。

Command> ALTER TABLE MyTab ADD CONSTRAINT PriKey PRIMARY KEY (Col3);
2419: All columns in a primary key constraint must be in the initial partition;
column COL3 was added by ALTER TABLE
The command failed.

Command> ALTER TABLE MyTab ADD AGING USE Col4 LIFETIME 3 DAYS;
3023: Aging column must be in the initial partition; column COL4 was added by
ALTER TABLE
The command failed.

ttMigrateを、-relaxedUpgradeオプションとともに使用して、パーティションをまとめます。その後ttSchemaを使用して、パーティションがまとめられて、セカンダリ・パーティション1には列がないことを確認します。

ttMigrate -c dsn=sampledb_1122 test.migrate

Saving user PUBLIC
User successfully saved.

Saving table TESTUSER.MYTAB
Saving rows...
0/0 rows saved.
Table successfully saved.

ttDestroy sampledb_1122

ttMigrate -r -relaxedUpgrade
dsn=sampledb_1122 test.migrate

Restoring table TESTUSER.MYTAB
Restoring rows...
0/0 rows restored.
Table successfully restored.

ttSchema DSN=sampledb_1122
-- Database is in Oracle type mode
create table TESTUSER.MYTAB (
COL1 NUMBER,
COL2 VARCHAR2(30 BYTE) INLINE,
COL3 NUMBER NOT NULL DEFAULT 10,
COL4 TIMESTAMP(6) NOT NULL DEFAULT TIMESTAMP '2012-09-03 12:00:00');

この段階で、Col3に主キー制約を、Col4に時間ベースのエージングを追加します。ttMigrateの結果としてCol3およびCol4は初期パーティションに含まれているため、成功します。ttSchemaを使用して結果を確認します。

Command> ALTER TABLE MyTab ADD CONSTRAINT PriKey PRIMARY KEY (Col3);
Command> ALTER TABLE MyTab ADD AGING USE Col4 LIFETIME 3 DAYS;

ttschema sampledb_1122
-- Database is in Oracle type mode
create table TESTUSER.MYTAB (
COL1 NUMBER,
COL2 VARCHAR2(30 BYTE) INLINE,
COL3 NUMBER NOT NULL DEFAULT 10,
COL4 TIMESTAMP(6) NOT NULL DEFAULT TIMESTAMP '2012-09-03 12:00:00')
AGING USE COL4 LIFETIME 3 days CYCLE 5 minutes ON;

alter table TESTUSER.MYTAB add constraint PRIKEY primary key (COL3);

説明

- ALTER TABLE文を使用して一時表を変更することはできません。

- ALTER TABLE ADD [COLUMN] ColumnName文は、既存の表に1つ以上の新しい列を追加します。新しい列は、新しい1つのパーティション内のすべての既存の行の最後に追加されます。ALTER TABLE ADDまたはDROP COLUMN文を使用して、レプリケートされた表に対して列を追加または削除できます。
ALTER TABLEを使用して、TWOSAFE BY REQUESTトランザクションの一部であるレプリケートされた表を変更しないでください。DDLCommitBehavior=1の場合にこの処理を実行すると、TimesTenによりエラーがスローされます。DDLCommitBehavior=0の状態でこの処理を実行すると、ALTER TABLE処理はTWOSAFE BY REQUESTトランザクションの一部になりません。これはALTER TABLE処理が暗黙的コミットを実行せず、自身のトランザクションで実行されるためです。ALTER TABLE文は成功しますが、トランザクションはTWOSAFE BY REQUESTトランザクションの一部となりません。

- マテリアライズド・ビューから参照されている列は削除できません。

- 列の追加、列の削除、およびキャッシュ・グループ表の制約の追加にALTER TABLE文は使用できません。

- 追加される列の数に関係なく、1文につき1つのパーティションのみが表に追加されます。

- 表にALTERを実行して、デフォルト値を持つNOT NULL列を追加します。DEFAULT句は必須です。次の制限があります。

- この列を主キー列として使用することはできません。具体的には、文ALTER TABLE ADD ConstraintName PRIMARY KEY (ColumnName [,...])に、この列を指定することはできません。

- この列を時間ベースのエージングに使用することはできません。具体的には、文ALTER TABLE ADD AGING USE ColumnNameに、この列を指定することはできません。

注意:
レプリケーション・スキームの一部である表にNOT NULL列を追加するには、DDL_REPLICATON_LEVELが3以上である必要があります。

- 新しい列に対してデフォルト値が指定されている場合を除き、追加されるすべての列の初期値はNULLです。

- 表の列の合計数は1000以下です。また、表のパーティションの合計数は1000以下であり、そのうちの1つはTimesTenによって使用されます。

- 主キー制約を通常の表またはディテール表やマテリアライズド・ビュー表に追加するには、ADD CONSTRAINT ... PRIMARY KEY句を使用します。すでに主キーを持つ表に対しては、この句を使用しないでください。

- ADD CONSTRAINT... PRIMARY KEY句を使用して主キー制約を追加する際に、USE HASH INDEX句を指定しないと、主キー制約に対して範囲索引が使用されます。

- 表がレプリケートされる際に、レプリケーション・エージェントがアクティブである場合は、ADD CONSTRAINT ... PRIMARY KEY句を使用できません。最初にレプリケーション・エージェントを停止します。

- グローバル一時表でADD CONSTRAINT ... PRIMARY KEY句を指定しないでください。

- 主キーを指定して定義されているキャッシュ・グループ表はCREATE CACHE GROUP文で定義する必要があるため、キャッシュ・グループ表ではADD CONSTRAINT ... PRIMARY KEY句を指定しないでください。

- ALTER TABLE ADD文の結果として、問合せ時に新しい各パーティションに対して追加の読取りが発生します。このため、変更された表のパフォーマンスがわずかに悪化することがあります。パフォーマンスを回復するには、表を削除して再作成するか、またはttMigrate create -c -relaxedUpgradeコマンドを使用してから、ttRestore -r -relaxedUpgradeコマンドを使用して表をリストアします。追加された列を削除しても、悪化したパフォーマンスは回復されず、パーティションの数も減りません。

- ALTER TABLE DROP文を使用して既存の表から1つ以上の列を削除すると、削除された列は、表の現在のすべての行から削除されます。それ以降のSQL文では、削除した列は使用できなくなります。表の主キーに含まれている列は削除できません。また、表の外部キーに含まれている列も、すべての外部キーを削除しないかぎり削除できません。索引付けされた列は、列の索引をすべて削除しないかぎり削除できません。ALTER TABLEを使用して表の列をすべて削除することはできません。かわりにDROP TABLEを使用します。

- 表から列が削除された場合、その表を参照するすべてのコマンドを再コンパイルする必要があります。削除された列が参照されると、再コンパイル時にエラーが発生することがあります。アプリケーションはそのコマンドを再度準備し、パラメータと結果列を再作成する必要があります。列が表に追加された場合、SELECT *文を含むコマンドは無効になります。これらのコマンドのみを再度準備する必要があります。その他のすべてのコマンドは、想定したとおりに動作します。

- 列を削除しても、列の領域は解放されません。

- UNIQUE制約を追加すると、(領域の増加および処理時間の増加という点で)オーバーヘッドが発生します。これは、UNIQUE制約を維持するための索引が作成されるためです。UNIQUE制約を維持するために使用している索引を、DROP INDEX文を使用して削除することはできません。

- UNIQUE制約とそれに関連付けられている索引は、レプリケートされた表の一意索引として使用されている場合、削除できません。

- アプリケーションで表の主キーに対して範囲問合せを実行する場合は、ALTER TABLE...USE RANGE INDEXを使用します。

- アプリケーションで表の主キーに対して完全一致検索を実行する場合は、ALTER TABLE...USE HASH INDEXを使用します。

- 表に主キーがない場合、USE HASH INDEX句またはUSE RANGE INDEX句を指定すると、エラーが生成されます。

- レプリケートされた表で外部キーの追加や削除を行う前に、レプリケーション・エージェントを停止してください。

- 子表の外部キー制約でON DELETE CASCADEを指定している場合、ユーザーは、子表のDELETE権限を明示的に必要とせずに、DELETE権限を持つ親表から行を削除できます。

- ON DELETE CASCADEトリガー・アクションを変更するには、外部キー制約を削除して再定義してください。

- ON DELETE CASCADEは、マテリアライズド・ビューのディテール表でサポートされています。子表に対して定義されたマテリアライズド・ビューがある場合、親表からの削除によって子表でカスケード削除が行われます。つまり、親表での削除により、マテリアライズド・ビューも変更されます。

- DELETE文によって報告される行の総数には、ON DELETE CASCADEアクションの結果、子表から削除された行は含まれません。

- ON DELETE CASCADE: 親表から子表へのパスが異なる場合があるため、次のルールが適用されます。

- 親表から子表へのすべてのパスを、deleteパスかdo not deleteパスのいずれかに統一します。

- deleteパスのすべての子表でON DELETE CASCADEを指定します。

- このルールは、1つの親表から複数の子表へ、または複数の親表から1つの子表へのパスには適用されません。

- ON DELETE CASCADE: 第2のルールも適用されます。

- ある表にdeleteパスでアクセスする場合、その表のすべての子表にもdeleteパスでアクセスします。

- レプリケーションを含むON DELETE CASCADE: 次の制限が適用されます。

- ON DELETE CASCADEで指定された外部キーは、レプリケートされた表のマスターとサブスクライバの間で一致している必要があります。これは実行時に確認されます。エラーが発生すると、RECEIVERスレッドは処理を停止します。

- カスケード削除のツリーに含まれる表をレプリケートする場合は、ツリーに含まれるすべての表をレプリケートする必要があります。この制限は、レプリケーション・スキームを作成したとき、またはレプリケーション表のいずれかにON DELETE CASCADE付きの外部キーを追加したときにチェックされます。エラーが検出されると、処理は中断します。外部キー制約を変更する前に、まずレプリケーション・スキームを削除することが必要になる場合があります。

- ALTER TABLE ADD/DROP CONSTRAINT文には、次の制限があります。

- 外部キーが削除されると、TimesTenでは外部キーに関連付けられている索引も削除されます。通常のDROP INDEX文を使用して外部キーに関連付けられている索引を削除しようとすると、エラーになります。

- 外部キーは、キャッシュ・グループの表では追加または削除できません。

- 外部キーは、ビューまたは一時表では追加または削除できません。

- ALTER TABLEを使用して主キー制約を削除することはできません。制約を削除するには、表を削除してから再作成する必要があります。

- 表のエージング・ポリシーを定義した後に、エージング・ポリシーをLRUから時間ベースに、または時間ベースからLRUに変更できません。最初にエージングを削除し、表を変更して新しいエージング・ポリシーを追加する必要があります。

- エージング・ポリシーは、エージング状態を変更するように定義する必要があります。

- LRUエージングでは、行がアクセスされているかまたは参照されているかどうかを、次のルールで判断します。

- SELECT文の結果セットを構築するために使用された行。

- INSERT ... SELECT文の結果セットを構築するために使用された行。

- 更新または削除対象の行。

- コマンドで参照される表に対してLRUエージングの削除や追加を行うと、コンパイルされたコマンドは無効と指定され、再コンパイルが必要になります。

- エージング状態がONかOFFかにかかわらずエージング処理をすぐにスケジュールするには、ttAgingScheduleNowプロシージャをコールします。

- 時間ベースのエージング・ポリシーの場合、エージング列を追加または変更できません。これは、NOT NULL列を追加または変更できないためです。

- エージングの制限:

- 時間ベースのエージングに使用されている列は削除できません。

- 外部キーによって関連付けられている表には、同じエージング・ポリシーを設定する必要があります。

- LRUエージングでは、子行がエージングの対象でない場合、この子行とその親行は削除されません。ON DELETE CASCADEの設定は無視されます。

- 時間ベースのエージングでは、親行がエージングの対象である場合、すべての子行が削除されます。ON DELETE CASCADEは、設定の有無にかかわらず無視されます。

- 表のインメモリー列圧縮の制限:

- 表の作成時に表の圧縮が有効化された場合は、ALTER TABLE文でのみ圧縮列グループを追加できます。非圧縮列は、圧縮が有効な表を含め、任意の表に追加できます。OPTIMIZED FOR READが指定されている場合は、作成中に表の圧縮が有効になります。表への圧縮列グループの追加の詳細は、「表のインメモリー列圧縮」を参照してください。

- 圧縮列グループの列は変更できません。

- ALTER TABLEコマンドを使用して圧縮列グループ内のすべての列を削除でき、圧縮列グループ内の列を削除するときは、圧縮列グループ内のすべての列を削除に対して指定する必要があります。

- 既存の非圧縮列を変更して圧縮するためにALTER TABLEは使用できません。次に例を示します。

Command> create table mytab (a varchar2 (30), b int, c int) compress ((a,b)
by dictionary) optimized for read;
Command> alter table mytab add (d int) compress (c by dictionary);
2246: Cannot change compression clause for already defined column C
The command failed.

例

returnrate列をparts表に追加します。

ALTER TABLE parts ADD COLUMN returnrate DOUBLE;

numsssign列とprevdept列をcontractor表に追加します。

ALTER TABLE contractor
ADD ( numassign INTEGER, prevdept CHAR(30) );

employee表のaddr1列とaddr2列を削除します。

ALTER TABLE employee DROP ( addr1, addr2 );

表booksのUNIQUEのtitle列を削除します。

ALTER TABLE books DROP UNIQUE (title);

デフォルト値5を使用してx1列をt1表に追加します。

ALTER TABLE t1 ADD (x1 INT DEFAULT 5);

列のデフォルト値x1を2に変更します。

ALTER TABLE t1 MODIFY (x1 DEFAULT 2);

主キー制約c1を追加するようにprimarykeytest表を変更します。ttIsql INDEXESコマンドを使用して、主キー制約c1が作成され、範囲索引が使用されていることを表示します。

Command> CREATE TABLE primarykeytest (col1 TT_INTEGER NOT NULL);
Command> ALTER TABLE primarykeytest ADD CONSTRAINT c1
>        PRIMARY KEY (col1);
Command> INDEXES primarykeytest;

Indexes on table SAMPLEUSER.PRIMARYKEYTEST:
C1: unique range index on columns:
COL1
1 index found.

1 index found on 1 table.

ハッシュ索引を使用して主キー制約c2を追加するようにprikeyhash表を変更します。ttIsql INDEXESコマンドを使用して、主キー制約c2が作成され、ハッシュ索引が使用されていることを表示します。

Command> CREATE TABLE prikeyhash (col1 NUMBER (3,2) NOT NULL);
Command> ALTER TABLE prikeyhash ADD CONSTRAINT c2
>        PRIMARY KEY (col1) USE HASH INDEX PAGES = 20;
Command> INDEXES prikeyhash;

Indexes on table SAMPLEUSER.PRIKEYHASH:
C2: unique hash index on columns:
COL1
1 index found.

1 table found.

すでに主キーを使用して定義されている表に主キー制約を追加してみます。次のエラーが表示されます。

Command> CREATE TABLE oneprikey (col1 VARCHAR2 (30) NOT NULL,
>        col2 TT_BIGINT NOT NULL, col3 CHAR (15) NOT NULL,
>        PRIMARY KEY (col1,col2));
Command> ALTER TABLE oneprikey ADD CONSTRAINT c2
>        PRIMARY KEY (col1,col2);
2235: Table can have only one primary key
The command failed.

NOT NULLとして定義されていない列に主キー制約を追加してみます。次のエラーが表示されます。

Command> CREATE TABLE prikeynull (col1 CHAR (30));
Command> ALTER TABLE prikeynull ADD CONSTRAINT c3
>        PRIMARY KEY (col1);
2236: Nullable column cannot be part of a primary key
The command failed.

この例では、範囲索引およびハッシュ索引の使用方法を示しています。col1を主キーとしてpkey表を作成します。デフォルトで範囲索引が作成されます。次に、col1の索引をハッシュ索引に変更するよう、この表をALTER文で変更します。再度、索引を範囲索引に戻すよう、この表をALTER文で変更します。

Command> CREATE TABLE pkey (col1 TT_INTEGER PRIMARY KEY, col2 VARCHAR2 (20));
Command> INDEXES pkey;
Indexes on table SAMPLEUSER.PKEY:
PKEY: unique range index on columns:
COL1
1 index found.
1 index found on 1 table.

ハッシュ索引を使用するようにpkey表を変更します。

Command> ALTER TABLE pkey USE HASH INDEX PAGES = CURRENT;
Command> INDEXES pkey;
Indexes on table SAMPLEUSER.PKEY:
PKEY: unique hash index on columns:
COL1
1 index found.
1 table found.

USE RANGE INDEX句で、範囲索引を使用するようにpkey表を変更します。

Command> ALTER TABLE pkey USE RANGE INDEX;
Command> INDEXES pkey;
Indexes on table SAMPLEUSER.PKEY:
PKEY: unique range index on columns:
COL1
1 index found.
1 table found.

この例では、主キーを使用しないで列に範囲索引またはハッシュ索引を定義するように表を変更しようとしたときに、エラーが生成されます。

Command> CREATE TABLE illegalindex (Ccl1 CHAR (20));
Command> ALTER TABLE illegalindex USE RANGE INDEX;
2810: The table has no primary key so cannot change its index type
The command failed.
Command> ALTER TABLE illegalindex USE HASH INDEX PAGES = CURRENT;
2810: The table has no primary key so cannot change its index type
The command failed.

これらの例では、エージングにおいて、時間の単位がどのように機能するかを示しています。この例では、存続期間は3 Daysです。

- (SYSDATE - ColumnValue) <= 3の場合、行はエージ・アウトされません。

- (SYSDATE - ColumnValue) > 3の場合、行はエージ・アウトの対象となります。

- (SYSDATE - ColumnValue) = 3 Days, 22 Hoursの場合、存続期間がDaysで指定されているため、行はエージ・アウトされません。存続期間が72 Hoursと指定されていた場合は、行はエージ・アウトされます。

この例では、LRUエージングを追加して表を変更します。表には事前に設定されたエージング・ポリシーはありません。エージング状態は、デフォルトでONになっています。

ALTER TABLE agingdemo3 ADD AGING LRU;
Command> DESCRIBE agingdemo3;
Table USER.AGINGDEMO3:
Columns:
*AGINGID                         NUMBER NOT NULL
NAME                            VARCHAR2 (20) INLINE
Aging lru on
1 table found.
(primary key columns are indicated with *)

この例では、時間ベースのエージングを追加して表を変更します。表には事前に設定されたエージング・ポリシーはありません。agingcolumn列はエージングに使用します。LIFETIMEは2日です。CYCLEは30分です。

ALTER TABLE agingdemo4
ADD AGING USE agingcolumn LIFETIME 2 DAYS CYCLE 30 MINUTES;
Command> DESCRIBE agingdemo4;
Table USER.AGINGDEMO4:
Columns:
*AGINGID                         NUMBER NOT NULL
NAME                            VARCHAR2 (20) INLINE
AGINGCOLUMN                     TIMESTAMP (6) NOT NULL
Aging use AGINGCOLUMN lifetime 2 days cycle 30 minutes on

この例では、エージング・ポリシーを一度作成すると、変更できないことを示しています。エージングを削除して、再定義する必要があります。

CREATE TABLE agingdemo5
(agingid NUMBER NOT NULL PRIMARY KEY
,name VARCHAR2 (20)
,agingcolumn TIMESTAMP NOT NULL
)
AGING USE agingcolumn LIFETIME 3 DAYS OFF;
ALTER TABLE agingdemo5
ADD AGING LRU;
2980: Cannot add aging policy to a table with an existing aging policy. Have to
drop the old aging first
The command failed.

表のエージングを削除し、LRUエージングを使用して再定義します。

ALTER TABLE agingdemo5
DROP AGING;
ALTER TABLE agingdemo5
ADD AGING LRU;
Command> DESCRIBE agingdemo5;
Table USER.AGINGDEMO5:
Columns:
*AGINGID                         NUMBER NOT NULL
NAME                            VARCHAR2 (20) INLINE
AGINGCOLUMN                     TIMESTAMP (6) NOT NULL
Aging lru on
1 table found.
(primary key columns are indicated with *)

この例では、ALTER文で表のエージング状態をOFFに設定します。表には時間ベースのエージング・ポリシーが定義されています。エージング状態をOFFに設定すると、エージングは自動的には行われません。これは、外部のスケジューラを使用してエージング処理を制御する必要がある場合に有効です。エージング状態をOFFに設定し、ttAgingScheduleNowプロシージャをコールしてエージング処理を開始します。

Command> DESCRIBE agingdemo4;
Table USER.AGINGDEMO4:
Columns:
*AGINGID                         NUMBER NOT NULL
NAME                            VARCHAR2 (20) INLINE
AGINGCOLUMN                     TIMESTAMP (6) NOT NULL
Aging use AGINGCOLUMN lifetime 2 days cycle 30 minutes on

ALTER TABLE AgingDemo4
SET AGING OFF;

DESCRIBE agingdemo4を実行すると、エージング・ポリシーが定義されてエージング状態がOFFに設定されることに注意してください。

Command> DESCRIBE agingdemo4;
Table USER.AGINGDEMO4:
Columns:
*AGINGID                         NUMBER NOT NULL
NAME                            VARCHAR2 (20) INLINE
AGINGCOLUMN                     TIMESTAMP (6) NOT NULL
Aging use AGINGCOLUMN lifetime 2 days cycle 30 minutes off
1 table found.
(primary key columns are indicated with *)

ttAgingScheduleNowをコールして、外部スケジューラでエージングを起動します。

Command> CALL ttAgingScheduleNow ('agingdemo4');

表にエージング列を追加し、その列を時間ベースのエージングに使用するように変更してみます。エラーが生成されます。

Command> DESCRIBE x;
Table USER1.X:
Columns:
*ID                              TT_INTEGER NOT NULL
1 table found.
(primary key columns are indicated with *)
Command> ALTER TABLE x ADD COLUMN t TIMESTAMP;
Command> ALTER TABLE x ADD AGING USE t LIFETIME 2 DAYS;
2993: Aging column cannot be nullable
The command failed.

時間ベースのエージングを使用して定義された表のLIFETIME句を変更してみます。エージング列はTT_DATEデータ型を使用して定義されています。LIFETIME単位がDAYSで表されていないため、エラーが生成されます。

Command> CREATE TABLE aging1 (col1 TT_DATE NOT NULL) AGING USE
col1 LIFETIME 2 DAYS;
Command> ALTER TABLE aging1 SET AGING LIFETIME 2 HOURS;
2977: Only DAY lifetime unit is allowed with a TT_DATE column
The command failed.

employees表を変更して、州のフルネームを含む新しい圧縮列stateを追加します。employees表には、job_idおよびmanager_idで構成された圧縮列グループがすでにあることに注意してください。

Command> ALTER TABLE employees
ADD COLUMN state VARCHAR2(20)
COMPRESS (state BY DICTIONARY);

Command> DESCRIBE employees;
Table MYSCHEMA.EMPLOYEES:
Columns:
*EMPLOYEE_ID                     NUMBER (6) NOT NULL
FIRST_NAME                      VARCHAR2 (20) INLINE
LAST_NAME                       VARCHAR2 (25) INLINE NOT NULL
EMAIL                           VARCHAR2 (25) INLINE NOT NULL
PHONE_NUMBER                    VARCHAR2 (20) INLINE
HIRE_DATE                       DATE NOT NULL
JOB_ID                          VARCHAR2 (10) INLINE NOT NULL
SALARY                          NUMBER (8,2)
COMMISSION_PCT                  NUMBER (2,2)
MANAGER_ID                      NUMBER (6)
DEPARTMENT_ID                   NUMBER (4)
STATE                           VARCHAR2 (20) INLINE
COMPRESS ( ( JOB_ID, MANAGER_ID ) BY DICTIONARY,
STATE BY DICTIONARY ) OPTIMIZED FOR READ

1 table found.
(primary key columns are indicated with *)

次の例では、圧縮列stateをemployees表から削除します。

Command> ALTER TABLE employees
DROP state;
Command> DESCRIBE employees;
Table MYSCHEMA.EMPLOYEES:
Columns:
*EMPLOYEE_ID                     NUMBER (6) NOT NULL
FIRST_NAME                      VARCHAR2 (20) INLINE
LAST_NAME                       VARCHAR2 (25) INLINE NOT NULL
EMAIL                           VARCHAR2 (25) INLINE NOT NULL
PHONE_NUMBER                    VARCHAR2 (20) INLINE
HIRE_DATE                       DATE NOT NULL
JOB_ID                          VARCHAR2 (10) INLINE NOT NULL
SALARY                          NUMBER (8,2)
COMMISSION_PCT                  NUMBER (2,2)
MANAGER_ID                      NUMBER (6)
DEPARTMENT_ID                   NUMBER (4)
COMPRESS ( ( JOB_ID, MANAGER_ID ) BY DICTIONARY ) OPTIMIZED FOR READ

1 table found.
(primary key columns are indicated with *)

関連項目

「CREATE TABLE」
「DROP TABLE」
『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の表へのエージングの実装に関する説明

ALTER USER

ALTER USER文を使用すると、ユーザーはユーザー自身のパスワードを変更できます。ADMIN権限を持つユーザーは別のユーザーのパスワードを変更できます。

また、ユーザーはこの文を使用して、別のユーザーを内部ユーザーから外部ユーザーに、または外部ユーザーから内部ユーザーに変更できます。

必要な権限

ユーザー自身のパスワードの変更に必要な権限はありません。

別のユーザーのパスワードの変更にはADMIN権限が必要です。

ユーザーを内部ユーザーから外部ユーザーに、および外部ユーザーから内部ユーザーに変更するにはADMIN権限が必要です。

SQL構文

ALTER USER user IDENTIFIED BY {password | "password"}
ALTER USER user IDENTIFIED EXTERNALLY

パラメータ

パラメータ

説明

user

パスワードが変更されるユーザーの名前。

IDENTIFIED

内部ユーザーのパスワードまたはユーザーが外部であることを指定するための識別句。

BY password |"password"

TimesTenデータベースに対する内部ユーザーを識別するパスワードを指定します。

EXTERNALLY

TimesTenデータベースに対するオペレーティング・システムのuserを識別します。データベースを外部ユーザーとして操作するには、オペレーティング・システムまたはネットワークで認証されているユーザー名と一致するTimesTen外部ユーザー名がプロセスに必要です。ユーザーはログイン時にオペレーティング・システムによって認証されているため、TimesTenではパスワードは必要ありません。

説明

- データベース・ユーザーには、内部ユーザーまたは外部ユーザーを指定できます。

- 内部ユーザーは、TimesTenデータベース用に定義されるユーザーです。

- 外部ユーザーは、オペレーティング・システムなどの外部権限によって定義されています。外部ユーザーにTimesTenパスワードを割り当てることはできません。

- userとして接続している内部ユーザーは、この文を実行して自分のTimesTenパスワードを変更します。

- パスワードは大文字と小文字が区別されます。

- クライアント/サーバー接続を介してユーザーを変更することはできません。ユーザーを変更する場合は、直接接続を使用する必要があります。

- レプリケーションが構成されている場合、この文はレプリケートされます。

例

内部ユーザーterryのパスワードを現在の設定から"12345"に変更するには、次の文を使用します。

ALTER USER terry IDENTIFIED BY "12345";
User altered.

ユーザーterryを外部ユーザーに変更するには、次の文を使用します。

ALTER USER terry IDENTIFIED EXTERNALLY;
User altered.

ユーザーterryを内部ユーザーに戻してパスワードを指定するには、次の文を使用します。

ALTER USER terry IDENTIFIED BY "secret";
User altered.

関連項目

「CREATE USER」
「DROP USER」
「GRANT」
「REVOKE」

CALL

CALL文を使用して、TimesTen組込みプロシージャを起動したり、スタンドアロンまたはSQLのパッケージに含まれるPL/SQLプロシージャまたはファンクションを実行します。

必要な権限

各TimesTen組込みプロシージャの起動に必要な権限は、『Oracle TimesTen In-Memory Databaseリファレンス』の組込みプロシージャに関する説明にある各プロシージャの説明に記載されています。

CALL文を使用して、スタンドアロンまたはパッケージに含まれる独自のPL/SQLプロシージャまたはファンクションをコールする所有者には、必要な権限はありません。その他のすべてのユーザーには、プロシージャまたはファンクション、またはこれらが定義されているパッケージに対するEXECUTE権限が必要です。

SQL構文

TimesTen組込みプロシージャをコールする場合:

CALL [TimesTenBuiltIn [( arguments )]

スタンドアロンまたはパッケージに含まれるPL/SQLプロシージャまたはファンクションをコールする場合、名前でコールするか、式の結果としてコールできます。

PL/SQLプロシージャをコールする場合:

CALL [Owner.][Package.]ProcedureName [( arguments )]

パラメータを返すPL/SQLファンクションをコールする場合は、次のいずれかが適切です。

CALL [Owner.][Package.]FunctionName [( arguments )] INTO :return_param

注意:
ユーザー独自のPL/SQLプロシージャまたはファンクションは、同じ名前のTimesTen組込みプロシージャよりも優先されます。

パラメータ

パラメータ

説明

TimesTenBuiltIn

TimesTen組込みプロシージャの名前。TimesTen組込みプロシージャの完全なリストは、『Oracle TimesTen In-Memory Databaseリファレンス』の組込みプロシージャに関する説明を参照してください。

[Owner.]ProcedureName

PL/SQLプロシージャの名前。オプションで、プロシージャの所有者を指定できます。

[Owner.]FunctionName

PL/SQLファンクションの名前。オプションで、ファンクションの所有者を指定できます。

arguments

PL/SQLプロシージャまたはファンクションの0個以上の引数を指定します。

INTO

ルーチンがファンクションである場合は、INTO句が必要です。

return_param

ファンクションの戻り値を格納するホスト変数を指定します。

説明

TimesTenでCALL文を使用してPL/SQLプロシージャまたはファンクションを実行する方法の詳細は、『Oracle TimesTen In-Memory Database PL/SQL開発者ガイド』のPL/SQLプロシージャおよびファンクションを実行する方法に関する説明、『Oracle TimesTen In-Memory Database C開発者ガイド』のCALLを使用したプロシージャおよびファンクションの実行に関する説明または『Oracle TimesTen In-Memory Database Java開発者ガイド』のCALLを使用したプロシージャおよびファンクションの実行に関する説明を参照してください。

例

次に、mytestファンクションの定義を示します。

create or replace function mytest return number is
begin
return 1;
end;
/

次に示すように、CALL文でmytestファンクションを実行します。

Command> variable n number;
Command> call mytest() into :n;
Command> print n;
N                    : 1

次の例では、入力として従業員IDが指定された従業員の給与を戻すファンクションを作成し、ファンクションをコールして、戻された結果を表示します。

Command> CREATE OR REPLACE FUNCTION get_sal
>   (p_id employees.employee_id%TYPE) RETURN NUMBER IS
>    v_sal employees.salary%TYPE := 0;
> BEGIN
>   SELECT salary INTO v_sal FROM employees
>     WHERE employee_id = p_id;
>   RETURN v_sal;
> END get_sal;
> /

Function created.

Command> variable n number;
Command> call get_sal(100) into :n;
Command> print n;
N                    : 24000

COMMIT

COMMIT文は、現在のトランザクションを終了し、そのトランザクション内で実行されたすべての変更を永続的な変更とします。

必要な権限

なし

SQL構文

COMMIT [WORK]

パラメータ

COMMIT文では次のオプションのキーワードを使用できます。

パラメータ

説明

[WORK]

SQL標準に準拠するためにサポートされているオプションの句。COMMITとCOMMIT WORKは同等です。

説明

- トランザクションのコミット前:

- トランザクション中に行った変更はすべて表示できますが、他のユーザーがそれらの変更を表示することはできません。トランザクションをコミットすると、コミット後に実行される他のユーザーの文に変更が表示されるようになります。

- ROLLBACK文を使用して、トランザクション中に行った変更をロールバック(UNDO)できます。

- この文によって、トランザクションのロックが解除されます。

- パススルーの場合も、Oracle Databaseトランザクションはコミットされます。

- コミットによってすべてのオープン・カーソルがクローズされます。

例

HRスキーマのregions表に行を挿入し、トランザクションをコミットします。最初にautocommitを0(ゼロ)に設定します。

Command> SET AUTOCOMMIT 0;
Command> INSERT INTO regions VALUES (5,'Australia');
1 row inserted.
Command> COMMIT;
Command> SELECT * FROM regions;
< 1, Europe >
< 2, Americas >
< 3, Asia >
< 4, Middle East and Africa >
< 5, Australia >
5 rows found.

関連項目

ROLLBACK

CREATE ACTIVE STANDBY PAIR

この文は、アクティブ・スタンバイ・ペアを作成します。アクティブ・マスター・データベースとスタンバイ・マスター・データベースが含まれており、1つ以上の読取り専用サブスクライバが含まれる場合もあります。アクティブ・マスター・データベースはスタンバイ・マスター・データベースへ更新をレプリケートし、スタンバイ・マスター・データベースはサブスクライバへ更新を伝播します。

必要な権限

ADMIN

SQL構文

CREATE ACTIVE STANDBY PAIR
FullStoreName, FullStoreName [ReturnServiceAttribute]
[SUBSCRIBER FullStoreName [,...]]
[STORE FullStoreName [StoreAttribute [...]]]
[NetworkOperation [...] ]
[{ INCLUDE | EXCLUDE }{TABLE [[Owner.]TableName [,...]]|
CACHE GROUP [[Owner.]CacheGroupName [,...]]|
SEQUENCE [[Owner.]SequenceName [,...]]} [,...]]

ReturnServiceAttributeの構文は、次のとおりです。

{ RETURN RECEIPT [BY REQUEST] |
RETURN TWOSAFE [BY REQUEST] |
NO RETURN }

StoreAttributeの構文は、次のとおりです。

DISABLE RETURN {SUBSCRIBER | ALL} NumFailures
RETURN SERVICES {ON | OFF} WHEN [REPLICATION] STOPPED
DURABLE COMMIT {ON | OFF}
RESUME RETURN Milliseconds
LOCAL COMMIT ACTION {NO ACTION | COMMIT}
RETURN WAIT TIME Seconds
COMPRESS TRAFFIC {ON | OFF}
PORT PortNumber
TIMEOUT Seconds
FAILTHRESHOLD Value
TABLE DEFINITION CHECKING {RELAXED|EXACT}

NetworkOperationの構文は、次のとおりです。

ROUTE MASTER FullStoreName SUBSCRIBER FullStoreName
{ { MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost }
PRIORITY Priority } [...]

パラメータ

パラメータ

説明

FullStoreName

次のいずれかとして指定されたデータベースです。

- SELF

- データベース・ファイル名の接頭辞

たとえば、データベースのパスがdirectory/subdirectory/data.ds0の場合、使用するデータベース名はdataになります。

この名前は、DSNの記述のDataStore属性で指定されるデータベース・ファイル名で、オプションでホストIDを次の書式で指定できます。

DataStoreName [ON Host]

Hostは、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のネットワークの構成に関する項で説明されているように、IPアドレスか、または1つ以上のIPアドレスに割り当てられたリテラル・ホスト名です。ホスト名に特殊文字が含まれている場合は、二重引用符で囲む必要があります。たとえば、"MyHost-500"のようになります。

RETURN RECEIPT [BY REQUEST]

RETURN RECEIPTサービスを有効にし、これによって、アクティブ・マスター・データベースに対してトランザクションをコミットするアプリケーションは、スタンバイ・マスター・データベースがトランザクションを受信するまでブロックされます。
RETURN RECEIPTを指定すると、すべてのトランザクションにサービスが適用されます。RETURN RECEIPT BY REQUESTを指定した場合は、ttRepSyncSetプロシージャを使用して、選択したトランザクションに対してRETURN RECEIPTサービスを有効にできます。RETURNサービスの使用の詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービスの使用に関する説明を参照してください。

RETURN TWOSAFE[BY REQUEST]

RETURN TWOSAFEサービスを有効にし、これによって、アクティブ・マスター・データベースに対してトランザクションをコミットするアプリケーションは、スタンバイ・マスター・データベースでトランザクションがコミットされるまでブロックされます。
RETURN TWOSAFEを指定すると、すべてのトランザクションにサービスが適用されます。RETURN TWOSAFE BY REQUESTを指定した場合は、ttRepSyncSetプロシージャを使用して、選択したトランザクションに対してRETURN RECEIPTサービスを有効にできます。

RETURNサービスの使用の詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービスの使用に関する説明を参照してください。

DISABLE RETURN
{SUBSCRIBER | ALL} NumFailures

NumFailuresで指定されているタイムアウト回数を経過した後、RETURNサービスのブロッキングを無効にするようにRETURNサービス障害ポリシーを設定します。
SUBSCRIBERを指定することは、ALLを指定することと同じです。両方の設定でスタンバイ・マスター・データベースが参照されます。

この障害ポリシーは、RETURN RECEIPTまたはRETURN TWOSAFEサービスのいずれかで指定できます。

詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービス・タイムアウト・エラーおよびレプリケーション状態変更の管理に関する説明を参照してください。

RETURN SERVICES {ON | OFF} WHEN [REPLICATION] STOPPED

レプリケーションが無効になっている場合のRETURNサービスのオンまたはオフを設定します。
OFFは、レプリケーション無効時にRETURNサービスを無効する設定であり、RETURN RECEIPTサービスのデフォルトです。ONは、レプリケーション無効時にもRETURNサービスを有効のままにできる設定であり、RETURN TWOSAFEサービスのデフォルトです。

『Oracle TimesTen In-Memory Databaseレプリケーション・ガイド』のRETURNサービスの失敗/リカバリ・ポリシーの策定に関する説明を参照してください。

RESUME RETURN Milliseconds

DISABLE RETURNによってRETURNサービスのブロッキングが無効になった場合、この属性で、RETURNサービスを再度有効にするタイミングに関するポリシーを設定します。

NO RETURN

RETURNサービスを使用しないように指定します。これがデフォルトです。
RETURNサービスの使用の詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービスの使用に関する説明を参照してください。

RETURN WAIT TIME Seconds

RETURNサービスの応答を待機する秒数を指定します。値が0(ゼロ)の場合は、待機しないことを意味します。デフォルト値は10秒です。
このタイムアウト設定は、アプリケーションからttRepSyncSet組込みプロシージャのreturnWaitパラメータを使用して上書きできます。

SUBSCRIBER FullStoreName [,...]]

マスター・データベースから更新を受け取るデータベース。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベース・ファイル名です。

STORE FullStoreName [StoreAttribute [...]]

指定されたデータベースの属性を定義します。属性には、PORT、TIMEOUTおよびFAILTHRESHOLDがあります。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベース・ファイル名です。

TABLE DEFINITION CHECKING {EXACT|RELAXED}

StoreAttribute句。
サブスクライバで実行される表定義チェックの種類を指定します。

- EXACT: マスターおよびサブスクライバで表が一致している必要があります。

- RELAXED: 表には同じキー定義、列の数および列のデータ型が必要です。

デフォルトはRELAXEDです。

注意: TABLE DEFINITION CHECKING EXACTを使用している場合、データベースを移行するにはttMigrate -exactUpgradeを使用します。TABLE DEFINITION CHECKING RELAXEDを使用している場合、データベースを移行するにはttMigrate -relaxedUpgradeを使用します。

{INCLUDE | EXCLUDE}
{TABLE [[Owner.]TableName[,...]]|

CACHE GROUP

[[Owner.]CacheGroupName

[,...]]|

SEQUENCE

[[Owner.]SequenceName

[,...]]}

[,...]

デフォルトでは、アクティブ・スタンバイ・ペアはデータベース全体をレプリケートします。
INCLUDEを指定すると、指定された表、順序またはキャッシュ・グループのみがレプリケーションに含まれます。INCLUDE句は、オブジェクト型(表、順序またはキャッシュ・グループ)ごとに1つ使用します。

EXCLUDEを指定すると、表、順序またはキャッシュ・グループがレプリケーション・スキームから除外されます。EXCLUDE句は、オブジェクト型(表、キャッシュ・グループまたは順序)ごとに1つ使用します。

COMPRESS TRAFFIC {ON | OFF}

レプリケートされた通信量を圧縮して、ネットワークの帯域幅の量を削減します。ONは、STOREで定義されたデータベースに対してレプリケートされた通信量をすべて圧縮するように指定します。OFF(デフォルト)は、通信量を圧縮しないように指定します。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のレプリケートされた通信量の圧縮に関する説明を参照してください。

DURABLE COMMIT {ON | OFF}

DurableCommits一般接続属性設定を上書きします。DURABLE COMMIT ONは、レプリケーション・エージェントが実行中か停止しているかに関係なく、永続コミットを有効にします。また、ttRepStateSave組込みプロシージャでスタンバイ・データベースがfailedとしてマークされている場合も、永続コミットが有効になります。

FAILTHRESHOLD Value

サブスクライバ・データベースのために累積できるログ・ファイルの数。この値を超えると、サブスクライバはFailedの状態に設定されます。0を指定すると、この上限は設定されません。これがデフォルトです。
詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のトランザクション・ログ障害しきい値の設定に関する説明を参照してください。

LOCAL COMMIT ACTION {NO ACTION | COMMIT}

タイムアウト・イベントのRETURN TWOSAFEトランザクションで実行されるデフォルトのアクションを指定します。
注意: この属性は、RETURN TWOSAFEまたはRETURN TWOSAFE BY REQUEST属性がSUBSCRIBER句で設定されている場合にのみ有効です。

NO ACTION: タイムアウト時、コミット関数はアプリケーションに戻り、トランザクションをコミット・コールに入ったときと同じ状態のままにしますが、レプリケートされた表をアプリケーションが更新できない場合を除きます。アプリケーションはコミットのみを再発行できます。トランザクションはロールバックできません。これがデフォルトです。

COMMIT: タイムアウト時、コミット関数はCOMMITを実行して、トランザクションをローカルに終了しようとします。同じトランザクション上でこれ以上の処理を行うことはできません。

この設定は、localActionパラメータを指定してttRepSyncSetプロシージャをコールすることで、特定のトランザクションに対して無効にすることができます。

MASTER FullStoreName

アプリケーションで特定の要素が更新されるデータベース。更新はMASTERデータベースによってSUBSCRIBERデータベースに送信されます。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベースである必要があります。

PORT PortNumber

データベースのレプリケーション・エージェントが接続をリスニングするTCP/IPポート番号です。指定しない場合は、レプリケーション・エージェントによってポート番号が自動的に割り当てられます。
アクティブ・スタンバイ・ペアでは、スタンバイ・マスター・データベースは、アクティブ・マスター・データベースからの更新をリスニングします。読取り専用サブスクライバは、スタンバイ・マスター・データベースからの更新をリスニングします。

ROUTE MASTER FullStoreName SUBSCRIBER FullStoreName

NetworkOperation句を示します。指定されている場合、各サブスクライバ・ストアへのすべてのアウトバウンド接続にマスター・ストアが使用するネットワーク・インタフェースを制御できます。ROUTE句のコンテキストでは、次のルートを定義できます。

- フェイルオーバーが発生したときのアクティブ・データベースからスタンバイ・データベースおよびスタンバイ・データベースからアクティブ・データベースへのルート

- 読取り専用サブスクライバからアクティブおよびスタンバイ・データベースへのルート

アクティブ・スタンバイ・ペアを使用する場合、読取り専用サブスクライバがないアクティブ・スタンバイ・ペアに対してROUTEを少なくとも2回指定する必要があります。次に、アクティブ・スタンバイ・ペアの各読取り専用サブスクライバに対してROUTEを2回多く指定する必要があります。

FullStoreNameには、ON "host"を指定する必要があります。

MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost

MasterHostおよびSubscriberHostは、マスターおよびサブスクライバ・ストアのネットワーク・インタフェースのIPアドレスです。IPV6のドット表記または正規形式で指定するか、あるいはコロン表記で指定します。
句は複数回指定できます。

PRIORITY Priority

1から99の整数で表される変数。IPアドレスの優先順位を示します。整数値が小さいほど、優先度は高くなります。同じ優先度を持つアドレスが複数指定されている場合は、エラーが返されます。ピア接続の確立に使用する複数のIPアドレスの順序を制御します。
NetworkOperation句の構文で必須です。MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost句の後ろに記述します。

TIMEOUT Seconds

レプリケーション・エージェントがリモート・レプリケーション・エージェントからの応答を待機する最大時間(秒)。デフォルトは120秒です。
アクティブ・スタンバイ・ペアでは、アクティブ・マスター・データベースは、スタンバイ・マスター・データベースにメッセージを送信します。スタンバイ・マスター・データベースは、読取り専用サブスクライバにメッセージを送信します。

注意: リモート・レプリケーション・エージェントからの応答の遅延の原因となる大規模なトランザクションの場合、エージェントは、トランザクションのサイズに基づいて、タイムアウトをスケーリングします。TIMEOUTを60秒以下に設定した場合、このスケーリングは無効になります。『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のリモート・レプリケーション・エージェントからの応答のタイムアウトの待機の設定に関する項も参照してください。

説明

- アクティブ・スタンバイ・ペアを作成した後、データベースの１つをアクティブ・データベースにします。そのためには、ttRepStateSet ('ACTIVE')をコールします。次に、ttRepAdminを使用して、アクティブ・データベースをセカンダリ・データベースに複製します。処理が完了すると、セカンダリ・データベースがスタンバイ・データベースになります。詳細は、『Oracle TimesTen In-Memory Databaseレプリケーション・ガイド』のキャッシュ・グループのないアクティブ・スタンバイ・ペアの設定に関する説明を参照してください。

- SUBSCRIBER句には、1つ以上の読取り専用サブスクライバ・データベースを指定します。最大127のサブスクライバ・データベースを指定できます。

- アクティブ・マスター・データベースとスタンバイ・マスター・データベースの間のレプリケーションは、RETURN TWOSAFE、RETURN RECEIPTまたは非同期のいずれかに設定できます。RETURN TWOSAFEに設定すると、トランザクションは失われません。

- 指定された表、順序およびキャッシュ・グループをレプリケーションから除外する場合、または指定された表、順序およびキャッシュ・グループのみを含めて他は除外する場合は、INCLUDEおよびEXCLUDE句を使用します。

- アクティブ・スタンバイ・ペアにRETURN TWOSAFE属性があり、キャッシュ・グループをレプリケートしている場合、次のような状態のときにトランザクションが失敗する可能性があります。

- レプリケートされるトランザクションにALTER TABLE文またはALTER CACHE GROUP文が含まれている。

- トランザクションに、レプリケートされた表、レプリケートされたキャッシュ・グループまたはASYNCHRONOUS WRITETHROUGHキャッシュ・グループに対するINSERT、UPDATEまたはDELETE文が含まれている。

- アクティブ・スタンバイ・ペアを使用して読取り専用キャッシュ・グループおよびASYNCHRONOUS WRITETHROUGH(AWT)キャッシュ・グループをレプリケートできます。アクティブ・スタンバイ・ペアを使用してSYNCHRONOUS WRITETHROUGH(SWT)キャッシュ・グループまたはユーザー管理キャッシュ・グループをレプリケートすることはできません。

- TimesTenでOracle Clusterwareを使用する場合は、CREATE ACTIVE STANDBY PAIR文は実行できません。

例

この例では、マスター・データベースがrep1およびrep2であるアクティブ・スタンバイ・ペアを作成します。サブスクライバrep3が1つあります。レプリケーションのタイプはRETURN RECEIPTです。また、この文では、PORTおよびTIMEOUT属性をマスター・データベースに対して設定します。

CREATE ACTIVE STANDBY PAIR rep1, rep2 RETURN RECEIPT
SUBSCRIBER rep3
STORE rep1 PORT 21000 TIMEOUT 30
STORE rep2 PORT 22000 TIMEOUT 30;

NetworkOperation句を指定してネットワーク・インタフェースを制御します。

CREATE ACTIVE STANDBY PAIR rep1,rep2
ROUTE MASTER rep1 ON "machine1" SUBSCRIBER rep2 ON "machine2"
MASTERIP "1.1.1.1" PRIORITY 1 SUBSCRIBERIP "2.2.2.2" PRIORITY 1;
ROUTE MASTER rep2 ON "machine2" SUBSCRIBER rep1 ON "machine1"
MASTERIP "2.2.2.2" PRIORITY 1 SUBSCRIBERIP "1.1.1.1" PRIORITY 1;

関連項目

「ALTER ACTIVE STANDBY PAIR」
「DROP ACTIVE STANDBY PAIR」

CREATE CACHE GROUP

CREATE CACHE GROUP文は、次の処理を実行します。

- キャッシュ・グループで定義される表を作成します。

- キャッシュ・グループに関連付けられたすべての新しい情報を、適切なシステム表にロードします。

キャッシュ・グループとは、Oracle Databaseの表からデータをキャッシュする表のセットのことで、外部キーを介して関連付けられます。ルート表は1つで、この表は他の表を参照しません。キャッシュ・グループに含まれる他のすべてのキャッシュ表は、キャッシュ・グループ内の表を1つのみ参照します。つまり、外部キーのリレーションシップによってツリーが形成されます。

キャッシュ表は、次の条件を満たす行の集合です。

- Oracle Database表の垂直パーティションの行のサブセットで構成されている。

- Oracle Database表と同じ名前でTimesTen表に格納されている。

データベースに2つ以上のキャッシュ・グループがある場合、キャッシュ・グループは別々のOracle Database(およびTimesTen)表に対応している必要があります。

キャッシュ・グループ・インスタンスは、ルート表の1つの行と、ルート表の行に直接的または間接的に関連付けられている子表のすべての行を参照します。

ユーザー管理キャッシュ・グループおよびシステム管理キャッシュ・グループ

キャッシュ・グループは、システム管理またはユーザー管理のいずれかになります。

システム管理キャッシュ・グループは、TimesTenによって完全に管理され、プロパティは固定されています。システム管理キャッシュ・グループには、次のタイプがあります。

- 読取り専用キャッシュ・グループはOracle Databaseで更新され、Oracle Databaseからキャッシュに更新が伝播されます。

- ASYNCHRONOUS WRITETHROUGH(AWT)キャッシュ・グループはキャッシュで更新され、Oracle Databaseに更新が伝播されます。トランザクションはOracle Databaseでのコミットを待機せずに、キャッシュ上で続行します。

- SYNCHRONOUS WRITETHROUGH(SWT)キャッシュ・グループはキャッシュで更新され、Oracle Databaseに更新が伝播されます。トランザクションは、Oracle Databaseでコミットが発生したことを通知した後、キャッシュ上でコミットされます。

ローディングやアンローディングなど、システム管理のキャッシュ・グループはTimesTenによって管理されるため、これらのキャッシュ・グループの定義では、次のような特定の文や句は使用できません。

- AWTおよびSWTキャッシュ・グループ定義でのWHERE句

- キャッシュ表定義でのREADONLY、PROPAGATEおよびNOT PROPAGATE

- AWTおよびSWTキャッシュ・グループ定義でのAUTOREFRESH

FLUSH CACHE GROUPおよびREFRESH CACHE GROUP操作は、AWTおよびSWTキャッシュ・グループでは使用できません。

AWTキャッシュ・グループを作成する前に、レプリケーション・エージェントを停止する必要があります。

ユーザー管理キャッシュ・グループは、アプリケーションまたはユーザーによって管理される必要があります。ユーザー管理キャッシュ・グループのPROPAGATEは、同期型です。表レベルのREADONLYキーワードは、ユーザー管理キャッシュ・グループでのみ使用できます。

さらに、TimesTenおよびOracle Databaseの両方ですべてのWHERE句を解析できる必要があります。

明示的にロードされるキャッシュ・グループおよび動的キャッシュ・グループ

キャッシュ・グループは、明示的または動的にロードできます。

明示的にロードされるキャッシュ・グループでは、LOAD CACHE GROUPまたはREFRESH CACHE GROUP文を使用してOracle Database表からTimesTenキャッシュ表に手動で新しいキャッシュ・インスタンスをロードするか、または自動リフレッシュ操作を使用して自動でロードします。

動的キャッシュ・グループでは、LOAD CACHE GROUPを使用してTimesTenキャッシュ表に手動で新しいキャッシュ・インスタンスをロードするか、または動的ロード操作を使用して要求時にロードできます。動的ロード操作では、いずれかのキャッシュ表でSELECT、UPDATE、DELETE、またはINSERT文が発行され、データがキャッシュ表に存在しないもののキャッシュされたOracle Database表には存在すると、キャッシュされたOracle Database表からTimesTenキャッシュ表にデータが自動的にロードされます。動的キャッシュ・グループでの手動リフレッシュ操作または自動リフレッシュ操作では、既存のキャッシュ・インスタンスの更新または削除はできますが、新しいキャッシュ・インスタンスのロードはできません。

どのキャッシュ・グループ・タイプ(読取り専用、ASYNCHRONOUS WRITETHROUGH、SYNCHRONOUS WRITETHROUGH、ユーザー管理)でも、明示的にロードされるキャッシュ・グループとして定義できます。

AUTOREFRESHキャッシュ・グループ属性とPROPAGATEキャッシュ表属性の両方を持つユーザー管理キャッシュ・グループを除いて、どのキャッシュ・グループ・タイプでも動的キャッシュ・グループとして定義できます。

LRUエージングがデフォルトで定義されているため、動的キャッシュ・グループのデータはエージ・アウトされます。ttAgingLRUConfig組込みプロシージャを使用して、LRUエージングの領域使用しきい値を上書きします。また、動的キャッシュ・グループに時間ベースのエージングを定義して、LRUエージングを上書きすることもできます。

明示的にロードされるキャッシュ・グループおよび動的キャッシュ・グループの詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のキャッシュ・グループへのデータのロード: 明示的にロードされるキャッシュ・グループおよび動的キャッシュ・グループに関する項を参照してください。動的ロード操作の詳細は、このドキュメントのキャッシュ・インスタンスの動的ロードに関する項を参照してください。

ローカル・キャッシュ・グループおよびグローバル・キャッシュ・グループ

ローカル・キャッシュ・グループまたはグローバル・キャッシュ・グループを作成できます。

ローカル・キャッシュ・グループでは、キャッシュ表のデータは、TimesTenデータベースが同じキャッシュ・グリッドのメンバーであってもTimesTenデータベース間で共有されません。そのため、データベースに重複したデータまたは同じデータが含まれる可能性があります。いずれのキャッシュ・グループ・タイプも、ローカル・キャッシュ・グループとして定義できます。ローカル・キャッシュ・グループは、動的または明示的にロードできます。

グローバル・キャッシュ・グループでは、キャッシュ表のデータはキャッシュ・グリッド内のTimesTenデータベース間で共有されます。異なるグリッド・メンバーによる同じデータへの更新は、グリッドによって調整されます。AWTキャッシュ・グループのみ、グローバル・キャッシュ・グループとして定義できます。

ローカル・キャッシュ・グループおよびグローバル・キャッシュ・グループの詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のキャッシュ・グループの定義に関する項を参照してください。また、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のグリッド・メンバー間でのデータ共有の例に関する項を参照してください。

必要な権限

CREATE CACHE GROUPまたはCREATE ANY CACHE GROUPおよびCREATE TABLE(キャッシュ・グループ内のすべての表が現在のユーザーによって所有されている場合)またはCREATE ANY TABLE(キャッシュ・グループ内の1つ以上の表が現在のユーザーによって所有されていない場合)。

SQL構文

キャッシュ・グループのタイプごとに、次のようなCREATE CACHE GROUP文があります。

- CREATE READONLY CACHE GROUP

- CREATE ASYNCHRONOUS WRITETHROUGH CACHE GROUP

- CREATE SYNCHRONOUS WRITETHROUGH CACHE GROUP

- CREATE USERMANAGED CACHE GROUP

グローバル・キャッシュ・グループを作成するCREATE CACHE GROUP文は、次のとおりです。

- CREATE WRITETHROUGH GLOBAL CACHE GROUP

CREATE READONLY CACHE GROUP

読取り専用キャッシュ・グループは、次の構文で作成します。

CREATE [DYNAMIC] READONLY CACHE GROUP [Owner.]GroupName
[AUTOREFRESH
[MODE {INCREMENTAL | FULL}]
[INTERVAL IntervalValue {MINUTE[S] | SECOND[S] | MILLISECOND[S] }]
[STATE {ON|OFF|PAUSED}]
]
FROM
{[Owner.]TableName (
{ColumnDefinition[,...]}
[,PRIMARY KEY(ColumnName[,...])]
[,FOREIGN KEY(ColumnName [,...])
REFERENCES RefTableName (ColumnName [,...])
[ON DELETE CASCADE]
[UNIQUE HASH ON (HashColumnName[,...]) PAGES=PrimaryPages]
[AGING USE ColumnName
LIFETIME Num1 {SECOND[S] | MINUTE[S] |HOUR[S] | DAY[S]}
[CYCLE Num2 {SECOND[S] | MINUTE[S] |HOUR[S] |DAY[S]}]
[ON|OFF]
]
[WHERE ExternalSearchCondition]
} [,...];

CREATE ASYNCHRONOUS WRITETHROUGH CACHE GROUP

ASYNCHRONOUS WRITETHROUGHのキャッシュ・グループは、次の構文で作成します。

CREATE [DYNAMIC] [ASYNCHRONOUS] WRITETHROUGH CACHE GROUP   [Owner.]GroupName
FROM
{[Owner.]TableName (
{ColumnDefinition[,...]}
[,PRIMARY KEY(ColumnName[,...])]
[FOREIGN KEY(ColumnName [,...])
REFERENCES RefTableName (ColumnName [,...])]
[ ON DELETE CASCADE ]
UNIQUE HASH ON (HashColumnName[,...]) PAGES=PrimaryPages]
[AGING {LRU|
USE ColumnName
LIFETIME Num1 {SECOND[S] | MINUTE[S] |HOUR[S] |DAY[S]}
[CYCLE Num2 {SECOND[S] | MINUTE[S] |HOUR[S] |DAY[S]}]
}[ON|OFF]
]
} [,...];

CREATE SYNCHRONOUS WRITETHROUGH CACHE GROUP

SYNCHRONOUS WRITETHROUGHのキャッシュ・グループは、次の構文で作成します。

CREATE [DYNAMIC] SYNCHRONOUS WRITETHROUGH
CACHE GROUP [Owner.]GroupName
FROM
{[Owner.]TableName (
{ColumnDefinition[,...]}
[,PRIMARY KEY(ColumnName[,...])]
[FOREIGN KEY(ColumnName [,...])
REFERENCES RefTableName (ColumnName [,...])}]
[ ON DELETE CASCADE ]
[UNIQUE HASH ON (HashColumnName[,...]) PAGES=PrimaryPages]
[AGING {LRU|
USE ColumnName
LIFETIME Num1 {SECOND[S] | MINUTE[S] |HOUR[S] |DAY[S]}
[CYCLE Num2 {SECOND[S] | MINUTE[S] |HOUR[S] |DAY[S]}]
}[ON|OFF]
]
} [,...];

CREATE USERMANAGED CACHE GROUP

ユーザー管理キャッシュ・グループは、次の構文で作成します。

CREATE [DYNAMIC][USERMANAGED] CACHE GROUP [Owner.]GroupName
[AUTOREFRESH
[MODE {INCREMENTAL | FULL}]
[INTERVAL IntervalValue {MINUTE[S] | SECOND[S] | MILLISECOND[S] }]
[STATE {ON|OFF|PAUSED}]
]
FROM
{[Owner.]TableName (
{ColumnDefinition[,...]}
[,PRIMARY KEY(ColumnName[,...])]
[FOREIGN KEY(ColumnName[,...])
REFERENCES RefTableName (ColumnName [,...])]
[ON DELETE CASCADE]
[, {READONLY | PROPAGATE | NOT PROPAGATE}]
[UNIQUE HASH ON (HashColumnName[,...]) PAGES=PrimaryPages]
[AGING {LRU|
USE ColumnName
LIFETIME Num1 {SECOND[S] | MINUTE[S] |HOUR[S] |DAY[S]}
[CYCLE Num2 {SECOND[S] | MINUTE[S] |HOUR[S] |DAY[S]}]
}[ON|OFF]
]
[WHERE ExternalSearchCondition]
} [,...];

CREATE WRITETHROUGH GLOBAL CACHE GROUP

次の構文は、グローバル・キャッシュ・グループを作成して、データをキャッシュ・グリッドにキャッシュする方法を示しています。キャッシュ・グループに対してOracle Databaseからの動的なロードを有効にするには、DYNAMIC属性を指定します。

CREATE [DYNAMIC] [ASYNCHRONOUS] WRITETHROUGH GLOBAL CACHE GROUP  [Owner.]GroupName
FROM
{[Owner.]TableName (
{ColumnDefinition[,...]}
[,PRIMARY KEY(ColumnName[,...])]
[FOREIGN KEY(ColumnName [,...])
REFERENCES RefTableName (ColumnName [,...])]
[ ON DELETE CASCADE ]
UNIQUE HASH ON (HashColumnName[,...]) PAGES=PrimaryPages]
[AGING {LRU|
USE ColumnName
LIFETIME Num1 {SECOND[S] | MINUTE[S] |HOUR[S] |DAY[S]}
[CYCLE Num2 {SECOND[S] | MINUTE[S] |HOUR[S] |DAY[S]}]
}[ON|OFF]
]
} [,...];

パラメータ

キャッシュ・グループ定義のFROMキーワードより前のパラメータは次のとおりです。

パラメータ

説明

[Owner.]GroupName

新しいキャッシュ・グループに割り当てられる所有者および名前です。

[DYNAMIC]

指定すると、動的キャッシュ・グループが作成されます。

AUTOREFRESH

AUTOREFRESHパラメータは、Oracle Databaseからキャッシュ・グループに自動的に変更を伝播します。詳細は、「キャッシュ・グループのAUTOREFRESH」を参照してください。

MODE [INCREMENTAL | FULL]

自動リフレッシュ時に更新されるキャッシュ内の行を指定します。INCREMENTAL句が指定された場合、TimesTenは前回の伝播以降にOracle Databaseに加えられた変更のみをリフレッシュします。FULL句が指定された場合、TimesTenは自動リフレッシュのたびにキャッシュ内のすべての行を更新します。デフォルトの自動リフレッシュ・モードはINCREMENTALです。

INTERVAL IntervalValue

自動リフレッシュを行う時間隔を分、秒またはミリ秒の単位で指定します。IntervalValueには、AUTOREFRESHを実行する頻度をMINUTES、SECONDSまたはMILLISECONDSの単位の整数値で指定します。IntervalValueのデフォルト値は5分です。指定した時間隔でAUTOREFRESHを完了できない場合は、実行時に警告が生成され、現在の処理が終了するまで次回のAUTOREFRESHを待機します。待機キューが10に達すると、サポート・ログに通知メッセージが生成されます。

STATE [ON | OFF | PAUSED]

キャッシュ・グループの作成時に自動リフレッシュをON、OFFまたはPAUSEDのいずれにするかを設定します。この設定は、ALTER CACHE GROUP文を使用して後で変更できます。デフォルトでは、AUTOREFRESHの状態はPAUSEDです。

FROM

キャッシュ・グループに1つ以上の表定義を指定します。

FROMキーワード以降のすべての記述は、キャッシュ・グループがキャッシュするOracle Database表の定義で構成されています。各表定義の構文は、CREATE TABLE文と同様です。ただし、キャッシュ・グループ表には、主キー制約が必要です。

表定義には次のパラメータがあります。

パラメータ

説明

[Owner.]TableName

新しい表に割り当てる所有者および名前です。所有者名を指定しない場合は、新しい表の所有者名としてログイン名が使用されます。

ColumnDefinition

表の個々の列の名前、データ型およびNULL値可能かどうかを指定します。各表には、列が少なくとも1つ必要です。詳細は、「列定義」を参照してください。

PRIMARY KEY (ColumnName[,...])

表に主キーを指定します。キャッシュ・グループには、主キー制約が必要です。ColumnNameは、作成される表の主キー列の名前です。主キーには最大16列を指定できます。1つの指定内でUNIQUEとともに指定することはできません。

FOREIGN KEY (ColumnName[,...])

表に外部キーを指定します。ColumnNameは、作成される表の外部キー列の名前です。「FOREIGN KEY」を参照してください。

REFERENCES RefTableName (ColumnName[,...])

外部キーを関連付ける表を指定します。RefTableNameは参照される表の名前で、ColumnNameはその表の参照される列の名前です。

[ON DELETE CASCADE]

ON DELETE CASCADE参照アクションを有効にします。指定されている場合、参照先キーの値を含む行が親表から削除されると、依存する外部キーの値を持つ子表の行も削除されます。

READONLY

キャッシュされた表に対する変更の禁止を指定します。

PROPAGATE|NOT PROPAGATE

キャッシュされた表への変更が、コミット時に自動的に対応するOracle Database表に伝播されるかどうかを指定します。

UNIQUE HASH ON (HashColumnName)

この表にハッシュ索引を作成することを指定します。HashColumnNameには、この表のハッシュ・キーに含める列を指定します。ハッシュ索引に指定される列は、主キーの列と同じである必要があります。

PAGES = PrimaryPages

表の想定ページ数に基づいてハッシュ索引のサイズを設定します。PrimaryPagesの値は、表の想定行数を256で除算して決定します。たとえば、表に256,000行ある場合は、PrimaryPagesに1000を指定します(256000/256=1000)。
PrimaryPagesの値は、0を含まない正の定数である必要があります。

PrimaryPagesの推定値が小さすぎると、パフォーマンスが悪化します。

ハッシュ索引の詳細は、「CREATE TABLE」を参照してください。

WHERE ExternalSearchCondition

Oracle Databaseでキャッシュ・グループに対して評価されるWHERE句。このWHERE句は、キャッシュ・グループに対するすべてのLOADとREFRESH処理に追加されます。他の表を直接参照することはできません。TimesTenとOracle Databaseの両方で解析されます。『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のWHERE句の使用に関するに関する項を参照してください。

AGING LRU [ON | OFF]

指定する場合、ルート表にLRUエージング・ポリシーを定義します。LRUエージング・ポリシーはキャッシュ・グループのすべての表に適用します。LRUエージング・ポリシーでは、エージングのタイプ(LRU)、エージング状態(ONまたはOFF)およびLRUエージング属性を定義します。
エージング状態をONまたはOFFのいずれかに設定します。ONはエージング状態が有効であり、エージングが自動的に実行されることを示します。OFFはエージング状態が無効であり、エージングが自動的に実行されないことを示します。両方の場合、エージング・ポリシーが定義されます。デフォルトはONです。

動的キャッシュ・グループでは、LRUエージングはデフォルトでONに設定されます。かわりに時間ベースのエージングを指定できます。明示的にロードされるグローバル・キャッシュ・グループでは、エージングはデフォルトで無効です。

キャッシュ・グループが動的でないかぎり、自動リフレッシュ属性が指定されたキャッシュ・グループにはLRUエージングを指定できません。

LRU属性はプロシージャttAgingLRUConfigをコールして定義します。LRU属性はSQLレベルでは定義できません。

LRUエージングの詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のキャッシュ・グループへのエージングの実装に関する項を参照してください。

AGING USE ColumnName...[ON|OFF]

指定する場合、ルート表に時間ベースのエージング・ポリシーを定義します。時間ベースのエージング・ポリシーはキャッシュ・グループのすべての表に適用します。時間ベースのエージング・ポリシーでは、エージングのタイプ(時間ベース)、エージング状態(ONまたはOFF)および時間ベースのエージング属性を定義します。
エージング状態をONまたはOFFのいずれかに設定します。ONはエージング状態が有効であり、エージングが自動的に実行されることを示します。OFFはエージング状態が無効であり、エージングが自動的に実行されないことを示します。両方の場合、エージング・ポリシーが定義されます。デフォルトはONです。

時間ベースのエージング属性はSQLレベルで定義され、LIFETIME句およびCYCLE句で指定します。

時間ベース・エージングに使用する列の名前としてColumnNameを指定します。列は、NOT NULLのTIMESTAMPデータ型またはDATEデータ型として定義します。この列の値がSYSDATEから差し引かれ、指定した単位(秒、分、時間、日数)を使用して切り捨てられた後、LIFETIME値との比較が行われます。結果がLIFETIME値より大きい場合、その行はエージングの候補となります。

エージングに使用される列の値は、アプリケーションによって更新されます。この列の値が不明な行がある場合、その行がエージ・アウトされないようにするには、列に大きなデフォルト値を定義します(この列はNULLにはできません)。

明示的にロードされるグローバル・キャッシュ・グループでは、エージングはデフォルトで無効です。

時間ベースのエージングの詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のキャッシュ・グループへのエージングの実装に関する項を参照してください。

LIFETIME Num1 {SECOND[S]|MINUTE[S]|HOUR[S]DAY[S]}

LIFETIMEは時間ベースのエージング属性で、必須の句です。
AGING USE ColumnName句の後にLIFETIME句を指定します。

LIFETIME句には、データがキャッシュに保持されることが保証される時間を指定します。

Num1には、行がキャッシュに保持される時間の長さを、秒、分、時間または日数で表す正の整定数を指定します。LIFETIME値を超えた行はエージ・アウト(表から削除)されます。

時間の単位の概念がサポートされています。時間の単位にDAYSを指定した場合、タイムスタンプの日付が同じ日になっているすべての行が同時にエージ・アウトされます。また、HOURSを時間の単位に指定した場合は、タイムスタンプ値の時間が同じ行が、すべて同時にエージ・アウトされます。LIFETIMEの3 DAYSは、LIFETIMEの72 HOURS(3×24)やLIFETIMEの432 MINUTES(3×24×60)とは異なります。

[CYCLE Num2 {SECOND[S] | MINUTE[S] |HOUR[S]|DAY[S]}]

CYCLEは時間ベースのエージング属性で、オプションです。LIFETIME句の後にCYCLE句を指定します。
CYCLE句は、データが指定したLIFETIME値を超えているかどうか、その結果エージ・アウト(削除)する必要があるかどうかを確認するために、システムで行をチェックする頻度を指定します。

Num2には、正の整数を指定します。

CYCLE句を指定しない場合、デフォルト値は5分です。Num2に0を指定した場合、エージング・スレッドは1秒ごとに起動します。

エージング状態がOFFの場合、エージングは自動的に実行されず、CYCLE句は無視されます。

説明

- 2つのキャッシュ・グループで所有者名とグループ名を同じにすることはできません。所有者名を指定しない場合、ログイン名が新しいキャッシュ・グループの所有者名になります。

- グローバル・キャッシュ・グループの場合、キャッシュ・グループ名、キャッシュ表またはキャッシュ・グループ表の列に特殊文字を指定しないでください。ネーミング規則の詳細は、「基本名」を参照してください。

- WHERE句に動的パラメータを指定することはできません。

- Oracle Databaseの一時表はキャッシュできません。

- 各表は、Oracle Databaseの表と対応している必要があります。

- Oracle Databaseでは、親子関係を定義して、子表の外部キー列にNULL値を挿入できます。子表の該当行は、NULL親を参照していることになります。この状態で、キャッシュ・グループを作成して、Oracle Database表の親子関係をキャッシュできます。ただし、Oracle Database表からキャッシュ・グループにデータをロードする場合は、外部キー列にNULL値を持つ行はロードされません。TimesTenでは、キャッシュする表で、外部キーがNULL親を表す親子関係が定義された場合は、キャッシュ・グループを作成しないことをお薦めします。

- 小文字のデリミタ付き識別子を使用してキャッシュ表に名前を付けることはできません。TimesTenの表の名前は大文字と小文字が区別されず、大文字として格納されます。キャッシュ表の名前はOracle Database表の名前と同じである必要があります。TimesTenの大文字の表名は、大文字と小文字が混在するOracle Databaseの表の名前と一致しません。解決方法として、Oracle Databaseの表のシノニムを作成し、そのシノニムをキャッシュ・グループの表名として使用します。この解決方法は、読取り専用キャッシュ・グループまたはAUTOREFRESHパラメータが設定されたキャッシュ・グループには適用できません。

- キャッシュ表の各列の名前およびデータ型は、Oracle Databaseの表の各列と一致する必要があります。『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のOracle DatabaseとTimesTenデータ型間のマッピングに関する項を参照してください。また、WHERE句内で列名を参照する場合は、各列名を所有者と表名で完全に修飾する必要があります。

- WHERE句は、キャッシュ・グループ表のみ直接参照できます。キャッシュ・グループ外の表は、副問合せでのみ参照できます。

- 一般的には、CREATE CACHE GROUP、LOAD CACHE GROUP、UNLOAD CACHE GROUP、REFRESH CACHE GROUPまたはFLUSH CACHE GROUP文のWHERE句の列名を完全に修飾する必要はありません。ただし、同一キャッシュ・グループ内の複数の表を結合する問合せがTimesTenによって自動的に生成されるため、キャッシュ・グループ内に同じ名前の列を持つ表が複数ある場合は、列を完全に修飾する必要があります。

- デフォルトでは、キャッシュ・グループ表で主キーを使用するために範囲索引が作成されます。主キーに対してハッシュ索引を指定するには、UNIQUE HASH句を使用してください。

- アプリケーションでキャッシュ・グループ表の主キーに対して範囲問合せを実行する場合は、UNIQUE HASH句を省略して、そのキャッシュ・グループ表に対して範囲索引を選択してください。

- ただし、主キーの完全一致検索のみをアプリケーションで実行する場合は、ハッシュ索引の方がレスポンス時間およびスループットが優れている場合があります。その場合は、UNIQUE HASH句を指定します。UNIQUE HASH句の詳細は、「CREATE TABLE」を参照してください。

- 表の主キーで使用する索引を変更するには、ALTER TABLEを使用します。

- PROPAGATE属性が指定されたキャッシュ・グループ表と、SWTキャッシュ・グループおよびAWTキャッシュ・グループの表の場合、ON DELETE CASCADEで指定する外部キーは、Oracle Database表のON DELETE CASCADEで指定されている外部キーの適切なサブセットであることが必要です。

- CREATE CACHE GROUP文はシリアライズ可能分離レベルでは実行できません。実行しようとするとエラー・メッセージが返されます。

キャッシュ・グループのAUTOREFRESH

AUTOREFRESHパラメータは、Oracle DatabaseからTimesTenキャッシュ・グループに自動的に変更を伝播します。明示的にロードされるキャッシュ・グループの場合、削除、更新および挿入がOracle Databaseからキャッシュ・グループに自動的に伝播されます。動的キャッシュ・グループの場合、削除と更新のみが伝播されます。指定されたOracle Database表への挿入は動的キャッシュ・グループには伝播されません。これらは、アプリケーションで参照されたときに、動的にTimesTen Cacheにロードされます。また、アプリケーションで明示的にロードすることもできます。

キャッシュ・グループで自動リフレッシュを使用するには、キャッシュ・グループを作成する際にAUTOREFRESHを指定する必要があります。MODE、STATEおよびINTERVAL AUTOREFRESHの設定は、ALTER CACHE GROUPコマンドを使用することによって、キャッシュ・グループが作成された後で変更できます。キャッシュ・グループをAUTOREFRESHまたはPROPAGATEに指定した後は、これらの属性を変更することはできません。

TimesTenでは、FULLまたはINCREMENTAL AUTOREFRESHがサポートされています。FULLモードでは、キャッシュ全体が定期的にアンロードされてから再ロードされます。INCREMENTALモードでは、Oracle Databaseにトリガーがインストールされて変更の追跡が行われ、特定のOracle表で変更された行のみが定期的に更新されます。自動リフレッシュの状態がPAUSEDになっている場合を除き、最初の増分リフレッシュは常に完全リフレッシュになります。デフォルトのモードはINCREMENTALです。

FULL AUTOREFRESHは、Oracle Database表でほとんどの行が変更されている場合に効果的です。変更が少ない場合は、INCREMENTAL AUTOREFRESHがより有効です。

TimesTenは、AUTOREFRESHを指定した文を含むトランザクションがコミットされたときに、自動リフレッシュ操作をスケジュールします。自動リフレッシュをスケジュールする文は、次のとおりです。

- AUTOREFRESHを指定し、AUTOREFRESH状態をONに指定したCREATE CACHE GROUP文。

- AUTOREFRESH状態をONに変更したALTER CACHE GROUP文。

- 自動リフレッシュの状態がPAUSEDに指定されている、空のキャッシュ・グループに対して実行されるLOAD CACHE GROUP文。

自動リフレッシュの頻度は、指定した時間隔によって決まります。

AUTOREFRESHのSTATEには、ON、OFFまたはPAUSEDが指定できます。デフォルトでは、自動リフレッシュの状態はPAUSEDです。

NOT PROPAGATE属性とAUTOREFRESH属性を同時に使用することはできません。

キャッシュ・グループでのエージング

- 時間ベースのエージングでは、スライド期間を指定できます。『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のスライド期間の構成に関する項を参照してください。

- 表のエージング・ポリシーを定義した後に、エージング・ポリシーをLRUから時間ベースに、または時間ベースからLRUに変更できません。最初にエージングを削除し、表を変更して新しいエージング・ポリシーを追加する必要があります。

- エージング・ポリシーは、エージング状態を変更するように定義する必要があります。

- 1つのシステムでLRUエージングと時間ベースのエージングの両方を組み合せて使用できます。LRUエージングのみを使用する場合、エージング・スレッドはデータベース全体に指定されたサイクルに基づいて起動します。一方、時間ベースのエージングのみを使用する場合、エージング・スレッドは最適な頻度に基づいて起動します。この頻度は、すべての表のCYCLE句に指定された値によって決定されます。LRUエージングと時間ベースのエージングの両方を使用する場合は、両方のタイプを組み合せて考慮した上でスレッドが起動します。

- エージング状態がONかOFFかにかかわらずエージング処理をすぐにスケジュールするには、ttAgingScheduleNowプロシージャをコールします。

- LRUエージングでは、行がアクセスされているかまたは参照されているかどうかを、次のルールで判断します。

- SELECT文の結果セットを構築するために使用された行。

- INSERT...SELECT文の結果セットを構築するために使用された行。

- 更新または削除対象の行。

- コマンドで参照される表に対してLRUエージングの削除や追加を行うと、コンパイルされたコマンドは無効と指定され、再コンパイルが必要になります。

- LRUエージングでは、子行がエージングの対象でない場合、この子行とその親行は削除されません。ON DELETE CASCADEの設定は無視されます。

- 時間ベースのエージングでは、親行がエージングの対象である場合、すべての子行が削除されます。ON DELETE CASCADEは、設定の有無にかかわらず無視されます。

- ルート表にLRUエージング・ポリシーまたは時間ベースのエージング・ポリシーを指定します。ポリシーはキャッシュ・グループのすべての表に適用します。

- 時間ベースのエージング・ポリシーの場合、エージング列を追加または変更できません。これは、NOT NULL列を追加または変更できないためです。

- キャッシュ・グループのエージングを定義する場合の制限:

- 動的キャッシュ・グループでないかぎり、LRUエージングは自動リフレッシュ属性が設定されたキャッシュ・グループではサポートされません。

- 明示的にロードされるグローバル・キャッシュ・グループでは、エージングはデフォルトで無効です。

- キャッシュ・エージェントがアクティブの間は、読取り専用キャッシュ・グループまたはAUTOREFRESH属性を持つキャッシュ・グループに対するエージング・ポリシーの追加、変更または削除はできません。まず、キャッシュ・エージェントを停止してください。

- 時間ベースのエージングに使用されている列は削除できません。

キャッシュ・グリッド

キャッシュ・グリッド内のデータをキャッシュするには、ASYNCHRONOUS WRITETHROUGHグローバル・キャッシュ・グループを作成する必要があります。このキャッシュ・グループを作成する前に、TimesTenデータベースをキャッシュ・グリッドと関連付けておく必要があります。キャッシュ・グリッドの作成と使用およびグローバル・キャッシュ・グループの作成と使用の詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のキャッシュ・グリッドの構成に関する項およびグローバル・キャッシュ・グループに関する項を参照してください。

例

読取り専用キャッシュ・グループを作成します。

CREATE READONLY CACHE GROUP customerorders
AUTOREFRESH INTERVAL 10 MINUTES
FROM
customer (custid INT NOT NULL,
name CHAR(100) NOT NULL,
addr CHAR(100),
zip INT,
region CHAR(10),
PRIMARY KEY(custid)),
ordertab (orderid INT NOT NULL,
custid INT NOT NULL,
PRIMARY KEY (orderid),
FOREIGN KEY (custid) REFERENCES customer(custid));

ASYNCHRONOUS WRITETHROUGHキャッシュ・グループを作成します。

CREATE ASYNCHRONOUS WRITETHROUGH CACHE GROUP cstomers
FROM
customer (custid INT NOT NULL,
name CHAR(100) NOT NULL,
addr CHAR(100),
zip INT,
PRIMARY KEY(custid));

SYNCHRONOUS WRITETHROUGHキャッシュ・グループを作成します。

CREATE SYNCHRONOUS WRITETHROUGH CACHE GROUP customers
FROM
customer (custid INT NOT NULL,
name CHAR(100) NOT NULL,
addr CHAR(100),
zip INT,
PRIMARY KEY(custid));

ユーザー管理キャッシュ・グループを作成します。

CREATE USERMANAGED CACHE GROUP updateanywherecustomers
AUTOREFRESH
MODE INCREMENTAL
INTERVAL 30 SECONDS
STATE ON
FROM
customer (custid INT NOT NULL,
name CHAR(100) NOT NULL,
addr CHAR(100),
zip INT,
PRIMARY KEY(custid),
PROPAGATE);

時間ベースのエージングが指定されたキャッシュ・グループを作成します。エージング用の列として、agetimestampを指定します。LIFETIMEは2時間、CYCLEは30分を指定します。エージング状態は指定しないため、デフォルト設定(ON)が使用されます。

CREATE READONLY CACHE GROUP agingcachegroup
AUTOREFRESH
MODE INCREMENTAL
INTERVAL 5 MINUTES
STATE PAUSED
FROM
customer (customerid NUMBER NOT NULL,
agetimestamp TIMESTAMP NOT NULL,
PRIMARY KEY (customerid))
AGING USE agetimestamp LIFETIME 2 HOURS CYCLE 30 MINUTES;

Command> DESCRIBE customer;
Table USER.CUSTOMER:
Columns:
*CUSTOMERID                      NUMBER NOT NULL
AGETIMESTAMP                    TIMESTAMP (6) NOT NULL
AGING USE AgeTimestamp LIFETIME 2 HOURS CYCLE 30 MINUTES ON
1 table found.
(primary key columns are indicated with *)

Oracle Databaseで大文字と小文字が混在するデリミタ付き識別子の表名にシノニムを使用すると、大文字と小文字が混在する表名をTimesTenでキャッシュできます。まず、大文字と小文字が混在するOracle Database表名のキャッシュを試みます。「Could not find 'NameofTable' in Oracle」というエラーが表示されます。

Command> AUTOCOMMIT 0;
Command> PASSTHROUGH 3;
Command> CREATE TABLE "MixedCase" (col1 NUMBER PRIMARY KEY NOT NULL);
Command> INSERT INTO "MixedCase" VALUES (1);
1 row inserted.
Command> COMMIT;
Command> CREATE CACHE GROUP MixedCase1 from "MixedCase"
(col1 NUMBER PRIMARY KEY NOT NULL);
5140: Could not find SAMPLEUSER.MIXEDCASE in Oracle.  May not have privileges.
The command failed.

ここで、PassThrough属性を使用して、シノニム"MIXEDCASE"をOracle Databaseに作成し、そのシノニムを表名として使用します。

Command> AUTOCOMMIT 0;
Command> PASSTHROUGH 3;
Command> CREATE SYNONYM "MIXEDCASE" FOR "MixedCase";
Command> COMMIT;
Command> CREATE CACHE GROUP MixedCase2 FROM "MIXEDCASE"
(col1 NUMBER PRIMARY KEY NOT NULL);
Warning  5147: Cache group contains synonyms
Command> COMMIT;

読取り専用キャッシュ・グループまたはAUTOREFRESH属性を持つキャッシュ・グループでシノニムの名前を使用してみます。次のエラーが表示されます。

Command> AUTOCOMMIT 0;
Command> PASSTHROUGH 3;
Command> CREATE SYNONYM "MIXEDCASE_AUTO" FOR "MixedCase";
Command> COMMIT;
Command> CREATE READONLY CACHE GROUP MixedCase3 AUTOREFRESH MODE
INCREMENTAL INTERVAL 10 MINUTES FROM "MIXEDCASE_AUTO"
(Col1 NUMBER PRIMARY KEY NOT NULL);
5142: Autorefresh is not allowed on cache groups with Oracle synonyms
The command failed.

関連項目

「ALTER CACHE GROUP」
「ALTER TABLE」
「DROP CACHE GROUP」
「FLUSH CACHE GROUP」
「LOAD CACHE GROUP」
「UNLOAD CACHE GROUP」

CREATE FUNCTION

CREATE FUNCTION文は、スタンドアロンのストアド・ファンクションを作成します。

必要な権限

CREATE PROCEDURE(所有者の場合)またはCREATE ANY PROCEDURE(非所有者の場合)。

SQL構文

CREATE [OR REPLACE] FUNCTION [Owner.]FunctionName
[(arguments [IN|OUT|IN OUT][NOCOPY] DataType [DEFAULT expr][,...])]
RETURN DataType [InvokerRightsClause] [DETERMINISTIC]
{IS|AS} PlsqlFunctionBody

InvokerRightsClauseの構文は、次のとおりです。

AUTHID {CURRENT_USER|DEFINER}

InvokerRightsClauseまたはDETERMINISTICは任意の順序で指定できます。

パラメータ

パラメータ

説明

OR REPLACE

ファンクションがすでに存在する場合に再作成するには、OR REPLACEを指定します。この句を使用して、削除および再作成せずに既存のファンクションの定義を変更します。ファンクションを再作成すると、そのファンクションはTimesTenで再コンパイルされます。

FunctionName

ファンクションの名前。

arguments

引数またはパラメータの名前。ファンクションに0以上のパラメータを指定できます。パラメータを指定する場合は、パラメータのデータ型を指定する必要があります。データ型はPL/SQLデータ型である必要があります。
PL/SQLデータ型の詳細は、『Oracle Database PL/SQL言語リファレンス』の第3章「PL/SQLデータ型」を参照してください。

IN | OUT | IN OUT

パラメータのモード。
INは読取り専用パラメータです。パラメータの値をファンクションに渡すことはできますが、ファンクションはパラメータの値をファンクション外に渡したり、コール側PL/SQLブロックに戻したりすることはできません。パラメータの値は変更できません。

OUTは書込み専用パラメータです。値をファンクションからコール側PL/SQLブロックに戻すには、OUTパラメータを使用します。パラメータに値を割り当てることができます。

IN OUTは読取り/書込みパラメータです。値をファンクションに渡し、コール側プログラムに戻すことができます(元の変更されていない値またはファンクション内で設定された新しい値)。

INがデフォルトです。

NOCOPY

可能なかぎり迅速にパラメータを渡すようにTimesTenに指示するには、NOCOPYを指定します。レコード、索引付き表、OUTまたはIN OUTパラメータへのVARRAYなどの大きな値を渡す場合に、パフォーマンスを向上できます。INパラメータでは、常にNOCOPYが渡されます。
詳細は、『Oracle Database PL/SQL言語リファレンス』のNOCOPYに関する項を参照してください。

DEFAULT expr

パラメータのデフォルト値を指定するには、この句を使用します。キーワードDEFAULTのかわりに:=を指定できます。

RETURN DataType

必須の句。ファンクションは値を戻す必要があります。ファンクションの戻り値のデータ型を指定する必要があります。
データ型の長さ、精度またはスケールは指定しないでください。

データ型はPL/SQLデータ型です。

PL/SQLデータ型の詳細は、『Oracle Database PL/SQL言語リファレンス』の第3章「PL/SQLデータ型」を参照してください。

InvokerRightsClause

PL/SQLファンクションまたはプロシージャ内のSQL文が定義者権限で実行されるか実行者権限で実行されるかを指定できます。AUTHIDの設定は、実行時にPL/SQLプロシージャまたはファンクションによって発行されるSQL文の名前解決および権限チェックに次のように影響を与えます。

- DEFINERを指定すると、SQLの名前解決および権限チェックは、プロシージャまたはファンクションの所有者(定義者、つまりプロシージャまたはファンクションがあるスキーマの所有者)が実行しているものとして実行されます。DEFINERがデフォルトです。

- CURRENT_USERを指定すると、SQLの名前解決および権限チェックは、現在のユーザー(実行者)が実行しているものとして実行されます。

詳細は、『Oracle TimesTen In-Memory Database PL/SQL開発者ガイド』の定義者の権限と実行者の権限に関する項を参照してください。

DETERMINISTIC

パラメータに同じ値を指定してファンクションをコールした場合に常に同じ結果値を戻すように指定するには、DETERMINISTICを指定します。

IS|AS

ISまたはASを指定して、ファンクションの本体を宣言します。

plsql_function_spec

ファンクションの本体を指定します。

制限

次の句はTimesTenではサポートされません。

- parallel_enable_clause
句を指定できますが、無効になります。

- call_spec句

- AS EXTERNAL句

レプリケーション環境で、CREATE FUNCTION文はレプリケートされません。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』の既存のアクティブ・スタンバイ・ペアでの新規PL/SQLオブジェクトの作成に関する項および既存のクラシック・レプリケーション・スキームへのPL/SQLオブジェクトの追加に関する項を参照してください。

ファンクションを作成または置き換えた場合、ファンクションに付与された権限は同じままです。オブジェクトを削除して再作成した場合、元のオブジェクトに付与されていたオブジェクト権限は削除されます。

例

1つの入力パラメータを指定してファンクションget_salを作成します。NUMBER型としてsalaryを戻します。

Command> CREATE OR REPLACE FUNCTION get_sal
>   (p_id employees.employee_id%TYPE) RETURN NUMBER IS
>   v_sal employees.salary%TYPE := 0;
> BEGIN
>   SELECT salary INTO v_sal FROM employees
>     WHERE employee_id = p_id;
>   RETURN v_sal;
> END get_sal;
> /

Function created.

関連項目

『Oracle Database PL/SQL言語リファレンス』および『Oracle Database SQL言語リファレンス』

CREATE INDEX

CREATE INDEX文は、範囲索引、ハッシュ索引、またはビットマップ索引を表またはマテリアライズド・ビューの1つ以上の列に作成します。

必要な権限

所有者に必要な権限はありません。

所有者でない場合は、システム権限CREATE ANY INDEXまたはオブジェクト権限INDEXが必要です。

SQL構文

範囲索引またはビットマップ索引を作成するには、次のように実行します。

CREATE [UNIQUE|BITMAP] INDEX [Owner.]IndexName ON
[Owner.]TableName ({ColumnName [ASC | DESC]}
[,... ] )

ハッシュ索引を作成するには、次のように実行します。

CREATE [UNIQUE] HASH INDEX [Owner.]IndexName ON
[Owner.]TableName ({ColumnName [ASC | DESC]}
[,... ] ) [ PAGES = RowPages | CURRENT ]

パラメータ

パラメータ

説明

UNIQUE

範囲索引およびハッシュ索引の両方にUNIQUEを指定します。UNIQUEを指定すると、索引キーの列値の各組合せが出現するのは、その表で1つの行のみです。

BITMAP

一意の値を持つ行に関する情報がビットマップでエンコードされている索引を作成するには、CREATE BITMAP INDEXを指定します。ビットマップの各ビットが表の行に対応します。
ビットマップ索引は、一意の値がそれほど多くない列に使用します。

HASH

ハッシュ索引を作成する場合は、HASHを指定します。一意のハッシュ索引を作成する場合は、HASHとともにUNIQUEを指定します。

[Owner.] IndexName

新しい索引に割り当てる名前。表の2つの索引に同じ名前を付けることはできません。所有者を指定する場合、表の所有者と同じ名前を指定する必要があります。

[Owner.] TableName

索引を作成する表またはマテリアライズド・ビューを指定します。

ColumnName

索引キーとして使用する列の名前。主索引キーから補助索引キーの順に、最大16列を指定できます。

[ASC|DESC]

索引の順序を昇順(デフォルト)または降順で指定します。現在、TimesTenではこのパラメータは無視されます。

PAGES = {RowPages | CURRENT}

CREATE HASH INDEX文で使用するオプションの句。PAGES句を指定しない場合は、デフォルトはCURRENTになります。
表の想定ページ数に基づいてハッシュ索引のサイズを設定します。CURRENTを指定すると、表内の現在の行数を使用してページ・カウント値が計算されます。RowPagesを指定する場合は、ページ数が使用されます。RowPagesの値は、表の想定行数を256で除算して決定します。たとえば、表に256,000行ある場合は、RowPagesに1000を指定します(256000/256=1000)。

RowPagesの値は、0を含まない正の定数である必要があります。

表に行がない場合は、PAGES=CURRENTを指定しないでください。表に行が追加される際に、ハッシュ索引のパフォーマンスが低下するためです。

説明

- TimesTenでは、一意でない範囲索引がデフォルトで作成されます。一意の範囲索引を作成するには、CREATE UNIQUE INDEXを指定します。ビットマップ索引を作成するには、CREATE BITMAP INDEXを指定します。

- 一意でないハッシュ索引を作成する場合は、CREATE HASH INDEXを指定します。一意のハッシュ索引を作成するには、 CREATE UNIQUE HASH INDEXを指定します。

- LOB列には、索引(範囲、ハッシュ、ビットマップ)を作成できません。

- 各列でビットマップ索引を指定すると、AND演算子またはOR演算子で連結された複数の列で複数の条件を指定する複雑な問合せのパフォーマンスが向上します。実行時に、TimesTenでは、各条件を満たす行のビットマップが検出され、様々な条件のビットマップがビット単位論理演算子を使用して結合され、その結果生成されるビットマップが条件を満たす行に変換されます。

- ビットマップ索引は、次の条件を満たすために使用されます。

- 等価条件。例: 'x1 = 1'

- 範囲条件。例: 'y1 > 10'および'z1 BETWEEN 1 and 10'

- AND条件。例: 'x1 > 10 AND y1 > 10'

- OR条件。例: 'x1 > 10 OR y1 > 10'

- ANDまたはORを含む複雑な条件。例: '(x1 > 10 AND y1 > 10) OR (z1 > 10)'

- ANDを含むNOT EQUAL条件。例: 'x1 = 1 and y1 != 1'

- ビットマップ索引の特徴は次のとおりです。

- COUNT (*)最適化では、ビットマップからROWIDがカウントされます。

- ビットマップ索引の列の接頭辞によってグループ化する問合せを最適化するために使用されます。

- 異なる問合せおよび順序を問合せによって最適化するために使用されます。

- MERGE結合で使用されます。

- CREATE INDEX文は、索引の定義をシステム・カタログに追加して、必要なデータ構造を初期化します。表の行はすべて索引に追加されます。

- UNIQUEを指定した場合、索引付けされた列の既存の行の値はすべて一意である必要があります。

- 新しい索引は、DROP INDEX文を使用して索引を削除するか、その索引に関連付けられた表を削除しないかぎり自動的にメンテナンスされます。

- 準備された文が新しく索引付けされた表を参照している場合、その文を次回に実行する際に自動的に再度準備されます。これにより、文は新しい索引を活用することができます。

- ソート処理では、NULLは最も大きな値としてソートされます。

- 他の接続が所有する空でないインスタンスが一時表にある場合、別の接続によって一時表に索引を作成することはできません。

- 言語比較を使用する場合は、言語索引を作成できます。言語索引ではソート・キー値が使用され、ソート・キー値用の記憶域が必要です。1つの索引に指定できるNLS_SORTの値は、一意の値を1つのみです。言語索引および言語比較の詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の言語索引の使用に関する説明を参照してください。

- 冗長な索引を作成すると、TimesTenにより警告またはエラーが生成されます。ttRedundantIndexCheckをコールして、表に対する冗長な索引のリストを表示します。

- アクティブ・スタンバイ・ペアのレプリケートされた環境で、DDL_REPLICATION_LEVELが2以上の場合にアクティブ・データベースでCREATE INDEXを実行すると、索引はレプリケーション・スキームのすべてのデータベースにレプリケートされます。索引が作成される表は空である必要があります。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアでのDDL変更に関する説明を参照してください。

- 索引は、表の任意の列にわたって作成できます。これには、圧縮列や、別の圧縮列グループに存在する列も含まれます。

- ハッシュ索引のサイズまたは型を変更するには、ハッシュ索引を削除して新しい索引を作成します。

- ハッシュ索引は、固定サイズで作成され、表の存続中は変化しません。ハッシュ索引のサイズを変更するには、索引を削除して再作成します。小さいハッシュ索引ほどハッシュの衝突が増えます。大きいハッシュ索引ほど衝突が少なくなりますが、メモリを消費しやすくなります。ハッシュ・キー比較は高速な操作であるため、少数のハッシュ衝突がTimesTenにパフォーマンスの問題を発生させることはありません。
ハッシュ索引のサイズが適性に設定されていることを確認するには、SET PAGES句のRowPagesパラメータの値により、アプリケーションで表の想定サイズを示す必要があります。この値は、表の想定行数を256で除算して計算します。たとえば、表に256,000行ある場合は、RowPagesに1000を指定します(256000/256=1000)。

- 索引に指定できる最大列数は16です。

問合せ処理での索引の使用

適正な索引は問合せのパフォーマンス向上につながります。索引の使用が有益な問合せと有益でない問合せがあります。また、問合せでの索引の選択も重要です。

範囲索引は、索引列の値のほとんどが一意の場合に、範囲検索および完全一致の処理に適しています。たとえば、範囲索引が列(C1,C2)に定義されている場合、次の種類の述語の処理に索引を使用できます。ConstantOrParamは、定数値または動的パラメータを指し、rangeは演算子>、<、>=、または<=を指します。

- C1 = ConstantOrParam AND C2 = ConstantOrParam

- C1 = ConstantOrParam AND C2 range ConstantOrParam

- C1 = ConstantOrParam

- C1 range ConstantOrParam

範囲索引は、等式述語および範囲述語の処理、ソート処理やグループ化処理に効果的です。範囲索引は、一意の値が多数ある索引列に使用します。範囲索引で指定する列の順序は関連しています。範囲索引を使用する問合せの述語内の式の順序は関連していません。問合せ処理時は、表で複数の範囲索引を定義している場合でも、表の各スキャンで範囲索引が1つだけ使用されます。

ハッシュ索引は等式述語の処理に効果的です。最適なパフォーマンスのためには、ハッシュ索引のサイズを適正にする必要があります。PAGESパラメータを使用してハッシュ索引のサイズを指定します。指定したPAGESの値が小さすぎると、多数のハッシュ衝突が発生し、ハッシュ索引にアクセスする文のパフォーマンスが低下します。ハッシュ索引で指定された列の順序は関連せず、範囲索引を使用する問合せの述語内の式の順序は関連しません。ハッシュ索引または範囲索引のいずれかを使用して特定の等式述語を処理する場合は、ハッシュ索引による検索は範囲索引のスキャンより高速なため、ハッシュ索引が使用されます。

ビットマップ索引は、等式述語および範囲述語の処理、特にAND演算子やOR演算子を使用して複数の式を持つ複雑な問合せに効果的です。ビットマップ索引は、索引列に一意の値が少なく(索引列に重複値が多数あり)、索引列のカーディナリティが低い問合せに使用します。索引は、各行を個別に索引付けるのではなく、一意の索引値ごとのビットマップを持ち、ビットマップの各ビットは表の行に対応します。

問合せの処理時に、表の各スキャンで複数のビットマップ索引を使用できます。ビットマップ索引は、等式述語、不等式述語、範囲述語、またはAND演算子やOR演算子によるこれらの述語の組み合わせを処理できます。

文レベルのオプティマイザ・ヒントまたはトランザクション・レベルのオプティマイザ・ヒントを使用することで、オプティマイザが使用する索引に作用できます。文レベルのオプティマイザ・ヒントの詳細は、「文レベルのオプティマイザ・ヒント」を参照してください。トランザクション・レベルのオプティマイザ・ヒントの詳細は、『Oracle TimesTen In-Memory Databaseリファレンス』の「ttOptSetFlag」、「ttOptSetOrder」、または「ttOptUseIndex」を参照してください。TimesTen Index Advisorを使用すると、特定の問合せのセットまたは特定のワークロードを考慮した索引に関する推奨事項が提供されます。Index Advisorの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』で、索引アドバイザを使用した索引の推奨に関する説明を参照してください。

例

表を作成し、col2に一意のハッシュ索引を作成します。PAGES句は指定しないでください。PAGESを指定しない場合、ハッシュ表のサイズに現在の表のページ数が使用されます。INDEXESを使用して、索引が作成されたことを確認します。表に行を挿入し、SHOWPLANを1に設定し、オプティマイザがハッシュ索引を使用していることを確認します。

Command> CREATE TABLE tab (col1 NUMBER PRIMARY KEY NOT NULL, col2 VARCHAR2 (30));
Command> CREATE UNIQUE HASH INDEX hash1 ON tab (col2);
Command> INDEXES;

Indexes on table TESTUSER.TAB:
HASH1: unique hash index on columns:
COL2
TAB: unique range index on columns:
COL1
2 indexes found.

2 indexes found on 1 table.
Command> INSERT INTO tab VALUES (10, 'ABC');
Command> SHOWPLAN 1;
Command> SELECT * FROM tab where col2 = 'ABC';

Query Optimizer Plan:

STEP:                1
LEVEL:               1
OPERATION:           RowLkHashScan
TBLNAME:             TAB
IXNAME:              HASH1
INDEXED CONDITION:   TAB.COL2 = 'ABC'
NOT INDEXED:         <NULL>

< 10, ABC >
1 row found.

表を作成し、col1に一意でないハッシュ索引を作成します。PAGES = CURRENTを使用して現在の表のページ数を使用してハッシュ索引のサイズを指定します。INDEXESを使用して、一意でないハッシュ索引が作成されることを確認します。

Command> CREATE TABLE tab2 (col1 NUMBER);
Command> CREATE HASH INDEX hash_index ON tab2 (col1) PAGES = CURRENT;
Command> INDEXES;

Indexes on table TESTUSER.TAB2:
HASH_INDEX: non-unique hash index on columns:
COL1
1 index found.

1 index found on 1 table.

表を作成し、col3に一意のハッシュ索引を作成します。PAGES = 100を使用して、ハッシュ索引のサイズにページ数100を指定します。INDEXESを使用して、一意のハッシュ索引が作成されることを確認します。

Command> CREATE TABLE tab3 (col1 NUMBER, col2 NUMBER, col3 TT_INTEGER);
Command> CREATE UNIQUE HASH INDEX unique_hash1 on tab3 (col3) PAGES = 100;
Command> INDEXES;

Indexes on table TESTUSER.TAB3:
UNIQUE_HASH1: unique hash index on columns:
COL3
1 index found.

1 index found on 1 table.

表を作成し、列idにビットマップ索引を作成します。ttIsql SHOWPLANコマンドを使用して、ビットマップ索引が問合せで使用されていることを確認します。

Command> CREATE TABLE tab1 (id NUMBER);
Command> INSERT INTO tab1 VALUES (10);
1 row inserted.
Command> INSERT INTO tab1 VALUES (20);
1 row inserted.
Command> CREATE BITMAP INDEX bitmap_id ON tab1 (id);
Command> COMMIT;
Command> SET AUTOCOMMIT OFF;
Command> SHOWPLAN 1;
Command> SELECT * FROM tab1 WHERE id = 10;

Query Optimizer Plan:

STEP:                1
LEVEL:               1
OPERATION:           RowLkBitmapScan
TBLNAME:             TAB1
IXNAME:              BITMAP_ID
INDEXED CONDITION:   TAB1.ID = 10
NOT INDEXED:         <NULL>

< 10 >
1 row found.

HRスキーマのregions表により、region_idに一意の索引が作成されます。regions表に対してttIsql INDEXESコマンドを発行します。一意の範囲索引regionsが表示されます。

Command> INDEXES REGIONS;

Indexes on table SAMPLEUSER.REGIONS:
REGIONS: unique range index on columns:
REGION_ID
(referenced by foreign key index COUNTR_REG_FK on table SAMPLEUSER.COUNTRIES)
1 index found.

1 index found on 1 table.

regions表に一意の索引iを作成し、region_id列に索引を作成してみます。警告メッセージが表示されます。

Command> CREATE UNIQUE INDEX i ON regions (region_id);
Warning  2232: New index I is identical to existing index REGIONS;
consider dropping index I

ttRedundantIndexCheckをコールして、この索引に対する警告メッセージを表示します。

Command> CALL ttRedundantIndexCheck ('regions');
< Index SAMPLEUSER.REGIONS.I is identical to index SAMPLEUSER.REGIONS.REGIONS;
consider dropping index SAMPLEUSER.REGIONS.I >
1 row found.

表redundancyを作成し、列co11およびcol2を定義します。col1およびcol2に2つのユーザー索引を作成します。2つ目の索引r2を作成しようとするとエラー・メッセージが表示されます。索引r1は作成されます。索引r2は作成されません。

Command> CREATE TABLE redundancy (col1 CHAR (30), col2 VARCHAR2 (30));
Command> CREATE INDEX r1 ON redundancy (col1, col2);
Command> CREATE INDEX r2 ON redundancy (col1, col2);
2231: New index R2 would be identical to existing index R1
The command failed.

redundancy表に対してttIsqlコマンドのINDEXESを発行し、索引r1のみが作成されていることを表示します。

Command> INDEXES redundancy;

Indexes on table SAMPLEUSER.REDUNDANCY:
R1: non-unique range index on columns:
COL1
COL2
1 index found.

1 index found on 1 table.

この一意索引によって、部品の番号はすべて一意になります。

CREATE UNIQUE INDEX purchasing.partnumindex
ON purchasing.parts (partnumber);

employees1表に、german_indexという名前の言語索引を作成します。2つ以上の言語ソートが必要な場合は、2つ目の言語索引を作成します。

Command> CREATE TABLE employees1 (id CHARACTER (21),
id2 character (21));
Command> CREATE INDEX german_index ON employees1
(NLSSORT(id, 'NLS_SORT=GERMAN'));
Command> CREATE INDEX german_index2 ON employees1
(NLSSORT(id2, 'nls_sort=german_ci'));
Command> indexes employees1;
Indexes on table SAMPLEUSER.EMPLOYEES1:
GERMAN_INDEX: non-unique range index on columns:
NLSSORT(ID,'NLS_SORT=GERMAN')
GERMAN_INDEX2: non-unique range index on columns:
NLSSORT(ID2,'nls_sort=german_ci')
2 indexes found.
1 table found.

関連項目

DROP INDEX

CREATE MATERIALIZED VIEW

CREATE MATERIALIZED VIEW文は、SelectQuery句で指定された表に対するビューを作成します。ビューを作成するために使用された元の表は、ディテール表と呼ばれます。ビューは、ディテール表の変更に関して、同期または非同期でリフレッシュされます。非同期マテリアライズド・ビューを作成する場合は、まずディテール表にマテリアライズド・ビュー・ログを作成する必要があります。「CREATE MATERIALIZED VIEW LOG」を参照してください。

必要な権限

文を実行するユーザーには、CREATE MATERIALIZED VIEW(所有者の場合)またはCREATE ANY MATERIALIZED VIEW(非所有者の場合)が必要です。

マテリアライズド・ビューの所有者には、ディテール表に対するSELECTが必要です。

マテリアライズド・ビューの所有者には、CREATE TABLEが必要です。

SQL構文

CREATE MATERIALIZED VIEW [Owner.]ViewName
[REFRESH
{ FAST | COMPLETE } |
[NEXT SYSDATE[+NUMTODSINTERVAL(IntegerLiteral,IntervalUnit)]]
|  NEXT SYSDATE[+NUMTODSINTERVAL(IntegerLiteral,IntervalUnit) ]
]
AS SelectQuery
[PRIMARY KEY (ColumnName [,...])]
[UNIQUE HASH ON (HashColumnName [,...]) PAGES = PrimaryPages]

パラメータ

パラメータ

説明

[Owner.]ViewName

新しいビューに割り当てる名前。

REFRESH

非同期マテリアライズド・ビューを指定します。

FAST | COMPLETE

リフレッシュ方法。FASTは、増分リフレッシュを指定します。COMPLETEは、完全リフレッシュを指定します。

NEXT SYSDATE

NUMTODSINTERVALを指定せずにNEXT SYSDATEを指定した場合、マテリアライズド・ビューは、ディテール表が変更されるたびに増分リフレッシュされます。リフレッシュは、ディテール表を変更するトランザクションがコミットされた直後に、別のトランザクションで実行されます。ディテール表が変更されるたびに完全リフレッシュ(COMPLETE)を指定することはできません。
NEXT SYSDATEを省略した場合、マテリアライズド・ビューが自動的にリフレッシュされることはありません。手動でリフレッシュする必要があります。

FASTまたはCOMPLETEを指定しないでNEXT SYSDATEを指定した場合、COMPLETEがデフォルトのリフレッシュ方法です。

[+NUMTODSINTERVAL(IntegerLiteral,
IntervalUnit)]

指定した場合、マテリアライズド・ビューは指定した時間隔でリフレッシュされます。IntegerLiteralは整数である必要があります。IntervalUnitは、'DAY'、'HOUR'、'MINUTE'、'SECOND'のいずれかの値である必要があります。
[NEXT SYSDATE[+NUMTODSINTERVAL(IntegerLiteral),IntervalUnit]を指定しない場合、マテリアライズド・ビューが自動的にリフレッシュされることはありません。REFRESH MATERIALIZED VIEW文を使用すると、ビューを手動でリフレッシュできます。

SelectQuery

ビューで使用される、ディテール表の列を選択します。

ColumnName

作成されるビューの主キー列の名前を指定します。主キーには最大16列を指定できます。ビュー表の結果列の名前は、一意である必要があります。表または所有者の要素を列名の定義に含めることはできません。

UNIQUE HASH ON

表のハッシュ索引です。一意のハッシュ索引のみが作成されます。このパラメータは、等価条件に使用します。UNIQUE HASH ONを指定するには、主キーの定義が必要です。

HashColumnName

ビューに定義された列をこの表のハッシュ・キーに含めます。ハッシュ索引に指定される列は、主キーの列と同じである必要があります。

PAGES = PrimaryPages

表の想定ページ数に基づいてハッシュ索引のサイズを設定します。PrimaryPagesの値は、表の想定行数を256で除算して決定します。たとえば、表に256,000行ある場合は、PrimaryPagesに1000を指定します(256000/256=1000)。
PrimaryPagesの値は、0を含まない正の定数である必要があります。

PrimaryPagesの推定値が小さすぎると、パフォーマンスが悪化します。

ハッシュ索引の詳細は、「CREATE TABLE」を参照してください。

説明

この項では、マテリアライズド・ビューに関する制限事項、要件、その他の考慮事項を、次のトピックを通じて説明します。

- マテリアライズド・ビューの制限事項および要件

- マテリアライズド・ビューの追加考慮事項

- 無効なマテリアライズド・ビュー

マテリアライズド・ビューの制限事項および要件

問合せの定義に関する次の制限事項および要件は、マテリアライズド・ビューに一般的に適用されます。(FASTリフレッシュを使用した非同期マテリアライズド・ビューには、記述のとおり、追加の制限事項があります。)

- SELECT構文のリストの各式には、一意の名前が必要です。

- 非マテリアライズド・ビューを使用してマテリアライズド・ビューを定義しないでください。

- マテリアライズド・ビュー問合せの選択リストの列にCLOB、BLOB、またはNCLOBデータ型を定義しないでください。

- ディテール表はキャッシュ・グループに属すことができず、ディテール表は圧縮を使用できません。

- SELECT FOR UPDATE.は使用しないでください。

- システム表またはシステム・ビューを参照しないでください。

- マテリアライズド・ビューでネストされた定義を使用しないでください。

- 動的パラメータを使用しないでください。

- ROWNUMを使用しないでください。

- 分析関数を使用しないでください。

- GROUPING SETS、ROLLUP、またはCUBEを使用しないでください。

- SYSDATEファンクションを使用しないでください。

- SYSTEM_USERファンクション、USERファンクション、CURRENT_USERファンクション、またはSESSION_USERファンクションを使用しないでください。

- NEXTVALまたはCURRVALを使用しないでください。

- OUTER JOINは使用できますが、選択リストは、外部結合に指定した各内部表に1つ以上のNULL値可能でない列を投影する必要があります。
注意: FASTリフレッシュを使用した非同期マテリアライズド・ビューでは外部結合は使用できません。

- WITH 副問合せ句は使用しないでください。

次の制限事項(問合せの定義を除く)は、同期非同期を問わず、マテリアライズド・ビューに一般的に適用されます。

- マテリアライズド・ビューの列の集計がある、ハッシュ・ベースの主キーを使用しないでください。

- マテリアライズド・ビューは、TimesTenレプリケーションを使用して直接レプリケートできません。ディテール表はレプリケートできます。レプリケートの両側で同じマテリアライズド・ビューを定義する必要があります。TimesTenでは、該当するマテリアライズド・ビューが自動的に更新されます。

- 参照元または参照先の表がマテリアライズド・ビューの場合は、外部キーを定義できません。

問合せの定義に関する次の制限事項および要件は、同期マテリアライズド・ビューおよびFASTリフレッシュを使用した非同期マテリアライズド・ビューに適用されます。(FASTリフレッシュを使用した非同期マテリアライズド・ビューには、記述のとおり、追加の制限事項があります。)

- ビューの定義には、選択リストのGROUP BYリストのすべての列が含まれる必要があります。

- 集約ビューには、選択リストのCOUNT (*)またはCOUNT(NULL値不可の列)が含まれる必要があります。

- 導出表またはJOIN表を使用しないでください。

- SELECT DISTINCTファンクションまたは集計DISTINCTファンクションを使用しないでください。
注意: FASTリフレッシュを使用した非同期マテリアライズド・ビューでは集計関数は使用できません。

- 集合演算子UNION、INTERSECTまたはMINUSを使用しないでください。

- NULL値可能な式のSUMを使用しないでください。

- 単純な列のみをGROUP BY列として使用してください。

- GROUP BY列は自己結合表に属することができません。

- 次の句を使用しないでください。

- HAVING

- ORDER BY

- DISTINCT

- FIRST

- JOIN

- TT_HASHファンクションを使用しないでください。

- SUMおよびCOUNTを使用できますが、SUMおよびCOUNTを含む式は使用しないでください。SUM/COUNTとして処理されるAVGを使用しないでください。

- 選択リストでMINファンクションまたはMAXファンクションを指定しないでください。

- 結合の場合

- 結合述語にORを使用できません。

- デカルト積の結合(結合述語のない結合)を指定しないでください。

- 外部結合では、各内部表を1つ以上の表に外部結合します。
注意: FASTリフレッシュを使用した非同期マテリアライズド・ビューでは外部結合は使用できません。

問合せの定義に関する次の制限事項がFASTリフレッシュを使用した非同期マテリアライズド・ビューに適用されます。

- 集計関数はサポートされません。

- 外部結合はサポートされません。

- 選択リストには、すべてのディテール表のROWID列または主キー列が含まれている必要があります。

次の制限事項(問合せの定義を除く)は、FASTリフレッシュを使用した非同期マテリアライズド・ビューにのみ適用されます。

- 非同期マテリアライズド・ビューを作成する前に、FASTリフレッシュでの非同期マテリアライズド・ビューの各ディテール表にマテリアライズド・ビュー・ログを作成する必要があります。

- マテリアライズド・ビュー・ログに、非同期マテリアライズド・ビューで使用されるすべての列が含まれている必要があります。

マテリアライズド・ビューの追加考慮事項

次の追加考慮事項は、同期非同期を問わず、マテリアライズド・ビューに一般的に適用されます。

- マテリアライズド・ビューは読取り専用であり、直接更新できません。マテリアライズド・ビューの更新は、関連付けられたディテール表が変更された場合にのみ実行されます。このため、マテリアライズド・ビューに対してDELETE、UPDATEまたはINSERT文を実行することはできません。

- デフォルトでは、マテリアライズド・ビューで主キーを使用するために範囲索引が作成されます。かわりにUNIQUE HASH句を使用して、主キーに対してハッシュ索引を指定できます。

- アプリケーションでマテリアライズド・ビューの主キーに対して範囲問合せを実行する場合は、UNIQUE HASH句を省略して、マテリアライズド・ビューに対して範囲索引を選択してください。

- 主キーの完全一致検索のみをアプリケーションで実行する場合は、ハッシュ索引の方がレスポンス時間およびスループットが優れている場合があります。その場合は、UNIQUE HASH句を指定します。UNIQUE HASH句の詳細は、「CREATE TABLE」を参照してください。

- 主キーで使用する索引の変更、またはハッシュ索引のサイズ変更を行うには、ALTER TABLEを使用できます。

- ALTER TABLE文でマテリアライズド・ビューの列の追加または削除を行うことはできません。マテリアライズド・ビューの構造を変更するには、ビューを削除してから再度作成します。

- マテリアライズド・ビューの索引は、CREATE INDEX SQL文を使用して作成できます。

次の追加考慮事項は、非同期マテリアライズド・ビューにのみ適用されます。

- REFRESHを指定する場合は、リフレッシュ・オプション(FASTまたはCOMPLETE)またはリフレッシュ間隔(NEXT SYSDATE)を少なくとも1つ指定する必要があります。(REFRESHを省略すると、マテリアライズド・ビューは同期で更新されます。)

- REFRESH FASTを使用して非同期マテリアライズド・ビューを作成する場合、マテリアライズド・ビュー・ログ、マテリアライズド・ビューおよびマテリアライズド・ビューが作成される元表の統計を更新して、元表、およびマテリアライズド・ビューでの更新のパフォーマンスを向上させることをお薦めします。

- FASTリフレッシュを使用した非同期マテリアライズド・ビューの場合、TimesTenでは一意の索引が作成され、増分リフレッシュされます。索引は、選択リストに含まれるディテール表の主キーまたはROWIDに作成されます。

無効なマテリアライズド・ビュー

マテリアライズド・ビューの所有者には、ディテール表に対するSELECT権限が必要です。SELECT権限は、SELECT ANY TABLEおよびADMINシステム権限によって暗黙的に指定されます。ディテール表に対するSELECT権限またはそれ以上のレベルのシステム権限がマテリアライズド・ビューの所有者から削除されると、マテリアライズド・ビューは無効になります。

無効な非同期マテリアライズド・ビューから選択することは可能です。無効な非同期マテリアライズド・ビューをリフレッシュすると、エラーを伴って失敗します。

無効な同期マテリアライズド・ビューから選択すると、エラーを伴って失敗します。無効な同期マテリアライズド・ビューのディテール表を更新しても、そのマテリアライズド・ビューは更新されません。

無効なマテリアライズド・ビューを識別するには、ttIsql describeコマンドを使用し、SYS.DBA_OBJECTS、SYS.ALL_OBJECTSまたはSYS.USER_OBJECTSシステム表のSTATUS列を調べます。『Oracle TimesTen In-Memory Databaseシステム表およびビュー・リファレンス』を参照してください。

削除された権限が回復されると、無効なマテリアライズド・ビューを次の方法で再度有効にすることができます。

- マテリアライズド・ビューの削除および再作成。

- 無効な非同期マテリアライズド・ビューが元は完全リフレッシュで指定された場合は、そのビューのリフレッシュ。

詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のマテリアライズド・ビューのオブジェクト権限に関する説明を参照してください。

例

customer表とbookorder表の列からマテリアライズド・ビューを作成します。

CREATE MATERIALIZED VIEW custorder AS
SELECT custno, custname, ordno, book
FROM customer, bookorder
WHERE customer.custno=bookorder.custno;

t1表のx1およびy1列からマテリアライズド・ビューを作成します。

CREATE MATERIALIZED VIEW v1 AS SELECT x1, y1 FROM t1
PRIMARY KEY (x1) UNIQUE HASH (x1) PAGES=100;

t1表とt2表のx1およびy1列の外部結合からマテリアライズド・ビューを作成します。

CREATE MATERIALIZED VIEW v2 AS SELECT x1, y1 FROM t1, t2
WHERE x1=x2(+);

増分リフレッシュでempmatviewという名前の非同期マテリアライズド・ビューを作成します。マテリアライズド・ビューは、employeesへの更新がコミットされた直後にリフレッシュされます。empmatview内の列は、employee_idおよびemailです。非同期マテリアライズド・ビューを作成する前に、マテリアライズド・ビュー・ログを作成する必要があります。

CREATE MATERALIZED VIEW empmatview
REFRESH FAST NEXT SYSDATE
AS SELECT employee_id, email FROM employees;
107 rows materialized.

完全リフレッシュでempmatview1という名前の非同期マテリアライズド・ビューを作成します。マテリアライズド・ビューの完全リフレッシュは10日ごとに行われます。empmatview内の列は、employee_idおよびemailです。非同期マテリアライズド・ビューを作成する前に、マテリアライズド・ビュー・ログを作成する必要があります。

CREATE MATERIALIZED VIEW empmatview1
REFRESH COMPLETE NEXT SYSDATE+NUMTODSINTERVAL(10,'day')
AS SELECT employee_id, email FROM employees;
107 rows materialized.

次の例では、表employeesから選択された列employee_idおよびemailに基づいて、マテリアライズド・ビューempmatview2を作成します。マテリアライズド・ビューの作成後、マテリアライズド・ビューempmatview2の列mvemp_idに索引を作成します。

CREATE MATERIALIZED VIEW empmatview2
AS SELECT employee_id mvemp_id, email mvemail
FROM employees;
107 rows materialized.

CREATE INDEX empmvindex ON empmatview2 (mvemp_id);

関連項目

「CREATE MATERIALIZED VIEW LOG」
「CREATE TABLE」
「CREATE VIEW」
「DROP VIEW」
「REFRESH MATERIALIZED VIEW」

CREATE MATERIALIZED VIEW LOG

CREATE MATERIALIZED VIEW LOG文は、ディテール表に対する変更が記録されるログを作成します。ログは、増分リフレッシュされる非同期マテリアライズド・ビューに必要です。マテリアライズド・ビューを作成する前にログを作成する必要があります。ログは、ユーザーのスキーマ内のMVLOG$_detailTableIDという名前の表であり、detailTableIDはシステム生成されるIDです。

この文は、内部使用のための他のオブジェクトも作成します。

- MVLGT$_detailTableIDという名前のグローバル一時表

- MVSEQ$_detailTableIDという名前の順序

オブジェクトは、DROP MATERIALIZED VIEW LOG文を実行すると削除されます。

必要な権限

ディテール表に対するSELECTおよび

CREATE TABLEまたはCREATE ANY TABLE(非所有者の場合)。

SQL構文

CREATE MATERIALIZED VIEW LOG ON [Owner.]TableName
[ WITH
{ PRIMARY KEY[, ROWID] |
ROWID[, PRIMARY KEY } [(columnName[,...])]
| (columnName[,...])
]

パラメータ

パラメータ

説明

[Owner.]TableName

マテリアライズド・ビューのディテール表の名前。

[(columnName[,...])

変更がログに記録される列のリスト。PRIMARY KEYオプションを指定した場合、列リストに主キー列を含めることはできません。

説明

- WITH句を使用して、ディテール表でどの行が更新されたかをマテリアライズド・ビューで示します。更新された行は、対応する主キーの値またはROWIDによって示すことができます。

- WITH句でPRIMARY KEYまたはROWIDのいずれかを指定します。ただし、どちらのオプションも使用しないでWITH句を指定すると、デフォルトでPRIMARY KEYが使用されます。また、WITH句を完全に省略した場合、マテリアライズド・ビュー・ログではデフォルトでPRIMARY KEYが使用されます。

- PRIMARY KEYを指定して、変更された行を対応する主キーの値で識別します。または、ROWIDを指定して、変更された行をROWIDで識別します。ROWIDオプションは、表に主キーが含まれていない場合、またはマテリアライズド・ビューの作成時に主キーを使用しない場合に有用です。

- PRIMARY KEYとROWIDの両方を指定できます。マテリアライズド・ビュー・ログは、指定された表をディテール表として使用する複数の非同期マテリアライズド・ビューで使用される場合があります。ただし、マテリアライズド・ビュー・ログに対して指定できるのは、1つのPRIMARY KEY句、1つのROWID句および1つの列リストのみです。

- 表が、FASTリフレッシュを使用する複数のマテリアライズド・ビューのディテール表である場合でも、表に対して作成されるマテリアライズド・ビュー・ログは1つのみです。FASTリフレッシュを使用する複数の非同期マテリアライズド・ビューで使用されるすべての列を含める必要があります。

- マテリアライズド・ビュー・ログは、表としてマテリアライズド・ビューを使用して作成したり、キャッシュ・グループ内の表に対して作成することはできません。

- マテリアライズド・ビュー・ログを変更して列を追加または削除することはできません。

例

employees表にマテリアライズド・ビュー・ログを作成します。ログにemployee_id(主キー)およびemailを含めます。

CREATE MATERIALIZED VIEW LOG ON employees WITH PRIMARY KEY (email);

次のように、PRIMARY KEYを指定しなくても(デフォルトであるため、暗黙的に指定されます)、employees表に同じマテリアライズド・ビュー・ログを作成できます。

CREATE MATERIALIZED  VIEW LOG ON employees WITH (email);

主キーのみを使用してemployees表にマテリアライズド・ビュー・ログを作成するには、次の文を実行します。

CREATE MATERIALIZED VIEW LOG ON employees;

employees表にマテリアライズド・ビュー・ログを作成します。ログにemployee_id(主キー)およびROWIDを含めます。

Command> CREATE MATERIALIZED VIEW LOG ON employees WITH primary key, rowid;

employees表にマテリアライズド・ビュー・ログを作成します。ログにROWIDを含めます。

Command> CREATE MATERIALIZED VIEW LOG ON employees WITH rowid;

employees表にマテリアライズド・ビュー・ログを作成します。ログにROWID、主キー(employee_id)およびemailを含めます。

Command> CREATE MATERIALIZED VIEW LOG ON employees WITH rowid, primary key (email);

employees表にマテリアライズド・ビュー・ログを作成します。ログに主キー(デフォルト)とその他の2つの列emailおよびlast_nameを含めます。

Command> CREATE MATERIALIZED VIEW LOG ON employees WITH (email, last_name);

関連項目

「CREATE MATERIALIZED VIEW」
「DROP MATERIALIZED VIEW LOG」

CREATE PACKAGE

CREATE PACKAGE文は、データベースに一緒に格納される、関連するプロシージャやファンクション、その他のプログラム・オブジェクトをカプセル化したコレクションである、スタンドアロン・パッケージの仕様部を作成します。パッケージ仕様でこれらのオブジェクトを宣言します。パッケージ本体でこれらのオブジェクトを定義します。

必要な権限

CREATE PROCEDURE(所有者の場合)またはCREATE ANY PROCEDURE(非所有者の場合)。

SQL構文

CREATE [OR REPLACE] PACKAGE [Owner.]PackageName
[InvokerRightsClause] {IS|AS}
PlsqlPackageSpec

InvokerRightsClauseの構文は、次のとおりです。

AUTHID {CURRENT_USER | DEFINER}

パラメータ

パラメータ

説明

OR REPLACE

パッケージ仕様がすでに存在する場合に再作成するには、OR REPLACEを指定します。この句を使用して、パッケージを削除および再作成せずに既存のパッケージの仕様を変更します。パッケージ仕様を変更すると、そのパッケージ仕様はTimesTenで再コンパイルされます。

PackageName

パッケージの名前。

InvokerRightsClause

PL/SQLファンクションまたはプロシージャ内のSQL文が定義者権限で実行されるか実行者権限で実行されるかを指定できます。AUTHIDの設定は、実行時にPL/SQLプロシージャまたはファンクションによって発行されるSQL文の名前解決および権限チェックに次のように影響を与えます。

- DEFINERを指定すると、SQLの名前解決および権限チェックは、プロシージャまたはファンクションの所有者(定義者、つまりプロシージャまたはファンクションがあるスキーマの所有者)が実行しているものとして実行されます。DEFINERがデフォルトです。

- CURRENT_USERを指定すると、SQLの名前解決および権限チェックは、現在のユーザー(実行者)が実行しているものとして実行されます。

詳細は、『Oracle TimesTen In-Memory Database PL/SQL開発者ガイド』の定義者の権限と実行者の権限に関する項を参照してください。

IS|AS

ISまたはASを指定して、ファンクションの本体を宣言します。

PlsqlPackageSpec

パッケージ仕様を指定します。型定義、カーソル宣言、変数宣言、定数宣言、例外宣言およびPL/SQLサブプログラム宣言を含めることができます。

説明

レプリケートされた環境で、CREATE PACKAGE文はレプリケートされません。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』の既存のアクティブ・スタンバイ・ペアでの新規PL/SQLオブジェクトの作成に関する項および既存のクラシック・レプリケーション・スキームへのPL/SQLオブジェクトの追加に関する項を参照してください。

パッケージを作成または置き換えた場合、パッケージに付与された権限は同じままです。オブジェクトを削除して再作成した場合、元のオブジェクトに付与されていたオブジェクト権限は削除されます。

関連項目

『Oracle Database PL/SQL言語リファレンス』および『Oracle Database SQL言語リファレンス』

CREATE PACKAGE BODY

CREATE PACKAGE BODY文は、スタンドアロン・パッケージの本体を作成します。パッケージとは、データベースに格納されている関連するプロシージャ、ファンクションおよびその他のプログラム・オブジェクトのカプセル化されたコレクションのことです。パッケージ仕様でこれらのオブジェクトを宣言します。パッケージ本体でこれらのオブジェクトを定義します。

必要な権限

CREATE PROCEDURE(所有者の場合)またはCREATE ANY PROCEDURE(非所有者の場合)。

SQL構文

CREATE [OR REPLACE] PACKAGE BODY [Owner.]PackageBody
{IS|AS} plsql_package_body

パラメータ

パラメータ

説明

OR REPLACE

パッケージ本体がすでに存在する場合に再作成するには、OR REPLACEを指定します。この句を使用して、パッケージを削除および再作成せずに既存のパッケージの本体を変更します。パッケージ本体を変更すると、そのパッケージ本体はTimesTenで再コンパイルされます。

PackageBody

パッケージ本体の名前。

IS|AS

ISまたはASを指定して、ファンクションの本体を宣言します。

plsql_package_body

PL/SQLサブプログラムで構成されるパッケージ本体を指定します。

説明

レプリケートされた環境で、CREATE PACKAGE BODY文はレプリケートされません。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』の既存のアクティブ・スタンバイ・ペアでの新規PL/SQLオブジェクトの作成に関する項および既存のクラシック・レプリケーション・スキームへのPL/SQLオブジェクトの追加に関する項を参照してください。

パッケージ本体を作成または置き換えた場合、パッケージ本体に付与された権限は同じままです。オブジェクトを削除して再作成した場合、元のオブジェクトに付与されていたオブジェクト権限は削除されます。

関連項目

『Oracle Database PL/SQL言語リファレンス』および『Oracle Database SQL言語リファレンス』

CREATE PROCEDURE

CREATE PROCEDURE文は、スタンドアロンのストアド・プロシージャを作成します。

必要な権限

CREATE PROCEDURE(所有者の場合)またはCREATE ANY PROCEDURE(非所有者の場合)。

SQL構文

CREATE [OR REPLACE] PROCEDURE [Owner.]ProcedureName
[(arguments [IN|OUT|IN OUT][NOCOPY] DataType [DEFAULT expr][,...])]
[InvokerRightsClause] [DETERMINISTIC]
{IS|AS} plsql_procedure_body

InvokerRightsClauseの構文は、次のとおりです。

AUTHID {CURRENT_USER|DEFINER}

InvokerRightsClauseまたはDETERMINISTICは任意の順序で指定できます。

パラメータ

パラメータ

説明

OR REPLACE

プロシージャがすでに存在する場合に再作成するには、OR REPLACEを指定します。この句を使用して、プロシージャを削除および再作成せずに既存のプロシージャの定義を変更します。プロシージャを再作成すると、そのプロシージャはTimesTenで再コンパイルされます。

ProcedureName

プロシージャの名前。

arguments

引数またはパラメータの名前。プロシージャには0以上のパラメータを指定できます。パラメータを指定する場合は、パラメータのデータ型を指定する必要があります。データ型はPL/SQLデータ型である必要があります。
PL/SQLデータ型の詳細は、『Oracle Database PL/SQL言語リファレンス』の第3章「PL/SQLデータ型」を参照してください。

[IN | OUT | IN OUT]

パラメータのモード。
INは読取り専用パラメータです。パラメータの値をプロシージャに渡すことはできますが、プロシージャはパラメータの値をプロシージャ外に渡したり、コール側PL/SQLブロックに戻したりすることはできません。パラメータの値は変更できません。

OUTは書込み専用パラメータです。値をプロシージャからコール側PL/SQLブロックに戻すには、OUTパラメータを使用します。パラメータに値を割り当てることができます。

IN OUTは読取り/書込みパラメータです。値をプロシージャに渡し、コール側プログラムに戻すことができます(元の変更されていない値またはプロシージャ内で設定された新しい値)。

INがデフォルトです。

NOCOPY

可能なかぎり迅速にパラメータを渡すようにTimesTenに指示するには、NOCOPYを指定します。レコード、索引付き表、OUTまたはIN OUTパラメータへのVARRAYなどの大きな値を渡す場合に、パフォーマンスを向上できます。INパラメータでは、常にNOCOPYが渡されます。
詳細は、『Oracle Database PL/SQL言語リファレンス』のNOCOPYに関する項を参照してください。

DEFAULT expr

パラメータのDEFAULT値を指定するには、この句を使用します。キーワードDEFAULTのかわりに:=を指定できます。

InvokerRightsClause

PL/SQLファンクションまたはプロシージャ内のSQL文が定義者権限で実行されるか実行者権限で実行されるかを指定できます。AUTHIDの設定は、実行時にPL/SQLプロシージャまたはファンクションによって発行されるSQL文の名前解決および権限チェックに次のように影響を与えます。

- DEFINERを指定すると、SQLの名前解決および権限チェックは、プロシージャまたはファンクションの所有者(定義者、つまりプロシージャまたはファンクションがあるスキーマの所有者)が実行しているものとして実行されます。DEFINERがデフォルトです。

- CURRENT_USERを指定すると、SQLの名前解決および権限チェックは、現在のユーザー(実行者)が実行しているものとして実行されます。

詳細は、『Oracle TimesTen In-Memory Database PL/SQL開発者ガイド』の定義者の権限と実行者の権限に関する項を参照してください。

DETERMINISTIC

パラメータに同じ値を指定してプロシージャをコールした場合に常に同じ結果値を戻すように指定するには、DETERMINISTICを指定します。

IS|AS

ISまたはASを指定して、プロシージャの本体を宣言します。

plsql_procedure_body

プロシージャの本体を指定します。

制限

次の句はTimesTenではサポートされません。

- call_spec句

- AS EXTERNAL句

レプリケートされた環境で、CREATE PROCEDURE文はレプリケートされません。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』の既存のアクティブ・スタンバイ・ペアでの新規PL/SQLオブジェクトの作成に関する項および既存のクラシック・レプリケーション・スキームへのPL/SQLオブジェクトの追加に関する項を参照してください。

説明

- PL/SQLプロシージャのネームスペースは、TimesTen組込みプロシージャとは異なります。PL/SQLプロシージャは、TimesTen組込みプロシージャと同じ名前で作成できます。

- プロシージャを作成または置き換えた場合、プロシージャに付与された権限は同じままです。オブジェクトを削除して再作成した場合、元のオブジェクトに付与されていたオブジェクト権限は削除されます。

例

プロシージャquery_empを作成して、従業員に関する情報を取得します。employee_id 171をプロシージャに渡し、2つのOUTパラメータに対してlast_nameおよびsalaryを取得します。

Command> CREATE OR REPLACE PROCEDURE query_emp
>           (p_id IN employees.employee_id%TYPE,
>            p_name  OUT employees.last_name%TYPE,
>            p_salary OUT employees.salary%TYPE) IS
>         BEGIN
>           SELECT last_name, salary INTO p_name, p_salary
>           FROM employees
>           WHERE employee_id = p_id;
>         END query_emp;
>         /

Procedure created.

関連項目

『Oracle Database PL/SQL言語リファレンス』および『Oracle Database SQL言語リファレンス』

CREATE REPLICATION

CREATE REPLICATION文は、次の処理を実行します。

- 関連するデータベースにクラシック・レプリケーション・スキームを定義します。

- 実行するデータベースのレプリケーション・システム表に、指定した構成を組み込みます。

- 通常は、1つ以上のレプリケーション要素の指定、および0(ゼロ)以上のSTOREの指定が含まれています。

TimesTen SQLによるレプリケーションの構成では、クラシック・レプリケーションをプログラム的な方法で構成できます。この構成は、C、C++またはJavaコードに埋め込むことができます。レプリケーションをローカルで構成したり、クライアント/サーバーを使用してリモート・システムから構成できます。

また、サポートされているSQL文ではカバーされていない処理に対応する場合は、ttRepAdminユーティリティを使用する必要があります。ttRepAdminを使用すると、レプリケーションの状態の変更、データベースの複製、レプリケーション構成の一覧表示およびレプリケーション状態の表示を実行できます。

必要な権限

ADMIN

定義

レプリケーション要素は、TimesTenがデータベース間で同期を取るエンティティです。レプリケーション要素は、表全体またはデータベースです。データベースには、ほとんどのタイプの表およびキャッシュ・グループを含めることができます。指定した表およびキャッシュ・グループのみを含めるか、または指定した表およびキャッシュ・グループを除くすべての表を含めることができます。一時表またはビュー(マテリアライズドか非マテリアライズドかは関係ありません)を含めることはできません。

レプリケーション・スキームは、レプリケーション要素および要素のコピーを管理するデータベースのセットです。

クラシック・レプリケーションのSQL構成の詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のクラシック・レプリケーション・スキームの定義に関する説明を参照してください。

SQL構文

CREATE REPLICATION [Owner.]ReplicationSchemeName
{ ELEMENT ElementName
{ DATASTORE | { TABLE [Owner.]TableName [CheckConflicts]} |
SEQUENCE [Owner.]SequenceName}
{ MASTER | PROPAGATOR } FullStoreName
[TRANSMIT { NONDURABLE | DURABLE }]
{ SUBSCRIBER FullStoreName [,...]
[ReturnServiceAttribute] } [,...] }
[...]
[{INCLUDE | EXCLUDE}
{TABLE [[Owner.]TableName[,...]] |
CACHE GROUP [[Owner.]CacheGroupName[,...]] |
SEQUENCE [[Owner.]SequenceName[,...]} [,...]]
[ STORE FullStoreName [StoreAttribute [... ]]] [...]
[ NetworkOperation[...]]

CheckConflictsの構文については、「CHECK CONFLICTS」を参照してください。

ReturnServiceAttributeの構文は、次のとおりです。

{ RETURN RECEIPT [BY REQUEST] |
RETURN TWOSAFE [BY REQUEST] |
NO RETURN }

StoreAttributeの構文は、次のとおりです。

DISABLE RETURN {SUBSCRIBER | ALL} NumFailures
RETURN SERVICES {ON | OFF} WHEN [REPLICATION] STOPPED
DURABLE COMMIT {ON | OFF}
RESUME RETURN Milliseconds
LOCAL COMMIT ACTION {NO ACTION | COMMIT}
RETURN WAIT TIME Seconds
COMPRESS TRAFFIC {ON | OFF}
PORT PortNumber
TIMEOUT Seconds
FAILTHRESHOLD Value
CONFLICT REPORTING SUSPEND AT Value
CONFLICT REPORTING RESUME AT Value
TABLE DEFINITION CHECKING {RELAXED|EXACT}

NetworkOperationの構文は、次のとおりです。

ROUTE MASTER FullStoreName SUBSCRIBER FullStoreName
{ { MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost }
PRIORITY Priority } [...]

パラメータ

パラメータ

説明

[Owner.]ReplicationSchemeName

新しいクラシック・レプリケーション・スキームに割り当てる名前です。クラシック・レプリケーション・スキームは、他のすべてのデータベース・オブジェクトとは別の一意の名前である必要があります。

CheckConflicts

双方向にレプリケートされたデータベースへの同時書込みで、レプリケーションの競合をチェックします。「CHECK CONFLICTS」を参照してください。

COMPRESS TRAFFIC {ON | OFF}

レプリケートされた通信量を圧縮して、ネットワークの帯域幅の量を削減します。ONは、STOREで定義されたデータベースに対してレプリケートされた通信量をすべて圧縮するように指定します。OFF(デフォルト)は、通信量を圧縮しないように指定します。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のレプリケートされた通信量の圧縮に関する説明を参照してください。

CONFLICT REPORTING SUSPEND AT Value

競合解消のレポートを一時停止します。
Valueは、負でない整数です。デフォルトは0(一時停止なし)です。競合のレポートは、競合の割合がValueを超えると一時的に停止されます。Valueを0に設定すると、競合のレポートの一時停止が無効になります。

この句は、表レベルのレプリケーションで有効です。

CONFLICT REPORTING RESUME AT Value

競合解消のレポートを再開します。
Valueは、負でない整数です。競合のレポートは、競合の割合がValueを下回ると再開されます。デフォルトは1です。

この句は、表レベルのレプリケーションで有効です。

DATASTORE

データベース全体を要素として定義します。この種類の要素は、同一または異なるレプリケーション・スキームでTABLE型の要素が構成されていないマスター・データベースに対してのみ定義できます。『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のレプリケーション要素の定義に関する説明を参照してください。

{INCLUDE|EXCLUDE}
{[TABLE[Owner.]TableName [,...]]|

CACHE GROUP

[[Owner.]CacheGroupName [,...]]|

SEQUENCE

[[Owner.]SequenceName[,...]]} [,...]

INCLUDEは、指定された表、順序またはキャッシュ・グループのみをDATASTORE要素に含めます。INCLUDE句は、オブジェクト型(表、順序またはキャッシュ・グループ)ごとに1つ使用します。
EXCLUDEは、指定された表、順序およびキャッシュ・グループを除外して、すべての表、順序およびキャッシュ・グループをDATASTORE要素に含めます。EXCLUDE句は、オブジェクト型(表、キャッシュ・グループまたは順序)ごとに1つ使用します。

DISABLE RETURN {SUBSCRIBER|ALL} NumFailures

NumFailuresで指定されているタイムアウト回数を経過した後、RETURNサービスのブロッキングを無効にするようにRETURNサービス障害ポリシーを設定します。SUBSCRIBERを選択すると、レプリケートされた更新を、指定されているタイムアウト期間内に確認できなかったサブスクライバのみにこのポリシーが適用されます。ALLを選択すると、いずれかのサブスクライバから応答がなかった場合、すべてのサブスクライバにこのポリシーが適用されます。この障害ポリシーは、RETURN RECEIPTまたはRETURN TWOSAFEサービスのいずれかで指定できます。
DISABLE RETURNが指定され、RESUME RETURNが指定されていない場合、データベースのレプリケーション・エージェントが再起動されるまでRETURNサービスはオフのままです。

詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービス・タイムアウト・エラーおよびレプリケーション状態変更の管理に関する説明を参照してください。

DURABLE COMMIT {ON|OFF}

DurableCommits一般接続属性設定を上書きします。DURABLE COMMIT ONは、レプリケーション・エージェントが実行中か停止しているかに関係なく、永続コミットを有効にします。

ELEMENT ElementName

TimesTenがデータベース間で同期を取るエンティティです。レプリケーション要素として、TimesTenでは、データベース全体(DATASTORE)および表全体(TABLE)がサポートされています。
ElementNameは、レプリケーション要素に指定される名前です。TABLE要素のElementNameの長さは、最大30文字です。DATASTORE要素のElementNameは、他のDATASTORE要素名について、最初の20文字以内が一意である必要があります。ElementNameは、クラシック・レプリケーション・スキーム内で一意である必要があります。また、同じ要素に対して2つの要素記述を定義することはできません。

詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のレプリケーション要素の定義に関する説明を参照してください。

FAILTHRESHOLD Value

サブスクライバ・データベースのために累積できるログ・ファイルの数。この値を超えると、サブスクライバはFailedの状態に設定されます。0を指定すると、この上限は設定されません。これがデフォルトです。
『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のトランザクション･ログ障害しきい値の設定に関する説明を参照してください。

FullStoreName

次のいずれかとして指定されたデータベースです。

- SELF

- データベース・ファイル名の接頭辞

たとえば、データベースのパスがdirectory/subdirectory/data.ds0の場合、使用するデータベース名はdataになります。

この名前は、DSNの記述のDataStore属性で指定されるデータベース・ファイル名で、オプションでホストIDを次の書式で指定できます。

DataStoreName [ON Host]

Hostは、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のネットワークの構成に関する項で説明されているように、IPアドレスか、または1つ以上のIPアドレスに割り当てられたリテラル・ホスト名です。ホスト名に特殊文字が含まれている場合は、二重引用符で囲む必要があります。たとえば、"MyHost-500"のようになります。ホスト名は30文字以下で指定します。

LOCAL COMMIT ACTION {NO ACTION | COMMIT}

タイムアウト・イベントのRETURN TWOSAFEトランザクションで実行されるデフォルトのアクションを指定します。
注意: この属性は、RETURN TWOSAFEまたはRETURN TWOSAFE BY REQUEST属性がSUBSCRIBER句で設定されている場合にのみ有効です。

NO ACTION: タイムアウト時、コミット関数はアプリケーションに戻り、トランザクションをコミット・コールに入ったときと同じ状態のままにしますが、レプリケートされた表をアプリケーションが更新できない場合を除きます。アプリケーションはコミットのみを再発行できます。トランザクションはロールバックできません。これがデフォルトです。

COMMIT: タイムアウト時、コミット関数はCOMMITを実行して、トランザクションをローカルに終了しようとします。同じトランザクション上でこれ以上の処理を行うことはできません。

この設定は、localActionパラメータを指定してttRepSyncSetプロシージャをコールすることで、特定のトランザクションに対して無効にすることができます。

MASTER FullStoreName

アプリケーションで特定の要素が更新されるデータベース。更新はMASTERデータベースによってSUBSCRIBERデータベースに送信されます。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベースである必要があります。

NO RETURN

RETURNサービスを使用しないように指定します。これがデフォルトです。
RETURNサービスの使用の詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービスの使用に関する説明を参照してください。

PORT PortNumber

データベースのレプリケーション・エージェントが接続をリスニングするTCP/IPポート番号です。指定しない場合は、レプリケーション・エージェントによってポート番号が自動的に割り当てられます。

PROPAGATOR FullStoreName

レプリケートされた更新を受け取って他のデータベースに渡すデータベース。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベースである必要があります。

RESUME RETURN Milliseconds

DISABLE RETURNによってRETURNサービスのブロッキングが無効になった場合、この属性によって、RETURNサービスのブロッキングを再度有効にするタイミングに関するポリシーを設定します。RETURNサービスのブロッキングは、障害が発生したサブスクライバが、Millisecondsで指定された時間よりも短い間隔でレプリケートされた更新を確認するとすぐに再度有効になります。
DISABLE RETURNが指定され、RESUME RETURNが指定されていない場合、データベースのレプリケーション・エージェントが再起動されるまでRETURNサービスはオフのままです。

RETURN RECEIPT [BY REQUEST]

RETURN RECEIPTサービスを有効にし、これによって、マスター・データベースに対してトランザクションをコミットするアプリケーションは、すべてのサブスクライバがトランザクションを受信するまでブロックされます。
RETURN RECEIPTにより、すべてのトランザクションにサービスが適用されます。RETURN REQUEST BY REQUESTを指定した場合は、ttRepSyncSetプロシージャを使用して、選択したトランザクションに対してRETURN RECEIPTサービスを有効にできます。RETURNサービスの使用の詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービスの使用に関する説明を参照してください。

RETURN SERVICES {ON|OFF} WHEN [REPLICATION] STOPPED

レプリケーションが無効になっている場合のRETURNサービスのオンまたはオフを設定します。
OFFは、レプリケーション無効時にRETURNサービスを無効する設定であり、RETURN RECEIPTサービスのデフォルトです。ONは、レプリケーション無効時にもRETURNサービスを有効のままにできる設定であり、RETURN TWOSAFEサービスのデフォルトです。

詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービス・タイムアウト・エラーおよびレプリケーション状態変更の管理に関する説明を参照してください。

RETURN TWOSAFE [BY REQUEST]

RETURN TWOSAFEサービスを有効にし、これによって、マスター・データベースに対してトランザクションをコミットするアプリケーションは、すべてのサブスクライバがトランザクションをコミットするまでブロックされます。
注意: このサービスは、要素がDATASTOREと定義される場合の双方向レプリケーション・スキームでのみ使用できます。

RETURN TWOSAFEを指定すると、すべてのトランザクションにサービスが適用されます。RETURN TWOSAFE BY REQUESTを指定した場合は、ttRepSyncSetプロシージャを使用して、選択したトランザクションに対してRETURN RECEIPTサービスを有効にできます。RETURNサービスの使用の詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のRETURNサービスの使用に関する説明を参照してください。

RETURN WAIT TIME Seconds

RETURNサービスの応答を待機する秒数を指定します。デフォルト値は10秒です。値が0(ゼロ)の場合は、タイムアウトがないことを意味します。returnWaitパラメータを設定してアプリケーションからttRepSyncSetプロシージャをコールすることで、このタイムアウト設定を無効にすることができます。

SEQUENCE [Owner.]SequenceName

[Owner.]SequenceNameによって要素として指定された順序を定義します。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のレプリケーション要素の定義に関する説明を参照してください。

STORE FullStoreName

指定されたデータベースの属性を定義します。属性には、PORT、TIMEOUTおよびFAILTHRESHOLDがあります。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベースである必要があります。

SUBSCRIBER FullStoreName

MASTERデータベースから更新を受け取るデータベース。FullStoreNameは、DSNの記述のDataStore属性で指定したデータベースである必要があります。

TABLE [Owner.]TableName

[Owner.]TableNameによって要素として指定された表を定義します。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のレプリケーション要素の定義に関する説明を参照してください。

TIMEOUT Seconds

レプリケーション・エージェントがリモート・レプリケーション・エージェントからの応答を待機する最大時間(秒)。デフォルトは120秒です。
注意: リモート・レプリケーション・エージェントからの応答の遅延の原因となる大規模なトランザクションの場合、エージェントは、トランザクションのサイズに基づいて、タイムアウトをスケーリングします。TIMEOUTを60秒以下に設定した場合、このスケーリングは無効になります。『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のリモート・レプリケーション・エージェントからの応答のタイムアウトの待機の設定に関する項も参照してください。

TRANSMIT {DURABLE | NONDURABLE}

コミットされたトランザクション群をサブスクライバに転送する前に、マスターのログをディスクにフラッシュするかどうかを指定します。
TRANSMIT NONDURABLEは、マスターのログ内のレコードがサブスクライバに転送される前にディスクにフラッシュされないように指定します。この設定は、指定された要素がDATASTOREである場合にのみ使用できます。この設定は、RETURN TWOSAFEトランザクションのデフォルト値です。

TRANSMIT DURABLEは、サブスクライバに転送される前にレコードがディスクにフラッシュされるように指定します。この設定は、非同期およびRETURN RECEIPTトランザクションのデフォルト値です。

注意: TRANSMIT DURABLEは、RETURN TWOSAFEトランザクションに影響を与えません。

注意: アクティブ・スタンバイ・ペアに対してTRANSMIT DURABLEを設定することはできません。

詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のDATASTORE要素での送信永続性の設定に関する説明およびTRANSMIT NONDURABLEによるマスター・データベース全体のレプリケートに関する説明を参照してください。

TABLE DEFINITION CHECKING {EXACT|RELAXED}

サブスクライバで実行される表定義チェックの種類を指定します。

- EXACT: マスターおよびサブスクライバで表が一致している必要があります。

- RELAXED: 表には同じキー定義、列の数および列のデータ型が必要です。

デフォルトはRELAXEDです。

注意: TABLE DEFINITION CHECKING EXACTを使用している場合、データベースを移行するにはttMigrate -exactUpgradeを使用します。TABLE DEFINITION CHECKING RELAXEDを使用している場合、データベースを移行するにはttMigrate -relaxedUpgradeを使用します。

ROUTE MASTER FullStoreName SUBSCRIBER FullStoreName

NetworkOperation句を示します。指定されている場合、各サブスクライバ・ストアへのすべてのアウトバウンド接続にマスター・ストアが使用するネットワーク・インタフェースを制御できます。
複数回指定できます。

FullStoreNameには、ON "host"を指定する必要があります。

MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost

MasterHostおよびSubscriberHostは、マスターおよびサブスクライバ・ストアのネットワーク・インタフェースのIPアドレスです。IPV6のドット表記または正規形式で指定するか、あるいはコロン表記で指定します。
句は複数回指定できます。

PRIORITY Priority

1から99の整数で表される変数。IPアドレスの優先順位を示します。整数値が小さいほど、優先度は高くなります。同じ優先度を持つアドレスが複数指定されている場合は、エラーが返されます。ピア接続の確立に使用する複数のIPアドレスの順序を制御します。
NetworkOperation句の構文で必須です。MASTERIP MasterHost | SUBSCRIBERIP SubscriberHost句の後ろに記述します。

CHECK CONFLICTS

構文

CHECK CONFLICTSの構文は、次のとおりです。

{NO CHECK |
CHECK CONFLICTS BY ROW TIMESTAMP
COLUMN ColumnName
[ UPDATE BY { SYSTEM | USER } ]
[ ON EXCEPTION { ROLLBACK [ WORK ] | NO ACTION } ]
[ {REPORT TO 'FileName'
[ FORMAT { XML | STANDARD } ] | NO REPORT
} ]
}

注意:
CHECK CONFLICT句は、TABLE型の要素に対してのみ使用できます。

パラメータ

CREATE REPLICATIONまたはALTER REPLICATION文のCHECK CONFLICTS句には、次のパラメータがあります。

パラメータ

説明

CHECK CONFLICTS BY ROW TIMESTAMP

すべての更新競合と一意性競合の検出を指定します。競合はON EXCEPTIONパラメータで指定された方法で解消されます。
DELETE処理とUPDATE処理の競合についても検出します。

COLUMN ColumnName

レプリケートされた表の列を使用してタイムスタンプを比較します。表はELEMENTの記述のTableNameで指定されます。
ColumnNameはNULL値可能なBINARY(8)型の列で、行が最後に更新されたタイムスタンプの格納に使用されます。TimesTenでは、格納された値よりも小さいタイムスタンプ値を持つ行の更新要求が拒否されます。指定されたColumnNameは、マスター・データベースとサブスクライバ・データベース両方のレプリケートされた表に存在している必要があります。

NO CHECK

指定された要素に対する競合解消を行わないように指定します。

UPDATE BY {SYSTEM | USER}

タイムスタンプ値をTimesTen(SYSTEM)またはアプリケーション(USER)のどちらで管理するかを指定します。マスター・データベースおよびサブスクライバ・データベースのレプリケートされた表は、同じUPDATE BY指定を使用する必要があります。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のシステム・タイムスタンプ列メンテナンスの有効化に関する説明およびユーザー・タイムスタンプ列メンテナンスの有効化に関する説明を参照してください。デフォルト値は、UPDATE BY SYSTEMです。

ON EXCEPTION {ROLLBACK[WORK |NO ACTION}

検出された競合の解消方法を指定します。ROW TIMESTAMP競合の検出には、次の解消オプションがあります。

- ROLLBACK [WORK]: 競合するアクションを含むトランザクションを強制終了します。

- NO ACTION: 競合するアクション(UPDATE、INSERTまたはDELETE)を実行せずに、トランザクションを完了します。

デフォルトはON EXCEPTION ROLLBACK [WORK]です。

REPORT TO 'FileName'

タイムスタンプ比較に失敗した更新を記録するファイルを指定します。FileNameは、1,000文字以下のSQL文字列です。(SQL文字列リテラルは、空白を含む任意の順序の文字が含まれた一重引用符付き文字列です。)複数の表の失敗した更新を記録するために同じファイルを使用できます。

[FORMAT {XML|STANDARD}]

オプションで、要素の競合レポートの形式を指定します。デフォルトの形式はSTANDARDです。

NO REPORT

失敗したタイムスタンプの比較を記録しないように指定します。

説明

- 同じホスト上のすべてのデータベース名は、各TimesTenインスタンスの各クラシック・レプリケーション・スキームについて一意である必要があります。

- レプリケーション要素の更新(通常のアプリケーション・トランザクションによる)は、MASTERデータベースを使用してのみ可能です。PROPAGATORおよびSUBSCRIBERデータベースは読取り専用です。

- 複数のデータベースで同じ表を更新できるクラシック・レプリケーション・スキームを定義する場合は、行を更新する際に競合を回避する方法の推奨事項について、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のレプリケーションの競合解消に関する説明を参照してください。

- SELFは、関連するデータベースがすべてローカルであるクラシック・レプリケーション・スキーム用です。本番環境(スクリプトで各データベースのホスト名を省略しないで記述すると、関連する各データベースで使用できる)では、分散クラシック・レプリケーション・スキームに対してSELFを使用しないでください。

- 指定したSTOREの各属性は一度だけ指定するか、または何も指定しません。

- 単一のクラシック・レプリケーション・スキームのデータベースのPORTを指定すると、すべてのクラシック・レプリケーション・スキームに対して指定されます。その他すべての接続属性は、コマンドで指定したクラシック・レプリケーション・スキームによって異なります。

- レプリケーション・スキームでは、DataStoreNameは、常にTimesTenデータベースのチェックポイント・ファイル名の接頭辞になります。チェックポイント処理によってディスクに保存される、接尾辞.ds0と.ds1のファイルがチェックポイント・ファイルです。

- デフォルト値NOT INLINE VARCHARが指定されている行がレプリケートされる場合、受信者側のノードのデフォルト値が送信者側のノードのデフォルト値と異なる場合にのみ、受信者はデフォルト値を指すかわりに、各行に対してこの値のコピーを作成します。

- レプリケートされた表でタイムスタンプ比較を使用するには、NULL値可能なBINARY(8)型の列を指定して、タイムスタンプ値を保持する必要があります。タイムスタンプ列は、表の作成時に定義します。ALTER TABLE文でタイムスタンプ列を追加することはできません。また、タイムスタンプ列を主キーまたは索引に含めることはできません。

- XMLのレポート形式を指定した場合、2つのXMLドキュメントが生成されます。

- FileName.xml: このファイルには、レポート用のDTDおよびレポートのルート・ノードが含まれます。このファイルには、ドキュメント定義とINCLUDEディレクティブが含まれます。

- FileName.include: このファイルはFileName.xmlに含まれており、実際の競合がすべて含まれます。

- FileName.includeファイルは切捨て可能です。FileName.xmlファイルの切捨ては行わないでください。

- 各競合の例を含むXML書式の詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のXMLファイルへの競合のレポートに関する説明を参照してください。

- 要素のレポート形式を指定した後でその要素を削除しても、対応するレポート・ファイルは削除されません。

- 競合解消のレポートを一時停止する最高水位標のしきい値を指定するには、CONFLICT REPORTING SUSPEND AT句を使用します。1秒当たりの競合数が指定した最高水位標のしきい値を超えると、競合解消のレポート(構成済で、レポート・ファイルによってレポートされる場合)およびSNMPが一時的に停止され、一時停止を知らせるSNMPトラップが発行されます。

- 競合解消のレポートを再開する最低水位標のしきい値を指定するには、CONFLICT REPORTING RESUME AT句を使用します。競合の割合が最低水位標のしきい値を下回ると、競合解消のレポートが再開されます。競合解消の再開を知らせるSNMPトラップが発行されます。このトラップでは、競合解消の一時停止中にレポートされなかった競合の数が通知されます。

- レプリケーション・エージェントによって競合のレポートが一時停止されている状態または一時停止されていない状態は、ローカル・レプリケーション・エージェントとピア・エージェントが停止および再起動された後は維持されません。

- キャッシュ・グループをレプリケートする場合にCREATE REPLICATION文を使用しないでください。アクティブ・スタンバイ・ペアのみがキャッシュ・グループをレプリケートできます。CREATE ACTIVE STANDBY PAIR文を参照してください。

例

repl.tabの内容をmasterdsから2つのサブスクライバsubscriber1dsおよびsubscriber2dsにレプリケートします。

CREATE REPLICATION repl.twosubscribers
ELEMENT e TABLE repl.tab
MASTER masterds ON "server1"
SUBSCRIBER subscriber1ds ON "server2",
subscriber2ds ON "server3";

masterdsデータベース全体をサブスクライバsubscriber1dsにレプリケートします。FAILTHRESHOLDを指定すると、subscriber1dsが失敗したとみなされる前に、最大10のログ・ファイルをmasterdsに蓄積します。

CREATE REPLICATION repl.wholestore
ELEMENT e DATASTORE
MASTER masterds ON "server1"
SUBSCRIBER subscriber1ds ON "server2"
STORE masterds FAILTHRESHOLD 10;

westdsおよびeastdsデータベース全体を双方向にレプリケートして、RETURN TWOSAFEサービスを有効にします。

CREATE REPLICATION repl.biwholestore
ELEMENT e1 DATASTORE
MASTER westds ON "westcoast"
SUBSCRIBER eastds ON "eastcoast"
RETURN TWOSAFE
ELEMENT e2 DATASTORE
MASTER eastds ON "eastcoast"
SUBSCRIBER westds ON "westcoast"
RETURN TWOSAFE;

subscriber1dsサブスクライバへの選択トランザクション更新に対して、RETURN RECEIPTサービスを有効にします。

CREATE REPLICATION repl.twosubscribers
ELEMENT e TABLE repl.tab
MASTER masterds ON "server1"
SUBSCRIBER subscriber1ds ON "server2"
RETURN RECEIPT BY REQUEST
SUBSCRIBER subscriber2ds ON "server3";

customerswest表の内容をwestデータベースから、customerseast表の内容をeastデータベースから、ROUNDUPデータベースにレプリケートします。すべてのトランザクションに対してRETURN RECEIPTサービスを有効にします。

CREATE REPLICATION r
ELEMENT west TABLE customerswest
MASTER west ON "serverwest"
SUBSCRIBER roundup ON "serverroundup"
RETURN RECEIPT
ELEMENT east TABLE customerseast
MASTER east ON "servereast"
SUBSCRIBER roundup ON "serverroundup"
RETURN RECEIPT;

repl.tab表の内容をcentraldsデータベースからpropdsデータベースにレプリケートし、これにより、backup1dsおよびbackup2dsデータベースに変更が伝播されます。

CREATE REPLICATION repl.propagator
ELEMENT a TABLE repl.tab
MASTER centralds ON "finance"
SUBSCRIBER proprds ON "nethandler"
ELEMENT b TABLE repl.tab
PROPAGATOR proprds ON "nethandler"
SUBSCRIBER backup1ds ON "backupsystem1"
bakcup2ds ON "backupsystem2";

eastdsとwestdsデータベースの間で、repl.accounts表の内容を双方向でレプリケートします。各データベースは、repl.accounts表に対してマスターおよびサブスクライバの両方になります。

repl.accounts表がeastdsとwestdsデータベースのいずれかで更新されるため、ここにはタイムスタンプ列(tstamp)が含まれます。CHECK CONFLICTS句により、2つのデータベース間で発生した更新競合を検出するための自動タイムスタンプ比較が開始されます。比較が失敗すると、古いタイムスタンプを持つ更新が含まれるトランザクションの全体がロールバック(破棄)されます。

CREATE REPLICATION repl.r1
ELEMENT elem_accounts_1 TABLE repl.accounts
CHECK CONFLICTS BY ROW TIMESTAMP
COLUMN tstamp
UPDATE BY SYSTEM
ON EXCEPTION ROLLBACK
MASTER westds ON "westcoast"
SUBSCRIBER eastds ON "eastcoast"
ELEMENT elem_accounts_2 TABLE repl.accounts
CHECK CONFLICTS BY ROW TIMESTAMP
COLUMN tstamp
UPDATE BY SYSTEM
ON EXCEPTION ROLLBACK
MASTER eastds ON "eastcoast"
SUBSCRIBER westds ON "westcoast";

RETURN TWOSAFEサービスを使用し、activedsでTCP/IPポート40000、backupdsでTCP/IPポート40001を使用して、repl.accounts表の内容をactivedsデータベースからbackupdsデータベースにレプリケートします。activedsでのトランザクションはできるかぎりコミットする必要があるため、レプリケーションを構成し、LOCAL COMMIT ACTIONを使用してレプリケーション・タイムアウトの後でもトランザクションがコミットされるようにし、レプリケーションの停止時はRETURN TWOSAFEサービスが無効になるようにします。backupdsデータベースへの接続が割り込まれた場合にアプリケーションでの大幅な遅延を回避するために、5個のトランザクションがタイムアウトした後にRETURNサービスが無効になるように構成しますが、さらにbackupdsデータベースのレプリケーション・エージェントが100ミリ秒未満で応答したときはRETURNサービスを再度有効にするように構成します。最後に、データベース間の帯域幅は制限されるため、activedsデータベースからレプリケートされるときにデータが圧縮されるようにレプリケーションを構成します。

CREATE REPLICATION repl.r
ELEMENT elem_accounts_1 TABLE repl.accounts
MASTER activeds ON "active"
SUBSCRIBER backupds ON "backup"
RETURN TWOSAFE
ELEMENT elem_accounts_2 TABLE repl.accounts
MASTER activeds ON "active"
SUBSCRIBER backupds ON "backup"
RETURN TWOSAFE
STORE activeds ON "active"
PORT 40000
LOCAL COMMIT ACTION COMMIT
RETURN SERVICES OFF WHEN REPLICATION STOPPED
DISABLE RETURN SUBSCRIBER 5
RESUME RETURN 100
COMPRESS TRAFFIC ON
STORE backupds ON "backup"
PORT 40001;

表レベルのレプリケーションで競合のレポートを一時停止する句と競合のレポートを再開する句の例を示します。これらの句は、データベース・レプリケーションではなく、表レベルのレプリケーションに対して使用します。repschemesコマンドを発行して、レプリケーション・スキームが作成されていることを表示します。

Command> CREATE TABLE repl.accounts (tstamp BINARY (8) NOT NULL
PRIMARY KEY, tstamp1 BINARY (8));
Command> CREATE REPLICATION repl.r2
> ELEMENT elem_accounts_1 TABLE repl.accounts
> CHECK CONFLICTS BY ROW TIMESTAMP
> COLUMN tstamp1
> UPDATE BY SYSTEM
> ON EXCEPTION ROLLBACK WORK
> MASTER westds ON "west1"
> SUBSCRIBER eastds ON "east1"
> ELEMENT elem_accounts_2 TABLE repl.accounts
> CHECK CONFLICTS BY ROW TIMESTAMP
> COLUMN tstamp1
> UPDATE BY SYSTEM
> ON EXCEPTION ROLLBACK WORK
> MASTER eastds ON "east1"
> SUBSCRIBER westds ON "west1"
> STORE westds
> CONFLICT REPORTING SUSPEND AT 20
> CONFLICT REPORTING RESUME AT 10;
Command> REPSCHEMES;

Replication Scheme REPL.R2:

Element: ELEM_ACCOUNTS_1
Type: Table REPL.ACCOUNTS
Conflict Check Column: TSTAMP1
Conflict Exception Action: Rollback Work
Conflict Timestamp Update: System
Conflict Report File: (none)
Master Store: WESTDS on WEST1 Transmit Durable
Subscriber Store: EASTDS on EAST1

Element: ELEM_ACCOUNTS_2
Type: Table REPL.ACCOUNTS
Conflict Check Column: TSTAMP1
Conflict Exception Action: Rollback Work
Conflict Timestamp Update: System
Conflict Report File: (none)
Master Store: EASTDS on EAST1 Transmit Durable
Subscriber Store: WESTDS on WEST1

Store: EASTDS on EAST1
Port: (auto)
Log Fail Threshold: (none)
Retry Timeout: 120 seconds
Compress Traffic: Disabled

Store: WESTDS on WEST1
Port: (auto)
Log Fail Threshold: (none)
Retry Timeout: 120 seconds
Compress Traffic: Disabled
Conflict Reporting Suspend: 20
Conflict Reporting Resume: 10

1 replication scheme found.

2つのMASTERIP句とSUBSCRIBERIP句を使用したNetworkOperation句の例を示します。

CREATE REPLICATION r ELEMENT e DATASTORE
MASTER rep1 SUBSCRIBER rep2 RETURN RECEIPT
MASTERIP "1.1.1.1" PRIORITY 1 SUBSCRIBERIP "2.2.2.2"
PRIORITY 1
MASTERIP "3.3.3.3" PRIORITY 2 SUBSCRIBERIP "4.4.4.4"
PRIORITY 2;

NetworkOperation句の例を示します。送信側にはデフォルトのインタフェースを使用しますが、受信側には特定のネットワークを使用します。

CREATE REPLICATION r
ELEMENT e DATASTORE
MASTER rep1 SUBSCRIBER rep2
ROUTE MASTER rep1 ON "machine1" SUBSCRIBER rep2 ON "machine2"
SUBSCRIBERIP "rep2nic2" PRIORITY 1;

複数のサブスクライバを使用するNetworkOperation句の使用例を示します。

CREATE REPLICATION r ELEMENT e DATASTORE
MASTER rep1 SUBSCRIBER rep2,rep3
ROUTE MASTER rep1 ON "machine1" SUBSCRIBER rep2 ON "machine2"
MASTERIP "1.1.1.1" PRIORITY 1 SUBSCRIBERIP "2.2.2.2"
PRIORITY 1
ROUTE MASTER Rep1 ON "machine1" SUBSCRIBER Rep3 ON "machine2"
MASTERIP "3.3.3.3" PRIORITY 2 SUBSCRIBERIP "4.4.4.4";

関連項目

「ALTER ACTIVE STANDBY PAIR」
「ALTER REPLICATION」
「CREATE ACTIVE STANDBY PAIR」
「DROP ACTIVE STANDBY PAIR」
「DROP REPLICATION」

CREATE SEQUENCE

CREATE SEQUENCE文は、この後、複数のユーザーが一意の整数を生成するために使用できる新しい順序番号ジェネレータを作成します。CREATE SEQUENCE文を使用して、順序の初期値を定義し、増分値、最大値または最小値を定義し、最小または最大に達した後も順序番号を生成し続けるかどうかを決定します。

必要な権限

CREATE SEQUENCE(所有者の場合)またはCREATE ANY SEQUENCE(非所有者の場合)。

SQL構文

CREATE SEQUENCE [Owner.]SequenceName
[INCREMENT BY IncrementValue]
[MINVALUE MinimumValue]
[MAXVALUE MaximumValue]
[CYCLE]
[CACHE CacheValue]
[START WITH StartValue]

パラメータ

パラメータ

説明

SEQUENCE [Owner.]SequenceName

順序番号ジェネレータの名前です。

INCREMENT BY IncrementValue

連続する数値の増分値です。この値は正または負の整数値です。0は指定できません。値が正の場合は昇順になります。負の場合は降順になります。デフォルト値は1です。降順では、範囲はMAXVALUEからMINVALUEへ変化し、昇順ではその逆になります。

MINVALUE MinimumValue

順序の最小値を指定します。デフォルトの最小値は1です。

MAXVALUE MaximumValue

昇順の場合は最大値、降順の場合は開始値です。デフォルトの最大値は(2^63) -1であり、これはBIGINTの最大です。

CYCLE

順序番号ジェネレータが最大値または最小値に達した後、数値の生成を続行するかどうかを指定します。デフォルトでは、順序はサイクルしません。昇順で数値が最大値に達すると、順序は始めに戻り、最小値から値を生成し続けます。降順で最小値に達すると、順序値は最大値に戻ります。CYCLEが指定されていない場合、最大/最小値に達すると順序番号ジェネレータは値の生成を停止し、エラーが返されます。

CACHE CacheValue

CACHEは毎回キャッシュを行うタイミングとなる数値の範囲を示します。再起動すると、キャッシュされた未使用の値は失われます。CacheValueに1を指定した場合、順序を使用するたびにデータベースに対して更新が発生します。キャッシュ値が大きいほど、データベースへの変更およびオーバーヘッドは少なくなります。デフォルトは20です。

START WITH StartValue

生成する最初の順序番号を指定します。この句を使用して、その最小値よりも大きい値から昇順順序を開始、あるいはその最大値よりも小さい値から降順順序を開始します。StartValueには、MinimumValue以上、MaximumValue以下の値を指定する必要があります。

説明

- CREATE SEQUENCE文のすべてのパラメータは整数値である必要があります。

- パラメータに値を指定しない場合、TimesTenでは、1から開始し、1ずつ増加し、デフォルトの最大値を持ちサイクルしない昇順がデフォルトで作成されます。

- TimesTenにはALTER SEQUENCE文はありません。順序を変更する場合は、DROP SEQUENCE文を使用してから、同じ名前の順序を新規作成します。たとえば、MINVALUEを変更する場合、順序を削除し、同じ名前で必要なMINVALUEを持つ順序を再度作成します。

- ビューまたはマテリアライズド・ビューと同じ名前の順序は作成しないでください。

- CYCLE属性が指定された順序はレプリケートできません。

- アクティブ・スタンバイ・ペアのレプリケートされた環境で、DDL_REPLICATION_LEVELが3以上の場合にアクティブ・データベースでCREATE SEQUENCEを実行すると、順序はレプリケーション・スキームのすべてのデータベースにレプリケートされます。順序をレプリケーション・スキームに含めるには、DDL_REPLICATION_ACTIONをINCLUDEに設定します。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアでのDDL変更に関する説明を参照してください。

CURRVALとNEXTVALによるSEQUENCE値の増加

SQL文でSEQUENCE値を参照するには、CURRVALとNEXTVALを使用します。

- CURRVALは、現在のセッションでNEXTVALがコールされていればその最新の値を返し、コールされていなければエラーを返します。

- NEXTVALは、指定された増分で順序の現在値を増加させ、アクセスされた行ごとに値を返します。

順序の現在値は、接続ごとに異なります。同じデータベースに2つの同時接続がある場合、各接続は同じ順序について、最後のNEXTVAL参照により設定された独自のCURRVALを取得します。最大値に達した場合、CREATE SEQUENCEのCYCLEオプションの値によって、SEQUENCEはサイクルする(開始値に戻る)か、エラー文を生成します。リカバリでは、順序はロールバックされません。順序の値の範囲に幅を持たせることができますが、その場合でも各順序値は一意です。

複数のNEXTVAL参照を持つ1つのSQL文を実行する場合、TimesTenでは順序を一度だけ増加させ、すべてのNEXTVALに対して同じ値が返されます。SQL文にNEXTVALとCURRVALの両方が含まれている場合は、NEXTVALが最初に実行されます。CURRVALとNEXTVALは、そのSQL文では同じ値を持ちます。

注意:
NEXTVALは、アクティブ・スタンバイ・ペアのスタンバイ・ノードへの問合せでは使用できません。

NEXTVALおよびCURRVALは、次の場合に使用できます。

- SELECT文のSelectList(ただし、副問合せのSelectListは除く)

- INSERT...SELECT文のSelectList

- UPDATE文のSET句

例

順序を作成します。

CREATE SEQUENCE mysequence INCREMENT BY 1 MINVALUE 2
MAXVALUE 1000;

この例では、tab1は表内に1行のデータを持ち、CYCLEが使用されているとします。

CREATE SEQUENCE s1 MINVALUE 2 MAXVALUE 4 CYCLE;
SELECT s1.NEXTVAL FROM tab1;
/* Returns the value of 2; */
SELECT s1.NEXTVAL FROM tab1;
/* Returns the value of 3; */
SELECT s1.NEXTVAL FROM tab1;
/* Returns the value of 4; */

最大値に達した後、最小値から昇順でサイクルを開始します。

SELECT s1.NEXTVAL FROM tab1;
/* Returns the value of 2; */

順序を作成して順序番号を生成するには、次の文を使用します。

CREATE SEQUENCE seq INCREMENT BY 1;
INSERT INTO student VALUES (seq.NEXTVAL, 'Sally');

UPDATE SET句で順序を使用するには、次の文を使用します。

UPDATE student SET studentno = seq.NEXTVAL WHERE name = 'Sally';

問合せで順序を使用するには、次の文を使用します。

SELECT seq.CURRVAL FROM student;

関連項目

DROP SEQUENCE

CREATE SYNONYM

CREATE SYNONYM文は、データベース・オブジェクトのパブリック・シノニムまたはプライベート・シノニムを作成します。シノニムは、データベース・オブジェクトの別名です。オブジェクトは、表、ビュー、シノニム、順序、PL/SQLストアド・プロシージャ、PL/SQLファンクション、PL/SQLパッケージ、マテリアライズド・ビューまたはキャッシュ・グループです。

プライベート・シノニムは、特定のユーザーが所有し、そのユーザーのスキーマ内に存在します。プライベート・シノニムに所有者以外のユーザーがアクセスできるのは、基礎となるオブジェクトに対する適切な権限がユーザーにあり、シノニム名とともにスキーマを指定する場合のみです。

パブリック・シノニムは、基礎となるオブジェクトに対する適切な権限がユーザーにあるかぎり、すべてのユーザーがアクセスできます。

CREATE SYNONYMはDDL文です。

シノニムは、次のSQL文で使用できます。

- DML文: SELECT、DELETE、INSERT、UPDATE、MERGE

- 一部のDDL文: GRANT、REVOKE、CREATE TABLE ... AS SELECT、CREATE VIEW ... AS SELECT、CREATE INDEX、DROP INDEX

- 一部のキャッシュ・グループ文: LOAD CACHE GROUP、UNLOAD CACHE GROUP、REFRESH CACHE GROUP、FLUSH CACHE GROUP

必要な権限

プライベート・シノニムを作成するには、CREATE SYNONYM(所有者の場合)またはCREATE ANY SYNONYM(非所有者の場合)。

パブリック・シノニムを作成するには、CREATE PUBLIC SYNONYM。

SQL構文

CREATE [OR REPLACE] [PUBLIC] SYNONYM [Owner1.]synonym FOR [Owner2.]object

パラメータ

パラメータ

説明

[OR REPLACE]

シノニムがすでに存在する場合に再作成するには、OR REPLACEを指定します。この句を使用すると、既存のシノニムの定義をはじめに削除しなくても、その定義を変更できます。

[PUBLIC]

PUBLICを指定すると、パブリック・シノニムを作成できます。パブリック・シノニムは、すべてのユーザーがアクセスできますが、シノニムを使用するには、基礎となるオブジェクトに対する適切な権限が各ユーザーに必要です。
オブジェクトの先頭にスキーマ名が指定されていない場合のみ、オブジェクトへの参照を変換するときに、TimesTenでパブリック・シノニムが使用されます。

[Owner1.]synonym

シノニムの所有者を指定します。PUBLICを指定した場合、所有者は指定できません。PUBLICとOwner1の両方を省略した場合、TimesTenによって、自分のスキーマ内にシノニムが作成されます。
シノニムの名前を30バイト以内で指定します。

[Owner2.]object

オブジェクトが配置される所有者を指定します。シノニムを作成する対象のオブジェクト名を指定します。objectをOwner2で修飾しなかった場合、そのオブジェクトは自分のスキーマ内にあります。Owner2およびobjectは、シノニムの作成時に存在している必要はありません。

説明

- スキーマ・オブジェクトは、そのシノニムの作成時に存在している必要はありません。

- TimesTen組込みプロシージャと同じ名前のパブリック・シノニムは作成しないでください。

- シノニムを使用するには、シノニムを使用する前に、シノニムによって別名が付けられるオブジェクトのユーザーに適切な権限が付与されている必要があります。

- プライベート・シノニムの名前は、プライベート・シノニムと同じスキーマにある表、ビュー、順序、PL/SQLパッケージ、ファンクション、プロシージャおよびキャッシュ・グループと同じにすることはできません。

- パブリック・シノニムの名前は、プライベート・シノニムやオブジェクト名と同じにすることができます。

- 問合せがOracle Databaseで実行される必要があるようにPassThrough属性が設定されている場合は、その問合せは変更されずにOracle Databaseに送信されます。問合せがキャッシュ・グループの表に対してシノニムを使用する場合、問合せが成功するためには、同じ名前のシノニムが対応するOracle Database表に定義されている必要があります。

- オブジェクト名が、シノニムを使用できるDML文およびDDL文で使用される場合、オブジェクト名は次のように解決されます。

1. 現在のスキーマ内で一致を検索します。一致が見つからない場合は、次に進みます。

2. パブリック・シノニム名との一致を検索します。一致が見つからない場合は、次に進みます。

3. SYSスキーマ内で一致を検索します。一致が見つからない場合は、次に進みます。

4. オブジェクトは存在しません。

TimesTenでは、一部のオブジェクトのパブリック・シノニムがSYSスキーマ内に作成されます。パブリック・シノニムの名前はオブジェクト名と同じです。そのため、オブジェクト名解決のステップ2と3を入れ替えても、検索結果は変わりません。

- アクティブ・スタンバイ・ペアのレプリケートされた環境で、DDL_REPLICATION_LEVELが2以上の場合にアクティブ・データベースでCREATE SYNONYMを実行すると、シノニムはレプリケーション・スキームのすべてのデータベースにレプリケートされます。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアでのDDL変更に関する説明を参照してください。

例

ユーザーttuserとして、jobs表のシノニムを作成します。シノニムを使用して情報を取得できることを確認します。SYS.USER_SYNONYMSシステム・ビューの内容を表示します。

Command> CREATE SYNONYM synjobs FOR jobs;
Synonym created.

Command> SELECT FIRST 2 * FROM jobs;
< AC_ACCOUNT, Public Accountant, 4200, 9000 >
< AC_MGR, Accounting Manager, 8200, 16000 >
2 rows found.
Command> SELECT FIRST 2 * FROM synjobs;
< AC_ACCOUNT, Public Accountant, 4200, 9000 >
< AC_MGR, Accounting Manager, 8200, 16000 >
2 rows found.

Command> SELECT * FROM sys.user_synonyms;
< SYNJOBS, TTUSER, JOBS, <NULL> >
1 row found.

employees表のパブリック・シノニムを作成します。

Command> CREATE PUBLIC SYNONYM pubemp FOR employees;
Synonym created.

pubempがパブリック・シノニムとしてSYS.ALL_SYNONYMSシステム・ビューに表示されることを確認します。

Command> SELECT * FROM sys.all_synonyms;
< PUBLIC, TABLES, SYS, TABLES, <NULL> >
...
< TTUSER, SYNJOBS, TTUSER, JOBS, <NULL> >
< PUBLIC, PUBEMP, TTUSER, EMPLOYEES, <NULL> >
57 rows found.

terryスキーマのtab表のシノニムを作成します。シノニムにDESCRIBEを実行します。

Command> CREATE SYNONYM syntab FOR terry.tab;
Synonym created.
Command> DESCRIBE syntab;

Synonym TTUSER.SYNTAB:
For Table TERRY.TAB
Columns:
COL1                            VARCHAR2 (10) INLINE
COL2                            VARCHAR2 (10) INLINE

1 Synonyms found.

OR REPLACE句を使用して、employees表の別名となるように、synjobsシノニムを再定義します。synjobsにDESCRIBEを実行します。

Command> CREATE OR REPLACE synjobs FOR employees;
Synonym created.

Command> DESCRIBE synjobs;

Synonym TTUSER.SYNJOBS:
For Table TTUSER.EMPLOYEES
Columns:
*EMPLOYEE_ID                     NUMBER (6) NOT NULL
FIRST_NAME                      VARCHAR2 (20) INLINE
LAST_NAME                       VARCHAR2 (25) INLINE NOT NULL
EMAIL                           VARCHAR2 (25) INLINE UNIQUE NOT NULL
PHONE_NUMBER                    VARCHAR2 (20) INLINE
HIRE_DATE                       DATE NOT NULL
JOB_ID                          VARCHAR2 (10) INLINE NOT NULL
SALARY                          NUMBER (8,2)
COMMISSION_PCT                  NUMBER (2,2)
MANAGER_ID                      NUMBER (6)
DEPARTMENT_ID                   NUMBER (4)

1 Synonyms found.

関連項目

DROP SYNONYM

CREATE TABLE

CREATE TABLE文は、表を定義します。

必要な権限

CREATE TABLE(所有者の場合)またはCREATE ANY TABLE(非所有者の場合)。

作成された表の所有者には、REFERENCE句によって参照される表に対するREFERENCES権限が必要です。

DDL_REPLICATION_LEVEL=2以上およびDDL_REPLICATION_ACTION=INCLUDEのときに、新しい表をアクティブ・スタンバイ・ペア間でレプリケートする場合は、ADMIN権限。これらの属性によって、CREATE TABLEでは暗黙的にALTER ACTIVE STANDBY PAIR... INCLUDE TABLE文が実行されます。詳細は、「ALTER SESSION」を参照してください。

SQL構文

PRIMARY KEYを、ColumnDefinition句とPRIMARY KEY句の両方で指定することはできません。

永続表の構文は、次のとおりです。

CREATE TABLE [Owner.]TableName
(
{{ColumnDefinition} [,...]
[PRIMARY KEY (ColumnName [,...]) |
[[CONSTRAINT ForeignKeyName]
FOREIGN KEY ([ColumnName] [,...])
REFERENCES RefTableName
[(ColumnName [,...])] [ON DELETE CASCADE]] [...]
}
)
[TableCompression]
[UNIQUE HASH ON (HashColumnName [,...])
PAGES = PrimaryPages]
[AGING {LRU|
USE ColumnName
LIFETIME Num1 {SECOND[S] | MINUTE[S] | HOUR[S] |DAY[S]}
[CYCLE Num2 {SECOND[S] | MINUTE[S] |HOUR[S] |DAY[S]}]
}[ON|OFF]
]
[AS SelectQuery]

グローバル一時表の構文は、次のとおりです。

CREATE GLOBAL TEMPORARY TABLE [Owner.]TableName
(
{{ColumnDefinition} [,...]
[PRIMARY KEY (ColumnName [,...]) |
[[CONSTRAINT ForeignKeyName]
FOREIGN KEY ([ColumnName] [,...])
REFERENCES RefTableName
[(ColumnName [,...])] [ON DELETE CASCADE]] [...]
}
)
[UNIQUE HASH ON (HashColumnName [,...])
PAGES = PrimaryPages]
[ON COMMIT { DELETE | PRESERVE } ROWS
]

パラメータ

パラメータ

説明

[Owner.]TableName

新しい表に割り当てる名前です。2つの表に同じ所有者名と表名を指定することはできません。
所有者名を指定していない場合は、ログイン名が新しい表の所有者名になります。TimesTenの表の所有者は、ユーザーIDの設定またはログイン名によって決まります。Oracle Database表の所有者名は、TimesTen表の所有者名と常に一致させる必要があります。

名前作成の規則については、「基本名」を参照してください。

GLOBAL TEMPORARY

作成する表をグローバル一時表にします。一時表は永続表と類似していますが、接続で参照された場合にのみ効率的にマテリアライズされます。
グローバル一時表定義は永続的であり、すべての接続に対して表示されますが、表インスタンスは各接続に対してローカルです。表インスタンスは、表を参照するコマンドが接続に対してコンパイルされる場合に作成され、接続が切断されると削除されます。同じ一時表のすべてのインスタンスの名前は同じですが、表名と追加の接続IDに基づいて識別されます。グローバル一時表は、一時領域に割り当てられます。

グローバル一時表の内容は接続間で共有できません。各接続では、その接続の表の内容のみが表示され、一時表を参照するコンパイルされたコマンドは接続間で共有されません。

DDL_REPLICATION_LEVELが2以上の場合、グローバル一時表の作成はアクティブ・スタンバイ・ペア内でレプリケートされますが、グローバル一時表はレプリケーション・スキームに含まれません。

DATASTORE要素が指定されている場合、一時表はアクティブ・スタンバイ・ペアから自動的に除外されます。

キャッシュ・グループ表は、一時表として定義できません。

一時表の変更は、XLAで追跡できません。

一時表の操作でログ・レコードが生成されます。生成されるログの量は、永続表用よりも少なくなります。

TRUNCATE TABLEは、グローバル一時表でサポートされていません。

ローカルの一時表は、サポートされていません。

グローバル一時表にアクセスするには、オブジェクト権限は必要ありません。

グローバル一時表にはAS SelectQuery句を指定しないでください。

ColumnDefinition

表の個々の列です。各表には、列が少なくとも1つ必要です。詳細は、「列定義」を参照してください。
AS SelectQuery句を指定する場合、ColumnDefinitionはオプションです。

ColumnName

作成する表の主キーを構成する列の名前。主キーには最大16列を指定できます。外部キーの場合、ColumnNameはオプションです。外部キーに対して指定しない場合、参照されるのは親表の主キーです。
AS SelectQuery句を指定する場合、ColumnNameを指定する必要はありません。AS SelectQuery句にデータ型を指定しないでください。

PRIMARY KEY

PRIMARY KEYは、表定義で一度だけ指定できます。これによって、1つ以上の列が表の主キーを構成していることを示します。主キーの内容は一意かつNOT NULLである必要があります。列には、UNIQUEと単一列PRIMARY KEYの両方を指定することはできません。

CONSTRAINT ForeignKeyName

オプションのユーザー定義の名前を外部キーに指定します。ユーザーが指定しない場合は、システムによってデフォルトの名前が指定されます。

FOREIGN KEY

新しい表とRefTableNameによって識別される参照先の表の間で外部キー制約を指定します。外部キー制約で指定される列には、2つのリストがあります。
最初のリストの列は、新しい表の列であり、参照元列と呼ばれます。2番目のリストの列は、参照先の表の列であり、参照先列と呼ばれます。これら2つのリストは、長さ、精度、スケールを含めてデータ型が一致している必要があります。参照先の表には、参照先列に対する主キーまたは一意索引がすでに存在している必要があります。

参照先列の列名リストはオプションです。省略した場合、RefTableNameの1次索引が使用されます。

外部キーを宣言することにより、参照元列に範囲索引が作成されます。参照先の表またはその参照先の索引は、参照元表を削除しないかぎり削除できません。

外部キー制約によって、新しい表の各行と参照先の表の行は、参照元列の内容と参照先列の内容が同じになるように一致させる必要があります。INSERT、DELETEまたはUPDATE文が制約に違反した場合、TimesTenエラー3001が返されます。

TimesTenでは、SQL-92 "NO ACTION"の更新および削除規則とON DELETE CASCADEがサポートされています。外部キー制約は遅延可能ではありません。

外部キーはグローバル一時表で定義できますが、グローバル一時表の参照のみを行うことができます。親表がCOMMIT DELETEを使用して定義されている場合は、子表にもCOMMIT DELETE属性が必要です。

外部キーは、アクティブな親表を参照できません。アクティブな親表とは、接続に対してマテリアライズされたインスタンスを持つ表のことです。

AS SelectQuery句を指定する場合は、作成する表に対して外部キーを定義できません。

[ON DELETE CASCADE]

ON DELETE CASCADE参照アクションを有効にします。指定されている場合、参照先キーの値を含む行が親表から削除されると、依存する外部キーの値を持つ子表の行も削除されます。

TableCompression

データをより効率的に格納する、列レベルでの圧縮を定義します。列での重複する値の冗長な格納を削除し、全表スキャンを実行するSQL問合せのパフォーマンスを向上させます。詳細は、「表のインメモリー列圧縮」を参照してください。

UNIQUE

UNIQUE列の各行の値が一意である必要があることを示します。

UNIQUE HASH ON

表のハッシュ索引。このパラメータは、等価条件に使用します。UNIQUE HASH ONを指定するには、主キーの定義が必要です。

HashColumnName

表に定義された列をこの表のハッシュ・キーに含めます。ハッシュ索引に指定される列は、主キーの列と同じである必要があります。
AS SelectQuery句を指定する場合は、作成する表にHashColumnNameを定義する必要があります。

PAGES = PrimaryPages

表の想定ページ数に基づいてハッシュ索引のサイズを設定します。PrimaryPagesの値は、表の想定行数を256で除算して決定します。たとえば、表に256,000行ある場合は、PrimaryPagesに1000を指定します(256000/256=1000)。
PrimaryPagesの値は、0を含まない正の定数である必要があります。

PrimaryPagesの推定値が小さすぎると、パフォーマンスが悪化します。

[ON COMMIT {DELETE|PRESERVE} ROWS]

グローバル一時表を作成するトランザクションがコミットされるときに、行を削除するか、または保存するかを指定するオプションの文です。この文が指定されていない場合は、一時表の行が削除されます。

[AGING LRU [ON|OFF]]

指定する場合、表のLRUエージング・ポリシーを定義します。LRUエージング・ポリシーでは、エージングのタイプ(LRU)、エージング状態(ONまたはOFF)およびLRUエージング属性を定義します。
エージング状態をONまたはOFFのいずれかに設定します。ONはエージング状態が有効であり、エージングが自動的に実行されることを示します。OFFはエージング状態が無効であり、エージングが自動的に実行されないことを示します。両方の場合、エージング・ポリシーが定義されます。デフォルトはONです。

LRU属性はプロシージャttAgingLRUConfigをコールして定義します。LRU属性はSQLレベルでは定義できません。

LRUエージングの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の表へのエージングの実装に関する説明を参照してください。

[AGING USE ColumnName...[ON|OFF]]

指定する場合、表の時間ベースのエージング・ポリシーを定義します。時間ベースのエージング・ポリシーでは、エージングのタイプ(時間ベース)、エージング状態(ONまたはOFF)および時間ベースのエージング属性を定義します。
エージング状態をONまたはOFFのいずれかに設定します。ONはエージング状態が有効であり、エージングが自動的に実行されることを示します。OFFはエージング状態が無効であり、エージングが自動的に実行されないことを示します。両方の場合、エージング・ポリシーが定義されます。デフォルトはONです。

時間ベースのエージング属性はSQLレベルで定義され、LIFETIME句およびCYCLE句で指定します。

時間ベース・エージングに使用する列の名前としてColumnNameを指定します。列は、NOT NULLのTIMESTAMPデータ型またはDATEデータ型として定義します。この列の値がSYSDATEから差し引かれ、指定した単位(秒、分、時間、日数)を使用して切り捨てられた後、LIFETIME値との比較が行われます。結果がLIFETIME値より大きい場合、その行はエージングの候補となります。

エージングに使用される列の値は、アプリケーションによって更新されます。この列の値が不明な行がある場合、その行がエージ・アウトされないようにするには、列に大きなデフォルト値を定義します(この列はNULLにはできません)。

TT_TIMESTAMPデータ型またはTT_DATEデータ型を使用してエージング列を定義できます。TT_DATEデータ型を選択する場合は、LIFETIME単位としてDAYSを指定する必要があります。

AS SelectQuery句を指定する場合は、作成する表にColumnNameを定義する必要があります。

時間ベースのエージングの詳細は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の表へのエージングの実装に関する説明を参照してください。

LIFETIME Num1 {SECOND[S]| MINUTE[S]|HOUR[S]| DAY[S]}

LIFETIMEは時間ベースのエージング属性で、必須の句です。
AGING USE ColumnName句の後にLIFETIME句を指定します。

LIFETIME句には、データがキャッシュに保持されることが保証される時間を指定します。

Num1には、行がキャッシュに保持される時間の長さを、秒、分、時間または日数で表す正の整定数を指定します。LIFETIME値を超えた行はエージ・アウト(表から削除)されます。エージング列をTT_DATEデータ型を使用して定義する場合は、LIFETIME単位としてDAYSを指定する必要があります。

時間の単位の概念がサポートされています。時間の単位にDAYSを指定した場合、タイムスタンプの日付が同じ日になっているすべての行が同時にエージ・アウトされます。また、HOURSを時間の単位に指定した場合は、タイムスタンプ値の時間が同じ行が、すべて同時にエージ・アウトされます。LIFETIMEの3 DAYSは、LIFETIMEの72 HOURS(3×24)やLIFETIMEの432 MINUTES(3×24×60)とは異なります。

[CYCLE Num2 {SECOND[S] |MINUTE[S]|HOUR[S]| DAY[S]}]

CYCLEは時間ベースのエージング属性で、オプションです。LIFETIME句の後にCYCLE句を指定します。
CYCLE句は、データが指定したLIFETIME値を超えているかどうか、その結果エージ・アウト(削除)する必要があるかどうかを確認するために、システムで行をチェックする頻度を指定します。

Num2には、正の整数を指定します。

CYCLE句を指定しない場合、デフォルト値は5分です。Num2に0を指定した場合、エージング・スレッドは1秒ごとに起動します。

エージング状態がOFFの場合、エージングは自動的に実行されず、CYCLE句は無視されます。

AS SelectQuery

指定されている場合、SelectQueryの結果セットの内容から新しい表が作成されます。SelectQueryで返される行が表に挿入されます。
データ型およびデータ型の長さは、SelectQueryから導出されます。

SelectQueryは、副問合せを含めることも含めないこともできる有効なSELECT文です。

SELECT動詞の後に文レベルのオプティマイザ・ヒントを指定できます。文レベルのオプティマイザ・ヒントの詳細は、「文レベルのオプティマイザ・ヒント」を参照してください。

列定義

SQL構文

ENABLEキーワードは、CREATE TABLE文で列を定義する場合にのみ使用できます。

LOB以外のすべてのデータ型について、構文は次のとおりです。

ColumnName ColumnDataType
[DEFAULT DefaultVal]
[[NOT] INLINE]
[PRIMARY KEY | UNIQUE |
NULL [UNIQUE] |
NOT NULL [ENABLE] [PRIMARY KEY | UNIQUE]
]

LOBデータ型の場合、LOB列に主キーまたは一意制約を作成できません。また、LOBデータ型は表外に格納されるため、INLINE属性を指定できません。

すべてのLOBデータ型について、構文は次のとおりです。

ColumnName ColumnDataType
[DEFAULT DefaultVal] [[NOT] NULL [ENABLE]] |
[[NOT] NULL [ENABLE]] [DEFAULT DefaultVal]

パラメータ

列定義には、次のパラメータがあります。

パラメータ

説明

ColumnName

新しい表の列に割り当てる名前です。表の2つの列に同じ名前を指定することはできません。1つの表の列数は最大で1000です。
AS SelectQuery句を指定する場合、ColumnNameはオプションです。列名の数は、SelectQueryの列の数と一致している必要があります。

ColumnDataType

列に格納できるデータ型です。長さを指定する必要があるデータ型もあります。指定できるデータ型の詳細は、第1章「データ型」を参照してください。
AS SelectQuery句を指定する場合は、ColumnDataTypeを指定しないでください。

DEFAULT DefaultVal

INSERT文で列の値が指定されていない場合、デフォルト値DefaultValを列に挿入します。指定されたデフォルト値は、列のデータ型と互換性がある型である必要があります。デフォルト値には、関連付けられた列で許可されている任意のデータ型を指定できます。ROWIDデータ型について、または読取り専用キャッシュ・グループの列についてデフォルト値を割り当てることはできません。また、DEFAULT句でファンクションを使用することはできません。
DefaultValの適正なデータ型は次のとおりです。

- NULL (後述)

- 定数式(結果が定数になる式)

- SYSDATEおよびGETDATE (「SYSDATEおよびGETDATE」)

- SYSTEM_USER (「SYSTEM_USER」)

デフォルト値がユーザーのいずれかである場合、列のデータ型はCHARまたはVARCHAR2のいずれかであり、列の幅は30文字以上である必要があります。

AS SelectQuery句を指定する場合は、オプションで、作成する表にDEFAULT句を指定することもできます。

INLINE|NOT INLINE

デフォルトでは、宣言された列の長さが128バイトより大きい可変長の列は表外に保存されます。宣言された列の長さが128バイト以下の可変長の列は、表内に保存されます。INLINEおよびNOT INLINEキーワードを使用すると、表を作成するときのデフォルトの動作を無効にすることができます。
AS SelectQuery句を指定する場合は、オプションで、作成する表にINLINE | NOT INLINE句を指定することもできます。

NULL

列にNULL値を含めることができます。
AS SelectQuery句を指定する場合は、オプションで、作成する表にNULLを指定することもできます。

NULLを指定した場合は、ENABLEを指定できません。

NOT NULL [ENABLE]

列にNULL値を含めることはできません。NOT NULLを指定した場合、列にNULL値を保存しようとする文はすべて拒否されます。
AS SelectQuery句を指定する場合は、オプションで、作成する表にNOT NULL[ENABLE]を指定することもできます。

NOT NULLを指定する場合は、オプションでENABLEを指定できます。NOT NULL制約は常に有効なため、ENABLEの指定は必須ではありません。

ENABLEキーワードは、CREATE TABLE文で列を定義する場合にのみ使用できます。

UNIQUE

列に設定される一意制約です。この列に同じ値を持つ行を、表内に複数保持することはできません。一意性を実現するために、TimesTenでは一意の範囲索引が作成されます。つまり、一意制約を持つ列は、制約を持たない列よりも多くのメモリーと時間を実行時に使用する可能性があります。PRIMARY KEYとともに使用することはできません。
AS SelectQuery句を指定する場合は、オプションで、作成する表にUNIQUEを指定することもできます。

PRIMARY KEY

列に設定される一意のNOT NULL制約です。この列に同じ値を持つ行を、表内に複数保持することはできません。UNIQUEとともに使用することはできません。
AS SelectQuery句を指定する場合は、オプションで、作成する表にPRIMARY KEYを指定することもできます。

説明

- 主キーに保存されるすべての列は、NOT NULLである必要があります。

- ColumnDefinitionで指定されたPRIMARY KEYは、1つの列に対してのみ指定できます。

- PRIMARY KEYを、ColumnDefinition句とPRIMARY KEY句の両方で指定することはできません。

- 主キーおよび外部キー制約において、制約列リストでの列名の重複は許可されません。

- 子表の外部キー制約でON DELETE CASCADEを指定している場合、ユーザーは、子表のDELETE権限を明示的に必要とせずに、DELETE権限を持つ親表から行を削除できます。

- ON DELETE CASCADEトリガー・アクションを変更するには、外部キー制約を削除して再定義してください。

- キャッシュ表を参照する外部キーを持つ表は作成できません。

- UNIQUE列制約およびデフォルトの列の値は、マテリアライズド・ビューではサポートされていません。

- 表の主キーで使用する索引を変更するには、ALTER TABLE文を使用します。

- AS SelectQuery句を指定する場合:

- データ型およびデータ型の長さは、SelectQueryから導出されます。作成する表の列にデータ型を指定しないでください。

- SelectQueryで列を含む式ではなく列が選択された場合、TimesTenでは、新しい表の列に対して、選択された表の対応する列に明示的に作成されていたNOT NULL制約を定義します。

- 選択された表の列(主キーなど)でTimesTenにより暗黙的に作成されていたNOT NULL制約は、新しい表に引き継がれます。選択した表のNOT NULL制約を無効にするには、新しい列をNULLとして定義します。次に例を示します。

CREATE TABLE newtable (newcol NULL) AS SELECT (col) FROM tab;

- NOT INLINE/INLINE属性は新しい表に引き継がれます。

- 一意キー、外部キー、索引および列のデフォルト値は、新しい表に引き継がれません。

- SelectQueryのすべての式が式ではなく列である場合は、作成する表から列を省略できます。この場合、列の名前はSelectQueryの列と同じです。SelectQueryに単純な列参照ではなく式が含まれている場合は、列の別名を指定するか、またはCREATE TABLE文で列に名前を付けます。

- 作成する表に対して外部キーを指定しないでください。

- SelectQueryでSELECT FOR UPDATE句を指定しないでください。

- AS SelectQuery句を使用する場合、ORDER BY句はサポートされません。

- SelectQueryに集合演算子UNION、MINUSおよびINTERSECTを含めることはできません。

- レプリケートされた環境では、次のことに注意してください。
グローバル一時表を含む新しい表の作成時に表をアクティブ・スタンバイ・ペアに含めるには、アクティブ・データベースでCREATE TABLE文を実行する前に、DDL_REPLICATION_LEVELを2以上に設定し、DDL_REPLICATION_ACTIONをINCLUDEに設定します。この構成では、表はアクティブ・スタンバイ・ペアに含まれ、レプリケーション・スキームのすべてのデータベースにレプリケートされます。

DDL_REPLICATION_ACTIONをEXCLUDEに設定した場合、新しい表は、アクティブ・スタンバイ・ペアに含まれませんが、レプリケーション・スキームのすべてのデータベースにレプリケートされます。表はレプリケーション・スキームの一部にはならないため、その表で発行されたDMLはレプリケートされません。表に対してDMLレプリケーションを有効にするには、ALTER ACTIVE STANDBY PAIR ... INCLUDE TABLE文を実行して、表を含める必要があります。この場合、ALTER ACTIVE STANDBY PAIR ... INCLUDE TABLEを実行すると表の内容は切り捨てられるため、この文を実行する前に、表は空であり、すべてのデータベースに存在している必要があります。

詳細は、「ALTER SESSION」を参照してください。

- デフォルトでは、主キーを実現するために、範囲索引が作成されます。主キーに対してハッシュ索引を指定するには、UNIQUE HASH句を使用してください。

- アプリケーションで表の主キーを使用して範囲問合せを実行する場合は、UNIQUE HASH句を省略して、その表に対して範囲索引を選択してください。

- 主キーの完全一致検索のみをアプリケーションで実行する場合は、ハッシュ索引の方がレスポンス時間およびスループットが優れている場合があります。その場合は、UNIQUE HASH句を指定します。

- ハッシュ索引は、表が存在している間、ALTER TABLE文を使用してハッシュ索引がサイズ変更されるまで、または索引が削除されて再作成されるまで変更されない固定のサイズで作成されます。小さいハッシュ索引ほどハッシュの衝突が増えます。大きいハッシュ索引ほど衝突が少なくなりますが、メモリを消費しやすくなります。ハッシュ・キー比較は高速な操作であるため、少数のハッシュ衝突がTimesTenにパフォーマンスの問題を発生させることはありません。
ハッシュ索引のサイズが適性に設定されていることを確認するには、SET PAGES句のRowPagesパラメータの値により、アプリケーションで表の想定サイズを示す必要があります。この値は、表の想定行数を256で除算して計算します。たとえば、表に256,000行ある場合は、RowPagesに1000を指定します(256000/256=1000)。

- ハッシュ・キーには、最大16列を指定できます。

- ON DELETE CASCADEは、マテリアライズド・ビューのディテール表でサポートされています。子表に対して定義されたマテリアライズド・ビューがある場合、親表からの削除によって子表でカスケード削除が行われます。つまり、親表での削除により、マテリアライズド・ビューも変更されます。

- DELETE文によって報告される行の総数には、ON DELETE CASCADEアクションの結果、子表から削除された行は含まれません。

- ON DELETE CASCADE: 親表から子表へのパスが異なる場合があるため、次のルールが適用されます。

- 親表から子表へのすべてのパスを、deleteパスかdo not deleteパスのいずれかに統一します。deleteパスのすべての子表でON DELETE CASCADEを指定します。

- このルールは、1つの親表から複数の子表へ、または複数の親表から1つの子表へのパスには適用されません。

- ON DELETE CASCADEには、次の規則も適用されます。

- ある表にdeleteパスでアクセスする場合、その表のすべての子表にもdeleteパスでアクセスします。

- レプリケーションを含むON DELETE CASCADE: 次の制限が適用されます。

- ON DELETE CASCADEで指定された外部キーは、レプリケートされた表のマスターとサブスクライバの間で一致している必要があります。これは実行時に確認されます。エラーが発生すると、RECEIVERスレッドは処理を停止します。

- カスケード削除のツリーに含まれる表をレプリケートする場合は、ツリーに含まれるすべての表をレプリケートする必要があります。この制限は、レプリケーション・スキームを作成したとき、またはレプリケーション表のいずれかにON DELETE CASCADE付きの外部キーを追加したときにチェックされます。エラーが検出されると、処理は中断します。外部キー制約を変更する前に、まずレプリケーション・スキームを削除することが必要になる場合があります。

- レプリケートされた表で外部キーの追加や削除を行う前に、レプリケーション・エージェントを停止する必要があります。

- グローバル一時表のデータは現在の接続専用であり、ユーザー間で保護する必要はありません。このため、グローバル一時表にオブジェクト権限は必要ありません。

- 表のエージング・ポリシーを定義した後に、エージング・ポリシーをLRUから時間ベースに、または時間ベースからLRUに変更できません。最初にエージングを削除し、表を変更して新しいエージング・ポリシーを追加する必要があります。

- エージング・ポリシーは、エージング状態を変更するように定義する必要があります。

- 時間ベースのエージング・ポリシーの場合、エージング列を追加または変更できません。これは、NOT NULL列を追加または変更できないためです。

- 1つのシステムでLRUエージングと時間ベースのエージングの両方を組み合せて使用できます。LRUエージングのみを使用する場合、エージング・スレッドはデータベース全体に指定されたサイクルに基づいて起動します。一方、時間ベースのエージングのみを使用する場合、エージング・スレッドは最適な頻度に基づいて起動します。この頻度は、すべての表のCYCLE句に指定された値によって決定されます。LRUエージングと時間ベースのエージングの両方を使用する場合は、両方のタイプを組み合せて考慮した上でスレッドが起動します。

- LRUエージングでは、行がアクセスされているかまたは参照されているかどうかを、次のルールで判断します。

- SELECT文の結果セットを構築するために使用された行。

- INSERT ... SELECT文の結果セットを構築するために使用された行。

- 更新または削除対象の行。

- コマンドで参照される表に対してLRUエージングの削除や追加を行うと、コンパイルされたコマンドは無効と指定され、再コンパイルが必要になります。

- エージング状態にかかわらずエージング処理をすぐにスケジュールするには、ttAgingScheduleNowプロシージャをコールします。

- エージングの制限:

- LRUエージングと時間ベースのエージングは、マテリアライズド・ビューのディテール表ではサポートされていません。

- LRUエージングと時間ベースのエージングは、グローバル一時表ではサポートされていません。

- 時間ベースのエージングに使用されている列は削除できません。

- エージング・ポリシーとエージング状態は、すべてのレプリケーション・サイトで同じである必要があります。

- 外部キーによって関連付けられている表には、同じエージング・ポリシーを設定する必要があります。

- LRUエージングでは、子行がエージングの対象でない場合、この子行とその親行は削除されません。ON DELETE CASCADEの設定は無視されます。

- 時間ベースのエージングでは、親行がエージングの対象である場合、すべての子行が削除されます。ON DELETE CASCADEは、設定の有無にかかわらず無視されます。

表のインメモリー列圧縮

データをより効率的に格納する列レベルで表を圧縮できます。これは、列での重複する値の冗長な格納を削除し、全表スキャンを実行するSQL問合せのパフォーマンスを向上させます。

表の圧縮される1つ以上の列(圧縮列グループと呼ばれる)を定義できます。各表に1つ以上の圧縮列グループを定義できます。

各圧縮列グループに対して、圧縮列グループのすべての個別値の列を含むディクショナリ表が作成されます。圧縮列グループには、ディクショナリ表の適切な値の行へのポインタが含まれます。このポインタの幅は、ディクショナリ表に対して定義した最大エントリ数に応じて、1、2または4バイトです。そのため、圧縮されている列グループ内の列の幅の合計が、1、2または4バイトのポインタの幅より広い場合、およびこれらの列値に多くの重複する値が存在する場合は、表で使用される領域を削減しました。

図6-1に、ディクショナリ表の適切な行を指している、表の圧縮列グループを示します。

図6-1 表の圧縮

ディクショナリ表には、各個別値へのポインタの列があります。ユーザーが圧縮列グループの個別エントリの最大数を構成すると、圧縮列グループのサイズが次のように設定されます。

- エントリの最大数が255(2^8-1)の場合は1バイト。最大数が1から255の場合、ディクショナリのサイズは255(2^8-1)に設定され、圧縮列グループのポインタ列は1バイトになります。

- エントリの最大数が65,535(2^16-1)の場合は2バイト。最大数が256から65,535の場合、ディクショナリのサイズは65,535(2^16-1)に設定され、圧縮列グループのポインタ列は2バイトになります。

- エントリの最大数が4,294,967,295(2^32-1)の場合は4バイト。最大数が65,536から4,294,967,295の場合、ディクショナリのサイズは4,294,967,295(2^32-1)に設定され、圧縮列グループのポインタ列は4バイトになります。これがデフォルトです。

構文

TableCompressionの構文は、次のとおりです。

[COMPRESS (CompressColumns [,...])] OPTIMIZED FOR READ

CompressColumnsの構文は次のとおりです。

{ColumnDefinition | (ColumnDefinition [,...])} BY DICTIONARY
[MAXVALUES = CompressMax]

パラメータ

TableCompression構文には、次のパラメータがあります。

パラメータ

説明

COMPRESS (CompressColumns [,...])

圧縮が有効な表について圧縮列グループを定義します。表の1つ以上の列を含めることができます。ただし、1つの列は1つの圧縮列グループにのみ含めることができます。
圧縮列グループで複数の列を指定する場合、INLINE列のみがサポートされます。アウトライン列は、それが圧縮グループ内の唯一の列である場合のみ、圧縮グループに指定できます。

各圧縮列グループは、最大16列に制限されます。

OPTIMIZED FOR READ

CREATE TABLE文で指定すると、表は圧縮列グループに対して有効になります。圧縮列グループは、CREATE TABLE文を使用して表の作成時に追加するか、ALTER TABLE文を使用して後で追加できます。

BY DICTIONARY

各圧縮列グループの圧縮ディクショナリを定義します。

MAXVALUES = CompressMax

CompressMaxは、表の個別値の合計数であり、圧縮列グループ・ポインタ列のサイズを1、2または4バイトに設定し、ディクショナリ表のエントリの最大数のサイズを設定します。
ディクショナリ表の場合、NULLは1つの一意の値としてカウントされます。

CompressMaxは、1から2^32-1までの整数です。

MAXVALUES句を省略した場合の最大サイズのデフォルトは232-1であり、ポインタ列に4バイトが使用されます。値が2^32-1よりも大きい場合は、エラーがスローされます。

説明

- 圧縮列グループは、表の作成時に追加するか、ALTER TABLE文を使用して後で追加できます。ALTER TABLE文を使用して、圧縮列グループを削除できますが、グループ全体を削除する必要があります。

- キーに含まれる列の一部またはすべてが圧縮された、主キーまたは一意キーを作成できます。圧縮列を主キーまたは一意キーに含める場合、圧縮列グループに存在する列を含めることができますが、圧縮列グループのすべての列を含める必要はありません。また、異なる圧縮列グループの列を含めることができます。

- 索引は、表の任意の列に作成できます。これには、圧縮列や、別の圧縮列グループに存在する列が含まれます。

- LOB列は圧縮できません。

- レプリケートされた表、キャッシュ・グループ表、グリッド表またはグローバル一時表の列では、圧縮はサポートされません。CREATE TABLE AS SELECT文を使用し、その文でその表に対してインメモリー列圧縮を定義すると、表を作成できません。

- 圧縮が有効な表では、マテリアライズド・ビューおよびマテリアライズド・ビュー・ログを作成できません。

例

範囲索引がpartnumberに対して作成されます(主キーであるため)。

Command> CREATE TABLE price
> (partnumber INTEGER NOT NULL PRIMARY KEY,
> vendornumber INTEGER NOT NULL,
> vendpartnum CHAR(20) NOT NULL,
> unitprice DECIMAL(10,2),
> deliverydays SMALLINT,
> discountqty SMALLINT);
Command> INDEXES price;
Indexes on table SAMPLEUSER.PRICE:
PRICE: unique range index on columns:
PARTNUMBER
1 index found.
1 index found on 1 table.

ハッシュ索引は、主キーであるclubname列に作成されます。

CREATE TABLE recreation.clubs
(clubname CHAR(15) NOT NULL PRIMARY KEY,
clubphone SMALLINT,
activity CHAR(18))
UNIQUE HASH ON (clubname) PAGES = 30;

範囲索引は、membernameおよびclubの2つの列で作成されます(ともに主キーであるため)。

Command> CREATE TABLE recreation.members
> (membername CHAR(20) NOT NULL,
>  club CHAR(15) NOT NULL,
>  memberphone SMALLINT,
>  PRIMARY KEY (membername, club));
Command> INDEXES recreation.members;
Indexes on table RECREATION.MEMBERS:
MEMBERS: unique range index on columns:
MEMBERNAME
CLUB
1 index found on 1 table.

recreation.events表にはハッシュ索引は作成されません。

CREATE TABLE recreation.events
(sponsorclub CHAR(15),
event CHAR(30),
coordinator CHAR(20),
results VARBINARY(10000));

ハッシュ索引は、vendornumber列に作成されます。

CREATE TABLE purchasing.vendors
(vendornumber INTEGER NOT NULL PRIMARY KEY,
vendorname CHAR(30) NOT NULL,
contactname CHAR(30),
phonenumber CHAR(15),
vendorstreet CHAR(30) NOT NULL,
vendorcity CHAR(20) NOT NULL,
vendorstate CHAR(2) NOT NULL,
vendorzipcode CHAR(10) NOT NULL,
vendorremarks VARCHAR(60))
UNIQUE HASH ON (vendornumber) PAGES = 101;

ハッシュ索引は、membername列およびclub列で作成されます(ともに主キーであるため)。

CREATE TABLE recreation.members
(membername CHAR(20) NOT NULL,
club CHAR(15) NOT NULL,
memberphone SMALLINT,
PRIMARY KEY (membername, club))
UNIQUE HASH ON (membername, club) PAGES = 100;

ハッシュ索引は、firstname列およびlastname列に作成されます(ともにauthors表の主キーであるため)。外部キーは、authors表の主キーを参照するbooks表のauthorfirstnameとauthorlastname列に作成されます。

CREATE TABLE authors
(firstname VARCHAR(255) NOT NULL,
lastname VARCHAR(255) NOT NULL,
description VARCHAR(2000),
PRIMARY KEY (firstname, lastname))
UNIQUE HASH ON (firstname, lastname) PAGES=20;
CREATE TABLE books
(title VARCHAR(100),
authorfirstname VARCHAR(255),
authorlastname VARCHAR(255),
price DECIMAL(5,2),
FOREIGN KEY (authorfirstname, authorlastname)
REFERENCES authors(firstname, lastname));

次の文では、VARCHAR列のデフォルト文字を上書きし、1つのVARCHAR (10)列がNOT INLINEで、1つのVARCHAR (144)がINLINEである表が作成されます。

CREATE TABLE t1
(c1 VARCHAR(10) NOT INLINE NOT NULL,
c2 VARCHAR(144) INLINE NOT NULL);

次の文では、本のタイトルのUNIQUE列を持つ表が作成されます。

CREATE TABLE books
(title VARCHAR(100) UNIQUE,
authorfirstname VARCHAR(255),
authorlastname VARCHAR(255),
price DECIMAL(5,2),
FOREIGN KEY (authorfirstname, authorlastname)
REFERENCES authors(firstname, lastname));

次の文では、列x1のデフォルト値が1で、列dのデフォルト値がSYSDATEである表が作成されます。

CREATE TABLE t1
(x1 INT DEFAULT 1, d TIMESTAMP DEFAULT SYSDATE);

この例では、rangex表を作成し、主キーとしてcol1を定義します。デフォルトで範囲索引が作成されます。

Command> CREATE TABLE rangex (col1 TT_INTEGER PRIMARY KEY);
Command> INDEXES rangex;
Indexes on table SAMPLEUSER.RANGEX:
RANGEX: unique range index on columns:
COL1
1 index found
1 index found on 1 table.

次の文は、HRスキーマの親表および子表におけるON DELETE CASCADE句の使用を示しています。外部キーを持つ表は、ON DELETE CASCADEが有効になるように変更されています。

ALTER TABLE countries
ADD CONSTRAINT countr_reg_fk
FOREIGN KEY (region_id)
REFERENCES regions(region_id) ON DELETE CASCADE;
ALTER TABLE locations
ADD CONSTRAINT loc_c_id_fk
FOREIGN KEY (country_id)
REFERENCES countries(country_id) ON DELETE CASCADE;
ALTER TABLE departments
ADD CONSTRAINT dept_loc_fk
FOREIGN KEY (location_id)
REFERENCES locations (location_id) ON DELETE CASCADE;
ALTER TABLE employees
ADD CONSTRAINT     emp_dept_fk
FOREIGN KEY (department_id)
REFERENCES departments ON DELETE CASCADE;
ALTER TABLE employees
ADD CONSTRAINT     emp_job_fk
FOREIGN KEY (job_id)
REFERENCES jobs (job_id);
ALTER TABLE job_history
ADD CONSTRAINT     jhist_job_fk
FOREIGN KEY (job_id)
REFERENCES jobs;
ALTER TABLE job_history
ADD CONSTRAINT     jhist_emp_fk
FOREIGN KEY (employee_id)
REFERENCES employees ON DELETE CASCADE;
ALTER TABLE job_history
ADD CONSTRAINT     jhist_dept_fk
FOREIGN KEY (department_id)
REFERENCES departments ON DELETE CASCADE;
;

この例は、エージングにおいて、時間の単位がどのように機能するかを示しています。

存続時間が3 Daysの場合(単位はDay):

- (SYSDATE - ColumnValue) <= 3の場合、エージ・アウトされません。

- (SYSDATE - ColumnValue) > 3の場合、行はエージ・アウトの対象となります。

- (SYSDATE - ColumnValue) = 3 days, 22 hoursの場合、存続期間を3 Daysに指定すると、行はエージ・アウトされません。存続期間が72 Hoursと指定されていた場合は、行はエージ・アウトされます。

この例では、LRUエージングを使用して表を作成します。エージング状態は、デフォルトでONになっています。

CREATE TABLE agingdemo
(agingid NUMBER NOT NULL PRIMARY KEY,
name  VARCHAR2 (20)
)
AGING LRU;
Command> DESCRIBE agingdemo;
Table USER.AGINGDEMO:
Columns:
*AGINGID NUMBER NOT NULL
NAME VARCHAR2 (20) INLINE
AGING LRU ON
1 table found.
(primary key columns are indicated with *)

この例では、時間ベースのエージングを使用する表を作成します。存続期間は3 Daysです。サイクルは指定されていないため、デフォルトで5分です。エージング状態はOFFです。

CREATE TABLE agingdemo2
(agingid NUMBER NOT NULL PRIMARY KEY,
name  VARCHAR2 (20),
agingcolumn TIMESTAMP NOT NULL
)
AGING USE agingcolumn LIFETIME 3 DAYS OFF;
Command> DESCRIBE agingdemo2;
Table USER.AGINGDEMO2:
Columns:
*AGINGID NUMBER NOT NULL
NAME VARCHAR2 (20) INLINE
AGINGCOLUMN TIMESTAMP (6) NOT NULL
Aging use AGINGCOLUMN lifetime 3 days cycle 5 minutes off
1 table found.
(primary key columns are indicated with *)

この例では、エラー・メッセージが生成されます。これは、エージング・ポリシーを一度作成すると、変更できないことを示しています。エージングを削除して、再定義する必要があります。

CREATE TABLE agingdemo2
(agingid NUMBER NOT NULL PRIMARY KEY,
name  VARCHAR2 (20),
agingcolumn TIMESTAMP NOT NULL
)
AGING USE agingcolumn LIFETIME 3 DAYS OFF;
ALTER TABLE agingdemo2
ADD AGING LRU;
2980: Cannot add aging policy to a table with an existing aging policy. Have to
drop the old aging first
The command failed.
DROP aging on the table and redefine with LRU aging.
ALTER TABLE agingdemo2
DROP AGING;
ALTER TABLE agingdemo2
ADD AGING LRU;
Command> DESCRIBE agingdemo2;
Table USER.AGINGDEMO2:
Columns:
*AGINGID                         NUMBER NOT NULL
NAME                            VARCHAR2 (20) INLINE
AGINGCOLUMN                     TIMESTAMP (6) NOT NULL
Aging lru on
1 table found.
(primary key columns are indicated with *)

時間ベースのエージングを指定して表を作成してみます。TT_DATEデータ型と3時間のLIFETIMEを指定してエージング列を定義します。LIFETIME単位はDAYSで指定する必要があるため、エラーが生成されます。

Command> CREATE TABLE aging1 (col1 TT_INTEGER PRIMARY KEY,
col2 TT_DATE NOT NULL) AGING USE col2 LIFETIME 3 HOURS;
2977: Only DAY lifetime unit is allowed with a TT_DATE column
The command failed.

AS SelectQuery句を使用して、emp表を作成します。employees表から、employee_idが100から105までのlast_nameを選択します。empに6行が挿入されたことが示されます。返される必要のある行を確認するために、最初にSELECT文を発行します。

Command> SELECT last_name FROM employees
WHERE employee_id BETWEEN 100 AND 105;
< King >
< Kochhar >
< De Haan >
< Hunold >
< Ernst >
< Austin >
6 rows found.
Command> CREATE TABLE emp AS SELECT last_name FROM employees
>WHERE employee_id BETWEEN 100 AND 105;
6 rows inserted.
Command> SELECT * FROM emp;
< King >
< Kochhar >
< De Haan >
< Hunold >
< Ernst >
< Austin >
6 rows found.

AS SelectQueryを使用してtotalsal表を作成します。salaryを合計して、結果をtotalsalaryに挿入します。SelectQuery式の別名sを定義します。

Command> CREATE TABLE totalsal AS SELECT SUM (salary) s FROM employees;
1 row inserted.
Command> SELECT * FROM totalsal;
< 691400 >
1 row found.

AS SelectQueryを使用して、commission_pct列で定義された表を作成します。デフォルト値を.3に設定します。最初に、commission_pct列がNUMBER (2,2)型であることを示すためにemployees表にDESCRIBEを実行します。c_pct表のcommission_pct列は、employees表のcommission_pct列からNUMBER (2,2)型を継承します。

Command> DESCRIBE employees;
Table SAMPLEUSER.EMPLOYEES:
Columns:
*EMPLOYEE_ID                     NUMBER (6) NOT NULL
FIRST_NAME                      VARCHAR2 (20) INLINE
LAST_NAME                       VARCHAR2 (25) INLINE NOT NULL
EMAIL                           VARCHAR2 (25) INLINE UNIQUE NOT NULL
PHONE_NUMBER                    VARCHAR2 (20) INLINE
HIRE_DATE                       DATE NOT NULL
JOB_ID                          VARCHAR2 (10) INLINE NOT NULL
SALARY                          NUMBER (8,2)
COMMISSION_PCT                  NUMBER (2,2)
MANAGER_ID                      NUMBER (6)
DEPARTMENT_ID                   NUMBER (4)

1 table found.
(primary key columns are indicated with *)
Command> CREATE TABLE c_pct (commission_pct DEFAULT .3) AS SELECT
commission_pct FROM employees;
107 rows inserted.
Command> DESCRIBE c_pct;

Table SAMPLEUSER.C_PCT:
Columns:
COMMISSION_PCT                 NUMBER (2,2) DEFAULT .3

1 table found.
(primary key columns are indicated with *)

次の例では、job_idが圧縮されたemployees表を作成します。

Command> CREATE TABLE EMPLOYEES
(EMPLOYEE_ID NUMBER (6) PRIMARY KEY,
FIRST_NAME VARCHAR2(20),
LAST_NAME VARCHAR2(25) NOT NULL,
EMAIL VARCHAR2(25) NOT NULL,
PHONE_NUMBER VARCHAR2(20),
HIRE_DATE DATE NOT NULL,
JOB_ID VARCHAR2(10) NOT NULL,
SALARY NUMBER (8,2),
COMMISSION_PCT NUMBER (2,2),
MANAGER_ID NUMBER(6),
DEPARTMENT_ID NUMBER(4))
COMPRESS (JOB_ID BY DICTIONARY) OPTIMIZED FOR READ;

Command> DESCRIBE EMPLOYEES;

Table MYSCHEMA.EMPLOYEES:
Columns:
*EMPLOYEE_ID                     NUMBER (6) NOT NULL
FIRST_NAME                      VARCHAR2 (20) INLINE
LAST_NAME                       VARCHAR2 (25) INLINE NOT NULL
EMAIL                           VARCHAR2 (25) INLINE NOT NULL
PHONE_NUMBER                    VARCHAR2 (20) INLINE
HIRE_DATE                       DATE NOT NULL
JOB_ID                          VARCHAR2 (10) INLINE NOT NULL
SALARY                          NUMBER (8,2)
COMMISSION_PCT                  NUMBER (2,2)
MANAGER_ID                      NUMBER (6)
DEPARTMENT_ID                   NUMBER (4)
COMPRESS ( JOB_ID BY DICTIONARY ) OPTIMIZED FOR READ

1 table found.
(primary key columns are indicated with *)

次の例では、ディクショナリ表に3つのサイズがあることを示します。エントリの最大数に指定した値は、次のサイズに丸められます。たとえば、役職IDの最大数として400を指定すると、最大で65535エントリのディクショナリ表が作成されます。デフォルトのサイズである2^32-1は、DESCRIBEの出力に表示されません。

Command> CREATE TABLE employees
(employee_id NUMBER(6) PRIMARY KEY,
first_name VARCHAR2(20),
last_name VARCHAR2(25),
email VARCHAR2(25) NOT NULL,
job_id VARCHAR2(10) NOT NULL,
manager_id NUMBER(6),
department_id NUMBER(4))
COMPRESS (last_name BY DICTIONARY MAXVALUES=70000,
job_id BY DICTIONARY MAXVALUES=400,
department_id BY DICTIONARY MAXVALUES=100)
OPTIMIZED FOR READ;

Command> DESCRIBE employees;
Table MYSCHEMA.EMPLOYEES:
Columns:
*EMPLOYEE_ID                     NUMBER (6) NOT NULL
FIRST_NAME                      VARCHAR2 (20) INLINE
LAST_NAME                       VARCHAR2 (25) INLINE
EMAILS                          VARCHAR2 (25) INLINE NOT NULL
JOB_ID                          VARCHAR2 (10) INLINE NOT NULL
MANAGER_ID                      NUMBER (6)
DEPARTMENT_ID                   NUMBER (4)
COMPRESS ( LAST_NAME BY DICTIONARY,
JOB_ID BY DICTIONARY MAXVALUES=65535,
DEPARTMENT_ID BY DICTIONARY MAXVALUES=255 ) OPTIMIZED FOR READ

1 table found.
(primary key columns are indicated with *)

関連項目

「ALTER TABLE」
「DROP TABLE」
「TRUNCATE TABLE」
「UPDATE」

CREATE USER

CREATE USER文は、TimesTenデータベースのユーザーを作成します。

必要な権限

ADMIN

SQL構文

CREATE USER user IDENTIFIED BY {password | "password"}
CREATE USER user IDENTIFIED EXTERNALLY

パラメータ

パラメータ

説明

user

データベースに追加されるユーザーの名前。

IDENTIFIED

内部ユーザーのパスワードまたはユーザーが外部であることを指定するための識別句。

BY {password |"password"}

内部ユーザーに対してTimesTenのパスワードを指定する必要があります。内部ユーザー名を使用してデータベースを処理するには、ユーザーがこのパスワードを指定する必要があります。

EXTERNALLY

TimesTenデータベースに対するオペレーティング・システムのuserを識別します。データベースを外部ユーザーとして操作するには、オペレーティング・システムまたはネットワークで認証されているユーザー名と一致するTimesTen外部ユーザー名がプロセスに必要です。ユーザーはログイン時にオペレーティング・システムによって認証されているため、TimesTenではパスワードは必要ありません。

説明

- データベース・ユーザーには、内部ユーザーまたは外部ユーザーを指定できます。

- 内部ユーザーは、TimesTenデータベース用に定義されるユーザーです。

- 外部ユーザーは、オペレーティング・システムなどの外部権限によって定義されるユーザーです。外部ユーザーにTimesTenパスワードを割り当てることはできません。

- パスワードは大文字と小文字が区別されます。

- ユーザーを作成すると、ユーザーにはPUBLICに付与されている権限が付与され、その他の権限は付与されません。

- クライアント/サーバー接続を介してユーザーを作成することはできません。ユーザーを作成する場合は、直接接続を使用する必要があります。

- TimesTenでは、ユーザーbradはユーザー"brad"と同じになります。いずれの場合も、ユーザーの名前はBRADと作成されます。

- ユーザー名は、TT_CHARデータ型です。

- レプリケーションが構成されている場合、この文はレプリケートされます。

例

パスワードが"secret"の内部ユーザーterryを作成するには、次のように実行します。

CREATE USER terry IDENTIFIED BY "secret";
User created.

ユーザーterryが作成されたことを確認します。

Command> SELECT * FROM sys.all_users WHERE username='TERRY';
< TERRY, 11, 2009-05-12 10:28:04.610353 >
1 row found.

外部ユーザーpatをTimesTenデータベースに指定するには、次のように実行します。

CREATE USER pat IDENTIFIED EXTERNALLY;
User created.

関連項目

「ALTER USER」
「DROP USER」
「GRANT」
「REVOKE」

CREATE VIEW

CREATE VIEW文は、SelectQuery句で指定された表に対するビューを作成します。ビューとは、1つ以上のディテール表に基づいた論理表のことです。ビュー自体にデータは含まれていません。ビューは、ディテール表からすでに計算されたデータを含むマテリアライズド・ビューと区別するために、非マテリアライズド・ビューと呼ばれることがあります。

アクティブ・スタンバイ・ペアのレプリケートされた環境で、DDL_REPLICATION_LEVELが3以上の場合にアクティブ・データベースでCREATE VIEWを実行すると、ビューはレプリケーション・スキームのすべてのデータベースにレプリケートされます。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアでのDDL変更に関する説明を参照してください。

必要な権限

文を実行するユーザーには、CREATE VIEW権限(所有者の場合)または別のユーザーのビューの場合はCREATE ANY VIEW(非所有者の場合)が必要です。

ビューの所有者には、ディテール表に対するSELECT権限が必要です。

SQL構文

CREATE VIEW [Owner.]ViewName AS SelectQuery

パラメータ

パラメータ

説明

[Owner.]ViewName

新しいビューに割り当てる名前。

SelectQuery

ビューで使用される、ディテール表の列を選択します。ビューに対して索引を作成することも可能です。

SELECT問合せの制限

ビューの定義に使用される問合せには、いくつかの制限があります。

- ビュー定義のSELECT *問合せは、ビューの作成時に実行されます。ビューが作成された後に追加された列は、ビューに反映されません。

- 次のものはビューの作成に使用するSELECT文で使用しないでください。

- FIRST

- ORDER BY
使用した場合は、CREATE VIEWで無視されます。結果はソートされません。

- 引数

- SELECT構文のリストの各式には、一意の名前が必要です。列の別名が定義されていないかぎり、単純にその列の名前が使用されます。ROWIDは式とみなされるため、別名が必要です。

- ビューを作成する場合にSELECT FOR UPDATEを使用しないでください。

- 特定のTimesTen問合せ制限は、非マテリアライズド・ビューの作成時に確認されません。これらの制限に違反しているビューの作成が可能な場合がありますが、その後、実行した文でこのビューが参照されると、エラーが戻されます。

- ビューがSELECT文のFROM句で参照されると、ビューの名前は、その定義によって解析時に導出表に置き換えられます。導出表を使用しなくても適切な問合せになるように、元のSELECT問合せの同じ句にビューのすべての句をマージすることができない場合、導出表の内容がマテリアライズされます。たとえば、ビューと参照元のSELECTで集計が指定されている場合は、その結果が選択の他の表に結合される前に、ビューがマテリアライズされます。

- ビューを削除するには、DROP VIEW文を使用します。

- ビューの変更にALTER TABLE文を使用することはできません。

- ビューの参照は、ディテール表が削除または変更されているために失敗することがあります。

例

employees表から非マテリアライズド・ビューを作成します。

Command> CREATE VIEW v1 AS SELECT employee_id, email FROM employees;
Command> SELECT FIRST 5 * FROM v1;
< 100, SKING >
< 101, NKOCHHAR >
< 102, LDEHAAN >
< 103, AHUNOLD >
< 104, BERNST >
5 rows found.

表t1の集計問合せから、列max1を持つ非マテリアライズド・ビューtviewを作成します。

CREATE VIEW tview (max1) AS SELECT MAX(x1) FROM t1;

関連項目

「CREATE MATERIALIZED VIEW」
「CREATE TABLE」
「DROP VIEW」

DELETE

DELETE文は、表から行を削除します。

必要な権限

表の所有者に必要な権限はありません。

別のユーザーの表の場合は表に対するDELETEが必要です。

SQL構文

DELETE [hint] [FIRST NumRows] FROM [Owner.]TableName [CorrelationName]
[WHERE SearchCondition]
[RETURNING|RETURN Expression[,...]INTO DataItem[,...]]

パラメータ

パラメータ

説明

hint

DELETE文に文レベルのオプティマイザ・ヒントを指定します。ヒントの詳細は、「文レベルのオプティマイザ・ヒント」を参照してください。

FIRST NumRows

削除する行の数を指定します。FIRST NumRowsは、副問合せの文ではサポートされていません。NumRowsには、正のINTEGERか動的パラメータのプレースホルダを指定する必要があります。動的パラメータのプレースホルダの構文は、?または:DynamicParameterです。動的パラメータの値は、文の実行時に設定されます。

[Owner.]TableName [CorrelationName]

検索条件を満たす行を削除する表を指定します。
[Owner.]TableNameには、削除する表を指定します。

CorrelationNameは、直前で指定した表の別名を指定します。相関名を使用して、DELETE文の他の場所で表を参照します。CorrelationNameの有効範囲は、それが使用されているSQL文です。基本名の構文ルールを満たしている必要があります。「基本名」を参照してください。

SearchCondition

削除する行を指定します。検索条件に一致する行がない場合、表は変更されません。WHERE句を省略した場合は、すべての行が削除されます。検索条件には副問合せを含めることができます。

Expression

有効な式の構文。第3章「式」を参照してください。

DataItem

取得したExpression値を格納するホスト変数またはPL/SQL変数。

説明

- 表の行をすべて削除した場合、表は空になりますが、DROP TABLE文を実行しないかぎり、表自体は削除されません。

- 外部キー制約に違反するDELETE処理はエラーになります。外部キー制約の詳細は、「CREATE TABLE」を参照してください。

- DELETE文によって報告される行の総数には、ON DELETE CASCADEアクションの結果、子表から削除された行は含まれません。

- 子表の外部キー制約でON DELETE CASCADEを指定している場合、ユーザーは、子表のDELETE権限を明示的に必要とせずに、DELETE権限を持つ親表から行を削除できます。

- RETURNING句の制限:

- 各Expressionは単純な式である必要があります。集計関数はサポートされません。

- 順序番号はOUTパラメータに戻せません。

- ROWNUMおよび副問合せは、RETURNING句では使用できません。

- RETURNING句のパラメータは、DELETE文のいずれの場所とも重複できません。

- RETURNING句を使用して複数行を戻すには、PL/SQL BULK COLLECT機能が必要です。BULK COLLECTの詳細は、『Oracle TimesTen In-Memory Database PL/SQL開発者ガイド』のFORALLおよびBULK COLLECT操作に関する項を参照してください。

- PL/SQLでは、RETURNING句はWHERE CURRENT処理と一緒には使用できません。

例

発注件数が50未満の行をすべて削除します。

DELETE FROM purchasing.orderitems
WHERE quantity < 50;

idが主キーでない場合、次の問合せはすべての重複する注文を削除します。

DELETE FROM orders a
WHERE EXISTS (SELECT 1 FROM orders b
WHERE a.id = b.id and a.rowid < b.rowid);

次の順序で文を指定すると、外部キー違反が発生します。

CREATE TABLE master (name CHAR(30), id CHAR(4) NOT NULL PRIMARY KEY);
CREATE TABLE details
(masterid CHAR(4),description VARCHAR(200),
FOREIGN KEY (masterid) REFERENCES master(id));
INSERT INTO master('Elephant', '0001');
INSERT INTO details('0001', 'A VERY BIG ANIMAL');
DELETE FROM master WHERE id = '0001';

ビジーな表を削除しようとするとエラーが発生します。この例では、t1はビジーな表であり、親表とそれに基づく外部キー制約となっています。

CREATE TABLE t1 (a INT NOT NULL, b INT NOT NULL,
PRIMARY KEY (a));
CREATE TABLE t2 (c INT NOT NULL,
FOREIGN KEY (c) REFERENCES t1(a));
INSERT INTO t1 VALUES (1,1);
INSERT INTO t2 VALUES (1);
DELETE FROM t1;

次のエラーが返されます。

SQL ERROR (3001):  Foreign key violation [TTFOREIGN_0] a row in child table T2
has a parent in the delete range.

employeesから従業員を削除します。empidおよびnameをemployee_idおよびlast_nameと同じデータ型の変数として宣言します。行を削除し、employee_idおよびlast_nameを変数内に戻します。正しい行が削除されたことを確認します。

Command> VARIABLE empid NUMBER(6) NOT NULL;
Command> VARIABLE name VARCHAR2(25) INLINE NOT NULL;
Command> DELETE FROM employees WHERE last_name='Ernst'
> RETURNING employee_id, last_name INTO :empid,:name;
1 row deleted.
Command> PRINT empid name;
EMPID                : 104
NAME                 : Ernst

DROPACTIVE STANDBY PAIR

この文は、アクティブ・スタンバイ・ペア・レプリケーション・スキームを削除します。

必要な権限

ADMIN

SQL構文

DROP ACTIVE STANDBY PAIR

パラメータ

DROP ACTIVE STANDBY PAIRに、パラメータはありません。

説明

アクティブ・スタンバイ・ペアは削除されますが、表、キャッシュ・グループ、マテリアライズド・ビューなどのすべてのオブジェクトは、文が発行されたデータベースにまだ存在しています。

TimesTenでOracle Clusterwareを使用する場合は、DROP ACTIVE STANDBY PAIR文は実行できません。

関連項目

「ALTER ACTIVE STANDBY PAIR」
「CREATE ACTIVE STANDBY PAIR」

DROP CACHE GROUP

DROP CACHE GROUP文は、キャッシュ・グループに関連付けられている表を削除して、CACHE_GROUPシステム表からキャッシュ・グループの定義を削除します。

必要な権限

キャッシュ・グループの所有者に必要な権限はありません。

キャッシュ・グループの所有者でない場合は、DROP ANY CACHE GROUP、

キャッシュ・グループの少なくとも1つの表が現在のユーザーによって所有されていない場合は、DROP ANY TABLEが必要です。

SQL構文

DROP CACHE GROUP [Owner.]GroupName

パラメータ

パラメータ

説明

[Owner.]GroupName

削除されるキャッシュ・グループの名前です。

説明

- 使用中のキャッシュ・グループ表を削除しようとすると、エラーが返されます。

- ASYNCHRONOUS WRITETHROUGHキャッシュ・グループは、レプリケーション・エージェントの実行中には削除できません。

- 読取り専用キャッシュ・グループおよびAUTOREFRESH属性を持つキャッシュ・グループに対して自動的にインストールされるOracle Databaseオブジェクトは、キャッシュ・エージェントによってアンインストールされます。DROP CACHE GROUP操作時にキャッシュ・エージェントが実行中でない場合、Oracle Databaseオブジェクトは、キャッシュ・エージェントの次の起動時にアンインストールされます。

- DROP CACHE GROUP文はシリアライズ可能分離レベルでは実行できません。実行しようとするとエラー・メッセージが返されます。

- DROP CACHE GROUP文を実行し、現在実行中の自動リフレッシュ操作がある場合、次のような結果になります。

- LockWaitの間隔が0の場合、DROP CACHE GROUP文はロックのタイムアウト・エラーで失敗します。

- LockWaitの間隔が0以外の場合、現在のトランザクションは自動リフレッシュされず(ロールバックされ)、DROP文の処理が続行されます。これは、同じ自動リフレッシュ間隔を持つすべてのキャッシュ・グループに影響します。

例

DROP CACHE GROUP westerncustomers;

関連項目

「ALTER CACHE GROUP」
「CREATE CACHE GROUP」

DROP FUNCTION

DROP FUNCTION文は、データベースからスタンドアロンのストアド・ファンクションを削除します。この文を使用してパッケージに含まれるファンクションを削除しないでください。

必要な権限

ファンクションの所有者に必要な権限はありません。

別のユーザーのファンクションの場合はDROP ANY PROCEDUREが必要です。

SQL構文

DROP FUNCTION [Owner.]FunctionName

パラメータ

パラメータ

説明

[Owner.]FunctionName

削除するファンクションの名前です。

説明

- ファンクションを削除すると、削除されたファンクションに依存するオブジェクトは無効になります。その後、それらのいずれかのオブジェクトを参照すると、TimesTenではオブジェクトの再コンパイルが試行され、削除したファンクションを再作成していない場合、エラー・メッセージが返されます。

- この文を使用してパッケージに含まれるファンクションを削除しないでください。パッケージを削除するか、またはOR REPLACE句を含むCREATE PACKAGE文を使用して、ファンクションを含まないパッケージを再定義します。

- DROP FUNCTION文を使用するには、データベースでPL/SQLを有効にしておく必要があります。データベースでPL/SQLを有効にしていない場合、エラーがスローされます。

例

次の文は、ファンクションmyfuncを削除し、myfuncに依存するすべてのオブジェクトを無効にします。

Command> DROP FUNCTION myfunc;

Function dropped.

データベースでPL/SQLが無効になっている場合、TimesTenによって次のエラーが返されます。

Command> DROP FUNCTION myfunc;
8501: PL/SQL feature not installed in this TimesTen database
The command failed.

関連項目

CREATE FUNCTION

DROP INDEX

DROP INDEX文は、指定した索引を削除します。

必要な権限

索引の所有者に必要な権限はありません。

別のユーザーの索引の場合はDROP ANY INDEXが必要です。

SQL構文

DROP INDEX [Owner.]IndexName [FROM [Owner.]TableName]

パラメータ

パラメータ

説明

[Owner.]IndexName

削除する索引の名前です。索引を含む表の所有者名を指定できます。

[Owner.]TableName

索引を作成した表の名前です。

説明

- ビジーな索引(使用中の索引、または外部キーを適用する索引)を削除しようとすると、エラーが発生します。外部キーを削除して、関連付けられた索引を削除するには、ALTER TABLE文を使用します。

- 索引がUNIQUE列の制約を使用して作成される場合は、ALTER TABLE DROP UNIQUE文を使用して制約を削除することによってのみ、この索引を削除できます。UNIQUE列の制約の詳細は、「CREATE TABLE」を参照してください。

- コミットされていないトランザクションでのDROP INDEX操作がアクティブな場合(またはアクティブだった場合)、その索引にアクセスしないDML操作を実行する他のトランザクションはブロックされます。

- 索引を削除した場合、その索引を使用する準備された文は、次にその文を実行する際に自動的に再準備されます。

- 表名を指定しない場合、指定した所有者または暗黙的な所有者の索引名は一意である必要があります。指定した表または所有者が存在しない場合、プログラムを現在実行しているユーザーが暗黙的な所有者となります。

- 索引の所有者を指定せずに表を指定した場合、表の所有者がデフォルトの所有者となります。

- 表が指定されており、表の所有者が指定されていない場合、プログラムを実行している現在のユーザーがデフォルトの表の所有者となります。

- 表と索引の所有者は、同じである必要があります。

- 他の接続が所有する空でないインスタンスが一時表にある場合、別の接続によって一時表から索引を削除することはできません。

- 索引がアクティブ・スタンバイ・ペア間でレプリケートされる場合で、DDL_REPLICATION_LEVELが2以上の場合は、DROP INDEX文を使用して、レプリケーション・スキームのスタンバイ・ペアから索引を削除します。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアでのDDL変更に関する説明を参照してください。

例

次のいずれかの文を使用して、orderitems表で定義した索引partsorderedindexを削除します。

DROP INDEX partsorderedindex
FROM purchasing.orderitems;

または

DROP INDEX purchasing.partsorderedindex;

関連項目

CREATE INDEX

DROP MATERIALIZED VIEW

DROP MATERIALIZED VIEW文は、指定されたマテリアライズド・ビューを、それに関連付けられたハッシュ索引および範囲索引とともに削除します。

必要な権限

ビューの所有者であるか、またはDROP ANY MATERIALIZED VIEW (非所有者の場合)および

表の所有者であるか、またはDROP ANY TABLE(非所有者の場合)および

ビューに索引がある場合は、索引の所有者であるか、またはDROP ANY INDEX(非所有者の場合)。

SQL構文

DROP MATERIALIZED VIEW [Owner.]ViewName

パラメータ

パラメータ

説明

[Owner.]ViewName

削除するマテリアライズド・ビューを指定します。

説明

DROP MATERIALIZED VIEW操作を実行すると、ディテール表が更新されてロックされます。ディテール表がすでに別のトランザクションによってロックされている場合は、エラーが発生することがあります。

例

次の文では、custorderマテリアライズド・ビューが削除されます。

DROP MATERIALIZED VIEW custorder;

関連項目

CREATE MATERIALIZED VIEW

DROP MATERIALIZED VIEW LOG

DROP MATERIALIZED VIEW LOG文は、ディテール表のマテリアライズド・ビュー・ログを削除します。CREATE MATERIALIZED VIEW LOG文で作成されたグローバル一時表も削除します。

必要な権限

表の所有者に必要な権限はありません。

別のユーザーの表の場合はDROP ANY TABLEが必要です。

SQL構文

DROP MATERIALIZED VIEW LOG ON [Owner.]TableName

パラメータ

パラメータ

説明

[Owner.]TableName

マテリアライズド・ビュー・ログが作成されたディテール表の名前です。

説明

この文は、指定したディテール表のマテリアライズド・ビュー・ログを削除します。リフレッシュのログに依存する非同期マテリアライズド・ビューがある場合、マテリアライズド・ビュー・ログを削除することはできません。

例

DROP MATERIALIZED VIEW LOG ON employees;

関連項目

「CREATE MATERIALIZED VIEW LOG」
「CREATE MATERIALIZED VIEW」
「DROP VIEW」

DROP PACKAGE [BODY]

DROP PACKAGE文は、データベースからストアド・パッケージを削除します。仕様と本体の両方を削除します。DROP PACKAGE BODYは、パッケージの本体のみを削除します。

必要な権限

パッケージの所有者に必要な権限はありません。

別のユーザーのパッケージの場合はDROP ANY PROCEDUREが必要です。

SQL構文

DROP PACKAGE [BODY] [Owner.]PackageName

パラメータ

パラメータ

説明

PACKAGE [BODY]

BODYを指定すると、パッケージ本体のみを削除できます。パッケージの仕様と本体の両方を削除するには、BODYを省略します。

[Owner.]PackageName

削除するパッケージの名前です。

説明

- パッケージの本体のみを削除した場合、依存するオブジェクトは無効になりません。ただし、パッケージ仕様で宣言されたいずれかのプロシージャまたはストアド・ファンクションは、パッケージ本体を再作成するまで実行できません。

- パッケージ仕様に依存するオブジェクトはすべて無効になります。その後、それらのいずれかのオブジェクトを参照すると、TimesTenではオブジェクトの再コンパイルが試行され、削除したパッケージを再作成していない場合、エラーが戻されます。

- この文を使用してパッケージから単一のオブジェクトを削除しないでください。かわりに、OR REPLACE句を含むCREATE PACKAGE文およびCREATE PACKAGE BODY文を使用して、オブジェクトを含まないパッケージを再作成します。

- DROP PACKAGE [BODY]文を使用するには、データベースでPL/SQLを有効にしておく必要があります。データベースでPL/SQLを有効にしていない場合、エラーが返されます。

例

次の文は、パッケージsamplePackageの本体を削除します。

Command> DROP PACKAGE BODY SamplePackage;
Package body dropped.

パッケージsamplePackageの仕様と本体の両方を削除するには、次の文を使用します。

Command> DROP PACKAGE samplepackage;
Package dropped.

関連項目

CREATE PACKAGE

DROP PROCEDURE

DROP PROCEDURE文は、データベースからスタンドアロンのストアド・プロシージャを削除します。この文を使用してパッケージに含まれるプロシージャを削除しないでください。

必要な権限

プロシージャの所有者に必要な権限はありません。

別のユーザーのプロシージャの場合はDROP ANY PROCEDUREが必要です。

SQL構文

DROP PROCEDURE [Owner.]ProcedureName

パラメータ

パラメータ

説明

[Owner.]ProcedureName

削除するプロシージャの名前です。

説明

- プロシージャを削除すると、削除されたプロシージャに依存するオブジェクトは無効になります。その後、それらのいずれかのオブジェクトを参照すると、TimesTenではオブジェクトの再コンパイルが試行され、削除したプロシージャを再作成していない場合、エラー・メッセージが返されます。

- この文を使用してパッケージに含まれるプロシージャを削除しないでください。パッケージを削除するか、またはOR REPLACE句を含むCREATE PACKAGE文を使用して、プロシージャを含まないパッケージを再定義します。

- DROP PROCEDURE文を使用するには、データベースでPL/SQLを有効にしておく必要があります。データベースでPL/SQLを有効にしていない場合、エラーがスローされます。

例

次の文は、プロシージャmyprocを削除し、myprocに依存するすべてのオブジェクトを無効にします。

Command> DROP PROCEDURE myproc;
Procedure dropped.

データベースでPL/SQLが無効になっている場合、TimesTenによって次のエラーが返されます。

Command> DROP PROCEDURE myproc;

8501: PL/SQL feature not installed in this TimesTen databaseThe command failed.

関連項目

CREATE PROCEDURE

DROP REPLICATION

DROP REPLICATION文は、クラシック・レプリケーション・スキームを破棄して、実行中のデータベースから削除します。

必要な権限

ADMIN

SQL構文

DROP REPLICATION [Owner.]ReplicationSchemeName

パラメータ

パラメータ

説明

[Owner.]ReplicationSchemeName

クラシック・レプリケーション・スキームに割り当てる名前です。

説明

データベースの最新のレプリケーション・スキームを削除しても、レプリケートされた表は削除されません。これらの表は、レプリケーション・スキームの定義の有無にかかわらず、データベース内に継続して保持されます。

例

次の文は、実行中のデータベースからクラシック・レプリケーション・スキームrの情報を削除します。

DROP REPLICATION r;

関連項目

「ALTER REPLICATION」
「CREATE REPLICATION」

DROP SEQUENCE

DROP SEQUENCE文は、既存の順序番号ジェネレータを削除します。

順序がアクティブ・スタンバイ・ペア間でレプリケートされる場合で、DDL_REPLICATION_LEVELが3以上の場合は、DROP SEQUENCE文によって、レプリケーション・スキームのすべてのデータベースのアクティブ・スタンバイ・ペアから順序を削除します。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアでのDDL変更に関する説明を参照してください。

必要な権限

順序の所有者に必要な権限はありません。

別のユーザーの順序の場合はDROP ANY SEQUENCEが必要です。

SQL構文

DROP SEQUENCE [Owner.]SequenceName

パラメータ

パラメータ

説明

[Owner.]SequenceName

順序番号ジェネレータの名前です。

説明

- 順序は、使用中でも削除できます。

- TimesTenにはALTER SEQUENCE文はありません。順序を変更する場合は、DROP SEQUENCE文を使用してから、同じ名前の順序を新規作成します。たとえば、MINVALUEを変更する場合、順序を削除し、同じ名前で必要なMINVALUEを持つ順序を再度作成します。

- 順序がレプリケーション・スキームに含まれている場合は、ALTER REPLICATION文を使用してレプリケーション・スキームから順序を削除します。次にDROP SEQUENCE文を使用して順序を削除します。

例

次の文は、mysequenceを削除します。

DROP SEQUENCE mysequence;

関連項目

CREATE SEQUENCE

DROP SYNONYM

DROP SYNONYM文は、データベースからシノニムを削除します。

シノニムがアクティブ・スタンバイ・ペア間でレプリケートされる場合で、DDL_REPLICATION_LEVELが2以上の場合は、DROP SYNONYM文によって、レプリケーション・スキームのすべてのデータベースのアクティブ・スタンバイ・ペアからシノニムを削除します。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアでのDDL変更に関する説明を参照してください。

必要な権限

プライベート・シノニムをその所有者が削除する場合は、必要な権限はありません。別のユーザーのプライベート・シノニムを削除するには、DROP ANY SYNONYM権限が必要です。

PUBLICシノニムを削除するには、DROP PUBLIC SYNONYM権限が必要です。

SQL構文

プライベート・シノニムを削除するには、次の構文を使用します。

DROP SYNONYM [Owner.]SynonymName

パブリック・シノニムを削除するには、次の構文を使用します。

DROP PUBLIC SYNONYM SynonymName

パラメータ

パラメータ

説明

PUBLIC

PUBLICを指定すると、パブリック・シノニムを削除できます。

Owner

オプションで、プライベート・シノニムの所有者を指定します。所有者を省略する場合、プライベート・シノニムは現在のユーザーのスキーマに存在している必要があります。

SynonymName

削除するシノニムの名前を指定します。

例

パブリック・シノニムpubempを削除します。

DROP PUBLIC SYNONYM pubemp;
Synonym dropped.

プライベート・シノニムsynjobsを削除します。

DROP SYNONYM synjobs;
Synonym dropped.

DROP ANY SYNONYM権限を持つユーザーterryとして、ttuserが所有するプライベート・シノニムsyntabを削除します。

DROP SYNONYM ttuser.syntab;
Synonym dropped.

関連項目

CREATE SYNONYM

DROP TABLE

DROP TABLE文は、指定した表を、それに関連付けられたハッシュ索引および範囲索引とともに削除します。

必要な権限

表の所有者に必要な権限はありません。

別のユーザーの表の場合はDROP ANY TABLEが必要です。

SQL構文

DROP TABLE [Owner.]TableName

パラメータ

パラメータ

説明

[Owner.]TableName

削除する表を指定します。

説明

- 使用中の表を削除しようとすると、エラーが発生します。

- コミットされていないトランザクションでのDROP TABLEがアクティブな場合(またはアクティブだった場合)、その表にアクセスしないDML操作を実行する他のトランザクションを続行できます。

- 表がレプリケートされた表である場合、次のいずれかを実行できます。

- DROP TABLE文を発行する前に、DROP REPLICATION文を使用してレプリケーション・スキームを削除します。

- DDL_REPLICATION_LEVELが2以上の場合は、DROP TABLE文によって、レプリケーション・スキームのすべてのデータベースのアクティブ・スタンバイ・ペアから表を削除します。
DDL_REPLICATION_LEVELが1の場合は、レプリケーション・エージェントを停止し、ALTER ACTIVE STANDBY PAIR ... EXCLUDE TABLE文を使用してレプリケーション・スキームから表を除外します。次にDROP TABLE文を使用して表を削除します。

詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアでのDDL変更に関する説明を参照してください。

- 他の接続が所有する空でないインスタンスが一時表にある場合、別の接続によって一時表を削除することはできません。

例

CREATE TABLE vendorperf
(ordernumber INTEGER,
delivday TT_SMALLINT,
delivmonth TT_SMALLINT,
delivyear TT_SMALLINT,
delivqty TT_SMALLINT,
remarks VARCHAR2(60));
CREATE UNIQUE INDEX vendorperfindex ON vendorperf (ordernumber);

次の文は、表および索引を削除します。

DROP TABLE vendorperf;

DROP USER

DROP USER文は、データベースからユーザーを削除します。

必要な権限

ADMIN

SQL構文

DROP USER user

パラメータ

パラメータ

説明

user

データベースから削除されるユーザーの名前。

説明

ユーザーを削除するには、次の前提条件があります。

- ユーザーがデータベースに内部的または外部的に存在している必要があります。

- ユーザーが所有するオブジェクトを削除する必要があります。

- レプリケーションが構成されている場合、この文はレプリケートされます。

例

データベースからユーザーterryを削除します。

DROP USER terry;
User dropped.

関連項目

「CREATE USER」
「ALTER USER」
「GRANT」
「REVOKE」

DROP VIEW

DROP VIEW文は、指定したビューを削除します。

ビューがアクティブ・スタンバイ・ペア間でレプリケートされる場合で、DDL_REPLICATION_LEVELが3以上の場合は、DROP VIEW文によって、レプリケーション・スキームのすべてのデータベースのアクティブ・スタンバイ・ペアからビューを削除します。詳細は、『Oracle TimesTen In-Memory Database開発者および管理者ガイド』のアクティブ・スタンバイ・ペアでのDDL変更に関する説明を参照してください。

必要な権限

ビューの所有者であるか、またはDROP ANY VIEW (非所有者の場合)

SQL構文

DROP VIEW [Owner.]ViewName

パラメータ

パラメータ

説明

[Owner.]ViewName

削除するビューを指定します。

例

次の文では、custorderビューが削除されます。

DROP VIEW custorder;

関連項目

CREATE VIEW

FLUSH CACHE GROUP

FLUSH CACHE GROUP文は、TimesTenキャッシュ表のデータをOracle Database表にフラッシュします。この文は、ユーザー管理キャッシュ・グループでのみ使用できます。キャッシュ・グループの種類については、「ユーザー管理キャッシュ・グループおよびシステム管理キャッシュ・グループ」を参照してください。

この操作には、WHERE句を受け入れる操作およびWITH ID句を受け入れる操作の2つのタイプがあります。

FLUSH CACHE GROUPは、コミットの伝播(TimesTenからOracle Databaseへ)がオフになっているときに使用します。コミットのすべてのトランザクションを伝播するのではなく、変更をOracle Databaseに伝播する前に多数のトランザクションをコミットできます。Oracle Databaseにキャッシュ・インスタンスが存在する場合は、キャッシュ・インスタンスIDごとに更新操作が実行されます。Oracle Databaseにキャッシュ・インスタンスが存在しない場合は、TimesTenによって挿入されます。

この機能は、注文がマスターOracle Database表にコミットされる前に、高速キャッシュとしてTimesTenを使用する、カートへの変更が頻繁に行われるショッピング・カート・アプリケーションなどで役立ちます。

注意:
通常、WHERE句を使用するより、WITH ID句を使用した方が高いシステム・パフォーマンスが得られます。

挿入と更新のみがフラッシュされます。挿入は、Oracle Database表にレコードが存在しない場合は挿入として、または(レコードがすでに存在する場合は)更新として伝播されます。削除をフラッシュすることはできません。つまり、TimesTenでレコードが削除された場合に、その削除をOracle Database表にフラッシュする方法はありません。削除は、手動で、またはコミット伝播をオンにすることで伝播する必要があります。削除されたレコードをフラッシュしようとすると、暗黙的に無視されます。エラーや警告は発行されません。READ ONLYまたはPROPAGATEとして指定されている表のレコードをOracle Database表にフラッシュすることはできません。

必要な権限

キャッシュ・グループの所有者に必要な権限はありません。

別のユーザーのキャッシュ・グループの場合はFLUSHまたはFLUSH ANY CACHE GROUPが必要です。

SQL構文

FLUSH CACHE GROUP [Owner.]GroupName
[WHERE ConditionalExpression];

または

FLUSH CACHE GROUP [Owner.]GroupName
WITH ID (ColumnValueList)

パラメータ

パラメータ

説明

[Owner.]GroupName

フラッシュされるキャッシュ・グループの名前。

WHERE ConditionalExpression

WHERE句を使用すると、キャッシュ処理のターゲット行を指定する検索条件を指定できます。WHERE句で複数の表を使用し、これらの表に同じ名前の列がある場合は、表名を完全修飾します。

WITH ID ColumnValueList

WITH ID句を使用すると、主キーの値を使用してキャッシュ・インスタンスをフラッシュできます。ColumnValueListを主キーの値を表すリテラルまたはバインディング・パラメータのリストとして指定します。

説明

- 通常、WHERE句は、単一またはすべてのキャッシュ・インスタンスを対象に使用するものではなく、キャッシュ・インスタンスのセットに対して使用します。フラッシュ操作にWHERE句を使用して、Oracle Databaseに送信するキャッシュ・インスタンスを決定します。

- 一般的には、FLUSH CACHE GROUP文のWHERE句の列名を完全に修飾する必要はありません。ただし、同一キャッシュ・グループ内の複数の表を結合する問合せがTimesTenによって自動的に生成されるため、キャッシュ・グループ内に同じ名前の列を持つ表が複数ある場合は、列を完全に修飾する必要があります。所有者名を指定しない場合、キャッシュ・グループのWHERE句によって参照されるすべての表は、キャッシュ・グループ操作を実行している現在のログイン名が所有しています。

- WHERE句を省略した場合、キャッシュ・グループの内容全体がOracle Database表にフラッシュされます。WHERE句を指定した場合、ルート表のみを含めることができます。

- FLUSH CACHE GROUP文の実行後、ODBC関数SQLRowCount()、JDBCメソッドgetUpdateCount()、およびOCI_ATTR_ROW_COUNT引数を指定したOCI関数OCIAttrGet()によって、フラッシュされたキャッシュ・インスタンスの数が返されます。

- WITH ID句を使用して、バインディング・パラメータを指定します。

制限

- キャッシュ・グループが動的キャッシュ・グループでないかぎり、AWTまたはSWTキャッシュ・グループ、伝播属性が設定されたユーザー管理キャッシュ・グループ、または自動リフレッシュおよび伝播されるユーザー管理キャッシュ・グループに対してWITH ID句を使用しないでください。

例

FLUSH CACHE GROUP marketbasket;

FLUSH CACHE GROUP marketbasket
WITH ID(10);

関連項目

CREATE CACHE GROUP

GRANT

GRANT文は、1つ以上の権限をユーザーに割り当てます。

必要な権限

システム権限を付与するには、ADMINが必要です。

オブジェクト権限を付与するには、ADMINが必要であるか、オブジェクト所有者である必要があります。

SQL構文

GRANT {SystemPrivilege [,...] | ALL [PRIVILEGES]} [...] TO {user |PUBLIC} [,...]

GRANT {{ObjectPrivilege [,...] | ALL [PRIVILEGES]} ON {[Owner.]object}[,...]} TO
{user | PUBLIC} [,...]

パラメータ

システム権限を付与するためのパラメータは次のとおりです。

パラメータ

説明

SystemPrivilege

付与するシステム権限です。使用できる値のリストについては、「システム権限」を参照してください。

ALL [PRIVILEGES]

ユーザーにすべてのシステム権限を割り当てます。

user

権限が付与されるユーザーの名前。ユーザー名は、CREATE USER文を使用してTimesTenデータベースに設定しておく必要があります。

PUBLIC

すべてのユーザーに権限を付与することを指定します。

オブジェクト権限を付与するためのパラメータは次のとおりです。

パラメータ

説明

ObjectPrivilege

付与するオブジェクト権限です。使用できる値のリストについては、「オブジェクト権限」を参照してください。

ALL [PRIVILEGES]

ユーザーにすべてのオブジェクト権限を割り当てます。

[Owner.]object

objectは、権限が付与されるオブジェクトの名前です。Ownerは、オブジェクトの所有者です。Ownerを指定しない場合は、権限を付与しているユーザーが所有者です。

user

権限が付与されるユーザーの名前。ユーザーがデータベースに存在している必要があります。

PUBLIC

すべてのユーザーに権限を付与することを指定します。

説明

- ADMIN権限を持つユーザーは、1つ以上のシステム権限をユーザーに付与できます。

- オブジェクトの所有者は、そのオブジェクトに対する1つ以上のオブジェクト権限をユーザーに付与できます。

- ADMIN権限を持つユーザーは、任意のオブジェクトに対する1つ以上のオブジェクト権限をユーザーに付与できます。

- ユーザーから権限を削除するには、REVOKE文を使用してください。

- システム権限とオブジェクト権限を1つの文で付与することはできません。

- オブジェクト権限の文に指定できるオブジェクトの数は1つのみです。

- レプリケーションが構成されている場合、この文はレプリケートされます。

例

ユーザーterryにADMIN権限を付与します。

GRANT admin TO terry;

ADMIN権限を持っている権限付与者が、ユーザーpatが所有するcustomers表に対するSELECT権限をユーザーterryに付与します。

GRANT SELECT ON pat.customers TO terry;

ユーザーterryにオブジェクト権限を付与します。

GRANT SELECT ON emp_details_view TO terry;

関連項目

「CREATE USER」
「ALTER USER」
「DROP USER」
「REVOKE」
「PUBLICロール」

INSERT

INSERT文は、表に行を追加します。

次の式は、INSERT文のVALUES句の中で使用できます。

- TO_CHAR

- TO_DATE

- 順序NEXTVALおよび順序CURRVAL

- CAST

- DEFAULT

- SYSDATEおよびGETDATE

- ユーザー/セッション関数

- 式

- SYSTEM_USER

必要な権限

表の所有者に必要な権限はありません。

別のユーザーの表の場合、INSERTが必要です。

SQL構文

INSERT [hint] INTO [Owner.]TableName [(Column [,...])]
VALUES (SingleRowValues)
[RETURNING|RETURN Expression[,...] INTO DataItem[,...]]

SingleRowValuesパラメータの構文は、次のとおりです。

{NULL|{?|:DynamicParameter}|{Constant}| DEFAULT}[,...]

パラメータ

パラメータ

説明

hint

INSERT文に文レベルのオプティマイザ・ヒントを指定します。ヒントの詳細は、「文レベルのオプティマイザ・ヒント」を参照してください。

Owner

データを挿入する表の所有者。

TableName

データを挿入する表の名前。

Column

このリストの各列には、SingleRowValuesから値が割り当てられます。
1つ以上の表の列をこのリストで省略した場合、挿入された行では、省略された列の値は、表の作成時または最終更新時に指定された列のデフォルト値になります。省略した列にNOT NULL制約が指定されており、その列にデフォルト値が定義されていない場合は、データベースによってエラーが返されます。

列のリストを完全に省略した場合は、表のすべての列に値を指定する必要があります。

?
:DynamicParameter

準備されたSQL文の動的パラメータのプレースホルダ。動的パラメータの値は、文の実行時に設定されます。

Constant

特定の値。「定数」を参照してください。

DEFAULT

列をデフォルト値で更新する必要があることを指定します。

Expression

有効な式の構文。第3章「式」を参照してください。

DataItem

取得したExpression値を格納するホスト変数またはPL/SQL変数。

説明

- 表の列を列名リストで省略した場合は、INSERT文によって、省略された列にデフォルト値が割り当てられます。省略した列に表定義でNOT NULLが指定されている場合、その列にデフォルト値が定義されていなければ、INSERT文は失敗します。

- BINARYおよびVARBINARYデータは、文字形式または16進形式に挿入できます。

- 文字形式では、一重引用符が必要です。

- 16進形式では、値の前に接頭辞0xが必要です。

- 外部キー制約に違反するINSERT処理はエラーになります。外部キー制約の詳細は、「CREATE TABLE」を参照してください。

- RETURNING句の制限:

- 各Expressionは単純な式である必要があります。集計関数はサポートされません。

- 順序番号はOUTパラメータに戻せません。

- ROWNUMおよび副問合せは、RETURNING句では使用できません。

- RETURNING句内のパラメータは、INSERT文で重複して使用できません。

- PL/SQLでは、RETURNING句はWHERE CURRENT処理と一緒には使用できません。

例

purchasing.vendors表に新しい単一行を追加します。

INSERT INTO purchasing.vendors
VALUES (9016,
'Secure Systems, Inc.',
'Jane Secret',
'454-255-2087',
'1111 Encryption Way',
'Hush',
'MD',
'00007',
'discount rates are secret');

動的パラメータ:pnoおよび:pnameには、実行時に値が設定されます。

INSERT INTO purchasing.parts (partnumber, partname)
VALUES (:pno, :pname);

新しい従業員の年間のsalaryおよびjob_idを返します。変数salおよびjobidを、salaryおよびjob_idと同じデータ型で宣言します。employeesに行を挿入します。確認用に変数を出力します。

Command> VARIABLE sal12 NUMBER(8,2);
Command> VARIABLE jobid VARCHAR2(10) INLINE NOT NULL;

Command> INSERT INTO employees(employee_id, last_name, email, hire_date,
> job_id, salary)
> VALUES (211,'Doe','JDOE',sysdate,'ST_CLERK',2400)
> RETURNING salary*12, job_id INTO :sal12,:jobid;
1 row inserted.

PRINT sal12 jobid;
SAL12                 : 28800
JOBID                 : ST_CLERK

関連項目

「CREATE TABLE」
「INSERT...SELECT」
第3章「式」

INSERT...SELECT

INSERT...SELECT文は、問合せの結果を表に挿入します。

必要な権限

オブジェクトの所有者に必要な権限はありません。

別のユーザーのオブジェクトの場合、INSERTとSELECTが必要です。

SQL構文

INSERT INTO [Owner.]TableName [(ColumnName [,...])] InsertQuery

パラメータ

パラメータ

説明

[Owner.]TableName

データを追加する表。

ColumnName

値を指定する列。表の列を列名リストで省略した場合は、INSERT...SELECT文によって、省略された列にデフォルト値が割り当てられます。省略した列に表定義でNOT NULLが指定されている場合、その列にデフォルト値が定義されていなければ、INSERT...SELECT文は失敗します。CREATE TABLE文で指定された順序と同じ順序で表のすべての列に対して値を指定する場合は、列名リストを省略できます。指定する値が少なすぎる場合は、その他の列にデフォルト値が割り当てられます。

InsertQuery

サポートされている任意のSELECT問合せ。「SELECT」を参照してください。SELECT動詞の後に文レベルのオプティマイザ・ヒントを指定できます。文レベルのオプティマイザ・ヒントの詳細は、「文レベルのオプティマイザ・ヒント」を参照してください。

説明

- 結果セットの列の型は、ターゲット表の列の型と互換性がある必要があります。

- 値を挿入するときに、順序CURRVALまたはNEXTVALを指定できます。詳細は、「CURRVALとNEXTVALによるSEQUENCE値の増加」を参照してください。

- InsertQueryでORDER BY句を使用できます。ターゲット表に結果セットを挿入する際に、ORDER BY句を使用してソート順序が変更されますが、順序は保証されません。

- InsertQueryにエラーがあると、INSERT操作は失敗します。

- RETURNING句はINSERT...SELECT文では使用できません。

例

20日以内に配送される部品を示すpurchasing.parts表に新しい行が追加されます。

INSERT INTO purchasing.parts
SELECT partnumber, deliverydays
FROM purchasing.supplyprice
WHERE deliverydays < 20;

LOAD CACHE GROUP

LOAD CACHE GROUP文は、Oracle Database表からTimesTenキャッシュ・グループにデータをロードします。ロードはローカルでの処理です。キャッシュ・メンバー間には伝播されません。

必要な権限

キャッシュ・グループの所有者に必要な権限はありません。

別のユーザーのキャッシュ・グループの場合、LOAD CACHE GROUPまたはLOAD ANY CACHE GROUPが必要です。

SQL構文

LOAD CACHE GROUP [Owner.]GroupName
[WHERE ConditionalExpression]
COMMIT EVERY n ROWS
[PARALLEL NumThreads]

または

LOAD CACHE GROUP [Owner.]GroupName
WITH ID (ColumnValueList)

パラメータ

パラメータ

説明

[Owner.]GroupName

キャッシュ・グループに割り当てられた名前。

WHERE ConditionalExpression

WHERE句を使用すると、キャッシュ処理のターゲット行を指定する検索条件を指定できます。WHERE句で複数の表を使用し、これらの表に同じ名前の列がある場合は、表名を完全修飾します。

COMMIT EVERY n ROWS

COMMIT EVERY n ROWS句を使用して、ロード操作中にコミットを発行する頻度(キャッシュ・グループにロードされる行数に基づく)を指定します。この句はWITH ID句を指定しない場合に必須です。
nは、トランザクションがコミットされる前にキャッシュ・グループにロードされる行数を示します。nは整数(n >= 0)で指定します。nに0を指定すると、LOAD CACHE GROUP文は、1つのトランザクションとして実行されます。

[PARALLEL NumThreads]

キャッシュ・グループ表のパラレル・ロードを実行します。同時にロードを実行するスレッドの数を指定します。1つのスレッドがOracle Databaseからのバルク・フェッチを実行し、その他のスレッド(NumThreads - 1個のスレッド)がTimesTenへの挿入を実行します。各スレッドで独自の接続またはトランザクションが使用されます。
NumThreadsの最小値は2です。最大値は10です。10より大きい値を指定すると、TimesTenは値10を割り当てます。

WITH ID ColumnValueList

WITH ID句を使用すると、主キーの値を使用してキャッシュ・インスタンスをロードできます。ColumnValueListを主キーの値を表すリテラルまたはバインディング・パラメータのリストとして指定します。

説明

- LOAD CACHE GROUPは、キャッシュ・グループの定義を満たし、キャッシュ・グループにまだ存在していないすべての新しいキャッシュ・インスタンスをOracle Databaseからロードします。

- キャッシュ・グループがレプリケートされるか、またはAWTキャッシュ・グループである場合、LOAD CACHE GROUP文を発行する前に、レプリケーション・エージェントが実行中であることを確認してください。キャッシュ・エージェントが稼働していることを確認してください。

- LOAD CACHE GROUPは、独自のトランザクション内で実行され、トランザクション内の最初の操作である必要があります。

- 明示的にロードされるキャッシュ・グループの場合、LOAD CACHE GROUPはTimesTenキャッシュ表にすでに存在するキャッシュ・インスタンスを更新しません。このため、LOAD CACHE GROUPは、Oracle Database表に対する挿入のみを、対応するTimesTenキャッシュ表にロードします。

- 動的キャッシュ・グループの場合、LOAD CACHE GROUPは、Oracle Database表で挿入、更新および削除されたキャッシュ・インスタンスをキャッシュ表にロードします。明示的にロードされるキャッシュ・グループおよび動的キャッシュ・グループの詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のキャッシュ・グループへのデータのロード: 明示的にロードされるキャッシュ・グループおよび動的キャッシュ・グループに関する項を参照してください。

- エラーが発生するとロールバックされます。キャッシュ・インスタンスが定期的にコミットされる場合、エラーが発生すると残りのロードは中止されます。ロードは直前にコミットした時点までロールバックされます。

- COMMIT EVERY n ROWS (nは0以上の値)を指定しているときにLOAD CACHE GROUP文が失敗すると、ロードされた行の一部はすでにコミットされているために、ターゲット・キャッシュ・グループの内容が一貫性のない状態になる場合があります。一部のキャッシュ・インスタンスが部分的にしかロードされていない可能性があります。UNLOAD CACHE GROUP文を使用してキャッシュ・グループをアンロードしてから、キャッシュ・グループを再ロードします。

- 一般的には、LOAD CACHE GROUP文のWHERE句の列名を完全に修飾する必要はありません。ただし、同一キャッシュ・グループ内の複数の表を結合する問合せがTimesTenによって自動的に生成されるため、キャッシュ・グループ内に同じ名前の列を持つ表が複数ある場合は、列を完全に修飾する必要があります。

- 読取り専用キャッシュ・グループをロードする場合、次の条件を満たしている必要があります。

- AUTOREFRESHのSTATEは、PAUSEDにする必要があります。

- LOAD CACHE GROUP文ではWHERE句を使用できません(動的キャッシュ・グループの場合を除く)。

- キャッシュ・グループは空である必要があります。

- 明示的にロードされるキャッシュ・グループまたは動的キャッシュ・グループの自動リフレッシュ状態がPAUSEDの場合、キャッシュ・グループに対して発行されたLOAD CACHE GROUP文が完了した後、状態はONに変更されます。動的キャッシュ・グループの自動リフレッシュ状態がPAUSEDであり、キャッシュ表に移入が行われている場合は、キャッシュ・グループに対して発行されたLOAD CACHE GROUP文が完了した後も状態はPAUSEDのままになります。

- LOAD CACHE GROUP文の実行後、ODBC関数SQLRowCount()、JDBCメソッドgetUpdateCount()、およびOCI_ATTR_ROW_COUNT引数を指定したOCI関数OCIAttrGet()を実行すると、ロードされたキャッシュ・インスタンスの数が返されます。

- 次の場合にWITH ID句を使用します。

- キャッシュ・インスタンスのロード速度を上げる場合(WHERE句の中で使用)

- バインディング・パラメータを指定する場合

- 障害発生時にロード・トランザクションをロールバックする場合

制限

- WHERE句で子表を参照しないでください。

- 次の場合にはPARALLEL句を指定しないでください。

- WITH ID句が使用されている場合

- COMMIT EVERY 0 ROWS句が使用されている場合

- データベース・レベルのロックが有効な場合(接続属性LockLevelが1に設定されている場合)

- 次のタイプのキャッシュ・グループをロードする場合は、WITH ID句を使用しないでください。

- 明示的にロードされる読取り専用キャッシュ・グループ

- 明示的にロードされる、自動リフレッシュ属性が指定されたユーザー管理キャッシュ・グループ

- AUTOREFRESHおよびPROPAGATE属性が指定されたユーザー管理キャッシュ・グループ

- WITH ID句はCOMMIT EVERY n ROWS句と同時に使用しないでください。

- WITH ID句を使用して別のキャッシュ・グリッド・メンバーからキャッシュ・インスタンスを取得することはできません。

例

CREATE CACHE GROUP recreation.cache
FROM recreation.clubs (
clubname CHAR(15) NOT NULL,
clubphone SMALLINT,
activity CHAR(18),
PRIMARY KEY(clubname))
WHERE (recreation.clubs.activity IS NOT NULL);

LOAD CACHE GROUP recreation.cache
COMMIT EVERY 30 ROWS;

HRスキーマを使用して、PARALLEL句とLOAD CACHE GROUP文を同時に使用する例を示します。COMMIT EVERY n ROWS句が必要です。CACHEGROUPSコマンドを発行します。キャッシュ・グループcg2が定義され、自動リフレッシュの状態がPaused(一時停止中)であることが示されています。キャッシュ・グループcg2をアンロードしてから、LOAD CACHE GROUP文とPARALLEL句を指定してパラレル・ロードを実行します。25個のキャッシュ・インスタンスがロードされます。

Command> CACHEGROUPS;

Cache Group SAMPLEUSER.CG2:

Cache Group Type: Read Only
Autorefresh: Yes
Autorefresh Mode: Incremental
Autorefresh State: Paused
Autorefresh Interval: 1.5 Minutes

Root Table: SAMPLEUSER.COUNTRIES
Table Type: Read Only

Child Table: SAMPLEUSER.LOCATIONS
Table Type: Read Only

Child Table: SAMPLEUSER.DEPARTMENTS
Table Type: Read Only

1 cache group found.

Command> UNLOAD CACHE GROUP cg2;
25 cache instances affected.
Command> COMMIT;
Command> LOAD CACHE GROUP cg2 COMMIT EVERY 10 ROWS PARALLEL 2;
25 cache instances affected.
Command> COMMIT;

次の例では、対応するOracle Database表からnew_customersキャッシュ・グループのTimesTenキャッシュ表に、顧客番号が5000以上の顧客のキャッシュ・インスタンスのみをロードします。

LOAD CACHE GROUP new_customers WHERE (oratt.customer.cust_num >= 5000) COMMIT
EVERY 256 ROWS;

関連項目

「REFRESH CACHE GROUP」
「UNLOAD CACHE GROUP」

MERGE

MERGE文を使用すると、1つまたは複数のソースから行を選択して、ターゲット表に対して更新や挿入ができます。ターゲット表に対してどの行を更新または挿入するかの評価に使用する条件を指定できます。

この文は、複数のINSERT文およびUPDATE文を組み合せるために使用します。

MERGEは、決定的な文であり、同一のMERGE文でターゲット表の同じ行を複数回更新できません。

必要な権限

ターゲット表およびソース表の所有者に必要な権限はありません。

別のユーザーが所有するターゲット表の場合はINSERTまたはUPDATE、別のユーザーが所有するソース表の場合はSELECTが必要です。

SQL構文

MERGE [hint] INTO [Owner.]TargetTableName [Alias] USING
{[Owner.]SourceTableName|(Subquery)}[Alias] ON (Condtion)
{MergeUpdateClause MergeInsertClause |
MergeInsertClause MergeUpdateClause |
MergeUpdateClause | MergeInsertClause
}

MergeUpdateClauseの構文は次のとおりです。

WHEN MATCHED THEN UPDATE SET SetClause [WHERE Condition1]

MergeInsertClauseの構文は次のとおりです。

WHEN NOT MATCHED THEN INSERT [Columns [,...]] VALUES
( {{Expression | DEFAULT|NULL} [,...] }) [WHERE Condition2]

パラメータ

パラメータ

説明

hint

MERGE文に文レベルのオプティマイザ・ヒントを指定します。ヒントの詳細は、「文レベルのオプティマイザ・ヒント」を参照してください。

[Owner.]TargetTableName

ターゲット表の名前。これは、行の更新や挿入の対象となる表です。

[Alias]

オプションで、ターゲット表やソース表の別名を指定できます。

USING {[Owner.]SourceTableName | (Subquery)} [Alias]

USING句は、データのソースに使用する表の名前や副問合せを指定します。結合や集計を使用する場合は、副問合せを使用します。オプションで、表の名前や副問合せの別名を指定できます。

ON (Condition)

行に対してMerge InsertまたはMerge Updateのどちらを実行するかを決定するために、ターゲット表の各行の評価に使用する条件を指定します。評価時に条件がTRUEの場合、SourceTableNameの対応する行を使用して、ターゲット行に実行するのはMergeUpdateClauseであるとみなされます。ソース表の複数の行がターゲット表の同一行に対応している場合、エラーが発生します。評価時に条件がTRUEでない場合、その行に対して実行するのはMergeInsertClauseであるとみなされます。

SET SetClause

UPDATE文とともに使用する句。UPDATE文の詳細は、「UPDATE」を参照してください。

[WHERE Condition1]

ON (Condition)に一致する各行に対して、Condition1が評価されます。評価時に条件がTRUEの場合、その行は更新されます。この句では、ターゲット表またはソース表を参照できます。副問合せは使用できません。この句はオプションです。

INSERT [Columns[,...]]VALUES ({{Expression |DEFAULT|NULL} [,...]})

ターゲット表に挿入する列です。INSERT文の詳細は、「INSERT」を参照してください。

[WHERE Condition2]

指定した場合、Condition2が評価されます。評価時に条件がTRUEの場合、その行はターゲット表に挿入されます。条件にはソース表のみ参照できます。副問合せは使用できません。

説明

- MergeUpdateClauseとMergeInsertClauseは、一緒に、または別々に指定できます。両方指定する場合は、どちらが先でもかまいません。

- DUALが、USING句でのみ指定された表であり、MERGE文の他の場所では参照されない場合は、副問合せではDUALを使用するかわりに、単純な表として指定します。この単純な場合でパフォーマンスを向上させるには、ON句でターゲット表の一意索引にキー条件を指定します。

- MergeUpdateClauseの制限:

- ON condition句で参照する列は更新できません。

- ソース表の列は更新できません。

- MergeInsertClauseの制限:

- ターゲット表の列の値は挿入できません。

- その他の制限:

- ソース表の副問合せで集合演算子は使用しないでください。

- MergeUpdateClauseまたはMergeInsertClauseのWHERE条件で、副問合せは使用しないでください。

- ターゲット表は、マテリアライズド・ビューのディテール表には指定できません。

- RETURNING句はMERGE文では使用できません。

例

この例では、dualは単純な表として指定されます。ON句に指定されたターゲット表のUNIQUE索引にキー条件があります。この例では、DuplicateBindMode属性は1に設定されます。デフォルトは0(ゼロ)です。

Command> CREATE TABLE mergedualex (col1 TT_INTEGER NOT NULL,
> col2 TT_INTEGER, PRIMARY KEY (col1));
Command> MERGE INTO mergedualex USING dual ON (col1 = :v1)
> WHEN MATCHED THEN UPDATE SET col2 = col2 + 1
> WHEN NOT MATCHED THEN INSERT VALUES (:v1, 1);
Type '?' for help on entering parameter values.
Type '*' to end prompting and abort the command.
Type '-' to leave the parameter unbound.
Type '/;' to leave the remaining parameters unbound and execute the command.

Enter Parameter 1  'V1' (TT_INTEGER) > 10
1 row merged.
Command> SELECT * FROM mergedualex;
< 10, 1 >
1 row found.

この例では、列employee_idおよびmanager_idを含むcontactsという名前の表が作成されます。employee_idおよびmanager_idにそれぞれ101とNULLの値を持つcontactsに、行が1つ挿入されます。MERGE文で、employees表のデータを使用してcontactsに行が挿入されます。SELECT FIRST 3の行では、employee_idが101の場合は、manager_idが100に更新されることを示しています。employees表の残りの106行がcontactsに挿入されます。

Command> CREATE TABLE contacts (employee_id NUMBER (6) NOT NULL PRIMARY KEY,
> manager_id NUMBER (6));
Command> SELECT employee_id, manager_id FROM employees WHERE employee_id =101;
< 101, 100 >
1 row found.
Command> INSERT INTO contacts VALUES (101,null);
1 row inserted.
Command> SELECT COUNT (*) FROM employees;
< 107 >
1 row found.
Command> MERGE INTO contacts c
>   USING employees e
>   ON (c.employee_id = e.employee_id)
> WHEN MATCHED THEN
>   UPDATE SET c.manager_id = e.manager_id
> WHEN NOT MATCHED THEN
>   INSERT (employee_id, manager_id)
>   VALUES (e.employee_id, e.manager_id);
107 rows merged.
Command> SELECT COUNT (*) FROM contacts;
< 107 >
1 row found.
Command> SELECT FIRST 3 employee_id,manager_id FROM employees;
< 100, <NULL> >
< 101, 100 >
< 102, 100 >
3 rows found.
Command> SELECT FIRST 3 employee_id, manager_id FROM contacts;
< 100, <NULL> >
< 101, 100 >
< 102, 100 >
3 rows found.

REFRESH CACHE GROUP

REFRESH CACHE GROUP文は、TimesTenキャッシュ表のデータをキャッシュされたOracle Database表でコミットされた最新のデータに置き換えます。リフレッシュ操作はローカルで、グリッド・メンバー間には伝播されません。

必要な権限

Oracle DatabaseスキーマのCREATE SESSIONおよびOracle Database表のSELECT。

キャッシュ・グループの所有者の場合、キャッシュ・グループに対して必要な権限はありません。

別のユーザーのキャッシュ・グループの場合、REFRESH CACHE GROUPまたはREFRESH ANY CACHE GROUPが必要です。

SQL構文

REFRESH CACHE GROUP [Owner.]GroupName
[WHERE ConditionalExpression]
COMMIT EVERY n ROWS
[PARALLEL NumThreads]

または

REFRESH CACHE GROUP [Owner.]GroupName
WITH ID (ColumnValueList)

パラメータ

パラメータ

説明

[Owner.]GroupName

キャッシュ・グループに割り当てられた名前。

WHERE ConditionalExpression

WHERE句を使用すると、キャッシュ処理のターゲット行を指定する検索条件を指定できます。WHERE句で複数の表を使用し、これらの表に同じ名前の列がある場合は、表名を完全修飾します。

COMMIT EVERY n ROWS

COMMIT EVERY n ROWS句を使用して、リフレッシュ操作中にコミットを発行する頻度(キャッシュ・グループでリフレッシュされる行数に基づく)を指定します。この句はWITH ID句を指定しない場合に必須です。
nは、トランザクションがコミットされる前にリフレッシュされる行数を示します。nは整数(n >= 0)で指定します。nに0を指定すると、REFRESH CACHE GROUP文は、1つのトランザクションとして実行されます。

[PARALLEL NumThreads]

キャッシュ・グループ表のパラレル・ロードを実行します。同時にロードを実行するスレッドの数を指定します。1つのスレッドがOracle Databaseからのバルク・フェッチを実行し、その他のスレッド(NumThreads - 1個のスレッド)がTimesTenへの挿入を実行します。各スレッドで独自の接続またはトランザクションが使用されます。
NumThreadsの最小値は2です。最大値は10です。10より大きい値を指定すると、TimesTenは値10を割り当てます。

WITH ID ColumnValueList

WITH ID句を使用すると、主キーの値を使用してキャッシュ・インスタンスをリフレッシュできます。ColumnValueListを主キーの値を表すリテラルまたはバインディング・パラメータのリストとして指定します。

説明

- REFRESH CACHE GROUP文は、独自のトランザクション内で実行する必要があります。

- キャッシュ・グループがレプリケートされるか、またはAWTキャッシュ・グループである場合、REFRESH CACHE GROUP文を発行する前に、レプリケーション・エージェントが実行中であることを確認してください。キャッシュ・エージェントが稼働していることを確認してください。

- REFRESH CACHE GROUP文は、TimesTenキャッシュ表のデータをキャッシュされたOracle Database表でコミットされた最新のデータ(TimesTenキャッシュ表にすでに存在するデータも含む)に置き換えます。明示的にロードされるキャッシュ・グループの場合、リフレッシュ処理は、UNLOAD CACHE GROUP文の後にLOAD CACHE GROUP文を続けて指定した場合と同じ処理を実行します。Oracle Database表のすべての行での挿入、更新、削除などの操作は、キャッシュ表に適用されます。動的キャッシュ・グループの場合、リフレッシュ処理は、更新または削除されたOracle Database表の行のみをキャッシュ表にリフレッシュします。明示的にロードされるキャッシュ・グループおよび動的キャッシュ・グループの詳細は、『Oracle TimesTen Application-Tier Database Cacheユーザーズ・ガイド』のキャッシュ・グループへのデータのロード: 明示的にロードされるキャッシュ・グループおよび動的キャッシュ・グループに関する項を参照してください。

- 読取り専用キャッシュ・グループをリフレッシュする場合、次の条件を満たしている必要があります。

- AUTOREFRESH文は、PAUSEDにする必要があります。

- キャッシュ・グループが読取り専用動的キャッシュ・グループである場合、PARALLEL句を使用しないでください。

- 明示的にロードされるキャッシュ・グループまたは動的キャッシュ・グループの自動リフレッシュ状態がPAUSEDの場合、キャッシュ・グループに対して発行された条件なしのREFRESH CACHE GROUP文が完了した後、状態はONに変更されます。

- 動的キャッシュ・グループの自動リフレッシュ状態がPAUSEDの場合、REFRESH CACHE GROUP...WITH ID文が完了した後も状態はPAUSEDのままになります。

- 一般的には、REFRESH CACHE GROUP文のWHERE句の列名を完全に修飾する必要はありません。ただし、同一キャッシュ・グループ内の複数の表を結合する問合せがTimesTenによって自動的に生成されるため、キャッシュ・グループ内に同じ名前の列を持つ表が複数ある場合は、列を完全に修飾する必要があります。

- COMMIT EVERY n ROWS (nは0以上の値)を指定しているときにREFRESH CACHE GROUP文が失敗すると、ロードされた行の一部はすでにコミットされているために、ターゲット・キャッシュ・グループの内容が一貫性のない状態になる場合があります。一部のキャッシュ・インスタンスが部分的にしかロードされていない可能性があります。UNLOAD CACHE GROUP文を使用してキャッシュ・グループをアンロードしてから、LOAD CACHE GROUP文を使用してキャッシュ・グループを再ロードします。

- REFRESH CACHE GROUP文の実行後、ODBC関数SQLRowCount()、JDBCメソッドgetUpdateCount()、およびOCI_ATTR_ROW_COUNT引数が指定されたOCI関数OCIAttrGet()を実行すると、リフレッシュされたキャッシュ・インスタンスの数が返されます。

- 次の場合にWITH ID句を使用します。

- キャッシュ・インスタンスのリフレッシュ速度を上げる場合(WHERE句の中で使用)

- バインディング・パラメータを指定する場合

- 障害発生時にリフレッシュ・トランザクションをロールバックする場合

制限

- 次の場合はPARALLEL句を指定しないでください。

- WITH ID句が使用されている場合

- COMMIT EVERY n ROWS句が使用されている場合

- データベース・レベルのロックが有効な場合(接続属性LockLevelが1に設定されている場合)

- 読取り専用動的キャッシュ・グループの場合

- 次のタイプのキャッシュ・グループをリフレッシュする場合は、WITH ID句を使用しないでください。

- 明示的にロードされる読取り専用キャッシュ・グループ

- 明示的にロードされる、自動リフレッシュ属性が指定されたユーザー管理キャッシュ・グループ

- 自動リフレッシュ属性および伝播属性が指定されたユーザー管理キャッシュ・グループ

- WITH ID句はCOMMIT EVERY n ROWS句と同時に使用しないでください。

- 動的または読取り専用キャッシュ・グループでWHERE句を使用しないでください。

例

REFRESH CACHE GROUP recreation.cache COMMIT EVERY 30 ROWS;

これは、次と同じです。

UNLOAD CACHE GROUP recreation.cache;
LOAD CACHE GROUP recreation.cache COMMIT EVERY 30 ROWS;

HRスキーマを使用して、PARALLEL句とREFRESH CACHE GROUP文を同時に使用する例を示します。COMMIT EVERY n ROWSが必要です。CACHEGROUPSコマンドを発行します。キャッシュ・グループcg2が定義され、自動リフレッシュの状態がPaused(一時停止中)であることが示されています。REFRESH CACHE GROUP文とPARALLEL句を指定してパラレル・ロードを実行します。25個のキャッシュ・インスタンスがリフレッシュされます。

Command> CACHEGROUPS;

Cache Group SAMPLEUSER.CG2:

Cache Group Type: Read Only
Autorefresh: Yes
Autorefresh Mode: Incremental
Autorefresh State: Paused
Autorefresh Interval: 1.5 Minutes

Root Table: SAMPLEUSER.COUNTRIES
Table Type: Read Only

Child Table: SAMPLEUSER.LOCATIONS
Table Type: Read Only

Child Table: SAMPLEUSER.DEPARTMENTS
Table Type: Read Only

1 cache group found.
Command> REFRESH CACHE GROUP cg2 COMMIT EVERY 20 ROWS PARALLEL 2;
25 cache instances affected.

関連項目

「ALTER CACHE GROUP」
「CREATE CACHE GROUP」
「DROP CACHE GROUP」
「FLUSH CACHE GROUP」
「LOAD CACHE GROUP」
「UNLOAD CACHE GROUP」

REFRESH MATERIALIZED VIEW

REFRESH MATERIALIZED VIEW文は、非同期マテリアライズド・ビューを手動でリフレッシュします。

必要な権限

マテリアライズド・ビュー・ログ表に対して必要な権限は、次のとおりです。

- マテリアライズド・ビュー・ログ表の所有者に必要な権限はありません。

- マテリアライズド・ビュー・ログ表の所有者でない場合、SELECT ANY TABLEが必要です。

マテリアライズド・ビューに対して必要な権限は、次のとおりです。

- マテリアライズド・ビューの所有者に必要な権限はありません。

- マテリアライズド・ビューの所有者でない場合、SELECT ANY TABLEが必要です。

SQL構文

REFRESH MATERIALIZED VIEW ViewName

パラメータ

パラメータ

説明

ViewName

これは非同期マテリアライズド・ビューの名前です。

説明

この文は、指定された非同期マテリアライズド・ビューをリフレッシュします。この文は、独立したスレッドで、独立したトランザクションとして実行およびコミットされます。ユーザー・トランザクションに影響はありませんが、ユーザー・スレッドはリフレッシュ処理が完了するまで待機してからユーザーに戻されます。非同期マテリアライズド・ビューにリフレッシュ間隔を指定していない場合は、この文がビューをリフレッシュする唯一の方法です。リフレッシュ間隔を指定している場合でも、この文を使用してビューを手動でリフレッシュできます。

リフレッシュ処理は常に独立したトランザクションで実行されるため、リフレッシュ処理は、コミットされていないユーザー・トランザクションのコミットを待機しません。コミット済の行のみがリフレッシュ処理の対象となります。このことは、手動のリフレッシュ文および定期的に実行される自動リフレッシュに当てはまります。

ビューに対するCREATE MATERIALIZED VIEW文でFASTリフレッシュが指定されていた場合、REFRESH MATERIALIZED VIEW文では増分リフレッシュ方法が使用されます。これ以外の場合は、完全リフレッシュ方法が使用されます。

例

REFRESH MATERALIZED VIEW bookorders;

関連項目

「CREATE MATERIALIZED VIEW」
「DROP VIEW」

REVOKE

REVOKE文は、ユーザーから1つ以上の権限を削除します。

必要な権限

システム権限を削除するには、ADMINが必要です。

オブジェクト権限を削除するには、ADMINが必要であるか、またはオブジェクト所有者である必要があります。

SQL構文

REVOKE {SystemPrivilege [,...] | ALL [PRIVILEGES]} FROM {User |PUBLIC} [,...]

REVOKE {{ObjectPrivilege [,...] | ALL [PRIVILEGES]} ON {[Owner.Object}} [,...]
FROM {user | PUBLIC}[,...]

パラメータ

システム権限を削除するためのパラメータは次のとおりです。

パラメータ

説明

SystemPrivilege

削除するシステム権限です。使用できる値のリストについては、「システム権限」を参照してください。

ALL [PRIVILEGES]

ユーザーからすべてのシステム権限を削除します。

User

権限が削除されるユーザーの名前。ユーザー名は、CREATE USER文を使用してTimesTenデータベースに設定しておく必要があります。

PUBLIC

すべてのユーザーの権限を削除することを指定します。

オブジェクト権限を削除するためのパラメータは次のとおりです。

パラメータ

説明

ObjectPrivilege

削除するオブジェクト権限です。使用できる値のリストについては、「オブジェクト権限」を参照してください。

ALL [PRIVILEGES]

ユーザーからすべてのオブジェクト権限を削除します。

User

権限が削除されるユーザーの名前。ユーザー名は、CREATE USER文を使用してTimesTenデータベースに設定しておく必要があります。

[Owner.]Object

Objectは、権限が削除される対象オブジェクトの名前です。Ownerは、オブジェクトの所有者です。Ownerを指定しない場合は、権限を削除しているユーザーが所有者とみなされます。

PUBLIC

すべてのユーザーの権限を削除することを指定します。

説明

- オブジェクトの所有者から、そのオブジェクトの権限を削除することはできません。

- 権限を付与できるユーザーは、自分以外のユーザーが付与した場合でもその権限を削除できます。

- 権限は、付与されたときと同じレベルで削除する必要があります。ユーザーからオブジェクト権限を削除する場合、関連するシステム権限が付与されているユーザーからは削除できません。たとえば、あるユーザーにSELECT ANY TABLEを付与し、その後SELECT ON BOB.TABLE1を削除しようとすると、SELECT ANY TABLEに加えてSELECT ON BOB.TABLE1を明示的に付与していない場合は失敗します。

- ユーザーにすべてのシステム権限が付与されている場合は、特定の権限を削除できます。たとえば、すべてのシステム権限が付与されているユーザーからALTER ANY TABLEを削除できます。

- すべてのオブジェクト権限が付与されているユーザーからは、特定のオブジェクトの特定の権限を削除できます。たとえば、ユーザーTERRYにすべてのオブジェクト権限が付与されている場合でも、表CUSTOMERSに対するDELETE権限をTERRYから削除できます。

- ユーザーにすべての権限が付与されていない場合でも、そのユーザーからすべての権限を削除できます。

- 特定の権限を、その権限を付与されていないユーザーから削除することはできません。

- ユーザーが所有するオブジェクトに対する権限は削除できません。

- システム権限とオブジェクト権限を1つの文で削除することはできません。

- オブジェクト権限の文に指定できるオブジェクトの数は1つのみです。

- ディテール表に対するSELECT権限またはSELECT権限を含むシステム権限をuser1が所有するディテール表でuser2から削除すると、user2が所有する関連するマテリアライズド・ビューは無効と指定されます。「無効なマテリアライズド・ビュー」を参照してください。

- レプリケーションが構成されている場合、この文はレプリケートされます。

例

ADMINおよびDDL権限をユーザーterryから削除します。

REVOKE admin, ddl FROM terry;

ADMIN権限を持っている権限削除者が、patが所有するcustomers表に対するUPDATE権限をterryから削除します。

REVOKE update ON pat.customers FROM terry;

関連項目

「ALTER USER」
「CREATE USER」
「DROP USER」
「GRANT」
「PUBLICロール」

ROLLBACK

現行のトランザクションで行った処理を元に戻すには、ROLLBACK文を使用します。

必要な権限

なし

SQL構文

ROLLBACK [WORK]

パラメータ

ROLLBACK文では次のオプションのキーワードを使用できます。

パラメータ

説明

[WORK]

SQL標準に準拠するためにサポートされているオプションの句。ROLLBACKとROLLBACK WORKは同等です。

説明

PassThrough接続属性が0(ゼロ)よりも大きい値で指定されている場合は、Oracle Databaseトランザクションもロールバックされます。

ロールバックによって、すべてのオープン・カーソルがクローズされます。

例

HRスキーマのregions表に行を1つ挿入し、トランザクションをロールバックします。最初に、AUTOCOMMITを0に設定します。

Command> SET AUTOCOMMIT 0;
Command> INSERT INTO regions VALUES (5,'Australia');
1 row inserted.
Command> SELECT * FROM regions;
< 1, Europe >
< 2, Americas >
< 3, Asia >
< 4, Middle East and Africa >
< 5, Australia >
5 rows found.
Command> ROLLBACK;
Command> SELECT * FROM regions;
< 1, Europe >
< 2, Americas >
< 3, Asia >
< 4, Middle East and Africa >
4 rows found.

関連項目

COMMIT

SELECT

SELECT文は、1つ以上の表からデータを取得します。取得されたデータは、結果表、結果セットまたは問合せ結果と呼ばれる表の形式で表示されます。

必要な権限

オブジェクトの所有者に必要な権限はありません。

別のユーザーのオブジェクトの場合、SELECTが必要です。

別のユーザーのオブジェクトの場合、SELECT ... FOR UPDATEにはUPDATE権限も必要です。

SQL構文

SELECT文の一般的な構文は、次のとおりです。

[WithClause] SELECT [hint][FIRST NumRows | ROWS m TO n] [ALL | DISTINCT] SelectList
FROM TableSpec [,...]
[WHERE SearchCondition]
[GROUP BY GroupByClause [,...] [HAVING SearchCondition]]
[ORDER BY OrderByClause [,...]]
[FOR UPDATE [OF [[Owner.]TableName.]ColumnName [,...]]
[NOWAIT | WAIT Seconds] ]

集合演算子UNION、UNION ALL、MINUSまたはINTERSECTを含むSELECT文の構文は、次のとおりです。

SELECT [hint] [ROWS m TO n] [ALL] SelectList
FROM TableSpec [,...]
[WHERE SearchCondition]
[GROUP BY GroupByClause [,...] [HAVING SearchCondition] [,...]]
{UNION [ALL] | MINUS | INTERSECT}
SELECT [ROWS m TO n] [ALL] SelectList
FROM TableSpec [,...]
[WHERE SearchCondition]
[GROUP BY GroupByClause [,...] [HAVING SearchCondition [,...] ] ]
[ORDER BY OrderByClause [,...] ]

OrderByClauseの構文は次のとおりです。

{ColumnID|ColumnAlias|Expression} [ASC|DESC] [NULLS { FIRST|LAST }]

パラメータ

パラメータ

説明

[WithClause]

WITH句は、副問合せのファクタリングとも呼ばれ、副問合せブロックに名前を割り当てることができ、その後はその名前をトップレベルのSELECT文で複数回参照できます。WITH句の構文は、「WithClause」を参照してください。

hint

SELECT文に文レベルのオプティマイザ・ヒントを指定します。ヒントの詳細は、「文レベルのオプティマイザ・ヒント」を参照してください。

FIRST NumRows

取得する行の数を指定します。NumRowsには、正のINTEGER値か動的パラメータのプレースホルダを指定する必要があります。動的パラメータのプレースホルダの構文は、?または:DynamicParameterです。動的パラメータの値は、文の実行時に設定されます。

ROWS m TO n

取得する行の範囲を指定し、mは選択する最初の行、nは選択する最後の行です。行のカウントは、行1から始まります。問合せが順序付けられ、nとNumRowsの値が同じであれば、問合せSELECT ROWS 1 TO nは、SELECT FIRST NumRowsと同じ行を返します。
mおよびn値には、正のINTEGER値か動的パラメータのプレースホルダを指定する必要があります。動的パラメータのプレースホルダの構文は、?または:DynamicParameterです。動的パラメータの値は、文の実行時に設定されます。

ALL

問合せ結果の重複する行が削除されないようにします。ALLもDISTINCTも指定しない場合は、ALLがデフォルトです。

DISTINCT

問合せ結果の各行が一意となるようにします。この比較では、NULL値はすべて同じとみなされます。重複行は評価されません。
LOB列にはSELECT ...は使用できません。

SelectList

問合せ結果の列の導出方法を指定します。SelectListの構文の詳細は、「SelectList」を参照してください。

FROM TableSpec

SELECT文で参照される表を指定します。問合せごとの表の最大数は24です。
TableSpecは、行を選択する表を指定します。SELECT文のFROM句によって生成された導出表を指定することもできます。TableSpecの構文の詳細は、「TableSpec」を参照してください。

WHERE SearchCondition

WHERE句は、取得される行のセットを決定します。通常、SearchConditionがFALSEまたはNULLの行は処理から除外されますが、SearchConditionを使用して外部結合を指定でき、外部結合では、関連する内部表の行に関してSearchConditionがTRUEと評価されない外部表の行も返され、内部表を参照する投影式はNULLに設定されます。
列およびROWID式に単項演算子(+)を使用して、外部結合を示すことができます。(+)演算子は、内部表を参照する結合条件のすべての列およびROWID式の後に指定する必要があります。(+)演算子を使用するにはいくつか条件があります。通常、これらの条件によって、作成できる外部結合問合せの種類は制限されます。(+)演算子はWHERE句に指定することができ、HAVING句には指定できません。2つの表を外部結合することはできません。外部結合条件をORで結ぶことはできません。

検索条件の詳細は、第5章「検索条件」を参照してください。

GROUP BY GroupByClause [,...]

GROUP BY句には、1つ以上の式を指定して、SelectListに集計関数を指定したり、行のグループに関数を適用する場合のグループ化に使用します。GROUP BY句の構文および説明は、「GROUP BY句」を参照してください。

HAVING SearchCondition

SELECT文でHAVING句を使用して、集計結果のグループをフィルタ処理できます。SELECT文にHAVING句が存在すると、問合せは集計問合せとなります。WHERE句を除く句の集計関数のソース以外で参照されるすべての列は、GROUP BY句に指定する必要があります。
副問合せは、HAVING句で指定できます。

(+)

単純な結合(内部結合とも呼ばれる)では、SearchConditionで指定された結合条件を満たす結合表の行の組合せごとに1行が返されます。外部結合はこの演算子の拡張機能であり、結合された内部表での一致する行の有無に関係なく、外部表のすべての行が返されます。一致する行がなかった場合は、内部表を参照する投影式にNULL値が与えられます。

ORDER BY OrderByClause [,...]

指定した列または式に基づいて、問合せの結果行をソートします。ソート・キーとして使用する列を、優先順位の高いものから順に指定します。
ORDER BY句は列の別名をサポートしており、列の別名はORDER BY句でのみ参照できます。単一の問合せ内では、同じ名前を持つ、列の別名を複数宣言できますが、その別名を参照するとエラーが発生します。

ColumnID

選択リストの列に対応する必要があります。ソートする列を指定するには、その名前または序数を指定します。選択リストの最初の列の番号は1です。選択リストの列を参照する場合、それが単純な列でない場合は、列番号を使用する方が適切です。これには、集計関数、算術式、定数などが該当します。
ORDER BY句のColumnIDの構文は次のとおりです。

{ColumnNumber |[[Owner.]TableName.] ColumnName}

ColumnAlias

ORDER BY句で使用される列の別名は、SelectListの列に対応している必要があります。同じ別名で複数の列を指定できます。
{* | [Owner.]TableName.* |

{Expression | [[Owner.]TableName.]ColumnName |

[[Owner.]TableName.]ROWID

}

[[AS] ColumnAlias]} [,...]

ASC|DESC

ORDER BY句で指定する列ごとに、ソート順序を昇順または降順で指定できます。ASC(昇順)またはDESC(降順)のいずれも指定しない場合は、昇順が適用されます。すべての文字データ型は、NLS_SORTセッション・パラメータの現在の値に従ってソートされます。

NULLS { FIRST|LAST }

ORDER BY句を指定する場合にのみ有効であり、オプションです。ASCまたはDESCを指定する場合、NULLS FIRSTまたはNULLS LASTをASCまたはDESCの後に指定する必要があります。
順序付けする問合せでNULL値の行が最初に返されるようにするには、NULLS FIRSTを指定します。順序付けする問合せでNULL値の行が最後に返されるようにするには、NULLS LASTを指定します。行が昇順で返される場合は、NULLS LASTがデフォルトです。行が降順で返される場合は、NULLS FIRSTがデフォルトです。

ORDER BY句を指定する際に、ASCまたはDESC句を指定せず、NULLS FIRSTまたはNULLS LAST句を指定しない場合、デフォルトの順序は、昇順のNULLS LASTです。

FOR UPDATE
[OF [[Owner.]

TableName.]

ColumnName [,...]]

[NOWAIT | WAIT Seconds]

FOR UPDATE

- FOR UPDATEは、分離モードに関係なく、現在のトランザクションが終了するまで、要素(通常は行)のロックを保持します。その要素に対する他のすべてのトランザクションの操作は、トランザクションがコミットまたはロールバックされるまで実行されません。

- FOR UPDATEは、結合、ORDER BY、GROUP BYおよびDISTINCT句で使用されます。オプティマイザが選択した表/行のロック方法に応じて、表または行のいずれかの更新ロックが取得されます。

- FOR UPDATE OF句が指定されていないかぎり、UPDATEモードでは、WHERE句の条件を満たすすべての表の行がロックされます。この句ではロックする表を指定します。

- 行ロックを使用する場合、FROM句の表リストのすべての表で、条件を満たすすべての行が更新モードでロックされます。条件を満たす行とは、WHERE句を満たす行です。表ロックを使用する場合、条件を満たす行の有無にかかわらず、表は更新モードでロックされます。

- シリアライズ可能な分離レベルと行ロックが有効になっている場合、条件を満たさない行は共有モードに切り換えられます。コミット読取り分離レベルと行ロックが有効になっている場合、条件を満たさない行のロックは解除されます。

- SELECT...FOR UPDATEのロックは、SELECTのロックによってはブロックされません。

FOR UPDATE [OF [[Owner.]TableName.]ColumnName [,...] ]

- このモードでは、オプションで、更新のためにロックされる表の列名を含めます。

[NOWAIT | WAIT Seconds ]

- これは、選択した行がロックされている場合の処理方法を指定します。表レベルのロックまたはデータベース・レベルのロックには適用されません。

- NOWAITは、ロックの待機時間がないことを指定します。ロックを取得できない場合、エラーが返されます。

- WAIT Secondsでは、ロック・タイムアウト設定を次のように指定します。
指定された時間内にロックを取得できない場合、エラーが返されます。

ロックのタイムアウト設定は、秒または小数秒単位で表されます。Secondsのデータ型はNUMBERです。0.0から1000000.0の値が有効です。

- NOWAITおよびWAITのいずれも指定しない場合、トランザクションのロック・タイムアウト間隔が使用されます。

SelectQuery1
{UNION [ALL] | MINUS | INTERSECT}

SelectQuery2

SelectQuery1およびSelectQuery2の結果が結合されることを指定し、この場合、SelectQuery1およびSelectQuery2は、いくつかの制限を含む一般的なSELECT文です。
UNION演算子は、SelectListに互換性のある2つの問合せの結果を結合します。UNION ALLを指定した場合、両方のSELECT文から返された重複する行が保持されます。その他の場合、重複は削除されます。

MINUS演算子は、最初の問合せで返されたが2番目の問合せで返されなかった行を1つの結果に結合します。

INTERSECT演算子は、両方の問合せで返された行のみを1つの結果に結合します。

両方のSELECT文で選択された対応するエントリのデータ型には、互換性が必要です。データ型を変換するには、CAST演算子を使用します。NULL値可能かどうかは一致している必要はありません。

結果内の列の長さは、列に対応する選択値のうち長い方になります。最終的な結果の列名は、最も左側で選択された列の名前になります。

集合演算子UNION、UNION ALL、MINUS、INTERSECTを使用して、複数の問合せを組み合せることができます。

集合演算子の一方または両方のオペランドに集合演算子を指定できます。複数の集合演算子やネストされた集合演算子は、左から右に評価されます。

同じ問合せで集合演算子を同時に指定できます。

集合演算子を指定するSELECT文には、次の制限があります。

- どちらのSELECT文でも、FIRST NumRowsは指定できません。

- 最終結果をソートするためにORDER BYを指定することはできますが、集合演算子の各オペランドで使用することはできません。ORDER BY句で指定できるのは、最も左側のSELECT文の表の列名または列の別名のみです。

- GROUP BYは、集合演算子の各SELECTオペランドをグループ化するために使用できますが、集合演算子の結果をグループ化するためには使用できません。

- マテリアライズド・ビューや結合表では、集合演算子を使用できません。

説明

- 相関名を使用する場合、相関名は基本名の構文ルールを満たしている必要があります。(「基本名」を参照。)1つのSELECT文のすべての相関名は、一意である必要があります。相関名は、表をその表自体に結合する場合に役立ちます。FROM句内で表の相関名を複数回定義し、選択リストとWHERE句でその相関名を使用して、その表の列を指定します。相関名の詳細は、「TableSpec」を参照してください。

- SELECT...FOR UPDATEは副問合せを指定するSELECT文で使用できますが、最も外側の問合せでのみ指定できます。

- 問合せで、FIRST NumRowsまたはROWS m TO nが指定されている場合、返される行の数を制限するためにROWNUMを使用することはできません。

- FIRST NumRowsおよびROWS m TO nは、同じSELECT文で同時に使用することはできません。

- PL/SQLでSELECT...INTO文を使用します。PL/SQLの外側でSELECT...INTO文を使用する場合、TimesTenでは構文は許容されますが、暗黙的に無視されます。

例

この例では、SELECT文での列の別名(max_salary)の使用方法を示します。

SELECT MAX(salary) AS max_salary
FROM employees
WHERE employees.hire_date > '2000-01-01 00:00:00';
< 10500 >
1 row found.

この例では、2つの表ordersおよびlineitemsを使用します。

orders表およびlineitems表は、次のように作成されます。

CREATE TABLE orders(orderno INTEGER, orderdate DATE, customer CHAR(20));

CREATE TABLE lineitems(orderno INTEGER, lineno INTEGER,
qty INTEGER, unitprice DECIMAL(10,2));

つまり、注文ごとにorders表に1つのレコードがあり、注文の各明細を示すレコードがlineitemsにあります。

年頭以降に入力されたすべての注文の合計を検索するには、HAVING句を使用して、2000年1月1日以降に入力された注文のみを選択します。

SELECT o.orderno, customer, orderdate, SUM(qty * unitprice)
FROM orders o, lineitems l
WHERE o.orderno=l.orderno
GROUP BY o.orderno, customer, orderdate
HAVING orderdate >= DATE '2000-01-01';

次の問合せについて考えてみます。

SELECT * FROM tablea, tableb
WHERE tablea.column1 = tableb.column1 AND tableb.column2 > 5
FOR UPDATE;

この問合せは、次の条件を満たすtableaのすべての行をロックします。

- tablea.column1の値が、少なくとも1つのtableb.column1の値と同じ。このとき、tableb.column2は5より大きい。

この問合せは、次の条件を満たすtablebのすべての行もロックします。

- tableb.column2の値が5よりも大きい。

- tableb.column1の値が、少なくとも1つのtablea.column1の値と同じ。

WHERE句を指定しない場合、両方の表のすべての行がロックされます。

この例は、(+)結合演算子を示しています。

SELECT * FROM t1, t2
WHERE t1.x = t2.x(+);

外部結合条件はORで連結できないため、次の問合せはエラーとなります。

SELECT * FROM t1, t2, t3
WHERE t1.x = t2.x(+) OR t3.y = 5;

次の問合せは有効です。

SELECT * FROM t1, t2, t3
WHERE t1.x = t2.x(+) AND (t3.y = 4 OR t3.y = 5);

IN演算子を使用して(+)記号の付いた列を比較することはできません。たとえば、次の問合せはエラーとなります。

SELECT * FROM t1, t2, t3
WHERE t1.x = t2.x(+) AND t2.y(+) IN (4,5);

次の問合せは有効です。

SELECT * FROM t1, t2, t3
WHERE t1.x = t2.x(+) AND t1.y IN (4,5);

次の問合せは、内部結合になります。(+)演算子が指定されていない条件は、内部結合として扱われます。

SELECT * FROM t1, t2
WHERE t1.x = t2.x(+) AND t1.y = t2.y;

次の問合せのWHERE句には、外部結合の内部表の列と定数を比較する条件が含まれています。(+)演算子が指定されていないため、この条件は内部結合として扱われます。

SELECT * FROM t1, t2
WHERE t1.x = t2.x(+) AND t2.y = 3;

結合のその他の例は、「JoinedTable」を参照してください。

次の例は、student表の順序の現在の値を返します。

SELECT SEQ.CURRVAL FROM student;

次の問合せのFROM句にはSELECT文が含まれているため、導出表が生成されます。

SELECT * FROM t1, (SELECT MAX(x2) maxx2 FROM t2) tab2
WHERE t1.x1 = tab2.maxx2;

次の問合せは、2つのSELECT文の結果を結合します。

SELECT * FROM t1
WHERE x1 IN (SELECT x2 FROM t2)
UNION
SELECT * FROM t1
WHERE x1 IN (SELECT x3 FROM t3);

次のように、カテゴリ内の最高価格と同じ価格のすべての注文を選択します。

SELECT * FROM orders WHERE price = (SELECT MAX(price)
FROM stock WHERE stock.cat=orders.cat);

次の例では、INTERSECT集合演算子の使用方法を示します。employees表にNULLのdepartment_id値があります。departments表では、department_idはNOT NULLの主キーとして定義されます。INTERSECT集合演算子を使用して返される行には、department_id値がNULLのdepartments表の行は含まれません。

Command> SELECT department_id FROM employees INTERSECT SELECT department_id
> FROM departments;
< 10 >
< 20 >
< 30 >
< 40 >
< 50 >
< 60 >
< 70 >
< 80 >
< 90 >
< 100 >
< 110 >
11 rows found.
Command> SELECT DISTINCT department_id FROM employees;
< 10 >
< 20 >
< 30 >
< 40 >
< 50 >
< 60 >
< 70 >
< 80 >
< 90 >
< 100 >
< 110 >
< <NULL> >
12 rows found.

次の例では、最初の問合せでは返されるが、2番目の問合せでは返されない行を組み合せて、MINUS集合演算子の使用方法を示します。employees表にNULLのdepartment_id値を含む行のみが返されます。

Command> SELECT department_id FROM employees
> MINUS SELECT department_id FROM departments;
< <NULL> >
1 row found.

次の例では、GROUP BY句におけるSUBSTR式の使用方法およびHAVING句における副問合せの使用方法を示します。最初の10行が返されます。

Command> SELECT ROWS 1 TO 10 SUBSTR (job_id, 4,10), department_id, manager_id,
> SUM (salary) FROM employees
> GROUP BY SUBSTR (job_id,4,10),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 SUBSTR (job_id, 4,10),department_id,manager_id;
< ACCOUNT, 100, 108, 39600 >
< ACCOUNT, 110, 205, 8300 >
< ASST, 10, 101, 4400 >
< CLERK, 30, 114, 13900 >
< CLERK, 50, 120, 22100 >
< CLERK, 50, 121, 25400 >
< CLERK, 50, 122, 23600 >
< CLERK, 50, 123, 25900 >
< CLERK, 50, 124, 23000 >
< MAN, 20, 100, 13000 >
10 rows found.

次の例では、更新のためにemployees表をロックし、ロックが取得できるまで10秒間待機します。ロックが10秒以内に取得できない場合、エラーが返されます。最初の5行が選択されます。

Command> SELECT FIRST 5 last_name FROM employees FOR UPDATE WAIT 10;
< King >
< Kochhar >
< De Haan >
< Hunold >
< Ernst >
5 rows found.

次の例では、更新のためにdepartments表をロックします。選択した行が別のプロセスにロックされており、ロックが取得できない場合はエラーが返されます。これは、NOWAITが指定されているためです。

Command> SELECT FIRST 5 last_name e FROM employees e, departments d
> WHERE e.department_id = d.department_id
> FOR UPDATE OF d.department_id NOWAIT;
< Whalen >
< Hartstein >
< Fay >
< Raphaely >
< Khoo >
5 rows found.

次のように、HRスキーマを使用して、副問合せとFOR UPDATE句を同時に使用する例を示します。

Command> SELECT employee_id, job_id FROM job_history
> WHERE (employee_id, job_id) NOT IN (SELECT employee_id, job_id
> FROM employees)
> FOR UPDATE;
< 101, AC_ACCOUNT >
< 101, AC_MGR >
< 102, IT_PROG >
< 114, ST_CLERK >
< 122, ST_CLERK >
< 176, SA_MAN >
< 200, AC_ACCOUNT >
< 201, MK_REP >
8 rows found.

次のように、SELECT ROWS m TO nおよびSELECT FIRSTの動的パラメータのプレースホルダを使用します。

Command> SELECT ROWS ? TO ? employee_id FROM employees;

Type '?' for help on entering parameter values.
Type '*' to end prompting and abort the command.
Type '-' to leave the parameter unbound.
Type '/;' to leave the remaining parameters unbound and execute the command.

Enter Parameter 1 (TT_INTEGER) > 1
Enter Parameter 2 (TT_INTEGER) > 3
< 100 >
< 101 >
< 102 >
3 rows found.
Command> SELECT ROWS :a TO :b employee_id FROM employees;

Type '?' for help on entering parameter values.
Type '*' to end prompting and abort the command.
Type '-' to leave the parameter unbound.
Type '/;' to leave the remaining parameters unbound and execute the command.

Enter Parameter 1 (TT_INTEGER) > 1
Enter Parameter 2 (TT_INTEGER) > 3
< 100 >
< 101 >
< 102 >
3 rows found.
Command> SELECT FIRST ? employee_id FROM employees;

Type '?' for help on entering parameter values.
Type '*' to end prompting and abort the command.
Type '-' to leave the parameter unbound.
Type '/;' to leave the remaining parameters unbound and execute the command.

Enter Parameter 1 (TT_INTEGER) > 3
< 100 >
< 101 >
< 102 >
3 rows found.

次の例では、ORDER BY句でのNULLS LASTの使用方法を示します。employees表を問い合せて、コミッションの割合が.30より大きいかNULLである従業員を検索します。最初の7人の従業員を選択し、commission_pctおよびlast_nameで順序付けします。commision_pctを降順で順序付けし、NULLS LASTを使用してNULL値の行を問合せの最後に表示します。commission_pctとlast_nameを出力します。

Command> SELECT FIRST 7 commission_pct,last_name
FROM employees where commission_pct > .30
OR commission_pct IS NULL
ORDER BY commission_pct DESC NULLS LAST,last_name;
< .4, Russell >
< .35, King >
< .35, McEwen >
< .35, Sully >
< <NULL>, Atkinson >
< <NULL>, Austin >
< <NULL>, Baer >
7 rows found.

WithClause

構文

WithClauseの構文は、次のとおりです。

WITH QueryName AS ( Subquery ) [, QueryName AS ( Subquery )] ...

パラメータ

WithClauseには、次のパラメータがあります。

パラメータ

説明

QueryName AS (Subquery)

SELECT文で複数回使用できる副問合せの別名を指定します。

説明

副問合せのファクタリングによってWITH句が提供され、この句を使用して副問合せブロックに名前を割り当てることができ、その後はその名前をメインのSELECT問合せで複数回参照できます。問合せ名は、メインの問合せとメインの問合せに含まれる副問合せで参照できます。

WITH句は、メインのSELECT文の接頭辞としてのみ定義できます。

副問合せのファクタリングは、重複する、または複雑な副問合せブロックを1つ以上の場所で使用する複雑な問合せの簡素化に役立ちます。また、TimesTenでは、副問合せのファクタリングを使用し、副問合せブロックを一度評価およびマテリアライズして、その結果をSELECT文での各参照に提供することで、問合せを最適化します。

メインの問合せで集合演算子UNION、MINUS、およびINTERSECTを指定できます。

WITH句の使用制限:

- ビューまたはマテリアライズド・ビュー定義でWITH句を使用しないでください。

- グローバル問合せでWITH句を使用しないでください。

- 再帰的な副問合せのファクタリングはサポートされていません。

- 副問合せまたは導出表ではWITH句を使用しないでください。

- 問合せの別名に列パラメータ・リストを指定できません。たとえば、TimesTenではWITH w1(c1,c2) AS ...はサポートされません。

例

次の例では、初期問合せブロックに対して問合せ名dept_costsおよびavg_costを作成し、これらの名前をメインの問合せの本体で使用します。

Command> 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

SelectList

SQL構文

SELECT文のSelectListパラメータの構文は次のとおりです。

{* | [Owner.]TableName.* |
{ Expression | [[Owner.]TableName.]ColumnName |
[[Owner.]TableName.]ROWID | NULL
}
[[AS] ColumnAlias] } [,...]

パラメータ

SELECT文のSelectListパラメータは次のとおりです。

パラメータ

説明

*

問合せ結果の列として、FROM句に指定されたすべての表のすべての列を含めます。

[Owner.]TableName.*

指定した表のすべての列を結果に含めます。

Expression

集計問合せに、GROUP BY句または集計関数が含まれます。
選択リストが集計問合せでない場合、列参照はFROM句内の表を参照する必要があります。

集計問合せの選択リスト内の列参照は、GROUP BY句内の列リストを参照する必要があります。GROUP BY句がない場合、列参照はFROM句内の表を参照する必要があります。GROUP BY句の詳細は、「GROUP BY句」を参照してください。

[[Owner.]Table.] ColumnName

指定された所有者の指定された表の特定の列を含めます。順序のCURRVALまたはNEXTVAL列も指定できます。詳細は、「CURRVALとNEXTVALによるSEQUENCE値の増加」を参照してください。

[[Owner.]Table.] ROWID

指定された所有者の指定された表のROWID擬似列を含めます。

NULL

NULLを指定した場合、デフォルトではVARCHAR(0)のデータ型が生成されます。結果を別のデータ型に変換するには、CAST関数を使用します。ORDER BY句にはNULLを指定できます。

ColumnAlias

ORDER BY句で使用される列の別名は、SelectListの列に対応している必要があります。同じ別名で複数の列を指定できます。
{*|[Owner.]TableName.*|

{Expression |[[Owner.]TableName.]ColumnName |

[[Owner.]TableName.]ROWID

}

[[AS] ColumnAlias]} [,...]

説明

- 各句は、構文に示されたとおりの順序で指定する必要があります。

- TimesTenでは、SelectListで副問合せはサポートされません。

- 選択リストの結果列は、次のいずれかの方法で取得できます。

- 結果列は、FROM句にリストされているいずれかの表から直接取得できます。

- 結果列の値は、FROM句にリストされている表の特定の列の値を使用して、算術式を使用して計算できます。

- 単一表の複数の列の値を算術式で結合して、結果列の値を生成できます。

- 集計関数(AVG、MAX、MIN、SUMおよびCOUNT)を使用すると、行のグループの結果列の値を計算できます。集計関数は、単独で使用することも、式の中で使用することもできます。同じ表の複数の列を処理するDISTINCT修飾子を含む集計関数を指定できます。GROUP BY句を指定しない場合は、問合せを満たすすべての行に関数が適用されます。GROUP BY句を指定した場合は、GROUP BY句で定義された各グループに1回ずつ関数が適用されます。GROUP BY句とともに集計関数を使用する場合は、選択リストに集計関数、算術式、GROUP BY句の列を含めることができます。GROUP BY句の詳細は、「GROUP BY句」を参照してください。

- 固定値を含む結果列は、定数を指定するか、または定数のみを含む式を使用して作成できます。

- 選択リストを使用すると、結果列の取得方法を指定できるだけでなく、問合せ結果を表示する位置を制御できます。選択リストで最初に指定した結果列が問合せ結果の最も左側の列に表示され、残りの列も同様に表示されます。

- SelectListの結果列は、左から右の順に番号が付けられます。左端の列の番号は1です。ORDER BY句内のこの列番号によって、結果列を参照できます。これは、算術式または集計関数で定義した列を参照する場合に特に便利です。

- 表をその表自体と結合するには、FROM句内で表の相関名を複数回定義し、選択リストとWHERE句でその相関名を使用して、その表の列を指定します。

- GROUP BY句を使用した場合、次のように、選択リストに従ってグループごとに1つの応答が返されます。

- 行は、グループ化される前にWHERE句によって削除されます。

- GROUP BY句は、結果行をグループ化します。詳細は、「GROUP BY句」を参照してください。

- 選択リストの集計関数は、グループ単位で計算されます。

例

次の例では、部品が届くまでの平均日数の値のみが返されます。

SELECT AVG(deliverydays)
FROM purchasing.supplyprice;

次の文は、20日未満で配送されるすべての部品の部品番号および配送時刻を返します。

SELECT partnumber, deliverydays
FROM purchasing.supplyprice
WHERE deliverydays < 20;

単一の部品で複数行が返される場合があります。

次の文は、各部品の部品番号と平均価格を返します。

SELECT partnumber, AVG(unitprice)
FROM purchasing.supplyprice
GROUP BY partnumber;

次の例では、結合によってカリフォルニア州の業者の名前と住所が返されます。行は、partnumberの値の昇順で返されます。重複する部品番号を含む行は、vendornameの値の昇順で返されます。FROM句では、選択リストとWHERE句の両方で使用される、2つの相関名(vとs)を定義しています。vendornumber列は、vendorsとsupplypriceで共通する唯一の列です。

SELECT partnumber, vendorname, s.vendornumber,vendorcity
FROM purchasing.supplyprice s, purchasing.vendors v
WHERE s.vendornumber = v.vendornumber AND vendorstate = 'CA'
ORDER BY partnumber, vendorname;

次の問合せでは、表purchasing.partsをそれ自体に結合して、シリアル番号が1133-P-01の部品と同じ販売価格の部品を特定します。

SELECT q.partnumber, q.salesprice
FROM purchasing.parts p, purchasing.parts q
WHERE p.salesprice = q.salesprice AND p.serialnumber = '1133-P-01';

次に、特定の行のROWIDを取得する方法の例を示します。取得したROWIDの値は、後で別のSELECT文、DELETE文またはUPDATE文で使用できます。

SELECT rowid
FROM purchasing.vendors
WHERE vendornumber = 123;

次に、列の別名を使用して、employees表からデータを取得する方法の例を示します。

SELECT MAX(salary) AS max_salary FROM employees;

TableSpec

SQL構文

SELECT文のTableSpecパラメータの構文は次のとおりです。

{[Owner.]TableName [CorrelationName] | JoinedTable | DerivedTable}

単純な表指定の構文は、次のとおりです。

[Owner.]TableName

パラメータ

SELECT文のTableSpecパラメータは次のとおりです。

パラメータ

説明

[Owner.]TableName

参照する表を指定します。

CorrelationName

CorrelationNameは、直前で指定した表の別名を指定します。SELECT文の他の場所でその表の列にアクセスする際、文の中で実際の表名ではなく相関名を使用します。相関名の有効範囲は、それが使用されているSQL文です。相関名は、基本名の構文ルールを満たしている必要があります。「基本名」を参照してください。
単一の文のすべての相関名は、一意である必要があります。

JoinedTable

表の結合を定義する問合せを指定します。JoinedTableの構文の詳細は、「JoinedTable」を参照してください。

DerivedTable

SELECT文の評価から導出された表を指定します。このSELECT文には、FIRST NumRowsまたはROWS m TO n句を指定できません。DerivedTableの構文の詳細は、「DerivedTable」を参照してください。

JoinedTable

JoinedTableパラメータには、CROSS JOIN、INNER JOIN、LEFT OUTER JOINまたはRIGHT OUTER JOINから導出された表を指定します。

SQL構文

JoinedTableの構文は次のとおりです。

{CrossJoin | QualifiedJoin}

CrossJoinは、次のようになります。

TableSpec1 CROSS JOIN TableSpec2

QualifiedJoinは、次のようになります。

TableSpec1 [JoinType] JOIN TableSpec2 ON SearchCondition

QualifiedJoinパラメータでは、JoinTypeの構文は次のとおりです。

{INNER | LEFT [OUTER] | RIGHT [OUTER]}

パラメータ

SELECT文のTableSpec句のJoinedTableパラメータは次のとおりです。

パラメータ

説明

CrossJoin

2つの表に相互結合を実行します。戻り値は、入力表のデカルト積となる結果表です。結果は、次の構文を持つ問合せと同じになります。
SELECT Selectlist FROM Table1, Table2

QualifiedJoin

結合がJoinTypeの種類になることを指定します。

TableSpec1

JOIN句の最初の表を指定します。

TableSpec2

JOIN句の2番目の表を指定します。

JoinType JOIN

実行する結合の種類を指定します。サポートされる結合の種類は、次のとおりです。

- INNER

- LEFT [OUTER]

- RIGHT [OUTER]

INNER JOINは、SearchConditionを満たす2つの表の行を結合した結果表を返します。

LEFT OUTER JOINは、SearchConditionに一致する結合行と、SearchConditionがTRUEと評価されなかった最初の表の行および2番目の表のすべての行を返します。

RIGHT OUTER JOINは、SearchConditionに一致する結合行と、SearchConditionがTRUEと評価されなかった2番目の表の行および最初の表のすべての行を返します。

ON SearchCondition

JOINパラメータで使用する検索基準を指定します。SearchConditionが参照できるのは、現在条件を満たしている結合内で参照されている表のみです。

説明

- FULL OUTER JOINはサポートされていません。

- 結合表は、マテリアライズド・ビューを定義する文以外のすべての文で、FROM句内の表を置き換えるために使用できます。したがって、結合表は、UNION、MINUS、INTERSECT、副問合せ、非マテリアライズド・ビューまたは導出表で使用できます。

- 結合表のオペランドに副問合せは指定できません。たとえば、次の文はサポートされていません。

SELECT * FROM
regions INNER JOIN (SELECT * FROM countries) table2
ON regions.region_id=table2.region_id;

- 結合表のオペランドとしてビューを指定できます。

- 結合表のオペランドとして一時表は指定できません。

- OUTER JOINは、WHERE句のSearchConditionでの(+)演算子の使用またはJOIN表操作の使用という2つの方法で指定できます。同じ文で2つの指定方式の両方を使用することはできません。

- 結合順およびグループ化はJoinedTable演算と併用できますが、(+)演算子とは併用できません。たとえば、次の演算は(+)演算子と併用できません。

t LEFT JOIN (t2 INNER JOIN t3 ON x2=x3) ON (x1 = x2 - x3)

例

これらの例では、HRスキーマのregionsおよびcountries表を使用します。

次の例では、左外部結合を実行します。

SELECT * FROM regions LEFT JOIN countries
ON regions.region_id=countries.region_id
WHERE regions.region_id=3;

< 3, Asia, JP, Japan, 3 >
< 3, Asia, CN, China, 3 >
< 3, Asia, IN, India, 3 >
< 3, Asia, AU, Australia, 3 >
< 3, Asia, SG, Singapore, 3 >
< 3, Asia, HK, HongKong, 3 >
6 rows found.

次のように、左外部結合を(+)演算子とともに実行することもできます。

SELECT * FROM regions, countries
WHERE regions.region_id=countries.region_id (+)
AND regions.region_id=3;

(+)演算子と併用する結合のその他の例は、「例」を参照してください。

次の例では、右外部結合を実行します。

SELECT * FROM regions RIGHT JOIN countries
ON regions.region_id=wountries.region_id
WHERE regions.region_id=3;

< AU, Australia, 3, 3, Asia >
< CN, China, 3, 3, Asia >
< HK, HongKong, 3, 3, Asia >
< IN, India, 3, 3, Asia >
< JP, Japan, 3, 3, Asia >
< SG, Singapore, 3, 3, Asia >
6 rows found.

次の例では、右外部結合を(+)演算子とともに実行します。

SELECT * FROM countries, regions
WHERE regions.region_id (+)=countries.region_id
AND countries.region_id=3;
< JP, Japan, 3, 3, Asia >
< CN, China, 3, 3, Asia >
< IN, India, 3, 3, Asia >
< AU, Australia, 3, 3, Asia >
< SG, Singapore, 3, 3, Asia >
< HK, HongKong, 3, 3, Asia >
6 rows found.

右結合方式では、同じ行が異なる表示順序で生成されることに注意してください。結合結果の行の順序は予期できません。

次の例では、内部結合を実行します。

SELECT * FROM regions INNER JOIN countries
ON regions.region_id=countries.region_id
WHERE regions.region_id=2;

< 2, Americas, US, United States of America, 2 >
< 2, Americas, CA, Canada, 2 >
< 2, Americas, BR, Brazil, 2 >
< 2, Americas, MX, Mexico, 2 >
< 2, Americas, AR, Argentina, 2 >
5 rows found.

次の例では、相互結合を実行します。

SELECT * FROM regions CROSS JOIN countries
WHERE regions.region_id=1;

< 1, Europe, AR, Argentina, 2 >
< 1, Europe, AU, Australia, 3 >
< 1, Europe, BE, Belgium, 1 >
< 1, Europe, BR, Brazil, 2 >
...
< 1, Europe, SG, Singapore, 3 >
< 1, Europe, UK, United Kingdom, 1 >
< 1, Europe, US, United States of America, 2 >
< 1, Europe, ZM, Zambia, 4 >
< 1, Europe, ZW, Zimbabwe, 4 >
25 rows found.

関連項目

「CREATE TABLE」
「INSERT」
「INSERT...SELECT」
「UPDATE」

DerivedTable

導出表は、FROM句のSELECT文の結果で、別名を持ちます。

SQL構文

DerivedTableの構文は次のとおりです。

(Subquery) [CorrelationName]

パラメータ

SELECT文のTableSpec句のDerivedTableパラメータは次のとおりです。

パラメータ

説明

Subquery

副問合せの詳細は、「副問合せ」を参照してください。

CorrelationName

オプションで、CorrelationNameを使用して、導出表の別名を指定します。問合せで参照される表名とは異なる名前である必要があります。

説明

導出表を使用する場合は、次の制限が適用されます。

- 別の表を参照しないSELECT文ではDUAL表を使用できますが、この場合は少なくとも1つの行を返す必要があります。DUALから選択することは、定数式(結果が定数値になる式)をSELECT文で計算する場合に便利です。 DUALには行が1つしかないため、定数が返されるのは1回のみです。

- Subqueryは、別の導出表の列を参照できません。

- 導出表は、結合表のソースとしては使用できません。

- 導出表は、DELETE文またはUPDATE文のターゲットとしては使用できません。

GROUP BY句

GROUP BY句を指定すると、データベースで、選択した行を各行の式の値に基づいてグループ化し、各グループのサマリー情報を1行戻すことができます。GROUP BY句を省略した場合、問合せの結果全体が1つのグループとして扱われます。この句にCUBEまたはROLLUPを指定した場合、標準グループ化の他に超集合グループ化が結果に含まれます。

GROUP BY句の式では、次のことが可能です。

- 1つまたは複数の列を指定します。

- 算術演算、ROWID擬似列またはNULLを使用します。

- 日付、定数または動的パラメータを使用します。

- ROLLUPまたはCUBE句を使用すると、標準グループ化の他に超集合グループ化が結果で生成されます。超集合グループ化は、GROUP BY句で標準グループ化とともに返される、計算された小計および合計です。

- GROUPING SETS句を使用して、生成する超集合グループ化を指定します。

GROUP BY句を使用する場合、SelectListには集計関数およびGROUP BY句で参照される列のみを含めることができます。選択リストに構成要素*、TableName.*またはOwner.TableName.*が含まれている場合は、*に含まれているすべての列をGROUP BY句に含める必要があります。グループ化された行では、NULL値は同じ値とみなされます。他のすべての列が同じである場合、列中のすべてのNULL値は単一のグループにまとめられます。

注意:
NULLグループ化を識別し、潜在的に超集合グループ化から削除するには、「GROUPING」で説明されているように、GROUPING関数を使用します。

SQL構文

GROUP BY句の一般的な構文は次のとおりです。

GROUP BY
{Expression | RollupCubeClause | GroupingSetsClause }[,...]

GroupingSetsClause::=  GROUPING SETS
GroupingExpressionList | RollupCubeClause [,...]

RollupCubeClause
{ ROLLUP | CUBE } ( GroupingExpressionList ) }

GroupingExpressionList::=
{ Expression | ExpressionList [, { Expression | ExpressionList } ] ...}

ExpressionList :: = ( Expression [, Expression ] ...)

パラメータ

パラメータ

説明

Expression

有効な式の構文。第3章「式」を参照してください。

RollupCubeClause

GROUP BY句には、1つ以上のROLLUPまたはCUBE句が含まれることがあります。

GroupingSetsClause

GROUP BY句には、1つ以上のGROUPING SETS句が含まれることがあります。GROUPING SETS句を使用すると、データベースが戻すデータのグループを明示的に指定できます。詳細は、「GROUPING SETS」を参照してください。

GroupingExpressionList

GROUP BY句には、複数の式または式リストを含めることができます。

ROLLUP GroupingExpressionList

ROLLUP句は、グループから超集合行を生成するために使用されます。詳細は、「ROLLUP」を参照してください。

CUBE GroupingExpressionList

CUBE句は、CUBE句のグルーピング列の可能なすべての組合せの値に基づいて、選択された行をグループ化します。詳細は、「CUBE」を参照してください。

ExpressionList

カンマで区切られた、1つ以上の式のリスト。

例

次のGROUP BYの例では、employees表の従業員の給与を合計し、SUBSTR式を使用して、職務権限ごとにデータをグループ化します。

Command> SELECT SUBSTR (job_id, 4,10), SUM (salary) FROM employees
> GROUP BY SUBSTR (job_id,4,10);
< PRES, 24000 >
< VP, 34000 >
< PROG, 28800 >
< MGR, 24000 >
< ACCOUNT, 47900 >
< MAN, 121400 >
< CLERK, 133900 >
< REP, 273000 >
< ASST, 4400 >
9 rows found.

emp_details_viewを問い合せて、先頭の10部門およびその部門のマネージャを選択し、その部門で同じマネージャの管理下にある従業員の数をカウントします。GROUP BY句を使用して、結果を部門およびマネージャごとにグループ化します。

Command> columnlabels on;
Command> SELECT first 10 department_id AS DEPT, manager_id AS MGR,
> COUNT(employee_id) AS NUM_EMP
> FROM emp_details_view
> GROUP BY (department_id, manager_id)
> ORDER BY department_id, manager_id;

DEPT, MGR, NUM_EMP
< 10, 101, 1 >
< 20, 100, 1 >
< 20, 201, 1 >
< 30, 100, 1 >
< 30, 114, 5 >
< 40, 101, 1 >
< 50, 100, 5 >
< 50, 120, 8 >
< 50, 121, 8 >
< 50, 122, 8 >
10 rows found.

ROLLUP、CUBEおよびGROUPING SETS句

次の定義では、列をROLLUP、CUBEおよびGROUPING SETS句でグループ化する方法を説明します。

- グルーピング列: GROUP BY句で使用される1つの列。たとえば、次のGROUP BY句では、X、YおよびZはグループ列です。

GROUP BY X, GROUPING SETS(Y, Z)

- 複合列: カッコ内のグルーピング列のリスト。たとえば、次の句では、(C1, C2)および(C3, C4)は複合列です。

GROUP BY ROLLUP( (C1,C2), (C3,C4), C5);

- グルーピング: グルーピングは、グルーピング・セット内の1つの集計レベルです。たとえば、次の文では、(C1)および(C2, C3)は個別のグルーピングです。

GROUP BY GROUPING SETS(C1, (C2,C3));

- グルーピング・セット: カッコ内のグルーピングのコレクション。たとえば、次の文では、(C1, (C2, C3))および(C2, (C4, C5))は、2つの個別のグルーピング・セットです。

GROUP BY GROUPING SETS(C1, (C2,C3)), GROUPING SETS(C2, (C4, C5));

- 連結グルーピング・セット: 複数のグルーピング・セットをカンマで区切ります。結果は、各グルーピング・セットからのグループ化のクロス積です。

- 総計または空のセット列: 総計または空のセットのグルーピングは、すべての行を1つのグループとみなすことによって集計を計算します。ROLLUPおよびCUBE句では、総計は自動的に結果に含まれますが、GROUPING SETS句では、空のカッコ( )を指定することで要求します。

重複したグルーピング列をROLLUP、CUBEまたはGROUPING SETSで使用できます。ただし、結果行は重複します。

ROLLUP、CUBEおよびGROUPING SETS句の制限は、次のとおりです。

- これらの句は、マテリアライズド・ビュー定義ではサポートされません。

- これらの句は、キャッシュ・グリッド間のグローバル問合せではサポートされません。

次の項では、GROUPING SETS、ROLLUPおよびCUBE句について説明します。

- 「GROUPING SETS」

- 「ROLLUP」

- 「CUBE」

GROUPING SETS

GROUPING SETS句を使用すると、データベースが戻すデータのグループを明示的に指定できます。目的の超集合サマリーのみが生成されるように、必要なグループのみをカッコで囲んで指定します。

次の文は3つのグループを生成し、1つのグループは各性別と年の列について結果を返し、2番目のグループは各月のサマリー超集合について結果を返し、最後のグループは総計について結果を返します。

SELECT GENDER, YEAR, MONTH,
SUM (NUM_OF_STUDENTS) AS TOTAL
FROM INSTRUCTOR_SUMMARY
GROUP BY GROUPING SETS ((GENDER, YEAR),  -- 1ST GROUP
(MONTH), -- 2ND GROUP
()); -- 3RD GROUP

複数のGROUPING SETSを組み合せて、複数のGROUPING SETS間の特定の組合せを生成できます。次の文には、2つのGROUPING SETS句があります。

GROUP BY GROUPING SETS (YEAR, MONTH),
GROUPING SETS (WEEK, DAY);

これは、次のGROUPING SETS文と同等です。

GROUP BY GROUPING SETS (YEAR, WEEK),
(YEAR, DAY),
(MONTH, WEEK),
(MONTH, DAY);

次のように、GROUP BY句に通常のグルーピング列とGROUPING SETS句の両方がある場合、結果は通常のグルーピング列でグループ化されます。

GROUP BY a, b GROUPING SETS(c, d);

これは、次のルールと同等です。

GROUP BY GROUPING SETS((a, b, c), (a, b, d));

例

次の例は、(region_name, country_name)、state_provinceおよび総計のグルーピング・セットを指定します。

Command> SELECT region_name AS Region,
>    country_name AS Country,
>    state_province AS State,
>    COUNT(employee_id) AS "Total Emp"
> FROM regions r, countries c, locations l, departments d, employees e
> WHERE r.region_id = c.region_id AND
>    l.country_id = c.country_id AND
>    d.location_id = l.location_id AND
>    d.department_id = e.department_id
> GROUP BY grouping sets((region_name, country_name), state_province, ())
> ORDER BY region_name, state_province;

REGION, COUNTRY, STATE, TOTAL EMP
< Americas, Canada, <NULL>, 2 >
< Americas, United States of America, <NULL>, 68 >
< Europe, Germany, <NULL>, 1 >
< Europe, United Kingdom, <NULL>, 35 >
< <NULL>, <NULL>, Bavaria, 1 >
< <NULL>, <NULL>, California, 45 >
< <NULL>, <NULL>, Ontario, 2 >
< <NULL>, <NULL>, Oxford, 34 >
< <NULL>, <NULL>, Texas, 5 >
< <NULL>, <NULL>, Washington, 18 >
< <NULL>, <NULL>, <NULL>, 106 >
< <NULL>, <NULL>, <NULL>, 1 >
12 rows found.

ROLLUP

ROLLUPは、GROUP BY句で使用します。ROLLUPをSUMとともに使用すると、最も詳細なレベルの小計(ROLLUP句で指定したすべての列)から総計レベルまでが、レベルごとに列を1つずつ削除して生成されます。これらは超集合行と呼ばれます。

ROLLUP句では次の項目が返されます。

- ROLLUPを使用しないでGROUP BYによって生成される通常の集計行。

- ROLLUP句で指定されたグルーピング・リストに基づく小計。ROLLUPは、その引数として、グルーピング列の順序付けリストを取ります。各小計は、グルーピング列の順序付けリストに対して、総計に達するまで最も右にあるグルーピング列を削除しながら作成されます。たとえば、GROUP BY ROLLUP(x, y, z)を指定した場合、返される超集合グループは(x,y,z)、(x,y)、(x)、( )のようになります。
作成される小計の数はn+1個の集計レベルであり、nはグルーピング列の数です。たとえば、3つの式(n=3)がROLLUP句にある場合、n+1 = 3+1つまり4個のグルーピングになります。

- 総計行。

カッコ内の複合列を使用して列をグループ化できます。たとえば、次のような文があるとします。

GROUP BY ROLLUP( (a, b), (c, d), e);

(a, b)および(c, d)複合列は、データベースによってROLLUPの結果が生成される際に、1つの単位として処理されます。この例では、返されるグルーピング・セットは、((a, b), (c, d), e )、((a, b), (c, d))、(a, b)および()となります。

次のように、複数のROLLUP句をSELECT文で実行できます。

SELECT C1, COUNT(*)
FROM T
GROUP BY ROLLUP(a, b), ROLLUP(c, d);

これは、次の文と同じです。

SELECT C1, COUNT(*)
FROM T
GROUP BY GROUPING SETS((a, b),(a),()),
GROUPING SETS((c, d),(c), ());

例

employees表を問い合せて、先頭の10部門を選択し、各部門の各マネージャの管理下にある従業員数を戻します。ROLLUPを使用して、各部門の従業員数の小計を算出し、会社のすべての従業員の総計を戻します。

Command> SELECT first 10 department_id AS Dept,
> manager_id AS Mgr,
> COUNT(employee_id) AS "Total emp"
> FROM employees
> GROUP BY ROLLUP(department_id, manager_id)
> ORDER BY department_id, manager_id;

DEPT, MGR, TOTAL EMP
< 10, 101, 1 >
< 10, <NULL>, 1 >
< 20, 100, 1 >
< 20, 201, 1 >
< 20, <NULL>, 2 >
< 30, 100, 1 >
< 30, 114, 5 >
< 30, <NULL>, 6 >
< 40, 101, 1 >
< 40, <NULL>, 1 >
10 rows found.

次の問合せによって、各地域、国および州または都道府県の従業員数が返されます。ロールアップによって、各州または都道府県および各国の全従業員の小計の超集合行、および会社の全従業員の総計が返されます。地域と国を(カッコに入れて)独自の単位として組み合せることによって、ロールアップでは各地域の全従業員は返されません。

Command> SELECT region_name AS Region,
>  country_name AS Country,
>  state_province AS State,
>  COUNT(employee_id) AS "Total Emp"
>  FROM regions r, countries c, locations l, departments d, employees e
>  WHERE r.region_id = c.region_id
>  AND l.country_id = c.country_id
>  AND d.location_id = l.location_id
>  AND d.department_id = e.department_id
>  GROUP BY rollup((region_name, country_name), state_province)
>  ORDER BY region_name;

REGION, COUNTRY, STATE, TOTAL EMP
< Americas, Canada, Ontario, 2 >
< Americas, United States of America, Texas, 5 >
< Americas, United States of America, California, 45 >
< Americas, United States of America, Washington, 18 >
< Americas, Canada, <NULL>, 2 >
< Americas, United States of America, <NULL>, 68 >
< Europe, Germany, Bavaria, 1 >
< Europe, United Kingdom, <NULL>, 1 >
< Europe, United Kingdom, Oxford, 34 >
< Europe, Germany, <NULL>, 1 >
< Europe, United Kingdom, <NULL>, 35 >
< <NULL>, <NULL>, <NULL>, 106 >
12 rows found.

CUBE

CUBE句は、CUBE句のグルーピング列の可能なすべての組合せの値に基づいて、選択された行をグループ化します。グループごとに1つのサマリー情報行が戻されます。たとえば、3つの式(n=3)がCUBE句にある場合、2n = 2^3つまり8個のグルーピングになります。n個の式の値でグループ化した行を標準行、その他すべてを超集合行といいます。複合列を使用してグループ化できます。たとえば、一般的に要求されるCUBE操作は、月、州および販売製品のすべての組合せに基づいた州の売上小計用です。

GROUP BY CUBE(a, b, c)を指定した場合、結果として生成される集計グルーピングは、(a,b,c)、(a,b)、(a,c)、(b,c)、a、b、c、( )です。

例

各地域および国の従業員数を返すには、次の問合せを発行します。

Command> SELECT region_name AS Region,
> country_name AS Country,
> COUNT(employee_id) AS "Total Emp"
> FROM regions r, countries c, locations l, departments d, employees e
> WHERE r.region_id = c.region_id
> AND l.country_id = c.country_id
> AND d.location_id = l.location_id
> AND d.department_id = e.department_id
> GROUP BY CUBE(region_name, country_name)
> ORDER BY region_name;

REGION, COUNTRY, TOTAL EMP
< Americas, Canada, 2 >
< Americas, United States of America, 68 >
< Americas, <NULL>, 70 >
< Europe, Germany, 1 >
< Europe, United Kingdom, 35 >
< Europe, <NULL>, 36 >
< <NULL>, Canada, 2 >
< <NULL>, Germany, 1 >
< <NULL>, United Kingdom, 35 >
< <NULL>, United States of America, 68 >
< <NULL>, <NULL>, 106 >
11 rows found.

TRUNCATE TABLE

TRUNCATE TABLE文は、すべての行を削除するDELETE文と類似しています。ただし、DELETEは行を個別に削除するため、ほとんどの場合DELETEよりも処理が高速に実行されます。

必要な権限

表の所有者に必要な権限はありません。

別のユーザーの表の場合、DELETEが必要です。

SQL構文

TRUNCATE TABLE [Owner.]TableName

パラメータ

パラメータ

説明

[Owner.]TableName

切り捨てる表を指定します。

説明

- TRUNCATEはDDL文であるため、DDLCommitBehavior属性によって制御されます。DDLCommitBehavior=0(デフォルト)の場合、TRUNCATE文の実行前と実行後にコミットが実施されます。DDLCommitBehavior=1の場合、TRUNCATEはトランザクションの一部となり、次のトランザクション・ルールが適用されます。

- TRUNCATE操作はロールバックできます。

- TRUNCATE文と同じトランザクション内で、この文の後にINSERT文を使用することはできません。

- 同時読取りのコミット読取り操作が可能であり、読取りセマンティックはDELETE文がある場合の読取りのコミット読取りと同じになります。

- 子表がある場合でも、TRUNCATEを実行できます。ただし、TRUNCATEを実行するには、子表を空にする必要があります。いずれかの子表に行が含まれていると、子表が空でないことを示すエラーが返されます。

- TRUNCATEは、マテリアライズド・ビューのディテール表、キャッシュ・グループに含まれる表または一時表ではサポートされていません。

- 表に可変長の表外データが含まれている場合、TRUNCATE TABLEの実行結果は、表内のすべての行を削除するDELETE文と同じです。表外データの詳細は、「数値データ型」を参照してください。

- 表をレプリケートしている場合にTRUNCATE文を使用すると、操作対象の行が存在しない場合でも、サブスクライバにレプリケートされます。

- タイムスタンプ競合検出が有効な状態で表をレプリケートすると、競合はレポートされません。

- 切り捨てられた表がコミットされていない場合は、この表のハッシュ・ページを変更するために、DROP TABLEおよびALTER TABLE操作を使用できません。

例

recreation.clubs表のすべての行を削除するには、次の文を使用します。

TRUNCATE TABLE recreation.clubs;

関連項目

「ALTER TABLE」
「DROP TABLE」

UNLOAD CACHE GROUP

UNLOAD CACHE GROUP文は、キャッシュ・グループからデータを削除します。

必要な権限

キャッシュ・グループの所有者に必要な権限はありません。

別のユーザーのキャッシュ・グループの場合、UNLOAD CACHE GROUPまたはUNLOAD ANY CACHE GROUPが必要です。

SQL構文

UNLOAD CACHE GROUP [Owner.]GroupName
[WHERE ConditionalExpression]
[COMMIT EVERY n ROWS]

または

UNLOAD CACHE GROUP [Owner.]GroupName
WITH ID (ColumnValueList);

パラメータ

パラメータ

説明

[Owner.]GroupName

キャッシュ・グループに割り当てられた名前。

WHERE ConditionalExpression

WHERE句を使用すると、キャッシュ処理のターゲット行を指定する検索条件を指定できます。WHERE句で複数の表を使用し、これらの表に同じ名前の列がある場合は、表名を完全修飾します。

COMMIT EVERY n ROWS

COMMIT EVERY n ROWS句を使用して、アンロード操作中にコミットを発行する頻度(アンロードされる行数に基づく)を指定します。
ROWSは、キャッシュ・グループから削除される行数を指します。たとえば、キャッシュ・グループに1つのキャッシュ・インスタンスがあり、そのキャッシュ・インスタンスが1つの親行と10の子行で構成されている場合で、COMMIT EVERY 2 ROWSを発行すると、TimesTenでは、キャッシュ・インスタンス全体が消去されてからコミットを1つ発行します。TimesTenでは、キャッシュ・インスタンスの消去中はコミットされません。そのため、アンロード操作がしきい値(この場合2行)に達すると、TimesTenでは、そのキャッシュ・インスタンスのすべての行が消去されてからコミットが発行されます。

この句を指定する場合は、キャッシュ・エージェントが稼働中で、トランザクションで実行されている操作がアンロードのみである必要があります。

nは整数(n >= 0)で指定します。nに0を指定すると、UNLOAD CACHE GROUP文は、1つのトランザクションとして実行され、キャッシュ・エージェントが削除を実行します。

パフォーマンスを高めるには、大量のデータに影響するキャッシュ・グループで操作を実行する際にこの句を使用します。

データが少量のキャッシュ・グループでは、この句を使用しないでください。

WITH ID ColumnValueList

WITH ID句を使用すると、主キーの値を使用してキャッシュ・インスタンスをアンロードできます。ColumnValueListを主キーの値を表すリテラルまたはバインディング・パラメータのリストとして指定します。

説明

- UNLOAD CACHE GROUP文は、Oracle Database表のデータに影響することなく、TimesTenキャッシュ表から行を消去します。

- キャッシュ・グループがレプリケートされている場合、UNLOAD CACHE GROUP文によって、レプリケートされたキャッシュ・グループの内容全体も削除されます。

- AWTキャッシュ・グループに対するUNLOAD CACHE GROUP文の実行は、行に対する更新がOracle Databaseに伝播されるまで待機します。

- UNLOAD CACHE GROUP文は、すべての種類のキャッシュ・グループに使用できます。キャッシュ・グループの種類については、「CREATE CACHE GROUP」を参照してください。

- AUTOREFRESH属性を持つキャッシュ・グループでは、UNLOAD CACHE GROUP文を慎重に使用してください。Oracle Databaseで行または子行が更新されると、自動リフレッシュ操作の結果として、アンロードされた行がキャッシュ・グループに再表示されることがあります。

- UNLOAD CACHE GROUP文の実行後、ODBC関数SQLRowCount()、JDBCメソッドgetUpdateCount()、およびOCI_ATTR_ROW_COUNT引数が指定されたOCI関数OCIAttrGet()を実行すると、アンロードされたキャッシュ・インスタンスの数が返されます。

- COMMIT EVERY n ROWS句を指定する場合は、キャッシュ・エージェントはアンロード処理を実行し、データのアンロード後にトランザクションをコミットします。キャッシュ・エージェントが稼働していることを確認してください。COMMIT EVERY n ROWS句を指定しない場合は、アンロード処理はアプリケーションによって実行されます。

- COMMIT EVERY n ROWS句を指定する場合は、アンロード操作をロールバックできません。COMMIT EVERY n ROWS句(nは0以上の値)を指定しているときにアンロード操作が失敗すると、アンロードされた行の一部はすでにコミットされているために、キャッシュ・グループが一貫性のない状態になる場合があります。そのため、一部のキャッシュ・インスタンスが部分的にしかアンロードされていない可能性があります。その場合は、キャッシュ・グループを再度アンロードします。

- WITH ID句を使用して、バインディング・パラメータを指定します。

- UNLOAD CACHE GROUP操作は独自のトランザクションで実行されます。

制限

- WHERE句で子表を参照しないでください。

- キャッシュ・グループが動的キャッシュ・グループでない場合は、読取り専用キャッシュ・グループまたは自動リフレッシュ属性を持つユーザー管理キャッシュ・グループでWITH ID句を使用しないでください。

- WITH ID句はCOMMIT EVERY n ROWS句と同時に使用しないでください。

- COMMIT EVERY n ROWS句を使用しないでください。GlobalProcessingオプティマイザ・フラグを設定する場合でCOMMIT EVERY n ROWS句でアンロード操作を指定する場合は、TimesTenによりエラーがスローされます。ただし、GlobalProcessingオプティマイザ・フラグを設定する場合でCOMMIT EVERY n ROWS句を使用せずにアンロード操作を指定すると、アンロード処理はグリッド・メンバー間に伝播されます。

例

キャッシュ表からデータをアンロードする場合はUNLOAD CACHE GROUP... COMMIT EVERY n ROWSを使用します。COMMIT EVERY n ROWS句が使用されるため、キャッシュ・エージェントはデータをアンロードします。

Command> UNLOAD CACHE GROUP testcache WHERE sampleuser.orders.order_id > 100
> COMMIT EVERY 100 ROWS;
2 cache instances affected.

キャッシュ・グループをCREATEおよびUNLOADします。COMMIT EVERY n ROWS句が使用されないため、アプリケーションはアンロードを実行します。

CREATE CACHE GROUP recreation.cache
FROM recreation.clubs (
clubname CHAR(15) NOT NULL,
clubphone SMALLINT,
activity CHAR(18),
PRIMARY KEY(clubname))
WHERE (recreation.clubs.activity IS NOT NULL);
UNLOAD CACHE GROUP recreation.cache;

関連項目

「ALTER CACHE GROUP」
「CREATE CACHE GROUP」
「DROP CACHE GROUP」
「FLUSH CACHE GROUP」
「LOAD CACHE GROUP」

UPDATE

UPDATE文は、表のすべての行または検索条件を満たす行の1つ以上の列値を更新します。

必要な権限

表の所有者に必要な権限はありません。

別のユーザーの表の場合、UPDATEが必要です。

SQL構文

UPDATE [hint] [FIRST NumRows]
{[Owner.]TableName [CorrelationName]}
SET {ColumnName =
{Expression1 | NULL | DEFAULT}} [,...]
[ WHERE SearchCondition ]
RETURNING|RETURN Expression2[,...] INTO DataItem[,...]

パラメータ

パラメータ

説明

hint

UPDATE文に文レベルのオプティマイザ・ヒントを指定します。ヒントの詳細は、「文レベルのオプティマイザ・ヒント」を参照してください。

FIRST NumRows

更新する行の数を指定します。FIRST NumRowsは、副問合せの文ではサポートされていません。NumRowsには、正のINTEGER値か動的パラメータのプレースホルダを指定する必要があります。動的パラメータのプレースホルダの構文は、?または:DynamicParameterです。動的パラメータの値は、文の実行時に設定されます。

[Owner.]TableName [CorrelationName]

[Owner.]TableNameには、更新する表を指定します。
CorrelationNameは、表の別名を指定し、「基本名」に従って基本名の構文ルールを満たしている必要があります。UPDATE文の他の場所でその表の列にアクセスする際、実際の表名ではなく相関名を使用します。相関名の有効範囲は、それが使用されているSQL文です。

単一の文のすべての相関名は、一意である必要があります。

SET ColumnName

ColumnNameは、更新する列を指定します。単一のUPDATE文で同じ表の複数の列を更新できます。主キー列の値が変更されないかぎり、更新する列のリストに主キー列を含めることができます。

Expression1

集計関数を含まない式。式は、更新操作に指定した行ごとに評価されます。式のデータ型は、更新する列のデータ型と互換性がある必要があります。値を更新する場合、Expression1には列や順序CURRVALまたはNEXTVAL参照を指定できます。詳細は、「CURRVALとNEXTVALによるSEQUENCE値の増加」を参照してください。

NULL

WHERE句を満たす各行の指定した列にNULL値を挿入します。NULL値可能な列である必要があります。

DEFAULT

列をデフォルト値で更新する必要があることを指定します。

WHERE SearchCondition

検索条件には副問合せを含めることができます。検索条件がTRUEとなる行はすべて、SET句の指定に従って更新されます。検索条件に一致しない行に影響はありません。検索条件に一致する行がない場合、表は変更されません。

Expression2

有効な式の構文。第3章「式」を参照してください。

DataItem

取得したExpression2値を格納するホスト変数またはPL/SQL変数。

説明

- WHERE句を省略した場合、表のすべての行はSET句の指定に従って更新されます。

- UPDATE操作中に文字またはバイナリ文字列が切り捨てられた場合、TimesTenによって警告が生成されます。

- 一意制約が定義されている表を、重複する行を含むように更新することはできません。

- 外部キー制約に違反するUPDATE操作はエラーになります。外部キー制約の詳細は、「CREATE TABLE」を参照してください。

- RETURNING句の制限:

- 各Expression2は単純な式である必要があります。集計関数はサポートされません。

- 順序番号はOUTパラメータに戻せません。

- ROWNUMおよび副問合せは、RETURNING句では使用できません。

- RETURNING句に使用されているパラメータは、UPDATE文で重複して使用できません。

- RETURNING句を使用して複数行を戻すには、PL/SQL BULK COLLECT機能が必要です。『Oracle TimesTen In-Memory Database PL/SQL開発者ガイド』のFORALL操作およびBULK COLLECT操作に関する説明を参照してください。

- PL/SQLでは、RETURNING句はWHERE CURRENT処理と一緒には使用できません。

例

UPDATE文を使用してdepartment_idが110の従業員を更新します。department_idが110の従業員は、manager_idをjob_idが'FI_ACCOUNT'の従業員のmanager_idに更新します。SET句の副問合せでDISTINCT修飾子を使用します。

job_idが'FI_ACCOUNT'の従業員のmanager_idを検索します。

Command> SELECT manager_id FROM employees where job_id = 'FI_ACCOUNT';
< 108 >
< 108 >
< 108 >
< 108 >
< 108 >
5 rows found.

次に、department_idが110の従業員のmanager_idを検索します。

Command> SELECT manager_id FROM employees WHERE department_id = 110;
< 101 >
< 205 >
2 rows found.

ここでdepartment_idが110の従業員のmanager_idを検索します。SET副問合せでSELECT DISTINCTを使用します。UPDATE実行後、department_idが110の従業員のmanager_idが更新されたことを確認します。

Command> UPDATE employees SET manager_id =
>   (SELECT DISTINCT employees.manager_id
>    FROM employees
>    WHERE employees.job_id = 'FI_ACCOUNT')
> WHERE employees.department_id = 110;
2 rows updated.

Command> SELECT manager_id FROM employees WHERE department_id = 110;
< 108 >
< 108 >
2 rows found.

UPDATE文のSET句で副問合せを使用します。location_idが1700またはlocation_idが2400の従業員を更新します。これらの従業員のdepartment_idをlocation_idが2500のdepartment_idに設定します。(これはdepartment_id 80です。)これらの従業員の給与を所属する部門の最大給与に設定します。

最初の5人の従業員に対して問合せを実行してdepartment_idと給与を確認します。

Command> SELECT FIRST 5 employee_id, department_id, salary
> FROM employees
> ORDER BY employee_id, department_id, salary;
< 100, 90, 24000 >
< 101, 90, 17000 >
< 102, 90, 17000 >
< 103, 60, 9000 >
< 104, 60, 6000 >
5 rows found.

ここでUPDATE文を使用して従業員を更新します。

Command> UPDATE employees e1
> SET department_id =
>      (SELECT department_id FROM departments
>       WHERE location_id = 2500),
>     salary =
>      (SELECT MAX(salary) FROM employees e2
>       WHERE e1.department_id = e2.department_id)
> WHERE department_id IN
>   (SELECT department_id FROM departments
>    WHERE location_id = 2400 OR location_id = 1700);
19 rows updated.

最初の5人の従業員を再度問合せて、元のdepartment_id90が更新されていることを確認します。department_idは80になり、給与は24000になっています。

Command> SELECT FIRST 5 employee_id, department_id, salary
> FROM employees
> ORDER BY employee_id, department_id, salary;
< 100, 80, 24000 >
< 101, 80, 24000 >
< 102, 80, 24000 >
< 103, 60, 9000 >
< 104, 60, 6000 >
5 rows found.

次の例は、コストが$500を超える部品の価格を25%引き上げます。

UPDATE purchasing.parts
SET salesprice = salesprice * 1.25
WHERE salesprice > 500.00;

次の例は、順序seqのNEXTVAL値を使用して列を更新します。

UPDATE student SET studentno = seq.NEXTVAL WHERE name = 'Sally';

次の問合せは、1つでも未出荷注文のあるすべての顧客のステータスを更新します。

UPDATE customers SET customers.status = 'unshipped'
WHERE customers.id = ANY
(SELECT orders.custid FROM orders
WHERE orders.status = 'unshipped');

idが主キーでない場合、次の文はすべての重複する注文を更新します。

UPDATE orders a set orders.status = 'shipped'
WHERE EXISTS (SELECT 1 FROM orders b
WHERE a.id = b.id AND a.rowid < b.rowid);

次の例は、employees表内の'Jones'という姓の従業員について、job_id、salaryおよびdepartment_idを更新します。salary、last_nameおよびdepartment_idの値が変数に返されます。

Command> VARIABLE bnd1 NUMBER(8,2);
Command> VARIABLE bnd2 VARCHAR2(25) INLINE NOT NULL;
Command> VARIABLE bnd3 NUMBER(4);
Command> 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;
1 row updated.
Command> PRINT bnd1 bnd2 bnd3;
BND1                 : 950
BND2                 : Jones
BND3                 : 140

結合更新

TimesTenでは、結合更新文がサポートされています。結合更新を使用すると、副問合せの結果を使用して、表の列を1つ以上更新できます。

構文

UPDATE [Owner.]TableName
SET ColumnName=Subquery
[WHERE SearchCondition]

または

UPDATE [Owner.]TableName
SET (ColumnName[,...])=Subquery
[WHERE SearchCondition]

パラメータ

結合更新文には、次のパラメータがあります。

パラメータ

説明

[Owner.]TableName

更新する表を指定します。

SET (ColumnName[,...])= Subquery

更新する列を指定します。単一のUPDATE文で同じ表の複数の列を更新できます。SET句に含めることができる副問合せは1つのみですが、この副問合せはネストできます。
副問合せの選択リストの値の数は、SET句で指定された列数と同じである必要があります。副問合せが更新する行に対して2行以上返す場合は、エラーが返されます。

WHERE SearchCondition

検索条件には副問合せを含めることができます。検索条件がTRUEとなる行はすべて、SET句の指定に従って更新されます。検索条件に一致しない行に影響はありません。検索条件に一致する行がない場合、表は変更されません。

説明

結合更新のSET句内で副問合せを使用しても、更新されるターゲット表の行数は削減されません。削減は、WHERE句を使用して指定する必要があります。したがって、WHERE句内でターゲット表の行が指定されているにもかかわらず、副問合せがこの行に対していずれの行も返さない場合、この行の更新対象列はNULL値に更新されます。

例

この例では、t1の行がt2と一致しない場合、最初のSELECTのx1の値と2番目のSELECTのx1およびy1の値はNULLに設定されます。

UPDATE t1 SET x1=(SELECT x2 FROM t2 WHERE id1=id2);
UPDATE t1 SET (x1,y1)=(SELECT x2,y2 FROM t2 WHERE id1=id2);

t2と一致するt1の行のみを更新するようにUPDATE文を制限するには、副問合せを含むWHERE句を次のように指定する必要があります。

UPDATE t1 SET x1=(SELECT x2 FROM t2 WHERE id1=id2)
WHERE id1 IN (SELECT id2 FROM t2);
UPDATE t1 SET (x1,y1)=(SELECT x2,y2 FROM t2 WHERE id1=id2)
WHERE id1 IN (SELECT id2 FROM t2);

関連項目

SELECT

7 権限

複数のユーザーがデータベース・オブジェクトにアクセス可能な場合、これらのオブジェクトへの認可は権限を使用して制御できます。オブジェクトには必ず所有者が存在します。あるユーザーが他のユーザーによって所有されているオブジェクトを変更できるかどうかは、権限によって制御されます。権限の付与または取消しを実行できるのはインスタンス管理者、ADMIN権限を持つユーザー、または特定のオブジェクトに対する権限の場合は、そのオブジェクトの所有者です。

『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』の権限を使用したオブジェクトへの認可の付与に関する説明には、様々なオブジェクトに対する権限の付与および取消しを行う方法の詳細が説明されています。また、次の各項に、TimesTenの操作を実行するために必要なすべての権限についてのクイック・リファレンスを示します。

- システム権限

- オブジェクト権限

- 権限の階層

- PUBLICロール

システム権限

システム権限とは、特定のアクションを実行したり、特定のタイプのオブジェクトでアクションを実行する権限のことです。オブジェクトには、表、ビュー、マテリアライズド・ビュー、シノニム、索引、順序、キャッシュ・グループ、レプリケーション・スキームと、PL/SQLファンクション、プロシージャおよびパッケージがあります。インスタンス管理者またはADMIN権限を持つユーザーのみが、システム権限の付与または取消しを行うことができます。

表7-1 システム権限

権限

説明

ADMIN

ユーザーはチェックポイント、バックアップ、移行、ユーザーの作成と削除などの管理タスクを実行できます。

ALTER ANY CACHE GROUP

ユーザーはデータベース内の任意のキャッシュ・グループを変更できます。

ALTER ANY INDEX

ユーザーはデータベース内の任意の索引を変更できます。

注意: ALTER INDEX文はありません。

ALTER ANY MATERIALIZED VIEW

ユーザーはデータベース内の任意のマテリアライズド・ビューを変更できます。

注意: ALTER MATERIALIZED VIEW文はありません。

ALTER ANY PROCEDURE

ユーザーはデータベース内の任意のPL/SQLプロシージャ、ファンクションまたはパッケージを変更できます。

ALTER ANY SEQUENCE

ユーザーはデータベース内の任意の順序を変更できます。

注意: ALTER SEQUENCE文はありません。

ALTER ANY TABLE

ユーザーはデータベース内の任意の表を変更できます。

ALTER ANY VIEW

ユーザーはデータベース内の任意のビューを変更できます。

注意: ALTER VIEW文はありません。

CACHE_MANAGER

ユーザーはキャッシュ・グループに関連する操作を実行できます。

CREATE ANY CACHE GROUP

ユーザーはデータベース内の任意のユーザーが所有するキャッシュ・グループを作成できます。

CREATE ANY INDEX

ユーザーはデータベース内の任意の表またはマテリアライズド・ビューに索引を作成できます。

CREATE ANY MATERIALIZED VIEW

ユーザーはデータベース内の任意のユーザーが所有するマテリアライズド・ビューを作成できます。

CREATE ANY PROCEDURE

ユーザーはデータベース内の任意のユーザーが所有するPL/SQLプロシージャ、ファンクションまたはパッケージを作成できます。

CREATE ANY SEQUENCE

ユーザーはデータベース内の任意のユーザーが所有する順序を作成できます。

CREATE ANY SYNONYM

ユーザーはデータベース内の任意のユーザーが所有するプライベート・シノニムを作成できます。

CREATE ANY TABLE

ユーザーはデータベース内の任意のユーザーが所有する表を作成できます。

CREATE ANY VIEW

ユーザーはデータベース内の任意のユーザーが所有するビューを作成できます。

CREATE CACHE GROUP

ユーザーはユーザー自身が所有するキャッシュグループを作成できます。

CREATE MATERIALIZED VIEW

ユーザーはユーザー自身が所有するマテリアライズド・ビューを作成できます。

CREATE PROCEDURE

ユーザーはユーザー自身が所有するPL/SQLプロシージャ、ファンクションまたはパッケージを作成できます。

CREATE PUBLIC SYNONYM

ユーザーはパブリック・シノニムを作成できます。

CREATE SEQUENCE

ユーザーはユーザー自身が所有する順序を作成できます。

CREATE SESSION

ユーザーはデータベースへの接続を作成できます。

CREATE SYNONYM

ユーザーはプライベート・シノニムを作成できます。

CREATE TABLE

ユーザーはユーザー自身が所有する表を作成できます。

CREATE VIEW

ユーザーはユーザー自身が所有するビューを作成できます。

DELETE ANY TABLE

ユーザーはデータベース内の任意の表からの削除を行うことができます。

DROP ANY CACHE GROUP

ユーザーはデータベース内の任意のキャッシュ・グループを削除できます。

DROP ANY INDEX

ユーザーはデータベース内の任意の索引を削除できます。

DROP ANY MATERIALIZED VIEW

ユーザーはデータベース内の任意のマテリアライズド・ビューを削除できます。

DROP ANY PROCEDURE

ユーザーはデータベース内の任意のPL/SQLプロシージャ、ファンクションまたはパッケージを削除できます。

DROP ANY SEQUENCE

ユーザーはデータベース内の任意の順序を削除できます。

DROP ANY SYNONYM

ユーザーはデータベース内の任意のユーザーが所有するシノニムを削除できます。

DROP ANY TABLE

ユーザーはデータベース内の任意の表を削除できます。

DROP ANY VIEW

ユーザーはデータベース内の任意のビューを削除できます。

DROP PUBLIC SYNONYM

ユーザーはパブリック・シノニムを削除できます。

EXECUTE ANY PROCEDURE

ユーザーはデータベース内の任意のPL/SQLプロシージャ、ファンクションまたはパッケージを実行できます。

FLUSH ANY CACHE GROUP

ユーザーはデータベース内の任意のキャッシュ・グループをフラッシュできます。

INSERT ANY TABLE

ユーザーはデータベース内の任意の表に挿入できます。また、ユーザーは(パブリックまたはプライベート)シノニムを使用して、その表に任意の表を挿入できます。

LOAD ANY CACHE GROUP

ユーザーはデータベース内の任意のキャッシュ・グループをロードできます。

REFRESH ANY CACHE GROUP

ユーザーはデータベース内の任意のキャッシュ・グループをフラッシュできます。

SELECT ANY SEQUENCE

ユーザーはデータベース内の任意の順序または順序上のシノニムを選択できます。

SELECT ANY TABLE

ユーザーはデータベース内の任意の表、ビュー、マテリアライズド・ビューまたはシノニムを選択できます。

UNLOAD ANY CACHE GROUP

ユーザーはデータベース内の任意のキャッシュ・グループをアンロードできます。

UPDATE ANY TABLE

ユーザーはデータベース内の任意の表またはシノニムを更新できます。

XLA

ユーザーはXLAリーダーとしてデータベースに接続できます。

オブジェクト権限

オブジェクト権限とは、オブジェクトで特定のアクションを実行したり、別のユーザーのオブジェクトにアクセスする権限のことです。オブジェクトには、表、ビュー、マテリアライズド・ビュー、索引、シノニム、順序、キャッシュ・グループ、レプリケーション・スキームと、PL/SQLファンクション、プロシージャおよびパッケージがあります。

オブジェクトの所有者には、そのオブジェクトに対するすべてのオブジェクト権限があり、これらの権限は取り消しできません。オブジェクトの所有者は、そのオブジェクトに対するオブジェクト権限を他のデータベース・ユーザーに付与できます。ADMIN権限を持つユーザーは、権限が付与されているオブジェクトについて、そのオブジェクトを所有しないユーザーに対してオブジェクト権限を付与したり、取り消すことができます。

表7-2 オブジェクト権限

権限

オブジェクト型

説明

DELETE

表

ユーザーは表からの削除を行うことができます。

EXECUTE

PL/SQLパッケージ、プロシージャまたはファンクション

ユーザーはPL/SQLパッケージ、プロシージャまたはファンクションを直接実行できます。

FLUSH

キャッシュ・グループ

ユーザーはキャッシュ・グループをフラッシュできます。

INDEX

表またはマテリアライズド・ビュー

ユーザーは表またはマテリアライズド・ビューに索引を作成できます。

INSERT

表またはシノニム

ユーザーは表への挿入、またはシノニムを使用した表への挿入を行うことができます。

LOAD

キャッシュ・グループ

ユーザーはキャッシュ・グループをロードできます。

REFERENCES

表またはマテリアライズド・ビュー

ユーザーは表またはマテリアライズド・ビューの外部キーへの依存性を作成できます。

親表のREFERENCES権限によって、親表のSELECT権限が暗黙的に付与されます。

REFRESH

キャッシュ・グループ

ユーザーはキャッシュ・グループをリフレッシュできます。

SELECT

表、順序、ビュー、マテリアライズド・ビューまたはシノニム

ユーザーは表、順序、ビューまたはマテリアライズド・ビューまたはシノニムから選択できます。

SELECT権限によって、ユーザーは順序のすべての操作を実行できます。

ユーザーには、元表に対するSELECT権限を明示的に付与しなくても、シノニムまたはビューに対するSELECT権限を付与できます。

UNLOAD

キャッシュ・グループ

ユーザーはキャッシュ・グループをアンロードできます。

UPDATE

表

ユーザーは表を更新できます。

権限の階層

権限によって、その他の権限が付与される場合があります。たとえば、ADMIN権限によって、他のすべての権限が付与されます。CREATE ANY TABLEシステム権限によって、CREATE TABLEオブジェクト権限が付与されます。表7-3に、権限の階層を示します。

表7-3 権限の階層

権限

付与される権限

ADMIN

CACHE_MANAGERを含む他のすべての権限

CREATE ANY INDEX

INDEX (任意の表またはマテリアライズド・ビュー)

CREATE ANY MATERIALIZED VIEW

CREATE MATERIALIZED VIEW

CREATE ANY PROCEDURE

CREATE PROCEDURE

CREATE ANY SEQUENCE

CREATE SEQUENCE

CREATE ANY SYNONYM

CREATE SYNONYM

CREATE ANY TABLE

CREATE TABLE

CREATE ANY VIEW

CREATE VIEW

DELETE ANY TABLE

DELETE (任意の表)

EXECUTE ANY PROCEDURE

EXECUTE(任意のプロシージャ)

INSERT ANY TABLE

INSERT(任意の表)

SELECT ANY SEQUENCE

SELECT (任意の順序)

SELECT ANY TABLE

SELECT(任意の表、ビューまたはマテリアライズド・ビュー)

UPDATE ANY TABLE

UPDATE (任意の表)

キャッシュ・グループ権限には、ADMINによってCACHE_MANAGER権限が付与される以外に、別の階層があります。

CACHE_MANAGER権限によって、次の権限が付与されます。

- CREATE ANY CACHE GROUP

- ALTER ANY CACHE GROUP

- DROP ANY CACHE GROUP

- FLUSH ANY CACHE GROUP

- LOAD ANY CACHE GROUP

- UNLOAD ANY CACHE GROUP

- REFRESH ANY CACHE GROUP

- FLUSH (オブジェクト)

- LOAD (object)

- UNLOAD (object)

- REFRESH (object)

CACHE_MANAGER権限には、キャッシュ・エージェントおよびレプリケーション・エージェントを開始および停止したり、キャッシュ・グリッド操作を実行する権限も含まれます。

CREATE ANY CACHE GROUPによって、任意のキャッシュ・グループに対するCREATE CACHE GROUP権限が付与されます。

PUBLICロール

データベースのすべてのユーザーには、PUBLICロールがあります。新しく作成されたTimesTenデータベースでは、デフォルトで、PUBLICは各種のシステム表やシステム・ビュー、PL/SQLファンクション、プロシージャおよびパッケージに対してSELECT権限およびEXECUTE権限を持ちます。次の問合せを使用すると、オブジェクトのリストを表示できます。

SELECT table_name, privilege FROM sys.dba_tab_privs WHERE grantee='PUBLIC';

データベース作成の一部としてPUBLICに付与されている権限は取り消せません。これらの権限のリストを参照するには、次の問合せを使用します。

SELECT table_name, privilege FROM sys.dba_tab_privs WHERE grantor='SYS';

8 予約語

TimesTenには、SQL文で使用するための用語が予約されています。

これらの用語を識別子(表名や列名など)として使用するには、予約語を引用符で囲む必要があります。そうしないと、構文エラーが発生します。

予約語

AGING

ALL

ANY

AS

BETWEEN

BINARY_DOUBLE_INFINITY

BINARY_DOUBLE_NAN

BINARY_FLOAT_INFINITY

BINARY_FLOAT_NAN

CASE

CHAR

COLUMN

CONNECTION

CONSTRAINT

CROSS

CURRENT_SCHEMA

CURRENT_USER

CURSOR

DATASTORE_OWNER

DATE

DECIMAL

DEFAULT

DESTROY

DISTINCT

FIRST

FLOAT

FOR

FOREIGN

FROM

GROUP

HAVING

INNER

INTEGER

INTERSECT

INTERVAL

INTO

IS

JOIN

LEFT

LIKE

LONG

MINUS

NULL

ON

ORA_SYSDATE

ORDER

PRIMARY

PROPAGATE

PUBLIC

READONLY

RIGHT

ROWNUM

ROWS

SELECT

SELF

SESSION_USER

SET

SMALLINT

SOME

SYSDATE

SYSTEM_USER

TO

TT_SYSDATE

UID

UNION

UNIQUE

UPDATE

USER

USING

VARCHAR

WHEN

WHERE

WITH

索引
A  B  C  D  E  F  G  H  I  J  L  M  N  O  P  Q  R  S  T  U  V  W  X

記号

% LIKE条件内の複数の文字, 5

& 演算子, 式, 3

^ 演算子, 式, 3

_ LIKE条件内の任意の1文字, 5

| 演算子, 式, 3

|| 演算子, 式, 3

~ 演算子, 式, 3

A

ABSファンクション, 4.15

アクセス制御--「権限」を参照

アクティブ・スタンバイ・ペア

変更, 6.2.6

作成, 6.2.6

削除, 6.2.6

FAILTHRESHOLD, ログ・ファイルの数, 6.2.6

表、順序、キャッシュ・グループの包含/除外, 6.2.6

マスター, 6.2.6

RETURN待機タイムアウト, 6.2.6

サブスクライバ, 6.2.6

サブスクライバ, 追加, 6.2.6

サブスクライバ, 削除, 6.2.6

タイムアウト, 6.2.6

ttRepSyncSet組み込みプロシージャ, 6.2.6

ADD COLUMN, 表, 6.2.6, 6.2.6 ADD ELEMENT, ALTER REPLICATION文, 6.2.6 ADD SUBSCRIBER句

ALTER ACTIVE STANDBY PAIR文, 6.2.6

ALTER REPLICATION文, 6.2.6

ADD_MONTHSファンクション, 4.15 ADMINシステム権限

定義, 7.1

階層, 7.3

集計関数

ALL修飾子, 4.15, 4.15

GROUP BY句, 4.11

CUBE句, 4.11

DISTINCT修飾子, 4.15, 4.15

重複する行, 包含(ALL), 4.11, 4.15, 4.15, 4.15

関数リスト, 4.11

グルーピング結果, 6.2.6

グループ, フィルタリング, 6.2.6

式, 3

問合せ, 6.2.6

オーバーフロー, 1.18

ROLLUP句, 4.11

SQL構文, 4.11

一意の行のみ(DISTINCT), 4.11, 4.15, 4.15, 4.15

エージング

キャッシュ・グループ, 6.2.6

制限, ALTER TABLE, 6.2.6

制限, CREATE TABLE, 6.2.6

表, 追加, 6.2.6, 6.2.6

表, 削除, 6.2.6, 6.2.6

表, ポリシー, 6.2.6

AGING予約語, 8 ALL / NOT IN条件

副問合せ, 5

値リスト, 5

ALL修飾子

集計関数, 4.15, 4.15

MAXファンクション, 4.15

MINファンクション, 4.15

SELECT文, 6.2.6

SUMファンクション, 4.15

ALL予約語, 8 ALTER ACTIVE STANDBY PAIR文, 6.2.6 ALTER ANY CACHE GROUPシステム権限

定義, 7.1

階層, 7.3

ALTER ANY INDEXシステム権限, 7.1 ALTER ANY MATERIALIZED VIEWシステム権限, 7.1 ALTER ANY PROCEDUREシステム権限, 7.1 ALTER ANY SEQUENCEシステム権限, 7.1 ALTER ANY TABLEシステム権限, 7.1 ALTER ANY VIEWシステム権限, 7.1 ALTER CACHE GROUP文, 6.2.6 ALTER ELEMENT句

DROP SUBSCRIBER, 6.2.6

ALTER REPLICATION文, 6.2.6

SET MASTER, 6.2.6

SET NAME, 6.2.6

ALTER FUNCTION文, 6.2.6 ALTER PACKAGE文, 6.2.6 ALTER PROCEDURE文, 6.2.6 ALTER REPLICATION文, 6.2.6 ALTER SESSION文, 6.2.6 ALTER SUBSCRIBER, ALTER REPLICATION文, 6.2.6 ALTER TABLE文

ADD列, 6.2.6

説明および構文, 6.2.6

DROP列, 6.2.6

PRIMARY KEY, 6.2.6

ALTER USER文, 6.2.6 分析関数

関数リスト, 4.12

概要, 4.12

ANSI SQLデータ型, 1.2 ANY / IN条件

副問合せ, 5

値リスト, 5

ANY予約語, 8 算術演算

日時型および時間隔型, 1.12.4

式, 3, 3

オーバーフロー, 1.18

POWERファンクション, 4.15

SQRT (平方根)関数, 4.15

SUMファンクション, 4.15

AS予約語, 8 ASC句, CREATE INDEX文, 6.2.6 ASCIISTRファンクション, 4.15 AUTOREFRESH句

CREATE CACHE GROUP文, 6.2.6

FULL/INCREMENTAL, 6.2.6

STATE, 6.2.6

AVGファンクション, 4.15

B

基本名, 2.1

BETWEEN条件, 5, 5

BETWEEN予約語, 8

BIGINTデータ型, 1.21.1

BINARYデータ型, 1.1, 1.7, 1.13, 1.21.1

BINARY_DOUBLEデータ型, 1.1, 1.6.6.1, 1.13, 1.21.1

BINARY_DOUBLE_INFINITY

負の無限大, 3

正の無限大, 3

BINARY_DOUBLE_INFINITY予約語, 8 BINARY_DOUBLE_NAN予約語, 8 BINARY_DOUBLE_NAN, 非数, 3 BINARY_FLOATデータ型, 1.1, 1.6.6.2, 1.13, 1.21.1 BINARY_FLOAT_INFINITY

負の無限大, 3

正の無限大, 3

BINARY_FLOAT_INFINITY予約語, 8 BINARY_FLOAT_NAN予約語, 8 BINARY_FLOAT_NAN, 非数, 3 ビット単位演算子

AND演算子, 式, 3

NOT演算子, 式, 3

OR演算子, 式, 3

BLOB

変換関数, TO_BLOB, 4.15

変換関数, TO_LOB, 4.15

Oracle型モード, 1.1

初期化, EMPTY_BLOB関数, 4.15

記憶域要件, 1.13

組込みプロシージャ, CALL, 6.2.6

C

キャッシュ

キャッシュ・グリッド関数, 4.15

CACHE_MANAGERシステム権限, 定義, 7.1

CACHE_MANAGERシステム権限, 階層, 7.3

データの場所, グリッドのメンバー, 4.15

グリッド・メンバー, データの場所, 4.15

グリッド, 使用方法, 6.2.6

メンバーID, TTGRIDMEMBERID関数, 4.15

ノード名, TTGRIDNODENAME関数, 4.15

ユーザー割当て名, TTGRIDUSERASSIGNEDNAME関数, 4.15

キャッシュ・グループ

エージング, 6.2.6

ALTER ANY CACHE GROUPシステム権限, 定義, 7.1

ALTER ANY CACHE GROUPシステム権限, 階層, 7.3

変更, 6.2.6

自動リフレッシュ, 6.2.6

CREATE ANY CACHE GROUPシステム権限, 定義, 7.1

CREATE ANY CACHE GROUPシステム権限, 階層, 7.3, 7.3

CREATE CACHE GROUP文, 6.2.6

CREATE CACHE GROUPシステム権限, 定義, 7.1

定義, 6.2.6

DROP ANY CACHE GROUPシステム権限, 定義, 7.1

DROP ANY CACHE GROUPシステム権限, 階層, 7.3

削除, 6.2.6

動的ロード, 6.2.6

明示的にロードされる, 6.2.6

FLUSH ANY CACHE GROUPシステム権限, 定義, 7.1

FLUSH ANY CACHE GROUPシステム権限, 階層, 7.3

FLUSHオブジェクト権限, 定義, 7.2

FLUSHオブジェクト権限, 階層, 7.3

フラッシュ, 6.2.6

グローバル, 6.2.6

インスタンス, 定義済, 6.2.6

LOAD ANY CACHE GROUPシステム権限, 定義, 7.1

LOAD ANY CACHE GROUPシステム権限, 階層, 7.3

LOADオブジェクト権限, 定義, 7.2

LOADオブジェクト権限, 階層, 7.3

ロード, 6.2.6

ローカル, 6.2.6

REFRESH ANY CACHE GROUPシステム権限, 定義, 7.1

REFRESH ANY CACHE GROUPシステム権限, 階層, 7.3

REFRESHオブジェクト権限, 定義, 7.2

REFRESHオブジェクト権限, 階層, 7.3

リフレッシュ, 6.2.6, 6.2.6

制限, 6.2.6

システム管理, 6.2.6

表所有者名, 2.2

UNLOAD ANY CACHE GROUPシステム権限, 定義, 7.1

UNLOAD ANY CACHE GROUPシステム権限, 階層, 7.3

UNLOADオブジェクト権限, 定義, 7.2

UNLOADオブジェクト権限, 階層, 7.3

アンロード, 6.2.6

ユーザー管理, 6.2.6

CACHE_MANAGERシステム権限

定義, 7.1

階層, 7.3

CALL文, 6.2.6 CASE式, 3 CASE予約語, 8 名前の大/小文字の区別, 2.1 CASTファンクション, 4.15 CEILファンクション, 4.15 CHARデータ型, 1.1, 1.5.1, 1.13, 1.21.1 CHAR予約語, 8 CHAR VARYINGデータ型, 1.2 文字

CHRファンクション, 4.15

比較ルール, 1.14.3

変換関数, TO_CHAR, 4.15

日付への変換, TO_DATE, 4.15

データ型, 1.5

関数, 4.2

定数, 3

LOWERおよびUPPER関数, 4.15

各国語キャラクタ文字列, 定数, 3

NCHRファンクション, 4.15

TimesTen型モード・サポート, 1.21.1

切捨て, 1.18

Unicodeパターン一致, 5

CHARACTER VARYINGデータ型, 1.2 CHECK CONFLICTS句, CREATE REPLICATION文, 6.2.6 CHRファンクション, 4.15 CLOB

変換関数, TO_CLOB, 4.15

変換関数, TO_LOB, 4.15

日付への変換, TO_DATE, 4.15

Oracle型モード, 1.1

初期化, EMPTY_CLOB関数, 4.15

記憶域要件, 1.13

COALESCEファンクション, 4.15 COLUMN予約語, 8 列

追加, 6.2.6, 6.2.6

別名, 6.2.6, 6.2.6

表内の定義, 6.2.6

削除, 6.2.6, 6.2.6

問合せでのグルーピング, 6.2.6

SELECT文のROLLUP、CUBE、GROUPING SETSでグルーピング, 6.2.6, 6.2.6

表内の最大数, 6.2.6

式での名前, 3

IS NULL条件での名前, 5

SQL文内のコメント, 6.1 COMMIT文, 6.2.6 比較演算子, 5 比較条件

説明および構文, 5

検索条件, 5

データ型の比較ルール, 1.14 複合識別子, 2.3 COMPRESS句, 表の列, 6.2.6 圧縮

インメモリー列圧縮, 6.2.6, 6.2.6, 6.2.6

CONCATファンクション, 4.15 連結演算子, 式, 3 競合チェック, レプリケーション, 6.2.6 CONNECTION予約語, 8 定数

文字値, 3

日付値, 3, 3

定義, 3

固定小数点数値, 3

浮動小数点値, 3

16進値, 3

式, 3

IS NULL条件, 5

整数値, 3

時間隔値, 3

各国語キャラクタ文字列, 3

SQL構文, 3

時間値, 3, 3

タイムスタンプ値, 3, 3

CONSTRAINT予約語, 8 データ型間の変換, 1.15 相関名

結合, 6.2.6

SELECT文, 表指定, 6.2.6

COUNTファンクション, 4.15 CREATE ACTIVE STANDBY PAIR文, 6.2.6 CREATE ANY CACHE GROUPシステム権限

定義, 7.1

階層, 7.3, 7.3

CREATE ANY INDEXシステム権限

定義, 7.1

階層, 7.3

CREATE ANY MATERIALIZED VIEWシステム権限

定義, 7.1

階層, 7.3

CREATE ANY PROCEDUREシステム権限

定義, 7.1

階層, 7.3

CREATE ANY SEQUENCEシステム権限

定義, 7.1

階層, 7.3

CREATE ANY SYNONYMシステム権限

定義, 7.1

階層, 7.3

CREATE ANY TABLEシステム権限

定義, 7.1

階層, 7.3

CREATE ANY VIEWシステム権限

定義, 7.1

階層, 7.3

CREATE CACHE GROUP文, 6.2.6 CREATE CACHE GROUPシステム権限

定義, 7.1

CREATE FUNCTION文, 6.2.6 CREATE GLOBAL TEMPORARY TABLE, 6.2.6, 6.2.6 CREATE INDEX文

ASC/DESC句, 6.2.6

説明および構文, 6.2.6

UNIQUE句, 6.2.6

CREATE MATERIALIZED VIEW LOG文, 6.2.6 CREATE MATERIALIZED VIEW文, 6.2.6 CREATE MATERIALIZED VIEWシステム権限

定義, 7.1

階層, 7.3

CREATE PACKAGE BODY文, 6.2.6 CREATE PACKAGE文, 6.2.6 CREATE PROCEDURE文, 6.2.6 CREATE PROCEDUREシステム権限

定義, 7.1

階層, 7.3

CREATE PUBLIC SYNONYMシステム権限, 7.1 CREATE REPLICATION文, 6.2.6 CREATE SEQUENCE文, 6.2.6 CREATE SEQUENCEシステム権限

定義, 7.1

階層, 7.3

CREATE SESSIONシステム権限, 7.1 CREATE SYNONYM文, 6.2.6 CREATE SYNONYMシステム権限

定義, 7.1

階層, 7.3

CREATE TABLE文

説明および構文, 6.2.6

FOREIGN KEY, 6.2.6

PRIMARY KEY, 6.2.6

CREATE TABLEシステム権限

定義, 7.1

階層, 7.3

CREATE USER文, 6.2.6 CREATE VIEW文, 6.2.6 CREATE VIEWシステム権限

定義, 7.1

階層, 7.3

CROSS予約語, 8 CUBE句

集計関数, 4.11

GROUPING_IDファンクション, 4.15

SELECT文, 6.2.6, 6.2.6

CURRENT_SCHEMA, 8 CURRENT_USERファンクション, 4.15 CURRENT_USER予約語, 8 CURRVAL

CREATE SEQUENCE文, 6.2.6

INSERT SELECT文, 6.2.6

CURSOR予約語, 8

D

データ型

ANSI SQL, 1.2

下位互換性サポート, 1.3

キャラクタ・タイプ, 1.5

検索条件での比較, 5

比較ルール, 1.14

変換, 1.15

影響, 1

数値型, 1.6

オーバーフロー, 1.18

パラメータ, 推測, 2.7

仕様, 1.1

記憶域要件, 1.13

TimesTenとOracleの互換性, 1.3, 1.4

切捨て, 1.18

型モード, 1.1

アンダーフロー, 1.19

DATASTORE, CREATE REPLICATION文, 6.2.6 DATASTORE_OWNER予約語, 8 DATEデータ型, 1.1, 1.11.1, 1.12.2, 1.13, 1.21.1 DATE予約語, 8 日付, 定数, 3, 3 日時

タイムスタンプへの時間隔の追加, 4.15

変換関数, TO_DATE, 4.15

INTERVAL DAY TO SECONDへの変換, 4.15

INTERVAL YEAR TO MONTHへの変換, 4.15

現在の日付と時刻(システム時間), 4.15

GETDATEファンクション, 4.15

タイムスタンプ間の時間隔, 4.15

MONTHS_BETWEENファンクション, 4.15

NUMTODSINTERVALファンクション, 4.15

NUMTOYMINTERVALファンクション, 4.15

ROUND日付関数, 4.15

SYSDATEファンクション, 4.15

システム時間, 4.15

時間の切捨て, TRUNC日付関数, 4.15

TIMESTAMPADDファンクション, 4.15

TIMESTAMPDIFFファンクション, 4.15

日時データ型

算術演算, 1.12.4

比較ルール, 1.14.2

書式モデル, 一般, 3

書式モデル, TT_TIMESTAMPおよびTT_DATEのTO_CHAR変換, 3

型のリスト, 1.11

使用, 1.12.2

DDL文, 定義済, 6 DECIMALデータ型, 1.2, 1.21.1 DECIMAL予約語, 8 DECODEファンクション, 4.15 DEFAULT列値, INSERT文, 6.2.6 DEFAULT予約語, 8 DELETE ANY TABLEシステム権限

定義, 7.1

階層, 7.3

DELETEオブジェクト権限

定義, 7.2

階層, 7.3

DELETE文, 6.2.6 DENSE_RANKファンクション, 4.15 導出表, SELECT文, 6.2.6 DESC句, CREATE INDEX文, 6.2.6 DESTROY予約語, 8 DISTINCT修飾子

集計関数, 4.15, 4.15

MAXファンクション, 4.15

MINファンクション, 4.15

SELECT文, 6.2.6

SUMファンクション, 4.15

DISTINCT予約語, 8 DML文, 定義済, 6 DOUBLE PRECISIONデータ型, 1.2, 1.21.1 DROP ACTIVE STANDBY PAIR文, 6.2.6 DROP ANY CACHE GROUPシステム権限

定義, 7.1

階層, 7.3

DROP ANY INDEXシステム権限, 7.1 DROP ANY MATERIALIZED VIEWシステム権限, 7.1 DROP ANY PROCEDUREシステム権限, 7.1 DROP ANY SEQUENCEシステム権限, 7.1 DROP ANY SYNONYMシステム権限, 7.1 DROP ANY TABLEシステム権限, 7.1 DROP ANY VIEWシステム権限, 7.1 DROP CACHE GROUP文, 6.2.6 DROP ELEMENT, ALTER REPLICATION文, 6.2.6 DROP FUNCTION文, 6.2.6 DROP INDEX文, 6.2.6 DROP MATERIALIZED VIEW LOG文, 6.2.6 DROP MATERIALIZED VIEW文, 6.2.6 DROP PACKAGE BODY文, 6.2.6 DROP PACKAGE文, 6.2.6 DROP PROCEDURE文, 6.2.6 DROP PUBLIC SYNONYMシステム権限, 7.1 DROP REPLICATION文, 6.2.6 DROP SEQUENCE文, 6.2.6 DROP SUBSCRIBER句

ALTER ACTIVE STANDBY PAIR文, 6.2.6

ALTER REPLICATION文, 6.2.6

DROP SYNONYM文, 6.2.6 DROP TABLE文, 6.2.6 DROP USER文, 6.2.6 DROP VIEW文, 6.2.6 重複するパラメータ名, 2.6 DURABLE COMMIT, CREATE REPLICATION文, 6.2.6 動的パラメータ

式, 3, 3

LIKE条件, 5

名前, 2.5

動的にロードされるキャッシュ・グループ, 6.2.6

E

ELEMENT, CREATE REPLICATION文, 6.2.6

EMPTY_BLOBファンクション, 4.15

EMPTY_CLOBファンクション, 4.15

エンコーディング関数, 4.13

エスケープ文字, LIKE条件, 5

排他OR演算子, 式, 3

EXECUTE ANY PROCEDUREシステム権限

定義, 7.1

階層, 7.3

EXECUTEオブジェクト権限

定義, 7.2

階層, 7.3

EXISTS条件, 5, 5 明示的にロードされるキャッシュ・グループ, 6.2.6 指数, POWER関数, 4.15 式

ALL / NOT IN条件(副問合せ), 5

ALL / NOT IN条件(値リスト), 5

ANY / IN条件(副問合せ), 5

ANY / IN条件(値リスト), 5

算術演算, 3, 3

BETWEEN条件, 5

ビット単位演算子, 3

COALESCEファンクション, 4.15

比較, 4.15

比較条件, 5

定数, 3, 3

動的パラメータ, 3, 3

関数, 3

GREATEST関数, 4.15

ハッシュ値, TT_HASH関数, 4.15

UPDATE文, 6.2.6

IS INFINITE条件, 5

IS NAN条件, 5

IS NULL条件, 5

LEASTファンクション, 4.15

左埋込み, 4.15

左切捨て, 4.15

LIKE条件, 5

LOWERおよびUPPER関数, 4.15

LPADファンクション, 4.15

LTRIMファンクション, 4.15

NULLIFファンクション, 4.15

プライマリ, 3, 3

右埋込み, 4.15

右切捨て, 4.15

ROUND式関数, 4.15

RPADファンクション, 4.15

RTRIMファンクション, 4.15

SIGNファンクション, 4.15

指定, 3

SQL構文, 3

切捨て, TRUNC式関数, 4.15

単項プラスと単項マイナス, 3

EXTRACTファンクション, 4.15

F

FAILTHRESHOLD句

ALTER REPLICATION文, 6.2.6

CREATE ACTIVE STANDBY PAIR文, 6.2.6

CREATE REPLICATION文, 6.2.6

FIRST予約語, 8 FIRST_VALUEファンクション, 4.15 固定小数点数値, 3 FLOATデータ型, 1.2, 1.21.1, 1.21.1, 3 FLOATデータ型, 1.6.6.3 FLOAT予約語, 8 浮動小数点数, 1.6.6 FLOORファンクション, 4.15 FLUSH ANY CACHE GROUPシステム権限

定義, 7.1

階層, 7.3

FLUSH CACHE GROUP文, 6.2.6 FLUSHオブジェクト権限

定義, 7.2

階層, 7.3

FOR予約語, 8 外部キー

追加, 6.2.6

REFERENCESオブジェクト権限, 7.2

削除, 6.2.6

FOREIGN KEY句, CREATE TABLE文, 6.2.6 FOREIGN予約語, 8 書式モデル

日時, 3

日時, TT_TIMESTAMPおよびTT_DATEのTO_CHAR変換, 3

数字, 3

概要, 3

ROUNDおよびTRUNC日付関数, 3

FROM予約語, 8 完全修飾名, 2.3 関数, PL/SQL

作成, 6.2.6

削除, 6.2.6

ファンクション

集計関数, 4.11

分析関数, 4.12

キャッシュ・グリッド関数, 4.15

文字関数, 4.2

エンコーディング関数, 4.13

式, 3

LOB関数, 4.5

数値関数, 4.1

文字列関数, 4.4

ユーザー/セッション関数, 4.14

G

GETDATEファンクション, 4.15

グローバル・キャッシュ・グループ, 6.2.6

グローバル一時表, 6.2.6, 6.2.6

GRANT文, 6.2.6

GREATEST関数, 4.15

GROUP BY句

集計関数, 4.11

GROUP_ID関数, 4.15

重複するグループ行, 削除, 4.15

GROUPING_IDファンクション, 4.15

SELECT文, 6.2.6

GROUP予約語, 8 GROUP_IDファンクション, 4.15 GROUPINGファンクション, 4.15 GROUPING SETS句, SELECT文, 6.2.6 GROUPING_IDファンクション, 4.15

H

ハッシュ索引

マテリアライズド・ビュー, 6.2.6

サイズ変更, 6.2.6

表, 6.2.6

式のハッシュ値, TT_HASH関数, 4.15 HAVING句

GROUPINGファンクション, 4.15

SELECT文, 6.2.6

HAVING予約語, 8 定数の16進値, 3

I

IN条件

検索条件, 5

副問合せ, 5

値リスト, 5

INDEXオブジェクト権限

定義, 7.2

階層, 7.3

索引

ALTER ANY INDEXシステム権限, 7.1

CREATE ANY INDEXシステム権限, 定義, 7.1

CREATE ANY INDEXシステム権限, 階層, 7.3

作成, 6.2.6

DROP ANY INDEXシステム権限, 7.1

削除, 6.2.6

INDEXオブジェクト権限, 定義, 7.2

INDEXオブジェクト権限, 階層, 7.3

所有者, デフォルト, 6.2.6

表の削除時の削除, 6.2.6

INF / -INF

データ型, 1.17

IS INFINITE条件, 5

無限大

BINARY_FLOAT_INFINITYおよびBINARY_DOUBLE_INFINITY, 3, 3

無限大

IS INFINITE条件, 5

INLINE句

ALTER TABLE文, 6.2.6

CREATE TABLE文, 6.2.6

INNER予約語, 8 INSERT ANY TABLEシステム権限

定義, 7.1

階層, 7.3

INSERTオブジェクト権限

定義, 7.2

階層, 7.3

INSERT SELECT文, 6.2.6 INSERT文, 6.2.6 インスタンス, キャッシュ・グループ, 定義済, 6.2.6 INSTRファンクション, 4.15 INSTR4ファンクション, 4.15 INSTRBファンクション, 4.15 INTEGERデータ型, 1.2, 1.21.1, 3 INTEGER予約語, 8 INTERSECT予約語, 8 INTERVALデータ型, 1.1, 1.12.1, 1.13, 1.21.1 時間隔データ型, 算術演算, 1.12.4 INTERVAL予約語, 8 時間隔値, 定数, 3 時間隔(日付/時間), 1.12 INTO予約語, 8 IS INFINITE条件, 5 IS NAN条件, 5 IS NULL条件, 5 IS予約語, 8

J

JOIN予約語, 8

結合

結合の種類, INNER、LEFT (OUTER)、RIGHT (OUTER), 6.2.6

表の結合, 6.2.6

表の表自体との結合, 相関名, 6.2.6

外部, 6.2.6

OUTER JOIN句, SELECT文, 6.2.6

L

LAST_VALUEファンクション, 4.15

LEASTファンクション, 4.15

LEFT予約語, 8

LENGTHファンクション, 4.15

LENGTH4ファンクション, 4.15

LENGTHBファンクション, 4.15

LIKE条件

説明および構文, 5

検索条件, 5

パターン一致, 5

NCHAR、NVARCHAR2、NCLOBのパターン一致, 5

LIKE予約語, 8 LOAD ANY CACHE GROUPシステム権限

定義, 7.1

階層, 7.3

LOAD CACHE GROUP文, 6.2.6 LOADオブジェクト権限

定義, 7.2

階層, 7.3

LOB

BLOB変換関数, TO_BLOB, 4.15

Oracle型モードのBLOB, 1.1

CLOB変換関数, TO_CLOB, 4.15

Oracle型モードのCLOB, 1.1

変換関数, TO_LOB, 4.15

関数, 4.5

BLOBの初期化, EMPTY_BLOB関数, 4.15

CLOBの初期化, EMPTY_CLOB関数, 4.15

NCLOBの初期化, EMPTY_CLOB関数, 4.15

最大サイズ, 1.9

NCLOB変換関数, TO_NCLOB, 4.15

Oracle型モードのNCLOB, 1.1

NULL, 1.9.4

概要, 1.9

BLOB、CLOB、NCLOBをテストする値(IS NULL条件), 5

ローカル・キャッシュ・グループ, 6.2.6 論理演算子

互換性のあるデータ型, 5

評価順序, 5

検索条件, 5

結果値, 5

LONG予約語, 8 LOWERファンクション, 4.15 LPADファンクション, 4.15 LTRIMファンクション, 4.15

M

MASTER句

ALTER REPLICATION文, 6.2.6

CREATE ACTIVE STANDBY PAIR文, 6.2.6

CREATE REPLICATION文, 6.2.6

マテリアライズド・ビュー

ALTER ANY MATERIALIZED VIEWシステム権限, 7.1

CREATE ANY MATERIALIZED VIEWシステム権限, 定義, 7.1

CREATE ANY MATERIALIZED VIEWシステム権限, 階層, 7.3

CREATE MATERIALIZED VIEWシステム権限, 定義, 7.1

CREATE MATERIALIZED VIEWシステム権限, 階層, 7.3

作成, 6.2.6

ディテール表, ON DELETE CASCADE, 6.2.6

DROP ANY MATERIALIZED VIEWシステム権限, 7.1

削除, 6.2.6

ビュー・ログの削除, 6.2.6

ハッシュ索引, 6.2.6

無効, 6.2.6

ログ, 作成, 6.2.6

必要な権限, 6.2.6

REFERENCESオブジェクト権限, 7.2

リフレッシュ, 6.2.6

SELECT ANY TABLEシステム権限, 定義, 7.1

SELECT ANY TABLEシステム権限, 階層, 7.3

SELECTオブジェクト権限, 定義, 7.2

SELECTオブジェクト権限, 階層, 7.3

MAXファンクション, 4.15 MERGE文, 6.2.6 MINファンクション, 4.15 MINUS予約語, 8 MODファンクション, 4.15 MONTHS_BETWEENファンクション, 4.15 複数の文字, "%", LIKE条件, 5

N

名前

基本名, 2.1

大/小文字, 大/小文字の区別, 2.1

複合識別子, 2.3

重複するパラメータ名, 2.6

動的パラメータ, 2.5

完全修飾, 2.3

ネームスペース, 2.4

所有者名, 2.2

非修飾名の検索順序, 2.4

単純名, 2.1

TimesTen名前, ルール, 2

ユーザーID, 2.2

ネームスペース, 2.4 名前作成の規則, 2 NAN

データ型, 1.17

IS NAN条件, 5

NATIONAL CHARデータ型, 1.2 NATIONAL CHAR VARYINGデータ型, 1.2 NATIONAL CHARACTERデータ型, 1.2, 1.2 各国語キャラクタ文字列, 定数, 3 NCHARデータ型

説明および使用方法, 1.5.2

TimesTen型モード, 1.21.1

Oracle型モード, 1.1

パターン一致, LIKE条件, 5

記憶域要件, 1.13

NCHAR VARYINGデータ型, 1.2 NCHRファンクション, 4.15 NCLOB

変換関数, TO_NCLOB, 4.15

日付への変換, TO_DATE, 4.15

Oracle型モード, 1.1

初期化, EMPTY_CLOB関数, 4.15

パターン一致, LIKE条件, 5

記憶域要件, 1.13

NEXTVAL

CREATE SEQUENCE文, 6.2.6

INSERT SELECT文, 6.2.6

NLS_CHARSET_ID関数, 4.15 NLS_CHARSET_NAME関数, 4.15 NLSSORTファンクション, 4.15 非数

BINARY_FLOAT_NANおよびBINARY_DOUBLE_NAN, 3

IS NAN条件, 5

NOT EXISTS (EXISTS条件), 5 NOT IN条件

副問合せ, 5

値リスト, 5

NOT INLINE句

ALTER TABLE文, 6.2.6

CREATE TABLE文, 6.2.6

NULL条件, 検索条件, 5 NULL予約語, 8 NULL値

ODBC関数, 1.16

定義, 1.16

論理演算, 5

比較条件, 5

UPDATE文, 6.2.6

IS NULL条件, 5

NVLファンクション, 4.15

null値を別の値で置換, 4.15

ソート, 1.16

記憶域, 1.5.3, 1.13

NULLIFファンクション, 4.15 NUMBERデータ型

変換関数, TO_NUMBER, 4.15

Oracle型モード, 1.1

記憶域要件, 1.13

TimesTen型モード, 1.21.2

使用方法, 1.6.1

数字

浮動小数点, 1.6.6

書式モデル, 3

NUMERICデータ型

説明, 1.2

TimesTen型モード・サポート, 1.21.1

numericデータ型

近似値型, 1.6

比較ルール, 1.14.1

正確な型, 1.6

数値の優先順位, 1.8

概要, 1.6

切捨て, 1.18

数値関数, 4.1 NUMTODSINTERVALファンクション, 4.15 NUMTOYMINTERVALファンクション, 4.15 NVARCHARデータ型, 1.21.1 NVARCHAR2データ型

説明および使用方法, 1.5.4

Oracle型モード, 1.1

パターン一致, LIKE条件, 5

レプリケーションでのサイズ制限, 1.20

記憶域要件, 1.13

NVLファンクション, 4.15

O

オブジェクト名, ネームスペース, 2.4

オブジェクト権限, 7.2

ODBC

時間リテラル構文, 3

タイムスタンプ・リテラル構文, 3

ODBC関数およびnull値, 1.16 ON DELETE CASCADE, ディテール表, マテリアライズド・ビュー, 6.2.6 ON予約語, 8 演算子, 比較, 5 オプティマイザ・ヒント

フラグ, 文レベル, 6.2.2

フラグ, 文レベルおよびトランザクション・レベル, 6.2.2

フラグ, トランザクション・レベル, 6.2.2

トランザクション・レベルへの文レベル・マッピング, 6.2.2

トランザクション・レベルの文レベル・オーバーライド, 6.2.3

文レベル対トランザクション・レベル, 理解および比較, 6.2.5

文レベル, 説明, 6.2.3

文レベル, 例, 6.2.6

文レベル, 概要, 6.2

文レベル, ヒントをサポートする文, 6.2.4

文レベル, 構文, 6.2.1

トランザクション・レベル, 例, 6.2.6

トランザクション・レベル, 呼出し, 6.2.2

ORA_CHARデータ型, 1.21.2 ORA_DATEデータ型, 1.21.2 ORA_NCHARデータ型, 1.21.2 ORA_NVARCHAR2データ型, 1.21.2 ORA_SYSDATE予約語, 8 ORA_TIMESTAMPデータ型, 1.21.2 ORA_VARCHAR2データ型, 1.21.2 サポートされているOracleデータ型, TimesTen型モード, 1.21.2 Oracle型モード, 下位互換性, 1.3 ORDER BY句

副問合せ, 3

SELECT文, 6.2.6

ORDER予約語, 8 OUTER JOIN句, SELECT文, 6.2.6 外部結合, 6.2.6 データのオーバーフロー, 1.18 所有者名, 2.2

P

パッケージ, PL/SQL

作成, 6.2.6

本体の作成, 6.2.6

削除, 6.2.6

パラメータ

データ型, 推測, 2.7

重複するパラメータ名, 2.6

動的パラメータ名, 2.5

パーティション, 表, 6.2.6 パターン一致, LIKE条件, 5 権限--「権限」を参照 PL/SQL

ALTER ANY PROCEDUREシステム権限, 7.1

ALTER FUNCTION文, 6.2.6

ALTER PACKAGE文, 6.2.6

ALTER PROCEDURE文, 6.2.6

CALLプロシージャまたはファンクション, 6.2.6

CREATE ANY PROCEDUREシステム権限, 7.3

CREATE ANY PROCEDUREシステム権限, 定義, 7.1

CREATE FUNCTION文, 6.2.6

CREATE PACKAGE BODY文, 6.2.6

CREATE PACKAGE文, 6.2.6

CREATE PROCEDURE文, 6.2.6

CREATE PROCEDUREシステム権限, 定義, 7.1

CREATE PROCEDUREシステム権限, 階層, 7.3

DROP ANY PROCEDUREシステム権限, 7.1

DROP FUNCTION文, 6.2.6

DROP PACKAGE BODY文, 6.2.6

DROP PACKAGE文, 6.2.6

DROP PROCEDURE文, 6.2.6

EXECUTE ANY PROCEDUREシステム権限, 定義, 7.1

EXECUTE ANY PROCEDUREシステム権限, 階層, 7.3

EXECUTEオブジェクト権限, 定義, 7.2

EXECUTEオブジェクト権限, 階層, 7.3

PORT句

CREATE ACTIVE STANDBY PAIR文, 6.2.6

CREATE REPLICATION文, 6.2.6

POWERファンクション, 4.15 条件

ALL / NOT IN (副問合せ), 5

ALL / NOT IN (値リスト), 5

ANY / IN (副問合せ), 5

ANY / IN (値リスト), 5

BETWEEN, 5

比較, 5

評価順序, 5

EXISTS / NOT EXISTS, 5

検索条件, 5

IS INFINITE, 5

IS NULL, 5

LIKE, 5

式でのプライマリ, 3, 3 主キー

追加, 6.2.6, 6.2.6

変更, 6.2.6

PRIMARY KEY句, CREATE TABLE文, 6.2.6 PRIMARY予約語, 8 権限

付与, 6.2.6

階層, 7.3

オブジェクト権限, 7.2

概要, 7

PUBLICロール, 7.4

PUBLICユーザー, GRANT文, 6.2.6

取消し, 6.2.6

システム権限, 7.1

プロシージャ, PL/SQL

作成, 6.2.6

削除, 6.2.6

PROPAGATE予約語, 8 PROPAGATOR, ALTER REPLICATION文, 6.2.6 PUBLIC

ロール, 7.4

ユーザー, GRANT文, 6.2.6

PUBLIC予約語, 8

Q

限定条件, 検索条件, 5

問合せ

導出表, 6.2.6

重複する行, 包含(ALL), 6.2.6

列のグルーピング, 6.2.6

ROLLUP、CUBE、GROUPING SETSで列のグルーピング, 6.2.6

ROLLUP、CUBE、GROUPING SETSでグルーピング, 6.2.6

表の結合, 6.2.6

問合せごとの表の最大数 6.2.6

結果の順序付け, 6.2.6

外部結合, 6.2.6

選択リスト, 6.2.6

データの選択, 6.2.6

副問合せ, 3

一意の行のみ(DISTINCT), 6.2.6

集計関数, 6.2.6

WITH句, 6.2.6

R

RANK関数, 4.15

READONLY予約語, 8

REALデータ型, 1.2, 1.21.1

REFERENCESオブジェクト権限, 7.2

REFRESH ANY CACHE GROUPシステム権限

定義, 7.1

階層, 7.3

REFRESH CACHE GROUP文, 6.2.6 REFRESH MATERIALIZED VIEW文, 6.2.6 REFRESHオブジェクト権限

定義, 7.2

階層, 7.3

REPLACEファンクション, 4.15 レプリケーション

変更, 6.2.6

競合チェック, 6.2.6, 6.2.6

作成, 6.2.6

データ・ストア, 6.2.6

DROP SUBSCRIBER, 6.2.6

レプリケーション・スキームの削除, 6.2.6

永続コミット, 6.2.6

要素, 6.2.6, 6.2.6

要素, 追加, 6.2.6

要素, 変更, 6.2.6

要素, 削除, 6.2.6

FAILTHRESHOLD, ログ・ファイルの数, 6.2.6, 6.2.6

マスター, 6.2.6, 6.2.6

プロパゲータ, 6.2.6

RETURN RECEIPT, 6.2.6, 6.2.6

RETURN TWOSAFE, 6.2.6, 6.2.6

スキーム, 6.2.6

SET MASTER, 6.2.6

SET NAME, 6.2.6

データのサイズ制限, 1.20

サブスクライバ, 6.2.6, 6.2.6

サブスクライバ, 追加, 6.2.6

サブスクライバ, 変更, 6.2.6

サブスクライバ, 削除, 6.2.6

タイムアウト, 6.2.6, 6.2.6

トランザクションの送信, 6.2.6

レプリケーション--「アクティブ・スタンバイ・ペア」も参照 予約語, 8 RETURN RECEIPT句

ALTER REPLICATION文, 6.2.6

CREATE REPLICATION文, 6.2.6

RETURN TWOSAFE句

ALTER REPLICATION文, 6.2.6

CREATE REPLICATION文, 6.2.6

RETURNING句, INSERT文, 6.2.6 REVOKE文, 6.2.6 RIGHT予約語, 8 ROLLBACK文, 6.2.6 ROLLUP句

集計関数, 4.11

GROUPING_IDファンクション, 4.15

SELECT文, 6.2.6, 6.2.6

ROUND日付関数

説明および使用方法, 4.15

書式モデル, 3

ROUND式関数, 4.15 ROW_NUMBERファンクション, 4.15 ROWIDデータ型

説明, 1.10

明示的な変換, 1.10

暗黙的な変換, 1.10

式, 1.10

INSERT SELECT文, 1.10

Oracle型モード, 1.1

ROWID説明, 3

記憶域要件, 1.13

ROWNUM擬似列, 3 ROWNUM予約語, 8 行

DELETEオブジェクト権限, 定義, 7.2

DELETEオブジェクト権限, 階層, 7.3

削除, 6.2.6

INSERTオブジェクト権限, 定義, 7.2

INSERTオブジェクト権限, 階層, 7.3

挿入, 6.2.6

問合せ結果の挿入, 6.2.6

挿入, 列値デフォルト, 6.2.6

挿入, 省略された列値(INSERT SELECT), 6.2.6

挿入, 省略された列値(INSERT), 6.2.6

マージ, 6.2.6

SELECT ANY TABLEシステム権限, 定義, 7.1

SELECT ANY TABLEシステム権限, 階層, 7.3

SELECTオブジェクト権限, 定義, 7.2

SELECTオブジェクト権限, 階層, 7.3

UPDATE ANY TABLEシステム権限, 定義, 7.1

UPDATE ANY TABLEシステム権限, 階層, 7.3

UPDATEオブジェクト権限, 定義, 7.2

UPDATEオブジェクト権限, 階層, 7.3

更新, 6.2.6

更新, 省略されたWHERE句, 6.2.6

ROWS予約語, 8 RPADファンクション, 4.15 RTRIMファンクション, 4.15

S

検索条件

論理演算子, 5

条件, 5

構文, 5

セキュリティ--「権限」を参照 SELECT ANY SEQUENCEシステム権限

定義, 7.1

階層, 7.3

SELECT ANY TABLEシステム権限

定義, 7.1

階層, 7.3

SELECTオブジェクト権限

定義, 7.2

階層, 7.3

SELECT予約語, 8 SELECT文

GROUP BY句, GROUP_ID関数, 4.15

相関名, 表指定, 6.2.6

CUBE句, 6.2.6, 6.2.6

DerivedTable, 6.2.6

説明および構文, 6.2.6

GROUP BY句, 6.2.6

GROUPINGファンクション, 4.15

GROUPING SETS句, 6.2.6

HAVING句, 6.2.6

JoinedTable, 6.2.6

問合せごとの表の最大数 6.2.6

ORDER BY句, 6.2.6

ROLLUP句, 6.2.6, 6.2.6

SelectList, 6.2.6

TableSpec, 6.2.6

WHERE句, 6.2.6

WithClause, 6.2.6

SELF予約語, 8 順序

ALTER ANY SEQUENCEシステム権限, 7.1

CREATE ANY SEQUENCEシステム権限, 定義, 7.1

CREATE ANY SEQUENCEシステム権限, 階層, 7.3

CREATE SEQUENCEシステム権限, 定義, 7.1

CREATE SEQUENCEシステム権限, 階層, 7.3

作成, 6.2.6

DROP ANY SEQUENCEシステム権限, 7.1

削除, 6.2.6

SELECT ANY SEQUENCEシステム権限, 定義, 7.1

SELECT ANY SEQUENCEシステム権限, 階層, 7.3

SELECTオブジェクト権限, 定義, 7.2

SELECTオブジェクト権限, 階層, 7.3

値, CURRVAL, NEXTVAL, 6.2.6, 6.2.6

折返し, サイクル, 6.2.6

セッション/ユーザー関数, 4.14

CURRENT_USERファンクション, 4.15

セッション情報, SYS_CONTEXT関数, 4.15

SESSION_USERファンクション, 4.15

SYSTEM_USERファンクション, 4.15

UID関数, 4.15

USERファンクション, 4.15

SESSION_USERファンクション, 4.15 SESSION_USER予約語, 8 セッション

ALTER SESSION, 6.2.6

CREATE SESSIONシステム権限, 7.1

SET句

ALTER ACTIVE STANDBY PAIR文, 6.2.6

ALTER CACHE GROUP文, 6.2.6

ALTER REPLICATION文, 6.2.6

SET予約語, 8 SIGNファンクション, 4.15 単純名, 2.1 1文字, "_", LIKE条件, 5 SMALLINTデータ型, 1.2, 1.21.1 SMALLINT予約語, 8 SOME予約語, 8 SOUNDEXファンクション, 4.15 SQLの名前作成の規則, 2 SQRTファンクション, 4.15 文レベルのオプティマイザ・ヒント--「オプティマイザ・ヒント」を参照 データ型の記憶域要件, 1.13 文字列

関数, 4.4

INSTR、INSTRB、INSTR4関数, 4.15

複数の文字, "%", LIKE条件, 5

音声シグネチャ, SOUNDEX関数, 4.15

ある文字列の別の文字列内での位置, 4.15

REPLACEファンクション, 4.15

1文字, "_", LIKE条件, 5

SOUNDEXファンクション, 4.15

SUBSTR、SUBSTRB、SUBSTR4関数, 4.15

他の文字列のサブストリング, 4.15

TRIMファンクション, 4.15

UTF-16書式, UNISTR関数, 4.15

副問合せ

副問合せのファクタリング, WITH句, 6.2.6

副問合せ

ALL / NOT IN条件, 5

ANY / IN条件, 5

EXISTS条件, 5

ORDER BY句, 3

副問合せのサポート, 3

SUBSCRIBER句

ALTER REPLICATION文, 6.2.6

CREATE ACTIVE STANDBY PAIR文, 6.2.6

CREATE REPLICATION文, 6.2.6

SUBSTRファンクション, 4.15 SUBSTR4ファンクション, 4.15 SUBSTRBファンクション, 4.15 SUMファンクション, 4.15 シノニム

CREATE ANY SYNONYMシステム権限, 定義, 7.1

CREATE ANY SYNONYMシステム権限, 階層, 7.3

CREATE PUBLIC SYNONYMシステム権限, 7.1

CREATE SYNONYMシステム権限, 定義, 7.1

CREATE SYNONYMシステム権限, 階層, 7.3

作成, 6.2.6

DROP ANY SYNONYMシステム権限, 7.1

DROP PUBLIC SYNONYMシステム権限, 7.1

削除, 6.2.6

INSERTオブジェクト権限, 定義, 7.2

INSERTオブジェクト権限, 階層, 7.3

SELECT ANY TABLEシステム権限, 定義, 7.1

SELECTオブジェクト権限, 定義, 7.2

UPDATE ANY TABLEシステム権限, 定義, 7.1

UPDATE ANY TABLEシステム権限, 階層, 7.3

SYS所有者名, 2.2 SYS_CONTEXTファンクション, 4.15 SYSDATEファンクション, 4.15 SYSDATE予約語, 8 システム管理キャッシュ・グループ, 6.2.6 システム権限, 7.1 SYSTEM_USERファンクション, 4.15 SYSTEM_USER予約語, 8

T

表

エージングの制限, 6.2.6, 6.2.6

エージング, 追加, 6.2.6, 6.2.6

エージング, 削除, 6.2.6, 6.2.6

エージング, ポリシー, 6.2.6

ALTER ANY TABLEシステム権限, 7.1

ALTER TABLE, 6.2.6

列定義, 6.2.6

列, 追加, 6.2.6, 6.2.6

列, 削除, 6.2.6, 6.2.6

列, 最大, 6.2.6

圧縮, 6.2.6, 6.2.6, 6.2.6

CREATE ANY TABLEシステム権限, 定義, 7.1

CREATE ANY TABLEシステム権限, 階層, 7.3

CREATE TABLEシステム権限, 定義, 7.1

CREATE TABLEシステム権限, 階層, 7.3

作成, 6.2.6

DELETE ANY TABLEシステム権限, 定義, 7.1

DELETE ANY TABLEシステム権限, 階層, 7.3

DELETEオブジェクト権限, 定義, 7.2

DELETEオブジェクト権限, 階層, 7.3

行の削除, 6.2.6

導出, SELECT文, 6.2.6

DROP ANY TABLEシステム権限, 7.1

削除, 6.2.6

外部キー, 追加, 6.2.6

外部キー, 削除, 6.2.6

外部キー, 指定, 6.2.6

ハッシュ索引, 6.2.6

ハッシュ索引, サイズ変更, 6.2.6

INLINE/NOT INLINE, 6.2.6, 6.2.6

INSERT ANY TABLEシステム権限, 定義, 7.1

INSERT ANY TABLEシステム権限, 階層, 7.3

INSERTオブジェクト権限, 定義, 7.2

INSERTオブジェクト権限, 階層, 7.3

問合せ結果を使用した行の挿入, 6.2.6

行の挿入, 6.2.6

行の挿入, 列値デフォルト, 6.2.6

行の挿入, 省略された列値(INSERT SELECT), 6.2.6

行の挿入, 省略された列値(INSERT), 6.2.6

問合せごとの最大数, 6.2.6

パーティション, 6.2.6

主キー, 追加, 6.2.6, 6.2.6

主キー, 変更, 6.2.6

主キー, 指定, 6.2.6

REFERENCESオブジェクト権限, 7.2

行, マージ, 6.2.6

行, 更新, 6.2.6

行, 更新, 省略されたWHERE句, 6.2.6

SELECT ANY TABLEシステム権限, 定義, 7.1

SELECT ANY TABLEシステム権限, 階層, 7.3

SELECTオブジェクト権限, 定義, 7.2

SELECTオブジェクト権限, 階層, 7.3

SELECT文, 指定, 6.2.6

切捨て, 6.2.6

一意制約, 6.2.6

UPDATE ANY TABLEシステム権限, 定義, 7.1

UPDATE ANY TABLEシステム権限, 階層, 7.3

UPDATEオブジェクト権限, 定義, 7.2

UPDATEオブジェクト権限, 階層, 7.3

一時表, グローバル, 6.2.6, 6.2.6 時間(日時)データ型, 型のリスト, 1.11 TIMEデータ型, 1.1, 1.11.2, 1.12.2, 1.12.3, 1.21.1 タイム・ゾーン変換, 1.12.3 時間, 定数, 3, 3 TIMEOUT句

ALTER REPLICATION文, 6.2.6

CREATE ACTIVE STANDBY PAIR文, 6.2.6

CREATE REPLICATION文, 6.2.6

タイムスタンプ

時間隔の追加, 4.15

定数, 3

タイムスタンプ間の時間隔, 4.15

TIMESTAMPデータ型, 1.1, 1.11.3, 1.12.2, 1.12.3, 1.13, 1.21.1 タイムスタンプ, 定数, 3 TIMESTAMPADDファンクション, 4.15 TIMESTAMPDIFFファンクション, 4.15 TimesTenデータ型のマッピング, 1.4 TimesTen型モード, 1.21

サポートされているデータ型, 1.21.1

サポートされているOracleデータ型, 1.21.2

TIMEZONEデータ型(非サポート), 変換, 1.12.3 TINYINTデータ型, 1.21.1 TO予約語, 8 TO_BLOBファンクション, 4.15 TO_CHARファンクション, 4.15 TO_CLOBファンクション, 4.15 TO_DATE関数, 4.15 TO_LOBファンクション, 4.15 TO_NCLOBファンクション, 4.15 TO_NUMBERファンクション, 4.15 トランザクション・レベルのオプティマイザ・ヒント--「オプティマイザ・ヒント」を参照 トランザクション

変更のコミット, 6.2.6

変更のロールバック(元に戻す), 6.2.6

TRANSMIT句, CREATE REPLICATION文, 6.2.6 TRIMファンクション, 4.15 TRUNC日付関数

説明および構文, 4.15

書式モデル, 3

TRUNC式関数, 4.15 TRUNCATE TABLE文, 6.2.6 データの切捨て, 1.18 TT_BIGINTデータ型, 1.1, 1.6.2, 1.13, 1.21.1 TT_CHARデータ型, 1.3, 1.21.1 TT_DATEデータ型, 1.1, 1.11.4, 1.13, 1.21.1 TT_DECIMALデータ型, 1.3, 1.13 TT_HASHファンクション, 4.15 TT_INTEGERデータ型, 1.1, 1.6.3, 1.13, 1.21.1 TT_NCHARデータ型, 1.3, 1.21.1 TT_NVARCHARデータ型, 1.3, 1.21.1 TT_SMALLINTデータ型, 1.6.4, 1.13, 1.21.1 TT_SYSDATE予約語, 8 TT_TIMEデータ型, 1.13 TT_TIMESTAMPデータ型, 1.1, 1.11.5, 1.13 TT_TINYINTデータ型, 1.1, 1.6.5, 1.13, 1.21.1 TT_VARCHARデータ型, 1.3, 1.21.1 TTGRIDMEMBERID関数, 4.15, 4.15 TTGRIDNODENAME関数, 4.15, 4.15 TTGRIDUSERASSIGNEDNAME関数, 4.15, 4.15 TTREP所有者名, 2.2 ttRepSyncSet組み込みプロシージャ, 6.2.6 型モード, 1.3 型モード

Oracle型モード, 下位互換性, 1.3

設定, 1.1

TimesTen型モード, 1.21

TypeMode接続属性, 1.1

U

UID関数, 4.15

UID予約語, 8

式の単項プラスと単項マイナス, 3

データのアンダーフロー, 1.19

Unicode文字, パターン一致, 5

UNION予約語, 8

UNIQUE句, 索引, 6.2.6

一意制約, 表, 6.2.6, 6.2.6

UNIQUE予約語, 8

UNISTR関数, 4.15

UNLOAD ANY CACHE GROUPシステム権限

定義, 7.1

階層, 7.3

UNLOAD CACHE GROUP文, 6.2.6 UNLOADオブジェクト権限

定義, 7.2

階層, 7.3

UPDATE ANY TABLEシステム権限

定義, 7.1

階層, 7.3

UPDATEオブジェクト権限

定義, 7.2

階層, 7.3

UPDATE予約語, 8 UPDATE SET句, MERGE文, 6.2.6 UPDATE文, 6.2.6 UPPERファンクション, 4.15 ユーザー/セッション関数

CURRENT_USERファンクション, 4.15

関数のリスト, 4.14

セッション情報, SYS_CONTEXT関数, 4.15

SESSION_USERファンクション, 4.15

SYSTEM_USERファンクション, 4.15

UID関数, 4.15

USERファンクション, 4.15

USERファンクション, 4.15 名前のユーザーID, 2.2 ユーザー管理キャッシュ・グループ, 6.2.6 USER予約語, 8 ユーザー

変更, 6.2.6

作成, 6.2.6

削除, 6.2.6

USING予約語, 8 UTF-16書式, UNISTR関数, 4.15

V

VARBINARYデータ型, 1.1, 1.7, 1.13, 1.20, 1.21.1

VARCHARデータ型, 1.1, 1.21.1

VARCHAR予約語, 8

VARCHAR2データ型

説明および使用方法, 1.5.3

レプリケーションでのサイズ制限, 1.20

記憶域要件, 1.13

Oracle型モードでサポート, 1.1

ビュー

ALTER ANY VIEWシステム権限, 7.1

CREATE ANY VIEWシステム権限, 定義, 7.1

CREATE ANY VIEWシステム権限, 階層, 7.3

CREATE VIEWシステム権限, 定義, 7.1

CREATE VIEWシステム権限, 階層, 7.3

作成, 6.2.6

DROP ANY VIEWシステム権限, 7.1

削除, 6.2.6

問合せの制限事項, 6.2.6

SELECT ANY TABLEシステム権限, 定義, 7.1

SELECT ANY TABLEシステム権限, 階層, 7.3

SELECTオブジェクト権限, 定義, 7.2

SELECTオブジェクト権限, 階層, 7.3

ビュー--「マテリアライズド・ビュー」も参照

W

WHEN予約語, 8

WHERE句, SELECT文, 6.2.6

WHERE予約語, 8

WITH句, SELECT文, 6.2.6

WITH予約語, 8

X

XLAシステム権限, 7.1

オラクル社の法律上の注意点について

コピーライトについて

Copyright © 1994-2015, Oracle and/or its affiliates.All rights reserved.

商標と登録商標について

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

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

ライセンス制約の保証と結果的に生じる損害の免責

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

保証免責

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

制限付権利

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

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）、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

第三者のコンテンツ、製品、サービスに対する免責事項

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

ドラフトのアルファ版およびベータ版ドキュメントについて

このドキュメントが試作版の場合:

このドキュメントは試作版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。オラクル社およびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。