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中使用HTMLParser解析HTML的教程
Apr 29 Python
深入解析Python中的list列表及其切片和迭代操作
Mar 13 Python
浅谈python中的面向对象和类的基本语法
Jun 13 Python
详解python使用递归、尾递归、循环三种方式实现斐波那契数列
Jan 16 Python
python实现扫描日志关键字的示例
Apr 28 Python
基于python log取对数详解
Jun 08 Python
python 猴子补丁(monkey patch)
Jun 26 Python
python3使用腾讯企业邮箱发送邮件的实例
Jun 28 Python
win8.1安装Python 2.7版环境图文详解
Jul 01 Python
python3 map函数和filter函数详解
Aug 26 Python
Django扫码抽奖平台的配置过程详解
Jan 14 Python
Python进阶学习之带你探寻Python类的鼻祖-元类
May 08 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
Linux下CoreSeek及PHP扩展模块的安装
2012/09/23 PHP
Laravel 中获取上一篇和下一篇数据
2015/07/27 PHP
jQuery前台数据获取实现代码
2011/03/16 Javascript
详解JavaScript中undefined与null的区别
2014/03/29 Javascript
自定义jquery模态窗口插件无法在顶层窗口显示问题
2014/05/29 Javascript
网页实时显示服务器时间和javscript自运行时钟
2014/06/09 Javascript
优化Node.js Web应用运行速度的10个技巧
2014/09/03 Javascript
jQuery动态背景图片效果实现方法
2015/07/03 Javascript
jQuery实现的简洁下拉菜单导航效果代码
2015/08/26 Javascript
老生常谈javascript变量的命名规范和注释
2016/09/29 Javascript
Bootstrap基本插件学习笔记之轮播幻灯片(23)
2016/12/08 Javascript
JS实现双击内容变为可编辑状态
2017/03/03 Javascript
微信小程序scroll-view仿拼多多横向滑动滚动条
2020/04/21 Javascript
微信小程序项目实践之主页tab选项实现
2018/07/18 Javascript
JS字符串与二进制的相互转化实例代码详解
2019/06/28 Javascript
element的el-table中记录滚动条位置的示例代码
2019/11/06 Javascript
JavaScript canvas绘制渐变颜色的矩形
2020/02/18 Javascript
es6函数之严格模式用法实例分析
2020/03/17 Javascript
vuex实现购物车功能
2020/06/28 Javascript
vue中v-model对select的绑定操作
2020/08/31 Javascript
对Python3之方法的覆盖与super函数详解
2019/06/26 Python
Pycharm最新激活码2019(推荐)
2019/12/31 Python
python能在浏览器能运行吗
2020/06/17 Python
python实现将中文日期转换为数字日期
2020/07/14 Python
Python调用C/C++的方法解析
2020/08/05 Python
python 深度学习中的4种激活函数
2020/09/18 Python
如何使用PyCharm引入需要使用的包的方法
2020/09/22 Python
公司活动邀请函
2014/01/24 职场文书
计算机学生求职信范文
2014/01/30 职场文书
2014年综治宣传月活动总结
2014/04/28 职场文书
竞聘上岗演讲
2014/05/19 职场文书
个人综合鉴定材料
2014/05/23 职场文书
体育馆的标语
2014/06/24 职场文书
2014年大学生职业规划书:未来不是梦,只要勇敢冲!
2014/09/22 职场文书
班主任自我评价范文
2015/03/11 职场文书
golang 接口嵌套实现复用的操作
2021/04/29 Golang