ITPub博客

首页 > Linux操作系统 > Linux操作系统 > SQL Turning

SQL Turning

原创 Linux操作系统 作者:keeking 时间:2011-10-13 14:59:08 0 删除 编辑
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[USP_INCRLOAD_CUSTOMER_PROCESS_TH]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[USP_INCRLOAD_CUSTOMER_PROCESS_TH]
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO
CREATE PROCEDURE USP_INCRLOAD_CUSTOMER_PROCESS_TH
 
AS
BEGIN
SET NOCOUNT ON
-------------------------------------------------------------------------------
-- Author :  KH Kwan
-- Purpose : Updates the CUSTOMER Dimension (Incremental)
-- Date Created : Feb 21 2005
-- Version :
-- 21 Feb 2005 Version 0.1 - Update the Vintage / Age and Beneficiary/Holder/Insured Flags
--
--    
--------------------------------------------------------------------------------
--------------------------------------------------------
-- Declare all variables here
--------------------------------------------------------
DECLARE @is_Success tinyint
DECLARE @intRowCount integer
DECLARE @intErrorCode integer
DECLARE @sourceSystemID nvarchar(5)
DECLARE @sourceFileName nvarchar(50)
DECLARE @PackageName nvarchar(50)
DECLARE @DateStart datetime
DECLARE @DateEnd datetime
DECLARE @ProcessingCount integer
DECLARE @Status nvarchar(50)
DECLARE @Remarks nvarchar(1000)
DECLARE @iReturn integer
--------------------------------------------------------
-- Set all the required variables here
--------------------------------------------------------
SELECT @sourceSystemID = ''
SELECT @sourceFileName = ''
SELECT @PackageName = 'USP_INCRLOAD_CUSTOMER_PROCESS_TH'
SELECT @DateStart = getdate()
SELECT @DateEnd = getdate()
SELECT @ProcessingCount = 0
SELECT @Status = 'Job Started'
SELECT @Remarks = 'Incremental Load for Customer - Update the Customer Vintage/Age/Policy Profile Flags'
SELECT @is_Success = 1
----------------------------------------------------------------------------------------
-- Start of job and log job details
----------------------------------------------------------------------------------------
     EXEC @iReturn = dbo.USP_LOG_JOBDETAILS  'I', 
       @sourceSystemID,
       @sourceFileName,
       @PackageName,
       @DateStart,
         @DateEnd,
       @ProcessingCount,
       @Status,
       @Remarks,
       @iReturn 
          
      PRINT @iReturn
----------------------------------------------------------------------------------------
-- Update the Preferred Flag
--- Based on the POLICY EXPIRY / ISSUE DATE
----------------------------------------------------------------------------------------
--RECALCULATE THE AGE
   UPDATE CVM_STAGE_TH.dbo.CUSTOMER
   SET AGE = FLOOR(
                DATEDIFF (
  DAY,
  DOB,
  GETDATE()
       ) / 365.25),
    TIMESTAMP_ID = GetDate() 
FROM CUSTOMER
WHERE
    FLOOR(
        DATEDIFF (
       DAY,
     DOB,
     GETDATE()
          ) / 365.25
         ) <> AGE
AND DOB IS NOT NULL AND DOB <> '1900-01-01'
----------------------------------------------------------------------------------------
-- Update the Flags and Vintage
---
----------------------------------------------------------------------------------------
/* SELECTS 'Y' FOR THE Y/N FLAG ATTRIBUTES BELOW. MERGING RULE IS: IF ONE SET TO 'Y' THEN 'Y' ELSE 'N' */
UPDATE CUSTOMER
SET IS_INSURED = vs.IS_INSURED,
    IS_BENEFICIARY = vs.IS_BENEFICIARY,
    IS_HOLDER = vs.IS_HOLDER,
    IS_ACTIVE = vs.IS_ACTIVE,
    CUSTOMER_INACTIVE_DATE = vs.CUSTOMER_INACTIVE_DATE,   
    EFFECTIVE_DATE = vs.EFFECTIVE_DATE, 
    VINTAGE = vs.VINTAGE, 
    VINTAGE_MONTHS = vs.VINTAGE_MONTHS,
    TIMESTAMP_ID = GetDate() 
FROM
CUSTOMER c
    INNER JOIN
(
SELECT  ECM.CUSTOMER_ID,
 ISNULL(( TTT.IS_INSURED),('N')) AS  IS_INSURED, 
 ISNULL(( TTT.IS_BENEFICIARY),('N')) AS  IS_BENEFICIARY, 
 ISNULL(( TTT.IS_HOLDER),('N')) AS  IS_HOLDER,
 CASE
    WHEN EP2.ANY_INFORCE = 1
    THEN 'Y'
    ELSE 'N'
 END     AS   IS_ACTIVE, 
 CASE
    WHEN EP2.ANY_INFORCE = 1
    THEN NULL
    ELSE TTT.CUSTOMER_INACTIVE_DATE
 END     AS   CUSTOMER_INACTIVE_DATE, 
 ISNULL((CONVERT(VARCHAR(10),(TTT.ISSUE_DATE),101)),( '01/01/1900')) AS  EFFECTIVE_DATE,
 TTT.ISSUE_DATE     ISSUE_DATE,
 TTT.EXPIRY_DATE     EXPIRY_DATE, 
 /* TTT.ISSUE DATE IS THE EARLIEST POLICY ISSUE DATE FOR THE DEDUPED CUSTOMER */
-- Call HKS106360: START
 CEILING(CAST(
 DATEDIFF
  (mm, --YEAR, 
  CASE WHEN  TTT.ISSUE_DATE IS NULL OR
    TTT.ISSUE_DATE = '1900-01-01' OR
    TTT.ISSUE_DATE > TTT.EXPIRY_DATE
          THEN GETDATE()
       ELSE TTT.ISSUE_DATE
  END,
  CASE WHEN  
 /* CVM-101, KHO, 7-OCT-03 */
    EP2.ANY_INFORCE = 1 OR
 /* CVM-101, KHO, 7-OCT-03 */     
    TTT.EXPIRY_DATE IS NULL OR
    TTT.EXPIRY_DATE > GETDATE() OR
    TTT.ISSUE_DATE IS NULL OR
    TTT.ISSUE_DATE = '1900-01-01' OR
    TTT.ISSUE_DATE > TTT.EXPIRY_DATE     
       THEN GETDATE()
       ELSE TTT.EXPIRY_DATE
                END ) AS DECIMAL) / 12.0)   AS VINTAGE,  
-- Call HKS106360: END    
 
 DATEDIFF(MONTH,
  CASE WHEN  TTT.ISSUE_DATE IS NULL OR
    TTT.ISSUE_DATE = '1900-01-01' OR
    TTT.ISSUE_DATE > TTT.EXPIRY_DATE
       THEN GETDATE()
       ELSE TTT.ISSUE_DATE END,
  CASE WHEN  
 /* CVM-101, KHO, 7-OCT-03 */
    EP2.ANY_INFORCE = 1 OR
 /* CVM-101, KHO, 7-OCT-03 */
    TTT.EXPIRY_DATE IS NULL OR
    TTT.EXPIRY_DATE > GETDATE() OR
    TTT.ISSUE_DATE IS NULL OR
    TTT.ISSUE_DATE = '1900-01-01' OR
    TTT.ISSUE_DATE > TTT.EXPIRY_DATE          
  THEN GETDATE()
  ELSE TTT.EXPIRY_DATE
  END)     AS VINTAGE_MONTHS
FROM CUSTOMER ECM
LEFT OUTER JOIN
  (
  SELECT
     pp.ROLE_ID         CUSTOMER_SSKEY,
     MAX(ep.POLICY_ID)        POLICY_ID, 
     MIN(pp.TRANS_DATE)        ISSUE_DATE,
     CASE WHEN MIN(ep.CANCEL_DATE) is NULL THEN GetDate()
          WHEN MAX(ep.CANCEL_DATE) >= GetDate() THEN GetDate()
          ELSE MAX(ep.CANCEL_DATE) END      EXPIRY_DATE, 
     MAX(ep.CANCEL_DATE)        CUSTOMER_INACTIVE_DATE,
     MAX(CASE WHEN pp.POLICY_PROFILE_TYPE = 2000 THEN 'Y' ELSE 'N' END)  IS_HOLDER,
     MAX(CASE WHEN pp.POLICY_PROFILE_TYPE = 2001 THEN 'Y' ELSE 'N' END)  IS_BENEFICIARY,
     MAX(CASE WHEN pp.POLICY_PROFILE_TYPE = 2003 THEN 'Y' ELSE 'N' END)  IS_INSURED 
  FROM
     POLICY_PROFILE pp
   LEFT OUTER JOIN CVM_STAGE_TH.dbo.POLICY ep
    ON pp.POLICY_ID = ep.POLICY_ID
  GROUP BY ROLE_ID
  ) TTT 
   ON  ECM.CUSTOMER_ID = TTT.CUSTOMER_SSKEY
    
LEFT OUTER JOIN
   (SELECT pc.CUSTOMER_ID,
---     MAX(CASE
---      WHEN p.CANCEL_DATE IS NULL
--      THEN 1 ELSE 0 END) ANY_INFORCE
-- STDize to use the Policy Status to determine in-force policies
       MAX(CASE
      WHEN p.STATUS IN ( '01', '02', '03', '04', '05')
      THEN 1 ELSE 0 END) ANY_INFORCE
     FROM CVM_STAGE_TH.dbo.POLICY p
--    INNER JOIN CVM_STAGE_TH.dbo.POLICY_CUSTOMER pc
    INNER JOIN CVM_STAGE_TH.dbo.CUST_POLICY_RELATION pc
    ON p.POLICY_ID = pc.POLICY_ID
    GROUP BY  pc.CUSTOMER_ID
   ) EP2
  ON ECM.CUSTOMER_ID = EP2.CUSTOMER_ID
WHERE
TTT.POLICY_ID IS NOT NULL
AND
(
ISNULL(( TTT.IS_INSURED),('N')) <> ECM.IS_INSURED OR
ISNULL(( TTT.IS_BENEFICIARY),('N')) <> ECM.IS_BENEFICIARY OR
ISNULL(( TTT.IS_HOLDER),('N')) <> ECM.IS_HOLDER OR
CASE
    WHEN EP2.ANY_INFORCE = 1
    THEN 'Y'
    ELSE 'N'
END <> ECM.IS_ACTIVE
OR
ISNULL((CONVERT(VARCHAR(10),(TTT.CUSTOMER_INACTIVE_DATE),101)),( '01/01/1900')) <> ECM.CUSTOMER_INACTIVE_DATE
OR
ISNULL((CONVERT(VARCHAR(10),(TTT.ISSUE_DATE),101)),( '01/01/1900')) <> ECM.EFFECTIVE_DATE
OR
-- Call HKS106360 START
CEILING(CAST(
DATEDIFF
  (mm, --YEAR, 
  CASE WHEN  TTT.ISSUE_DATE IS NULL OR
    TTT.ISSUE_DATE = '1900-01-01' OR
    TTT.ISSUE_DATE > TTT.EXPIRY_DATE
          THEN GETDATE()
       ELSE TTT.ISSUE_DATE
  END,
  CASE WHEN  
 /* CVM-101, KHO, 7-OCT-03 */
    EP2.ANY_INFORCE = 1 OR
 /* CVM-101, KHO, 7-OCT-03 */     
    TTT.EXPIRY_DATE IS NULL OR
    TTT.EXPIRY_DATE > GETDATE() OR
    TTT.ISSUE_DATE IS NULL OR
    TTT.ISSUE_DATE = '1900-01-01' OR
    TTT.ISSUE_DATE > TTT.EXPIRY_DATE     
       THEN GETDATE()
       ELSE TTT.EXPIRY_DATE
                END ) AS DECIMAL) / 12.0)
-- Call HKS106360 END
<> ECM.VINTAGE
OR
DATEDIFF(MONTH,
  CASE WHEN  TTT.ISSUE_DATE IS NULL OR
    TTT.ISSUE_DATE = '1900-01-01' OR
    TTT.ISSUE_DATE > TTT.EXPIRY_DATE
       THEN GETDATE()
       ELSE TTT.ISSUE_DATE END,
  CASE WHEN  
 /* CVM-101, KHO, 7-OCT-03 */
    EP2.ANY_INFORCE = 1 OR
 /* CVM-101, KHO, 7-OCT-03 */
    TTT.EXPIRY_DATE IS NULL OR
    TTT.EXPIRY_DATE > GETDATE() OR
    TTT.ISSUE_DATE IS NULL OR
    TTT.ISSUE_DATE = '1900-01-01' OR
    TTT.ISSUE_DATE > TTT.EXPIRY_DATE          
  THEN GETDATE()
  ELSE TTT.EXPIRY_DATE
  END)    
<>
ECM.VINTAGE_MONTHS
)
) vs
ON c.CUSTOMER_ID = vs.CUSTOMER_ID
SELECT @intRowCount = @@ROWCOUNT, @intErrorCode = @@ERROR
IF @intErrorCode <> 0
    BEGIN
  SELECT @remarks = 'Error Encountered During Insert. Error Code: ' + CAST(@intErrorCode as varchar(5))
  SELECT @is_Success = 0
  SELECT @Status = 'Job Failed'
    END 
ELSE
          BEGIN
  SELECT @remarks =  'Number of Updated Records :' + CAST(@intRowCount as varchar(5))
  SELECT @Status = 'Job Ended'
   END  
----------------------------------------------------------------------------------------
-- End of job and log job details
----------------------------------------------------------------------------------------
SELECT @DateEnd = getdate()
SELECT @ProcessingCount = @intRowCount
 EXEC @iReturn = dbo.USP_LOG_JOBDETAILS  'U', 
       @sourceSystemID,
       @sourceFileName,
       @PackageName,
       @DateStart,
         @DateEnd,
       @ProcessingCount,
       @Status,
       @Remarks,
       @iReturn 
          
     
RETURN @is_Success
END
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/7899089/viewspace-709099/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: english corner
请登录后发表评论 登录
全部评论

注册时间:2009-07-23

  • 博文量
    194
  • 访问量
    287358