パッケージ仕様にカーソル(複数の表結合を含む)があります。パイプライン関数の戻り値の型を欲しかったので書きました。しかし、コンパイルすると以下のエラーが出ます。Oracle 12cの機能がパッケージ仕様で機能していない
[error] ora-00905 (4: 23): pl/sql: ora-00905: missing keyword
[error] pls-00103 (6: 15): pls-00103: encountered the symbol "BEGIN" when expecting one of the following:
end function pragma procedure subtype type <an identifier>
<a double-quoted delimited-identifier> current cursor d
[error] pls-00103 (25: 14): pls-00103: encountered the symbol "S" when expecting one of the following:
end not pragma final instantiable order overriding static
member constructor map.
本文にカーソルを移動できますか?
CREATE OR REPLACE PACKAGE pkg_test AS
CURSOR cur_match IS
WITH FUNCTION Fun(p_id varchar2) RETURN varchar2 IS
v_desc VARCHAR2(100);
BEGIN
v_desc := CASE p_id WHEN NULL THEN '123' WHEN 'A' THEN '345' WHEN 'B' THEN '678'
END;
RETURN v_desc;
END;
s AS (SELECT sysdate FROM dual)
SELECT s.*,Fun('X') FROM s;
TYPE tab_cur IS TABLE OF cur_match%ROWTYPE;
FUNCTION get_data RETURN tab_cur PIPELINED;
END;
WITH FUNCTION構文は、主にユーザーがPL/SQL機能を必要とするが、データベース・オブジェクトの作成を許可されていない状況でSQL用に設計されています。あなたは**パッケージを書いています**ので、あなたはパッケージ仕様の中でパブリック関数を定義し、それをパッケージのどこかで呼び出すことができます。 – APC