簡體   English   中英

在 Oracle 中動態顯示查詢 output 的第一個數據行中表的列名

[英]Show column names of the table in 1st data row of the query output dynamically in Oracle

有一張表,讓我們說VW_RESULT如下所示:

ID Quarter Risk
00001 Q0 2
00001 Q1 3
00001 Q2 1
00001 Q3 1
00001 Q4 2

現在我必須在第一行顯示列名。

我想要這樣的 output :

Col1 Col2 Col3
ID Quarter Risk
00001 Q0 2
00001 Q1 3
00001 Q2 1
00001 Q3 1
00001 Q4 2

如果列數是固定的,我可以很容易地實現這一點,使用UNION ALL

但列數會不時變化。

我想讓這個動態,這樣我就不必手動輸入列名。

我正在使用Oracle 11g

將您的列放入變量中並連接您在每次運行時獲得的所有列..用執行立即執行您的並將您的變量與語句連接起來

為了滿足您的要求,您的所有數據類型都應該是字符串,因為所有列都是字符串。 如果您的任何數據類型不是字符串,它將不起作用。 例如:ID 列似乎是 integer 數據類型,如果您嘗試根據 SQL 標准將“ID”字符串合並到 ID 列中,它將失敗。 但是,如果相應表中的所有列都是字符串格式,則以下是解決方案。

declare 

v_Sql1 varchar(1000);
v_Sql2 varchar(1000);

begin

select  (LISTAGG(chr(39)||column_name||chr(39), ',') WITHIN GROUP (ORDER BY 
column_id)) into v_Sql1 from cols where table_name = 'VW_RESULT'; 

v_Sql2:= 'select * from
(select  column_name from cols where table_name = ''VW_RESULT'') 
pivot
(
max(column_name)
for column_name in (' || v_Sql1 || '))
union select * from VW_RESULT'; 

dbms_output.put_line(v_Sql1);
dbms_output.put_line(v_Sql2);

execute immediate v_Sql2;

end;
/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM