Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过Python中的JayDeBeApi在Oracle 11.2.0上调用过程_Python_Sql_Oracle_Ojdbc_Jaydebeapi - Fatal编程技术网

通过Python中的JayDeBeApi在Oracle 11.2.0上调用过程

通过Python中的JayDeBeApi在Oracle 11.2.0上调用过程,python,sql,oracle,ojdbc,jaydebeapi,Python,Sql,Oracle,Ojdbc,Jaydebeapi,我正在尝试在我的数据库上调用dbms_random.seed42,请参阅。我需要使用python和JayDeBeApi连接器。到目前为止,我只能执行select语句而没有问题。我不明白我做错了什么 JayDeBeApi似乎没有提供该方法,因此我无法使用它: AttributeError: 'Cursor' object has no attribute 'callproc' 我天真地尝试过: conn = jaydebeapi.connect('oracle.jdbc.driver.Oracl

我正在尝试在我的数据库上调用dbms_random.seed42,请参阅。我需要使用python和JayDeBeApi连接器。到目前为止,我只能执行select语句而没有问题。我不明白我做错了什么

JayDeBeApi似乎没有提供该方法,因此我无法使用它:

AttributeError: 'Cursor' object has no attribute 'callproc'
我天真地尝试过:

conn = jaydebeapi.connect('oracle.jdbc.driver.OracleDriver',
    ['jdbc:oracle:thin:@server:1521/dbname', 'user', 'password'])
curs = conn.cursor()
sql="exec dbms_random.seed(42)"
curs.execute(sql)
但这会导致:错误:ORA-00900:无效的SQL语句

我尝试了两种似乎语法正确的解决方案,但由于生成器不是确定性的,我认为它们实际上失败了:

使用开始/结束:

使用呼叫:

所以我的问题是:如何使用JayDeBeApi在Oracle上调用dbms_random.seed42?作为一个附带问题,我如何检查语句是否实际执行失败,是否未引发异常,以及的返回值是否未定义

更新:

事实上,种子初始化工作正常,因为结果正是我所期望的:

sql="SELECT DBMS_RANDOM.value FROM dual"
curs.execute(sql)
data = curs.fetchall()
print(data)
但是,我仍然看到随机查询选择的一些奇怪行为:

SELECT *
FROM   (
    SELECT *
    FROM   table
    ORDER BY DBMS_RANDOM.RANDOM)
WHERE  rownum < 21;

由于某种原因,在后一种情况下,DBMS_RANDOM.RANDOM实际上是随机的…

经过多次尝试和错误,我相信这只是一个副作用。由于我没有执行清理过程:

curs.close()
conn.close()
jpype.shutdownJVM()
查询将导致一些未定义的行为。现在我有了一个正确的清理代码,当调用python脚本的倍数时,我得到了确定的结果

SELECT *
FROM   (
    SELECT *
    FROM   table
    ORDER BY DBMS_RANDOM.RANDOM)
WHERE  rownum < 21;
curs.close()
conn.close()
jpype.shutdownJVM()