sql >> データベース >  >> RDS >> Mysql

MySQLトリガーのデバッグ

    一時的にテストする別の方法がありますdebug テーブル 。この例では、独自のdebugで作成しています。 データベース。

    ステップ1: テーブルを作成する

    DROP TABLE IF EXISTS debug;
    CREATE TABLE debug (
      proc_id varchar(100) default NULL,
      debug_output text,
      line_id int(11) NOT NULL auto_increment,
      PRIMARY KEY  (line_id)
    )
    

    ステップ2: デバッグSPを作成して、デバッグテーブルを埋めます

    DELIMITER $$
    
    DROP PROCEDURE IF EXISTS `debug_insert` $$
    CREATE PROCEDURE `debug_insert`(in p_proc_id varchar(100),in p_debug_info text)
    begin
      insert into debug (proc_id,debug_output)
      values (p_proc_id,p_debug_info);
    end $$
    
    DROP PROCEDURE IF EXISTS `debug_on` $$
    CREATE PROCEDURE `debug_on`(in p_proc_id varchar(100))
    begin
      call debug_insert(p_proc_id,concat('Debug Started :',now()));
    end $$
    
    DROP PROCEDURE IF EXISTS `debug_off` $$
    CREATE PROCEDURE `debug_off`(in p_proc_id varchar(100))
    begin
      call debug_insert(p_proc_id,concat('Debug Ended :',now()));
      select debug_output from debug where proc_id = p_proc_id order by line_id;
      delete from debug where proc_id = p_proc_id;
    end $$
    

    ステップ3: トリガーでデバッグSPを呼び出します

    このように、

    CREATE PROCEDURE test_debug()
    begin
    declare l_proc_id varchar(100) default 'test_debug';
      call debug_on(l_proc_id);
      call debug_insert(l_proc_id,'Testing Debug');
      call debug_off(l_proc_id);
    end $$
    

    その結果、デバッグテーブルは次のように入力されます。

    +------------------------------------+
    | debug_output                       |
    +------------------------------------+
    | Debug Started :2006-03-24 16:10:33 |
    | Testing Debug                      |
    | Debug Ended :2006-03-24 16:10:33   |
    +------------------------------------+
    


    1. SQLServerカーソルを同等のMySQLに変換する方法

    2. 大文字と小文字を区別するようにMysqlテーブルの列を変更する

    3. Oracle11gのネストされたループ結合

    4. GETDATE()SQL Server(T-SQL)の例