この章では、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)に変更されます。 このため、名前では大文字と小文字は区別されません。
名前が二重引用符で囲まれている場合は、どのような文字の組合せでも(有効な文字セットにはない場合でも)使用できます。この場合は、どのような文字でも先頭に使用できます。列、表、または索引が、二重引用符で囲まれた名前で最初に定義され、その名前が前述の2つ目の規則に従っていない場合、以後そのオブジェクトを参照する際には常に二重引用符を使用する必要があります。
Unicode文字を名前に使用することはできません。
所有者名は、表を作成したアカウントのユーザー名です。 TimesTenで定義される表と索引には、所有者のSYS
またはTTREP
が付与されます。 ユーザー・オブジェクトは、所有者名SYS
またはTTREP
では作成できません。 所有者名と表名はすべて大文字に変換されます。
TimesTenの表の所有者は、ユーザーIDの設定またはログイン名によって決まります。キャッシュ・グループの場合、Oracle表の所有者名は、TimesTen表の所有者名と常に一致させる必要があります。
所有者名は、指定しない場合は自動的に設定されますが、ユーザーが表を作成する際に指定できます。 「CREATE TABLE」を参照してください。 所有者名を作成する場合は、基本名の作成と同じ規則に従ってください。「基本名」を参照してください。
基本名とユーザー名は単純名です。 単純名は、ピリオド(.)で区切られた複数の基本名と所有者名を結合した、複合識別子と結合されることがあります。
通常、複合識別子はその一部を省略して簡略化できます。完全修飾名を使用しない場合、欠けている部分のかわりにデフォルト値が使用されます。たとえば、所有する表を参照する際、所有者名(とピリオド)を省略すると、ユーザーのログイン名に基づいて所有者名が生成されます。
構成要素をすべて含む完全な複合識別子を、完全修飾名といいます。異なる所有者が同じ名前の表と索引を所有することができます。これらのオブジェクトの完全修飾名は一意である必要があります。
複合識別子には、次のものがあります。
列識別子: [[Owner.]TableName.]ColumnName
[Owner.]IndexName
表識別子: [Owner.]TableName
行識別子: [[Owner.]TableName.]rowid
動的パラメータは、TimesTenとアプリケーション・プログラム間の情報のやり取りに使用されます。動的パラメータはSQLコマンドのプレースホルダで、実行時に実際の値に置換されます。
SQLコマンドで動的パラメータを使用する場合、パラメータ名の先頭にコロン(:)を指定する必要があります。また、TimesTenの基本名の規則に従う必要があります。ただし、識別子とは異なり、パラメータ名は次の任意の文字で開始できます。
大文字: AからZ
小文字: aからz
数字: 0から9
特殊文字: # $ @ _
注意: :DynamicParameterシーケンスを使用するかわりに、アプリケーションで、各動的パラメータに?を使用できます。 |
拡張された:スタイルのパラメータ・マーカーは、次の書式で指定できます。
:parameter [INDICATOR] :indicator
:
indicator
は:
parameter
の要素とみなされます。 異なるパラメータとしてカウントされません。 このスタイルのパラメータ・マーカーに対して?を指定しないでください。
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では名前の重複にかかわらず、パラメータが出現するたびに番号が割り当てられます。 Oracleアプリケーションは、少なくとも、各パラメータ名の最初の出現に対して値をバインドします。 特定のパラメータがこれ以降に出現した場合は、アプリケーションはパラメータの出現をバインドしないでおくことも、この出現に対して異なる値をバインドすることもできます。
次の表に、各パラメータに対して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の動作とでは異なる結果となります。
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;