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 md5与sha1加密算法用法分析
Jul 14 Python
Python向MySQL批量插数据的实例讲解
Mar 31 Python
python实现最长公共子序列
May 22 Python
对Python 简单串口收发GUI界面的实例详解
Jun 12 Python
python之pyqt5通过按钮改变Label的背景颜色方法
Jun 13 Python
Django后台admin的使用详解
Jul 08 Python
python数据预处理之数据标准化的几种处理方式
Jul 17 Python
解决python flask中config配置管理的问题
Jul 26 Python
tensorflow 环境变量设置方式
Feb 06 Python
Pandas把dataframe或series转换成list的方法
Jun 14 Python
python3处理word文档实例分析
Dec 01 Python
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
Apr 21 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 网页过期时间的控制代码
2009/06/29 PHP
Thinkphp和Bootstrap结合打造个性的分页样式(推荐)
2016/08/01 PHP
php进程(线程)通信基础之System V共享内存简单实例分析
2019/11/09 PHP
xml转json的js代码
2012/08/28 Javascript
js获取TreeView控件选中节点的Text和Value值的方法
2012/11/24 Javascript
js中把JSON字符串转换成JSON对象最好的方法
2014/03/21 Javascript
JavaScript常用的弹出广告及背投广告实现方法
2015/02/06 Javascript
使用js实现的简单拖拽效果
2015/03/18 Javascript
JavaScript自定义浏览器滚动条兼容IE、 火狐和chrome
2017/01/05 Javascript
支持移动端原生js轮播图
2017/02/16 Javascript
JavaScript闭包和回调详解
2017/08/09 Javascript
微信小程序使用request网络请求操作实例
2017/12/15 Javascript
React如何避免重渲染
2018/04/10 Javascript
element-ui循环显示radio控件信息的方法
2018/08/24 Javascript
解决jQuery使用append添加的元素事件无效的问题
2018/08/30 jQuery
在vue中安装使用vux的教程详解
2018/09/16 Javascript
浅谈React碰到v-if
2018/11/04 Javascript
实例分析编写vue组件方法
2019/02/12 Javascript
vue 2.5.1 源码学习 之Vue.extend 和 data的合并策略
2019/06/04 Javascript
微信小程序 扭蛋抽奖机css3动画实现详解
2019/07/19 Javascript
详解vue组件之间的通信
2020/08/30 Javascript
[40:50]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第四场
2014/05/24 DOTA
python代码 输入数字使其反向输出的方法
2018/12/22 Python
Python cookie的保存与读取、SSL讲解
2020/02/17 Python
python实现全排列代码(回溯、深度优先搜索)
2020/02/26 Python
CSS3 对过渡(transition)进行调速以及延时
2020/10/21 HTML / CSS
Feelunique美国:欧洲大型的在线美妆零售电商
2018/11/04 全球购物
ghd法国官方网站:英国最受欢迎的美发工具品牌
2019/04/18 全球购物
Java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类
2012/02/06 面试题
信息管理员岗位职责
2013/12/01 职场文书
争先创优活动总结
2014/08/27 职场文书
单位工作证明格式模板
2014/10/04 职场文书
教师师德表现自我评价
2015/03/05 职场文书
2015年除四害工作总结
2015/07/23 职场文书
纯CSS实现hover图片pop-out弹出效果的实例代码
2021/04/16 HTML / CSS
springboot+zookeeper实现分布式锁
2022/03/21 Java/Android