пользовательские функции в предложении Where - PullRequest
2 голосов
/ 29 марта 2012

Я пытаюсь упростить некоторые sql .. сейчас я делаю следующее в качестве примера

SELECT 
 * 
FROM 
 test_table 
WHERE
 test_table.apples in 
  ( 
   SELECT 
    condition 
   FROM 
    lookup_table
   WHERE 
    lookup_table.condition1="blah1"
   AND
    lookup_table.condition2="blah2"
   AND
    lookup_table.condition3="blah3"
  )

я хочу заменить свой подзапрос функцией с параметрами например

lookup('parameter1','paramater2','paramiter3')..

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

Спасибо!

Ответы [ 2 ]

4 голосов
/ 29 марта 2012

Вместо того, чтобы создавать функции, рассматривали ли вы представления или условие разложения подзапроса *1002*?Функции могут оказывать нежелательное влияние на производительность, тогда как представления и CTE легко оцениваются оптимизатором.

2 голосов
/ 29 марта 2012

Вам необходимо создать тип, подобный этому:

create type mytabtype is table of varchar2(100);

Тогда ваша функция может вернуть этот тип, и вы будете использовать его следующим образом:

SELECT 
 * 
FROM 
 test_table 
WHERE
 test_table.apples in (SELECT column_value 
                       FROM TABLE(lookup('parameter1','paramater2','paramiter3'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...