로컬 변수가있는 동적 MySQL
-
16-09-2019 - |
문제
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.
제휴하지 않습니다 StackOverflow