0

それは-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']

ご覧のとおり、結果は異なります。どうやって直せばいいのかわからない。:[

4

2 に答える 2

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()
于 2012-08-09T07:09:43.323 に答える
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=1823655138SQL * Plusからも、回答でPythonスクリプトを使用しても、同じ出力が得られました。

SQL * Plusとcx_Oracleを使用して異なる結果が得られる場合は、ストアドプロシージャが非常に面白いことをしている(これを引き起こす原因がわからない)か、SQL*PlusセッションとPythonスクリプトがそうではない同じデータベースやスキーマに接続します。

于 2012-08-09T08:47:25.773 に答える