Advertisement
Guest User

Untitled

a guest
Feb 22nd, 2018
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.82 KB | None | 0 0
  1. CREATE OR REPLACE FUNCTION fs_migrate_product_margin_supplier_from_th(
  2. character varying,
  3. bigint)
  4. RETURNS void AS
  5. $BODY$
  6. DECLARE
  7. pDatetime ALIAS FOR $1;
  8. pUserId ALIAS FOR $2;
  9.  
  10. vYes character varying(1);
  11. vEmptyChar character varying(1);
  12. vTenantId bigint;
  13. vDbName character varying(50);
  14. vDbPort character varying(10);
  15. vDbHost character varying(50);
  16. vDbUser character varying(50);
  17. vDbPassword character varying(50);
  18.  
  19. BEGIN
  20.  
  21. vYes := 'Y';
  22. vEmptyChar := '';
  23. vTenantId := 11;
  24.  
  25. --mendapatkan data server tujuan dblink
  26. SELECT f_get_value_system_config_by_param_code(vTenantId, 'PALOMATH.DB.NAME') INTO vDbName;
  27. SELECT f_get_value_system_config_by_param_code(vTenantId, 'PALOMATH.DB.PORT') INTO vDbPort;
  28. SELECT f_get_value_system_config_by_param_code(vTenantId, 'PALOMATH.DB.HOSTADDR') INTO vDbHost;
  29. SELECT f_get_value_system_config_by_param_code(vTenantId, 'PALOMATH.DB.USER') INTO vDbUser;
  30. SELECT f_get_value_system_config_by_param_code(vTenantId, 'PALOMATH.DB.PASSWORD') INTO vDbPassword;
  31.  
  32. --dari TH ke table temp di WSC
  33. UPDATE temp_product_margin_supplier_th A
  34. SET
  35. disc_member_percentage = X.disc_member_percentage,
  36. disc_promo_percentage = X.disc_promo_percentage,
  37. margin_supplier_percentage = X.margin_supplier_percentage,
  38. margin_internal_percentage = X.margin_internal_percentage,
  39. update_datetime = pDatetime,
  40. update_user_id = pUserId,
  41. version = version + 1
  42. FROM dblink('dbname='||vDbName||' port='||vDbPort||' hostaddr='||vDbHost||' user='||vDbUser||' password='||vDbPassword||''::text,
  43. 'SELECT B.partner_code, C.brand_code,
  44. A.disc_member_percentage, A.disc_promo_percentage, A.margin_supplier_percentage, A.margin_internal_percentage
  45. FROM m_product_margin_supplier A
  46. INNER JOIN m_partner B ON A.supplier_id = B.partner_id
  47. INNER JOIN m_brand C ON A.brand_id = C.brand_id'
  48. )
  49. AS X ( merchant_code text, brand_code text, disc_member_percentage numeric, disc_promo_percentage numeric,
  50. margin_supplier_percentage numeric, margin_internal_percentage numeric)
  51. WHERE A.merchant_code = X.merchant_code
  52. AND A.brand_code = X.brand_code;
  53.  
  54. INSERT INTO temp_product_margin_supplier_th(
  55. merchant_code, brand_code, disc_member_percentage,
  56. disc_promo_percentage, margin_supplier_percentage, margin_internal_percentage,
  57. create_datetime, create_user_id, update_datetime, update_user_id
  58. )
  59. SELECT merchant_code, brand_code, disc_member_percentage,
  60. disc_promo_percentage, margin_supplier_percentage, margin_internal_percentage,
  61. pDatetime, pUserId, pDatetime, pUserId
  62. FROM dblink('dbname='||vDbName||' port='||vDbPort||' hostaddr='||vDbHost||' user='||vDbUser||' password='||vDbPassword||''::text,
  63. 'SELECT B.partner_code, C.brand_code,
  64. A.disc_member_percentage, A.disc_promo_percentage, A.margin_supplier_percentage, A.margin_internal_percentage
  65. FROM m_product_margin_supplier A
  66. INNER JOIN m_partner B ON A.supplier_id = B.partner_id
  67. INNER JOIN m_brand C ON A.brand_id = C.brand_id'
  68. )
  69. AS X ( merchant_code text, brand_code text, disc_member_percentage numeric, disc_promo_percentage numeric,
  70. margin_supplier_percentage numeric, margin_internal_percentage numeric)
  71. WHERE NOT EXISTS(
  72. SELECT 1 FROM temp_product_margin_supplier_th Y
  73. WHERE Y.merchant_code = X.merchant_code
  74. AND Y.brand_code = X.brand_code);
  75.  
  76. -- update m_product_margin_supplier
  77. UPDATE m_product_margin_supplier A
  78. SET
  79. disc_member_percentage = W.disc_member_percentage,
  80. disc_promo_percentage = W.disc_promo_percentage,
  81. margin_supplier_percentage = W.margin_supplier_percentage,
  82. margin_internal_percentage = W.margin_internal_percentage,
  83. update_datetime = pDatetime,
  84. update_user_id = pUserId,
  85. version = version + 1
  86. FROM (
  87. SELECT X.merchant_code, X.brand_code, X.disc_member_percentage, X.disc_promo_percentage,
  88. X.margin_supplier_percentage, X.margin_internal_percentage
  89. FROM temp_product_margin_supplier_th X
  90. INNER JOIN m_product_margin_supplier Y
  91. ON X.merchant_code = Y.supplier_code AND X.brand_code = Y.brand_code
  92. ) W
  93. WHERE A.supplier_code = W.merchant_code
  94. AND A.brand_code = W.brand_code;
  95.  
  96. -- dari table temp ke m_product_margin_supplier
  97. INSERT INTO m_product_margin_supplier(
  98. tenant_id, supplier_code, brand_code,
  99. disc_member_percentage, disc_promo_percentage, margin_supplier_percentage,
  100. margin_internal_percentage, create_datetime, create_user_id,
  101. update_datetime, update_user_id, active, active_datetime,
  102. non_active_datetime)
  103. SELECT vTenantId, merchant_code, brand_code,
  104. disc_member_percentage, disc_promo_percentage, margin_supplier_percentage,
  105. margin_internal_percentage, pDatetime, pUserId,
  106. pDatetime, pUserId, vYes, pDatetime, vEmptyChar
  107. FROM temp_product_margin_supplier_th A
  108. WHERE NOT EXISTS (
  109. SELECT 1 FROM m_product_margin_supplier X
  110. WHERE X.supplier_code = A.merchant_code
  111. AND X.brand_code = A.brand_code
  112. )
  113. GROUP BY merchant_code, brand_code,
  114. disc_member_percentage, disc_promo_percentage, margin_supplier_percentage,
  115. margin_internal_percentage;
  116.  
  117. -- dari table temp ke m_merchant_brand
  118. INSERT INTO m_merchant_brand(
  119. merchant_code, brand_code, create_datetime,
  120. create_user_id, update_datetime, update_user_id, active,
  121. active_datetime, non_active_datetime)
  122. SELECT merchant_code, brand_code, pDatetime,
  123. pUserId, pDatetime, pUserId, vYes,
  124. pDatetime, vEmptyChar
  125. FROM temp_product_margin_supplier_th A
  126. WHERE NOT EXISTS (
  127. SELECT 1 FROM m_merchant_brand X
  128. WHERE X.merchant_code = A.merchant_code
  129. AND X.brand_code = A.brand_code
  130. )
  131. GROUP BY merchant_code, brand_code;
  132.  
  133.  
  134. END;
  135. $BODY$
  136. LANGUAGE plpgsql VOLATILE
  137. COST 100;
  138. /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement