문제

MySQL 데이터베이스에서 세션 변수를 사용하지 않고 동적 SQL 문을 어떻게 사용할 수 있습니까?

지금은 그러한 코드가 있습니다 (MySQL 저장 프로 시저) :

(...)
DECLARE TableName VARCHAR(32);
SET @SelectedId = NULL;
SET @s := CONCAT("SELECT Id INTO @SelectedId FROM ", TableName, " WHERE param=val LIMIT 1");
PREPARE stmt FROM @s;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
IF ISNULL(@SelectedId) THEN 
(...)

그러나 로컬 변수 만 사용하고 싶습니다. 즉,이 절차를 시작하고 싶습니다.

DECLARE TableName VARCHAR(32);
DECLARE s VARCHAR(1024);
DECLARE SelectedId INTEGER UNSIGNED;
(...)

그리고 @ char를 어디서나 사용하지 마십시오. 이것을 할 방법이 있습니까?

도움이 되었습니까?

해결책

죄송합니다. MySQL의 준비된 진술은 세션 글로벌입니다. 에 따르면 http://dev.mysql.com/doc/refman/5.1/en/sql-syntax-prepared-statements.html, "준비된 진술은 또한 세션에 전 세계적입니다."

그리고 MySQL 5.x에서 동적 SQL을 실행하는 다른 방법 (준비된 진술 외에)은 없습니다.

물론 위의 "@S"를 대체 할 수는 있지만 afaik은 @SelectedId에 갇혀 있습니다.

MySQL 6.x에는 동적 SQL을 실행할 "즉시 실행"명령문을 추가 할 수있는 기능이 있습니다. 보다 http://forge.mysql.com/worklog/task.php?id=2793.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top