【发布时间】:2017-08-24 14:47:04
【问题描述】:
我正在尝试将一组列标题的值作为文本返回,如果您将使用 listagg 函数,则类似,但是,这些字段可以是用户定义的,不一定位于表中,因此使用 lisatagg on dba_tab_cols 不是一个选项。
我正在使用的示例代码如下
with test_data1 as (select '2012' extract_yr, '01' extract_mth, 'John Smith' person1, 'Jane Doe' person2 from dual)
,test_data2 as (select '2016' extract_yr, '01' extract_mth, 'John Smith' person1, 'Jane Doe' person2 from dual)
select t1.extract_yr year
,t1.extract_mth month
,t1.person1 first_person
,t1.person2 second_person
from test_data1 t1
union all
select t2.extract_yr year
,t2.extract_mth month
,t2.person1 first_person
,t2.person2 second_person
from test_data2 t2
我所追求的是将标头放入逗号分隔的输出/变量中,这样我就可以在一些动态 SQL 中进一步使用它们。 所以在上面的例子中,我希望看到:
YEAR, MONTH, FIRST_PERSON, SECOND_PERSON
这是用于我正在编写的脚本自动化程序,因此输出需要以逗号分隔的 clob 格式。将执行数百个脚本,并且输出字段会因脚本而异。
任何正确方向的帮助或指示将不胜感激
【问题讨论】:
-
既然你知道字段列表......你能不能:
SELECT ('YEAR,MONTH, FIRST_PERSON, SECOND_PERSON') as FieldList from dual?既然你说他们可以“用户定义”在哪里?如何使用动态SQL?它们必须在某个时候传入,并且使用该点您可以制作像上面这样的 SQL 语句。 -
我觉得我可能遗漏了一些信息,这是我正在编写的一个测试脚本自动化程序。输出需要以逗号分隔的 clob 中,将执行数百个脚本,并且输出字段将因脚本而异。