您可以創建一個生成,然後將被執行的SQL字符串的過程。這裏是一個樣品溶液:
CREATE OR REPLACE procedure dynamic_unpivot(p_cursor in out sys_refcursor)
as
sql_query varchar2(1000) := 'select id, columnName, columnResult
from yourtable ';
sql_unpiv varchar2(50) := null;
begin
for x in (select t.column_name ls
from user_tab_columns t
where t.table_name = 'YOURTABLE'
and t.column_name not in ('ID'))
loop
sql_unpiv := sql_unpiv ||
' '||x.ls||' ,';
dbms_output.put_line(sql_unpiv);
end loop;
sql_query := sql_query || 'unpivot
(
columnResult
for columnName in ('||substr(sql_unpiv, 1, length(sql_unpiv)-1)||')
)';
dbms_output.put_line(sql_query);
open p_cursor for sql_query;
end;
/
然後,你可以使用以下方法來執行結果(我的樣本是蟾蜍):
variable x refcursor
exec dynamic_unpivot(:x)
print x;
展鵬對SQL服務器的HTTP很好的插件:// WWW .red-gate.com/products/sql-development/sql-prompt /他們確實有一些針對Oracle的插件,但不知道他們是否有類似SQL提示符,可以與他們覈對。 – HaBo 2013-04-30 21:10:54