Skip to content

存储过程或存储函数提取结果集

#!/usr/local/bin/python3
import xgcondb
conn=xgcondb.connect(host="127.0.0.1",port="5138",database="PYTHON3",user="SYSDBA", password="SYSDBA");
cur=conn.cursor();
cur.execute('create table test(arg1 int, arg2 varchar);')
#---------------------存储过程提取结果集--------------------
cur.execute('''CREATE or replace procedure pro_test(col1 int,col2 OUT SYS_REFCURSOR) as \
declare \
par1 int; \
str2 varchar; \
begin \
par1:=col1; \
for i in 1..par1 loop \
        str2:='insert into test values('||i||',''||par2||'');'; \
        execute immediate str2; \
end loop; \
OPEN col2 FOR SELECT * FROM test; \
end;''');
cur.setinputtype((xgcondb.Xugu_C_INTEGER,xgcondb.Xugu_C_REFCUR))
cur.setinputsizes((4,10))
print(cur.callproc('pro_test',(100,'refcur'),(1,2)))
row = cur.fetchall()
for i in row:
        print(i)
cur.clearsize()
cur.cleartype()
cur.execute('drop procedure pro_test;')

#---------------------存储函数提取结果集--------------------
cur.execute('''CREATE or replace function fun_test(col1 int,col2 OUT SYS_REFCURSOR) return varchar as \
declare \
par1 int; \
str2 varchar; \
begin \
par1:=col1; \
for i in 1..par1 loop \
        str2:='insert into test values('||i||',''||par2||'');'; \
        execute immediate str2; \
end loop; \
OPEN col2 FOR SELECT * FROM test; \
return str2; \
end;''');
cur.setinputtype((xgcondb.Xugu_C_INTEGER,xgcondb.Xugu_C_REFCUR,xgcondb.Xugu_C_CHAR))
cur.setinputsizes((4,10,200))
print(cur.callfunc('fun_test',(100,'refcur'),(1,2)))
row = cur.fetchall()
for i in row:
        print(i)
cur.clearsize()
cur.close()
conn.close()