0

cx_ORAcle を使用して Python から Oracle にアクセスしようとしています。

行を返さない select ステートメントがあります。NO_DATA_FOUND ..これがエラー状態の処理方法です。

このコードを実行すると、エラー NO_DATA_FOUND が cx_oracle.error または cx_oracle.Databaseerror または cx_oracle.Warning. によってキャッチされません。

NO_DATA_FOUND 条件を処理するにはどうすればよいですか?

コード.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       
4

2 に答える 2

2

これはエラー状態ではないため、例外がトリガーされていない可能性があります。代わりに次のようにしてみてください。

if not self.cursor.rowcount:
   print 'No rows returned'
于 2012-09-26T15:30:38.100 に答える
1

使用することができcx_Oracle._Error.code、値が1403a の場合NO DATA FOUND

....
except cx_Oracle.DatabaseError as e:
   error, = e.args
   if error.code == 1403:
       print "No rows returned. Error Code:", error.code  
....
于 2012-09-26T15:33:45.313 に答える