我正在尝试使用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
我们将不胜感激!
谢谢!
答案 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'])