2016-10-24 6 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をSELECT ...)私は、その後売りに行くべき結果の出力を得るため

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

関連する問題