我怎样才能在cx®Oracle和Sql*Plus上获得相同的结果?

2024-05-19 01:47:50 发布

您现在位置:Python中文网/ 问答频道 /正文

它是-for sqlplus-命令:

SQL> set serveroutput on
SQL> exec where.my_package.ger_result('something');
something=1823655138

它是—对于cx Oracle:

^{pr2}$

正如你所看到的-结果是不同的。 我不知道怎么修。:[


Tags: 命令packageforsqlonmyplusresult
0条回答
网友
1楼 · 发布于 2024-05-19 01:47:50

对不起,我不能复制这个。在

我没有您的PL/SQL包,因此我使用了以下存储过程:

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

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

如果使用SQL*Plus和cx_-Oracle得到的结果不同,那么要么是存储过程在做一些非常有趣的事情(我不知道是什么原因导致它这样做),要么是SQL*Plus会话和Python脚本没有连接到同一个数据库和/或架构。在

网友
2楼 · 发布于 2024-05-19 01:47:50
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()

相关问题 更多 >

    热门问题