用户在Where子句中创建函数

时间:2012-03-29 15:57:48

标签: sql oracle plsql

我正在尝试简化一些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 个答案:

答案 0 :(得分:4)

您是考虑过观点还是subquery factoring clause而不是创建函数?函数可能会产生不良的性能影响,而优化程序很容易评估视图和CTE。

答案 1 :(得分:2)

你需要创建一个这样的类型:

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'));