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

動的SQLを実行するOraclePL/ SQL匿名ブロックから結果セット/カーソルを返す方法は?

    PL / SQL関数を記述して、そのカーソルを返すことができます(または、これに関連するコードがさらにある場合は、その関数をパッケージに入れることができます):

    CREATE OR REPLACE FUNCTION get_allitems
      RETURN SYS_REFCURSOR
    AS
      my_cursor SYS_REFCURSOR;
    BEGIN
      OPEN my_cursor FOR SELECT * FROM allitems;
      RETURN my_cursor;
    END get_allitems;
    

    これでカーソルが戻ります。

    SELECTを入れないように注意してください -可能な場合は、PL/SQLで引用符で囲みます。文字列に入れると、コンパイル時にチェックできず、使用するたびに解析する必要があります。

    動的SQLを本当に使用する必要がある場合は、クエリを一重引用符で囲むことができます。

      OPEN my_cursor FOR 'SELECT * FROM allitems';
    

    この文字列は、関数が呼び出されるたびに解析する必要があります。これは通常、速度が遅く、実行時までクエリのエラーを隠します。

    ハード解析を回避するために、可能な場合はバインド変数を使用してください:

      OPEN my_cursor FOR 'SELECT * FROM allitems WHERE id = :id' USING my_id;
    


    1. Microsoft SQL Serverによるアクセス–SSISを使用した大規模なデータセットのインポート

    2. SQLServerの関数とストアドプロシージャ

    3. Webから実行するとクエリはタイムアウトしますが、SSMSから実行すると超高速になります

    4. 初心者のためのSQLLIKE演算子