使用SAS Pass-Through操作Oracle表加主键约束遇ORA-01735错误求助
解决ORA-01735: invalid ALTER TABLE option错误
这个错误提示很明确——Oracle无法识别你ALTER TABLE语句里的某个语法选项。结合你的SAS Pass-Through代码,我觉得大概率是语句末尾的分号在SAS传递过程中引发了语法冲突。
问题分析
在SAS的PROC SQL Pass-Through中,当你把Oracle语句放在EXECUTE()括号里时,SAS会把括号内的内容直接传递给Oracle执行。但如果你在Oracle语句末尾保留了分号,SAS可能会把这个分号当成自身语句的一部分,导致传递给Oracle的内容出现语法混乱,触发ORA-01735错误。
另外也可以排查几个小细节:
- 确认
myschema.mytable是存在的,且你拥有该表的ALTER权限 - 检查
col_1, col_2, col_3这几个列确实在目标表中,且数据类型支持作为主键(比如不能是LONG类型) - 确保
mytable_pk这个约束名没有在当前schema中重复存在
修正后的代码
把ALTER语句末尾的分号去掉,修改后的代码如下:
PROC SQL; CONNECT TO oracle (user="myuserid" password="mypswd" path = "mypath"); EXECUTE ( ALTER TABLE myschema.mytable ADD CONSTRAINT mytable_pk PRIMARY KEY (col_1, col_2, col_3) ) BY oracle; QUIT;
如果去掉分号还是不行,可以尝试把整个Oracle语句用单引号包裹(注意SAS里单引号需要转义,用两个单引号),让SAS完整传递语句内容:
PROC SQL; CONNECT TO oracle (user="myuserid" password="mypswd" path = "mypath"); EXECUTE ('ALTER TABLE myschema.mytable ADD CONSTRAINT mytable_pk PRIMARY KEY (col_1, col_2, col_3)') BY oracle; QUIT;
内容的提问来源于stack exchange,提问作者moony
相关产品推荐
相关产品推荐

