尝试在python中调用pl / sql函数,但收到to_date的ORA-01858错误

时间:2018-08-21 02:16:46

标签: python oracle

我正在尝试使用python调用pl / sql函数。使用内置函数“ to_date()”时出现问题。

这是“ create_batch”函数声明

create or replace function create_batch( p_batchnumber in VARCHAR, p_userid in VARCHAR, p_received_date in VARCHAR, p_workstation IN VARCHAR ) RETURN VARCHAR IS

这是我试图用来调用此函数的代码行。

batch_id = cur.callfunc("create_batch", cx_Oracle.STRING, ['100001','test','to_date(\'05/15/2018\',\'MM/dd/yyyy\')','01'])

这是错误消息。

File "test_oracle.py", line 7, in <module> batch_id = cur.callfunc("create_batch", cx_Oracle.STRING, ['100001','test','to_date(\'05/15/2018\',\'MM/dd/yyyy\')','01']) cx_Oracle.DatabaseError: ORA-01858: a non-numeric character was found where a numeric was expected ORA-06512: at "CFT.CREATE_BATCH", line 10 ORA-06512: at line 1

我们将不胜感激!

谢谢!

1 个答案:

答案 0 :(得分:1)

目前尚不清楚在cx_Oracle会话级别上NLS_DATE_FORMAT的默认设置是什么,因为这是您应该指定的输入日期格式。如果您的会话设置为NLS_DATE_FORMAT为MM / DD / YYYY,则应发送以下格式的日期格式。

batch_id = cur.callfunc("create_batch", cx_Oracle.STRING, ['100001','test','to_date("05/15/2018","MM/DD/YYYY")','01'])

对于p_received_date,您不需要使用to_date函数进行转换,因为它是VARCHAR输入而不是日期输入。因此,假设您没有在会话级别设置日期格式,而是使用默认格式,则可以尝试以下格式:

batch_id = cur.callfunc("create_batch", cx_Oracle.STRING, ['100001','test','15-MAY-2018','01'])