trigger-mysql.sql 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. -- 创建消息表,用于记录变化,同步到私有库里
  2. drop table if exists sync$message;
  3. create table sync$message(
  4. me_id bigint not null primary key auto_increment,
  5. me_table_name varchar(64) not null,
  6. me_method_type varchar(6) not null,
  7. me_data_key text not null,
  8. me_data text,
  9. me_priority int default 0,
  10. me_retry_count int default 0,
  11. me_source_app varchar(64),
  12. me_batch_code varchar(64),
  13. me_batch_size int,
  14. me_batch_detno int,
  15. me_create_time datetime not null
  16. );
  17. -- 创建消息历史表
  18. drop table if exists sync$message_history;
  19. create table sync$message_history(
  20. mh_id bigint not null primary key auto_increment,
  21. mh_dequeue_time datetime not null,
  22. me_id bigint not null,
  23. me_table_name varchar(64) not null,
  24. me_method_type varchar(6) not null,
  25. me_data_key text not null,
  26. me_data text,
  27. me_priority int default 0,
  28. me_source_app varchar(64),
  29. me_batch_code varchar(64),
  30. me_batch_size int,
  31. me_batch_detno int,
  32. me_create_time datetime not null
  33. );
  34. -- 创建存储过程 入队消息
  35. drop procedure if exists sync$enqueue_message;
  36. delimiter $$
  37. create procedure sync$enqueue_message(p_table_name varchar(64), p_method_type varchar(6), p_data_key text, p_data text, p_priority int)
  38. begin
  39. if @source_app is not null then
  40. if @batch_detno is null then
  41. set @batch_detno = 0;
  42. end if;
  43. set @batch_detno = @batch_detno + 1;
  44. insert into sync$message (me_table_name, me_method_type, me_data_key, me_data, me_priority, me_create_time, me_source_app, me_batch_code, me_batch_size, me_batch_detno) values(p_table_name, p_method_type, p_data_key, p_data, p_priority, sysdate(), @source_app, @batch_code, @batch_detno, @batch_detno);
  45. -- 动态计算批次数量,在本次 session 中每累加一次,就更新一次数量
  46. update sync$message set me_batch_size = @batch_detno where me_batch_code = @batch_code;
  47. else
  48. insert into sync$message (me_table_name, me_method_type, me_data_key, me_data, me_priority, me_create_time) values(p_table_name, p_method_type, p_data_key, p_data, p_priority, sysdate());
  49. end if;
  50. end;$$
  51. delimiter ;
  52. -- 创建存储过程 出队消息
  53. drop procedure if exists sync$dequeue_message;
  54. delimiter $$
  55. create procedure sync$dequeue_message(p_id bigint)
  56. begin
  57. insert into sync$message_history (mh_dequeue_time, me_id, me_table_name, me_method_type, me_data_key, me_data, me_priority, me_create_time, me_source_app, me_batch_code, me_batch_size, me_batch_detno) select sysdate(), me_id, me_table_name, me_method_type, me_data_key, me_data, me_priority, me_create_time, me_source_app, me_batch_code, me_batch_size, me_batch_detno from sync$message where me_id = p_id;
  58. delete from sync$message where me_id = p_id;
  59. end;$$
  60. delimiter ;
  61. -- 创建存储过程 设置 session variable
  62. drop procedure if exists sync$set_session_variable;
  63. delimiter $$
  64. create procedure sync$set_session_variable(p_source_app varchar(64), p_batch_code varchar(64))
  65. begin
  66. set @source_app = p_source_app;
  67. set @batch_code = p_batch_code;
  68. set @batch_detno = 0;
  69. end;$$
  70. delimiter ;
  71. -- 创建存储过程 取消设置 session variable
  72. drop procedure if exists sync$unset_session_variable;
  73. delimiter $$
  74. create procedure sync$unset_session_variable()
  75. begin
  76. set @source_app = null;
  77. set @batch_code = null;
  78. set @batch_detno = null;
  79. end;$$
  80. delimiter ;
  81. -- 创建存储过程 获取批次大小
  82. drop procedure if exists sync$get_batch_size;
  83. delimiter $$
  84. create procedure sync$get_batch_size(out p_batch_size int)
  85. begin
  86. set p_batch_size = @batch_detno;
  87. end;$$
  88. delimiter ;