PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Repositori - pesan dengan kueri asli tidak berfungsi

Jika itu adalah pernyataan yang disiapkan, dan itu adalah nilai pengikatan yang diberikan dalam ORDER BY klausa, yang valid, TAPI...

Nilai bind yang diberikan tidak akan ditafsirkan sebagai teks SQL. Artinya, nilai akan terlihat hanya sebagai nilai (seperti string literal). Itu tidak akan terlihat sebagai nama kolom, atau ASC atau DESC kata kunci.

Dalam konteks pernyataan Anda, berikan nilai untuk :orderClause bind placeholder, itu akan memiliki efek yang sama seperti jika Anda telah menulis ORDER BY 'some literal' .

Dan itu sama sekali tidak melakukan pengurutan baris.

(Ini berlaku setidaknya di setiap pustaka klien SQL yang saya gunakan dengan DB2, Teradata, Oracle, SQL Server, MySQL, dan MariaDB (JDBC, Perl DBI, ODBC, Pro/C, dkk.)

(MyBatis memang menyediakan mekanisme yang nyaman untuk melakukan substitusi variabel dalam teks SQL, secara dinamis mengubah teks SQL sebelum disiapkan, tetapi substitusi tersebut ditangani SEBELUM pernyataan disiapkan, dan tidak berubah menjadi pengikat tempat penampung dalam pernyataan.)

Dimungkinkan untuk mendapatkan sedikit pemesanan "dinamis" dengan beberapa ekspresi yang dibuat dengan hati-hati dalam klausa ORDER BY. Misalnya, kita dapat membuat teks SQL statis kita menjadi seperti ini:

  ORDER BY CASE WHEN :sort_param = 'name ASC'  THEN activation_name END ASC
         , CASE WHEN :sort_param = 'name DESC' THEN activation_name END DESC

(Teks SQL di sini tidak dinamis, sebenarnya statis, seolah-olah kita telah menulis.

 ORDER BY expr1 ASC
        , expr1 DESC

"Trik"nya adalah bahwa ekspresi dalam klausa ORDER BY secara kondisional mengembalikan nilai beberapa kolom dari setiap baris, atau mereka mengembalikan literal (dalam contoh di atas, literal NULL), tergantung pada nilai bind nilai, dievaluasi pada waktu eksekusi.

Efek bersihnya adalah kita bisa "secara dinamis" mendapatkan efek dari:

 ORDER BY activation_name ASC, NULL DESC

atau

 ORDER BY NULL ASC, activation_name DESC

atau

 ORDER BY NULL ASC, NULL DESC

tergantung pada nilai yang kami berikan untuk :sort_param placeholder.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menyimpan dan menanyakan pohon interval di PostgreSQL

  2. postgres csv tanggal null kesalahan impor

  3. Ubah Tabel terlalu lambat di postgres

  4. Fitur Tersembunyi PostgreSQL

  5. Cara Mengonversi String ke Nilai Numerik di PostgreSQL