它是 - 对于 sqlplus - 命令:
SQL> set serveroutput on
SQL> exec where.my_package.ger_result('something');
something=1823655138
它是 - 对于 cx_Oracle:
>>> c.callproc('where.my_package.ger_result', ('something',))
['something']
如您所见 - 结果是不同的。我不知道如何解决它。:[
对不起,我无法复制这个。
我没有你的 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 脚本没有连接到相同的数据库和/或模式。
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()