我可以从Python传递一个sql命令,但似乎无法将它与SET结合 - 我不想要标题,所以SET HEADING OFF就是我正在尝试的。
这里有4次尝试显示我要去的地方:
1 - 获取日期,但也有错误消息:
session = Popen(['sqlplus','-S','user/pass@ORCL'], stdin=PIPE, stdout=PIPE, stderr=PIPE) sqlCommand = "SET HEADING OFF \n / \n select sysdate from dual;" session.communicate(sqlCommand) ('SP2-0103: Nothing in SQL buffer to run.\r\n\r\n09-JUL-13\r\n\r\n', '')
2 - 没有SET的命令:
session = Popen(['sqlplus',' - S','user / pass @ ORCL'],stdin = PIPE, stdout = PIPE,stderr = PIPE)sqlCommand =“从双重选择sysdate;” session.communicate(SqlCommand的) ('\ r \ nSYSDATE \ r \ n --------- \ r \ n-J09-JUL-13 \ r \ n \ r \ n','')
3 - 尝试了一行:
session = Popen(['sqlplus','-S','user/pass@ORCL'], stdin=PIPE, stdout=PIPE, stderr=PIPE) sqlCommand = "set heading off \select sysdate from dual;" session.communicate(sqlCommand) ('SP2-0158: unknown SET option "\\select"\r\n', '')
4 - 尝试分成两个电话:
session = Popen(['sqlplus','-S','user/pass@ORCL'], stdin=PIPE, stdout=PIPE, stderr=PIPE) sqlCommand = "select sysdate from dual;" session.stdin.write('SET HEADING OFF') session.communicate(sqlCommand) ('SP2-0265: heading must be set ON or OFF\r\n', '')
最后,如果这是不是获取值的最简单方法(这是我的目标 - 只返回一个值 - 这不是最终查询),请告诉我。欢迎任何建议!
答案 0 :(得分:0)
我无法测试任何这些,但我可以看到它们中的问题。第一个应该是:
sqlCommand = "SET HEADING OFF \n select sysdate from dual;"
错误“运行的SQL缓冲区中没有任何内容”来自/
,它试图运行上一个命令,但还没有。 SET
在此上下文中不是可运行的命令;它是一个SQL * Plus客户端命令,而不是需要处理的语句。
第三个应该是:
sqlCommand = "set heading off \n select sysdate from dual;"
...与上述内容相同,但这次您错过了n
行分隔符中的\n
。
我不太确定第四个,但看起来应该是:
sqlCommand = "select sysdate from dual;"
session.stdin.write('SET HEADING OFF\n')
...再次错过换行符。从这次的错误来看,似乎是试图将两部分背靠背地运行,即:
SET HEADING OFFselect sysdate from dual;
......没有间隙,'OFF选'不是SET HEADING
的有效参数,正如它所说的那样。这可能是最易维护的方法,特别是如果你最终要设置和执行几件事。
看来你将至少获得一组\r\n
,但我认为你不能做任何事情,只是从SQL * Plus写到stdout
;因此,我认为你需要在Python方面删除它。