Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

kueri dinamis mysql dalam prosedur tersimpan

Kode Kesalahan:1054. Kolom 'SPA' tidak diketahui di 'klausa tempat'

Ini terjadi ketika Anda tidak menyertakan string input dalam tanda kutip, dan mesin SQL mencoba mengidentifikasinya sebagai kolom dalam tabel yang dikueri. Tetapi gagal karena tidak dapat menemukannya.

Tapi apa yang terjadi ketika menemukan kolom seperti itu?
Ini mengambil hasil ketika menemukan beberapa kecocokan pada nilai kolom.
Jelas ini bukan yang diharapkan.

Bagaimana mengatasi hal ini? Gunakan Pernyataan yang Disiapkan dengan nilai input dinamis.

Anda dapat menggunakan placeholder seperti ? dalam prosedur tersimpan juga pada nilai input dinamis untuk digunakan dengan Prepared Statements . Mesin akan menangani karakter pelarian dan nilai string lainnya saat ditetapkan ke atau dibandingkan dalam ekspresi SQL.

Anda hanya perlu menetapkan kembali input prosedur ke satu atau beberapa variabel sesi, sesuai kebutuhan.

Contoh pada prosedur Anda :

CREATE PROCEDURE `test1`( IN tab_name VARCHAR(40), IN w_team VARCHAR(40) )
BEGIN
  SET @t1 = CONCAT( 'SELECT * FROM ', tab_name, ' where team = ?' ); -- <-- placeholder
  SET @w_team := w_team;

  PREPARE stmt3 FROM @t1;
  EXECUTE stmt3 USING @w_team; -- <-- input for placeholder
  DEALLOCATE PREPARE stmt3;
END;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Permintaan Kembalikan MySQL

  2. MySQL vs MongoDB

  3. Temukan nilai paling sering di kolom SQL

  4. Apa yang DELIMITER // lakukan di Pemicu?

  5. Anda tidak dapat menentukan tabel target untuk pembaruan dalam klausa FROM