簡體   English   中英

Oracle SQL:如何通過視圖中的列將參數傳遞給視圖中使用的 function?

[英]Oracle SQL: how to pass parameter to a function that is used in a view through a column in a view?

假設我們有這樣的視圖,它使用帶有硬編碼參數的 function:

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

如果我想通過視圖將該參數傳遞給 function,有哪些可能的選項? 請注意,不能選擇使用全局或上下文/綁定變量。 到目前為止,我想出了一個選項來使用一個包含所有可用參數值(鍵)的表,這些參數值(鍵)可以傳遞給視圖:

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

但是,我想知道是否還有其他可能的選擇?

您不能將參數傳遞給視圖,但可以使用下一個替代方法:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM