2017-09-13 8 views
0

teradata에서 아래 쿼리를 마이그레이션하고 싶습니다. 내 테이블의 일부 행을 업데이트하고 SQL에서이 쿼리를 작성했습니다. 이제 teradata에서 스크립트 아래로 마이그레이션하려고합니다. 휘발성 테이블을 사용하여 데이터를 선택하고 업데이트해야한다고 들었습니다. 휘발성 테이블을 먼저 생성 한 다음 업데이트해야하는 것은 필수입니까?teradata에서 sql update query를 마이그레이션하는 방법은 무엇입니까?

UPDATE gam 
    SET gam.DeviceActiveInSIGMA = 1, 
    gam.DeviceInSIGMA =1, 
    gam.AccountServiceInSIGMA =1, 
    gam.AccountInSIGMA =1, 
    gam.PKG_TYPE = 'VOICE', 
    gam.MACType = 'Voice' 
    FROM Staging.AllAccountDevices gam 
    WITH (INDEX (ix_MAC_UniqueID)) 
    INNER JOIN dbo.TBL_SIGMA_VOIP_EQUIPMENT dvc 
    ON gam.MACAddr = dvc.MTA_MAC 
    INNER JOIN dbo.TBL_SIGMA_SUB sac 
    ON dvc.SUB_ID = sac.SUB_ID 
    AND gam.AccountNumber = sac.Account_Number 
    LEFT OUTER JOIN HSIRECON.DBO.NEXTGEN_ACTIVE_SPAS nas 
    ON SUBSTRING(gam.AccountNumber,1,6) = nas.ACCOUNT_START 

    WHERE nas.ACCOUNT_START is NULL 
    AND gam.DeviceActiveInSIGMA = 0 
    AND dvc.STATUS IN ('active','change_in_progress') 
+0

위의 쿼리를 다른 데이터베이스에서 마이그레이션하려고하십니까? _ Teradata에 있습니까? 그렇다면이 쿼리는 다른 데이터베이스에 쓰여졌습니까? –

+0

이 쿼리는 oracle db 용으로 작성되었습니다. 이제 teradata로 마이그레이션하십시오. – Nandan23

답변

1

Teradata는 업데이트의 외부 조인을 지원하지 않으므로 휘발성 테이블은 필요하지 않지만 파생 테이블을 사용할 필요가 없습니다. 이 유사

:

UPDATE gam 
FROM Staging.AllAccountDevices AS gam, 
(
    SELECT * FROM Staging.AllAccountDevices gam 
    INNER JOIN dbo.TBL_SIGMA_VOIP_EQUIPMENT dvc 
     ON gam.MACAddr = dvc.MTA_MAC 
    INNER JOIN dbo.TBL_SIGMA_SUB sac 
    ON dvc.SUB_ID = sac.SUB_ID 
    AND gam.AccountNumber = sac.Account_Number 
    LEFT OUTER JOIN HSIRECON.DBO.NEXTGEN_ACTIVE_SPAS nas 
    ON Substr(gam.AccountNumber,1,6) = nas.ACCOUNT_START 
    WHERE nas.ACCOUNT_START IS NULL 
    AND gam.DeviceActiveInSIGMA = 0 
    AND dvc.STATUS IN ('active','change_in_progress') 
) AS dt 

SET DeviceActiveInSIGMA = 1, 
    DeviceInSIGMA =1, 
    AccountServiceInSIGMA =1, 
    AccountInSIGMA =1, 
    PKG_TYPE = 'VOICE', 
    MACType = 'Voice' 
WHERE gam.pk = dt.pk -- must be the Primary Key columns(s) of Staging.AllAccountDevices 
    AND gam.DeviceActiveInSIGMA = 0 

, BTW 원래 쿼리는 SQL 서버가 아닌 오라클을 위해 작성되었습니다.