sync_game_sequences.sql 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. -- Dong bo sequence voi ID lon nhat dang co trong cac bang game.
  2. -- Script chi tien sequence ve phia truoc, khong sua/xoa du lieu nghiep vu.
  3. -- Nen chay bang schema KITTY_FALL truoc khi deploy API/Worker moi.
  4. SET SERVEROUTPUT ON;
  5. DECLARE
  6. PROCEDURE sync_sequence(
  7. p_sequence_name IN VARCHAR2,
  8. p_table_name IN VARCHAR2,
  9. p_id_column IN VARCHAR2
  10. ) IS
  11. v_sequence_name VARCHAR2(128);
  12. v_table_name VARCHAR2(128);
  13. v_id_column VARCHAR2(128);
  14. v_max_id NUMBER;
  15. v_current_id NUMBER;
  16. v_increment NUMBER;
  17. BEGIN
  18. v_sequence_name := DBMS_ASSERT.SIMPLE_SQL_NAME(UPPER(p_sequence_name));
  19. v_table_name := DBMS_ASSERT.SIMPLE_SQL_NAME(UPPER(p_table_name));
  20. v_id_column := DBMS_ASSERT.SIMPLE_SQL_NAME(UPPER(p_id_column));
  21. EXECUTE IMMEDIATE
  22. 'SELECT NVL(MAX(' || v_id_column || '), 0) FROM ' || v_table_name
  23. INTO v_max_id;
  24. EXECUTE IMMEDIATE
  25. 'SELECT ' || v_sequence_name || '.NEXTVAL FROM DUAL'
  26. INTO v_current_id;
  27. IF v_current_id < v_max_id THEN
  28. v_increment := v_max_id - v_current_id;
  29. EXECUTE IMMEDIATE
  30. 'ALTER SEQUENCE ' || v_sequence_name || ' INCREMENT BY ' || TO_CHAR(v_increment);
  31. EXECUTE IMMEDIATE
  32. 'SELECT ' || v_sequence_name || '.NEXTVAL FROM DUAL'
  33. INTO v_current_id;
  34. EXECUTE IMMEDIATE
  35. 'ALTER SEQUENCE ' || v_sequence_name || ' INCREMENT BY 1';
  36. END IF;
  37. -- Khong dung DBMS_OUTPUT: mot so schema production khong duoc cap
  38. -- EXECUTE tren package nay. Ket qua duoc xac nhan bang cac SELECT ben duoi.
  39. EXCEPTION
  40. WHEN OTHERS THEN
  41. BEGIN
  42. EXECUTE IMMEDIATE
  43. 'ALTER SEQUENCE ' || v_sequence_name || ' INCREMENT BY 1';
  44. EXCEPTION
  45. WHEN OTHERS THEN NULL;
  46. END;
  47. RAISE;
  48. END;
  49. BEGIN
  50. sync_sequence('SEQ_GAME_PLAY_SESSION', 'GAME_PLAY_SESSION', 'SESSION_ID');
  51. sync_sequence('SEQ_GAME_LEVEL_ATTEMPT', 'GAME_LEVEL_ATTEMPT', 'ATTEMPT_ID');
  52. sync_sequence('SEQ_GAME_REWARD_LOG', 'GAME_REWARD_LOG', 'REWARD_LOG_ID');
  53. sync_sequence('SEQ_GAME_SCORE_LEDGER', 'GAME_SCORE_LEDGER', 'LEDGER_ID');
  54. sync_sequence('SEQ_GAME_MONTHLY_RANKING', 'GAME_MONTHLY_RANKING', 'RANKING_ID');
  55. sync_sequence('SEQ_GAME_REWARD_LIMIT_USAGE', 'GAME_REWARD_LIMIT_USAGE', 'LIMIT_USAGE_ID');
  56. sync_sequence('SEQ_GAME_MONTHLY_DRAW', 'GAME_MONTHLY_DRAW', 'DRAW_ID');
  57. sync_sequence('SEQ_GAME_MONTHLY_DRAW_TICKET', 'GAME_MONTHLY_DRAW_TICKET', 'TICKET_ID');
  58. sync_sequence('SEQ_GAME_MONTHLY_WINNER', 'GAME_MONTHLY_WINNER', 'WINNER_ID');
  59. END;
  60. /
  61. -- Xac nhan rieng loi PK_GAME_LEVEL_ATTEMPT vua gap:
  62. SELECT MAX(ATTEMPT_ID) AS MAX_ATTEMPT_ID FROM GAME_LEVEL_ATTEMPT;
  63. SELECT SEQUENCE_NAME, LAST_NUMBER, INCREMENT_BY, CYCLE_FLAG
  64. FROM USER_SEQUENCES
  65. WHERE SEQUENCE_NAME = 'SEQ_GAME_LEVEL_ATTEMPT';