Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengubah Jadual Oracle SQL secara Dinamik dengan Nilai Dinamik?
Pivot dinamik dan nilai dinamik Oracle SQL
Cabaran biasa apabila menggunakan jadual pangsi dalam Oracle SQL ialah mencipta jadual pangsi dengan nilai dinamik. Pendekatan tradisional ialah menambah nilai baharu secara manual pada rentetan statik yang digunakan dalam penyata IN jadual pangsi, yang tidak cekap.
Had penyataan IN dinamik
Membenamkan pernyataan dinamik terus ke dalam pernyataan PIVOT IN menggunakan subkueri, pembolehubah PL/SQL atau pertanyaan bersarang tidak disokong. Selain itu, menggunakan PIVOT XML boleh menghasilkan output suboptimum.
Penyelesaian: Buat rentetan IN dinamik
Untuk mengatasi batasan ini, kaedah mencipta rentetan IN dinamik boleh digunakan. Berikut ialah panduan langkah demi langkah:
Buat pernyataan SELECT untuk menjana rentetan dinamik:
Contoh: Pertimbangkan contoh jadual berikut:
<code>| myNumber | myValue | myLetter | |---|---|---| | 1 | 2 | A | | 1 | 4 | B | | 2 | 6 | C | | 2 | 8 | A | | 2 | 10 | B | | 3 | 12 | C | | 3 | 14 | A |</code>
Untuk menjana rentetan IN dinamik, laksanakan pernyataan berikut:
<code class="language-sql">COLUMN temp_in_statement new_value str_in_statement SELECT DISTINCT LISTAGG('''' || myLetter || ''' AS ' || myLetter,',') WITHIN GROUP (ORDER BY myLetter) AS temp_in_statement FROM (SELECT DISTINCT myLetter FROM myTable);</code>
Sertakan rentetan dinamik ke dalam pertanyaan pangsi:
Contoh pertanyaan pangsi:
<code class="language-sql">SELECT * FROM (SELECT myNumber, myLetter, myValue FROM myTable) PIVOT (Sum(myValue) AS val FOR myLetter IN (&str_in_statement));</code>
Output:
<code>| MYNUMBER | A_VAL | B_VAL | C_VAL | |---|---|---|---| | 1 | 2 | 4 | NULL | | 2 | 8 | 10 | 6 | | 3 | 14 | NULL | 12 |</code>
Had:
Penghadan kaedah ini ialah saiz rentetan maksimum yang boleh digabungkan ialah 4000 bait.
Atas ialah kandungan terperinci Bagaimana untuk Mengubah Jadual Oracle SQL secara Dinamik dengan Nilai Dinamik?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!