首页 > 解决方案 > 尝试在 python 中调用 pl/sql 函数,但收到带有 to_date 的 ORA-01858 错误

问题描述

我正在尝试使用 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

您可以提供的任何帮助将不胜感激!

谢谢!

标签: pythonoracle

解决方案


目前尚不清楚您的 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'])

推荐阅读