パラメータ
パラメータを使用すると、SQL文の処理に使用される値をバインドできます。これらのパラメータは、?
を使用するか、SQL文内で:IDENTIFIER
を使用してマークされます。
ttIsql
は、SQL文のテキストを準備します。次に、パラメータ名に一致する変数を検索します。一致する変数がないパラメータの場合、ttIsql
は値の入力を求めます。?
を使用する場合のパラメータ名はQMARK_N
で、N
は1で始まり、文で?
が検出されるたびに増分されます。たとえば、QMARK_1
、QMARK_2
などです。:PARAM
の名前はPARAM
です。
動的パラメータによって、個別の行で各パラメータへの入力が求められます。パラメータの値は、SQLで1つのリテラルを指定するのと同じ方法で指定します。
パラメータ値はセミコロン文字で終了する必要があります。
指定可能な値の種類は次のとおりです。
-
数値リテラル。たとえば、
1234.5
です -
一重引用符で囲まれた時刻リテラル、日付リテラルまたはタイムスタンプ・リテラル。例:
'12:30:00' '2000-10-29' '2000-10-29 12:30:00'
-
先頭が
「N」
で始まる、一重引用符で囲まれたUnicode文字列リテラル。たとえば、N'abc'
です -
NULL値。たとえば、
NULL
です -
パラメータ入力処理が停止されることを示す「*」文字。たとえば、
*
です -
パラメータ入力ヘルプ情報を出力する「?」文字。たとえば、
?
です
この例は、
A
およびB
が変数ではなく動的パラメータであることを示しています。
Command> select * from dual where :a > 100 and :b < 100;
Type '?' for help on entering parameter values.
Type '*' to end prompting and abort the command.
Type '-' to leave the parameter unbound.
Type '/;' to leave the remaining parameters unbound and execute the command.
Enter Parameter 1 'A' (NUMBER) > 110
Enter Parameter 2 'B' (NUMBER) > 99
< X >
1 row found.
Command> print;
print
コマンドでは、動的パラメータであるため結果は表示されません。
この例では、
:a
および:b
が変数として使用され、パラメータとして使用されるが動的ではないことを示しています。
Command> var a number;
Command> exec :a := 110;
PL/SQL procedure successfully completed.
Command> print a;
A : 110
Command> var b number;
Command> exec :b := 99;
PL/SQL procedure successfully completed.
Command> select * from dual where :a > 100 and :b < 100;
< X >
1 row found.
Command> print;
A : 110
B : 99
この例では、
:a
と:b
の両方が変数であり、結合可能な動的パラメータ:c
があることを示しています。
Command> var a number;
Command> exec :a := 110;
Command> var b number;
Command> exec :b := 99;
Command> select * from dual where :a > 100 and :b < 100 and :c > 0;
Enter Parameter 3 'C' (NUMBER) > 1
< X >
1 row found.
Command> print;
A : 110
B : 99
この例では、
_QMARK_1
が宣言されていないため、ttIsql
はパラメータ値の入力を求めます。:a
パラメータには、値が110
のA
変数が入力されます。:b
には、値が99
のB
変数が入力されます。これらの値はエンジンに送信され、エンジンによって文が処理され、値abc11099
が返されます。Command> select cast(? as varchar2(10)) || :a || :b from dual;
Type '?' for help on entering parameter values.
Type '*' to end prompting and abort the command.
Type '-' to leave the parameter unbound.
Type '/;' to leave the remaining parameters unbound and execute the command.
Enter Parameter 1 '_QMARK_1' (VARCHAR2) > 'abc';
< abc11099 >
1 row found.