首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过JayDeBeApi调用Oracle11.2.0的过程

通过JayDeBeApi调用Oracle11.2.0的过程
EN

Stack Overflow用户
提问于 2015-10-16 09:22:11
回答 1查看 1.5K关注 0票数 0

我试图在我的DB上调用dbms_random.seed(42),请参阅参考。我需要使用python和JayDeBeApi连接器。到目前为止,我只能在没有问题的情况下执行select语句。我不明白我做错了什么。

JayDeBeApi似乎没有提供愈伤组织方法,所以我不能使用它:

代码语言:javascript
复制
AttributeError: 'Cursor' object has no attribute 'callproc'

我天真地尝试过:

代码语言:javascript
复制
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)

但这会导致:Error: ORA-00900: invalid SQL statement

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

使用begin/end

代码语言:javascript
复制
sql="begin dbms_random.seed(42); end;"
curs.execute(sql)

使用call

代码语言:javascript
复制
sql="{ call dbms_random.seed(42) }"
curs.execute(sql)

因此,我的问题是:如何使用dbms_random.seed(42)Oracle上调用JayDeBeApi?另一个问题是,如何检查语句是否实际执行失败(没有抛出异常,执行的返回值未定义)。

更新:

事实上,种子初始化工作如出一辙,因为我期望的结果是:

代码语言:javascript
复制
sql="SELECT DBMS_RANDOM.value FROM dual"
curs.execute(sql)
data = curs.fetchall()
print(data)

但是,对于随机查询选择,我仍然看到一些奇怪的行为:

代码语言:javascript
复制
SELECT *
FROM   (
    SELECT *
    FROM   table
    ORDER BY DBMS_RANDOM.RANDOM)
WHERE  rownum < 21;

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-19 07:21:26

经过多次尝试和错误,我相信这只是一个副作用。因为我没有做清理通行证:

代码语言:javascript
复制
curs.close()
conn.close()
jpype.shutdownJVM()

查询将导致一些未定义的行为。现在我有了正确的清理代码,当调用倍数乘以我的python脚本时,我得到了确定性的结果。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33166788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档