2015-11-24 47 views
0

我在SAS E.G上創建了一系列表格語句。他們孤立地工作沒有問題,但是當我將它們一起運行時,只有第一個表創建。日誌中沒有錯誤,也沒有顯示它甚至嘗試運行第二組表。Proc SQL創建表語句不工作但沒有錯誤?

該代碼必須作爲大型項目的一部分一起運行。任何幫助,將不勝感激! (我修改了部分內容,因爲它很長,並且評論問題似乎發生的部分)。

EXECUTE(CREATE MULTISET TABLE TEMP_BAG_CAR_BASET 
(
REGISTRATION_ID   INTEGER 
,SOURCE_SYSTEM_CD   BYTEINT 
,BILLING_BASE    VARCHAR(20) 
,INSIGHT_BILLING_BASE  VARCHAR(20) 
,ENTERPRISE_IND   BYTEINT 
,BILLING_ACCOUNT_NO  INTEGER 

) PRIMARY INDEX (REGISTRATION_ID) 
) BY TERADATA; 


EXECUTE (INSERT INTO TEMP_BAG_CAR_BASET 
SELECT 
     A.REGISTRATION_ID 
     ,A.SOURCE_SYSTEM_CD 
     ,A.BILLING_BASE 
     ,A.INSIGHT_BILLING_BASE 
     ,A.ENTERPRISE_IND 
     ,CASE WHEN A.BILLING_ACCOUNT_NO > 0 THEN A.BILLING_ACCOUNT_NO 
      WHEN Z.BILLING_ACCOUNT_NO > 0 AND A.SOURCE_SYSTEM_CD = 2 THEN Z.BILLING_ACCOUNT_NO 
      WHEN V.BAN >0 AND A.SOURCE_SYSTEM_CD = 0 THEN V.BAN 
      ELSE NULL END 

FROM [SOURCE 1] AS A 
    LEFT JOIN [SOURCE 2] AS V ON A.REGISTRATION_ID = B.REGISTRATION_ID 
      AND A.DISCONNECTION_DT <= V.DISCONN_DATE AND A.DISCONNECTION_DT > V.CONN_DATE 
      AND V.CONN_DATE <= %SYSEVALF(%SYSFUNC(PUTN(&ENDDATE, YYMMDDN8.))-19000000) 
INNER JOIN (SELECT REGISTRATION_ID 
        ,BILLING_ACCOUNT_TYP 
      FROM [SOURCE 3] 
       WHERE %SYSEVALF(%SYSFUNC(PUTN(&ENDDATE, YYMMDDN8.))-19000000) BETWEEN EFFECTIVE_DT AND EXPIRY_DT 
       AND REF_RULE_BASE_IND = 'Y') AS B 
ON A.REGISTRATION_ID = B.REGISTRATION_ID 
LEFT JOIN (SELECT REGISTRATION_ID 
        ,REGISTERED_SOURCE_SYSTEM_CD 
        ,BILLING_ACCOUNT_CD AS BILLING_ACCOUNT_NO 
        ,CORPORATE_ID 
      FROM [SOURCE 3] 
       WHERE (CAST(&MTH0 AS DATE) +1) BETWEEN EFFECTIVE_DT AND EXPIRY_DT 
       AND REF_RULE_BASE_IND = 'Y') AS Z 
ON A.REGISTRATION_ID = Z.REGISTRATION_ID 

LEFT JOIN [SOURCE 4]E 
    ON A.PORTED_IN_FROM = E.NETWORK_PROVIDER_ID 
    AND E.EXPIRY_DT = 160
LEFT JOIN [SOURCE 5] AS F 
    ON F.EXPIRY_DT = 160

     WHERE  A.ENTERPRISE_IND = 0 
      AND A.REGISTERED_BASE_IND = 1 
      AND A.REGISTRATION_TYP = 1 
      AND SUMMARY_DT = %SYSEVALF(%SYSFUNC(PUTN(&ENDDATE, YYMMDDN8.))-19000000) 
) 
BY TERADATA; 

EXECUTE 
(
COLLECT STATISTICS TEMP_BAG_CAR_BASET INDEX(REGISTRATION_ID) 
) 
BY TERADATA; 

/*At this point the code does not create any of the following tables but no errors occur */ 

EXECUTE(CREATE MULTISET TABLE TEMP_BAG_CAR_BASE 
(
REGISTRATION_ID   INTEGER 
,SOURCE_SYSTEM_CD   BYTEINT 
,BILLING_BASE    VARCHAR(20) 
,INSIGHT_BILLING_BASE  VARCHAR(20) 
,ENTERPRISE_IND   BYTEINT 
,BILLING_ACCOUNT_NO  INTEGER 
) PRIMARY INDEX (REGISTRATION_ID) 
) BY TERADATA; 


    EXECUTE(INSERT INTO TEMP_BAG_CAR_BASE 
SELECT 
     A.REGISTRATION_ID 
     ,SOURCE_SYSTEM_CD 
     ,BILLING_BASE 
     ,INSIGHT_BILLING_BASE 
     ,ENTERPRISE_IND 
     ,BILLING_ACCOUNT_NO 

FROM TEMP_BAG_CAR_BASET AS A 
INNER JOIN (SELECT REGISTRATION_ID 
        ,MAX(DISCONN_DATE ) AS DISCONN_DATE 
      FROM TEMP_BAG_CAR_BASET 
      GROUP BY 1) AS B 
ON A.REGISTRATION_ID = B.REGISTRATION_ID 
AND A.DISCONN_DATE  = B.DISCONN_DATE 
) 
BY TERADATA; 

回答

1

您可能需要插入一條COMMIT語句。

execute (COMMIT) by teradata; 
0

默認情況下,Teradata接口的SAS \​​ ACCESS使用ANSI事務語義。如果您沒有在CONNECT TO TERADATA()語句中指定MODE參數,則會話語義可能爲ANSI。

正如Tom上面所建議的那樣,在您的PROC SQL中使用EXECUTE(COMMIT) BY TERADATA;或將MODE=TERADATA添加到您的CONNECT TO TERADATA()語句中。