oraclesql:如何通过视图中的列将参数传递给视图中使用的函数?

tpgth1q7  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(435)

假设我们有这样一个视图,它使用带有硬编码参数的函数:

CREATE OR REPLACE VIEW x AS
SELECT t.some_value
  FROM table(function(p1 => '1')) t;

如果要通过视图将该参数传递给函数,有哪些可能的选项?请注意,使用全局或上下文/绑定变量不是一个选项。到目前为止,我提出了一个选项,可以使用一个表来保存可以传递给视图的所有可用参数值(键):

CREATE OR REPLACE VIEW x AS
SELECT st.input_param,
       t.some_value
  FROM some_table st
       table(function(p1 => st.input_param)) t;

不过,我想知道是否还有其他可能的选择?

8tntrjer

8tntrjer1#

不能将参数传递给视图,但可以使用下一种替代方法:

CREATE TYPE RECORDS_VARCHAR AS TABLE OF VARCHAR2(100);

create or replace function virtual_table( input_param number )
return RECORDS_VARCHAR
PIPELINED
is

begin
FOR a IN (
            select '1' AS VALUE from dual where input_param = 2
            UNION ALL
            select '8' AS VALUE from dual
          ) loop
pipe row (a.VALUE);
end loop;
return;
end;

SELECT * FROM TABLE(virtual_table(2)); --1,8

SELECT * FROM TABLE(virtual_table(1)); --8

相关问题