我一整天都在努力嘗試使用 cx_Oracle 從 PL/SQL 函數獲取布爾值。我看過一些帖子討論使用其他一些數據類型(如 char 或整數)來存儲返回值,但是當我嘗試使用此類解決方案時,我收到錯誤的數據類型錯誤。首先,讓我展示代碼。def lives_on_campus(self): cursor = conn.cursor() ret = cursor.callfunc('students_api.lives_on_campus', bool, [self.pidm]) return ret如果我使用 11.2.0.4 數據庫客戶端,則會出現以下錯誤。File "student-extracts.py", line 134, in <module> if student.lives_on_campus(): File "student-extracts.py", line 58, in lives_on_campus ret = cursor.callfunc('students_api.lives_on_campus', bool, [self.pidm])cx_Oracle.DatabaseError: DPI-1050: Oracle Client library is at version 11.2 but version 12.1 or higher is needed如果我使用 12.1.0.2 數據庫客戶端或更高版本,則會收到此錯誤。Traceback (most recent call last): File "student-extracts.py", line 134, in <module> if student.lives_on_campus(): File "student-extracts.py", line 58, in lives_on_campus ret = cursor.callfunc('students_api.lives_on_campus', bool, [self.pidm])cx_Oracle.DatabaseError: ORA-03115: unsupported network datatype or representation基本上,無論我使用哪個版本的 SQL 客戶端,它都會出錯。現在,我知道如果數據庫版本是 12c R2,上面的代碼將會工作。不幸的是,我們的測試環境中只有該版本,并且 PROD 僅使用 11g 數據庫。有什么可以使該功能與 11g 數據庫一起使用嗎?必須有一個解決方法。
1 回答

海綿寶寶撒
TA貢獻1809條經驗 獲得超8個贊
嘗試包裝匿名塊,例如:
with connection.cursor() as cursor:
outVal = cursor.var(int)
sql="""
begin
:outVal := sys.diutil.bool_to_int(students_api.lives_on_campus(:pidm));
end;
"""
cursor.execute(sql, outVal=outVal, pidm='123456')
print(outVal.getvalue())
添加回答
舉報
0/150
提交
取消