ヘッダーをスキップ
Oracle TimesTen In-Memory Database SQLリファレンス・ガイド
リリース11.2.1
B56051-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

2 名前およびパラメータ

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

基本名

基本名とは、列、表、ビュー、索引を指します。基本名は、次の規則に従う必要があります。

所有者名

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

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

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

複合識別子

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

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

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

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

動的パラメータ

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

SQLコマンドで動的パラメータを使用する場合、パラメータ名の先頭にコロン(:)を指定する必要があります。また、TimesTenの基本名の規則に従う必要があります。ただし、識別子とは異なり、パラメータ名は次の任意の文字で開始できます。


注意:

: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では名前の重複にかかわらず、パラメータが出現するたびに番号が割り当てられます。 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;