为了账号安全,请及时绑定邮箱和手机立即绑定

Oracle 绑定变量 to_date 参数错误

Oracle 绑定变量 to_date 参数错误

料青山看我应如是 2021-11-23 19:11:31
我正在编写使用 Python 脚本执行 SQL (Oracle) 语句的代码,如下所示:PYTHON:with open(os.path.join(WORKING_PATH, "sql", "fetchCalendar.sql"), 'r') as     fetch_date = fetch.read()   #(Some other code)CD = timestamp_tostring(ACTUALDATE)print("CD:", CD)cnnSB.cursor.execute(fetch_date, CD)获取日历.sqlSELECT YEARNBR as yearnbr, QUARTERNBR as quarternbr, MONTHNBR as monthnbr, WEEKNBR as weeknbr FROM MFS_MFSCALENDARWHERE ACTUALDATE = TO_DATE(:CD, 'DD-MON-YY')当我尝试使用以下值运行它时,会输出:CD:30-AUG-18回溯(最近一次调用):文件“AHT_Init.py”,第 919 行,在 init_load(data, end_of_week, cur, 3) 文件“AHT_Init.py”,第 644 行,在 init_load populate_rollup(modelid, test_data, train_data, rollup_cmd ) 文件“AHT_Init.py”,第 684 行,在 populate_rollup cnnSB.cursor.execute(fetch_date, CD) cx_Oracle.DatabaseError: ORA-01036: 非法变量名/编号(强调'ORA-01036:非法变量名/编号')当然,我尝试更改变量名称无济于事。我尝试使用 Oracle SQL Developer 运行 SQL 代码(在提示时传入'01-JUN-18',包括单引号),并收到此错误:ORA-01858: 在需要数字的地方找到了非数字字符 01858. 00000 - “在需要数字的地方找到了非数字字符” *原因:使用日期格式模型转换的输入数据不正确. 输入数据不包含数字,格式模型需要数字。*操作:修复输入数据或日期格式模型以确保元素在数量和类型上匹配。然后重试该操作。但是,当我用以下内容替换有问题的行时:WHERE ACTUALDATE = TO_DATE('01-JUN-18', 'DD-MON-YY');代码按预期工作。任何人都可以引导我了解问题可能是什么,以及如何解决它?非常感谢!编辑:我知道 fetchCalendar.sql 代码中缺少分号;这对于 Python 在此上下文中如何与 Oracle 交互是必要的。我在 Oracle SQL Developer 上尝试时添加了一个分号以进行测试,但在为 .sql 文件删除时它不会导致问题。
查看完整描述

1 回答

?
长风秋雁

TA贡献1757条经验 获得超7个赞

找到答案:简而言之,错误类型错误。

我的代码将 datetime.date 传递给需要字符串的 SQL to_date 转换。


查看完整回答
反对 回复 2021-11-23
  • 1 回答
  • 0 关注
  • 341 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信