13.17 DEFINE
構文
DEF[INE] [variable] | [variable = text]
ユーザー変数または事前定義変数を指定し、その変数にCHAR値を割り当てたり、1つまたはすべての変数の値および変数型を表示します。
項
variable
どのユーザー変数または事前定義変数の値を割り当てるか(あるいは表示するか)を指定します。
text
variableに割り当てるCHAR値を指定します。textに句読点または空白が含まれている場合は、テキストを一重引用符で囲みます。
variable = text
variableの値と型を表示するには、DEFINEに続けてvariableを入力します。 すべての置換変数の値と型を表示するには、句を指定せずに、DEFINEを入力します。
使用方法
事前定義変数は、次の操作を行うまでそれぞれの値を保持します。
-
その変数を参照する新しいDEFINEコマンドの入力
-
COLUMNコマンドのNEW_VALUE句またはOLD_VALUE句の中でその変数が参照され、次にSQL SELECTコマンドでその列が参照される
-
EXIT SQL*Plus
ストアド・クエリーまたはスクリプトを実行するたびに、SQL*Plusは、variableを参照するそれぞれの置換変数(&variableまたは&&variableの書式)を、variableの値で置換します。SQL*Plusは、ユーザーがvariableをUNDEFINEするまで、そのセッションでのvariable値の入力を求めるプロンプトを表示しません。
事前定義変数の値を複数の行に展開した場合(SQL*Plusのコマンド継続文字を使用)、SQL*Plusは各継続文字および改行を空白で置換します。たとえば、次のように入力したとします。
DEFINE TEXT = 'ONE- TWO- THREE'
SQL*Plusはこれを次のように解釈します。
DEFINE TEXT = 'ONE TWO THREE'
予期しない結果を回避するために、変数に渡される値と同じ名前が付いている変数の定義を使用しないでください。定義した変数に指定した値が変数名と一致する場合、指定された値のかわりに、一致する変数の内容が使用されます。
SQL*Plus起動時に事前定義される変数があります。DEFINEと入力すると、それらの定義が表示されます。
例
値MANAGERを変数POSに割り当てるには、次のように入力します。
DEFINE POS = MANAGER
&POSへの参照を含むコマンドを実行すると、SQL*Plusは、&POSを値MANAGERで置換し、POS値の入力を求めるプロンプトは表示しません。
CHAR値20を変数DEPARTMENT_IDに割り当てるには、次のように入力します。
DEFINE DEPARTMENT_ID = 20
20という数値を入力しても、SQL*Plusは、2および0という2つの文字で構成されるCHAR値をDEPARTMENT_IDに割り当てます。
DEPARTMENT_IDの定義を表示するには、次のように入力します。
DEFINE DEPARTMENT_ID
DEFINE DEPARTMENT_ID = "20" (CHAR)
この結果は、DEPARTMENT_IDの値が20であることを示しています。
13.17.1 事前定義変数
次の9つの変数がSQL*Plusのインストール中に定義されます。これらの変数とユーザー定義変数の違いは、事前定義値を持つ点のみです。
表13-3 SQL*Plusのインストール時に事前定義される変数
変数名 | 次を含む |
---|---|
可能な宛先への接続に使用される接続識別子。 |
|
現在の日付、またはユーザー定義の固定文字列。 |
|
インストールされたOracle Databaseの現行のバージョン。 |
|
インストールされたOracle Databaseの完全なリリース番号。 |
|
現在の接続での権限レベル。 |
|
インストールされたSQL*Plusコンポーネントの完全なリリース番号。 |
|
接続に使用されるユーザー名。 |
|
_SQL_ID | 実行されたSQL文のsql_id。 |
_CONNECT_IDENTIFIER
接続識別子のINSTANCE_NAME、SERVICE_NAME
またはORACLE_SID
が含まれます。接続の際にユーザーが接続識別子を指定しない場合、_CONNECT_IDENTIFIER
にはORACLE_SID
が含まれます。
_DATE
動的変数としての現在の日付、または固定文字列が含まれます。現行の日付はデフォルトで、NLS_DATE_FORMATの値を使用して書式設定されます。
_DATEは標準の置換変数として使用できるため、ユーザーはこれをTTITLEに含めることができます。_DATEが動的で、TTITLEで使用される場合は、すべての標準の変数のセマンティクスを持ちます。_DATEが値ではなくアンパサンドとともに使用される場合、TTITLEコマンドが実行される時間に設定されます。アンパサンドを接頭辞に使用しない場合は、ページごとに再度評価されます。TTITLEでの_DATE付きの詳細なレポート、または&_DATEへの複数の参照を持つ詳細なレポートでは、変数の出現ごとに異なる時間が表示されます。
TTITLEで_DATEを使用するユーザーは、ほとんどが、&_DATEのようにアンパサンドを使用します。そのため、レポートの各ページは同一のタイムスタンプを持ちます。これは、現在の日付の書式に秒のコンポーネントが含まれる場合、特に正確です。
DEFINE(引数なし)、または&_DATEを使用する間接参照では、現在の日付が指定されます。
_DATEの値はUNDEFINEDにすることも、または明示的にDEFINE _DATEを使用して固定文字列に設定することもできます。
デフォルトの動的な日付動作を再度有効にするには、次のように指定します。
DEFINE _DATE = "" (an empty string)
_DATEを使用すると、時刻の値をご使用のSQL*Plusプロンプトに含めることができます。
_EDITOR
EDITコマンドで使用されるデフォルトのエディタを指定します。
Windowsオペレーティング・システムへのSQL*Plusのインストールの場合は、インストール時にメモ帳に設定されます。UNIXオペレーティング・システムの場合は、UNIX環境変数の値、EDITOR(存在する場合)に設定されます。存在しない場合はEdに設定されます。
デフォルトのテキスト・エディタの名前を保持するには、DEFINEコマンドを使用して_EDITORを再定義します。たとえば、EDITで使用するエディタをviとして定義するには、次のコマンドを入力します。
DEFINE _EDITOR = vi
_O_VERSION
インストールされているOracle Databaseの現行のバージョンを含んでいます。
_O_RELEASE
インストールされたOracle Databaseの完全なリリース番号が、次のような書式で含まれます。
1801000000
_PRIVILEGE
現在の接続での権限レベルを示す値が含まれます。次のいずれかの値です。
-
AS SYSASM
-
AS SYSBACKUP
-
AS SYSDBA
-
AS SYSDG
-
AS SYSOPER
-
AS SYSRAC
-
空の文字列(通常のユーザー接続または接続しない場合)
AS SYSASM、AS SYSBACKUP、AS SYSDBA、AS SYSDG、AS SYSOPERおよびAS SYSRACは、データベース管理者レベルの権限です。
関連項目:
AS SYSDBAおよびAS SYSOPER権限の詳細は、「GRANT」を参照してください。
_SQLPLUS_RELEASE
インストールされたSQL*Plusコンポーネントの完全なリリース番号が、次のような書式で含まれます。
1801000000
_USER
現在接続しているユーザーの名前が含まれます。
_SQL_ID
現在実行されているSQL文またはPL/SQL文のsql_idが含まれています。
DEFINEコマンドを使用すると、これらの変数の各値を参照できます。
これらの変数は、他の置換変数と同様にアクセスおよび再定義できます。これらの変数はTTITLE、「&」置換変数、またはSQL*Plusコマンドライン・プロンプトで使用できます。
DEFINEコマンドを使用すると、他のDEFINE定義を参照する場合と同じ方法で、これらの9つの事前定義変数の定義を参照できます。また、DEFINEコマンドを使用してこれらの値を再定義したり、UNDEFINEコマンドを使用してこれらの定義を削除し、使用不可にすることもできます。
特定の変数の定義を表示するには、次のように入力します。
DEFINE variable
variableには、定義を表示する置換変数の名前を指定します。
すべての事前定義変数およびユーザー定義変数の定義を表示するには、次のように入力します。
DEFINE
すべての事前定義変数およびユーザー定義変数の定義が表示されます。
UNDEFINEコマンドを使用して、置換変数の定義を削除し、使用不可にできます。