Tuy nhiên có 2 cách.
Đầu tiên là đối với các trường hợp hoàn toàn chỉ có một người dùng tại một thời điểm sẽ chạy quy trình. Một câu lệnh chuẩn bị có thể được sử dụng để tạo một dạng xem với SQL động và con trỏ có thể chọn từ dạng xem được đặt tên tĩnh này. Hầu như không có tác động đến hiệu suất. Thật không may, những chế độ xem này cũng hiển thị với những người dùng khác (không có cái gọi là chế độ xem tạm thời), vì vậy, điều này sẽ không hoạt động với nhiều người dùng.
Tương tự, một bảng tạm thời có thể được tạo trong câu lệnh chuẩn bị và con trỏ có thể chọn từ bảng tạm thời. Chỉ phiên hiện tại mới có thể xem bảng tạm thời, do đó, vấn đề nhiều người dùng đã được giải quyết. Nhưng giải pháp này có thể có tác động đáng kể đến hiệu suất vì một bảng tạm thời phải được tạo mỗi khi chương trình chạy.
Điểm mấu chốt:Chúng tôi vẫn cần con trỏ để có thể được tạo động!
Đây là một ví dụ về việc sử dụng một dạng xem để chuyển tên bảng và tên cột vào một con trỏ từ diễn đàn mysql
DELIMITER //
DROP PROCEDURE IF EXISTS test_prepare//
CREATE PROCEDURE test_prepare(IN tablename varchar(255), columnname varchar(50))
BEGIN
DECLARE cursor_end CONDITION FOR SQLSTATE '02000';
DECLARE v_column_val VARCHAR(50);
DECLARE done INT DEFAULT 0;
DECLARE cur_table CURSOR FOR SELECT * FROM test_prepare_vw;
DECLARE CONTINUE HANDLER FOR cursor_end SET done = 1;
SET @query = CONCAT('CREATE VIEW test_prepare_vw as select ', columnname, ' from ', tablename);
select @query;
PREPARE stmt from @query;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
OPEN cur_table;
FETCH cur_table INTO v_column_val;
WHILE done = 0 DO
SELECT v_column_val;
FETCH cur_table INTO v_column_val;
END WHILE;
CLOSE cur_table;
DROP VIEW test_prepare_vw;
END;
//
DELIMITER ;