ヘッダーをスキップ
Oracle Database Lite SQLリファレンス
10g(10.2.0)
B19286-02
  目次
目次
索引
索引

戻る
戻る
次へ
次へ
 

4 SQLコマンド

この章では、Oracle Database LiteのSQLコマンドを説明します。この章の内容は次のとおりです。

4.1 SQLコマンド・タイプ

句および疑似列を含めた様々なタイプのSQLコマンドを次にリストします。各SQLコマンド、句および疑似列の説明は、「SQLコマンドの概要」を参照してください。

SQLコマンド

表4-2 データ操作言語(DML)

DML DML
DELETE
SELECT
EXPLAIN PLAN
subquery::=
INSERT
UPDATE

表4-3 トランザクション制御コマンド

コマンド コマンド
COMMIT
SAVEPOINT
ROLLBACK
SET TRANSACTION

表4-4 句

CONSTRAINT句
DROP句

4.2 SQLコマンドの概要

Oracle Database Liteでは、いくつかの異なるタイプのSQLコマンドを使用しています。この項では、様々なタイプのSQLコマンドについて説明します。

4.2.1 データ定義言語(DDL)コマンド

データ定義言語(DDL)コマンドで、次のタスクを実行できます。

  • スキーマ・オブジェクトの作成、変更および削除

  • 権限およびロールの付与と取消し

  • データ・ディクショナリへのコメントの追加

CREATEALTERおよびDROPコマンドは、操作対象のオブジェクトに対する排他的アクセスが必要です。たとえば、別のユーザーが指定された表にトランザクションをオープンしていると、ALTER TABLEコマンドは失敗します。

4.2.2 データ操作言語(DML)コマンド

データ操作言語(DML)コマンドは、既存のスキーマ・オブジェクト内のデータの問合せと操作を行います。これらのコマンドは、カレント・トランザクションを暗黙的にはコミットしません。

4.2.3 トランザクション制御コマンド

トランザクション制御コマンドは、DMLコマンドによる変更を管理します。

4.2.4

句は、コマンドを変更する、コマンドのサブセットです。

4.2.5 疑似列

疑似列は、コマンドから生成された値で、表内の列のように動作しますが、実際に表内に格納されません。疑似列はOracleによってサポートされていますが、SQL-92の一部ではありません。

4.2.6 バッカス正規形(BNF)表記法規約

このリファレンスの構文図では、バッカス正規形(BNF)のバリエーションの1つを使用しています。バッカス正規形(BNF)は、多くのプログラミング言語で構文に使用される表記法です。このバージョンのバッカス正規形(BNF)構文での強調および記号の意味は、次のとおりです。

  • キーワードは、大文字で示されています。

  • 実際の値を代入するプレースホルダは、小文字で表示されています。プレースホルダには、句および他の式を含めることができます。

  • 縦線(|)で、複数の選択肢を区切っています。つまり、「または」を意味しています。

  • 引用符で囲まれたカッコおよびその他の記号は、表示されたとおりに入力する必要があります。

  • 大カッコ([])は入力しません。これは、カッコ内の構文がオプションであることを示します。

  • 中カッコ({})は通常入力しません。これは、カッコ内の選択肢のいずれかを指定する必要があることを示します。(選択肢は縦線で区切られています。)

  • ループまたは繰返しは、2番目の項、項のセットまたは式を大カッコで囲み、その後に省略記号を続けることで示されています。大カッコは、繰返しがオプションであることを示します(繰返しはすべてオプションです)。省略記号は、複数回の繰返しが可能であることを示します。繰返しがカンマ区切りの場合、大カッコで囲まれた項の冒頭にカンマが付きます。

  • その他のすべての記号(引用符、カンマ、セミコロンなど)は、表示どおりに入力する必要があります。

4.3 SQLコマンドのアルファベット順のリスト

この項では、Oracle Database LiteのSQLコマンド、句および疑似列をアルファベット順にリストし、それぞれを説明しています。説明には次の項目が含まれます。

4.3.1 ALTER SEQUENCE

構文

図4-1に、ALTER SEQUENCEコマンドの構文を示します。

図4-1 ALTER SEQUENCEコマンド

ALTER SEQUENCEコマンド
図alt_sequ.gifの説明

BNF表記法

 ALTER SEQUENCE [schema .] sequence  [(INCREMENT BY "integer"   | (MAXVALUE "integer" | NOMAXVALUE)   | (MINVALUE "integer" | NOMINVALUE)
  ]
;

前提条件

順序がユーザーのスキーマ内に必要です。

用途

次の方法のいずれかを使用して、順序を変更します。

  • 将来の順序番号間の増分値を変更

  • 最小値または最大値を設定または排除

表4-6に、ALTER SEQUENCEコマンドの引数をリストします。

表4-6 ALTER SEQUENCEコマンドで使用される引数

引数 説明
schema 順序を含むスキーマの名前。schemaを省略すると、Oracle Database Liteはユーザー自身のスキーマ内で順序を変更します。
sequence 変更される順序の名前。
INCREMENT BY 順序番号間の間隔を指定します。0以外の任意の正の整数または負の整数にできます。負の整数の場合、順序は降順になります。正の整数を指定すると、順序は昇順になります。この値は10桁以下になります。この値の絶対値は、MAXVALUEMINVALUEの差より小さくする必要があります。INCREMENT BY句を指定しない場合、デフォルトは1です。
MAXVALUE 順序で生成できる最大値を指定します。この整数値は10桁以下になります。MAXVALUEMINVALUEより大きくする必要があります。
NOMAXVALUE 昇順に対しては2147483647、降順に対しては-1の最大値を指定します。
MINVALUE 順序で生成できる最小値を指定します。この整数値は10桁以下になります。MINVALUEMAXVALUEより小さくする必要があります。
NOMINVALUE 昇順に対しては1、降順に対しては-2147483647の最小値を指定します。

使用上の注意

  • 別の数値で順序を再開するには、順序を削除し再作成してください。ALTER SEQUENCEコマンドの影響を受けるのは、将来の順序数値のみです。

  • Oracle Database Liteは、いくつかの妥当性チェックを実行します。たとえば、現在の順序番号より小さい新規MAX VALUE、または現在の順序番号より大きい新規MINVALUEは指定できません。

この文は、ESEQ順序に新規MAXVALUEを設定します。

ALTER SEQUENCE eseq MAXVALUE 1500

ODBC 2.0

ALTER SEQUENCEコマンドはODBC SQLの一部ではありませんが、ODBCはこのコマンドをそのままデータベースに渡します。

関連項目

CREATE SEQUENCEDROP SEQUENCE

4.3.2 ALTER SESSION

構文

図4-2に、ALTER SESSIONコマンドの構文を示します。

図4-2 ALTER SESSIONコマンド

ALTER SESSIONコマンド
図alt_sess.gifの説明

BNF表記法

ALTER SESSION SET nls_date_format = nls_date_value ;

前提条件

なし。

用途

データベースへの接続に影響を与える条件やパラメータを指定または変更します。Oracle Database Liteでは、NLS日付書式の指定や変更に対してのみ、このコマンドのSET句を使用できます。文は、ユーザーがデータベースから切断されるまで有効です。

表4-7に、ALTER SESSIONコマンドの引数をリストします。

表4-7 ALTER SESSIONコマンドで使用される引数

引数 説明
parameter_name Oracle Liteでは、ALTER SESSIONコマンドはNLS_DATE_FORMATという名前のパラメータを1つのみ持ちます。
parameter_value NLS日付書式です。たとえば、YYYY MM DD HH24:MI:SSです。

ALTER SESSION
SET NLS_DATE_FORMAT = 'YYYY MM DD HH24:MI:SS';

Oracle Liteは、新しいデフォルトの日付書式を使用します。

SELECT TO_CHAR(SYSDATE) Today FROM DUAL;

TODAY
-------------------
1997 08 12 14:25:56

4.3.3 ALTER TABLE

構文

図4-3に、ALTER TABLEの構文を示します。

図4-3 ALTER TABLEコマンド

ALTER TABLEコマンドの構文図
図alt_tabl.gifの説明

BNF表記法

ALTER TABLE [schema .] table
{
  ADD add_column_list
 |ADD table_constraint
 |DROP drop_clause
 |ATTACH JAVA {CLASS | SOURCE} cls_or_src_name
   IN {DATABASE | cls_or_src_path}
    [WITH CONSTRUCTOR ARGUMENTS "(" col_name_list ")"
 |DETACH [AND DELETE] JAVA CLASS class_name
 |ENABLE ALL TRIGGERS
 |DISABLE ALL TRIGGERS
 |MODIFY "(" modify_column_option")"
 |MODIFY CONSTRAINT constraint_name constraint_state
}
;

add_column_list::=

図4-4に、add_column_list式の構文を示します。

図4-4 add_column_list式

add_column_list式
図add_col.gifの説明

BNF表記法

[COLUMN] "("column datatype [DEFAULT expr] [column_constraint]
[, column_constraint]...")" [, [COLUMN] "("column datatype [DEFAULT expr]
[column_constraint] [, column_constraint]...")"]...

modify_column_option::=

図4-5に、modify_column_option式の構文を示します。

図4-5 modify_column_option式

modify_column_option式
図md_col_op.gifの説明

BNF表記法

column [datatype] [DEFAULT { literal | USER | SYSDATE }] [ NULL | NOT NULL ]
      [,  column [ [datatype] [DEFAULT { literal | USER | SYSDATE }]
       [ NULL | NOT NULL ] ] ]...

constraint_state::=

図4-6に、constraint_state式の構文を示します。

図4-6 constraint_state式

constraint_state式の表記法
図cons_st.gifの説明

BNF表記法

([ENABLE | DISABLE] [VALIDATE | NOVALIDATE])

前提条件

表が、ユーザーのスキーマ内に必要です。データベースにはSYSTEM、またはDBA/DDL権限を持つユーザーとしてログインする必要があります。

用途

次の方法のいずれかを使用して、の定義を変更します。

  • 列または整合性制約を追加

  • 列または整合性制約を削除

  • Javaクラスを連結

  • Javaクラスを連結解除

  • 列のデフォルト値を追加または変更

  • 列のデータ型またはサイズを変更

  • 制約を無効化または有効化

  • 列がNULLかどうかのプロパティを変更

表4-8に、ALTER TABLEコマンドの引数をリストします。

表4-8 ALTER TABLEコマンドで使用される引数

引数 説明
schema スキーマの名前で、最大128文字の文字列。各ユーザー名は、同じ名前のデフォルトのスキーマが付いているため、スキーマ名は、どのユーザー名とも異なる必要があります。ユーザー名と同じ名前のスキーマを作成すると、Oracle Liteは、エラーを返します。詳細は、「CREATE USER」を参照してください。
table データベースの表の名前。
ADD 列または整合性制約がデータベースの表に追加されるように指定します。
DROP 列または整合性制約がデータベースの表から削除されるように指定します。
column データベースの列の名前。
datatype データベースの列のデータ型。
DEFAULT 新規列に、新しいデフォルト値expr(式)を指定します。次のいずれかになります。
  • DEFAULT NULLDEFAULT USER(表が作成された際のユーザー名)、DEFAULTリテラル

  • ODBC FUNCTIONS - TIMESTAMPADDTIMESTAMPDIFFDATABASEUSER

  • SQL FUNCTIONS - CURRENT_DATECURRENT_TIMECURRENT_TIMESTAMPSYSDATE

式の詳細は、1.8「式の指定」を参照してください。

expr 有効な式。式が評価されるのはALTER TABLEが実行されるときで、行にデフォルト値が挿入されるときではありません。詳細は、1.8「式の指定」を参照してください。
column_constraint 列整合性制約。詳細は、「CONSTRAINT句」を参照してください。NOT NULL制約を持つ列を、すでにデータを含んでいる表に追加できません。
table_constraint 表整合性制約。詳細は、「CONSTRAINT句」を参照してください。
drop_clause 削除される整合性制約。詳細は、「DROP句」を参照してください。
ATTACH JAVA Javaクラスまたはソース・ファイルをデータベースの表に連結します。
IN Javaクラスまたはソース・ファイルを、データベース内、Javaクラスまたはソース・パスに連結する必要があることを示します。
DATABASE Javaクラスまたはソース・パスを連結するデータベース。
DETACH Javaクラスをデータベースの表から削除します。
CLASS Javaクラスを指定します。
SOURCE Javaソース・ファイルを指定します。
cls_or_src_name 完全修飾Javaクラス名またはソース・ファイル名。
cls_or_src_path 指定されたJavaクラスまたはソース・ファイルを含むディレクトリ。
WITH CONSTRUCTOR ARGS Javaコンストラクタの引数として使用されるクラスの属性を指定します。
col_name_list データベースの表内の列(属性)のリスト。
AND DELETE Javaクラスをデータベースから削除します。
class_name 完全修飾Javaクラス名。
ENABLE ALL TRIGGERS 表に対応付けられたトリガーをすべて有効にします。トリガーは、トリガー条件が満たされたときに起動されます。単一のトリガーを有効にするには、ALTER TRIGGERENABLE句を使用します。「ALTER TRIGGER」を参照してください。
DISABLE ALL TRIGGERS 表に対応付けられたトリガーをすべて無効にします。無効にされたトリガーは、トリガー条件が満たされても起動されません。単一のトリガーを無効にするには、ALTER TRIGGERDISABLE句を使用します。「ALTER TRIGGER」を参照してください。
MODIFY 既存の列に新しいデフォルトを指定します。後続のINSERT文が列の値を省略した場合、Oracle Database Liteがその列にこの値を割り当てます。デフォルト値のデータ型は、列に指定されたデータ型に一致する必要があります。また、列にはデフォルト値を保持するための十分な長さが必要です。
modify_column_option 既存の列の定義を変更します。データ型、デフォルト値(リテラル、USERまたはSYSDATE)または列制約状態(NULLNOT NULL)など、省略された列定義のオプション部分は変更されません。既存のデータが、データ変換によりエラーを発生しないようなものであれば、既存のデータを新しいデータ型に変更できます。既存のサイズが15文字以上のVARCHAR列のサイズを増加した場合、データ変換は必要ありません。それ以外の変更はすべてデータ変換が必要です。各列は個別に変換されます。データ型を変更すると、そのつどすべてのオブジェクトが再書込みされ、依存するすべての索引が作成されます。

KEY COLUMNS句を使用して作成された索引の列のデータ型を変更すると、索引の再作成でKEY COLUMNSオプションの再設定が不可能なためにALTER TABLE MODIFYコマンドが失敗する場合があります。KEY COLUMNS句を使用して作成された索引は、列を変更する前に削除する必要があります。

CONSTRAINT 既存の制約の状態を変更します。ENABLEは、表内のすべての新規データに制約が適用されることを指定します。参照整合性制約を有効にする前に、参照される制約を有効にする必要があります。
ENABLE VALIDATE この設定では、既存のデータがすべて制約上準拠することを指定します。制約検証を有効にすると、それ以降すべてのデータの有効性が保証されます。主キー制約をENABLE VALIDATEモードで設定すると、検証処理により主キー列にNULLが含まれないように保証されます。

VALIDATENOVALIDATEが省略された場合、デフォルトはVALIDATEです。

ENABLE NOVALIDATE この設定により、制約付きデータに対するすべての新規DML操作が制約に準拠することが保証されますが、表内の既存のデータが制約に準拠することは保証されません。

主キー制約を有効にすると自動的に1次索引が作成され、制約が適用されます。主キー制約が無効にされた場合、この索引は通常の索引に変換されます。制約が再度有効になると、主キー制約に対して索引がチェックされ、違反が検出されない場合は主キー状態にリストアされます。

DISABLE VALIDATE この設定は制約を無効にして、主キー制約の索引を通常の索引に変換しますが、制約は有効なまま保持します。SQLRTエンジンを介して表にDML文を実行できませんが、Oracle Database Lite Javaアクセス・クラス(JAC)を介するとDML文を実行できます。

VALIDATENOVALIDATEが省略された場合、デフォルトはNOVALIDATEです。

DISABLE NOVALIDATE この設定では、Oracle Database Liteは制約をメンテナンスせず(無効にされているため)、また制約がTRUEであることを保証できません(検証されていないため)。主キー制約索引は通常の索引にダウングレードされます。

外部キー制約がDISABLE NOVALIDATE状態でも、主キーが外部キーにより参照されている表は削除できません。


使用上の注意

表に新規列を追加するためにADD句を使用すると、新規列の各行の初期値はNULLとなります。デフォルト値が指定されている場合にかぎり、表が空であるかどうかにかかわらず、NOT NULL制約を持つ列を追加できます。

ENABLE引数からVALIDATENOVALIDATEが省略された場合、デフォルトはNOVALIDATEです。

DISABLE引数からVALIDATENOVALIDATEが省略された場合、デフォルトはNOVALIDATEです。

NULLかどうかの制約が、MODIFY句を整合性制約構文付きで使用して既存の列に追加できる唯一の整合性制約です。NOT NULLは、列にNULLが含まれていない場合のみ追加できます。NULL制約は、主キー制約の構成要素でない列に対して追加できます。

次の文は、列THRIFTPLANLOANCODEEMP表に追加します。THRIFTPLANは、データ型NUMBER(最大で7桁と小数点以下2桁)を持ちます。LOANCODEは、データ型CHAR(サイズ1、NOT NULL整合性制約あり)を持ちます。

ALTER TABLE emp
ADD (thriftplan NUMBER(7,2),
loancode CHAR(1));

関連項目

CONSTRAINT句CREATE TABLECREATE VIEW

4.3.4 ALTER TRIGGER

構文

図4-7に、ALTER TRIGGERコマンドの構文を示します。

図4-7 ALTER TRIGGERコマンド

ALTER TRIGGERコマンドの構文図
図alt_trgr.gifの説明

BNF表記法

ALTER TRIGGER [schema .] trigger { ENABLE | DISABLE };

前提条件

トリガーを変更するには、DBA/DDL権限が必要です。

用途

データベース・トリガーを有効化または無効化します。トリガー作成の詳細は、「CREATE TRIGGER」を参照してください。トリガー削除の詳細は、「DROP TRIGGER」を参照してください。


注意

この文では、既存のトリガーの宣言または定義は変更されません。トリガーの再宣言または再定義には、CREATE TRIGGER文にOR REPLACEを付けて使用してください。

表4-9に、ALTER TRIGGERコマンドの引数をリストします。

表4-9 ALTER TRIGGERコマンドのパラメータ

パラメータ 説明
schema トリガーを含むスキーマ。schemaを省略すると、Oracle Database Liteは、トリガーがユーザー自身のスキーマ内にあると解釈します。
trigger 変更されるトリガーの名前。
ENABLE トリガーを有効にします。表に対応付けられたトリガーをすべて有効にするには、ALTER TABLEENABLE ALL TRIGGERS句も使用できます。「ALTER TABLE」を参照してください。
DISABLE トリガーを無効にします。表に対応付けられたトリガーをすべて無効にするには、ALTER TABLEDISABLE ALL TRIGGERS句も使用できます。「ALTER TABLE」を参照してください。

INVENTORY表に作成されたREORDERという名前のトリガーを考えます。UPDATE文で特定の部品の数が減らされ、在庫が部品の再注文基準を下回ると、常にトリガーが起動されます。このトリガーは、部品番号、再注文量および今日の日付を含む行を保留注文の表に挿入します。

このトリガーが作成されると、Oracle Database Liteは自動的にこれを有効にします。次の文を使用してトリガーを無効化できます。

ALTER TRIGGER reorder DISABLE;

トリガーを無効にしたときは、UPDATE文により部品の在庫が再注文基準を下回ってもOracle Database Liteはトリガーを起動しません。

トリガーを無効にした後は、次の文を使用してトリガーを有効にできます。

ALTER TRIGGER reorder ENABLE;

トリガーを再度有効にした後は、UPDATE文の結果として部品の在庫が再注文基準を下回ったときにOracle Database Liteがトリガーを起動します。トリガーが無効なときに、部品の在庫が再注文基準を下回る可能性があります。この場合、トリガーを再度有効にしても、別のトランザクションが在庫をさらに減らすまで、Oracle Database Liteはこの部品に対するトリガーを自動的には起動しません。

関連項目

CREATE TRIGGER

4.3.5 ALTER USER

構文

図4-8に、ALTER USERの構文を示します。

図4-8 ALTER USERコマンド

ALTER USERの構文図
図alt_user.gifの説明

BNF表記法

ALTER USER user IDENTIFIED BY password ;

前提条件

次の条件のいずれかを満たすと、データベース内のユーザー・パスワードを変更できます。

  • そのユーザーとしてデータベースに接続している。

  • SYSTEMとして、あるいはDBA/DDLまたはADMIN権限を持つユーザーとしてデータベースに接続している。

  • ユーザーにUNRESOLVED XREF TO ADMINまたはUNRESOLVED XREF TO DBA/DDLロールの権限が付与されている。

用途

データベース・ユーザー・パスワードを変更します。

表4-10に、ALTER USERコマンドの引数をリストします。

表4-10 ALTER USERコマンドで使用される引数

引数 説明
user 変更されるユーザー。userは、30文字以内の、文字で始まる一意のユーザー名です。userの最初の文字に、空白文字は使用できません。
IDENTIFIED BY Oracle Database Liteがユーザー・アクセスを許可する方法を示します。
password 最大128文字の名前の、ユーザーの新しいパスワードを指定します。パスワードでは、引用符は使用されず、大/小文字は区別されません。

次の例は、「todd」という名前で、パスワード「tiger」で識別されるユーザーを作成します。次に、ユーザーのパスワードを「lion」に変更します。

CREATE USER todd IDENTIFIED BY tiger;

ALTER USER todd IDENTIFIED BY lion;

関連項目

CREATE USERDROP USER

4.3.6 ALTER VIEW

構文

図4-9に、ALTER VIEWコマンドの構文を示します。

図4-9 ALTER VIEWコマンド

ALTER VIEWの構文図

BNF表記法

ALTER VIEW [schema .] view COMPILE ;

前提条件

ビューがユーザーのスキーマ内に必要です。データベースにはSYSTEM、またはDBA/DDL権限を持つユーザーとしてログインする必要があります。

用途

ビューを再コンパイルします。

表4-11に、ALTER VIEWコマンドの引数をリストします。

表4-11 ALTER VIEWコマンドで使用される引数

引数 説明
schema ビューを含むスキーマ。schemaを省略すると、Oracle Database Liteはユーザー自身のスキーマ内でビューを変更します。
view 再コンパイルされるビューの名前。
COMPILE Oracle Liteによってビューが再コンパイルされます。COMPILEキーワードは必須です。

使用上の注意

ALTER VIEWを使用して、無効なビューを明示的に再コンパイルできます。明示的な再コンパイルにより、ランタイム前に再コンパイル・エラーを検出できます。実表の1つを変更した後に、ビューを明示的に再コンパイルすることが必要な場合があります。これは、変更により依存するビューまたはその他のオブジェクトに影響を与えないようにするためです。ALTER VIEW文を発行すると、Oracle Database Liteは、ビューが有効か無効かにかかわらず、ビューを再コンパイルします。また、Oracle Database Liteは、ビューに依存するローカル・オブジェクトをすべて無効にします。

このコマンドは、既存のビューの定義を変更しません。ビューを再定義するには、CREATE VIEWコマンドをOR REPLACEオプションとともに使用してください。

次のコードは、ALTER VIEW SQLコマンドを表します。COMPILEキーワードは必須です。

ALTER VIEW customer_view COMPILE;

関連項目

CREATE VIEWDROP VIEW

4.3.7 COMMIT

構文

図4-10に、COMMITの構文を示します。

図4-10 COMMITコマンド

COMMITコマンドの構文図

BNF表記法

COMMIT [WORK] ;

前提条件

なし。

用途

カレント・トランザクションを終了し、データベースの変更をすべて永久的なものにします。

表4-12に、COMMITコマンドの引数をリストします。

表4-12 COMMITコマンドで使用される引数

引数 説明
WORK 影響を与えることのないオプションの引数。WORKは、標準SQL準拠という目的でのみサポートされています。文COMMITCOMMIT WORKは同じです。

使用上の注意

Oracle Database Liteは、CREATE DATABASE以外は、どのDDL文も自動コミットしません。カレント・トランザクションをコミットして、データベースの変更をすべて永久的なものにする必要があります。

次のコードは、COMMITコマンドを表します。この例では行がDEPT表に挿入され、変更がコミットされます。WORK引数はオプションです。

INSERT INTO dept VALUES (50, 'Marketing', 'TAMPA');

COMMIT;

ODBC 2.0

COMMITコマンドはODBC SQL構文の一部ではありませんが、ODBCはこのコマンドをそのままデータベースに渡します。

ODBCプログラムは通常、SQL_COMMITフラグを指定したAPIコールSQLTransact()を使用します。

関連項目

ROLLBACK

4.3.8 CONSTRAINT句

構文

図4-11に、COLUMN CONSTRAINT句の構文を示します。

図4-11 COLUMN_CONSTRAINT句

COLUMN CONSTRAINT句の構文図

BNF表記法

 [CONSTRAINT constraint] { [NOT] NULL    | {UNIQUE | PRIMARY KEY}     | REFERENCES [schema .] table ["("column")"] [ON DELETE CASCADE]    | CHECK "(" condition ")" }

構文

図4-12に、TABLE CONSTRAINT句の構文を示します。

図4-12 TABLE CONSTRAINT句

TABLE CONSTRAINT句の構文図

BNF表記法

[CONSTRAINT constraint]{

 { UNIQUE | PRIMARY KEY } "("column [, column] ...")" [ KEY COLUMNS = number ]
 | FOREIGN KEY "("column [, column] ...")" REFERENCES [ schema .] table   "("column [, column] ...")" [ON DELETE CASCADE]
 | CHECK "("condition")"}

前提条件

CONSTRAINT句は、CREATE TABLEおよびALTER TABLEコマンドの中に入れることができます。整合性制約を定義するには、データベースにSYSTEMとして、またはDBA/DDL権限を持つユーザーとしてログインする必要があります。Oracle Database Liteに整合性制約を設定することのみできます。

用途

整合性制約を定義します。

表4-13に、CONSTRAINT句の引数をリストします。

表4-13 CONSTRAINT句で使用される引数

引数 説明
CONSTRAINT constraint引数で指定された整合性制約を識別します。Oracle Database Liteは、制約名と定義をデータ・ディクショナリに格納します。CONSTRAINTキーワードを省略すると、Oracle Database Liteは、形式POL_SYS_CONSnで名前を生成します。nは、データベース内でその名前を一意にする整数値です。
constraint 追加される制約の名前。
NULL 列にNULL値を入れられることを指定します。
NOT NULL 列にNULL値は入れられないことを指定します。デフォルトでは、列にNULL値を入れられます。
UNIQUE 列または列の組合せを一意キーとして指定します。
PRIMARY KEY 列または列の組合せを表の主キーとして指定します。
KEY COLUMNS = 索引の作成に使用する列数を指定します。この句を使用すると索引のサイズが減るため、大量の列に索引が必要なときに便利です。複数行が、KEY COLUMNSの値で指定された索引キーの列を接頭辞として修飾している場合、問合せの性能に影響する可能性があります。これは、一致する行を検索するためにデータベースがすべての修飾行を参照することが原因です。
number KEY COLUMNSの個数を指定する整数。
FOREIGN KEY 子表内の列または列の組合せを、参照整合性制約内の外部キーとして指定します。
schema スキーマの名前で、最大128文字の文字列。各ユーザー名は、同じ名前のデフォルトのスキーマが付いているため、スキーマ名は、どのユーザー名とも異なる必要があります。ユーザー名と同じ名前のスキーマを作成すると、Oracle Database Liteは、エラーを返します。詳細は、「CREATE USER」を参照してください。
REFERENCES 参照整合性制約内の外部キーによって参照される親表の主キーまたは一意キーを識別します。
table 制約が置かれる表を指定します。tableのみを指定して、column引数を省略すると、外部キーは自動的に表の主キーを参照します。
column 制約が置かれる表の列を指定します。
ON DELETE CASCADE 主キーまたは一意キー値の削除時に、Oracle Database Liteが、依存外部キー値を自動的に削除して、参照整合性をメンテナンスすることを指定します。
CHECK 特定の条件を表内の各列に対してチェックすることを指定します。Oracle Database Liteは、CHECK条件内で、次の演算子と関数のみをサポートします。

+ - / * = ! = < > < = > = IS NULL、LIKE、BETWEEN、TO_CHAR

TO_NUMBERTO_DATETRANSLATE

condition 表の各行が満たす必要のある条件を指定します。有効な条件の作成の詳細は、1.7「SQL条件の指定」を参照してください。

次の例は、列A、Bを持つ表Tを作成します。例では、PRIMARY KEY制約句を使用して、列Aを表の主キーにします。

CREATE TABLE T (A CHAR(20) PRIMARY KEY, B CHAR(20));

関連項目

ALTER TABLECREATE TABLE

4.3.9 CREATE DATABASE

構文

図4-13に、CREATE DATABASEの構文を示します。

図4-13 CREATE DATABASEコマンド

CREATE DATABASEコマンドの構文図

BNF表記法

 CREATE DATABASE database database_parameter [, database_parameter]...;

database_parameters::=

図4-14に、database_parameters式の構文を示します。

図4-14 database_parameters式

database_parameters式の構文図

BNF表記法

 {|DATABASE_ID database_id
  |DATABASE_SIZE max_bytes
  |EXTENT_SIZE npages
 }
;

前提条件

なし。

用途

データベースを作成します。

表4-14に、CREATE DATABASEコマンドの引数をリストします。

表4-14 CREATE DATABASEコマンドで使用される引数

引数 説明
database データ・ファイル名またはフルパス名。フルパス名は、二重引用符で囲む必要があります。パス名が指定されていないと、ODBC接続の場合、データ・ソース名(DSN)に指定されたディレクトリ内にデータ・ファイルが作成されます。フルパス名もDSNも有効でない場合、カレント作業ディレクトリ内にデータベースが作成されます。databaseの長さは、オペレーティング・システムまたはファイル・システムにより制限されます。重複するデータベース名を使用すると、エラーが発生します。
DATABASE_ID データベースのオプションの数値識別子。
database_id データベースの一意の識別子。16〜32765の一意の数値にする必要があります。指定がない場合、デフォルトの初期値は64です。POLITE.INIファイル内のdatabase_idパラメータは、次に利用可能なデータベースIDを指定します。同じデータベースIDで2つのデータベースを作成することは可能ですが、2つのデータベースに、同時に接続できません。
DATABASE_SIZE データベースのサイズ。
maxbytes データベースが増大できる最大ファイル・サイズ。省略された場合、デフォルト値は256Mです。キロバイト、メガバイトおよびギガバイトに対してK、M、Gの省略形を使用できます。省略形が指定されていないと、デフォルトはKです。省略形を指定する場合は、250キロバイトから4ギガバイトまでの間の整数値を使用する必要があります。たとえば、256M、1000K、2Gなどです。
EXTENT_SIZE データベース・ファイル内の増分ページ量。カレント・ファイル内でデータベースのページが足りなくなると、ファイルの大きさをこのページ数ずつ拡張します。
npages エクステント(表の割当ての最小単位)を構成する4K(キロバイト)のページの数値。npagesには2の倍数の数値が必須です。デフォルト値は4です。0に設定すると、Oracle Database Liteは、npagesにデフォルト値を設定します。

使用上の注意

ページ数は、64以下にしてください。

キーワードはどのような順序でもリストできます。

新規に作成されたデータベースを実行する前に、ODBC Administratorを使用して、ODBCデータ・ソース名(DSN)を構成する必要があります。DSNの作成方法とODBC Administratorの使用方法は、Oracle Lite Userの各プラットフォームに対応する開発者ガイドを参照してください。

他のDDL文と異なり、Oracle Liteは、CREATE DATABASEコマンドを自動コミットします。CREATE DATABASEコマンドは、ROLLBACK文を使用して取消しを行うことはできません。

POLITE.INIのパラメータNLS_SORTが、いずれかの照合順序(FRENCHなど)を有効にするよう設定されている場合、すべてのデータベースはその照合順序で作成されます。デフォルトはBINARYです。詳細は、『Oracle Database Lite開発者ガイド』を参照してください。

データ・ファイルLIN.ODBをC:\TMPディレクトリ内に.ODBファイル拡張子を付けて作成するには、次を使用します。

CREATE DATABASE "C:\TMP\LIN"

関連項目

ROLLBACK

4.3.10 CREATE FUNCTION

構文

図4-15に、CREATE FUNCTIONの構文を示します。

図4-15 CREATE FUNCTIONコマンド

CREATE FUNCTIONコマンドの構文図

BNF表記法

CREATE [OR REPLACE] FUNCTION [schema .] function
["(" argument [ IN | OUT | IN OUT ] datatype
   [, argument [ IN | OUT | IN OUT ] datatype]...
 ")"]

RETURN datatype { IS | AS } [ invoker_rights_clause] [call_spec];

call_spec::=

図4-16に、call_spec式の構文を示します。

図4-16 call_spec式

call_spec式の構文図

BNF表記法

LANGUAGE  Java_declaration

Java_declaration::=

図4-17に、Java_declaration式の構文を示します。

図4-17 Java_declaration式

Java_declaration式の構文図

BNF表記法

JAVA NAME . string .

前提条件

ユーザー自身のスキーマ内で関数を作成するには、データベースにSYSTEMとして接続するか、DBA/DDL権限が必要です。

コール仕様を呼び出すには、DBA/DDL権限が必要です。

用途

ストアド・ファンクションのコール仕様を作成します。

ストアド・ファンクション(ユーザー・ファンクションとも呼ばれる)は、値を返すJavaストアド・プロシージャです。ストアド・ファンクションはプロシージャとよく似ていますが、プロシージャの場合、コールされた環境内に値を返しません。プロシージャおよびファンクションの全般的な説明は、「CREATE PROCEDURE」を参照してください。関数の作成例は、「CREATE FUNCTION」の例を参照してください。

「コール仕様」は、SQLからコールできるようにJavaメソッドを宣言します。コール仕様は、コール時にどのJavaメソッドをコールするかをOracle Database Liteに知らせます。また、Oracle Database Liteに、引数および戻り値に対してどの型変換を行うかも知らせます。

CREATE FUNCTION文は、関数をスタンドアロンのスキーマ・オブジェクトとして作成します。スタンドアロン関数の削除については、「DROP FUNCTION」を参照してください。

表4-15に、CREATE FUNCTIONコマンドの引数をリストします。

表4-15 CREATE FUNCTIONコマンドで使用される引数

引数 説明
OR REPLACE 関数がすでに存在する場合、再作成します。この句は、すでに付与されているオブジェクト権限を変更(削除、再作成または再付与)せずに、既存の関数の定義を変更するために使用します。

再定義される関数に対する権限を前もって付与されているユーザーは、権限を再付与されなくてもその関数にアクセスできます。この関数に依存するファンクション索引があれば、Oracle Database Liteは、索引にDISABLEDのマークを付けます。

schema 関数を含むスキーマ。schemaを指定しないと、Oracle Database Liteはユーザーのカレント・スキーマに関数を作成します。
function 作成する関数の名前。「使用上の注意」を参照してください。
argument 関数の引数の名前。関数が引数を受け入れない場合、関数名の後のカッコを省略できます。
IN 関数をコールするときに、ユーザーが引数の値を提供する必要があることを指定します。これがデフォルトです。
OUT 関数が引数の値を設定することを指定します。
IN OUT 引数の値をユーザーが指定でき、さらに関数で設定される場合もあることを指定します。
  • このパラメータまたは別のパラメータに行われた変更は、同じ変数が両方に渡された場合、両方の名前を通して即座に参照できます。

  • 関数が未処理例外によって終了した場合、このパラメータに対して行われた割当ては、コール元の変数内で参照できます。

このような効果は、特定のコールで発生することもあれば、発生しないこともあります。これらの影響が問題ではない場合にのみ、NOCOPYを使用します。

datatype 引数のデータ型。引数は、SQLがサポートするどのデータ型でも取ることができます。データ型で長さ、精度またはスケールは指定できません。Oracle Database Liteは、引数の長さ、精度またはスケールを、関数のコール元の環境から導出します。
RETURN datatype 関数の戻り値のデータ型を指定します。関数は値を返す必要があるため、この句は必須です。戻り値は、SQLがサポートするどのデータ型でも取ることができます。

データ型で長さ、精度またはスケールは指定できません。Oracle Database Liteは、戻り値の長さ、精度またはスケールを、関数のコール元の環境から導出します。

IS SQL識別子をJavaメソッドに対応付けます。
AS SQL識別子をJavaメソッドに対応付けます。
invoker_rights_clause Oracle Database Liteは、Oracleとの互換性のためにinvoker_rights_clauseを認識しますが、実行はしません。
call_spec Javaメソッド名、パラメータ型および戻り型を、対応するSQL要素にマップします。
LANGUAGE call_specの言語を指定します。Oracleデータベースでは、CまたはJavaが使用できます。Oracle Database Liteでは、Javaのみが使用できます。
java_declaration call_specの言語を指定します。Oracleデータベースでは、CまたはJavaが使用できます。Oracle Database Liteでは、Javaのみが使用できます。
JAVA NAME Javaメソッド名。
string メソッドのJava実装を識別します。詳細は、『Oracle Database Lite Java開発者ガイド』を参照してください。

使用上の注意

ユーザー定義関数は、定義が変更できない状況では使用できません。次の場所では、ユーザー定義関数は使用できません。

  • CREATE TABLE文またはALTER TABLE文におけるCHECK

  • CREATE TABLE文またはALTER TABLE文におけるDEFAULT

さらに、問合せまたはDML文の中からコールされる関数では次のことはできません。

  • OUTまたはIN OUTパラメータを持つこと。

  • カレント・トランザクションのコミットやロールバック、セーブポイントの作成やロールバック、またはセッションやシステムの変更。DDL文は、カレント・トランザクションを暗黙的にコミットします。そのため、ユーザー定義ファンクションはDDL文を実行できません。

  • 関数がSELECT文からコールされているときに、データベースに書き込むこと。ただし、関数がDML文内の副問合せからコールされている場合は、データベースに書き込めます。

  • 関数がDML文からコールされているときに、関数をコールしている文によって変更が行われている表と同じ表に書き込むこと。

Oracle Database Liteは、OUTおよびIN OUTパラメータに対する制約以外の制約を、SQL文から直接コールされる関数のみでなく、この関数からコールされる関数に対しても適用します。また、その関数やその関数がコールする関数によって実行されるSQL文からコールされる関数に対しても、これらの制約を適用します。

次の例は、関数の作成とテストについての完全な手順を示しています。

  1. 次のJavaプログラムを作成してコンパイルし、その名前をEmployee.javaにします。

    public class Employee {
      public static String paySalary (float sal, float fica, float sttax,
         float ss_pct, float espp_pct) {
       float deduct_pct;
       float net_sal;
    
       /* compute take-home salary */
       deduct_pct = fica + sttax + ss_pct + espp_pct;
       net_sal = sal * deduct_pct;
    
       String returnstmt = "Net salary is " + net_sal;
       return returnstmt;
     } /*paySalary */
    }
    
    
  2. EmployeeクラスをOracle Database Liteにロードします。一度ロードすると、Employeeクラス・メソッドは、Oracle Database Lite内のストアド・プロシージャになります。

    CREATE JAVA CLASS USING BFILE ('C:\', 'Employee.class');
    
    
  3. employeeSalaryメソッドは値を返すため、それをCREATE FUNCTION文を使用して公開します。

    CREATE FUNCTION
    PAY_SALARY(
        sal float, fica float, sttax float, ss_pct float, espp_pct float)
        return varchar2
    as language java name
    'Employee.paySalary(float,float,float,float,float)return java.lang.String';
    .
    /
    
    
  4. dualから、PAY_SALARYストアド・プロシージャを選択します。

    SELECT PAY_SALARY(6000.00, 0.2, 0.0565, 0.0606, 0.1) from dual;
    
    

    次の結果を返します。

    PAY_SALARY
    -----------------------------------------
    Net Salary is 2502.6
    

関連項目

DROP FUNCTION

4.3.11 CREATE GLOBAL TEMPORARY TABLE

構文

図4-18に、CREATE GLOBAL TEMPORARY TABLEの構文を示します。

図4-18 CREATE GLOBAL TEMPORARY TABLEコマンド

CREATE GLOBAL TEMPORARY TABLEコマンドの構文図

BNF表記法

CREATE GLOBAL TEMPORARY TABLE table
"("  column datatype [DEFAULT expr] [{ NULL | NOT NULL}]
  [,  column datatype [DEFAULT expr] [ {NULL | NOT NULL} ]... ")"
ON COMMIT {DELETE | PRESERVE } ROWS ;

用途

CREATE GLOBAL TEMPORARY TABLEコマンドは、トランザクション固有またはセッション固有となる一時表を作成します。トランザクション固有の一時表では、データが存在するのはトランザクション期間中です。セッション固有の一時表では、データが存在するのはセッション期間です。一時表内のデータはセッション用のプライベート・データです。各セッションは、自身のデータのみを表示および変更できます。トランザクションのロールバックでは、グローバル一時表に対するすべての変更が失われます。

表4-16に、CREATE GLOBAL TEMPORARY TABLEコマンドの引数をリストします。

表4-16 CREATE GLOBAL TEMPORARY TABLEで使用される引数

引数 説明
name オプションの修飾表名。
schema 所有者であるユーザーと同じ名前のスキーマ。省略すると、デフォルトのスキーマ名が使用されます。
column 表の列の名前。
datatype columnのデータ型。副問合せでは使用できません。
DEFAULT 新規列に、新しいデフォルト値expr(式)を指定します。次のいずれかになります。
  • DEFAULT NULLDEFAULT USER(表が作成された際のユーザー名)、DEFAULTリテラル

  • ODBC FUNCTIONS - TIMESTAMPADD、TIMESTAMPDIFF、DATABASE、USER

  • SQL FUNCTIONS - CURRENT_DATE、CURRENT_TIME、CURRRENT_TIMESTAMP、SYSDATE

式の詳細は、1.7「SQL条件の指定」を参照してください。


使用上の注意

一時表をパーティション化したり、索引に編成したり、クラスタ化することはできません。

一時表に、参照整合性(外部キー)制約は指定できません。

次の文は、自動航空機予約スケジューリング・システムで使用する一時表FLIGHT_SCHEDULEを作成します。各クライアントは独自のセッションを持ち、一時スケジュールを格納できます。一時スケジュールは、セッション終了時に削除されます。

CREATE GLOBAL TEMPORARY TABLE flight_schedule (
startdate DATE,
enddate DATE,
cost NUMBER)
ON COMMIT PRESERVE ROWS;

4.3.12 CREATE INDEX

構文

図4-19に、CREATE INDEXコマンドの構文を示します。

図4-19 CREATE INDEXコマンド

CREATE INDEXコマンドの構文図

BNF表記法

CREATE [ UNIQUE ] INDEX [schema .] index ON
[schema .] table
"(" column [ ASC | DESC]
 [, column [ ASC | DESC]]...
 ")"
[ KEY COLUMNS=number]
;

前提条件

索引を付ける表がユーザーのスキーマ内に必要です。データベースにはSYSTEM、またはDBA/DDL権限を持つユーザーとしてログインする必要があります。

用途

索引を表の1つ以上の列上に作成します。

表4-17に、CREATE INDEXコマンドの引数をリストします。

表4-17 CREATE INDEXコマンドで使用される引数

引数 説明
UNIQUE 列または列の組合せを一意キーとして指定します。
schema CREATE INDEXの後にくる場合は、索引を含むスキーマschemaを省略すると、Oracle Database Liteはユーザー自身のスキーマ内で索引を作成します。

ON句の中で使用した場合は、索引を作成する表を含むスキーマが作成されます。

index 作成する索引の名前。複数の索引に同じ列と列順を使用しない場合は、表にいくつでも索引を作成できます。
table 索引が作成される表の名前。スキーマで表を修飾しない場合、Oracle Database Liteは表がユーザー自身のスキーマに含まれていると解釈します。
column 表内の列の名前。索引列のデータ型にはLONGまたはLONG RAWは指定できません。
ASC | DESC DB2との互換性のためにのみ提供されています。索引は常に昇順に作成されます。
KEY COLUMNS = 索引の作成に使用する列数を指定します。この句を使用すると索引のサイズが減るため、大量の列に索引が必要なときに便利です。複数行が、KEY COLUMNSの値で指定された索引キーの列を接頭辞として修飾している場合、問合せの性能に影響する可能性があります。データベースは、一致する行を検索するためにすべての修飾行を参照します。
number KEY COLUMNSの個数を指定する整数。

使用上の注意

チューニングのために、他の索引作成オプションも使用できます。しかし、これらのオプションは、データベースのパフォーマンスを下げる恐れがあるので、必要なときにのみ使用します。詳細は、付録F「索引作成オプション」を参照してください。

CREATE ANY INDEXを使用して別のスキーマに索引を作成できますが、DBA/DDLロールが必要です。

次の例は、EMP表のSAL列に索引を作成します。

CREATE INDEX SAL_INDEX ON EMP(SAL);

関連項目

CONSTRAINT句CREATE TABLEDROP INDEX

4.3.13 CREATE JAVA

構文

図4-20に、CREATE JAVAの構文を示します。

図4-20 CREATE JAVAコマンド

CREATE JAVAコマンドの構文図

BNF表記法

CREATE [OR REPLACE] [AND { RESOLVE | COMPILE } NOFORCE ]  JAVA
{ { SOURCE | RESOURCE } NAMED [schema .] primary_name
    | CLASS [SCHEMA schema .]}

[invoker_rights_clause]
[RESOLVER
"(" "(" match_string [,] { schema_name | - }")"
   ["(" match_string [,] { schema_name | - }")"]...
 ")"]

{ USING  BFILE "(" directory_path , server_file_name ")"
  | AS source_text
 };

前提条件

ユーザー自身のスキーマ内で、Javaソース、クラスまたはリソースを含んだスキーマ・オブジェクトを作成または置換するには、データベースにSYSTEMとして接続するか、DBA/DDL権限が必要です。

用途

Javaソース、クラスまたはリソースを含むスキーマ・オブジェクトを作成します。


注意

Javaストアド・プロシージャおよびJDBCをはじめとするJavaの概念の詳細は、『Oracle Database Lite Java開発者ガイド』を参照してください。

表4-18に、CREATE JAVAコマンドの引数をリストします。

表4-18 CREATE JAVAコマンドで使用される引数

引数 説明
OR REPLACE Javaクラス、ソースまたはリソースを含んだスキーマ・オブジェクトがすでに存在する場合、再作成します。この句は、すでに付与されているオブジェクト権限を変更(削除、再作成または再付与)せずに、既存のオブジェクトの定義を変更するために使用します。

Javaスキーマ・オブジェクトを再定義して、RESOLVEまたはCOMPILEを指定すると、Oracle Database Liteは、これらのパラメータを認識はしますが、無視します。

再定義される関数に対する権限を前もって付与されているユーザーは、引き続きその関数にアクセスできます。ユーザーに再度権限を付与する必要はありません。

RESOLVE | COMPILE Oracle Database Liteは、このパラメータを認識しますが、無視します。Oracleでは、この文が成功したときに作成されるJavaスキーマ・オブジェクトをデータベースで解決するように指定します。
  • クラスに適用されると、別のクラス・スキーマ・オブジェクトに対する参照名の解決が行われます。

  • ソースに適用されると、ソースのコンパイルが行われます。

制限事項: Javaリソースには、この句を指定できません。

NOFORCE Oracle Database Liteは、このパラメータを認識しますが、無視します。Oracleでは、RESOLVE OR COMPILEを指定して解決またはコンパイルが失敗した場合、NO FORCEはこのCREATEコマンドの結果をロールバックします。このオプションを指定していないと、解決またはコンパイルが失敗した場合、Oracleは、何もアクションを実行しません(すなわち、作成されたスキーマ・オブジェクトが残ります)。
CLASS Javaクラス・ファイルをロードします。
RESOURCE Javaリソース・ファイルをロードします。
SOURCE Javaソース・ファイルをロードします。AS source_text句を使用する必要があります。
NAMED Oracle Database Liteは、このパラメータを認識しますが、無視します。Oracleでは、これは、Javaソースまたはリソースに必須です。
  • Javaソースの場合、この句は、ソース・コードが保持されるスキーマ・オブジェクトの名前を指定します。CREATE JAVA SOURCEが成功した場合、ソースで定義された各Javaクラスを保持するためのスキーマ・オブジェクトも作成されます。

  • Javaリソースの場合、この句は、Javaリソースを保持するスキーマ・オブジェクトの名前を指定します。

schemaを指定しない場合、Oracleではユーザー自身のスキーマ内でオブジェクトが作成されます。

制限事項:

  • JavaクラスにNAMEDは指定できません。

  • primary_nameは、データベース・リンクを含むことはできません。

SCHEMA schema Oracle Database Liteは、このパラメータを認識しますが、無視します。Oracleでは、Javaクラスにのみ適用されます。オプション指定のこの句は、Javaファイルを含むオブジェクトが常駐するスキーマを指定します。SCHEMAを指定せず、またNAMED(前述)を指定しないと、Oracleは、ユーザー自身のスキーマ内にオブジェクトを作成します。
invoker_rights_clause Oracle Database Liteは、Oracleとの互換性のためにinvoker_rights_clauseを認識しますが、実行はしません。
RESOLVER Oracle Database Liteは、このパラメータを認識しますが、無視します。Oracleでは、完全修飾Java名のJavaスキーマ・オブジェクトへのマッピングを指定します。
  • match_stringは、完全修飾Java名、そのようなJava名に一致するワイルド・カード、または任意の名前に一致するワイルド・カードのいずれかです。

  • schema_nameは、対応するJavaスキーマ・オブジェクトを検索するためのスキーマを示します。

  • ダッシュ(-)は、schema_nameの代替として、match_stringが有効なJava名に一致したとき、Oracleがスキーマを未解決のままにできることを示します。解決は成功しますが、クラスは、名前をランタイムに使用できません。

このマッピングは、後の解決(暗黙的、またはALTER...RESOLVE文による明示的解決)で使用するために、作成されたスキーマ・オブジェクトの定義とともにこのコマンド内に格納されます。

AS source_text Javaソース・プログラムのテキスト。
USING BFILE クラス・ファイルの形式を識別します。BFILEは、CREATE JAVA CLASSまたはCREATE JAVA RESOURCEによって、バイナリ・ファイルと解釈されます。

使用上の注意

Oracle Database Liteは、Javaクラスをデータベースにロードするとき、依存クラスはロードしません。一般に、Javaクラスをデータベースにロードするには、loadjavaユーティリティを使用してください。loadjavaユーティリティの詳細は、『Oracle Database Lite Java開発者ガイド』を参照してください。

Javaクラスの例

次の文は、スキーマ・オブジェクトを作成し、指定されたJavaクラスを新しく作成されたスキーマ・オブジェクトにロードします。

CREATE JAVA CLASS USING BFILE (bfile_dir, 'Agent.class');

この例は、ディレクトリ・パスbfile_dirを想定しています。これは、既存のJavaクラスAgent.classを含むオペレーティング・システムのディレクトリを指します。この例では、クラスの名前がJavaクラス・スキーマ・オブジェクトの名前を決定します。

Javaソースの例

次の文は、Javaソース・スキーマ・オブジェクトを作成します。

CREATE OR REPLACE JAVA SOURCE AS
/* This is a class Test */
import java.math.*; /* */
public class Test {
public static BigDecimal myfunc(BigDecimal a, BigDecimal b)
{ return a.add(b); }
public static Strin myfunc2(String a, String b)
{ return (a+b); }
};

注意

キーワード「public class」を、最初のpublic class文の前のコメントに使用しないでください。

Javaリソースの例

次の文は、バイナリ・ファイルから、APPTEXTという名前のJavaリソース・スキーマ・オブジェクトを作成します。

CREATE JAVA RESOURCE NAMED "appText"
   USING BFILE ('C:\TEMP', 'textBundle.dat');

注意

Java文を埋め込む場合、SQL*Plus文の文末にセミコロン文字「;」を使用しないでください。セミコロンを行末に置く必要がある場合、「/* */」を使用して空白のコメント行を追加する必要があります。通常のコメント記号「//」は、この状況では機能しません。行末に /* */ を置くと、SQL*PlusはセミコロンをSQL文の終わりと解釈しません。

関連項目

DROP JAVA

4.3.14 CREATE PROCEDURE

構文

図4-21に、CREATE PROCEDUREの構文を示します。

図4-21 CREATE PROCEDUREコマンド

CREATE PROCEDUREコマンドの構文図

BNF表記法

CREATE [OR REPLACE] PROCEDURE [schema .] procedure
["(" argument [ IN | OUT | IN OUT ] datatype
   [, argument [ IN | OUT | IN OUT ] datatype]...
 ")"
]
[invoker_rights_clause] { IS | AS } call_spec;

call_spec::=

図4-22に、call_spec式の構文を示します。

図4-22 CREATE PROCEDUREで使用されるcall_spec式

CREATE PROCEDUREで使用されるcall_specの構文図

図4-22 CREATE PROCEDUREで使用されるcall_spec式

CREATE PROCEDUREで使用されるcall_specの構文図

BNF表記法

LANGUAGE Java_declaration

Java_declaration::=

図4-23に、Java_declaration式の構文を示します。

図4-23 CREATE PROCEDUREで使用されるJava_declaration式

CREATE PROCEDUREで使用されるJava_declarationの構文図

BNF表記法

JAVA NAME . string .

前提条件

ユーザー自身のスキーマ内でプロシージャを作成するには、データベースにSYSTEMとして接続するか、DBA/DDL権限が必要です。

用途

スタンドアロンのストアド・プロシージャのコール仕様を作成します。

「コール仕様」は、SQLからコールできるようにJavaメソッドを宣言します。call specは、コール時にどのJavaメソッドをコールするかをOracle Liteに知らせます。また、Oracle Database Liteに、引数および戻り値に対してどの型変換を行うかも知らせます。

ストアド・プロシージャによって、開発、整合性、セキュリティおよびメモリー割当ての領域で恩恵が得られます。コール方法など、ストアド・プロシージャの詳細は、『Oracle Database Lite Java開発者ガイド』を参照してください。

ストアド・プロシージャとストアド・ファンクションは似ています。ストアド・ファンクションは、コールされた環境内に値を返すのに対し、ストアド・プロシージャは返しません。関数に固有の情報は、「CREATE FUNCTION」を参照してください。

CREATE PROCEDURE文は、スタンドアロンのスキーマ・オブジェクトとしてプロシージャを作成します。スタンドアロン・プロシージャの削除の詳細は、「DROP PROCEDURE」を参照してください。

表4-19に、CREATE PROCEDUREコマンドの引数をリストします。

表4-19 CREATE PROCEDUREコマンドで使用される引数

引数 説明
OR REPLACE プロシージャがすでに存在する場合、再作成します。この句は、すでに付与されているオブジェクト権限を変更(削除、再作成または再付与)せずに、既存のプロシージャの定義を変更するために使用します。

このパッケージに依存するファンクション索引があれば、Oracle Database Liteは、索引にDISABLEDのマークを付けます。

schema プロシージャを含むスキーマ。schemaを指定しないと、Oracle Database Liteはユーザーのカレント・スキーマにプロシージャを作成します。
procedure 作成するプロシージャの名前。
argument プロシージャの引数の名前。プロシージャが引数を受け入れない場合、プロシージャ名の後のカッコを省略できます。
IN プロシージャをコールするときに、引数の値を指定する必要があることを示します。
OUT 実行後、プロシージャがこの引数の値をコール側の環境に渡すことを示します。
IN OUT プロシージャをコールするときに引数の値を指定する必要があること、および実行後、プロシージャがこの引数の値をコール側の環境に渡すことを示します。

INOUTおよびIN OUTを省略した場合、引数のデフォルトは、INです。

このパラメータまたは別のパラメータに行われた変更は、同じ変数が両方に渡された場合、両方の名前を通して即座に参照できます。

プロシージャが未処理例外によって終了した場合、このパラメータに対して行われた割当ては、コール側の変数内で参照できます。

このような効果は、特定のコールで発生することもあれば、発生しないこともあります。これらの影響が問題ではない場合にのみ、NOCOPYを使用します。

datatype 引数のデータ型。引数は、Oracle Database Lite SQLがサポートするどのデータ型でも取ることができます。

データ型で長さ、精度またはスケールは指定できません。たとえば、VARCHAR2(10)は無効で、VARCHAR2は有効です。Oracle Database Liteは、引数の長さ、精度またはスケールを、プロシージャのコール側の環境から導出します。

invoker_rights_clause Oracle Database Liteは、Oracleとの互換性のためにinvoker_rights_clauseを認識しますが、実行はしません。
IS SQL識別子をJavaメソッドに対応付けます。
AS SQL識別子をJavaメソッドに対応付けます。
call_spec Javaメソッド名、パラメータ型および戻り型を、対応するSQL要素にマップします。
LANGUAGE call_specの言語を指定します。Oracleでは、CまたはJavaが使用できます。Oracle Database Liteでは、Javaのみが使用できます。
Java_declaration Javaクラス内のメソッド名を識別します。
JAVA NAME Javaメソッド名。
string メソッドのJava実装を識別します。詳細は、『Oracle Database Lite Java開発者ガイド』を参照してください。

使用上の注意

Oracle Database Liteは、<invoker_rights_clause>を認識しますが、実行はしません。Oracle Database Liteは常に、AUTHIDcurrent_userを使用します。

次の例は、Javaプロシージャを作成してコンパイルし、それをOracle Database Liteに対してテストします。

  1. 次のJavaプログラムを作成してコンパイルし、その名前をEMPTrigg.javaにします。

    import java.sql.*;
    
    public class EMPTrigg {
       public static final String goodGuy = "Oleg";
    
       public static void NameUpdate(String oldName, String[] newName) {
          if (oldName.equals(goodGuy))
             newName[0] = oldName;
       }
    
       public static void SalaryUpdate(String name, int oldSalary,
                                 int newSalary[])
       {
          if (name.equals(goodGuy))
             newSalary[0] = Math.max(oldSalary, newSalary[0])*10;
       }
    
       public static void AfterDelete(Connection conn, String name,
                   int salary) {
          if (name.equals(goodGuy))
             try {
                Statement stmt = conn.createStatement();
                stmt.executeUpdate(
                   "insert into employee values('" + name + "', " +
                                        salary + ")");
                stmt.close();
             } catch(SQLException e) {}
       }
    }
    
    
  2. NAMESALARY列を持ったEMPLOYEE表を作成します。

    CREATE TABLE EMPLOYEE (NAME VARCHAR(32), SALARY INT);
    
    
  3. 次の文を入力して、EMPLOYEE表に値を挿入します。

    INSERT INTO EMPLOYEE VALUES ('Alice', 100);
    
    INSERT INTO EMPLOYEE VALUES ('Bob', 100);
    
    INSERT INTO EMPLOYEE VALUES ('Oleg', 100);
    
    
  4. EMPTriggクラスをOracle Database Liteにロードします。一度ロードすると、EMPTriggクラス・メソッドは、Oracle Database Lite内のストアド・プロシージャになります。

    CREATE JAVA CLASS USING BFILE ('c:\', 'EMPTrigg.class');
    
    
  5. CREATE PROCEDURE文を使用してSQLがEMPTriggクラス内のメソッドをコールできるようにします。

    CREATE PROCEDURE name_update(
    old_name in varchar2, new_name in out varchar2)
    is language java name
    'EMPTrigg.NameUpdate (java.lang.String, java.lang.String[])';
    /
    
     CREATE PROCEDURE salary_update(
     ename varchar2, old_salary int, new_salary in out int)
     as language java name
     'EMPTrigg.SalaryUpdate (java.lang.String, int, int[])';
     /
    
     CREATE PROCEDURE after_delete(
     ename varchar2, salary int)
     as language java name
     'EMPTrigg.AfterDelete (java.sql.Connection, java.lang.String, int)';
     /
    
    
  6. 各ストアド・プロシージャのトリガーを作成します。

    CREATE TRIGGER NU BEFORE UPDATE OF NAME ON EMPLOYEE FOR EACH ROW
    name_update (old.name, new.name);
    /
    
    CREATE TRIGGER SU BEFORE UPDATE OF SALARY ON EMPLOYEE FOR EACH ROW
    salary_update (name, old.salary, new.salary);
    /
    
    CREATE TRIGGER AD AFTER DELETE ON EMPLOYEE FOR EACH ROW
    after_delete (name, salary);
    /
    
    
    
  7. EMPLOYEE表からすべての列を選択します。

    SELECT * FROM EMPLOYEE;
    
    

    次の結果を返します。

    NAME                                SALARY
    -------------------------------- ---------
    Alice                                  100
    Bob                                    100
    Oleg                                   100
    
    

関連項目

DROP PROCEDURE

4.3.15 CREATE SCHEMA

構文

図4-24に、CREATE SCHEMAコマンドの構文を示します。

図4-24 CREATE SCHEMAコマンド

CREATE SCHEMAコマンドの構文図

BNF表記法

CREATE SCHEMA schema . CREATE TABLE command [ CREATE TABLE command]... ;

前提条件

CREATE SCHEMA文に、CREATE TABLECREATE VIEWおよびGRANT文を含めることができます。CREATE SCHEMA文を発行するには、データベースにSYSTEMとして、あるいはDBA/DDLまたはADMIN権限を持つユーザーとしてログインする必要があります。

用途

スキーマまたは表、索引およびビューの所有者を作成します。CREATE SCHEMAを使用して、シングル・トランザクション内で複数の表およびビューを作成することもできます。

表4-20に、CREATE SCHEMAコマンドの引数をリストします。

表4-20 CREATE SCHEMAコマンドで使用される引数

引数 説明
schema スキーマの名前で、最大128文字の文字列。各ユーザー名は、同じ名前のデフォルトのスキーマを持つため、スキーマ名は、どのユーザー名とも異なる必要があります。ユーザー名と同じ名前のスキーマを作成すると、Oracle Database Liteは、エラーを返します。詳細は、「CREATE USER」を参照してください。
CREATE TABLE CREATE SCHEMA文の一部として発行されるCREATE TABLE文。
command CREATE TABLEまたはCREATE VIEWコマンドの引数およびキーワードがすべて含まれています。

使用上の注意

例1

HOTEL_OPERATIONと呼ばれるサンプル・スキーマを作成するには、次を使用します。

CREATE SCHEMA HOTEL_OPERATION;

例2

HOTEL_OPERATIONスキーマを表HOTEL_DIRおよびビューLARGE_HOTELとともに作成するには、次を使用します。

CREATE SCHEMA HOTEL_OPERATION
CREATE TABLE HOTEL_DIR(
HOTELNAME CHAR(40) NOT NULL,
RATING INTEGER,
ROOMRATE FLOAT,
LOCATION CHAR(20) NOT NULL,
CAPACITY INTEGER);

ODBC 2.0

CREATE SCHEMAコマンドはODBC SQL構文の一部ではありませんが、ODBCはこのコマンドをそのままデータベースに渡します。

関連項目

GRANTCREATE SEQUENCECREATE VIEW

4.3.16 CREATE SEQUENCE

構文

図4-25に、CREATE SEQUENCEの構文を示します。

図4-25 CREATE SEQUENCEコマンド

CREATE SEQUENCEコマンドの構文図

BNF表記法

CREATE SEQUENCE [schema .] sequence
{ { INCREMENT BY } integer
 | { MAXVALUE integer | NOMAXVALUE }
 | { MINVALUE integer | NOMINVALUE }
 | { START WITH } integer
 }
[{ { INCREMENT BY } integer
 | { MAXVALUE integer | NOMAXVALUE }
 | { MINVALUE integer | NOMINVALUE }
 | { START WITH } integer
 }]...
;

前提条件

なし。

用途

順序を作成します。

表4-21に、CREATE SEQUENCEコマンドの引数をリストします。

表4-21 CREATE SEQUENCEコマンドで使用される引数

引数 説明
schema 順序を含むスキーマの名前。schemaを省略すると、Oracle Database Liteはユーザー自身のスキーマ内で順序を作成します。
sequence 作成される順序の名前。
INCREMENT BY 順序番号間の間隔を指定します。0以外の任意の正の整数または負の整数にできます。負の整数の場合、順序は降順になります。正の整数を指定すると、順序は昇順になります。INCREMENT BY句を指定しない場合、デフォルトは1です。
START WITH 生成される最初の順序番号を指定します。このオプションは、昇順を最小値(デフォルト)より大きい値で開始する場合、または降順を最大値(デフォルト)より小さい値で開始するときに使用します。
MAXVALUE 順序で生成できる最大値を指定します。この整数値は9桁以下になります。MAXVALUEMINVALUEより大きくする必要があります。
NOMAXVALUE 昇順に対しては2147483647、降順に対しては-1の最大値を指定します。
MINVALUE 順序で生成できる最小値を指定します。この整数値は9桁以下になります。MINVALUEMAXVALUEより小さくする必要があります。
NOMINVALUE 昇順に対しては1、降順に対しては-2147483647の最小値を指定します。

使用上の注意

Oracle Database Liteは、NEXTVAL関数がアクセスされたときに、NEXTVAL番号をコミットします。ただし、Oracleと異なり、Oracle Database Liteは、順序を自動的にはコミットしません。したがって、Oracle Database Liteでは、順序をロールバックできます。ROLLBACKコマンドを使用しているとき順序をメンテナンスするには、順序を作成した後、それをコミットする必要があります。

次の文は、順序ESEQを作成します。

CREATE SEQUENCE ESEQ INCREMENT BY 10;

最初のESEQ.NEXTVALへの参照では、1が返されます。2回目では、11が返されます。その後の参照では、それぞれ、前の戻り値より10大きい値が返されます。

ODBC 2.0

CREATE SEQUENCEコマンドはODBC SQL構文の一部ではありませんが、ODBCはこのコマンドをそのままデータベースに渡します。

関連項目

ALTER SEQUENCEDROP SEQUENCE

4.3.17 CREATE SYNONYM

構文

図4-26に、CREATE SYNONYMの構文を示します。

図4-26 CREATE SYNONYMコマンド

CREATE SYNONYMコマンドの構文図

BNF表記法

CREATE [PUBLIC] SYNONYM [schema .] synonym FOR [schema .] object ;

前提条件

なし。

用途

パブリックまたはプライベートSQLシノニムを作成します。

表4-22に、CREATE SYNONYMコマンドの引数をリストします。

表4-22 CREATE SYNONYMコマンドで使用される引数

引数 説明
PUBLIC パブリック・シノニムを作成します。パブリック・シノニムは、すべてのユーザーでアクセスできます。このオプションを省略すると、シノニムはプライベートとなり、そのスキーマ内でしかアクセスできなくなります。
schema シノニムを含むスキーマ。schemaを省略すると、Oracle Database Liteはユーザー自身のスキーマ内でシノニムを作成します。PUBLICを指定している場合、schemaは指定できません。
synonym 作成されるシノニムの名前。
FOR object シノニムが作成されるオブジェクトを指定します。schemaのあるオブジェクトを修飾しない場合、Oracle Database Liteではユーザー自身のスキーマにオブジェクトが含まれていると解釈されます。オブジェクトは表、ビュー、順序または別のシノニムです。オブジェクトは、現時点で存在している必要はなく、またオブジェクトへのアクセス権限も必要ありません。

使用上の注意

プライベート・シノニム名は、そのスキーマ内の他のすべてのオブジェクトから区別できる必要があります。

シノニムは、INSERTSELECTUPDATEおよびDELETE文でのみ使用できます。DROPではシノニムを使用できません。

スキーマSCOTT内のPRODUCT表のシノニムPRODを定義するには、次の文を発行します。

CREATE SYNONYM PROD FOR SCOTT.PRODUCT;

関連項目

CREATE TABLECREATE VIEWCREATE SEQUENCEDROP SYNONYM

4.3.18 CREATE TABLE

構文

図4-27に、CREATE TABLEコマンドの構文を示します。

図4-27 CREATE TABLEコマンド

CREATE TABLEコマンドの構文図

BNF表記法

CREATE TABLE [schema .] table
column_list [column_list ]...
[AS subquery] ;

column_list::=

図4-28に、column_list式の構文を示します。

図4-28 column_list式

column_list式の構文図

BNF表記法

"("
column datatype [DEFAULT expr|AUTO INCREMENT][column_constraint] [column_constraint]...
[table_constraint]
[, column datatype [DEFAULT expr|AUTO INCREMENT][column_constraint] [column_constraint]...
[table_constraint]]...
")"

前提条件

ユーザーのスキーマまたは別のスキーマ内に表を作成するには、データベースにSYSTEMとして、またはDBA/DDL権限を持つユーザーとしてログインする必要があります。

用途

データベースを作成します。

CREATE TABLEコマンドは、指定された副問合せの結果に基づいてデータベースを作成し移入します。列のデータ型は、副問合せの結果セットから導出されます。詳細は、「使用上の注意」を参照してください。

表4-23に、CREATE TABLEコマンドの引数をリストします。

表4-23 CREATE TABLEコマンドで使用される引数

引数 説明
schema 所有者であるユーザーと同じ名前のスキーマ。省略すると、デフォルトのスキーマ名が使用されます。
table データベースの表の名前。表名にはピリオド「.」を含めることはできません。また、アンダースコア「_」の付いた文字で始めることもできません。
column 表の列の名前。
datatype columnのデータ型。副問合せでは使用できません。
DEFAULT DEFAULT句は、後続のINSERT文が列の値を省略した場合、ユーザーがその列に値を割り当てられるようにします。式のデータ型は、列のデータ型に一致する必要があります。この式を含めるため、列サイズを増やす必要があります。

DEFAULT式は、列参照を返さない関数、またはネストされた関数を呼び出さないSQL関数を含めることができます。

DEFAULTの共通の値に関する制限事項

DEFAULT式は、Javaストアド・プロシージャ、他の列、またはLEVELPRIORおよびROWNUMという疑似列への参照を含めることはできません。

DEFAULT式には副問合せを含めることはできません。

式の詳細は、第1章「SQLの使用方法」1.8「式の指定」を参照してください。

auto increment 列を自動増分列に設定します。

自動増分列のデータ型は、INTEGER型である必要があります。

自動増分列の値は、自動的に増分されて挿入されるため、ユーザーは値を入力する必要はありません。この値は、表内で一意であり、NULL値は含みません。また、必要であれば主キー列として使用できます。この列の値は、データベース・システムによって決定され、ユーザーが増分量、初期値または最大値を管理する方法はありません。

自動増分列の値は0から始まり、正の最大値は4バイト整数の最大値(2147483647)です。自動増分値が最大値になると、次の自動増分値は4バイト整数の最小値(-2147483648)から始まります。

column_constraint 列整合性制約を追加します。詳細は、「CONSTRAINT句」を参照してください。
table_constraint 表整合性制約を追加します。詳細は、「CONSTRAINT句」を参照してください。
AS subquery SELECT文。

使用上の注意

CREATE ANY TABLEを使用して別のスキーマに表を作成できますが、DBA/DDLロールが必要です。各表は、最大1000列を持つことができ、複数の主キー制約を持つことはできません。

column_listが省略された場合は、次のようになります。

column_listが省略された場合は、次のようになります。

副問合せでORDER BY句が使用された場合、データはその順序で表に挿入されます。これは通常、列による順序に従ったデータのクラスタとなりますが、保証はされません。

自動増分列を持つ表に値を挿入する場合、自動増分列の値がデータベース・システムによって自動的に生成されるため、この列に対する挿入操作はできません。自動増分列を持つ表に行を挿入する場合、挿入操作を行うための、自動増分列を含まない列リストをユーザーが指定する必要があります。たとえば、次のような表を定義したとします。

CREATE TABLE t1 (c1 INT AUTO INCREMENT, c2 INT, c3 INT);

表t1に値を挿入するには、次のコマンドを使用します。

INSERT INTO T1(c2,c3) values (123, 456);

ユーザーが列リストを指定しない場合は、エラー・メッセージが表示されます。

挿入文に列リストを使用しないで済むよう、INSERTコマンドを発行する前に自動増分列を非表示にできます。たとえば、次のALTERコマンドを発行したとします。

ALTER TABLE T1 HIDE C1;

次に、表t1に値を挿入する場合、次のように挿入文から列リストを省略できます。

INSERT INTO T1 VALUES (123,456);

例1

次の文は、2つの列があるHOTEL_DIR表を作成します。2つの列とは、主キーであるHOTEL_NAMEと、NULLにできないCAPACITY(デフォルト値は0)です。

CREATE TABLE HOTEL_DIR (HOTEL NAME CHAR(40) PRIMARY KEY, CAPACITY INTEGER DEFAULT 0 NOT NULL)

例2

次の文は、表HOTEL_RESTAURANTを作成します。

CREATE TABLE HOTEL_RESTAURANT(REST_NAME CHAR(50) UNIQUE, HOTEL_NAME CHAR(40) REFERENCES HOTEL_DIR, RATING FLOAT DEFAULT NULL)

列には、次のものが含まれます。

表には、次の整合性制約があります。

関連項目

CONSTRAINT句DROP TABLEトランザクション制御コマンドSELECT

4.3.19 CREATE TRIGGER

構文

図4-29に、CREATE TRIGGERの構文を示します。

図4-29 CREATE TRIGGERコマンド

CREATE TRIGGERコマンドの構文図

BNF表記法

CREATE [OR REPLACE] TRIGGER [schema .] trigger
{ BEFORE | AFTER }
{ DELETE | INSERT | UPDATE [OF column [, column]...] }
[OR { DELETE | INSERT | UPDATE [OF col_list [, col_list]...] }]...
ON { [schema .] table
FOR EACH ROW proc_name ["("arg_list")"] ["("arg_list")"]...
;

前提条件

なし。

用途

データベース・トリガーを作成し、使用可能にします。

表4-24に、CREATE TRIGGERコマンドの引数をリストします。

表4-24 CREATE TRIGGERコマンドで使用される引数

引数 説明
OR REPLACE トリガーがすでに存在する場合、再作成します。存在しない場合、トリガーを作成します。すでに付与されているオブジェクト権限を変更(削除、再作成または再付与)せずに、既存のトリガーの定義を変更するために使用します。
schema トリガーを含むスキーマ。スキーマを指定しない場合、Oracle Database Liteはユーザーのスキーマにトリガーを作成します。
table データベース内の表の名前。
trigger 作成されるトリガーの名前。
BEFORE トリガーを実行する文を実行する前に、トリガーが起動されるように指定します。行トリガーでは、関連のある行が変更される前に別々に起動されます。
AFTER トリガーを実行する文を実行した後で、トリガーが起動されるように指定します。行トリガーでは、関連のある行が変更された後に別々に起動されます。
DELETE DELETE文によって表から行が削除されるたびに、トリガーが起動されるように指定します。
INSERT INSERT文によって表に行が追加されるたびに、トリガーが起動されるように指定します。
UPDATE OF UPDATE文によってOF句に指定された列の1つにある値が変更されるたびに、トリガーが起動されるように指定します。OF句を省略すると、Oracle Database Liteは、UPDATE文によって表の列の値が変更されるたびに、トリガーを起動します。
col_list 更新された際にトリガーが起動される原因となる列。
ON トリガーが作成される表のスキーマおよび名前を指定します。省略した場合、Oracle Database Liteでは表がユーザーのスキーマ内にあると解釈されます。
FOR EACH ROW このトリガーを行トリガーとして指定します。Oracle Database Liteは、トリガー文によって影響を受ける各行に1回、行トリガーを起動します。この句を省略したトリガーは文トリガーです。Oracle Database Liteでは、オプションのトリガー制約が一致すると、トリガー文が発行されるときに1回のみ文トリガーを起動します。
proc_name Oracle Database Liteがトリガーを起動するために実行するJavaメソッド。
arg_list Javaメソッドに渡される引数。

次の例は、トリガーの作成とテストについての手順を示しています。

  1. 次のプログラムを作成し、それをTriggerExample.javaと命名します。

    import java.lang.*;
    import java.sql.*;
    class TriggerExample {
            public void EMP_SAL(Connection conn, int new_sal)
            {
                System.out.println("new salary is :"+new_sal);
            }
        }
    
    
  2. TriggerExample.javaをEMP表に連結します。

    ALTER TABLE EMP ATTACH JAVA SOURCE "TriggerExample" in '.';
    
    
  3. Javaトリガーを作成します。

    CREATE TRIGGER SAL_CHECK BEFORE UPDATE OF SAL ON EMP FOR EACH ROW
    EMP_SAL(NEW.SAL);
     .
     /
    
    
  4. Javaトリガーを使用して、EMP表を更新します。

    update emp set sal=sal+5000 where sal=70000;
    
    

    次の結果を返します。

    new salary is:75000
    
    1 row updated
    

関連項目

ALTER TRIGGERALTER VIEWCREATE VIEWDROP TRIGGER

4.3.20 CREATE USER

構文

図4-30に、CREATE USERの構文を示します。

図4-30 CREATE USERコマンド

CREATE USERコマンドの構文図

BNF表記法

CREATE USER user IDENTIFIED BY password ;

前提条件

ユーザーのスキーマまたは別のスキーマ内にユーザーを作成するには、データベースにSYSTEMとして、またはDBA/DDL権限を持つユーザーとしてログインする必要があります。

用途

権限を持たないデータベース・ユーザーを作成します。

表4-25に、CREATE USERコマンドの引数をリストします。

表4-25 CREATE USERコマンドで使用される引数

引数 説明
user 作成されるユーザー。ここで、userは、文字で始まる1〜30バイトの一意の文字列です。
IDENTIFIED BY Oracle Database Liteがユーザー・アクセスを許可する方法を示します。
password 最大128文字の名前の、ユーザーの新しいパスワードを指定します。パスワードでは、引用符は使用されず、大/小文字は区別されません。

使用上の注意

Oracle Database Liteでは、CREATE USERコマンドを使用してマルチ・ユーザーを作成できます。ユーザーはスキーマではありません。ユーザーを作成するとき、Oracle Database Liteは、同じ名前のスキーマを作成し、それを自動的にその新規ユーザーにデフォルトのスキーマとして割り当てます。新規ユーザーの名前は、ALL_USERSビューに表示されます。新しいユーザーのデフォルトのスキーマは、POL_SCHEMATAビューに表示されます。

Oracle Liteデータベースにユーザーとして接続すると、ユーザー名がそのセッションのデフォルトのスキーマになります。ユーザー名と一致するスキーマがない場合、Oracle Liteは接続を拒否します。デフォルトのスキーマ内のデータベース・オブジェクトは、スキーマ名を接頭辞として付けずにアクセスできます。

適切な特権を持つユーザーは、CREATE SCHEMAコマンドを使用して、別のスキーマを作成できますが、デフォルトのスキーマのみがデータベースに接続できます。スキーマは、それを作成したユーザーが所有し、そのオブジェクトにアクセスするには、スキーマ名の接頭辞が必要です。

CREATEDBユーティリティまたはCREATE DATABASEコマンドを使用してデータベースを作成するとき、Oracle Liteは、パスワードとしてMANAGERを使用してSYSTEMと呼ばれる特別のユーザーを作成します。このユーザーは、すべてのデータベース権限を持ちます。必要になって自分のユーザー名を確立するまで、SYSTEMをデフォルトのユーザー名として使用できます。

暗号化されたデータベースの場合、すべてのユーザー名とパスワードは、mydbname.opwというファイルに書き込まれます。これにより、各ユーザーは、.odbファイルにアクセスする前に、ユーザー自身のパスワードを鍵として使用して.opwファイルをアンロックできます。データベースをコピーまたはバックアップする場合、.opwファイルと.plgファイルを含める必要があります。

Oracle Liteでは、SYSTEM以外のユーザーは、自分が所有しないスキーマ内でデータにアクセスしたり、操作を実行することはできません。ユーザーは、次の条件のいずれかが満たされた場合にのみ、別のユーザーのスキーマ内でデータにアクセスしたり、操作を実行することができます。

CREATE USER SCOTT IDENTIFIED BY TIGER;

関連項目

ALTER USERGRANT

4.3.21 CREATE VIEW

構文

図4-31に、CREATE VIEWの構文を示します。

図4-31 CREATE VIEWコマンド

CREATE VIEWコマンドの構文図

BNF表記法

CREATE [OR REPLACE] [[NO] FORCE] VIEW [schema .] view["("alias [, alias]...")"] AS subquery ;

前提条件

データベースにはSYSTEM、またはDBA/DDL権限を持つユーザーとしてログインする必要があります。

FORCEでは、ビューの実表または参照オブジェクト型が存在するかどうか、またはビューを含むスキーマの所有者がその実表および参照オブジェクト型に対する権限を持っているかどうかにかかわらず、ビューが作成されます。これらの条件が満たされていないと、ビューに対しSELECT、INSERT、UPDATEまたはDELETE文は発行できません。

NO FORCEでは、実表が存在し、ビューを含むスキーマの所有者が実表に対する権限を持っている場合にのみ、ビューが作成されます。これがデフォルトです。

用途

ビューを作成または置換します。

表4-26に、CREATE VIEWコマンドの引数をリストします。

表4-26 CREATE VIEWコマンドで使用される引数

引数 説明
OR REPLACE ビューがすでに存在する場合、再作成します。すでに付与されているオブジェクト権限を変更(削除、再作成または再付与)せずに、既存のビューの定義を変更するために使用します。
FORCE ビューの実表または参照オブジェクト型が存在するか、またはビューを含むスキーマの所有者がその実表および参照オブジェクト型に対する権限を持っているかにかかわらずビューを作成する場合は、FORCEを指定します。これらの条件が満たされていないと、ビューに対しSELECT、INSERT、UPDATEまたはDELETE文は発行できません。
NO FORCE 実表が存在し、ビューを含むスキーマの所有者が実表に対する権限を持っているときにのみビューを作成する場合は、NO FORCEを指定します。これがデフォルトのオプションです。
schema ビューを含むスキーマ。schemaを省略すると、Oracle Liteはユーザー自身のスキーマ内でビューを作成します。
view ビューの名前。
alias ビューの問合せに選択された式の名前を指定します。別名の数は、ビューで選択された式の数と一致する必要があります。別名は、スキーマ・オブジェクトに名前を付ける際のOracle Liteの規則に従う必要があります。それぞれのaliasはビューの中で他と重複しないようにする必要があります。
AS subquery ビューが基盤とする表の列および行を識別します。ビューの問合せは、ORDER BYまたはFOR UPDATE句のないSELECT文はどれでも可能です。選択リストには、最大254個の式を入れられます。

使用上の注意

次の場合、ビューは更新可能です。

CREATE ANY VIEWを使用して別のスキーマにビューを作成できますが、DBA/DDLロールが必要です。

CREATE VIEWのFORCEオプションは、Oracle Database Liteでは動作が異なります。これには、2つのケースがあります。

  1. CREATE FORCE VIEWを使用して実表なしで作成されたビューにコマンドを発行する場合、最初にALTER VIEW view_name COMPILEコマンドを発行する必要があります。発行されていないとエラー・メッセージが発生します。

  2. 有効な実表を使用して作成されたCREATE FORCE VIEWとCREATE VIEWでは、相違点はありません。

次の例は、EMP表内の各行の名前、仕事および給与を表示するEMP_SALという名前のビューを作成します。

CREATE VIEW EMP_SAL (Name, Job, Salary) AS SELECT ENAME, JOB, SAL FROM EMP;

SELECT * FROM EMP_SAL;

次の結果を返します。

NAME       JOB          SALARY
---------- --------- ---------
KING       PRESIDENT      5000
BLAKE      MANAGER        2850
CLARK      MANAGER        2450
JONES      MANAGER        2975
MARTIN     SALESMAN       1250
ALLEN      SALESMAN       1600
TURNER     SALESMAN       1500
JAMES      CLERK           950
WARD       SALESMAN       1250
FORD       ANALYST        3000
SMITH      CLERK           800
SCOTT      ANALYST        3000
ADAMS      CLERK          1100
MILLER     CLERK          1300

14 rows selected.

ODBC 2.0

CREATE VIEWのODBC SQL構文はOR REPLACE引数をサポートしませんが、ODBCはこのコマンドをそのままデータベースに渡します。

ビューでのデータ編集

大部分のODBCベースのツールでは、ビューに対する更新を行うために主キーが必要とされます。Oracle Liteは、ビューの主キーを記録しないため、WHERE句を使用して1つ以上のターゲット行を指定し、ビューの更新や削除を実行するSQLコマンドを発行する必要があります。

関連項目

DROP SEQUENCECREATE TABLEDROP VIEW

4.3.22 CURRVALおよびNEXTVAL疑似列

用途

順序とは、一意の順序番号を生成できるスキーマ・オブジェクトです。これらの値は、主キーおよび一意キーに最もよく使用されます。CURRVALおよびNEXTVAL疑似列を使用して、SQL文内の順序番号を参照できます。

前提条件

順序オブジェクトが必要です。

使用上の注意

CURRVALおよびNEXTVALを、次のように順序名で修飾する必要があります。

sequence.CURRVAL
sequence.NEXTVAL

別のユーザーのスキーマに含まれる順序の現在値または次の値を参照するには、順序が含まれるスキーマで順序を修飾する必要があります。

schema.sequence.CURRVAL
schema.sequence.NEXTVAL

CURRVALおよびNEXTVALは、次の要素で使用できます。

CURRVALおよびNEXTVALを使用できないのは次の要素です。

また、CURRVALまたはNEXTVALを使用した単一SQL文では、参照されたLONG列、更新された表およびロックされた表はすべて、同じデータベース上に置く必要があります。

順序を作成するときに、初期値および値間の増分値を定義できます。最初のNEXTVALへの参照では、順序の初期値が返されます。その後のNEXTVALへの参照では、定義された増分値に従って順序番号が増やされ、新しい値が返されます。CURRVALへの参照では、常に順序の現在値が返されます。この値は、NEXTVALへの最後の参照で返された値です。セッションで順序に対してCURRVALを使用する前に、まずNEXTVALで順序を初期化します。単一SQL文内では、Oracle Database Liteにより各行について1回のみ順序が増やされます。ある順序のNEXTVALへの参照が、文内に複数含まれる場合、Oracleで順序が1回増やされ、NEXTVALのすべての出現に同じ値が返されます。CURRVALおよびNEXTVALの両方への参照が文内に含まれる場合、Oracleで順序が増やされ、CURRVALNEXTVALの文内での順序に関係なく、両方に同じ値が返されます。1つの順序には複数のユーザーが同時にアクセスでき、待機もロックも発生しません。

例1

次の例では、サンプル・スキーマhrの従業員順序の現在値を選択します。

SELECT employees_seq.currval
    FROM DUAL;

例2

次の例では、従業員順序を増やし、その順序番号をサンプル表hr.employeesに挿入された新規従業員に対して使用します。

INSERT INTO employees
   VALUES (employees_seq.nextval, 'John', 'Doe', 'jdoe',
   '555-1212', TO_DATE(SYSDATE), 'PU_CLERK', 2500, null, null,
   30);

例3

次の例では、既存の注文の次の注文番号で、新規注文をマスター注文表に追加します。その後、この番号で、受注明細を受注明細表に追加します。

INSERT INTO orders (order_id, order_date, customer_id)
   VALUES (orders_seq.nextval, TO_DATE(SYSDATE), 106);

INSERT INTO order_items (order_id, line_item_id, product_id)
   VALUES (orders_seq.currval, 1, 2359);

INSERT INTO order_items (order_id, line_item_id, product_id)
   VALUES (orders_seq.currval, 2, 3290);

INSERT INTO order_items (order_id, line_item_id, product_id)
   VALUES (orders_seq.currval, 3, 2381);

関連項目

LEVEL疑似列ROWID疑似列ROWNUM疑似列

4.3.23 DELETE

構文

図4-32に、DELETEの構文を示します。

図4-32 DELETEコマンド

DELETEコマンドの構文図

BNF表記法

DELETE FROM [schema .] {table|view}[WHERE condition] ;

前提条件

ユーザーのスキーマ内の表またはビューからのみ行を削除できます。

用途

またはビューの実表から行を削除します。

表4-27に、DELETEコマンドの引数をリストします。

表4-27 DELETEコマンドで使用される引数

引数 説明
schema 表またはビューを含むスキーマ。schemaを省略すると、Oracle Liteは、表またはビューがユーザー自身のスキーマ内にあると解釈します。
table 行を削除する表の名前。
view ビューの名前。viewを指定すると、Oracle Liteではビューのベースから行が削除されます。
WHERE condition condition引数に指定された条件を満たす行しか削除されません。有効な条件の作成の詳細は、1.7「SQL条件の指定」を参照してください。

使用上の注意

WHERE句が指定されていない場合、表の行がすべて削除されます。

位置付けDELETEでは、カーソルを更新可能にしてください。

DELETE FROM PRICE WHERE MINPRICE < 2.4;

ODBC 2.0

DELETEのODBC SQL構文は、SQLと同じです。さらに、ODBC構文はCURRENT OF cursor_nameキーワードと引数を含みます。これらは、次に示すように、DELETE操作が実行されるカーソル位置を指定するためのWHERE句内で使用されます。

WHERE CURRENT OF cursor_name

関連項目

UPDATE

4.3.24 DROP句

構文

図4-33に、DROP句の構文を示します。

図4-33 DROP句

DROP句の構文図

BNF表記法

DROP
{PRIMARY KEY
 | [COLUMN] column
 | UNIQUE "("column")" [, "("column")"]...
 |CONSTRAINT constraint }
[ CASCADE ]  ;

前提条件

DROP句は、ALTER TABLE文内にのみ使用されます。整合性制約を削除するには、データベースにSYSTEMとして、またはDBA/DDL権限を持つユーザーとしてログインする必要があります。

用途

整合性制約をデータベースから削除します。

表4-28に、DROP句の引数をリストします。

表4-28 DROP句で使用される引数

引数 説明
PRIMARY KEY 表の主キー制約を削除します。
UNIQUE 指定の列から一意制約を削除します。
COLUMN 表から列を削除します。
column 列制約が削除される列、またはDROP COLUMNの場合は、表から削除される列を指定します。
CONSTRAINT CONSTRAINTという名前の整合性制約を削除します。詳細は、「CONSTRAINT句」を参照してください。
constraint 削除される整合性制約の名前。
RESTRICT 削除される制約に依存している整合性制約がある場合、DROPコマンドは失敗します。
CASCADE CONSTRAINT句内で指定された制約に依存するその他の整合性制約をすべて削除します。

ALTER TABLE EMP DROP COLUMN COMM;

関連項目

ALTER TABLECONSTRAINT句

4.3.25 DROP FUNCTION

構文

図4-34に、DROP FUNCTIONの構文を示します。

図4-34 DROP FUNCTION

DROP FUNCTIONの構文図

BNF表記法

DROP FUNCTION [schema .] function_name ;

前提条件

関数を削除するには、次の要件の1つを満たしている必要があります。

用途

スタンドアロンのストアド・ファンクションをデータベースから削除します。関数作成の詳細は、「CREATE FUNCTION」を参照してください。

表4-29に、DROP FUNCTIONの引数をリストします。

表4-29 DROP FUNCTIONで使用される引数

引数 説明
schema 関数を含むスキーマ。schemaを省略すると、Oracle Liteは、関数がユーザー自身のスキーマ内にあると解釈します。
function_name 削除する関数の名前。

Oracle Liteは、削除された関数に依存している、またはその関数をコールしているローカル・オブジェクトをすべて無効にします。その後、これらのオブジェクトの1つを参照すると、Oracle Liteは、そのオブジェクトを再コンパイルしようとし、削除された関数が再作成されていないと、エラーを返します。


次の文は、PAY_SALARY関数を削除します。この関数は、CREATE FUNCTIONの例で作成したものです。PAY_SALARY関数を削除すると、PAY_SALARYに依存するオブジェクトがすべて無効になります。

DROP FUNCTION PAY_SALARY;

関連項目

CREATE FUNCTION

4.3.26 DROP INDEX

構文

図4-35に、DROP INDEXの構文を示します。

図4-35 DROP INDEXコマンド

DROP INDEXコマンドの構文図

BNF表記法

DROP INDEX [schema .] index ;

前提条件

索引を削除するには、データベースにSYSTEMとして、またはDBA/DDL権限を持つユーザーとしてログインする必要があります。

用途

索引をデータベースから削除します。

表4-30に、DROP INDEXコマンドの引数をリストします。

表4-30 DROP INDEXコマンドで使用される引数

引数 説明
schema 削除する索引の入ったスキーマ。schemaを省略すると、Oracle Liteは、索引がユーザー自身のスキーマ内にあると解釈します。
index 削除する索引の名前。

次の例は、EMP表のSAL列の索引を削除します。

DROP INDEX SAL_INDEX;

関連項目

CREATE INDEX

4.3.27 DROP JAVA

構文

図4-36に、DROP JAVAの構文を示します。

図4-36 DROP JAVAコマンド

DROP JAVAコマンドの構文図

BNF表記法

DROP JAVA { CLASS | RESOURCE } [schema .] object_name;

前提条件

クラスまたはリソース・スキーマ・オブジェクトを削除するには、次の要件に一致する必要があります。

用途

Javaクラスまたはリソース・スキーマ・オブジェクトを削除します。

Javaクラスの解決およびリソースの詳細は、『Oracle Database Lite Java開発者ガイド』を参照してください。

表4-31に、DROP JAVAコマンドの引数をリストします。

表4-31 DROP JAVAコマンドで使用される引数

引数 説明
JAVA CLASS Javaクラス・スキーマ・オブジェクトを削除します。
JAVA RESOURCE Javaリソース・スキーマ・オブジェクトを削除します。
object_name 既存のJavaクラス、ソースまたはリソースのスキーマ・オブジェクトの名前を指定します。

使用上の注意

Oracle Liteは、schema_nameが指定されるとそれを認識しますが、適用はしません。

次の文は、JavaクラスMyClassを削除します。

DROP JAVA CLASS "MyClass";

関連項目

CREATE JAVA

4.3.28 DROP PROCEDURE

構文

図4-37に、DROP PROCEDUREの構文を示します。

図4-37 DROP PROCEDUREコマンド

DROP PROCEDUREコマンドの構文図

BNF表記法

DROP PROCEDURE [schema .] procedure ;

前提条件

プロシージャをデータベースにスキーマとして接続するか、ユーザーがDBA/DDL権限を持っている必要があります。

用途

スタンドアロンのストアド・プロシージャをデータベースから削除します。

プロシージャ作成の詳細は、「CREATE PROCEDURE」を参照してください。

表4-32に、DROP PROCEDUREコマンドの引数をリストします。

表4-32 DROP PROCEDUREコマンドで使用される引数

引数 説明
schema プロシージャを含むスキーマ。schemaを省略すると、Oracle Liteは、プロシージャがユーザー自身のスキーマ内にあると解釈します。
procedure 削除するプロシージャの名前。

プロシージャを削除するとき、Oracle Liteは、削除されるプロシージャに依存するローカル・オブジェクトをすべて無効にします。その後、これらのオブジェクトの1つを参照すると、Oracle Liteは、そのオブジェクトを再コンパイルしようとし、削除されたプロシージャが再作成されていないと、エラー・メッセージを返します。


次の文は、ユーザーKERNERが所有するプロシージャTRANSFERを削除して、TRANSFERに依存するオブジェクトをすべて無効にします。

DROP PROCEDURE kerner.transfer

関連項目

CREATE PROCEDURE

4.3.29 DROP SCHEMA

構文

図4-38に、DROP SCHEMAの構文を示します。

図4-38 DROP SCHEMAコマンド

DROP SCHEMAコマンドの構文図

BNF表記法

DROP SCHEMA schema . [{CASCADE | RESTRICT}] ;

前提条件

スキーマを削除するには、データベースにSYSTEMとして、あるいはDBA/DDLまたはADMIN権限を持つユーザーとしてログインする必要があります。

用途

スキーマをデータベースから削除します。

表4-33に、DROP SCHEMAコマンドの引数をリストします。

表4-33 DROP SCHEMAコマンドで使用される引数

引数 説明
schema データベースから削除するスキーマ
CASCADE 指定されたビューに依存する定義を持ったその他のオブジェクトがすべて、スキーマとともに自動的に削除されるよう指定します。
RESTRICT 指定されたスキーマに依存する定義を持ったその他のオブジェクトがある場合、DROP SCHEMA操作が失敗するよう指定します。

使用上の注意

オプションを指定しない場合は、RESTRICT引数によってデフォルト動作が決まります。

次の例は、CREATE SCHEMAの例で作成したHOTEL_OPERATIONスキーマを削除します。

DROP SCHEMA HOTEL_OPERATION CASCADE;

関連項目

CREATE SCHEMA

4.3.30 DROP SEQUENCE

構文

図4-39に、DROP SEQUENCEの構文を示します。

図4-39 DROP SEQUENCEコマンド

DROP SEQUENCEコマンドの構文図

BNF表記法

DROP SEQUENCE [schema .] sequence ;

前提条件

データベースにSYSTEMとしてログインするか、順序がユーザーのスキーマ内に必要です。

用途

順序をデータベースから削除します。

表4-34に、DROP SEQUENCEコマンドの引数をリストします。

表4-34 DROP SEQUENCEコマンドで使用される引数

引数 説明
schema 削除する順序の入ったスキーマ。schemaを省略すると、Oracle Liteは、順序がユーザー自身のスキーマ内にあると解釈します。
sequence データベースから削除する順序の名前。

使用上の注意

順序を再起動する方法の1つに、削除して再作成する方法があります。たとえば、現在の設定値が150の順序があり、27という値を使用して順序を再起動する場合、次の手順を行います。

次の例は、CREATE SEQUENCEの例で作成したESEQ順序を削除します。

DROP SEQUENCE ESEQ;

ODBC 2.0

DROP SEQUENCEコマンドはODBC SQL構文の一部ではありませんが、ODBCはこのコマンドをそのままデータベースに渡します。

関連項目

ALTER SEQUENCECREATE SEQUENCE

4.3.31 DROP SYNONYM

構文

図4-40に、DROP SYNONYMの構文を示します。

図4-40 DROP SYNONYMコマンド

DROP SYNONYMコマンドの構文図

BNF表記法

DROP [PUBLIC] SYNONYM [schema .] synonym ;

前提条件

データベースからシノニムを削除するには、データベースにSYSTEMとしてログインするか、シノニムがユーザーのスキーマ内に必要です。

用途

パブリックまたはプライベートSQL順序をデータベースから削除します。

表4-35に、DROP SYNONYMコマンドの引数をリストします。

表4-35 DROP SYNONYMコマンドで使用される引数

引数 説明
PUBLIC パブリック・シノニムを指定します。パブリック・シノニムを削除するには、PUBLICを指定してください。
schema シノニムを含むスキーマ。schemaを省略すると、Oracle Liteはユーザー自身のスキーマ内でシノニムを作成します。PUBLICを指定している場合、schemaは指定できません。
synonym 削除されるシノニムの名前。

次の例は、CREATE SYNONYMの例で作成したPRODという名前のシノニムを削除します。

DROP SYNONYM PROD;

関連項目

CREATE SYNONYM

4.3.32 DROP TABLE

構文

図4-41に、DROP TABLEの構文を示します。

図4-41 DROP TABLEコマンド

DROP TABLEコマンドの構文図

BNF表記法

DROP TABLE [schema .] table [{CASCADE | CASCADE CONSTRAINTS | RESTRICT}] ;

前提条件

表をデータベースから削除するには、データベースにSYSTEMとして、またはDBA/DDL権限を持つユーザーとしてログインする必要があります。

用途

をデータベースから削除します。

表4-36に、DROP TABLEコマンドの引数をリストします。

表4-36 DROP TABLEコマンドで使用される引数

引数 説明
schema 削除する表の入ったスキーマ。schemaを省略すると、Oracle Liteは、表がユーザー自身のスキーマ内にあると解釈します。
table データベースから削除する表の名前。
CASCADE 表がビューの実表の場合、または表内の主キーを参照する参照整合性制約がある場合、それらが表とともに自動的に削除されるよう指定します。
CASCADE CONSTRAINTS 表内の主キーを参照する参照整合性制約がすべて、表とともに自動的に削除されるよう指定します。
RESTRICT 表がビューの実表の場合、または表が参照整合性制約で参照されている場合、DROP TABLE操作が失敗するよう指定します。

使用上の注意

オプションの指定がなく、また、その表を参照する参照整合性制約がない場合、Oracle Liteは表を削除します。オプションの指定がなく、その表を参照する参照整合性制約がある場合、Oracle Liteはエラー・メッセージを返します。

DROP TABLE EMP;

関連項目

ALTER TABLECREATE TABLE

4.3.33 DROP TRIGGER

構文

図4-42に、DROP TRIGGERの構文を示します。

図4-42 DROP TRIGGERコマンド

DROP TRIGGERコマンドの構文図

BNF表記法

DROP TRIGGER [schema .] trigger ;

前提条件

データベースにSYSTEMとしてログインするか、トリガーがユーザーのスキーマ内にあることが必要です。

用途

データベース・トリガーをデータベースから削除します。

表4-37に、DROP TRIGGERコマンドの引数をリストします。

表4-37 DROP TRIGGERコマンドで使用される引数

引数 説明
schema トリガーを含むスキーマ。schemaを省略すると、Oracle Liteは、トリガーがユーザー自身のスキーマ内にあると解釈します。
trigger トリガーの名前。

次の文は、SAL_CHECKトリガーを削除します。このトリガーは、CREATE TRIGGERの例で作成したものです。

DROP TRIGGER ruth.reorder

関連項目

CREATE TRIGGER

4.3.34 DROP USER

構文

図4-43に、DROP USERの構文を示します。

図4-43 DROP USERコマンド

DROP USERコマンドの構文図

BNF表記法

DROP USER user [CASCADE] ;

前提条件

ユーザーをデータベースから削除するには、データベースにSYSTEMとしてログインするか、あるいはDBA/DDLまたはADMIN権限が必要です。

用途

ユーザーをデータベースから削除します。

表4-38に、DROP USERコマンドの引数をリストします。

表4-38 DROP USERコマンドで使用される引数

引数 説明
user 削除するユーザーの名前。
CASCADE ユーザーに対応付けられたオブジェクトをすべて削除します。

使用上の注意

データベースにSYSTEMとして接続しているか、あるいはADMINまたはDBA/DDLロールの権限を付与されている場合は、ユーザーを削除できます。

ユーザーのスキーマにオブジェクトが含まれていない場合にユーザーを削除するには、次の構文を使用します。

DROP USER <user>

ユーザーを削除する前にユーザーのスキーマからすべてのオブジェクトを削除するには、次の構文を使用します。

DROP USER <user> CASCADE

次の文は、ユーザーMichaelを削除します。

DROP USER MICHAEL;

関連項目

CREATE USER

4.3.35 DROP VIEW

構文

図4-44に、DROP VIEWの構文を示します。

図4-44 DROP VIEWコマンド

DROP VIEWコマンドの構文図

BNF表記法

DROP [schema .] VIEW view [ {CASCADE | RESTRICT}] ;

前提条件

ビューをデータベースから削除するには、データベースにログインしている必要があり、また、次の要件の1つを満たしている必要があります。

用途

ビューをデータベースから削除します。

表4-39に、DROP VIEWコマンドの引数をリストします。

表4-39 DROP VIEWコマンドで使用される引数

引数 説明
schema 削除するビューの入ったスキーマ。schemaを省略すると、Oracle Liteは、ビューがユーザー自身のスキーマ内にあると解釈します。
view データベースから削除するビューの名前。
CASCADE 定義が指定のビューに依存するその他のビューがすべて、ビューとともに自動的に削除されるよう指定します。
RESTRICT 定義が指定のビューに依存するその他のビューがある場合、DROP VIEW操作が失敗するよう指定します。

使用上の注意

オプションが指定されていないと、Oracle Liteはこのビューのみを削除します。その他の依存ビューは影響を受けません。

次の例は、CREATE VIEWの例で作成したEMP_SALビューを削除します。

DROP VIEW EMP_SAL;

関連項目

CREATE SYNONYMCREATE TABLECREATE VIEW

4.3.36 EXPLAIN PLAN

構文

図4-45に、EXPLAIN PLANの構文を示します。

図4-45 EXPLAIN PLANコマンド

EXPLAIN PLANコマンドの構文図

BNF表記法

EXPLAIN PLAN select_command;

用途

subquery::=文のOracle Liteデータベース・オプティマイザによって選択された実行計画を表示します。

表4-40に、EXPLAIN PLANコマンドの引数をリストします。

表4-40 EXPLAIN PLANコマンドで使用される引数

引数 説明
EXPLAIN PLAN 問合せの実行計画を決定します。
select_command 実行計画を決定する問合せ。

使用上の注意

Oracle Liteは、execplan.txtというファイルに実行計画を出力します。Oracle Liteは、このファイルに新しい各実行計画を追加します。

EXPLAIN PLANコマンドの実行のたびに、Oracle Liteは、EXPLAIN COMMANDという1行に続けて、1行以上の実行計画の行を出力します。

実行計画は、問合せブロック1つにつき1行含まれます。問合せブロックは、subquery::=キーワードで始まります。

計画出力は、インデントによってネストの状態が表されます。UNIONおよびMINUSによって結合された問合せもすべてインデントされます。計画出力の各行は、一般に次の形式になっています。

table-name [(column-name)] [{NL(rows)|IL(rows)} table-name [(column-name)] ]

表4-41に、EXPLAIN PLANコマンドのパラメータをリストします。

表4-41 EXPLAIN PLAN出力のパラメータ

パラメータ 定義
table-name 完全修飾の別名または表の名前。
column-name 索引キーの最初の列の名前。
NL ネスト・ループ結合。
IL 索引ループ結合は、「IL」の後に続く表を結合するために使用されます。
(rows) オプティマイザの、結合の結果の行の推定値。

表は、左から右に実行されます。左端の表は、反復の最も外側のループを形成します。

Oracle Liteは、表の順序付けをするために行推定値を使用しますが、実際の値は重要ではありません。オプティマイザは可能なかぎり最適な索引を推定します。実行時にはさらに精度が上がるため、オブジェクト・カーネルは、異なる索引を選択することもできます。

4.3.37 GRANT

構文

図4-46に、GRANTの構文を示します。

図4-46 GRANTコマンド

GRANTコマンドの構文図

BNF表記法

GRANT {role | privilege_list ON object_name} TO user_list ;

前提条件

ロール権限を付与するには、データベースにSYSTEMとして、またはDBA/DDLおよびADMIN権限あるいはRESOURCE権限を持つユーザーとしてログインする必要があります。

用途

ユーザーにADMIN、DBA、DDLまたはRESOURCEロールの権限を付与します。または、ユーザーにデータベース・オブジェクトに対する権限を付与します。できるだけ、DDLのかわりにDBAロールを使用することをお薦めします。

表4-42に、GRANTコマンドの引数をリストします。

表4-42 GRANTコマンドで使用される引数

引数 説明
role UNRESOLVED XREF TO ADMIN、UNRESOLVED XREF TO DBA/DDLまたはUNRESOLVED XREF TO RESOURCEロール。
user_list ユーザー、またはカンマで区切られたユーザーのリスト。
ON ロールを付与するデータベース・オブジェクトを示します。
privilege_list 次の権限をカンマで区切ったリストか、ALLと呼ばれる組合せ。INSERT、DELETE、UPDATE(col_list)、SELECTおよびREFERENCES。
TO ロールを付与するユーザーまたはユーザー・リストを示します。
object_name オプションとして接頭辞にスキーマ名が付いた表名。

事前定義されたロール

Oracle Liteは、便宜上いくつかの特権を、事前定義されたロールとしてまとめます。多くの場合、ユーザーに、別のスキーマの特定の特権を付与するよりも、事前定義されたロール権限を付与する方が簡単です。Oracle Liteは、ロールの作成や削除をサポートしません。表4-43に、Oracle Liteの事前定義されたロールをリストします。

表4-43 Oracle Database Liteの事前定義されたロール

ロール名 ロールに付与される権限
ADMIN ユーザーは別のユーザーを作成でき、スキーマ内のどのオブジェクトに対してもDDLおよびADMIN以外の権限を付与できます。ユーザーは、SQL文内で、次のコマンドを実行できます。

CREATE SCHEMA、CREATE USER、ALTER USER、DROP USER、DROP SCHEMA、GRANTおよびREVOKE。

DBA/DDL ユーザーは、別の状況ではSYSTEMによってしか発行できない、次のDDL文を発行できます。

All ADMIN権限、CREATE TABLE、CREATE ANY TABLE、CREATE VIEW、CREATE ANY VIEW、CREATE INDEX、CREATE ANY INDEX、ALTER TABLE、ALTER VIEW、DROP TABLE、DROP VIEWおよびDROP INDEX。

RESOURCE RESOURCEロールはDBA/DDLロールと同じレベルの制御を付与しますが、ユーザー自身のドメイン上でのみ可能です。ユーザーは、SQL文内で、次のコマンドを実行できます。

ユーザー自身のスキーマの下の任意のオブジェクトのCREATE TABLE、CREATE VIEW、CREATE INDEX、CREATE CONSTRAINT、ALTER TABLE、ALTER VIEW、ALTER INDEX、ALTER CONSTRAINT、DROP TABLE、DROP VIEW、DROP INDEX、DROP CONSTRAINTおよびGRANTまたはREVOKE権限。


使用上の注意

privilege_listがALLの場合、ユーザーは、表またはビューからINSERT、DELETE、UPDATEまたはSELECTを実行できます。privilege_listが、INSERT、DELETE、UPDATEまたはSELECTのいずれかの場合、ユーザーは表に対してその特権を持ちます。

ユーザーに表のUPDATE権限を付与し、その後、列を追加して表を変更した場合、そのユーザーは、新しい列を更新できません。新しい列を作成した後に権限付与の文を発行した場合、ユーザーは新しい列を更新できます。たとえば、次のとおりです。

CREATE TABLE t1 (c1 NUMBER c2 INTEGER);
CREATE USER a IDENTIFIED BY a;
GRANT SELECT, UPDATE ON t1 TO a;
ALTER TABLE t1 ADD c3 INT;
COMMIT;

前の例で、GRANT文はALTER TABLE文の後で発行する必要があります。そうでないと、ユーザーは新しい列c3を更新できません。

例1

次の例は、MICHAELという名前のユーザーを作成し、そのユーザーにADMINロールの権限を付与します。

CREATE USER MICHAEL IDENTIFIED BY SWORD;

GRANT ADMIN TO MICHAEL;

例2

次の例は、MICHAELという名前のユーザーを作成し、ユーザーに、EMP表に対するINSERTおよびDELETE権限を付与します。

CREATE USER MICHAEL IDENTIFIED BY SWORD;

GRANT INSERT, DELETE ON EMP TO MICHAEL;

例3

次の例は、新しく作成されたユーザーMICHAELに、PRODUCT表に対するALL権限を付与します。

GRANT ALL ON PRODUCT TO MICHAEL;

関連項目

REVOKE

4.3.38 INSERT

構文

図4-47に、INSERTの構文を示します。

図4-47 INSERTコマンド

INSERTコマンドの構文図

BNF表記法

INSERT INTO [schema .] {table | view }["("column [, column]...")"]{ VALUES  "(" expr [, expr]...")" | subquery} ;

前提条件

表またはビューに列を追加するには、データベースにSYSTEMとしてログインするか、表およびビューがユーザーのスキーマ内に必要です。

用途

またはビューの実表に行を追加します。

表4-44に、INSERTコマンドの引数をリストします。

表4-44 INSERTコマンドで使用される引数

引数 説明
schema 表またはビューを含むスキーマ。schemaを省略すると、Oracle Liteは、表またはビューがユーザー自身のスキーマ内にあると解釈します。
table 行を挿入する表の名前。
view 実表に行を挿入するビューの名前。
column 表またはビューの列。挿入された行の中でこの引数にリストされている各列には、VALUES句または副問合せからの値が割り当てられます。

この引数からの表の列の1つを省略すると、挿入された行の列値は、表が作成されたときに指定された列のデフォルト値となります。column引数を指定しない場合、VALUES句または問合せで表内のすべての列の値を指定する必要があります。

VALUES 表またはビューに挿入される行の値を指定します。VALUES句には、column引数で指定した各列の値を指定します。
expr 対応する列に割り当てられた値。これは、ホスト変数を指定できます。詳細は、1.8「式の指定」を参照してください。
subquery 表に挿入される行を返すSELECT文。この副問合せのSELECTリストには、INSERT文の列リストと同数の列が必要です。

使用上の注意

INSERT INTO EMP (EMPNO, ENAME, DEPTNO) VALUES ('7010', 'VINCE', '20');

関連項目

DELETEUPDATE

4.3.39 LEVEL疑似列

用途

LEVEL疑似列は、階層問合せを実行するSELECT文内で使用できます。階層問合せで返された各行について、LEVEL疑似列はルート・ノードには1、ルートの子には2、というように返します。階層問合せでは、ルート・ノードは逆ツリー内で最も上位のノード、子ノードはルート以外のノード、親ノードは子のあるノード、リーフ・ノードは子のないノードです。

前提条件

なし。

使用上の注意

階層問合せにより返されるレベル数は、32以下に制限されています。

次の文により階層順序内の従業員がすべて返されます。ルート行は、仕事がPRESIDENTの従業員になるように定義されます。親行の子行が、親行の従業員番号をマネージャ番号として含む行として定義されています。

SELECT LPAD(' ',2*(LEVEL-1)) || ename org_chart,
empno, mgr, job
FROM emp
START WITH job = 'PRESIDENT'
CONNECT BY PRIOR empno = mgr;

次の結果を返します。

ORG_CHART              EMPNO       MGR JOB
------------------ --------- --------- ---------
                        7839           PRESIDENT
    JONES               7566      7839 MANAGER
    SCOTT               7788      7566 ANALYST
    ADAMS               7876      7788 CLERK
    FORD                7902      7566 ANALYST
    SMITH               7369      7902 CLERK
    CLARK               7782      7839 MANAGER
    MILLER              7934      7782 CLERK
    BLAKE               7698      7839 MANAGER
    WARD                7521      7698 SALESMAN
    JAMES               7900      7698 CLERK
    TURNER              7844      7698 SALESMAN
    ALLEN               7499      7698 SALESMAN
    MARTIN              7654      7698 SALESMAN

14 rows selected.

関連項目

CURRVALおよびNEXTVAL疑似列OL__ROW_STATUS疑似列ROWID疑似列ROWNUM疑似列

4.3.40 OL__ROW_STATUS疑似列

用途

データベースの各行について、OL__ROW_STATUS疑似列で、スナップショット表から行のステータス(新規、更新またはクリーン)が返されます。

前提条件

なし。

使用上の注意

OL__ROW_STATUSでは、任意のスナップショットまたは通常の表から列を選択できますが、行ステータス情報はスナップショット表の行についてのみ返されます。通常の表の行は、ステータスにかかわらず同じ値を返します。

OL__ROW_STATUS疑似列は、他の疑似列と同じ方法で表名による修飾が可能です。したがって、表4-45にリストする複数表が使用される複合問合せで行ステータスが判別できます。

表4-45 OL__ROW_STATUSの結果

表タイプ OL__ROW_STATUS値 説明
スナップショット表 0 この行はクリーンまたは未使用です。
スナップショット表 16 この行は、クライアント側で作成された新規行です。
スナップショット表 32 この行は更新されています。
通常の表 0 この値は静的であり、変更されません。

例1

Select OL__ROW_STATUS, Emp.* from Employee Emp Where Empno = 7900;

例2

Select Emp. OL__ROW_STATUS, ENAME, DNAME  from EMP,DEPT where
DEPT.DEPTNO=EMP.DEPTNO AND EMP.EMPNO=7900;

関連項目

CURRVALおよびNEXTVAL疑似列LEVEL疑似列ROWID疑似列ROWNUM疑似列

4.3.41 REVOKE

構文

図4-48に、REVOKEの構文を示します。

図4-48 REVOKEコマンド

REVOKEコマンドの構文図

BNF表記法

REVOKE  { role | privilige_list ON object_name } FROM user_list ;

前提条件

ユーザーからロールを取り消すには、データベースにSYSTEMとして、あるいはDBAまたはADMIN権限を持つユーザーとしてログインする必要があります。

用途

ユーザーのADMIN、DBA/DDLまたはRESOURCEロールを取り消します。または、ユーザーのデータベース・オブジェクトに対する権限を取り消します。DDLのかわりにDBAロールを使用することをお薦めします。

表4-46に、REVOKEコマンドの引数をリストします。

表4-46 REVOKEコマンドで使用される引数

引数 説明
role UNRESOLVED XREF TO ADMIN、UNRESOLVED XREF TO DBA/DDLまたはUNRESOLVED XREF TO RESOURCEロール。
user_list ユーザー、またはカンマで区切られたユーザーのリスト。
privilege_list 次の権限をカンマで区切ったリストか、ALLと呼ばれる組合せ。INSERT、DELETE、UPDATE(col_list)およびSELECT。
object_name 接頭辞にスキーマ名が付いた表名。

使用上の注意

privilege_listが、INSERT、DELETE、UPDATEまたはSELECTのいずれかの場合、ユーザーは表またはビューに対してその権限を持ちます。privilege_listがALLの場合、ユーザーは、表またはビューからINSERT、DELETE、UPDATEまたはSELECTを実行できます。

例1

次の例は、STEVEという名前のユーザーを作成し、そのユーザーにADMINロールの権限を付与します。次に、ADMINロールをユーザーSTEVEから取り消します。

CREATE USER STEVE IDENTIFIED BY STINGRAY;
GRANT ADMIN TO STEVE;
REVOKE ADMIN FROM STEVE;

例2

次の例は、ユーザーSCOTTから、EMP表に対するINSERTおよびDELETE権限を取り消します。

REVOKE INSERT,DELETE ON EMP FROM SCOTT;

例3

次の例は、CHARLESという名前のユーザーを作成し、そのユーザーに、PRICE表に対するINSERTおよびDELETE権限と、ITEM表に対するALL権限を付与します。次に、ユーザーCHARLESから、PRICE表とITEM表に対する権限をすべて取り消します。

CREATE USER CHARLES IDENTIFIED BY VORTEX;
GRANT INSERT, DELETE, UPDATE ON PRICE TO CHARLES;
GRANT ALL ON ITEM TO CHARLES;
REVOKE ALL ON PRICE FROM CHARLES;
REVOKE ALL ON ITEM FROM CHARLES;

関連項目

GRANT

4.3.42 ROLLBACK

構文

図4-49に、ROLLBACKの構文を示します。

図4-49 ROLLBACKコマンド

ROLLBACKコマンドの構文図

BNF表記法

ROLLBACK [{ WORK | TO savepoint_name }] ;

前提条件

なし。

用途

カレント・シノニムで実行された操作をすべて取り消します。

表4-47に、ROLLBACKコマンドの引数をリストします。

表4-47 ROLLBACKコマンドで使用される引数

引数 説明
work ANSI互換性を提供するためにサポートされているオプションの引数。
TO セーブポイントまでロールバックできるようにするためのオプションの引数。
savepoint_name その地点までロールバックするセーブポイントの名前。

使用上の注意

まだトランザクションに入っていないと、Oracle Liteは、SQL文を最初に発行した地点から開始します。COMMITまたはROLLBACKコマンドを使用するまでは、発行する文はすべてトランザクションと解釈されます。

COMMITコマンドは、トランザクションの開始に至るまでのすべてを保存して、データベース内のデータに対する変更を永久的なものにします。変更がコミットされるまで、変更を格納するか、またはデータを前の状態にリストアすることができるように、新旧両方のデータが存在します。

ROLLBACKコマンドは、保留されているカレント・トランザクションで行われたデータに対する変更を破棄して、トランザクションの開始前の状態にデータベースをリストアします。SAVEPOINTを指定して、トランザクションの部分に対してROLLBACKを実行できます。


重要:

Oracle Liteは、CREATE DATABASE以外は、DDLコマンドを自動的にコミットすることはありません。Oracle Lite内のDDLコマンドは、ロールバックの対象となります。

次の例は、新しい行をDEPT表に挿入し、その後、そのトランザクションをロールバックします。この例は、ROLLBACKおよびROLLBACK WORKの両方について、同じ結果を返します。

INSERT INTO DEPT (deptno, dname, loc) VALUES (50, 'Design', 'San Francisco');
SELECT * FROM dept;

次の結果を返します。

   DEPTNO DNAME          LOC
--------- -------------- -------------
       10 ACCOUNTING     NEW YORK
       20 RESEARCH       DALLAS
       30 SALES          CHICAGO
       40 OPERATIONS     BOSTON
       50 DESIGN         SAN FRANCISCO

ROLLBACK WORK;
SELECT * FROM dept;

次の結果を返します。

   DEPTNO DNAME          LOC
--------- -------------- -------------
       10 ACCOUNTING     NEW YORK
       20 RESEARCH       DALLAS
       30 SALES          CHICAGO
       40 OPERATIONS     BOSTON

ODBC 2.0

ROLLBACKコマンドはODBC SQL構文の一部ではありませんが、ODBCはこのコマンドをそのままデータベースに渡します。

ODBCプログラムは通常、SQL_ROLLBACKフラグを指定したAPIコールSQLTransact()を使用します。

関連項目

SAVEPOINT

4.3.43 ROWID疑似列

用途

データベースの各行について、ROWID疑似列は行アドレスを返します。ROWID値により、データベース内の行は一意に識別されます。ROWID疑似列の値のデータ型はROWIDです。

前提条件

なし。

使用上の注意

ROWIDの値には、いくつかの重要な用途があります。

ROWIDを表の主キーに使用しないでください。たとえば、インポートおよびエクスポート・ユーティリティにより行を削除および再挿入した場合、ROWIDが変更される場合があります。行を削除すると、Oracle Database Liteにより、後から挿入された新規行にそのROWIDが再割当てされる場合があります。

問合せのSELECTおよびWHERE句にROWID疑似列を使用できますが、これらの疑似列の値は実際にはデータベースに格納されません。ROWID疑似列の値は、挿入、更新または削除できません。

例1

この文では、部門20の従業員のデータが含まれるすべての行のアドレスが選択されます。

SELECT ROWID, last_name
   FROM employees
   WHERE department_id = 20;

関連項目

CURRVALおよびNEXTVAL疑似列LEVEL疑似列ROWNUM疑似列OL__ROW_STATUS疑似列

4.3.44 ROWNUM疑似列

用途

問合せによって返される各行について、ROWNUM疑似列は、Oracle Liteが表または結合行のセットから行を選択した順番を示す番号を返します。選択された最初の行は、ROWNUMは1で、2番目の行は2、というようになります。

前提条件

なし。

使用上の注意

同じ副問合せ内でROWNUMの後にORDER BY句が続く場合、行はORDER BY句によって並べ替えられます。結果は、行がアクセスされる方法によって異なることがあります。たとえば、ORDER BY句によってOracle Liteがデータのアクセスに索引を使用する場合、Oracle Liteは、索引なしの場合と異なる順番で行を取り出す可能性があります。

副問合せ内にORDER BY句を入れて、最上位の問合せにROWNUM条件が指定されている場合、行の並べ替えの後で、ROWNUM条件の適用を強制できます。例3を参照してください。

例1

次の例は、問合せで返される行数を制限するために、ROWNUMを使用します。

SELECT * FROM emp WHERE ROWNUM < 10;

例2

次の例は、同じ問合せ内で、ORDER BY句をROWNUMの後に指定します。したがって、行はORDER BY句によって並べ替えられ、前の例と同じ結果にはなりません。

SELECT * FROM emp WHERE ROWNUM < 11 ORDER BY empno;

例3

次の問合せは、最小の従業員番号を10個返します。これは、「トップN問合せ」と呼ばれることもあります。

SELECT * FROM
   (SELECT empno FROM emp ORDER BY empno)
   WHERE ROWNUM < 11;

例4

次の問合せは行を返しません。

SELECT * FROM emp WHERE ROWNUM > 1;

最初にフェッチされた行は、ROWNUMに1が割り当てられ、条件がFALSEにされます。2番目にフェッチされる行は、今では最初の行となり、それにもROWNUMに1が割り当てられ、条件がFALSEにされます。後に続く行にはすべて条件を満たすことに失敗し、そのため、行には何も返されません。

例5

次の文は、表の各行に一意の値を割り当てます。

UPDATE tabx SET col1 = ROWNUM;

関連項目

CURRVALおよびNEXTVAL疑似列LEVEL疑似列ROWID疑似列OL__ROW_STATUS疑似列

4.3.45 SAVEPOINT

構文

図4-50に、SAVEPOINTの構文を示します。

図4-50 SAVEPOINTコマンド

SAVEPOINTコマンドの構文図

BNF表記法

SAVEPOINT savepoint_name ;

用途

後でロールバックを可能にするための、トランザクション内のポイントを識別します。

前提条件

なし。

使用上の注意

セーブポイントを設定すると、そこまでロールバックできます。または、後でそれを削除できます。セーブポイントまでロールバックするには、次の文を使用します。

ROLLBACK TO <savepoint_name>

セーブポイントを削除するには、次の文を使用します。

REMOVE SAVEPOINT <savepoint_name>

セーブポイントまでロールバックするか、セーブポイントを削除する場合、ネストされたセーブポイントもすべてロールバックまたは削除されます。メモリー使用量を削減するために、できるだけ早くセーブポイントを削除してください。

ユーザー定義セーブポイントには名前を付けることができます。また、トランザクション処理内でカレント・ポイントをマークできます。ROLLBACKとともに使用することで、SAVEPOINTによって、トランザクション全体ではなく、トランザクションの部分を取り消すことができます。セーブポイントまでロールバックすると、そのセーブポイントの後にマークされたセーブポイントは、すべて削除されます。COMMIT文は、最後にコミットまたはロールバックされた後にマークされたセーブポイントをすべて削除します。

セッションごとに定義できるアクティブ・セーブポイントの数に制限はありません。アクティブ・セーブポイントとは、最後にコミットまたはロールバックされてからマークされたセーブポイントのことです。

次の例は、2人の従業員BlakeとClarkの給与を更新します。次に、EMP表内で給与の合計をチェックします。例は、各従業員の給与のセーブポイントまでロールバックし、Clarkの給与を更新します。

UPDATE emp
    SET sal = 2000
    WHERE ename = 'BLAKE';

SAVEPOINT blake_sal;

UPDATE emp
    SET sal = 1500
    WHERE ename = 'CLARK';

SAVEPOINT clark_sal;
SELECT SUM(sal) FROM emp;
ROLLBACK TO SAVEPOINT blake_sal;
UPDATE emp
    SET sal = 1300
    WHERE ename = 'CLARK';
COMMIT;

関連項目

COMMITSAVEPOINTROLLBACK

4.3.46 SELECT

SELECT文は、1つ以上のまたはビューからデータを取り出します。SELECT文を使用してJavaストアド・プロシージャを起動することもできます。表またはビューからデータを取り出すには、データベースにSYSTEMとしてログインするか、表およびビューがユーザーのスキーマ内に必要です。

構文

select::=

図4-51に、SELECTの構文を示します。

図4-51 SELECTコマンド

SELECTコマンドの構文図

BNF表記法

subquery [order_by_clause] [ for_update_clause] ;

関連項目

CONSTRAINT句DELETEUPDATE

次の項では、SELECT文内で使用可能な様々な操作を説明します。

4.3.46.1 SELECTコマンドの引数

表4-48に、SELECTコマンドの引数をリストします。

表4-48 SELECTコマンドで使用される引数

引数 説明
DISTINCT 選択された重複行の各セットのコピーを1つのみ返します。重複行とは、選択リスト内の各式に一致する値を持つ複数の行です。
ALL 重複行も含めて、選択された行をすべて返します。デフォルトはALLです。
*
FROM句にリストされた表、ビューまたはスナップショットからの列をすべて返します。
table.* 選択された表からすべての列を選択します。ユーザー自身のスキーマ以外のスキーマから選択する場合は、schema修飾子を使用します。
view.* 選択されたビューからすべての列を選択します。ユーザー自身のスキーマ以外のスキーマから選択する場合は、schema修飾子を使用します。
expr 通常は、FROM句内の表またはビューの1つから得た列の値に基づいて式を選択します。このリストの列を含む表またはビュー自体がFROM句でschemaを使用して修飾されているときにのみ、列名をschemaで修飾できます。詳細は、1.8「式の指定」を参照してください。
hint ヒントはOracle Database Liteオプティマイザにより処理され、文実行の選択肢を示します。詳細は、「HINT式」を参照してください。
/*+ ... */ OracleおよびOracle Database Liteの両方で処理されるヒント。
/*% ...%*/ Oracleではコメントとして扱われ、Oracle Database Liteでは処理されるヒント。
// ... // OracleおよびOracle Database Liteの両方で処理されるヒント。
c_alias 列の別名を提供します。これは列の式とは異なる名前で、列の別名が列ヘッダーで使用されるようになります。列の別名は、列の実際の名前には影響しません。別名は、ORDER BY句の中でのみ使用できます。問合せ内の別の句では使用できません。
schema 選択された表、ビューまたはスナップショットの入ったスキーマ。schemaを省略すると、Oracle Liteではユーザー自身のスキーマ内に表、ビューまたはスナップショットがあると解釈されます。
table データが選択される表。
view データが選択されるビュー。
t_alias 問合せを評価する目的で、表、ビューまたはスナップショットに対して異なった名前、つまり別名を指定します。相関問合せで一番よく使用されます。その問合せの中で、表、ビューまたはスナップショットを参照する場合は、別名を参照する必要があります。
WHERE 指定されたconditionがTRUEである行に選択を制限します。WHERE句を省略すると、Oracle Liteは、FROM句内の表、ビューまたはスナップショットのすべての列を返します。WHEREは、TRUEまたはFALSEと評価される条件式を指定します。詳細は、1.8「式の指定」を参照してください。
condition 検索条件。有効な条件の作成の詳細は、1.7「SQL条件の指定」を参照してください。
START WITH 行を階層順序で返します。
CONNECT BY 階層問合せ内の親行と子行の関連を指定します。conditionはこの関連を指定し、PRIOR演算子を使用して親行を参照する必要があります。親行の子を検索するために、Oracle Liteは、表内の各行のPRIOR式を評価します。条件がTRUEである行は、親行の子です。詳細は、2.7「その他の演算子」のPRIOR演算子を参照してください。
GROUP BY 各行のexpr引数の値に基づいて選択された行をグループ化し、各グループのサマリー情報を含んだ単一の行を返します。
HAVING 指定されたconditionがTRUEであるグループに返される行のグループを制限します。この句を省略すると、Oracle Liteは、すべてのグループのサマリー行を返します。詳細は、1.7「SQL条件の指定」を参照してください。
INTERSECT 両方の問合せで選択された重複していない行をすべて返します。INTERSECTはUNIONより高い優先順位を持ちます。
INTERSECT ALL 両方の問合せで選択された重複していない行をすべて返します。INTERSECTと同じ結果となります。この構文はサポートされていますが、機能はありません。
UNION 両方の問合せで選択された重複していない行をすべて返します。
UNION ALL 重複行も含めて、どちらかの問合せで選択された行をすべて返します。
MINUS 最初の問合せで選択された、他と重複しない行をすべて返します。2番目の問合せで選択された行は返されません。
command それ自身が別のSELECTコマンドのパラメータであるSELECTコマンドのパラメータをすべて参照します。SELECTコマンド内にあるSELECTコマンドのパラメータを入力する場合、WHERE文は使用できません。
ORDER BY 次の引数に従って、SELECT文で返される行を順序指定します。

expr(式)は、exprの値に基づいて行を順序指定します。式は選択リストの列に基づくか、またはFROM句にある表、ビューまたはスナップショット内の列に基づきます。

positionでは、選択リストのこの位置にある式の値に基づいて行を順序指定します。

ASCでは、昇順のソート順序を指定します。ASCがデフォルトです。

DESCでは、降順のソート順序を指定します。

FOR UPDATE 選択された行をロックします。

FOR UPDATE句内の列リストは無視されます。

FOR UPDATE句は、ORDER BY句の前または後のどちらでも使用できます。

column 更新される列。

使用上の注意

WHERE句を指定していないときにFROM句に表が2つ以上ある場合、Oracle Liteは、関わっている表すべてのデカルト積を計算します。

LEVEL疑似列は、階層問合せを実行するSELECT文内で使用できます。詳細は、「LEVEL疑似列」を参照してください。階層問合せでは、結合を実行したり、ビューからデータを選択することはできません。

式を使用して列を選択する場合、それらの列には別名が必要です。別名は、問合せによって選択される列式の名前を指定します。別名の数は、問合せで選択される式の数と一致する必要があります。別名は、問合せ内で一意にしてください。

4.3.46.2 SUBQUERY式

subquery::=

図4-52に、subquery式の構文を示します。

図4-52 subquery式

subquery式の構文図

BNF表記法

{query_spec | "("subquery")" } [{ INTERSECT | INTERSECT ALL | UNION | UNION ALL | MINUS }
  {query_spec |"(" subquery ")" } ]

query_spec::=

図4-53に、query_spec式の構文を示します。

図4-53 query spec式

query_spec式の構文図

BNF表記法

SELECT [ hint ] [ { DISTINCT | ALL ]{ * | { [schema.] { table | view } .*      | expr [[AS] c_alias]  }   [, {
     | [schema .] { table | view  } .*      | expr [[AS] c_alias]     }  ]...}FROM  [schema .] { "("subquery [order_by_clause] ")" | table | view  }[ t_alias ] [ WHERE condition][ { [ START WITH condition ] CONNECT BY condition | GROUP BY expr [, expr]... | [HAVING condition]  }]

4.3.46.3 FOR_UPDATE句

for_update_clause::=

図4-54に、FOR UPDATE句の式の構文を示します。

図4-54 FOR UPDATE句の式

FOR UPDATE句の式の構文図

BNF表記法

FOR UPDATE[OF [[schema .] { table | view } .] column  [, [[schema .] { table | view } .] column]...]

4.3.46.4 ORDER_BY句

order_by_clause::=

図4-55に、ORDER BY句の式の構文を示します。

図4-55 ORDER BY句の式

ORDER BY句の式の構文図

BNF表記法

ORDER  BY { expr | position | c_alias } [ ASC | DESC ] [, { expr | position | c_alias } [ ASC | DESC ] ]...

4.3.46.5 TABLE_REFERENCE式

table_reference::=

図4-56に、table_reference式の構文を示します。

図4-56 table_reference式

table_reference式の構文図

BNF表記法

{ [schema .] {table | view} | "("subquery [order_by_clause] ")"} [[AS] t_alias]

4.3.46.6 ODBC_JOIN_TABLE式

odbc_join_table::=

図4-57に、odbc_join_table式の構文を示します。

図4-57 odbc_join_table式

odbc_join_table式の構文図

BNF表記法

"{" OJ joined_table "}"

4.3.46.7 JOINED_TABLE式

joined_table::=

図4-58に、joined_table式の構文を示します。

図4-58 joined_table式

joined_table式の構文図

BNF表記法

"{"
  { table_reference   | OJ table_refernce { LEFT | RIGHT } [OUTER] JOIN joined_table ON conditon  }"}"

4.3.46.8 HINT式

SQL文の中でコメントを使用して、指示やヒントをOracle Database Liteオプティマイザに渡すことができます。オプティマイザはこれらのヒントを、その文の実行計画を選択するためのアドバイスとして使用します。

1つの文ブロックに入れることができるのは、ヒントが含まれる1つのコメントのみであり、このコメントはSELECT、UPDATE、INSERTまたはDELETEキーワードの後に置く必要があります。次の構文は、Oracle Database Liteが文ブロック内で使用できる、各スタイルのコメントに含まれたヒントを示しています。

{DELETE|INSERT|SELECT|UPDATE} /*+ hint [text] [hint[text]]... */

または

{DELETE|INSERT|SELECT|UPDATE} // hint [text] [hint[text]]... //

または

{DELETE|INSERT|SELECT|UPDATE} /*% hint [text] [hint[text]]...%*/

構文の各要素の意味は、次のとおりです。

DELETE、INSERT、SELECTまたはUPDATEは、文ブロックのDELETE、INSERT、SELECTまたはUPDATEキーワードを示します。ヒントを含むコメントは、これらのキーワードの後にのみ置くことができます。/*+//または/*%を使用すると、コメントはヒントのリストとして解釈されます。プラス記号はコメント・デリミタの直後に置く必要があり、間にスペースを入れることはできません。ただし、プラス記号とヒントの間にはスペースを入れてもかまいません。コメントに複数のヒントを含める場合は、ヒント間を少なくとも1つのスペースで区切ります。

テキストは、ヒントとともに適宜配置できるヒント以外のコメント・テキストです。Oracle Database Liteでは、スペルの間違ったヒントは通常のコメントとして処理され、エラーは返されません。

Oracle Database LiteとOracleデータベースで同じコードを共有して、Oracle Database Liteのみにヒントを指定するには、構文/*% hint %*/を使用します。Oracle Database LiteとOracleの両方のオプティマイザにヒントを指定するには、構文/*+ hint */を使用します。

4.3.46.8.1 ORDEREDヒント

ORDEREDヒントを使用すると、複数の表が、FROM句に指定した順序で結合されます。結合を実行するSQL文でORDEREDヒントを省略すると、表を結合する順序はオプティマイザによって選択されます。ORDEREDヒントを使用して結合順序を指定できるのは、各表の行の選択方法がわかっている場合です。最良のパフォーマンスを実現するために、内部および外部表を選択できます。

ordered_hint::=/*+ ORDERED */

次の問合せは、ORDEREDヒントの使用例です。

SELECT /*+ORDERED */ o.order_id, c.customer_id, 1.unit_price * 1.quantity
FROM customers c, order_items 1, orders o
WHERE c.cust_last_name = ?
AND o.customer_id = c.customer_id
AND o.order_id = 1.order_id;
4.3.46.8.2 INDEXヒント

INDEXヒントは、指定された表の索引スキャンを明示的に選択します。INDEXヒントには、次のものがあります。

  • INDEX

  • INDEX_ASC

  • INDEX_DESC

各INDEXヒントの詳細は、『Oracle Database SQLリファレンス』を参照してください。

INDEXヒントは、指定された表の索引スキャンを明示的に選択します。

INDEXヒントの構文
index_hint::= table_name index_name

用法は次のとおりです。

  • index_nameは、索引名を指定します。

  • table_nameは、表の名前または別名を指定します。

どちらの名前もSYSTEM.EMPなどの修飾名にすることはできません。1つのtable_nameに指定できるindex_nameは、1つのみです。複数の索引名を指定すると、最適化のため、最初の索引名のみが選択されます。


注意

INDEXヒントの詳細は、『Oracle Database SQLリファレンス』を参照してください。

たとえば、次のとおりです。

SELECT /*+ INDEX (employees emp_department_ix)*/
       employee_id, department_id
  FROM employees
  WHERE department_id > 50;

4.3.46.9 LIMITおよびOFFSET句

クライアント・デバイスには、CPU、メモリーおよび画面サイズなどのハードウェアやソフトウェア制限があるため、特に、SQL問合せから返される結果セットの行数が非常に多い場合、この行数を制限することがあります。すべての行を取得しようとすると、時間がかかり、パフォーマンスに影響する可能性があります。また、デバイス内の制限、ビジネス・ロジックの要件、問合せに対するレスポンス時間が長いために、アプリケーションがすべての結果を表示できない場合もあります。

問合せによって返される行数を制限する方法は、次のとおりです。

  • LIMIT句: 指定した行数のみが返されるようにし、デバイスまたはアプリケーションの制限を超過しないようにします。

  • OFFSET句: 返された結果セット内の特定の位置から開始できます。

  • ORDER BY句: 特定の順序で行を取得できます。

  • 索引の作成: 小型デバイスの場合、適正な索引を作成することで、パフォーマンスが大幅に向上することがあります。

構文

Cursor_spec::=subquery [order_by_clause][for_update_clause][limit_clause]
subquery::=   (詳細は、4.3.46.2「SUBQUERY式」を参照)
limit_clause::={LIMIT number [offset_clause] | offset_clause}
offset_clause::=OFFSET number

LIMIT句を使用して、問合せで返される行数を制限できます。LIMITでは、0〜4294967295の整数の定数を使用して、返される行の最大数を指定します。OFFSET句では、0〜4294967295の整数の定数を使用して、返される最初の行のオフセットを指定します。OFFSET句を指定しない場合、オフセットはデフォルト値の0に設定されます。

たとえば、次のSQL文では、行5〜9を取得します。

SELECT * FROM table LIMIT 5 OFFSET 4;

LIMIT引数のみの場合、LIMITの値により、結果セットの先頭から返される行数が指定されます。次のSQL文では、行1〜5を取得します。

SELECT * FROM table LIMIT 5;

LIMIT引数が0である場合、OFFSET値は指定されていても無視されます。次のSQL文では、何も取得されません。

SELECT * FROM table LIMIT 0 OFFSET 4;

OFFSET句のみを指定した場合は、返される行数には特定の制限はありません。次のSQL文では、結果セットの2行目以降の行が取得されます。

SELECT * FROM table OFFSET 1;

ORDER BY句をLIMIT句とともに使用することにより、出力行の順序に制約を課すことができます。つまり、文にLIMIT句とORDER BY句の両方を指定した場合、実行計画の生成時にこれらの句が考慮されます。ORDER BY列に索引を作成することにより、結果セット全体を一時表に挿入することなく、また、問合せから数行のみを取得するためだけにソートを実行せずにすみます。EXPLAIN PLANコマンドを使用すると、問合せでLIMITとORDER BYが使用されているときにソートが実行されるかどうかを確認できます。EXPLAIN PLANの詳細は、1.11「EXPLAIN PLANを使用したSQL文実行パフォーマンスのチューニング」を参照してください。

LIMITおよびOFFSET句の例

顧客が、受注入力アプリケーションを使用しています。このアプリケーションでは、3,000を超えた行からなる製品表が使用され、表内の製品番号には1次索引が設定されています。ユーザーは、スキャナを使用してバーコードをスキャンするか、テキスト・フィールドに製品番号を手動で入力することにより、個々の製品を選択します。このスクリプトは、バーコードまたは製品番号(どちらも索引付けされている)を等価選択として使用し、1つの製品を選択するためにカーソルを開きます。この場合、Oracle Database Liteは良好なパフォーマンスを示します。しかし、その他のアクションではデータベースへのアクセスが非常に遅くなります。ユーザーは、製品を選択した後、製品番号を1次索引として「次へ」または「前」ボタンをクリックして次または前の製品番号を検索できます。多くの場合、顧客は同じ製品番号を持つ関連品目を参照するため、この操作が必要になります。

ユーザーが「次へ」ボタンをクリックしたときに使用されるSQL文は、次のとおりです。

SELECT * FROM PRODUCT WHERE PARTNUM > partnum ORDER BY PARTNUM;

partnumは、エンド・ユーザーによってスキャンまたは入力された製品番号です。

現在の製品が(索引内の)最初の製品である場合、この問合せによってソートして返される行が3,000を超えるため、「次へ」の実行には時間がかかります。一方、ユーザーが「前」ボタンをクリックしたときに実際に使用されるSQL文の動作も、「次へ」の場合と同様です。また、現在の製品が最後の製品であるか、製品表の終わり付近にある場合も、同じ理由により、レスポンス時間が長くなります。

SELECT * FROM PRODUCT WHERE PARTNUM < partnum ORDER BY PARTNUM DESC;

partnumは、エンド・ユーザーによってスキャンまたは入力された製品番号です。

顧客が求めているのは「partnum > [value]である最初の数個の製品を検索する」SELECT文であるため、SELECT文では、1次索引を使用して、3000ではなく数レコードを読み取ります。

顧客は、次のようにLIMIT句を使用して問合せを再作成し、問合せによって返される行数を制限できます。

SELECT * FROM PRODUCT WHERE PARTNUM > partnum ORDER BY PARTNUM LIMIT 5;

これにより、この問合せによって返される行数が5以下に制限されます。適正に作成された索引とともにORDER BY句を使用すると、元の問合せよりもパフォーマンスが向上します。

4.3.46.10 SELECTコマンドの例

次の例では、SELECTコマンドの使用方法を示します。

例1

SELECT * FROM EMP WHERE SAL = 1300;

次の結果を返します。

    EMPNO ENAME      JOB             MGR HIREDATE        SAL      COMM    DEPTNO
--------- ---------- --------- --------- --------- --------- --------- ---------
     7782 CLARK      MANAGER        7839 1981-06-0      1300                  10
     7934 MILLER     CLERK          7782 1982-01-2      1300                  10

例2

SELECT 'ID=',EMPNO, 'Name=',ENAME, 'Dept=',DEPTNO
FROM EMP ORDER BY DEPTNO;

次の結果を返します。

'ID     EMPNO 'NAME ENAME      'DEPT    DEPTNO
--- --------- ----- ---------- ----- ---------
ID=      7839 Name= KING       Dept=        10
ID=      7934 Name= MILLER     Dept=        10
ID=      7782 Name= CLARK      Dept=        10
ID=      7566 Name= JONES      Dept=        20
ID=      7876 Name= ADAMS      Dept=        20
ID=      7788 Name= SCOTT      Dept=        20
ID=      7369 Name= SMITH      Dept=        20
ID=      7902 Name= FORD       Dept=        20
ID=      7521 Name= WARD       Dept=        30
ID=      7900 Name= JAMES      Dept=        30
ID=      7844 Name= TURNER     Dept=        30
ID=      7499 Name= ALLEN      Dept=        30
ID=      7654 Name= MARTIN     Dept=        30
ID=      7698 Name= BLAKE      Dept=        30

14 rows selected.

例3

SELECT 'ID=', EMPNO,
'Name=', ENAME,
'Dept=', DEPTNO
FROM EMP WHERE SAL >= 1300;

次の結果を返します。

'ID     EMPNO 'NAME ENAME      'DEPT    DEPTNO
--- --------- ----- ---------- ----- ---------
ID=      7839 Name= KING       Dept=        10
ID=      7698 Name= BLAKE      Dept=        30
ID=      7782 Name= CLARK      Dept=        10
ID=      7566 Name= JONES      Dept=        20
ID=      7499 Name= ALLEN      Dept=        30
ID=      7844 Name= TURNER     Dept=        30
ID=      7902 Name= FORD       Dept=        20
ID=      7788 Name= SCOTT      Dept=        20
ID=      7934 Name= MILLER     Dept=        10

9 rows selected.

例4

SELECT * FROM (SELECT ENAME FROM EMP WHERE JOB = 'CLERK'
UNION
SELECT ENAME FROM EMP WHERE JOB = 'ANALYST');

次の結果を返します。

ENAME
----------
ADAMS
FORD
JAMES
MILLER
SCOTT
SMITH

例5

この例では、「ordered」ヒントは、結合順序の中で、EMP表を最も外側の表として選択します。オプティマイザは、実行に最適な索引を取り出そうとします。たとえばビューの代替や副問合せの非ネストなど、その他の最適化を実行しようとします。

Select //ordered//  Eno, Ename, Loc from Emp, Dept
where Dept.DeptNo = Emp.DeptNo and Emp.Sal > 50000;

例6

この例では、ヒントは、表(Product、ItemおよびOrd)を指定された順序、すなわち、Product、Item、Ordの順番で結合します。ヒントは副問合せのみに制限されます。

Select CustId, Name, Phone from Customer
Where CustId In ( Select //ordered// Ord.CustId from Product, Item, Ord
Where Ord.OrdId = Item.OrdId And
Item.ProdId = Product.ProdId And
Product.Descrip like '%TENNIS%')

4.3.47 SET TRANSACTION

構文

図4-59に、SET TRANSACTIONの構文を示します。

図4-59 SET TRANSACTIONコマンド

SET TRANSACTIONコマンドの構文図

BNF表記法

SET TRANSACTION ISOLATION LEVEL{ READ COMMITTED | REPEATABLE READ | SERIALIZABLE | SINGLE USER};

前提条件

SET TRANSACTION文を使用する場合、その文がトランザクションの最初の文になります。しかし、トランザクションは、SET TRANSACTION文を持つ必要はありません。


注意

Oracle Liteは、データ定義言語文の実行の前後で、カレント・トランザクションをコミットします。

用途

カレント・トランザクションの分離レベルを確立します。

表4-49に、SET TRANSACTIONコマンドの引数をリストします。

表4-49 SET TRANSACTIONコマンドで使用される引数

引数 説明
SET TRANSACTION カレント・トランザクションの分離レベルを確立します。SET TRANSACTION文によって実行される操作は、ユーザーのカレント・トランザクションにのみ影響し、別のユーザーや別のトランザクションには影響しません。ユーザーのトランザクションは、COMMITまたはROLLBACK文を発行すると、いつでも終了します。
ISOLATION LEVEL データベースの変更を含んだトランザクションの処理方法を指定します。
READ COMMITTED 分離レベル。トランザクションは、別のトランザクションによって書込みロックされた行がアンロックされるまで、実行されません。トランザクションは、カレント行の読込み時に読込みロックを行い、カレント行を更新または削除するときに書込みロックを行います。これによって、別のトランザクションがそれを更新または削除することを防止できます。トランザクションは、トランザクションがカレント行から離れたときに読込みロックを解除し、トランザクションがコミットまたはロールバックされたときに書込みロックを解除します。
REPEATABLE READ 分離レベル。トランザクションは、別のトランザクションによって書込みロックされた行がアンロックされるまで、実行されません。トランザクションは、トランザクションがアプリケーションに返す行すべての読込みロックを維持し、挿入、更新または削除する行すべての書込みロックを維持します。トランザクションは、トランザクションがコミットまたはロールバックされたときにのみそのロックを解除します。
SERIALIZABLE 分離レベル。トランザクションは、別のトランザクションによって書込みロックされた行がアンロックされるまで、実行されません。トランザクションは、行の範囲の読込み時に読込みロックを行い、行の範囲を更新または削除するときに書込みロックを行います。これによって、別のトランザクションが行を更新または削除することを防止できます。
SINGLEUSER 分離レベル。トランザクションはロックを行いません。そのため、使用されるメモリー量は少なくなります。これは、データベースのバルク・ロードに使用します。

使用上の注意

なし。

SET TRANSACTION ISOLATION LEVEL SINGLEUSER;

関連項目

COMMITROLLBACK

4.3.48 TRUNCATE TABLE

構文

図4-60に、TRUNCATE TABLEの構文を示します。

図4-60 TRUNCATE TABLEコマンド

TRUNCATE TABLEコマンドの構文図

BNF表記法

TRUNCATE TABLE [schema .] table ;

用途

表からすべての行を削除します。この文は、Oracleデータベースとの互換性のために提供されています。この文は、次の文と同じアクションを実行します。

DELETE FROM table_name ;

表4-50に、TRUNCATE TABLEコマンドの引数をリストします。

表4-50 TRUNCATE TABLEコマンドで使用される引数

引数 説明
schema 表の入ったスキーマ
table 切り捨てられる表の名前

使用上の注意

主キーを含み、依存表に行が存在する表は切り捨てられません。

TRUNCATE TABLE emp;

4.3.49 UPDATE

構文

図4-61に、UPDATEの構文を示します。

図4-61 UPDATEコマンド

UPDATEコマンドの構文図

BNF表記法

UPDATE [schema .] { table | view} [ alias ] SET column = { expr | subquery }  [, column = { expr | subquery }]...[WHERE condition] ;

前提条件

データベース表またはビューにある値を更新するには、データベースにSYSTEMとしてログインするか、表およびビューがユーザーのスキーマ内に必要です。

用途

内またはビューの実表内にある値を変更します。

表4-51に、UPDATEコマンドの引数をリストします。

表4-51 UPDATEコマンドで使用される引数

引数 説明
schema 表またはビューを含むスキーマ。schemaを省略すると、Oracle Liteは、表またはビューがユーザー自身のスキーマ内にあると解釈します。
table 更新される表の名前。
view 実表を更新するビューの名前。
alias UPDATEコマンド内のもう1つの句内の表またはビューの名前のラベル付けを再度行います。
SET 後続する列が特定値に設定されるよう指定します。
column 更新される表またはビューの列名。SET句内で表の列を1つ省略すると、その列の値は変更されません。
expr 対応する列に割り当てられた新規作成値。これは、ホスト変数を指定できます。
subquery 更新される副問合せ。
WHERE 指定のconditionがTRUEである行に更新される行を制限します。WHERE句を省略すると、Oracle Liteは、表またはビュー内の行をすべて更新します。
condition 検索条件。有効な条件の作成の詳細は、1.7「SQL条件の指定」を参照してください。

使用上の注意

UPDATE EMP SET SAL = SAL * .45 WHERE JOB = 'PRESIDENT';

ODBC 2.0

UPDATEのODBC SQL構文は指定されたものと同じです。さらに、次の構文がサポートされています。

WHERE CURRENT OF CURSOR cursor_name

関連項目

DELETEINSERT