名前が競合しています。ドキュメントに記載されているように、ローカル変数を列名と同じように呼び出し、列名が優先されます。
SQLステートメントが、列とローカル変数または仮パラメーターの両方に属する名前を参照している場合は、列名が優先されます。
注意:
変数またはパラメータ名が列名として解釈されると、データが意図せずに削除、変更、または挿入される可能性があります。
最初の4つのチェックは常にtrueになるため(null値がない限り)、done = 'N'
を持つすべての行が取得されます。 。
ローカル変数名を別の名前に変更します。ローカル変数、パラメータ、列を区別するためにプレフィックスを使用することはかなり一般的です。たとえば、次のようになります。
Cursor linija IS
SELECT *
FROM table_x X
where x.mjt = l_mjt
and x.salesman = l_salesman
and x.kind = l_kind
and x.kolo1 = l_kolo1
and x.done = 'N';
これが匿名ブロックではなくストアドプロシージャにある場合は、プロシージャ/関数名をプレフィックスとして使用できます。これは一部の人が好むものです。プロシージャがmyproc
と呼ばれた場合 、たとえば、次のことができます。
Cursor linija IS
SELECT *
FROM table_x X
where x.mjt = myproc.mjt
and x.salesman = myproc.salesman
and x.kind = myproc.kind
and x.kolo1 = myproc.kolo1
and x.done = 'N';