1
我有一個表books
。如何將變量傳遞給存儲過程的正文語句?
+-------+-----------+------------+
| serial| book_name | book_author|
+-------+-----------+------------+
| 1 | Star Wars | 1 |
| 2 | Java | 2 |
| 3 | Alimals | 3 |
| 4 | Star Wars | 1 |
+-------+-----------+------------+
我想使用存儲過程來選擇book_name
;
我的存儲過程是這樣的:
USE books;
DELIMITER //
CREATE PROCEDURE doselect(col VARCHAR(50), tab VARCHAR(50), cond INT(5))
BEGIN
SET @x = NULL;
SET @col = col;
SET @tab = tab;
SET @cond = cond;
SET @x = (SELECT @col FROM @tab WHERE b_id = @cond);
END //
DELIMITER ;
然後我把它叫做:
CALL doselect('book_name', 'books', 3)
但ID不能正常工作。它沒有看到變量@tab
。錯誤是:
表書。@ tab不存在。
我也用的選擇條件這樣的變體:
SET @x = (SELECT 'col' FROM 'tab' WHERE b_id = 'cond');
的同樣的錯誤,但現在沒有@
:
表books.tab不存在。
如何在這種情況下正確傳遞變量?如何讓它看到我的變量?
謝謝。
我相信你必須使用動態SQL。這裏有一個例子http://stackoverflow.com/questions/190776/how-to-have-dynamic-sql-in-mysql-stored-procedure –