您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

python读取oracle函数返回值

5b51 2022/1/14 8:18:54 python 字数 3563 阅读 341 来源 www.jb51.cc/python

在oracle中创建一个函数,本来是想返回一个indextable的,没有成功。想到文本也可以传输信息,就突然来了灵感,把返回值设置文本格式。

概述

在oracle中创建一个函数,本来是想返回一个index table的,没有成功。想到文本也可以传输信息,就突然来了灵感,把返回值设置文本格式。
考虑到返回数据量可能会很大,varchar2类型长度吃紧,于是将返回值类型设置为clob。 
我是用scott用户的测试表emp,这个是函数定义情况:

create or replace function test_query_func(dept varchar2)
return clob
is
 type test_record is record
 (rec_empno emp.empno%type,rec_ename emp.ename%type,rec_job  emp.job%type,rec_sal  emp.sal%type);
 type test_query_arr is table of test_record index by binary_integer;
 cursor cur is select empno,ename,job,sal from emp where deptno = dept;
 test_query test_query_arr;
 i integer := 0;
 ss varchar2(200) := '';
 res clob := '[';
begin
 for c in cur loop
  i := i + 1;
  test_query(i) := c;
 end loop;
 for q in 1..test_query.count loop
  ss := '(''' || test_query(q).rec_empno || ''',''' || test_query(q).rec_ename || ''',''' || test_query(q).rec_job || ''',''' || test_query(q).rec_sal || ''')';
 if q < test_query.count then
 ss := ss || ',';
 end if;
 res := res || ss;
 end loop;
 res := res || ']';
 return res;
end;

可以在pl/sql developer测试这个函数的返回值:

 begin
 dbms_output.put_line(test_query_func('30'));
 end; 

输出结果:
[('7499','ALLEN','SALESMAN','1600'),('7521','WARD','1250'),('7654','MARTIN',('7698','BLAKE','MANAGER','2850'),('7844','TURNER','1500'),('7900','JAMES','CLERK','950')]
 其实已经定义成一个python中列表中包含元组子元素的样式。 
下面是python中的代码,用python连接oracle需要cx_Oracle库:

import cx_Oracle as ora;
con = ora.connect('scott/scott@oradb');
cur = con.cursor();
cur.execute('select test_query_func(30) from dual');
res = cur.fetchall()[0][0].read();
cur.close();
con.close();
data = eval(res);
import pandas as pd;
df = pd.DataFrame(data,columns = ['empno','ename','job','sal']);
print(df)

这样oracle中函数返回的长字符串值就转化为DataFrame对象了:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是编程之家为你收集整理的python读取oracle函数返回值全部内容,希望文章能够帮你解决python读取oracle函数返回值所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶