Oracle PL / SQL函数返回行或rowid

时间:2019-06-05 16:22:55

标签: oracle plsql oracle11g pipelined-function

我想编写一个函数,该函数返回可以在应用程序网格中显示的表记录。我的应用程序将忽略表的结构。我希望当有人向表中添加或删除列时,它仍能正常工作。

在我的应用中,它看起来应该像这样:

myQuery = "select * from table(myfunction)";
...

该功能因此应类似于:

CREATE OR REPLACE FUNCTION myfunction RETURN TABLE OF mytable%ROWTYPE AS ...

但是不允许RETURN TABLE OF mytable%ROWTYPE。必须创建一种SQL类型。

但是CREATE TYPE table_of_mytable_rows IS TABLE OF mytable%ROWTYPE也不允许。

那么,有没有一种方法可以完全实现我想要的?

作为替代方案,我想到了使用ID。这会使我的应用代码看起来像这样:

myQuery = "select * from mytable where rowid in (select * from table(myfunction))";
...

然后函数将是

CREATE OR REPLACE FUNCTION myfunction RETURN TABLE OF UROWID AS ...

但是同样,不允许RETURN TABLE OF UROWID。都不用CREATE TYPE table_of_rowids IS TABLE OF UROWID创建SQL表类型。

我知道我可以创建类似于表的主键列的对象类型,然后在此对象上创建表类型。然后我的应用程序必须知道表的主键才能

myQuery = "select * from mytable where (key1, key2) in (select key1, key2 from table(myfunction))";
...

我更希望函数返回表行或行ID。这可能吗?

我目前仍在使用Oracle 11.2,但我也对较新版本的解决方案感兴趣。

0 个答案:

没有答案