あなたはSQL * PlusでOracleでバインド変数と置換変数の違いについていくつかの混乱を持っているように見えます。
まずは置換変数から始めましょう。置換変数はSQL * Plus固有のもので、データベースの一部ではありません。たとえば、JDBCでそれらを使用しようとするとうまくいきません。
置換変数は、テキストを保持することができます。 SQL * Plusは入力の行に置換変数に遭遇した場合、それは、そのテキストの内容を変数に置き換えられます:SQL * Plusは、それかどうかとは関係なく、そのテキスト値で、当社の置換変数を置き換えること
SQL> define subvar=X
SQL> select * from dual where dummy = &subvar;
old 1: select * from dual where dummy = &subvar
new 1: select * from dual where dummy = X
select * from dual where dummy = X
*
ERROR at line 1:
ORA-00904: "X": invalid identifier
注
私たちに有効なSQLを与えました。上記の例では、
&subvar
を一重引用符で囲まずに無効なSQLを与えているので、エラーが発生しました。
old
およびnew
から始まる行は、SQL * Plusが置換変数を適用する前後に入力した行を示しています。 new
行は、データベースが実行しようとした行です。
SET VERIFY ON
とSET VERIFY OFF
を使用して、old
とnew
行の表示を有効または無効にすることができます。 SET DEFINE ON
とSET DEFINE OFF
を使用して、置換変数の置換をオンまたはオフにすることもできます。その後、
SQL> select * from dual where dummy = '&subvar';
old 1: select * from dual where dummy = '&subvar'
new 1: select * from dual where dummy = 'X'
D
-
X
&subvar
が有効な番号(例えば5
)した文字列が含まれているために発生した場合、我々は:
我々は置換変数を使用して上記のクエリを実行したい場合は、我々はそれ引用符で囲む必要があります引用符を使用せずに逃げることができますが、これは、テキスト&subvar
を取り出し、それをテキスト5
と置き換えると、有効なSQLが返されるからです。
例えば、我々はそれに次のデータとのtest
と呼ばれるテーブルがあるとします。
A
----------
1
2
3
4
5
はその後、我々は、他の一方で、種類があり、
SQL> define subvar=5
SQL> select * from test where a = &subvar;
old 1: select * from test where a = &subvar
new 1: select * from test where a = 5
A
----------
5
バインド変数を行うことができます。単純なテキスト値ではありません。それらの値はデータベースに送られ、データベースはその値を設定することもできます。あなたはそれを使用したいときは、バインド変数の前後に引用符を入れないでください
SQL> variable bindvar varchar2(1);
SQL> exec :bindvar := 'X';
PL/SQL procedure successfully completed.
:DUAL
テーブルが持つ行がありませんので、上記の2番目の例では
SQL> select * from dual where dummy = :bindvar;
D
-
X
SQL> select * from dual where dummy = ':bindvar';
no rows selected
、我々は何も行を返さないしまいましたテキスト:bindvar
を含むDUMMY
列。
あなたがバインド変数に間違った型の値を代入しようとすると、エラーになります:
SQL> variable bindvar number;
SQL> exec :bindvar := 'X';
BEGIN :bindvar := 'X'; END;
*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error: character to number conversion error
ORA-06512: at line 1
バインド変数は、データベースの標準的な部分であり、あなたはJDBCでそれらを使用することができますまたは選択したデータベースに接続する方法を選択します。
最後に、variable num1 number
とvar num1 number
の両方が同じことを意味します。両方とも、タイプnumber
のバインド変数num1
を定義します。 var
は、variable
の略語です。