3 ответов:
Я не верю, что MySQL поддерживает динамический sql. Вы можете сделать "подготовленные" заявления, которые похожи, но разные.
вот пример:
mysql> PREPARE stmt FROM -> 'select count(*) -> from information_schema.schemata -> where schema_name = ? or schema_name = ?' ; Query OK, 0 rows affected (0.00 sec) Statement prepared mysql> EXECUTE stmt -> USING @schema1,@schema2 +----------+ | count(*) | +----------+ | 2 | +----------+ 1 row in set (0.00 sec) mysql> DEALLOCATE PREPARE stmt;подготовленные операторы часто используются для просмотра плана выполнения для данного запроса. Так как они выполняются с выполнить и sql может быть присвоена переменной, которую вы можете приблизить к тому же поведению, что и динамический sql.
вот хороший ссылке это:
Не забудьте освободить
stmtиспользуя последнюю строку!Удачи!
после 5.0.13, в хранимых процедурах, вы можете использовать динамический SQL:
delimiter // CREATE PROCEDURE dynamic(IN tbl CHAR(64), IN col CHAR(64)) BEGIN SET @s = CONCAT('SELECT ',col,' FROM ',tbl ); PREPARE stmt FROM @s; EXECUTE stmt; DEALLOCATE PREPARE stmt; END // delimiter ;динамический SQL не работает в функциях и триггерах. Смотрите документация MySQL для большего использования.
вы можете пройти через вне динамического оператора с помощью пользовательских переменных
Server version: 5.6.25-log MySQL Community Server (GPL) mysql> PREPARE stmt FROM 'select "AAAA" into @a'; Query OK, 0 rows affected (0.01 sec) Statement prepared mysql> EXECUTE stmt; Query OK, 1 row affected (0.01 sec) DEALLOCATE prepare stmt; Query OK, 0 rows affected (0.01 sec) mysql> select @a; +------+ | @a | +------+ |AAAA | +------+ 1 row in set (0.01 sec)
Comments