Я пытаюсь вызвать функцию pl/sql с помощью python. У меня возникают проблемы с использованием встроенной функции "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
Любая помощь, которую вы могли бы предоставить, была бы очень признательна!
Спасибо!
Неясно, каковы ваши настройки по умолчанию для NLS_DATE_FORMAT на вашем уровне сеанса cx_Oracle, потому что это формат даты ввода, который вы должны дать. Если ваш сеанс установлен с 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'])
Вам не нужно преобразовывать с помощью функции to_date для p_received_date, поскольку это вход VARCHAR, а не вход даты. Таким образом, вы можете попробовать в следующем формате, предполагая, что вы не устанавливаете формат даты на уровне сеанса, и вы используете формат по умолчанию:
batch_id = cur.callfunc("create_batch", cx_Oracle.STRING, ['100001','test','15-MAY-2018','01'])