proc sql;
connect to odbc(user='' pwd='' datasrc='');
create table Hums_Table(compress=yes) as
select * from connection to odbc
(
select prop.cust_pivotal_id, prop.cust_pivotal_app_id, prop.cust_renew_flag, prop.is_cust_split, prop.cont_agt_brk_channel, prop.cont_plan_id, prop.decision_id_fk, deci.decision, prop.cust_corr_pin_code, prop.cust_corr_city_code_fk, pl.sum_assured, pl.product_name, Ct.City_name from ADMIN.t_proposal_info Prop
inner join ADMIN.t_plan_type PL on replace(prop.cont_plan_id,'~',NULL)=PL.plan_code
inner join ADMIN.t_underwriting_decision deci on prop.decision_id_fk=deci.o_id
inner join admin.t_city CT on prop.cust_corr_city_code_fk=ct.city_name
left join admin.T_tele_docsapp_data doc on replace(prop.cust_app_no,'~',NULL)=doc.application_no
where Prop.create_date between '01-Mar-2023' and '31-Mar-2023'
);
disconnect from odbc;
quit;
当在sas上运行时,它给出错误:CLI打开游标错误:[Oracle][ODBC][Ora]ORA-01722:无效号码
1条答案
按热度按时间qnakjoqk1#
Oracle将在进行比较之前尝试对齐数据类型。例如,考虑表T,其中有一列您 * 期望 * 为数值
您可以在执行计划中看到,我们在列周围默默地添加了一个TO_NUMBER,因为您正在与一个数字(> 0)进行比较。因此,查询将按照当前的状态正常运行
但是如果有人把一些错误的数据放进那一列,比如
现在,当我运行该查询时,TO_NUMBER函数将失败,因此您的查询也将失败
根据您的数据库版本,您可以自己处理这个问题
但正如其他人所提到的,您需要检查在查询中使用的每个列的数据类型,包括连接