2011-09-10 2 views
1

는 여기에 지정된 데이터베이스 '포스트'저장 프로 시저에서 변수를 열 이름으로 사용 하시겠습니까?

의 모든 text 유형의 필드를 선택 MySQL의 절차를 쓴 나는 CONCAT 기능을 통해 갱신추가 문자열을 추가 모든 텍스트 유형 필드 행합니다.

내가 전화 TEST2 후, 오류가 보여줍니다

Query : call test2() 

Error Code : 1146 
Table 'wp._tbl' doesn't exist 

Execution Time : 00:00:00:000 
Transfer Time : 00:00:00:000 
Total Time  : 00:00:00:000 
--------------------------------------------------- 

MySQL은 문자열로 _tbl하지만 변수를 간주한다.

이 문제를 해결할 수 있습니까?

코드 :

DELIMITER $$ 
USE `wp`$$ 
DROP PROCEDURE IF EXISTS `test2`$$ 
CREATE 
    PROCEDURE `test2`() 
    BEGIN 
    DECLARE _tbl VARCHAR(100); 
    DECLARE _cl VARCHAR(100); 
    DECLARE notFound INT DEFAULT 0; 
    DECLARE cur CURSOR FOR SELECT table_name,column_name FROM information_schema.columns WHERE table_schema = 'wp' AND data_type ='text'; 
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET notFound =1; 
    OPEN cur; 
     WHILE notFound = 0 DO 
      FETCH cur INTO _tbl,_cl; 
      UPDATE _tbl SET _cl = CONCAT(_cl,'extra string goes here.....'); 
      IF NOT noFound THEN SET notFound = 0; 
      END IF; 
     END WHILE; 
    CLOSE cur; 
    END$$ 

DELIMITER ; 
+1

SQL은 해당 위치의 변수를 지원하지 않으며 식별자 만 지원합니다. 이것이 가능한 유일한 방법은 [ "동적 SQL"] (http://stackoverflow.com/questions/1471570/dynamic-mysql-with-local-variables)입니다. 그러나 이것은 정말로 엉망이됩니다. –

답변