Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

truy vấn động mysql trong thủ tục được lưu trữ

Mã lỗi:1054. Cột không xác định 'SPA' trong 'mệnh đề where'

Điều này xảy ra khi bạn không đặt chuỗi đầu vào trong dấu ngoặc kép và công cụ SQL cố gắng xác định nó là một cột trong bảng đang được truy vấn. Nhưng nó không thành công vì nó không thể tìm thấy nó.

Nhưng điều gì sẽ xảy ra khi nó tìm thấy cột như vậy?
Nó tìm nạp kết quả khi nó tìm thấy một số kết quả phù hợp trên các giá trị của cột.
Rõ ràng đây không phải là điều người ta mong đợi.

Làm thế nào để vượt qua điều này? Sử dụng Câu lệnh chuẩn bị với các giá trị đầu vào động.

Bạn có thể sử dụng các trình giữ chỗ như ? trong các thủ tục được lưu trữ cũng trên các giá trị đầu vào động để sử dụng với Prepared Statements . Công cụ sẽ xử lý các ký tự thoát và các giá trị chuỗi khác khi được gán hoặc so sánh trong các biểu thức SQL.

Bạn chỉ cần gán lại đầu vào thủ tục cho một hoặc nhiều biến phiên, nếu cần.

Ví dụ về quy trình của bạn :

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. Navicat dành cho MySQL

  2. Cách nhận bản ghi giữa 2 ngày trong MySQL

  3. Cách CHỌN Bản ghi Không có Giá trị NULL trong MySQL

  4. Cách giám sát cơ sở dữ liệu MySQL / MariaDB bằng Netdata trên CentOS 7

  5. Lấy tất cả các hàng cha trong một truy vấn SQL