如何调用用cx\u oracle返回记录的oracle函数?

2024-09-27 00:21:09 发布

您现在位置:Python中文网/ 问答频道 /正文

甲骨文有办法做到这一点:

typeObj = connection.gettype("PKG_DEMO.UDT_DEMORECORD")
obj = typeObj.newobject()

但在文件中说:

 This feature is new in cx_Oracle 5.3 and is only available in Oracle
 Database 12.1 and higher.

在我的例子中,oracleserver的版本是11g,我不能改变函数本身。 我认为由于服务器版本的原因,python会引发错误:

cx_Oracle.DatabaseError: ORA-04043: object PKG_DEMO.UDT_DEMORECORD does not exist

有没有办法从oracle11g获取记录?你知道吗


Tags: andin版本objisdemopkgconnection
1条回答
网友
1楼 · 发布于 2024-09-27 00:21:09

不幸的是,不,至少不是直接的!您可以使用PL/SQL将记录分解为若干位和几段,例如,如果您有PKG_DEMO.UDT_DEMORECORD记录,则可以执行以下操作:

import cx_Oracle
import datetime

conn = cx_Oracle.connect("pythondemo/welcome")
cursor = conn.cursor()

numVar = cursor.var(int)
strVar = cursor.var(str)
dateVar = cursor.var(datetime.datetime)
boolVar = cursor.var(bool)

numVar.setvalue(0, 6)
strVar.setvalue(0, "Test String")
dateVar.setvalue(0, datetime.datetime(2016, 5, 28))
boolVar.setvalue(0, False)

# show the original values
print("NUMBERVALUE ->", numVar.getvalue())
print("STRINGVALUE ->", strVar.getvalue())
print("DATEVALUE ->", dateVar.getvalue())
print("BOOLEANVALUE ->", boolVar.getvalue())
print()

cursor.execute("""
        declare
            t_Record pkg_Demo.udt_DemoRecord;
        begin
            t_Record.NumberValue := :numVar;
            t_Record.StringValue := :strVar;
            t_Record.DateValue := :dateVar;
            t_Record.BooleanValue := :boolVar;
            pkg_Demo.DemoRecordsInOut(t_Record);
            :numVar := t_Record.NumberValue;
            :strVar := t_Record.StringValue;
            :dateVar := t_Record.DateValue;
            :boolVar := t_Record.BooleanValue;
        end;""",
        numVar = numVar,
        strVar = strVar,
        dateVar = dateVar,
        boolVar = boolVar)

# show the modified values
print("NUMBERVALUE ->", numVar.getvalue())
print("STRINGVALUE ->", strVar.getvalue())
print("DATEVALUE ->", dateVar.getvalue())
print("BOOLEANVALUE ->", boolVar.getvalue())
print()

正如你所能看到的,它比原来的演示要复杂得多,但它确实有效!你知道吗

相关问题 更多 >

    热门问题