카테고리 없음

MySQL 의 PREPARE 구문의 제약사항

좋은나무 2013. 1. 10. 14:26

MySQL 에서 동적으로 SQL 을 생성해서 호출할 경우, 

다음과 같이  PREPARE 구문을 사용한다.

mysql> PREPARE stmt1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hypotenuse';

mysql> SET @a = 3;

mysql> SET @b = 4;

mysql> EXECUTE stmt1 USING @a, @b;

+------------+

| hypotenuse |

+------------+

|          5 |

+------------+

mysql> DEALLOCATE PREPARE stmt1;


그런데, 이 구문은 다음과 같은 제약사항이 있다.

1) 사용할 수 있는 쿼리 문장이 제한된다.

The following SQL statements can be used in prepared statements: ALTER TABLE, CALL, COMMIT, CREATE INDEX, CREATE TABLE, DELETE, DO, DROP INDEX, DROP TABLE, INSERT, RENAME TABLE, REPLACE, SELECT, SET, TRUNCATE TABLE, UPDATE, and most SHOW statements. 

ANALYZE TABLE, OPTIMIZE TABLE, and REPAIR TABLE are also supported as of MySQL 5.0.23.

대부분의 구문을 지원하지만, 

결정적으로 USE testdb; 와 같이 Database 를 선택하는 구문은 사용할 수 없다. 


2) 복수의 쿼리문장을 지정할 수 없다.

mysql> PREPARE stmt1 FROM 'show tables; SELECT * from testtable;


[참고 : SQL Syntax for Prepared Statements]