sql >> データベース >  >> RDS >> Oracle

クエリよりも多くの値を返すプロシージャ内のカーソル

    名前が競合しています。ドキュメントに記載されているように、ローカル変数を列名と同じように呼び出し、列名が優先されます。

    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';
    


    1. 表領域の空き領域を確認する

    2. EMSQLモニターへの影響

    3. MySQLはデータベースにインデックスを表示します

    4. freeTDSはその構成を使用していません