Извлечение таблицы из SQL приводит к появлению этой ошибки: ОШИБКА 180-322: оператор недействителен или используется не по порядку - PullRequest
1 голос
/ 02 апреля 2020

Можете ли вы помочь мне выяснить, где ошибка в моем коде?

Я пытаюсь извлечь базу данных из Oracle в SAS, но каждый раз, когда я запускаю этот код, он не ' т появляются. На выходе появляется это сообщение об ошибке:

ОШИБКА 180-322: оператор недействителен или используется не по порядку.

Вывод журнала:

1          ;*';
            _
            180

Но это не имеет смысла, потому что я удалил все эти символы, даже в комментариях. Я понятия не имею, что делать сейчас.

Код следующий:

%include "/sasusers/&sysuserid/gedspla.sas";
libname Gui "/lidata_br/atuaria/dmatuarial/vida/GKK";

%let Data_cotacao = ('201804','201805','201806','201807','201808','201809',
                     '201810','201811','201812','2011901','201902','201903',
                     '201904  ','201905','201906','201907','201908','201909',
                     '201910','201911','201912','202001','202002','202003');



proc sql ;
connect to oracle(user=&d_usuario pass=&pass_dtm path='@dtm' preserve_comments);
    create table GKK.cotaVG (compress=yes reuse=yes) as
    select * from connection to oracle                              
(
select distinct coalesce(pa11.DHCT_NUM_CTC, pa12.DHCT_NUM_CTC)  DHCT_NUM_CTC,
              coalesce(pa11.DTON_COD_ATF, pa12.DTON_COD_ATF)  DTON_COD_ATF,
              a121.DTON_DES  DTON_DES,
              coalesce(pa11.DDTC_COD_ATF, pa12.DDTC_COD_ATF)  DDTC_COD_ATF,
              a120.DDTC_DES  DDTC_DES,
              coalesce(pa11.DDSC_COD_ATF, pa12.DDSC_COD_ATF)  DDSC_COD_ATF,
              a117.DDSC_DES  DDSC_DES,
              coalesce(pa11.DSDC_COD_ATF, pa12.DSDC_COD_ATF)  DSDC_COD_ATF,
              a118.DSDC_DES  DSDC_DES,
              coalesce(pa11.DHCT_NUM_PRA, pa12.DHCT_NUM_PRA)  DHCT_NUM_PRA,
              coalesce(pa11.DHCT_TSPR_COD, pa12.DHCT_TSPR_COD)  DHCT_TSPR_COD,
              a119.TSPR_DES  DHCT_TSPR_DES,
              coalesce(pa11.DCSN_COD_ATF, pa12.DCSN_COD_ATF)  DCSN_COD_ATF,
              a115.DCSN_COD_SOG  DCSN_COD_SOG,
              coalesce(pa11.DHCT_IND_ROB, pa12.DHCT_IND_ROB)  DHCT_IND_ROB,
              coalesce(pa11.DHCT_IND_ULT_CTC, pa12.DHCT_IND_ULT_CTC)  DHCT_IND_ULT_CTC,
              coalesce(pa11.DMID_COD_ATF, pa12.DMID_COD_ATF)  DMID_COD_ATF,
              a114.DMID_DES  DMID_DES,
              coalesce(pa11.DSIT_COD_ATF, pa12.DSIT_COD_ATF)  DSIT_COD_ATF,
              a17.DSIT_DES  DSIT_DES,
              coalesce(pa11.DMBE_APO_NUM, pa12.DMBE_APO_NUM)  DMBE_APO_NUM,
              coalesce(pa11.DHCT_CTRS_COD, pa12.DHCT_CTRS_COD)  DHCT_CTRS_COD,
              coalesce(pa11.DCEP_COD_ATF, pa12.DCEP_COD_ATF)  DCEP_COD_ATF,
              a16.DCEP_COD_CEP_REZ  DCEP_COD_CEP_REZ,
              coalesce(pa11.DCLD_COD_ATF, pa12.DCLD_COD_ATF)  DCLD_COD_ATF,
              a113.DCLD_DAT  DCLD_DAT,
              coalesce(pa11.DCLD_COD_ATF0, pa12.DCLD_COD_ATF0)  DCLD_COD_ATF0,
              a112.DCLD_DAT  DCLD_DAT0,
              coalesce(pa11.DCLD_COD_ATF1, pa12.DCLD_COD_ATF1)  DCLD_COD_ATF1,
              a111.DCLD_DAT  DCLD_DAT1,
              coalesce(pa11.DCLD_COD_ATF2, pa12.DCLD_COD_ATF2)  DCLD_COD_ATF2,
              a110.DCLD_DAT  DCLD_DAT2,
              coalesce(pa11.DCLD_COD_ATF3, pa12.DCLD_COD_ATF3)  DCLD_COD_ATF3,
              a19.DCLD_DAT  DCLD_DAT3,
              coalesce(pa11.DHCT_DCLD_DAT_CTC, pa12.DHCT_DCLD_DAT_CTC)  DHCT_DCLD_DAT_CTC,
              a14.DCLD_DAT  DCLD_DAT4,
              coalesce(pa11.DCLD_COD_ATF4, pa12.DCLD_COD_ATF4)  DCLD_COD_ATF4,
              a18.DCLD_DAT  DCLD_DAT5,
              coalesce(pa11.DPRD_COD_PRD, pa12.DPRD_COD_PRD)  DPRD_COD_PRD,
              a116.DPRD_NOM  DPRD_NOM,
              a15.DFFL_DFRG_COD_ATF  DFRG_COD_ATF,
              a123.DFRG_DES  DFRG_DES,
              a14.DCLD_DMAN_COD_ATF  DMAN_COD_ATF,
              a122.DMAN_DES  DMAN_DES,
              coalesce(pa11.DFFL_COD_ATF, pa12.DFFL_COD_ATF)  DFFL_COD_ATF,
              a15.DFFL_DES  DFFL_DES,
              pa11.WJXBFS1  WJXBFS1,
              pa12.WJXBFS1  WJXBFS2,
              pa11.WJXBFS2  WJXBFS3
from     (select    a11.DCTI_DTON_COD_ATF  DTON_COD_ATF,
              a11.DCTI_DDTC_COD_ATF  DDTC_COD_ATF,
              a12.DHCT_TSPR_COD  DHCT_TSPR_COD,
              a11.DCTI_DSDC_COD_ATF  DSDC_COD_ATF,
              a11.DCTI_DDSC_COD_ATF  DDSC_COD_ATF,
              a12.DHCT_IND_ROB  DHCT_IND_ROB,
              a12.DHCT_NUM_PRA  DHCT_NUM_PRA,
              a11.DCTI_DPRD_COD_PRD  DPRD_COD_PRD,
              a12.DHCT_NUM_CTC  DHCT_NUM_CTC,
              a12.DHCT_CTRS_COD  DHCT_CTRS_COD,
              a12.DHCT_DCSN_MCL  DCSN_COD_ATF,
              a12.DHCT_IND_ULT_CTC  DHCT_IND_ULT_CTC,
              a11.DCTI_DMID_COD_ATF  DMID_COD_ATF,
              a17.DFCL_DFFL_COD_ATF  DFFL_COD_ATF,
              a11.DCTI_DCLD_RFR_COD_ATF  DCLD_COD_ATF,
              a12.DHCT_DCLD_DAT_PRA  DCLD_COD_ATF0,
              a12.DHCT_DCLD_PRI_RCU  DCLD_COD_ATF1,
              a12.DHCT_DCLD_DAT_CTC  DHCT_DCLD_DAT_CTC,
              a11.DCTI_DCLD_INI_VGC_COD_ATF  DCLD_COD_ATF2,
              a11.DCTI_DCLD_FIM_VGC_COD_ATF  DCLD_COD_ATF3,
              a11.DCTI_DCLD_CRC_COD_ATF  DCLD_COD_ATF4,
              a12.DHCT_DSIT_COD_ATF  DSIT_COD_ATF,
              a11.DCTI_DCEP_COD_ATF  DCEP_COD_ATF,
              a12.DHCT_NUM_APO  DMBE_APO_NUM,
              sum(a11.DCTI_QTD_ITM)  WJXBFS1,
              sum(a11.DCTI_MRI_NGC_CTC)  WJXBFS2
from     DMD_ITM_CTC a11
              join       DMD_HIS_CTC a12
                on        (a11.DCTI_DHCT_COD_ATF = a12.DHCT_COD_ATF)
              join       DMD_HIS_CTC a13
                on        (a11.DCTI_DHCT_COD_ATF = a13.DHCT_COD_ATF and 
                          a12.DHCT_DCLD_DAT_CTC = a13.DHCT_DCLD_DAT_CTC and 
                          a12.DHCT_IND_ROB = a13.DHCT_IND_ROB)
              join       DMF_PRD          a14
                on        (a11.DCTI_DFPR_COD_ATF = a14.DFPR_COD_ATF)
              join       DMF_AGU_PRD              a15
                on        (a14.DFPR_DFAP_COD_ATF = a15.DFAP_COD_ATF)
              join       DMC_CRT          a16
                on        (a12.DHCT_DCRT_COD_CLI_OPN_CRT = a16.DCRT_COD_CLI_OPN_CRT)
              join       DMF_CEL           a17
                on        (a16.DCRT_DFCL_COD_ATF = a17.DFCL_COD_ATF)
where   (((a15.DFAP_DFCP_COD_ATF)
in          (select  c21.DFCP_COD_ATF
              from     DMF_CAT_PRD c21
              where   c21.DFCP_DFSP_COD_ATF in (2426, 2430, 7781, 2427)))
and TO_NUMBER(TO_CHAR(TO_DATE(a12.DHCT_DCLD_DAT_CTC, 'YYYYMMDD'), 'YYYYMM')) in (&Data_cotacao)
and a11.DCTI_DPRD_COD_PRD in ('93030', '93028', '77021', '77022', '77023', '77024', '77025', '77033', '77034', '77035', '77036', '77037', '77038', '77039', '77040', '77041', '77042')
and a12.DHCT_IND_ULT_CTC in ('S')
and a12.DHCT_DCRT_COD_CLI_OPN_CRT not in (99040067))
group by            a11.DCTI_DTON_COD_ATF,
              a11.DCTI_DDTC_COD_ATF,
              a12.DHCT_TSPR_COD,
              a11.DCTI_DSDC_COD_ATF,
              a11.DCTI_DDSC_COD_ATF,
              a12.DHCT_IND_ROB,
              a12.DHCT_NUM_PRA,
              a11.DCTI_DPRD_COD_PRD,
              a12.DHCT_NUM_CTC,
              a12.DHCT_CTRS_COD,
              a12.DHCT_DCSN_MCL,
              a12.DHCT_IND_ULT_CTC,
              a11.DCTI_DMID_COD_ATF,
              a17.DFCL_DFFL_COD_ATF,
              a11.DCTI_DCLD_RFR_COD_ATF,
              a12.DHCT_DCLD_DAT_PRA,
              a12.DHCT_DCLD_PRI_RCU,
              a12.DHCT_DCLD_DAT_CTC,
              a11.DCTI_DCLD_INI_VGC_COD_ATF,
              a11.DCTI_DCLD_FIM_VGC_COD_ATF,
              a11.DCTI_DCLD_CRC_COD_ATF,
              a12.DHCT_DSIT_COD_ATF,
              a11.DCTI_DCEP_COD_ATF,
              a12.DHCT_NUM_APO )     pa11
              full outer join    (select    a11.DCTI_DTON_COD_ATF  DTON_COD_ATF,
              a11.DCTI_DDTC_COD_ATF  DDTC_COD_ATF,
              a12.DHCT_TSPR_COD  DHCT_TSPR_COD,
              a11.DCTI_DSDC_COD_ATF  DSDC_COD_ATF,
              a11.DCTI_DDSC_COD_ATF  DDSC_COD_ATF,
              a12.DHCT_IND_ROB  DHCT_IND_ROB,
              a12.DHCT_NUM_PRA  DHCT_NUM_PRA,
              a11.DCTI_DPRD_COD_PRD  DPRD_COD_PRD,
              a12.DHCT_NUM_CTC  DHCT_NUM_CTC,
              a12.DHCT_CTRS_COD  DHCT_CTRS_COD,
              a12.DHCT_DCSN_MCL  DCSN_COD_ATF,
              a12.DHCT_IND_ULT_CTC  DHCT_IND_ULT_CTC,
              a11.DCTI_DMID_COD_ATF  DMID_COD_ATF,
              a17.DFCL_DFFL_COD_ATF  DFFL_COD_ATF,
              a11.DCTI_DCLD_RFR_COD_ATF  DCLD_COD_ATF,
              a12.DHCT_DCLD_DAT_PRA  DCLD_COD_ATF0,
              a12.DHCT_DCLD_PRI_RCU  DCLD_COD_ATF1,
              a12.DHCT_DCLD_DAT_CTC  DHCT_DCLD_DAT_CTC,
              a11.DCTI_DCLD_INI_VGC_COD_ATF  DCLD_COD_ATF2,
              a11.DCTI_DCLD_FIM_VGC_COD_ATF  DCLD_COD_ATF3,
              a11.DCTI_DCLD_CRC_COD_ATF  DCLD_COD_ATF4,
              a12.DHCT_DSIT_COD_ATF  DSIT_COD_ATF,
              a11.DCTI_DCEP_COD_ATF  DCEP_COD_ATF,
              a12.DHCT_NUM_APO  DMBE_APO_NUM,
              sum(a11.DCTI_QTD_ITM)  WJXBFS1
from     DMD_ITM_CTC a11
              join       DMD_HIS_CTC a12
                on        (a11.DCTI_DHCT_COD_ATF = a12.DHCT_COD_ATF)
              join       DMD_HIS_CTC a13
                on        (a11.DCTI_DHCT_COD_ATF = a13.DHCT_COD_ATF and 
              a12.DHCT_DCLD_DAT_CTC = a13.DHCT_DCLD_DAT_CTC and 
              a12.DHCT_IND_ROB = a13.DHCT_IND_ROB)
              join       DMF_PRD          a14
                on        (a11.DCTI_DFPR_COD_ATF = a14.DFPR_COD_ATF)
              join       DMF_AGU_PRD              a15
                on        (a14.DFPR_DFAP_COD_ATF = a15.DFAP_COD_ATF)
              join       DMC_CRT          a16
                on        (a12.DHCT_DCRT_COD_CLI_OPN_CRT = a16.DCRT_COD_CLI_OPN_CRT)
              join       DMF_CEL           a17
                on        (a16.DCRT_DFCL_COD_ATF = a17.DFCL_COD_ATF)
where   (((a15.DFAP_DFCP_COD_ATF)
in          (select  c21.DFCP_COD_ATF
             from     DMF_CAT_PRD c21
              where   c21.DFCP_DFSP_COD_ATF in (2426, 2430, 7781, 2427)))
and TO_NUMBER(TO_CHAR(TO_DATE(a12.DHCT_DCLD_DAT_CTC, 'YYYYMMDD'), 'YYYYMM')) in (&Data_cotacao)
and a11.DCTI_DPRD_COD_PRD in ('93030', '93028', '77021', '77022', '77023', '77024', '77025', '77033', '77034', '77035', '77036', '77037', '77038', '77039', '77040', '77041', '77042')
and a12.DHCT_IND_ULT_CTC in ('S')
and a12.DHCT_DCRT_COD_CLI_OPN_CRT not in (99040067)
and a11.DCTI_DDSC_COD_ATF in (3))
group by            a11.DCTI_DTON_COD_ATF,
              a11.DCTI_DDTC_COD_ATF,
              a12.DHCT_TSPR_COD,
              a11.DCTI_DSDC_COD_ATF,
              a11.DCTI_DDSC_COD_ATF,
              a12.DHCT_IND_ROB,
              a12.DHCT_NUM_PRA,
              a11.DCTI_DPRD_COD_PRD,
              a12.DHCT_NUM_CTC,
              a12.DHCT_CTRS_COD,
              a12.DHCT_DCSN_MCL,
              a12.DHCT_IND_ULT_CTC,
              a11.DCTI_DMID_COD_ATF,
              a17.DFCL_DFFL_COD_ATF,
              a11.DCTI_DCLD_RFR_COD_ATF,
              a12.DHCT_DCLD_DAT_PRA,
              a12.DHCT_DCLD_PRI_RCU,
              a12.DHCT_DCLD_DAT_CTC,
              a11.DCTI_DCLD_INI_VGC_COD_ATF,
              a11.DCTI_DCLD_FIM_VGC_COD_ATF,
              a11.DCTI_DCLD_CRC_COD_ATF,
              a12.DHCT_DSIT_COD_ATF,
              a11.DCTI_DCEP_COD_ATF,
              a12.DHCT_NUM_APO )   pa12
                on        (pa11.DCEP_COD_ATF = pa12.DCEP_COD_ATF and 
              pa11.DCLD_COD_ATF = pa12.DCLD_COD_ATF and 
              pa11.DCLD_COD_ATF0 = pa12.DCLD_COD_ATF0 and 
              pa11.DCLD_COD_ATF1 = pa12.DCLD_COD_ATF1 and 
              pa11.DCLD_COD_ATF2 = pa12.DCLD_COD_ATF2 and 
              pa11.DCLD_COD_ATF3 = pa12.DCLD_COD_ATF3 and 
              pa11.DCLD_COD_ATF4 = pa12.DCLD_COD_ATF4 and 
              pa11.DCSN_COD_ATF = pa12.DCSN_COD_ATF and 
              pa11.DDSC_COD_ATF = pa12.DDSC_COD_ATF and 
              pa11.DDTC_COD_ATF = pa12.DDTC_COD_ATF and 
              pa11.DFFL_COD_ATF = pa12.DFFL_COD_ATF and 
              pa11.DHCT_CTRS_COD = pa12.DHCT_CTRS_COD and 
              pa11.DHCT_DCLD_DAT_CTC = pa12.DHCT_DCLD_DAT_CTC and 
              pa11.DHCT_IND_ROB = pa12.DHCT_IND_ROB and 
              pa11.DHCT_IND_ULT_CTC = pa12.DHCT_IND_ULT_CTC and 
              pa11.DHCT_NUM_CTC = pa12.DHCT_NUM_CTC and 
              pa11.DHCT_NUM_PRA = pa12.DHCT_NUM_PRA and 
              pa11.DHCT_TSPR_COD = pa12.DHCT_TSPR_COD and 
              pa11.DMBE_APO_NUM = pa12.DMBE_APO_NUM and 
              pa11.DMID_COD_ATF = pa12.DMID_COD_ATF and 
              pa11.DPRD_COD_PRD = pa12.DPRD_COD_PRD and 
              pa11.DSDC_COD_ATF = pa12.DSDC_COD_ATF and 
              pa11.DSIT_COD_ATF = pa12.DSIT_COD_ATF and 
              pa11.DTON_COD_ATF = pa12.DTON_COD_ATF)
              join       DMC_CLD          a14
                on        (coalesce(pa11.DHCT_DCLD_DAT_CTC, pa12.DHCT_DCLD_DAT_CTC) = a14.DCLD_COD_ATF)
              join       DMF_FIL            a15
                on        (coalesce(pa11.DFFL_COD_ATF, pa12.DFFL_COD_ATF) = a15.DFFL_COD_ATF)
              join       DMM_CEP         a16
                on        (coalesce(pa11.DCEP_COD_ATF, pa12.DCEP_COD_ATF) = a16.DCEP_COD_ATF)
              join       DMD_STM_ORI a17
                on        (coalesce(pa11.DSIT_COD_ATF, pa12.DSIT_COD_ATF) = a17.DSIT_COD_ATF)
              join       DMC_CLD          a18
                on        (coalesce(pa11.DCLD_COD_ATF4, pa12.DCLD_COD_ATF4) = a18.DCLD_COD_ATF)
              join       DMC_CLD          a19
                on        (coalesce(pa11.DCLD_COD_ATF3, pa12.DCLD_COD_ATF3) = a19.DCLD_COD_ATF)
              join       DMC_CLD          a110
                on        (coalesce(pa11.DCLD_COD_ATF2, pa12.DCLD_COD_ATF2) = a110.DCLD_COD_ATF)
              join       DMC_CLD          a111
                on        (coalesce(pa11.DCLD_COD_ATF1, pa12.DCLD_COD_ATF1) = a111.DCLD_COD_ATF)
              join       DMC_CLD          a112
                on        (coalesce(pa11.DCLD_COD_ATF0, pa12.DCLD_COD_ATF0) = a112.DCLD_COD_ATF)
              join       DMC_CLD          a113
                on        (coalesce(pa11.DCLD_COD_ATF, pa12.DCLD_COD_ATF) = a113.DCLD_COD_ATF)
              join       DMM_IDD         a114
                on        (coalesce(pa11.DMID_COD_ATF, pa12.DMID_COD_ATF) = a114.DMID_COD_ATF)
              join       DMC_SIM_NAO              a115
                on        (coalesce(pa11.DCSN_COD_ATF, pa12.DCSN_COD_ATF) = a115.DCSN_COD_ATF)
              join       DMC_PRD          a116
                on        (coalesce(pa11.DPRD_COD_PRD, pa12.DPRD_COD_PRD) = a116.DPRD_COD_PRD)
              join       DMD_STS_CTC a117
                on        (coalesce(pa11.DDSC_COD_ATF, pa12.DDSC_COD_ATF) = a117.DDSC_COD_ATF)
              join       DMD_STS_DTL_CTC      a118
                on        (coalesce(pa11.DSDC_COD_ATF, pa12.DSDC_COD_ATF) = a118.DSDC_COD_ATF)
              join       (SELECT distinct DHCT_TSPR_COD TSPR_COD,
                                DHCT_TSPR_DES TSPR_DES
                                FROM DMD_HIS_CTC)  a119
                on        (coalesce(pa11.DHCT_TSPR_COD, pa12.DHCT_TSPR_COD) = a119.TSPR_COD)
              join       DMD_TIP_CTC  a120
                on        (coalesce(pa11.DDTC_COD_ATF, pa12.DDTC_COD_ATF) = a120.DDTC_COD_ATF)
              join       DMC_TIP_ORI_NGC       a121
                on        (coalesce(pa11.DTON_COD_ATF, pa12.DTON_COD_ATF) = a121.DTON_COD_ATF)
              join       DMC_MES_ANO             a122
                on        (a14.DCLD_DMAN_COD_ATF = a122.DMAN_COD_ATF)
              join       DMF_RGI           a123
                on        (a15.DFFL_DFRG_COD_ATF = a123.DFRG_COD_ATF)
;
disconnect from oracle;
run;

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

В длинном запросе вы пытаетесь привязать макропеременную SAS к запросу:

and TO_NUMBER(TO_CHAR(TO_DATE(a12.DHCT_DCLD_DAT_CTC, 'YYYYMMDD'), 'YYYYMM')) in (&Data_cotacao)

Однако вы дважды заключаете скобки в скобки и сравниваете число (результат TO_NUMBER) со списком одиночных кавычек символов. Следовательно, эта интерполяция переменной SAS и оператора SQL может привести к синтаксическим ошибкам с подключенным ядром базы данных Oracle.

Рассмотреть возможность небольшой корректировки путем сравнения символа с символом без повторяющихся скобок:

and TO_CHAR(TO_DATE(a12.DHCT_DCLD_DAT_CTC, 'YYYYMMDD'), 'YYYYMM') in &Data_cotacao.

Кстати, есть место для сокращения вашего очень длинного запроса, поскольку производные таблицы FULL JOIN практически идентичны, с разницей в один sum агрегат (в первом) и одно where условие (в второй). В частности, рассмотрите возможность использования общего табличного выражения (CTE) через синтаксис WITH для хранения одной версии подзапроса и повторного использования основного внешнего запроса с добавленным условием JOIN:

proc sql ;
connect to oracle(user=&d_usuario pass=&pass_dtm path='@dtm' preserve_comments);
    create table GKK.cotaVG (compress=yes reuse=yes) as
    select * from connection to oracle                              
(
    WITH cte AS
      (<USE ENTIRE pal11 SUBQUERY>)

    SELECT <SAME COLUMNS AND COALESCE EXPRESSIONS>
    FROM cte AS pa11
    FULL OUTER JOIN cte AS pa12
      <SAME ON/AND CLAUSES WITH COALESCE EXPRESSIONS>
      AND pal12.DDSC_COD_ATF IN (3)                     

);
disconnect from oracle;
run;

Примечание: CTE доступны только в сквозном запросе с Oracle и недоступны только в SAS proc sql;

0 голосов
/ 02 апреля 2020

В качестве ответа:


Вы должны закончить proc sql с quit;, а не с run;

...