你可以做這個例子。首先創建與您的表相同列的空表。
create table sorted as select * from first_table where 1=0;
現在你可以運行這個代碼塊(你可以把它放在程序或其他東西中)。 它填寫表sorted
與您想要的順序排列的值。
declare
v_list1 varchar2(32000); v_list2 varchar2(32000);
v_sql varchar2(32000); v_num number; v_rec first_table%rowtype;
begin
select count(1) into v_num from user_tab_cols
where table_name = 'FIRST_TABLE';
for i in 1..v_num-1 loop
v_list1 := v_list1||'col'||i||', ';
v_list2 := v_list2||i||', ';
end loop;
v_sql := 'select * from (
select id, c, row_number() over (partition by id
order by id, decode(mod(id, 2), 1, c, -c)) rn
from first_table unpivot (c for col in ('||rtrim(v_list1, ', ')||')))
pivot (max(c) for rn in ('||rtrim(v_list2, ', ')||'))';
for r in (select * from first_table) loop
execute immediate v_sql||' where id = '||r.id into v_rec;
insert into sorted values v_rec;
end loop;
end;
這裏是塊不使用其他表,分類變量v_coll數據收集 ,那麼舊數據從first_table和新插入的去除。
declare
v_list varchar2(32000); v_sql varchar2(32000); v_num number;
type tft is table of first_table%rowtype;
v_coll tft; -- variable for sorted data collection
begin
select count(1) into v_num from user_tab_cols where table_name = 'FIRST_TABLE';
for i in 1..v_num-1 loop
v_sql := v_sql||'col'||i||', ';
v_list := v_list||i||', ';
end loop;
v_sql := 'select * from (
select id, c, row_number() over (partition by id
order by id, decode(mod(id, 2), 1, c, -c)) rn
from first_table unpivot (c for col in ('||rtrim(v_sql, ', ')||')))
pivot (max(c) for rn in ('||rtrim(v_list, ', ')||'))';
-- execute statement and collect sorted data in v_coll
execute immediate v_sql bulk collect into v_coll;
delete from first_table;
forall i in 1..v_coll.count
insert into first_table values v_coll(i);
end;
請提供一些關於您遇到的問題或錯誤以幫助您瞭解問題的詳細信息。 – Drenmi
@Drenmi我更新了代碼。請看看 – XhensB
可能的重複[轉換查詢從SQL到PL/SQL](http://stackoverflow.com/questions/29688456/convert-query-from-sql-to-pl-sql) – user272735