gpt4 book ai didi

Oracle PL/SQL 查询嵌套表集合和值键名

转载 作者:行者123 更新时间:2023-12-02 01:57:49 25 4
gpt4 key购买 nike

我正在寻找一个嵌套表,这样我就可以使用查询来重新排序值。由于没有键名,我想知道列名是什么?

我知道这不是正确的语法,但它说明了我想要实现的目标。

CREATE OR REPLACE TYPE a_nested_table AS TABLE OF VARCHAR2(20);

CREATE OR REPLACE FUNCTION my_func RETURN VARCHAR2 IS
output VARCHAR2;
list a_nested_table := a_nested_table('foo', 'bar');
BEGIN
FOR current_record IN(
SELECT column_name INTO bar
FROM TABLE(CAST(list AS a_nested_table))
ORDER BY UPPER(column_name) ASC
) LOOP
output := output || current_record.column_name
END LOOP;

return output;
END my_func;

最佳答案

如果您是 11.2 或更高版本,则可以使用 LISTAGG 函数:

create or replace type a_nested_table as table of varchar2(20);

create or replace function my_func return varchar2 is
result varchar2(4000);
list a_nested_table := a_nested_table('aa', 'bb', 'cc', 'dd', 'ee');
begin
select listagg(column_value, ' ') within group(order by column_value desc)
into result
from table(list);

return(result);
end my_func;

...

SQL> select my_func from dual;
MY_FUNC
--------------------------------------------------------------------------------
ee dd cc bb aa

有关使用 LISTAGG 函数的更多信息,请参阅 documentation .

更新:

对于 10g 版本:

create or replace type a_nested_table is table of varchar(20);

create or replace function my_func return varchar2 is
list a_nested_table := a_nested_table('aa', 'bb', 'cc', 'dd', 'ee');
result varchar2(4000);
begin
for c1 in (select column_value col_val from table(list) order by 1 desc) loop
result := result || ' ' || c1.col_val;
end loop;
return result;
end my_func;

SQL> select my_func from dual;
MY_FUNC
--------------------------------------------------------------------------------
ee dd cc bb aa

关于Oracle PL/SQL 查询嵌套表集合和值键名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18906461/

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