2012-08-08 85 views

回答

0
import cx_Oracle 

dsn_tns = cx_Oracle.makedsn('my_ip_address_server_next_port', 0000, 'sid') 
db = cx_Oracle.connect('user', 'password', dsn_tns) 
curs = db.cursor() 
curs.callproc("dbms_output.enable") 

curs.callproc('where.my_package.ger_result', ['something',]) 

statusVar = curs.var(cx_Oracle.NUMBER) 
lineVar = curs.var(cx_Oracle.STRING) 
while True: 
    curs.callproc("dbms_output.get_line", (lineVar, statusVar)) 
    if statusVar.getvalue() != 0: 
    break 
    print lineVar.getvalue() 
+0

这是你用来解决问题的Python代码,还是你提供的额外信息来帮助别人解决你的问题?如果是后者,请编辑您的问题以添加此信息。 – 2012-08-09 08:42:22

+0

这是我的这个问题的决定..但我还不能(仅在24小时后)将其作为“答案”。 – 2012-08-09 20:10:33

+0

感谢您清理我的查询。我问的原因是一些没有使用过的人倾向于在他们应该编辑他们的问题时通过添加一个答案来增加额外的信息给他们所问的问题。我不能完全确定你没有这样做,因为我不清楚这是解决你的问题的方法,所以我问。 – 2012-08-09 23:01:37

0

对不起,我不能再现这一个。

我没有你的PL/SQL包,所以我用下面的存储过程,而不是:

CREATE OR REPLACE PROCEDURE p_do_somet (
    p_param  IN VARCHAR2 
) AS 
BEGIN 
    dbms_output.put_line(p_param || '=1823655138'); 
END; 
/

我得到了相同的输出,something=1823655138,从SQL * Plus和使用的Python脚本你的答案。

如果使用SQL * Plus和cx_Oracle获得不同的结果,那么无论您的存储过程做了一件非常有趣的事情(我不知道是什么原因导致它执行此操作),或者您的SQL * Plus会话和Python脚本没有连接到相同的数据库和/或模式。

+0

谢谢你的回答。我在下面回答,我们如何能得到结果呢。 – 2012-08-09 20:08:52