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;