Oracle绑定变量to_date参数错误

时间:2019-03-01 21:14:10

标签: python sql oracle to-date bind-variables

我正在编写使用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)

fetchCalendar.sql

SELECT YEARNBR as yearnbr, QUARTERNBR as quarternbr, MONTHNBR as monthnbr, WEEKNBR as weeknbr
 FROM MFS_MFSCALENDAR
WHERE 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”,init_load的第644行       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 个答案:

答案 0 :(得分:0)

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

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