0

我想编写一个函数来返回可以在我的应用程序网格中显示的表记录。我的应用程序将忘记表格的结构。当有人向表中添加列或删除它们时,我希望它仍然有效。

在我的应用程序中,它看起来应该是这样的:

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.

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

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

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

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

4

0 回答 0