Функция Oracle PL / SQL для возврата строк или строк - PullRequest
0 голосов
/ 05 июня 2019

Я хочу написать функцию, которая возвращает записи таблицы, которые я могу показать в сетке моего приложения. Мое приложение не должно учитывать структуру таблицы. Я хочу, чтобы он все еще работал, когда кто-то добавляет столбцы в таблицу или удаляет их.

В моем приложении это будет выглядеть примерно так:

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 также не разрешен.

Итак, есть ли способ достичь именно того, чего я хочу?

В качестве альтернативы я подумал о работе с идентификаторами. Это заставило бы код моего приложения выглядеть примерно так:

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 не допускается. Также не создается тип таблицы SQL с CREATE TYPE table_of_rowids IS TABLE OF UROWID.

Я знаю, что мог бы создать тип объекта, похожий на столбцы первичного ключа таблицы, а затем создать тип таблицы для этого объекта. Тогда мое приложение должно знать первичный ключ таблицы, чтобы

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

Я бы предпочел, чтобы моя функция возвращала строки таблицы или строки. Это возможно?

В настоящее время я все еще работаю над Oracle 11.2, но мне также будут интересны решения для более новых версий.

...