DATABASE (ORACLE):
Create or replace TYPE xyz.OUTPUT_TYPE_TAB is TABLE OF OUTPUT_TYP
Create or replace TYPE OUTPUT_TYP IS OBJECT(A VARCHAR(20),B VARCHAR(20), dt TIMESTAMP(6))
Create or replace procedure XYZ_PROC(IN_DT IN DATEtab_out OUT OUTPUT_TYPE_TAB) ASBEGINTab_out := OUTPUT_TYPE_TAB();Select OUTPUT_TY(A,B,dt) BULK COLLECT INTO TABLE_TYPE from tab_x where .... ;END XYZ_PROC;
Python:
Def get_impl()
#do connection initialization
Connection = get_conn(); #getting a cx_oracle connection pool
Cur = connection.cursor()
Obj_type=connection.gettype("OUTPUT_TYPE_TAB")
Out_obj=obj_type.newobject()
S="BEGIN XYZ_PROC(:1,:2)"
Cur.execute(S,['ABC',Out_obj])
#how do I parse the result from Out_obj ?
所以上面是proc和DB对象,我有和python的代码片段,如果我想从proc中读取选择的结果到我的python Mac我如何解析它。请建议。
我知道嵌入SQL本身,我可以解析游标结果,但现在想知道如何解析DB TYPE对象作为输出。
我试着打印输出对象,但是没有成功。
您可以使用这种方法获得输出对象。注意,我使用的是python-oracledb (cx_Oracle的后续版本),但这应该与cx_Oracle一样好。
import datetime
import oracledb
conn = oracledb.connect("user/password@localhost/service_name")
cursor = conn.cursor()
var = cursor.var(typ=conn.gettype("OUTPUT_TYPE_TAB"))
cursor.callproc("xyz_proc", [datetime.datetime.today(), var])
print("value:", var.getvalue())