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

Làm thế nào để viết một hàm mysql với tên bảng động?

Đầu tiên, như đã đề cập bởi @eggyal, đây không phải là cách tốt nhất để tiếp cận mọi thứ. Nhưng nó có thể được thực hiện bằng cách sử dụng các câu lệnh đã chuẩn bị sẵn. Tức là

DROP PROCEDURE IF EXISTS `exampleOfPrepareStatement`;

CREATE DEFINER = `user`@`%` PROCEDURE `exampleOfPrepareStatement`(inTableName VARCHAR(100))
    MODIFIES SQL DATA
    SQL SECURITY INVOKER
BEGIN

    SET @hr1 = CONCAT('
        INSERT INTO `',inTableName,'` (
            -- fields (can use parameters same as table name if needed)
        )
        -- either VALUES () or SELECT here
    ');

    -- Prepare, execute, deallocate
    PREPARE hrStmt1 FROM @hr1;
    EXECUTE hrStmt1;
    DEALLOCATE PREPARE hrStmt1;

END;

Tất nhiên, bạn có thể thêm tên trường, v.v. khi cần, hoặc sử dụng CHỌN hoặc CẬP NHẬT, v.v. Điều này không lý tưởng, nhưng sẽ làm được những gì bạn đang tìm kiếm.

Tôi đã phải sử dụng điều này ở một số nơi trước đây khi cùng một bảo trì đang được thực hiện trên nhiều bảng có tên trường (/ tên bảng) khác nhau và vì vậy thay vì viết cùng một hàm 20 lần, thay vào đó tôi sử dụng loại thủ tục được lưu trữ này. sau đó có thể được gọi để thực hiện lập chỉ mục, v.v.

Như đã được đề cập bởi @eggyal, mặc dù điều này có thể thực hiện theo yêu cầu của bạn, nhưng nó có thể không thực hiện như bạn cần. Nếu bạn có thể cung cấp thêm thông tin thì bạn có thể nhận được giải pháp tốt hơn.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. thời lượng mysql và thời gian tìm nạp

  2. Chọn các bản ghi từ một tuần trước trong mysql

  3. Khi nào thì thêm chỉ mục trên trường bảng SQL (MySQL)?

  4. Tôi có thể đặt WHERE col LIKE '%' chọn giá trị NULL không?

  5. Xampp MySQL không khởi động - Đang cố gắng khởi động dịch vụ MySQL ...