2010-11-23 3 views
3

Здравствуйте, я пытаюсь автоматизировать мою процедуру отслеживания истории в MySQL. Процедура должна обновить таблицу и создать другую, используя uid в качестве имени.Как отправить запрос хранимой процедурой в MySQL?

CREATE PROCEDURE `InsertQueryStore`(u VARCHAR(128), ID INT, q VARCHAR(1024)) 
BEGIN 
    INSERT INTO querystore(`qID`, `qstring`, `user`) VALUES(ID, q, u); # this works 
# DROP TABLE IF EXIST ID ; //Can I do something like this? 
# CREATE TABLE ID q; // The q is a query string which should return results into to table ID 
END; 

, то я хотел бы назвать как:

Call InsertQueryStore("myname", 100, "select * from mydb.table limit 10") 

Что такое правильный способ использовать переменную VARCHAR в процедуре?

Благодарим вас заблаговременно. Arman.

ответ

1

Я думаю, что путь с этим будет использовать динамический SQL.

MySQL не поддерживает динамический SQL в том, как работают некоторые СУБД, но у него есть методы PREPARE/EXECUTE для создания запроса и его выполнения. Посмотрите, можете ли вы использовать их в своей хранимой процедуре.

Что-то вроде:

CREATE PROCEDURE `InsertQueryStore`(u VARCHAR(128), ID INT, q VARCHAR(1024)) 
BEGIN 
    INSERT INTO querystore(`qID`, `qstring`, `user`) VALUES(ID, q, u); 

    PREPARE stmt FROM "DROP TABLE IF EXIST ?"; 
    EXECUTE stmt USING ID; 
    DEALLOCATE PREPARE stmt; 

    /* etc */ 
END; 

Если вы обнаружите, вы не можете использовать параметризованные версию с «?» в этом контексте просто используйте CONCAT(), чтобы собрать его с фактическим значением в строке, как это уже известно на этом этапе.

Существует reasonable article about it here, упомянутый в previous SO post.

+0

Спасибо !!! Хорошее решение ... – Arman 2010-11-24 16:17:21

Смежные вопросы