python - 尝试在 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
您可以提供的任何帮助将不胜感激!
谢谢!
解决方案
目前尚不清楚您的 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'])
推荐阅读
- c++ - async_read_until:缓冲区空间不足或队列已满
- python - 尝试在 Google Colab 中安装/使用 Python-Magic 时出错
- python - Spark REST API 发布请求不返回响应
- c# - 完全被难住了 - System.Runtime.InteropServices.ExternalException:“GDI+ 中发生了一般错误。”
- c++ - 在对象外部访问时,尝试从文件描述符读取到缓冲区失败
- c# - 如何从另一个 AppDomain 调用任意方法
- html - 如何使引导列仅以相等的倍数折叠?
- knime - 将 KNIME 工作流导出为独立应用程序或 JAR
- c# - GameObject 数组初始化的“索引超出数组范围”
- winapi - 为什么带有渐变填充的 RoundRect 路径不能在右侧产生正确的角?