gpt4 book ai didi

oracle - ORACLE 11g 中的表值函数? (参数化 View )

转载 作者:行者123 更新时间:2023-12-04 00:43:18 24 4
gpt4 key购买 nike

我以前看过这方面的讨论,比如here .但我想知道是否在某个地方,也许是 10g 或 11g(我们正在使用 11g),ORACLE 引入了对“参数化 View ”的任何更好的支持,而无需用各种用户定义的类型和/或游标定义或 sys_context 变量。

我希望 ORACLE 可能会根据 T-SQL 中的以下示例添加对简单“有效”的东西的支持:

CREATE FUNCTION [dbo].[getSomeData] (@PRODID ROWID)  
RETURNS TABLE AS
RETURN SELECT PRODID, A, B, C, D, E
FROM MY_TABLE
WHERE PRODID = @PRODID

然后只需选择它:
SELECT * FROM dbo.getSomeData(23)

最佳答案

不需要 SYS_CONTEXT 或游标定义。
您确实需要一个类型,以便在解析 SQL 时,它可以确定将要返回哪些列。
也就是说,您可以轻松编写一个脚本,该脚本将根据 user_tab_columns 中的数据为一个或多个表生成类型和集合类型定义。

最接近的是

create table my_table
(prodid number, a varchar2(1), b varchar2(1),
c varchar2(1), d varchar2(1), e varchar2(1));

create type my_tab_type is object
(prodid number, a varchar2(1), b varchar2(1),
c varchar2(1), d varchar2(1), e varchar2(1))
.
/

create type my_tab_type_coll is table of my_tab_type;
/

create or replace function get_some_data (p_val in number)
return my_tab_type_coll pipelined is
begin
FOR i in (select * from my_table where prodid=p_val) loop
pipe row(my_tab_type(i.prodid,i.a,i.b,i.c,i.d,i.e));
end loop;
return;
end;
/

SELECT * FROM table(get_Some_Data(3));

关于oracle - ORACLE 11g 中的表值函数? (参数化 View ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2059299/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com