python读取oracle函数返回值


Posted in Python onJuly 18, 2016

在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', 'SALESMAN', '1250'),('7654', 'MARTIN', 'SALESMAN', '1250'),('7698', 'BLAKE', 'MANAGER', '2850'),('7844', 'TURNER', 'SALESMAN', '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 相关文章推荐
Python中使用ConfigParser解析ini配置文件实例
Aug 30 Python
Python判断直线和矩形是否相交的方法
Jul 14 Python
python 删除大文件中的某一行(最有效率的方法)
Aug 19 Python
Python动态导入模块的方法实例分析
Jun 28 Python
PyCharm 创建指定版本的 Django(超详图解教程)
Jun 18 Python
python 经典数字滤波实例
Dec 16 Python
tensorflow查看ckpt各节点名称实例
Jan 21 Python
Python Json数据文件操作原理解析
May 09 Python
Django REST Swagger实现指定api参数
Jul 07 Python
pycharm 添加解释器的方法步骤
Aug 31 Python
利用python实现后端写网页(flask框架)
Feb 28 Python
Python  lambda匿名函数和三元运算符
Apr 19 Python
Python读取一个目录下所有目录和文件的方法
Jul 15 #Python
Python在线运行代码助手
Jul 15 #Python
python 实现网上商城,转账,存取款等功能的信用卡系统
Jul 15 #Python
python 性能提升的几种方法
Jul 15 #Python
浅谈Python 对象内存占用
Jul 15 #Python
python发送邮件功能实现代码
Jul 15 #Python
Python中列表和元组的使用方法和区别详解
Dec 30 #Python
You might like
PHP安装攻略:常见问题解答(一)
2006/10/09 PHP
PHP 可阅读随机字符串代码
2010/05/26 PHP
rrmdir php中递归删除目录及目录下的文件
2011/05/15 PHP
解析php类的注册与自动加载
2013/07/05 PHP
php不使用插件导出excel的简单方法
2014/03/04 PHP
修改WordPress中文章编辑器的样式的方法详解
2015/12/15 PHP
用jscript实现新建word文档
2007/06/15 Javascript
解决jquery操作checkbox火狐下第二次无法勾选问题
2014/02/10 Javascript
Javascript实现多彩雪花从天降散落效果的方法
2015/02/02 Javascript
JavaScript多线程详解
2015/08/12 Javascript
js实现超酷的照片墙展示效果图附源码下载
2015/10/08 Javascript
jQuery查找节点并获取节点属性的方法
2016/09/09 Javascript
angularJS深拷贝详解
2017/03/23 Javascript
JavaScript内存泄漏的处理方式
2017/11/20 Javascript
原生JS进行前后端同构
2018/04/22 Javascript
vue keep-alive请求数据的方法示例
2018/05/16 Javascript
vue中实现左右联动的效果
2018/06/22 Javascript
element日历calendar组件上月、今天、下月、日历块点击事件及模板源码
2020/07/27 Javascript
jQuery实现购物车全功能
2021/01/11 jQuery
[01:53]2016完美“圣”典风云人物:Maybe专访
2016/12/05 DOTA
Python运行的17个时新手常见错误小结
2012/08/07 Python
python使用tensorflow深度学习识别验证码
2018/04/03 Python
Python实现图片拼接的代码
2018/07/02 Python
pandas将多个dataframe以多个sheet的形式保存到一个excel文件中
2019/10/10 Python
python安装读取grib库总结(推荐)
2020/06/24 Python
Pytorch 图像变换函数集合小结
2021/02/01 Python
localStorage 设置过期时间的方法实现
2018/12/21 HTML / CSS
德国狗狗用品在线商店:Schecker
2017/03/17 全球购物
New Balance比利时官方网站:购买鞋子和服装
2021/01/15 全球购物
三年级音乐教学反思
2014/01/28 职场文书
班长自荐书范文
2014/02/11 职场文书
投标人法定代表人授权委托书格式
2014/09/28 职场文书
毕业设计指导教师评语
2014/12/30 职场文书
冰峪沟导游词
2015/02/09 职场文书
健康证明
2015/06/19 职场文书
2016年三严三实党课学习心得体会
2016/01/06 职场文书