2011-07-26 2 views
4

"ON INSERT"은에서 사용자 변수를 사용하십시오 나는 사용자 정의 변수와 깨끗한 트리거를 만들려고, 그래서 이것은 내 코드 절


SET @target_bdd = 'trigger_second'; 
SET @trigger_name = 'account_copy'; 
SET @table_name = 'account'; 
SET @primary_key = 'id'; 

DROP TRIGGER IF EXISTS `@trigger_name`; 

DELIMITER $$ 

CREATE TRIGGER `@trigger_name` AFTER INSERT 
    ON `@table_name` 
FOR EACH ROW BEGIN 
    INSERT INTO `@target_bdd`.`@table_name` 
    SELECT * FROM `@table_name` 
    WHERE `@primary_key` = NEW.`@primary_key`; 
END $$ 
DELIMITER ; 

하지만이 있습니다 오류 :

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that 
corresponds >to your MySQL server version for the right syntax to use near '@table_name 
FOR EACH ROW BEGIN INSERT INTO `@target_bdd`.`@table_name` SELECT * ' at line 2 

왜? 나는 다른 사람의 따옴표 ('')를 시도했지만 같은 오류 :(

없이 견적있다 :

ERROR 1064 (42000) : 당신은 당신의 SQL 구문에 오류가 있습니다, 즉 상당 설명서를 확인 줄에서 '@Target에 삽입을 BEGIN 각 행에 대해 @table_name ON 삽입 한 후 @trigger_name'근처를 사용할 수있는 권리 구문은 MySQL 서버 버전 1 내가 가진 사용자 정의 변수를 선언하려고

SQL 명령어는 다음과 같습니다 :

SET @sql = CONCAT(
    'CREATE TRIGGER ', 
    @trigger_name, 
    ' AFTER INSERT ON ', 
    @table_name, 
    ' FOR EACH ROW BEGIN INSERT INTO ', 
    @target_bdd, 
    '.', 
    @table_name, 
    ' SELECT * FROM ', 
    @table_name, 
    ' WHERE ', 
    @primary_key, 
    ' = NEW.', 
    @primary_key, 
    '; END' 
    ); 

PREPARE stmt FROM @sql; 
EXECUTE stmt; 

하지만 오류 1295 (See in MySQL Documentation)

답변

1

일반 SQL에서 테이블 이름, 열 등에 사용자 변수를 사용할 수 없습니다. 준비된 문장으로 트리거를 생성 할 수도 없습니다 (오류와 마찬가지로). 현재 원하는대로 할 수있는 방법이없는 것처럼 보입니다.

+0

대단히 감사합니다. –

0

는 내가 전에 사용자 정의 변수를 사용한 적이 있지만, 테스트에서 내가 발견 당신이 그들을 인용 안된다고 말해야있다!
`@vars`를 인용 할 때 mysql은 저장되어있는 값 대신에 '@vars' 리터럴 필드를 찾을 것입니다.

+0

질문에 견적을 남기지 않은 결과가 나타납니다. 감사합니다. –

관련 문제