Saya pikir mungkin, meskipun cukup rumit, untuk menulis fungsi tabel berpipa yang mengembalikan struktur variabel . Fungsi tabel pipa Anda akan menggunakan antarmuka Oracle Data Cartridge dan keajaiban tipe AnyDataSet untuk mengembalikan struktur dinamis saat runtime. Anda kemudian dapat menggunakannya dalam pernyataan SQL berikutnya seolah-olah itu adalah tabel, yaitu
SELECT *
FROM TABLE( your_pipelined_function( p_1, p_2 ));
Beberapa referensi lagi yang membahas implementasi sampel yang sama
- Pivoting SQL Dinamis
- Menerapkan Pendekatan Antarmuka bagian dari Panduan Pengembang Kartrid Data Oracle
-
Metode4. Setelah mengunduh dan menginstal kode PL/SQL open source, berikut adalah implementasi lengkapnya:
--Create sample table. create table branch_data as select '100' BranchName,'1001010' CustomerNo from dual UNION ALL select '100' BranchName,'1001011' CustomerNo from dual UNION ALL select '103' BranchName,'1001012' CustomerNo from dual UNION ALL select '104' BranchName,'1001013' CustomerNo from dual UNION ALL select '104' BranchName,'1001014' CustomerNo from dual UNION ALL select '104' BranchName,'1001015' CustomerNo from dual UNION ALL select '105' BranchName,'1001016' CustomerNo from dual UNION ALL select '105' BranchName,'1001017' CustomerNo from dual UNION ALL select '106' BranchName,'1001018' CustomerNo from dual; --Create a dynamic pivot in SQL. select * from table(method4.dynamic_query( q'[ --Create a select statement select --The SELECT: 'select'||chr(10)|| --The column list: listagg( replace(q'!sum(case when BranchName = '#BRANCH_NAME#' then 1 else 0 end) "#BRANCH_NAME#"!', '#BRANCH_NAME#', BranchName) , ','||chr(10)) within group (order by BranchName)||chr(10)|| --The FROM: 'from branch_data' v_sql from ( --Distinct BranchNames. select distinct BranchName from branch_data ) ]' ));