我有一个使用cx_Oracle从python脚本执行的sql语句。该语句包括两个子查询,如下所示:
select distinct
us.firstname as "Vorname",
us.lastname as "Nachname",
us.email as "Email",
us.loginname as "Q-Nummer",
us.status,
us.lastlogintime
from
user_table us
where
us.lastlogintime >= add_months(trunc(sysdate), -7)
and us.lastlogintime < add_months(trunc(sysdate), -6)
and not exists (select distinct sp.user_id from specificstatus sp where sp.user_id = us.id)
and not exists (select distinct ec.owner_id from electriccomponent ec where ec.owner_id = us.id)我得到不同数量的结果,这取决于我是在python脚本中运行这个sql语句,还是直接在statement中运行这个sql语句。python脚本似乎没有执行这两个子查询,因为当我在sql developper中注释掉这些查询时,结果与python脚本中的结果相同。这是什么原因?
编辑: python代码没有什么特别之处:
dsn_tns = cx_Oracle.makedsn(cfg.db_hostname, cfg.db_port, sid=cfg.db_servicename)
conn = cx_Oracle.connect(user=cfg.db_username, password=cfg.db_password, dsn=dsn_tns, encoding="UTF-8", nencoding="UTF-8")
conn.autocommit = True
c = conn.cursor()
c.execute(cfg.sql_query)发布于 2022-01-10 18:33:59
正如注释中提到的,您可能连接到不同的数据库或不同的用户,或者在一个或另一个环境中可能有未提交的数据。您需要验证这一点--通过执行一个查询来获取您刚才在SQLDeveloper脚本中添加的数据(例如)。您还可以在这两种环境中作为初始检查执行这些查询:
select sys_context('userenv', 'service_name') from dualselect sys_context('userenv', 'current_user') from dual在一个环境中执行的查询很难在另一个环境中“失败”执行--当然,除非有严重的错误!SQL被简单地发送到数据库,而不进行任何操作。
您还可以将DPI_DEBUG_LEVEL环境变量设置为值16,并确保您正在执行的SQL实际上就是您认为正在执行的SQL!
https://stackoverflow.com/questions/70650441
复制相似问题