我正在尝试使用cx_ORacle从Python访问Oracle。
我有一个不返回任何行的select语句,即; NO_DATA_FOUND ..这就是我处理错误条件的方式。
当我执行这段代码时,cx_oracle.error或cx_oracle.Databaseerror或cx_oracle.Warning没有捕获错误NO_DATA_FOUND ..
如何处理NO_DATA_FOUND条件?
code.py
def DetermineNames(self):
sql = """select NAME from EMP_TAB where fd_fle_id = %s"""%(self.fileid)
try:
self.cursor.execute(sql)
result = self.cursor.fetchall()
for row in result:
print('row',row)
except cx_Oracle.Error as e:
print("Error:Unable to determine the RAW_OBJ_NAME: Object Name:%s, Function Name:%s Error:%s")%(self.__class__.__name__,sys._getframe().f_code.co_name,
str(e).strip())
except cx_Oracle.DatabaseError as e:
print("Error:Unable to determine the RAW_OBJ_NAME: Object Name:%s, Function Name:%s Error:%s")%(self.__class__.__name__,sys._getframe().f_code.co_name,
str(e).strip())
except cx_Oracle.Warning as e:
print("Error:Unable to determine the RAW_OBJ_NAME: Object Name:%s, Function Name:%s Error:%s")%(self.__class__.__name__,sys._getframe().f_code.co_name,
str(e).strip())
return self.rawname
答案 0 :(得分:2)
这不是错误情况,这可能是您没有触发任何异常的原因。尝试这样的事情:
if not self.cursor.rowcount:
print 'No rows returned'
答案 1 :(得分:1)
可以使用cx_Oracle._Error.code
,如果值为1403
则为NO DATA FOUND
。
....
except cx_Oracle.DatabaseError as e:
error, = e.args
if error.code == 1403:
print "No rows returned. Error Code:", error.code
....