Как создать хранимую процедуру, которая будет принимать параметр - PullRequest
0 голосов
/ 02 марта 2011

У меня есть «набор» операторов SQL

DROP TABLE IF EXISTS data.s;
CREATE TABLE data.s LIKE data._style;
INSERT INTO data.s Values (?,?,?,?,?,?,?,?,?,?,?,?,?);

UPDATE data.s n JOIN data.s_ o ON n.ID = o.ID SET n.TC = o.TC;
UPDATE data.s n JOIN data.s_ o ON n.ID = o.ID SET n.VR = o.VR;
UPDATE data.s n JOIN data.o_ o ON n.ID = o.ID SET n.OC = o.OC;
DELETE FROM data.s WHERE TC <= 0;
DELETE FROM data.s WHERE TC < 100;
DELETE FROM data.s WHERE OC < 100 ;

На примере таблицы «s» Как создать SP, где «s» - это переменная, которую можно заменить на t,уф, з ...... что ли?Я хотел бы изменить эту переменную с помощью оператора вызова SQL.

1 Ответ

2 голосов
/ 02 марта 2011

MySQL не обрабатывает настоящий динамический SQL, поэтому вы должны использовать подготовленный оператор.

Посмотрите на принятый ответ: Как использовать динамический SQL в хранимой процедуре MySQL и особенно ссылкуон дает (часть динамического SQL).

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

CREATE PROCEDURE `execute`(IN sqlQuery varchar(255))
BEGIN

    set @sqlQuery := sqlQuery;

    prepare stmp from @sqlQuery; 

    execute stmp;

    deallocate prepare stmp; 

END

CREATE PROCEDURE `yourProcName`(IN tableName varchar(50))
BEGIN

    call execute(concat('DROP TABLE IF EXISTS ', tableName));
    call execute(concat('CREATE TABLE ', tableName, ' LIKE data._style'));

    ...

END
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...