Guest User

Untitled

a guest
Oct 5th, 2017
256
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. CREATE DEFINER=`root`@`localhost` PROCEDURE `GeraFeriados`()
  2. BEGIN
  3.  
  4. -- ----------------------------------------------------------------------------------
  5. -- Variaveis para o algoritmo de Pascoa (Meeus/Jones/Butcher)
  6. -- ----------------------------------------------------------------------------------
  7. DECLARE nA INT;
  8. DECLARE nB INT;
  9. DECLARE nC INT;
  10. DECLARE nD INT;
  11. DECLARE nE INT;
  12. DECLARE nF INT;
  13. DECLARE nG INT;
  14. DECLARE nH INT;
  15. DECLARE nI INT;
  16. DECLARE nK INT;
  17. DECLARE nL INT;
  18. DECLARE nM INT;
  19. DECLARE nAno INT;
  20. DECLARE nMesDePascoa INT;
  21. DECLARE nDiaDePascoa INT;
  22. DECLARE dtPascoa DATE;
  23.  
  24. DECLARE dtInicial DATE;
  25. DECLARE dtFinal DATE;
  26.  
  27. SET dtInicial = '1990-01-01';
  28. SET dtFinal = '2099-01-01';
  29.  
  30. -- ------------------------------------
  31. -- Cria a tabela se não existir
  32. -- ------------------------------------
  33.  
  34. DROP TABLE IF EXISTS Feriado;
  35. CREATE TABLE IF NOT EXISTS Feriado (
  36. nrAno SMALLINT NOT NULL,
  37. nrMes SMALLINT NOT NULL,
  38. nrDia SMALLINT NOT NULL,
  39. tpFeriado SMALLINT(1) NULL,
  40. dsFeriado VARCHAR(100) NOT NULL,
  41. sgUF CHAR(2) NOT NULL
  42. );
  43.  
  44. ALTER TABLE Feriado ADD CONSTRAINT Pk_Feriado PRIMARY KEY CLUSTERED (nrAno, nrMes, nrDia, sgUF);
  45.  
  46.  
  47. -- Apaga os dados se já tiverem sido populados
  48. TRUNCATE TABLE Feriado;
  49.  
  50.  
  51. -- -----------------------------
  52. -- Feriados nacionais
  53. -- -----------------------------
  54. INSERT INTO Feriado
  55. SELECT 0, 1, 1, 1, 'Confraternização Universal', ''
  56. UNION
  57. SELECT 0, 4, 21, 1, 'Tiradentes', ''
  58. UNION
  59. SELECT 0, 5, 1, 1, 'Dia do Trabalhador', ''
  60. UNION
  61. SELECT 0, 9, 7, 1, 'Independência', ''
  62. UNION
  63. SELECT 0, 10, 12, 1, 'Nossa Senhora Aparecida', ''
  64. UNION
  65. SELECT 0, 11, 2, 1, 'Finados', ''
  66. UNION
  67. SELECT 0, 11, 15, 1, 'Proclamação da República', ''
  68. UNION
  69. SELECT 0, 12, 25, 1, 'Natal', '';
  70. -- -----------------------------
  71. -- Feriados estaduais
  72. -- -----------------------------
  73.  
  74. -- Acre
  75. INSERT INTO Feriado
  76. SELECT 0, 1, 23, 2, 'Dia do evangélico', 'AC'
  77. UNION
  78. SELECT 0, 3, 8, 2, 'Alusivo ao Dia Internacional da Mulher', 'AC'
  79. UNION
  80. SELECT 0, 6, 15, 2, 'Aniversário do estado', 'AC'
  81. UNION
  82. SELECT 0, 9, 5, 2, 'Dia da Amazônia', 'AC'
  83. UNION
  84. SELECT 0, 11, 17, 2, 'Assinatura do Tratado de Petrópolis', 'AC';
  85.  
  86. -- Alagoas
  87. INSERT INTO Feriado
  88. SELECT 0, 6, 24, 2, 'São João', 'AL'
  89. UNION
  90. SELECT 0, 6, 29, 2, 'São Pedro', 'AL'
  91. UNION
  92. SELECT 0, 9, 16, 2, 'Emancipação política', 'AL'
  93. UNION
  94. SELECT 0, 11, 20, 2, 'Morte de Zumbi dos Palmares', 'AL';
  95.  
  96. -- Amapá
  97. INSERT INTO Feriado
  98. SELECT 0, 3, 19, 2, 'Dia de São José, santo padroeiro do Estado do Amapá', 'AP'
  99. UNION
  100. SELECT 0, 9, 13, 2, 'Criação do Território Federal (Data Magna do estado)', 'AP';
  101.  
  102. -- Amazonas
  103. INSERT INTO Feriado
  104. SELECT 0, 9, 5, 2, 'Elevação do Amazonas à categoria de província', 'AM'
  105. UNION
  106. SELECT 0, 11, 20, 2, 'Dia da Consciência Negra', 'AM';
  107.  
  108. -- Bahia
  109. INSERT INTO Feriado
  110. SELECT 0, 7, 2, 2, 'Independência da Bahia (Data magna do estado)', 'BA';
  111.  
  112. -- Ceará
  113. INSERT INTO Feriado
  114. SELECT 0, 3, 25, 2, 'Data magna do estado (data da abolição da escravidão no Ceará)', 'CE';
  115.  
  116. -- Distrito Federal
  117. INSERT INTO Feriado
  118. SELECT 0, 4, 21, 2, 'Fundação de Brasília', 'DF'
  119. UNION
  120. SELECT 0, 11, 30, 2, 'Dia do evangélico', 'DF';
  121.  
  122. -- Maranhão
  123. INSERT INTO Feriado
  124. SELECT 0, 7, 28, 2, 'Adesão do Maranhão à independência do Brasil', 'MA';
  125.  
  126. -- Mato Grosso
  127. INSERT INTO Feriado
  128. SELECT 0, 11, 20, 2, 'Dia da Consciência Negra', 'MT';
  129.  
  130. -- Mato Grosso do Sul
  131. INSERT INTO Feriado
  132. SELECT 0, 10, 11, 2, 'Criação do estado', 'MS';
  133.  
  134. -- Minas Gerais
  135. INSERT INTO Feriado
  136. SELECT 0, 4, 21, 2, 'Data magna do estado', 'MG';
  137.  
  138. -- Pará
  139. INSERT INTO Feriado
  140. SELECT 0, 8, 15, 2, 'Adesão do Grão-Pará à independência do Brasil (data magna)', 'PA';
  141.  
  142. -- Paraíba
  143. INSERT INTO Feriado
  144. SELECT 0, 7, 26, 2, 'Homenagem à memória do ex-presidente João Pessoa', 'PB'
  145. UNION
  146. SELECT 0, 8, 5, 2, 'Fundação do Estado em 1585', 'PB';
  147.  
  148. -- Paraná
  149. INSERT INTO Feriado
  150. SELECT 0, 12, 19, 2, 'Emancipação política (emancipação do Paraná)', 'PR';
  151.  
  152. -- Piauí
  153. INSERT INTO Feriado
  154. SELECT 0, 10, 19, 2, 'Dia do Piauí', 'PI';
  155.  
  156. -- Rio de Janeiro
  157. INSERT INTO Feriado
  158. SELECT 0, 4, 23, 2, 'Dia de São Jorge', 'RJ'
  159. UNION
  160. SELECT 0, 11, 20, 2, 'Dia da Consciência Negra', 'RJ';
  161.  
  162. -- Rio Grande do Norte
  163. INSERT INTO Feriado
  164. SELECT 0, 10, 3, 2, 'Mártires de Cunhaú e Uruaçu', 'RN';
  165.  
  166. -- Rio Grande do Sul
  167. INSERT INTO Feriado
  168. SELECT 0, 9, 20, 2, 'Proclamação da República Rio-Grandense', 'RS';
  169.  
  170. -- Rondônia
  171. INSERT INTO Feriado
  172. SELECT 0, 1, 4, 2, 'Criação do estado (data magna)', 'RO'
  173. UNION
  174. SELECT 0, 6, 18, 2, 'Dia do evangélico', 'RO';
  175.  
  176. -- Roraima
  177. INSERT INTO Feriado
  178. SELECT 0, 10, 5, 2, 'Criação do estado', 'RR';
  179.  
  180. -- Santa Catarina
  181. INSERT INTO Feriado
  182. SELECT 0, 10, 5, 2, 'Dia de Santa Catarina', 'SC';
  183.  
  184. -- São Paulo
  185. INSERT INTO Feriado
  186. SELECT 0, 7, 9, 2, 'Revolução Constitucionalista de 1932 (Data magna do estado)', 'SP';
  187.  
  188. -- Sergipe
  189. INSERT INTO Feriado
  190. SELECT 0, 3, 17, 2, 'Aniversário de Aracaju', 'SE'
  191. UNION
  192. SELECT 0, 6, 24, 2, 'São João', 'SE'
  193. UNION
  194. SELECT 0, 7, 8, 2, 'Autonomia política de Sergipe', 'SE'
  195. UNION
  196. SELECT 0, 12, 8, 2, 'Nossa Senhora da Conceição', 'SE';
  197.  
  198. -- Tocantins
  199. INSERT INTO Feriado
  200. SELECT 0, 10, 5, 2, 'Criação do estado', 'TO'
  201. UNION
  202. SELECT 0, 3, 18, 2, 'Autonomia do Estado (criação da Comarca do Norte)', 'TO'
  203. UNION
  204. SELECT 0, 9, 8, 2, 'Padroeira do Estado (Nossa Senhora da Natividade)', 'TO';
  205.  
  206.  
  207. -- -----------------------------------------------------------------------------------
  208. -- Feriados móveis: algoritmo de Pascoa (Meeus/Jones/Butcher)
  209. -- -----------------------------------------------------------------------------------
  210.  
  211. WHILE(DATE(dtInicial) <= DATE(dtFinal)) DO
  212.  
  213. SET nAno = YEAR(dtInicial);
  214.  
  215. SET nA = nAno % 19;
  216. SET nB = FLOOR(nAno / 100);
  217. SET nC = nAno % 100;
  218. SET nD = FLOOR(nB / 4);
  219. SET nE = nB % 4;
  220. SET nF = FLOOR((nB + 8) / 25);
  221. SET nG = FLOOR((nB - nF + 1) / 3);
  222. SET nH = (19 * nA + nB - nD - nG + 15) % 30;
  223. SET nI = FLOOR(nC / 4);
  224. SET nK = nC % 4;
  225. SET nL = (32 + 2 * nE + 2 * nI - nH - nK) % 7;
  226. SET nM = FLOOR((nA + 11 * nH + 22 * nL) / 451);
  227. SET nMesDePascoa = FLOOR((nH + nL - 7 * nM + 114) / 31);
  228. SET nDiaDePascoa = ((nH + nL - 7 * nM + 114) % 31) + 1;
  229.  
  230. SET dtPascoa = CONCAT(CAST(nAno AS CHAR(4)), '-', CAST(nMesDePascoa AS CHAR(2)), '-', CAST(nDiaDePascoa AS CHAR(2)));
  231.  
  232. INSERT INTO Feriado
  233. SELECT YEAR(DATE_ADD(dtPascoa, INTERVAL -2 DAY)), MONTH(DATE_ADD(dtPascoa, INTERVAL -2 DAY)), DAY(DATE_ADD(dtPascoa, INTERVAL -2 DAY)), 1, 'Paixão de Cristo', '';
  234.  
  235. INSERT INTO Feriado
  236. SELECT YEAR(DATE_ADD(dtPascoa, INTERVAL -48 DAY)), MONTH(DATE_ADD(dtPascoa, INTERVAL -48 DAY)), DAY(DATE_ADD(dtPascoa, INTERVAL -48 DAY)), 1, 'Carnaval', '';
  237.  
  238. INSERT INTO Feriado
  239. SELECT YEAR(DATE_ADD(dtPascoa, INTERVAL -47 DAY)), MONTH(DATE_ADD(dtPascoa, INTERVAL -47 DAY)), DAY(DATE_ADD(dtPascoa, INTERVAL -47 DAY)), 1, 'Carnaval', '';
  240.  
  241. INSERT INTO Feriado
  242. SELECT YEAR(DATE_ADD(dtPascoa, INTERVAL 60 DAY)), MONTH(DATE_ADD(dtPascoa, INTERVAL 60 DAY)), DAY(DATE_ADD(dtPascoa, INTERVAL 60 DAY)), 1, 'Corpus Christi', '';
  243.  
  244. SET dtInicial = DATE_ADD(dtInicial, INTERVAL 1 YEAR);
  245.  
  246. END WHILE;
  247.  
  248.  
  249. END
RAW Paste Data