diff --git a/rds_mysql/stored_procedure/internal02/crm_distribution_Product_Metrics_vod__c.sql b/rds_mysql/stored_procedure/internal02/crm_distribution_Product_Metrics_vod__c.sql index 34b43a22..bf517a21 100644 --- a/rds_mysql/stored_procedure/internal02/crm_distribution_Product_Metrics_vod__c.sql +++ b/rds_mysql/stored_procedure/internal02/crm_distribution_Product_Metrics_vod__c.sql @@ -1,39 +1,52 @@ -CREATE PROCEDURE `crm_distribution_Product_Metrics_vod__c` () +CREATE PROCEDURE `crm_distribution_Product_Metrics_vod__c`() +SQL SECURITY INVOKER BEGIN --- 変数宣言 +-- 振り分けスキーマ DECLARE distribution_schema VARCHAR(64); +-- 振り分けカラム DECLARE target_column_value VARCHAR(64); +-- 振り分け先テーブルID DECLARE temp_table_id VARCHAR(18); +-- カーソルフェッチステータス DECLARE fetch_done BOOLEAN DEFAULT FALSE; --- カーサー設定 +-- カーソル設定 DECLARE table_cursor CURSOR FOR SELECT Id, medaca_parent_msj_product_classification__c FROM internal02.crm_Product_Metrics_vod__c; DECLARE CONTINUE HANDLER FOR NOT FOUND SET fetch_done = TRUE; -- エラー処理 -DECLARE EXIT HANDLER FOR SQLEXCEPTION + DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN GET DIAGNOSTICS CONDITION 1 @error_state = RETURNED_SQLSTATE, @error_msg = MESSAGE_TEXT; ROLLBACK; + SET @error_msg = ( + CASE + WHEN LENGTH(@error_msg) > 128 THEN CONCAT(SUBSTRING(@error_msg, 1, 125), '...') + ELSE @error_msg + END + ); SIGNAL SQLSTATE '45000' SET MYSQL_ERRNO = @error_state, MESSAGE_TEXT = @error_msg; END; +START TRANSACTION; + -- UPSERT STATEMENT設定 -SET @upsert_statement = - 'INSERT INTO $$distribution_schema$$.crm_Product_Metrics_vod__c (Id, IsDeleted, Name, CreatedDate, CreatedById, LastModifiedDate, - LastModifiedById, SystemModstamp, MayEdit, IsLocked, LastViewedDate, LastReferencedDate, Account_vod__c, - Awareness__c, Selling_Stage__c, Formulary_Status__c, Movement__c, Products_vod__c, Segment__c, X12_mo_trx_chg__c, - Speaker_Skills__c, Investigator_Readiness__c, Engagements__c, Mobile_ID_vod__c, External_ID_vod__c, MSJ_Patient__c, - Detail_Group_vod__c, MSJ_EB_1st_Line_Liver_Meta__c, MSJ_EB_1st_Line_Multi_Meta__c, MSJ_EB_2nd_Line_Mono__c, - MSJ_EB_2nd_Line_Combination__c, MSJ_EB_3rd_Line_Mono__c, MSJ_EB_3rd_Line_Combination__c, EMDS_Ability__c, - EMDS_Brand_Loyalty__c, EMDS_Decision_Maker__c, EMDS_Early_Tech_Adopter__c, EMDS_Influence__c, EMDS_Main_Driver__c, - EMDS_Priority__c, EMDS_Willingness__c, MSJ_KTL_Type__c, MSJ_KTL_Tier__c, MSJ_Publications__c, MSJ_Clinical_Trials__c, - MSJ_Speaker_for_Medical_Events__c, MSJ_Advisor_to_Medical_Affairs__c, MSJ_Guidelines_Treatment_Standards__c, - MSJ_Therapeutic_Area_Expertise__c, MSJ_MAP_GAP__c, MSJ_Associations__c, MSJ_Tier_Score__c, start_datetime, - end_datetime, file_name, file_row_cnt, delete_flg, ins_user, ins_date, upd_user, upd_date) +SET @upsert_statement_base = + 'INSERT INTO $$distribution_schema$$.crm_Product_Metrics_vod__c + (Id, IsDeleted, Name, CreatedDate, CreatedById, LastModifiedDate, + LastModifiedById, SystemModstamp, MayEdit, IsLocked, LastViewedDate, LastReferencedDate, Account_vod__c, + Awareness__c, Selling_Stage__c, Formulary_Status__c, Movement__c, Products_vod__c, Segment__c, X12_mo_trx_chg__c, + Speaker_Skills__c, Investigator_Readiness__c, Engagements__c, Mobile_ID_vod__c, External_ID_vod__c, MSJ_Patient__c, + Detail_Group_vod__c, MSJ_EB_1st_Line_Liver_Meta__c, MSJ_EB_1st_Line_Multi_Meta__c, MSJ_EB_2nd_Line_Mono__c, + MSJ_EB_2nd_Line_Combination__c, MSJ_EB_3rd_Line_Mono__c, MSJ_EB_3rd_Line_Combination__c, EMDS_Ability__c, + EMDS_Brand_Loyalty__c, EMDS_Decision_Maker__c, EMDS_Early_Tech_Adopter__c, EMDS_Influence__c, EMDS_Main_Driver__c, + EMDS_Priority__c, EMDS_Willingness__c, MSJ_KTL_Type__c, MSJ_KTL_Tier__c, MSJ_Publications__c, MSJ_Clinical_Trials__c, + MSJ_Speaker_for_Medical_Events__c, MSJ_Advisor_to_Medical_Affairs__c, MSJ_Guidelines_Treatment_Standards__c, + MSJ_Therapeutic_Area_Expertise__c, MSJ_MAP_GAP__c, MSJ_Associations__c, MSJ_Tier_Score__c, start_datetime, + end_datetime, file_name, file_row_cnt, delete_flg, ins_user, ins_date, upd_user, upd_date) SELECT Id, IsDeleted, Name, CreatedDate, CreatedById, LastModifiedDate, LastModifiedById, SystemModstamp, MayEdit, IsLocked, LastViewedDate, LastReferencedDate, Account_vod__c, Awareness__c, Selling_Stage__c, @@ -50,7 +63,7 @@ SET @upsert_statement = FROM internal02.crm_Product_Metrics_vod__c AS internaltb WHERE - Id = $$temp_table_id$$ + Id = ? ON DUPLICATE KEY UPDATE IsDeleted = internaltb.IsDeleted, Name = internaltb.Name, CreatedDate = internaltb.CreatedDate, CreatedById = internaltb.CreatedById, LastModifiedDate = internaltb.LastModifiedDate, @@ -87,7 +100,6 @@ SET @upsert_statement = file_name = internaltb.file_name, file_row_cnt = internaltb.file_row_cnt, upd_user = CURRENT_USER(), upd_date = CURRENT_TIMESTAMP();'; - OPEN table_cursor; -- ループ @@ -103,15 +115,15 @@ TableCursorLoop: LOOP SET @distribution_schema = get_distribution_to_schema('crm_Product_Metrics_vod__c', 'medaca_parent_msj_product_classification__c', target_column_value); SET @temp_table_id = temp_table_id; - SET @upsert_statement = REPLACE(@upsert_statement, "$$distribution_schema$$", @distribution_schema); - SET @upsert_statement = REPLACE(@upsert_statement, "$$temp_table_id$$", @temp_table_id); + SET @upsert_statement = REPLACE(@upsert_statement_base, "$$distribution_schema$$", @distribution_schema); -- UPSERT実行 PREPARE stmt FROM @upsert_statement; - EXECUTE stmt; + EXECUTE stmt USING @temp_table_id; DEALLOCATE PREPARE stmt; END LOOP; CLOSE table_cursor; +COMMIT; -END +END \ No newline at end of file