2017-09-13 1 views
0

Je voudrais migrer la requête ci-dessous dans teradata. Je suis en train de mettre à jour certaines lignes dans ma table et j'ai écrit cette requête en sql. Maintenant, je veux migrer sous script dans teradata. J'ai entendu que nous devons utiliser la table volatile pour sélectionner les données et ensuite mettre à jour. Est-il obligatoire que je doive d'abord créer une table volatile puis la mettre à jour?comment faire pour migrer la requête de mise à jour sql dans teradata?

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

Essayez-vous de migrer la requête ci-dessus _from_ une autre base de données _into_ Teradata? Si oui, pour quelle autre base de données cette requête a-t-elle été écrite? –

+0

Cette requête est écrite pour oracle db. Maintenant migrer vers teradata. – Nandan23

Répondre

1

Vous n'avez pas besoin d'utiliser un tableau volatile, mais une table dérivée, parce que Teradata ne prend pas en charge des jointures externes dans les mises à jour.

similaires à ceci:

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, la requête initiale a été écrit pour SQL Server, Oracle pas.