【问题标题】:Use output in select statement在选择语句中使用输出
【发布时间】:2017-12-02 17:18:21
【问题描述】:

我有一个案例,我必须在 select 语句中从 240 列中选择 100 列,因为我在下面的查询中使用了这 100 列,但无法在 select 语句中使用它们

查询:

select listagg(column_name,',') within group (order by column_name) as col_name
from all_tab_cols
where lower(column_name) like 'test%'

结果:

col_name
-----------------------------    
test1,test2,test3,....test100

预期输出:

在 select 语句中使用这些结果值

select test1,test2,test3.... test100 
from table;

提前致谢

【问题讨论】:

  • ...选择'从'中选择'|| listagg(column_name,',') 组内(按列名排序)|| 'from table' as qry ... 你是这个意思吗?然后在下一个查询中使用查询的输出。例如。使用立即执行。
  • 谢谢,是的,我期待同样的结果,但不知道如何使用立即执行
  • 嗯,肯定有一些应用程序你想从中运行它。因此,使用您的查询,根据其结果构建您的最终查询字符串并执行它。问题出在哪里?

标签: oracle oracle-sqldeveloper


【解决方案1】:

动态查询是您想要的。您可以在存储过程或函数中使用以下两个查询。

select listagg(column_name,',') WITHIN GROUP (ORDER BY column_name) as col_name INTO VAR_COL_DETAILS   
from all_tab_cols    
where lower(column_name) like 'test%'

execute IMMIDEATE 'SELECT '||VAR_COL_DETAILS|| 'FROM TABLE_NAME';   

【讨论】:

  • 谢谢,但执行上述查询时出现错误错误:缺少关键字
  • 我使用了下面的程序,但最终出现错误,创建程序 test_col 声明 @VAR_COL_DETAILS;开始 select listagg(column_name,',') WITHIN GROUP (ORDER BY column_name) as col_name INTO @VAR_COL_DETAILS from all_tab_cols where lower(column_name) like 'test%' execute IMMIDEATE 'SELECT '||VAR_COL_DETAILS|| '来自表名';结束;
  • 您需要使用此查询输出为光标或字符串。这取决于您。错误消息是因为在'test%'之后缺少分号(;)。
  • 你用的是mysql还是Oracle?
  • 我正在使用 Oracle
猜你喜欢
  • 2019-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-18
  • 2012-05-05
相关资源
最近更新 更多