存储过程代码
CREATE OR REPLACE Procedure dw_all.test_procedure
-- 外部输入参数
(
v_name In varchar,
r_result out sys_refcursor
) As
v_sql varchar2(1000);
Begin
-- 存储过程中两个单引号转义为一个单引号,见下面的where条件
v_sql := 'select a,b from dw_all.test where a='''||v_name||'''';
-- 使用open将结果存入游标返回出去
OPEN r_result FOR v_sql;
Exception
When Others Then
Dbms_Output.Put_Line('出错!');
End;
python代码
import cx_Oracle
import pandas as pd
conn = cx_Oracle.connect('dw_all/A1***23@172.*.*.200/gb')
cur = conn.cursor()
i_cur = cur.var(cx_Oracle.CURSOR)
#第一个是存储过程名称,列表中为按顺序排列的参数
results = cur.callproc('dw_all.test_procedure',['b',i_cur])
l_results = results[1]
cols=[x[0] for x in l_results.description]
rs=pd.DataFrame(list(l_results),columns=cols)
conn.close()
#游标内容,注意游标遍历一次后就是空的了
list(l_results)
#游标内容的字段
[x[0] for x in l_results.description]
--------------------------------------------
存储过程源表数据
A B
a 1
a 2
b 1
b 2
b 3
存储过程结果数据
A B
0 b 1
1 b 2
2 b 3