0

我们如何在 TABLE 函数中访问对象类型(不是对象表)?

table 函数适用于对象集合,但我需要使用 TABLE 函数访问单行。

当我尝试将 TABLE 函数与对象类型而不是对象类型的集合一起使用时,出现错误“ORA-22905:无法访问非嵌套表项中的行”。

我使用的解决方法是在这个对象上创建一个表类型集合并将行放在第一个索引中,然后在函数中使用表类型。还有其他简单的解决方案吗?

我需要像查询表中的一行一样查询对象。这是为了在我的应用程序中有一个通用的代码库来支持两种不同的用例。

使用通用代码库,我可以使用相同的 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