2016-10-24 3 views
1

I이 저장 프로 시저를 가지고 :저장 프로 시저를 실행하지만 예상대로 테이블을 갱신하지

DELIMITER $$ 
CREATE DEFINER=`old_dev_user`@`%` PROCEDURE `p_refresh_selling_table`(location_id VARCHAR(5)) 
BEGIN 

    DECLARE EXIT HANDLER FOR SQLEXCEPTION 
    BEGIN 
ROLLBACK; 
    END; 

    SET sql_log_off = 1; 

    START TRANSACTION; 

    IF (location_id = '') THEN 

    DELETE FROM selling_table; 

    INSERT INTO selling_table 
       (column1, 
       column2, 
       column3, 
.. 
.. 
. 
) 
     (SELECT DISTINCT original_table.id, 
.. 
.. 
.. 
.. 

);  


ELSE 

    DELETE FROM selling_table where id=location_id; 

INSERT INTO selling table 
       (column1, 
       column2, 
       column3, 
.. 
.. 
. 
) 
     (SELECT DISTINCT original_table.id, 
.. 
.. 
.. 
.. 
); 

END IF; 

    COMMIT; 

END$$ 
DELIMITER ; 

내가 가진 문제는 저장 프로 시저가 오류없이 실행되지만 예상대로 결과가 selling_table에 업데이트되지 않는 것입니다 : 나는 ((DISTINCT original_table.id을 선택 ..) 그때 판매로 이동한다 결과의 출력을 얻을 저장 프로 시저의 선택 부분을 실행할 때 때문에 예상대로

mysql> CALL `site_database`.`p_refresh_selling_table`(81); 
Query OK, 0 rows affected (0.01 sec) 

나는 테이블을 채워야 알고 표.

나는 또한 사용 권한을 확인했으며 저장 프로 시저에서 사용되는 데이터베이스/스키마에 대한 모든 사용 권한을 사용자 (정의 자와 동일하지는 않지만)가 갖고 있습니다.

또한 별도의 (로컬) 환경에서이 스키마를 복제했으며이 저장 프로 시저가 올바르게 실행되기 때문에 예상 결과가 채워진 sales_table을 볼 수 있습니다.

sell_table이 채워지지 않는 이유에 대해 올바른 방향을 알려주십시오.

당신을 감사

답변

1

난 당신이 common_schema를 설치하고 저장 프로 시저를 디버깅 할 rdebug를 사용하는 것이 좋습니다 :이 도구를 사용하지만, 그것을 테스트하는 데에 내가 전문가가 아니에요

http://code.openark.org/blog/mysql/taking-common_schemas-rdebug-to-a-test-drive

+0

을, 나는 시도 내 SP에서 사용하려면 다음 오류가 발생했습니다. – ranj1185

+0

mysql> call rdebug_step_into(); 오류 1205 (HY000) : 잠금 대기 시간 초과가 초과되었습니다. 트랜잭션을 다시 시작하십시오. – ranj1185

관련 문제