gpt4 book ai didi

sql - 是否可以使用模式匹配从 Oracle SQL 数据库中选择列?

转载 作者:行者123 更新时间:2023-12-05 01:34:19 25 4
gpt4 key购买 nike

我在 Oracle SQL DB 中有一个表,其中的列的标题如“PERCENT_”以及其他名称。我想选择所有带有“PERCENT_”前缀的列。

我已经找到了一些问题来回答诸如如何在数据库中找到所有列与特定模式匹配的表......但似乎没有一个能回答这个特定问题。

这能做到吗?我能够返回与“all_tab_columns”匹配的所有列名的列表

select column_name from all_tab_columns where column_name like 'PERCENT_%' from <table_name>

但是我可以做这样的事情来从我想要的表格中选择那些列吗?

with desired_cols as (select column_name from all_tab_columns where column_name like 'PERCENT_%' from <table_name>)
select desired_cols from <table_name>

最佳答案

SQL 查询总是返回一组固定的、预定义的列。您所要求的需要动态 SQL:即,运行一个收集列名的查询,将结果保存在一个变量中,并使用它来构建要执行的实际查询。

如果这是一次性查询,那么我建议只运行以下查询:

select 'select ' 
|| listagg('"' || column_name || '"', ', ') within group (order by column_id)
|| ' from mytable' as sql_query
from all_tab_columns
where owner = 'MYSCHEMA' and table_name = 'MYTABLE' and column_name like 'PERCENT_%';

这会生成您想要的查询,然后您可以复制/粘贴并独立运行。

请注意,我在模式名称上添加了一个过滤器(这是唯一标识数据库中的表所必需的)。我还根据列在表格中的位置对它们进行了排序。

另一方面,如果您想要完全动态的东西,那么您可以构建一个函数,该函数将返回一个包含查询结果的游标。

create function myfunction return sys_refcursor
as
v_sql varchar(1000);
v_cursor sys_refcursor;
begin
select 'select '
|| listagg('"' || column_name || '"', ', ') within group (order by column_id)
|| ' from mytable' as sql_query
into v_sql
from all_tab_columns
where table_name = 'MYTABLE' and column_name like 'PERCENT_%';

open v_cursor for v_sql;
return v_cursor;
end;
/

然后,您必须决定如何使用光标。

关于sql - 是否可以使用模式匹配从 Oracle SQL 数据库中选择列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63800847/

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