2009-11-17 2 views
2

나는 MySQL에서 트리거를 작성하려고하는데 여러 변수의 값을 설정해야한다. 나는 이러한 변수에 투입해야 할 값이 기존 테이블의 행에서 있습니다 (여러 행에 대해 걱정하지, 하나가 될 것입니다) :MySQL BEFORE INSERT 트리거 여러 변수로 선택 하시겠습니까?

DELIMITER | 

CREATE TRIGGER ins_move_to_hist BEFORE INSERT ON EndOfDay 
FOR EACH ROW 
BEGIN 
DECLARE _RowsMatching int; 
DECLARE _EodId int(10) unsigned; 
    DECLARE _Open decimal(6,4); 
    DECLARE _High decimal(6,4); 
    DECLARE _Low decimal(6,4); 
    DECLARE _Close decimal(6,4); 
    DECLARE _Volume int(10) unsigned; 
    DECLARE _mtime datetime; 

SELECT _RowsMatching = Count(*), 
    EodId as _EodId, 
    Open as _Open, 
    High as _High, 
    Low as _Low, 
    Close as _Close, 
    Volume as _Volume, 
    mtime as _mtime 
from EndOfDay 
where DateId = NEW.DateId 
    and TickerId = NEW.TickerId; 

그러나, 트리거가 (결과 선택을 허용하지 않는 나는 필요 없다). 그래서 스크립트를 만들면 다음과 같은 오류가 발생합니다.

Not allowed to return a result set from a trigger.

답변

7

나는 as 문을 명령문으로 간단히 변경해야한다고 생각합니다.

업데이트 : 아래에서 Bill이 수정 했으므로 INTO 문은 insert 문과 비슷한 형식으로되어 있습니다. 열 목록 INTO 값 목록

SELECT Count(*), EodId, Open, High, Low, Close, Volume, mtime 
INTO _RowsMatching, _EodId, _Open, _High, _Low, _Close, _Volume, _mtime 
... 

감사합니다. ;)

+3

+1 올바른 길을 가고 있지만 구문에 약간의 작업이 필요합니다. http://dev.mysql.com/doc/refman/5.1/en/select-into-statement.html을 참조하십시오. –

+0

오 주여, 맞습니다!^_^ 내 기억력보다는 신뢰할 수있는 능력에 의존하려고 시도하는 대신 이러한 종류의 것들을 확인해야 할 필요가 있습니다. heheh. 고마워, 빌. –