在SELECT语句中解析SAS宏变量遇ORA-22806错误求助
问题原因与解决方案
你的错误根源是宏变量TableValue的值带了单引号,导致SAS展开后生成的SQL语句里出现了'abc'.type——Oracle会把'abc'当成字符串常量,而非表别名,自然报错“ORA-22806: not an object or REF”。
解决方法分两种情况:
直接修正宏变量赋值:如果是你自己定义的宏变量,把单引号去掉,改成不带引号的标识符:
%let TableValue=abc; /* 去掉单引号 */这样展开后的SELECT语句会变成
abc.type as ITEM_TYPE,正确引用表别名abc的type字段。处理已带引号的宏变量:如果宏变量的值是从其他地方获取的(无法直接修改赋值),用SAS的
%sysfunc(dequote())函数去掉单引号:%let TableValue='abc'; /* 原始带引号的宏变量 */ %let TableValue=%sysfunc(dequote(&TableValue)); /* 移除单引号 */
修改后的完整SQL示例:
proc sql; connect to oracle (user=your_user password=your_pwd path=your_db); select * from connection to oracle ( SELECT &TableValue..type as ITEM_TYPE FROM rca.items abc left join rca2.items abcd on rca2.ItemNum = rca.ItemNum ); disconnect from oracle; quit;
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

