2017-05-12 6 views
1

パッケージ仕様にカーソル(複数の表結合を含む)があります。パイプライン関数の戻り値の型を欲しかったので書きました。しかし、コンパイルすると以下のエラーが出ます。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; 
+0

WITH FUNCTION構文は、主にユーザーがPL/SQL機能を必要とするが、データベース・オブジェクトの作成を許可されていない状況でSQL用に設計されています。あなたは**パッケージを書いています**ので、あなたはパッケージ仕様の中でパブリック関数を定義し、それをパッケージのどこかで呼び出すことができます。 – APC

答えて

2

これによると::

https://oracle-base.com/articles/12c/with-clause-enhancements-12cr1

WITH FUNCTIONにはPLSQLサポートはありませんが、つまりはすることはできませんが、私は、パイプライン関数の戻り値の型以下

はサンプルパッケージである必要がありますPLSQLブロック内で使用されます。

おそらく、そのクエリでVIEWを作成し、PLSQLブロックでそのビューを参照することができます。

+0

ありがとう!おそらく私はあまりにも貪欲であったかもしれません:-) –

+0

これは、ダイナミックSQLを使用することで、この制限を回避できることを示しています。「PL/SQL内の静的SQLを使用したこの機能のサポートは、 –

関連する問題