#python #cx-oracle
#python #cx-oracle
Вопрос:
Я пытаюсь подключиться к базе данных Oracle с помощью модуля python cx_Oracle. Когда я пытаюсь выполнить определенный запрос, я получаю ‘ORA-01847: день месяца должен быть между 1 и последним днем месяца’
Запрос:
select case when to_date (STOP_DATE, 'dd-mon-yy')='01-JAN-01' then '000000' else to_char(to_date(STOP_DATE,'dd-mon-yy'),'mmddyy') end STOP_DATE
from table1 where SYS_1= 1234 and rownum < 11
Тот же запрос отлично работает в SQLDeveloper.
Любая помощь высоко ценится.
Код Python:
import cx_Oracle
connection = None
try:
dsn_tns = cx_Oracle.makedsn("host", "port", service_name="serviceName")
connection = cx_Oracle.connect(user="user", password="password", dsn=dsn_tns)
c = connection.cursor()
sqlStatement = r'''
select case when to_date (STOP_DATE, 'dd-mon-yy')='01-JAN-01' then '000000' else to_char(to_date(STOP_DATE,'dd-mon-yy'),'mmddyy') end STOP_DATE
from table1 where SYS_1= 1234 and rownum < 11
'''
c.execute(sqlStatement)
resultSet = c.fetchall()
if not len(resultSet) == 0:
print("query successful!!!!!!!!!!")
for row in resultSet:
for items in row:
if items == None:
items = ""
print (items)
if connection:
print('all executed')
connection.close()
except Exception as e:
print(e)
if connection:
connection.close()
Комментарии:
1. Я полагаю, STOP_DATE — это символьный столбец? Есть ли причина, по которой вы сохраняете STOP_DATE как столбец символов, а не дату? Это устранило бы проблемы, с которыми вы сталкиваетесь! Возможно, вы захотите выбрать только одну строку (одну и ту же в обоих случаях), чтобы убедиться, что вы не просто столкнулись с проблемой данных!
2. привет @AnthonyTuininga, STOP_DATE — это столбец даты, но он в другом формате. (гггг-мм-дд ЧЧ: ММ: СС)
3. Если STOP_DATE — это столбец даты, то вместо этого вы должны сделать это: stop_date = to_date(’01-JAN-01′, ‘dd-MON-YY’)