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

Câu lệnh chuẩn bị MySql - có thể tham số hóa tên cột hoặc tên hàm không?

Bạn không thể tham số hóa cột / bảng / tên hàm / bí danh. Như, PREPARE câu lệnh chỉ cho phép một phần "giá trị" của truy vấn SQL được sử dụng làm tham số. Chức năng / Bảng / Tên cột / bí danh được sử dụng để xác định tính hợp lệ của câu lệnh SQL; và do đó không thể thay đổi trong quá trình thực thi thời gian chạy. Việc thay đổi nó tại thời điểm thực thi sẽ có khả năng thay đổi liệu câu lệnh SQL có hợp lệ hay không.

Bạn có thể coi nó giống như việc biên dịch một đoạn mã; do đó trình biên dịch phải biết tất cả (các) tên hàm / lớp, v.v. để tạo tệp thực thi hợp lệ (vâng, chúng tôi có thể tạo các lớp động, nhưng điều đó là hiếm ). Mặt khác, chúng ta có thể thay đổi "giá trị" đầu vào cho chương trình, nhưng nói chung là không thể thay đổi các hoạt động sẽ được thực hiện trên dữ liệu đầu vào.

Ngoài ra, máy chủ MySQL sẽ coi các tham số là các ký tự và áp dụng các dấu ngoặc kép xung quanh chúng, trước khi sử dụng chúng trong thực thi truy vấn.

Bây giờ, trong trường hợp của bạn, bạn vẫn có thể sử dụng tên hàm làm tham số cho thủ tục Đã lưu trữ và tạo chuỗi truy vấn bằng cách sử dụng tên đó. Nhưng bạn không thể sử dụng nó làm tham số cho chính truy vấn.

delimiter $$
create procedure test(in func varchar(20), in col varchar(20))
  begin

    set @c = col;

    -- use concat function to generate the query string using func parameter
    set @sql = concat('select ', func, '(?) from table');

    -- prepare the statement
    prepare stmt from @sql;

    -- execute
    execute x using @c;

    -- don't forget to deallocate the prepared statement
    deallocate prepare stmt;
  end$$
delimiter ;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Triển khai thuật toán xếp hạng Hacker News trong SQL

  2. làm thế nào để gửi giá trị của lựa chọn với đầu vào ẩn

  3. Tìm kiếm / tìm kiếm các giá trị bị thiếu trong MySQL

  4. so sánh ngày cơ bản để kiểm tra ngày hết hạn

  5. Các cách khác nhau để phổ biến người dùng MySQL