私はOracle 12cとOracle SQL Developerを使用してパッケージを作成しています。私の意図は、SELECT * FROM table(test2.get_ups(0));
のようなSQL文からパッケージに値を渡すことです。私は、IDEでSQL SELECT文を実行するようなテーブルを返す必要があります。関数からテーブルを返すにはどうすればよいですか?
これは私のパッケージです。私はこの問題を解決するにはどうすればよい
PLS-00103: Encountered the symbol "FOR" when expecting one of the following: begin function pragma procedure subtype type <an identifier> <a double-quoted delimited-identifier> current cursor delete exists prior The symbol "begin" was substituted for "FOR" to continue.
:私がコンパイルしようとすると、私は次のエラーを取得しますか?ここで
はパッケージです:
CREATE OR REPLACE PACKAGE test2 AS
TYPE measure_record IS RECORD(
x_start VARCHAR2(50),
x_end VARCHAR2(50),
trip_count NUMBER);
TYPE measure_table IS TABLE OF measure_record;
FUNCTION get_ups(x number)
RETURN measure_table
PIPELINED;
END;
/
CREATE OR REPLACE PACKAGE BODY test2 AS
FUNCTION get_ups(x number) RETURN measure_table
PIPELINED as
cursor temp_cur is
SELECT x1, x2, count(*) FROM t1 WHERE x1 = x;
for cur_rec in temp_cur
loop
pipe row(cur_rec);
end loop;
RETURN;
END get_ups;
END;
大体、私は同意します。カーソルはパラメータ化されているため、少し異なって見えるはずです。同様に、カーソルtemp_cur(x NUMBER)は '... –
@PatrickBaconカーソルは関数パラメータを参照することができ、' X'はカーソルパラメータで渡す必要はありません。 –
@WernfriedDomscheitそれは私のために12.2で動作しません。私が知る限り、PL/SQLレコード・タイプにはデフォルトのコンストラクタはなく、個別に組み立てる必要があります。レコードとテーブル型がSQL型として定義されていれば、それはうまくいくはずです。 –