0

TABLE関数でオブジェクトタイプ(オブジェクトのテーブルではない)にアクセスするにはどうすればよいですか?

テーブル関数はオブジェクトのコレクションに対して機能しますが、TABLE 関数を使用して単一の行にアクセスする必要があります。

オブジェクト型のコレクションではなくオブジェクト型で TABLE 関数を使用しようとすると、「ORA-22905: ネストされていないテーブル項目から行にアクセスできません」というエラーが表示されます。

私が使用する回避策は、このオブジェクトにテーブル タイプのコレクションを作成し、行を最初のインデックスに配置してから、関数でテーブル タイプを使用することです。他の簡単な解決策はありますか?

オブジェクトをテーブルの行であるかのようにクエリする必要があります。これは、2 つの異なるユース ケースをサポートするために、アプリケーションに共通のコード ベースを持たせるためです。

共通のコード ベースを使用して、同じ SELECT クエリを使用して、実際のテーブルから、または TABLE 関数を使用して単一行オブジェクトからレコードをクエリできます。動的 SQL の FROM 句のみが変更されます。

CASE 1: 
Querying a physical table

v_select := 'SELECT a,b,c,d '
v_from   := '  FROM ' || v_actual_table 
v_where  := '<where_predicate>

EXECUTE IMMEDIATE v_select || v_from  || v_where;


CASE 2:
Querying a row object using TABLE function. The row object is coming from Oracle AQ channel in the form of messages.

v_select := 'SELECT a,b,c,d '
v_from   := '  FROM TABLE(:1)' 
v_where  := '<where_predicate>

EXECUTE IMMEDIATE v_select || v_from  || v_where USING v_table_type;

これが明確になることを願っています。

4

0 に答える 0