S-JIS[2003-06-18/2009-01-06] 変更履歴

SQL*Plus

linuxやWindows上で動いているOracle9iのSQL*Plusのメモです。


起動

sqlplusの引数にユーザー名を指定すると、そのユーザーでログオン(接続)する。[2008-02-20]
ユーザーの指定形式は「ユーザー」「ユーザー/パスワード」「ユーザー/パスワード@接続名」「ユーザー@接続名」等。
パスワードを指定していない場合は別途パスワードの入力が求められる。
接続名(サービス名)を省略した場合はデフォルトの接続先になる。

存在しないユーザーだったりパスワードが違ったり接続名が認識できなかったり間違っていたりするとエラーとなり、再度ユーザー名とパスワードの入力が要求される。(-Lオプションを指定していない場合)
ここではユーザー名とパスワードしか聞かれないので接続名が指定できないような感じがするが、ユーザー名の直後に「@接続名」を付ければOK。

> sqlplus scotttttt/tiger@ora92
ERROR:
ORA-01017: invalid username/password; logon denied

ユーザー名を入力してください: scott
パスワードを入力してください: tiger
ERROR:
ORA-12154: TNS: サービス名を解決できませんでした。

ユーザー名を入力してください: scott@ora92
パスワードを入力してください: tiger

また、「as sysdba」も同様にユーザー名の入力時に指定できる。

> sqlplus sys/manager
ERROR:
ORA-28009: connection to sys should be as sysdba or sysoper

ユーザー名を入力してください: sys as sysdba
パスワードを入力してください: manager

※要するにただ単にconnectコマンドが裏で実行されているだけっぽい。

ユーザー名を入力してください: scott --foo
SP2-0306: オプションが無効です。
使用方法: CONN[ECT] [logon] [AS {SYSDBA|SYSOPER}]

sqlplus 〔オプション〕

オプション 説明 備考 更新日
-s サイレントモード プロンプトやログインメッセージを表示しなくなる。 2006-07-08
-L ログインを1回だけ行う。 通常、ログインに失敗すると3回まで再試行するが、このオプションを付けると1回で終了する。 2006-07-08
/nolog DBの起動・終了等を行うときに使う。 Oracle8i以前の sqlmgrl に相当するものらしい  
"sys/manager@SID as sysdba" DB管理者としてログインする。ユーザーの作成等に使う。 sys:DB管理者
manager:パスワード
 
'ユーザー/パスワード' 指定したユーザーでログインする。 ユーザー名にハイフン「-」等が入る場合は、ダブルクォーテーションで囲む。つまり「'"test-1"/password'」といった形になる。  
@ファイル名 ファイル内に書かれたSQL(複数可)を実行する。 例: sqlplus '"test-1"/password' @test.sql  

(nolog以外で)ユーザー・パスワードを指定しなかった場合、別途聞かれる。ここでも、ユーザー名にハイフン「-」が入る場合はダブルクォーテーションで囲むこと。

$ sqlplus
ユーザー名を入力して下さい:"test-1"
パスワードを入力して下さい:password

exp 〔ユーザー/パスワード〕 〔help=y〕

エクスポートを行う。

imp 〔ユーザー/パスワード〕 〔help=y〕

インポートを行う。

新しいバージョンのexp/impでは、古いバージョンのDBに対してエクスポート・インポートをする事が出来ない。[2008-12-17]
DBのバージョンに合ったコマンドを使う必要がある。

あるユーザーのDBを、他のユーザーのDBへコピーする方法

$ exp hishidama/hishidama owner=hishidama file=exp.dmp
$ imp hishidummy/hishidummy fromuser=hishidama touser=hishidummy file=exp.dmp

Oracle10gでハッシュパーティション化されたテーブルをエクスポートしたファイルは、バグっていてインポートできない。[2008-12-17]
そういう時はDDLだけは別の方法(例えばSQL Developerのexport)を使い、データだけimpでインポートするといいかも。
ダンプファイルの中にDDLも入っているので インポート時に“オブジェクトが既にある”というエラーにはなるが、「ignore=y」オプションを付けておけば無視して続行される。
(INSERT時の重複(duplicate)エラー等も無視して続行される)

> imp hishidummy/hishidummy fromuser=hishidama touser=hishidummy file=exp.dmp ignore=y

Windows版SQL*Plus

Windows版のSQL*Plusでは、ログオン用のダイアログが開く。[2005-05-27]
この「ユーザー名(U)」に「/nolog」「/as sysdba」「sys/password@ora92 as sysdba」と入れてやれば、コマンドライン版のsqlplusからそれぞれその引数を指定したのと同じになる。
ただし「ホスト文字列(H)」には何も入れてはいけない。
要するにここで指定した文字列をそのまま引数に渡しているみたいなんだな^^;

ログオン /nolog


このWindows版のSQL*Plus(sqlpluswコマンド)は、Oracle11gで廃止になったらしい。[2008-01-13]
コマンドプロンプトから実行するsqlplusコマンドは残っているみたいだけど、桁数変更コピー&ペースト中断の利便性が全然違うからなぁ…。
代わりにSQL Developerを使えという事なのだろうか。[2008-12-17]


起動時実行SQLファイル

sql*plusの実行ファイルと同じ場所に「login.sql」というファイルを作っておくと、起動時にそのファイルが読み込まれる。[2006-11-21]
このファイルの中に書いたSQLが実行される。

セッションパラメータを初期化するのに便利。


sqlplus上のコマンド

SQL*Plusのコマンドはhelpコマンドで概要を見ることが出来る。

SQL*Plusのバッファには実行したSQLが入っており(SHOWDESCといったSQL*Plusのコマンドは入らない) 、
バッファの内容を編集したり再実行したりすることが出来る。→バッファ編集

SQL*Plusのコマンド(とSQL文)は、行の末尾に「-(ハイフン1つ)」を付けることで次の行に継続して入力できる。[2007-12-30]
これで継続した行は、入力後には1行として扱われる。

SQL文を書いて末尾に「;(セミコロン。sqlterminatorで変更可能)」を付けてリターンキーを押すと、SQL文がバッファに格納され、実行される。[2008-01-14]
セミコロンを書かずに「.(ピリオド。blockterminatorで変更可能)」のみの行を書いてリターンキーを押すと、実行されずにバッファへの格納のみ行われる。
(でもこれってCtrl+Cで中断するのと同じような? Ctrl+Cでもそれまでに書いた内容はバッファに入るし…)

コマンド 説明 備考 更新日
SQL文 SQLを実行する。 最後尾に「;(セミコロン)」が必要。
コピー&ペーストで貼り付けられる量に制限があるので、大量のSQLを実行したい場合は「SQL*Plus」ではなく「SQL*Plus Worksheet」を使うとよい。
2006-11-21
EXIT戻り値 sqlplusを終了する。 「exit 戻り値」…戻り値を返す。
「exit 戻り値 COMMIT」…コミットして終了する。
「exit 戻り値 ROLLBACK」…ロールバックして終了する。
2006-07-08
DESCRIBE テーブル名 DESC テーブルの情報を表示する。 テーブル一覧が見たければ、「select table_name from user_tables;  
@ファイル名 ファイル内のSQL(複数可)を実行する。
ファイル名の指定
別サーバーにあるファイルを実行しているとき、ローカルからファイルを探す。  
@@ファイル名 別サーバーにあるファイルを実行しているとき、そこと同じ場所からファイルを探す。 2006-07-08
START ファイル名   2006-11-22
SPOOL ファイル名 SPO このコマンドの実行後、sqlplusの実行結果がファイルに保存される。 CSV出力に利用できる。
spool off」で、保存をやめる。
2004-10-02
CLEAR オプション CL クリアする。 例えば「CLEAR SCREEN」「CL SCR」で画面を消去する。 2007-12-30
ユーザー関連
CONNECT CONN 接続先を変更する。(現在の接続を切ってから新しい接続を行う) conn user/password」「conn as sysdba
conn /@SID as sysdba
2005-05-27
DISCONNECT DISC 接続を終了(切断)する。   2007-12-30
SHOW USER SHO 現在ログオン中のユーザーの情報を表示する。 似たものに「select user from dual;
他に「select * from user_users;」「select * from all_users;
 
PASSWORDユーザー名 PASSW パスワードを(対話式で)変更する。 ユーザー名を指定しない場合、現在ログオンしているユーザー。
他のユーザーのパスワードを変えるにはsysdbaでないとダメ。
SQLなら「alter user ユーザー名 identified by "新パスワード";
2007-12-30
バッファ編集
GET ファイル名   ファイルの内容をバッファにコピーする。  
SAVE ファイル名 SAV バッファの内容をファイルに保存する。  
数字 指定された数字(行番号)の行を、バッファのカレント行とする。  
数字 文字列 指定された数字(1以上)の行を、文字列に置き換える。  
0 文字列 バッファの一番先頭の行の前に文字列を挿入する。 2008-04-26
APPEND 文字列 A バッファのカレント行に文字列を追加する。  
CHANGE// C バッファのカレント行内で文字列の置換を行う。  
DEL   バッファのカレント行を削除する。  
INPUT I バッファのカレント行の次行に新しい行を追加する。  
LIST L バッファの内容を表示する。  
LIST 行番号行番号
DEL 行番号行番号
L
 
指定された行に対して処理を行う。
行番号をスペース区切りで2つ指定すると、開始行〜終了行として扱われる。
行番号に「*」を指定すると、カレント行が対象となる。
行番号に「last」を指定すると、最終行が対象となる。
2008-04-26
RUN R バッファの内容を表示後、再実行する。  
/ バッファの内容を表示せず)再実行する。  
SQL*Plusの設定 (→環境変数セッションパラメータ
HELP コマンド ? sqlplusのコマンドのヘルプを表示する(DBに接続していないと表示されない)。
コマンドの先頭が一致するもの全てが表示される。
例:「help set」…SETコマンドの説明が表示される。
例:「? s」…Sから始まる全コマンドの説明が表示される。
help index」…SQL*Plusのコマンド一覧が表示される。
help topic」…helpで表示できる内容一覧が表示される。
バージョンの不一致に注意
2007-12-30
SHOW システム変数 SHO sqlplusのシステム変数の値を表示する。 show all」で、全てのシステム変数の値を表示する。
→OTNのSHOW
2009-01-06
SET システム変数 値 sqlplusのシステム変数の値を変更する。   2004-10-02
STORE SET ファイル名 〔REP〕 全てのシステム変数をファイルに出力する。 sqlplusの実行ファイルと同じ場所に出力される。このファイルはsetを使っており、SQLファイルとして実行できる。 2006-11-22
COLUMN COL 項目(データ列)の書式を設定・表示する。   2008-02-15
WHENEVER定義 エラー発生時の動作の定義する。
何も定義を書かないと、現在の定義を表示する。
wheneverOSERROR | SQLERROR} {EXIT系 | CONTINUE系;
EXIT系…EXIT戻り値〕 〔COMMIT | ROLLBACK
CONTINUE系…CONTINUECOMMIT | ROLLBACK | NONE
2006-07-08
TIMING オプション TIMI 累計の経過時間を1/100秒単位で表示させる。
「start ラベル」で、時間計測を開始。
「show」で、その時点の経過時間を表示。
「stop」で終了(最終的な経過時間を表示)。

これとは別に、TIMINGというシステム変数もある。これをONにしておくと、SQLを実行する度に実行に要した時間が表示される。

SQL> timing start aaa
SQL> 何らかのSQL群を実行
SQL> timing show
aaaのタイミング。
経過: 00:00:10.09
SQL> timing stop
aaaのタイミング。
経過: 00:00:12.07
SQL> timi stop
SP2-0325: stopに対するタイミング要素はありません。
SQL> set timing on
SQL> 何らかのSQLを実行
経過: 00:00:00.01
2006-06-03
DEFINE 変数〔= DEF 置換変数の表示・設定を行う。 引数を何も指定しないと、全変数を表示する。
使用例
2006-07-08
UNDEFINE 変数 UNDEF 置換変数を削除する。   2007-12-30
ACCEPT 変数 ACC 置換変数をユーザー入力で設定する。 使用例 2008-04-26
VARIABLE変数〕〕 VAR バインド変数を定義・表示する。   2007-12-30
PRINT変数…〕   バインド変数の値を表示する。   2007-12-30
EXECUTE EXEC PL/SQLを実行する。 BEGINCALLはsqlplusのコマンドではなくSQLの文なのでsqlplusのバッファに入る。
EXECはsqlplusのコマンドなのでバッファに入らない。
2007-12-30
DBMS操作
STARTUP DBを起動する。 startup mount」…マウントだけ実行? 2005-05-27
SHUTDOWN DBを停止する。 shutdown」「shutdown normal」…全てのセッションが終わるまで待つ
shutdown immediate」…トランザクションをロールバックする
2008-08-23
その他
PROMPT メッセージ PRO メッセージを表示する。 DOSUNIXのechoコマンドに相当。 2008-04-26
HOST コマンド ローカルの(SQL*Plusを実行している)OS(DOSUNIX)のコマンドを実行する。 Windows版SQL*Plusの場合、別途コマンドプロンプトが開いて実行され、終わると閉じてしまう(ので結果が確認できない)。
そのため、複数区切り&を使ってpauseコマンドを付加してやると良い。
ただし「&」はデフォルトで置換変数なので、置換変数をオフにしたり別の記号に変えたりエスケープ文字を使ったりする必要がある。
SQL> host cd & pause
2008-04-26

help

ヘルプの内容は、SQL*Plusが接続している“接続先のDB”から内容をとってきているような雰囲気。[2008-02-05]
つまり、実際にそのバージョンのSQL*Plusで使えるコマンドと、ヘルプで表示される内容が一致しない事がある。

例えばOracle9iのSQL*PlusからOracle10gのデータベースへつないでいる場合、「help show」は以下のような情報が表示される。

where option represents one of the following terms or clauses:
    system_variable
    ALL
    BTI[TLE]
    ERR[ORS] [{FUNCTION | PROCEDURE | PACKAGE | PACKAGE BODY | TRIGGER
       | VIEW | TYPE | TYPE BODY | DIMENSION | JAVA CLASS} [schema.]name]
    LNO
    PARAMETERS [parameter_name]
    PNO
    RECYC[LEBIN] [original_name]
    REL[EASE]
    REPF[OOTER]
    REPH[EADER]
    SGA
    SPOO[L]
    SQLCODE
    TT[ITLE]
    USER

リサイクルビンに関するシステム変数(RECYCLEBIN)がヘルプに表示されているが、実際はOracle10gのSQL*Plusでないと使えない。
(Oracle9iのSQL*Plusでは、使おうとするとエラーになってしまう)


conn / as sysdba

この書式で接続する場合、接続先のSIDは環境変数ORACLE_SIDで指定されているものになる。[2005-05-27]

DBが起動している場合、ORACLE_SIDを指定していなくても、以下の書式で接続できる。

SQL> conn /@orcl10g as sysdba
Connected.

起動していないと、以下のように使えない…。

SQL> shutdown
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> conn /@orcl10g as sysdba
ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

@ ?

@@@startコマンドでスクリプトファイル(SQLが書かれたファイル)を実行することが出来る。[2008-02-06]
その際はコマンドの後ろにファイル名を指定するわけだが、ここで「?」という記号は特殊な意味を持つ。
すなわち、実行しているsqlplusがインストールされている場所(ORACLE_HOME?)に変換される。

SQL> @ ?/test.sql
SP2-0310: ファイル"C:\oracle\ora92/test.sql"をオープンできません


ちなみに、ファイル名指定で拡張子を省略すると、システム変数suffixで定義されている文字列(デフォルトは"sql")が自動的に付加される。

SQL> @ test
SP2-0310: ファイル"test.sql"をオープンできません。
SQL> @ ?
SP2-0310: ファイル"C:\oracle\ora92.sql"をオープンできません。


ついでに「@」も特殊な変換がされるようなされないような…。(バージョンによっては何も変換されない?)

SQL> @ @
SP2-0310: ファイル"ora92.sql"をオープンできません。

環境変数

sql*plusの起動時に読み込まれて使われる。

環境変数 説明 関連 更新日
ORACLE_HOME   Oracleがインストールされている場所を指す。   2005-05-27
ORACLE_SID (例)orcl10g デフォルトのSIDを指定する。   2005-05-27
NLS_LANG Japanese_Japan.JA16EUC クライアント側に表示する文字コードの設定。
DBに入っている文字コードに関わらず、この設定で表示される。
  2004-05-28
Japanese_Japan.JA16SJIS
NLS_DATE_FORMAT yyyy/mm/dd DATE型の表示形式を設定する。 SP 2006-11-21
NLS_TIMESTAMP_FORMAT yyyy/mm/dd hh24:mi:ss.ff3 TIMESTAMP型の表示形式を設定する。 SP 2006-11-21

セッションパラメータ

セッション毎に設定を行う。[2006-11-21]

セッションパラメータ 説明 関連 更新日
NLS_DATE_FORMAT yyyy/mm/dd DATE型の表示形式を設定する。 環境変数 2006-11-21
NLS_TIMESTAMP_FORMAT yyyy/mm/dd hh24:mi:ss.ff3 TIMESTAMP型の表示形式を設定する。 環境変数 2006-11-21

設定するには、「alter session」を使う。(commitは不要)

SQL> alter session set NLS_DATE_FORMAT='yyyy/mm/dd';

セッションが変更されました。

SQL> select sysdate from dual;

SYSDATE
----------
2006/11/21

設定内容を確認するには、NLS_SESSION_PARAMETERSv$nls_parametersというビューを使用する。[/2006-12-26]

SQL> select * from NLS_SESSION_PARAMETERS
   2 where parameter='NLS_DATE_FORMAT';

PARAMETER
------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
NLS_DATE_FORMAT
yyyy/mm/dd

システム変数

showで照会し、setで設定する。大文字でも小文字でも指定可。 [2004-10-02]
show all」で全変数の内容を表示する。
help set」で変数一覧(超概要説明)が表示される。

システム変数 説明 更新日
SHOWMODE SHOW OFF、ON setによって値を変更した場合に、新旧の値を表示するかどうか。 2008-02-20
HEADSEP HEADS 文字 select結果の見出し(項目名)を表示する際の、各項目の区切り文字。  
UNDERLINE UND 文字、OFF select結果の見出しに下線を引くための文字。  
COLSEP   文字 select結果の値を表示する際の、各項目の区切り文字。  
HEADING HEA OFF、ON select結果の見出し(項目名)を表示するかどうかを制御。  
FEEDBACK FEED 数値、OFF select結果の「〜行が選択されました。」を、何行以上の結果があると表示するかを制御。  
LINESIZE LINE 数値 1行に表示される文字数。  
PAGESIZE PAGES 数値 ページの行数。0にすると、見出し等も出なくなる。  
PAUSE PAU OFF、ON、
文字列
ONにすると、ページ毎にEnterキーを押さないと SQLの実行結果が表示されなくなる。(1ページはPAGESで指定した行数) 2008-02-20
NULL   文字列 selectした結果の値がnullの時に表示する文字列。  
NUMFORMAT NUMF 数値書式 select結果の数値を表示する際の書式。 2008-02-15
ECHO   OFF、ON ファイル(スプール)出力において、実行したSQL文も出力するかどうかを制御。(onのとき、出力する) 2006-11-22
TRIMSPOOL TRIMS ON、OFF ファイル(スプール)出力において、各行の端のスペースを出すかどうかを制御。 (onのとき、スペースを出力しない)  
TERMOUT TERM OFF、ON コマンドファイルから実行したコマンドの実行結果を表示(端末出力)するかどうかを制御。(onのとき、出力する)  
USER   参照のみ 現在ログイン中のユーザー名を表示。 2005-05-15
ERRORS ERR 参照のみ FUNCTIONPROCEDUREユーザー定義型を定義した際のエラー内容を表示。 2005-05-15
SQLCODE   参照のみ 直前に実行したSQLの結果(戻り値)を表示。 2008-02-05
RECYCLEBIN RECYC 参照のみ (Oracle10gで導入された)リサイクルビンに入っているオブジェクトを表示。
(sqlplus自身のバージョンがOracle10gでないと使えない)
2005-06-26
PARAMETERS PARAMETER 参照のみ DBMSのパラメーターを表示する。
sysdbaのユーザーでのみ使用可能。
2009-01-06
TIME TI OFF、ON ONにすると、プロンプトの「SQL>」の左側に現在時刻を表示する。 2007-10-30
TIMING TIMI ON、OFF ONにすると、SQL実行の終了時に経過時間を1/100秒単位で表示する。
これとは別に、timingというコマンドもある。
2006-06-03
DEFINE DEF 文字、ON、OFF 置換変数で使う文字。OFFだと置換変数を使用できなくなる。ONだとデフォルトの「&」になる。 2006-07-08
VERIFY VER ON、OFF 置換変数を使った場合に、新旧の値を表示するかどうか。 2008-02-20
CONCAT CON 文字、OFF、ON 置換変数結合に使用する文字。デフォルトは「.(ピリオド)」。 2008-04-26
ESCAPE ESC 文字、OFF、ON 識別子や文字列のエスケープに使用する文字。→使用例
例えば置換変数で使う文字をエスケープして、置換変数の文字そのものを出せるようになる。
2007-06-26
RELEASE REL 参照のみ 接続先DBのバージョンを表示。 2008-02-05
SQLPROMPT SQLP 文字列 SQL*Plusのプロンプト。デフォルトは「SQL>」 2008-01-14
SQLNUMBER SQLN ON、OFF 複数行にまたがってSQL文を書く場合のプロンプトに行番号を出すかどうか。
OFFにすると出なくなるが、非常に分かりにくくなる(苦笑)
2008-01-14
SQLCONTINUE SQLCO 文字列 行の末尾に「-(ハイフン)」を付けて行を継続した際に表示されるプロンプト。デフォルトは「> 」 2008-01-14
SQLTERMINATOR SQLT 文字 SQL文の末尾を示す文字。デフォルトは「;(セミコロン)」。 2008-01-14
BLOCKTERMINATOR BLO 文字 SQLを実行せずにバッファへ格納することを示す文字。デフォルトは「.(ピリオド)」。 2008-01-14
SUFFIX SUF 文字列 スクリプトファイルのデフォルトの拡張子。 2008-02-06
SERVEROUTPUT SERVEROUT OFF、ON dbms_outputを使用したメッセージ出力の表示有無を制御。→使用例 2007-06-26
AUTOTRACE AUTOT OFF、ON、
TRACEONLY
ON EXP」にすると、SQLの実行結果を表示した後に実行計画を表示する。
TRACE EXP」にすると(実行結果を表示せずに)実行計画だけ表示する。
2007-12-30

置換変数

SQL*PlusのコマンドやSQL文の実行時にメッセージを表示し、文字列部分に値を入力できる。[2006-07-08]
&文字列」の部分が、入力した値に置き換えられる。(「&」はデフォルトであり、DEFINEによって変えられる)
(置換変数の文字そのものを表示したい場合は、エスケープ文字を使用する。[2007-06-26]

SQL> select '&var&hoge' from dual;
varに値を入力してください: aa
hogeに値を入力してください: bb
旧 1: select '&var&hoge' from dual
新 1: select 'aabb' from dual

'AAB
----
aabb
SQL> select &col from emp;
colに値を入力してください: empno
旧 1: select &col from emp
新 1: select empno from emp

EMPNO
----------
7369
〜

PL/SQLにも使用可能。

「&」1つだと、置換変数に値をセットしない限り、実行時に何度でも値の入力を求められる。[2008-04-26]
「&&」の様に2つにすると、一度目で入力した値がその置換変数に保持され、二度目からはその値が使用される。

SQL> select &&col from emp;

また、SQL*Plusの起動時にファイルを読み込んで実行する場合、引数を指定することが出来る。
これは「&数値」という形になり、&1が1番目の引数を表す。

test.sql:

spool &1
select '引数2は&2' as 引数2 from dual;
exit
>sqlplus -s hishidama @test.sql zzz.txt arg2
旧 1: select '引数2は&2' as 引数2 from dual
新 1: select '引数2はarg2' as 引数2 from dual

引数2
-----------
引数2はarg2

spool命令の引数もちゃんと置換されるので、zzz.txtにも同じ内容が出力される。

ここで引数が無かった場合にその番号(例えば上記では&3)を使うと、&文字列と同じく値の入力が要求される。


defineコマンドを使うと、現在定義されている置換変数を知ることが出来る。

SQL> define
DEFINE _CONNECT_IDENTIFIER = "ora92" (CHAR)			…暗黙に色々定義されているらしい
DEFINE _SQLPLUS_RELEASE = "902000100" (CHAR)
DEFINE _EDITOR = "Notepad" (CHAR)
DEFINE _O_VERSION = "Oracle9i Release 9.2.0.1.0 - Production	…バージョンっぽいのもある。v$versionと関係あるのかな?
JServer Release 9.2.0.1.0 - Production" (CHAR)
DEFINE _O_RELEASE = "902000100" (CHAR)
DEFINE 1 = "zzz.txt" (CHAR)					…起動時の引数もある
DEFINE 2 = "arg2" (CHAR)

defineコマンドによって値を定義しておくと 使用時に値の入力が要求されなくなり、定義した値が使われる。

SQL> select '&var' from dual;
varに値を入力してください: zzz	…最初は定義されていないので、値の入力が要求される
旧 1: select '&var' from dual
新 1: select 'zzz' from dual

'ZZ
---
zzz

SQL> def var=abc			…値を定義する
SQL> def var			…定義した値の確認
DEFINE VAR = "abc" (CHAR)

SQL> r
1* select '&var' from dual
旧 1: select '&var' from dual	…値の入力が要求されずに置換が実行される
新 1: select 'abc' from dual

'AB
---
abc

ピリオドは置換後の文字列との結合に使える。[2008-04-26]
(ピリオドはデフォルト値であり、システム変数CONCATによって変更可能)

SQL> select &var.no from emp;
varに値を入力してください: dept
旧   1: select &var.no from emp
新   1: select deptno from emp

    DEPTNO
----------
        20
〜

システム変数のverifyをoffにすれば、置換時の旧・新の情報は表示されなくなる。[2008-02-20]

SQL> set ver off
SQL> select '&var' from dual;
varに値を入力してください: zzz

'ZZ
---
zzz

acceptコマンドを使うと、ユーザーからの入力によって置換変数の値をセットすることが出来る。[2008-04-26]

SQL> accept var
zzz

acceptではオプションを指定することが出来る。(defineでは出来ない)

オプション 概要
NUMBER
CHAR
DATE
NUM

 
変数の属性
FORMAT 書式 FOR 書式
DEFAULT 規定値 DEF 入力が省略された場合(Enterのみ押した場合)の値
PROMPT プロンプト
NOPROMPT

NOPR
ユーザーへの入力を促すメッセージの指定
HIDE   ユーザーの入力した文字が「*」で表示される。
つまりパスワードを入力するような感じになる。
SQL> acc var num prompt 数値を入れてください:
数値を入れてください:zzz
SP2-0425: "zzz"は有効な数値ではありません。
数値を入れてください:123

置換変数を削除するにはundefineコマンドを使う。[2007-12-30]

SQL> undef var

バインド変数

SQL*Plusのバインド変数とは、SQL*PlusとPL/SQLとの間で共有できる変数。[2007-12-30]
SQL*Plusで代入してPL/SQLから使ったり、PL/SQLで代入してSQL*Plusから参照したり出来る。

PL/SQLはDBサーバー上で実行されるものであり、SQL*Plusはクライアントのツール。
したがってバインド変数の使用はサーバー(PL/SQL)とクライアント(SQL*Plus)間で通信が発生するらしい。

バインド変数の定義はvariableコマンドを使う。
バインド変数への代入はexecuteコマンドによる代入文・SELECT INTO文か、call〜intoを使う。[/2008-02-06]
バインド変数の参照はprintコマンドを使う。

SQL> variable v1 char(6)
SQL> execute :v1 := 'ABC' || 'DEF'

PL/SQLプロシージャが正常に完了しました。

SQL> print :v1

V1
--------------------------------
ABCDEF
SQL> var v2 number
SQL> exec select max(empno) into :v2 from emp

PL/SQLプロシージャが正常に完了しました。

SQL> print v2

        V2
----------
      7934
SQL> var v3 char(6)
SQL> call test_f('ABC') into :v3;

コールが完了しました。

SQL> print v3

V3
--------------------------------
ABCABC
文法 説明 備考
var バインド変数名 型 バインド変数を定義する。型を変更した再定義も可能。 初期値はNULL。
var バインド変数名 バインド変数の定義を表示する。  
var 全バインド変数の定義を表示する。  
print バインド変数名 〔バインド変数名…〕 バインド変数の値を表示する。 値がNULLの場合、「set null」で定義した文字列が表示される。
print 全バインド変数の値を表示する。  

参考: SHIFT the OracleVARIABLE

バインド変数の使用例


SQL Developerへ行く / Oracle目次へ戻る / 新機能へ戻る / 技術メモへ戻る
メールの送信先:ひしだま