If you are using explicit pass-through syntax in SAS, you can run into problems when naming conventions in the native database are different from those in SAS. For example, this can happen when SAS allows more characters for an identifier than Oracle does. I ran the following statements in SAS to pull some pharmacy claims and got an error in my log:
proc sql;
connect to oracle (path=”pathname” user=xxxxxxx password=xxxxxxxx);
create table sasuser.thrx_rx_claim_2012 as
select * from connection to oracle
(
select a.indiv_enterprise_id
,b.clm_pd_dt
,b.svc_beg_dt
,b.svc_end_dt
,b.elgbl_chrg_amt
,b.mail_retl_cd
,b.new_prscrptn_ind
from c31497.thrx_id_elig_rsk_cens_dedup_2012 a
left join ccdm_mart.clm_svc b on a.indiv_enterprise_id=b.indiv_enterprise_id
where svc_beg_dt >= to_date(’01/01/2012′,’mm/dd/yyyy’)
and svc_beg_dt <= to_date(’12/31/2013′,’mm/dd/yyyy’)
and CVRD_AMT<>NOT_COVRD_AMT
and clm_frmt_ty=’RX’
)
;
quit;
Here is the error I received in the log:
ORA-00972: identifier is too long
An identifier can refer to a table name or a column (variable) name. In this case the table name thrx_id_elig_rsk_cens_dedup_2012 in the FROM statement is exactly 32 characters, which is the maximum allowable in SAS. However, Oracle gives you a maximum of 30 characters, so the query will not run.