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封装对象实现时间效果
Apr 23 Python
简单介绍Python中的floor()方法
May 15 Python
Ruby元编程基础学习笔记整理
Jul 02 Python
Python Socket编程详细介绍
Mar 23 Python
tensorflow输出权重值和偏差的方法
Feb 10 Python
详解Python安装tesserocr遇到的各种问题及解决办法
Mar 07 Python
Python django框架应用中实现获取访问者ip地址示例
May 17 Python
Python 安装 virturalenv 虚拟环境的教程详解
Feb 21 Python
python读取excel进行遍历/xlrd模块操作
Jul 12 Python
在 Python 中使用 7zip 备份文件的操作
Dec 11 Python
教你漂亮打印Pandas DataFrames和Series
May 29 Python
Python PIL按比例裁剪图片
May 11 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统计文件大小,以GB、MB、KB、B输出
2011/05/29 PHP
PHP中如何定义和使用常量
2013/02/28 PHP
解析php二分法查找数组是否包含某一元素
2013/05/23 PHP
php之XML转数组函数的详解
2013/06/07 PHP
PHP实现把数字ID转字母ID
2013/08/12 PHP
php过滤html标记属性类用法实例
2014/09/23 PHP
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
2014/12/17 PHP
PHP依赖注入原理与用法分析
2018/08/21 PHP
php回调函数处理数组操作示例
2020/04/13 PHP
xml分页+ajax请求数据源+dom取结果实例代码
2008/10/31 Javascript
将jQuery应用于login页面的问题及解决
2009/10/17 Javascript
NodeJS 模块开发及发布详解分享
2012/03/07 NodeJs
JS字符串截取函数实例
2013/12/27 Javascript
快速解决jQuery与其他库冲突的方法介绍
2014/01/02 Javascript
微信小程序之GET请求的实例详解
2017/09/29 Javascript
jQuery NProgress.js加载进度插件的简单使用方法
2018/01/31 jQuery
jQuery 筛选器简单操作示例
2019/10/02 jQuery
浅谈vue中$bus的使用和涉及到的问题
2020/07/28 Javascript
[57:59]EG vs Secret 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
python协程用法实例分析
2015/06/04 Python
python实现的用于搜索文件并进行内容替换的类实例
2015/06/28 Python
使用PyCharm配合部署Python的Django框架的配置纪实
2015/11/19 Python
OpenCV实现人脸识别
2017/04/07 Python
Python学习思维导图(必看篇)
2017/06/26 Python
Python实现matplotlib显示中文的方法详解
2018/02/06 Python
解决win64 Python下安装PIL出错问题(图解)
2018/09/03 Python
使用python serial 获取所有的串口名称的实例
2019/07/02 Python
美国户外运动商店:Sun & Ski
2018/08/23 全球购物
《蚂蚁和蝈蝈》教学反思
2014/02/24 职场文书
骨干教师个人总结
2015/02/11 职场文书
医院志愿者活动总结
2015/05/06 职场文书
银行柜员工作心得体会
2016/01/23 职场文书
2016年“我们的节日·中秋节”活动总结
2016/04/05 职场文书
MySQL 那些常见的错误设计规范,你都知道吗
2021/07/16 MySQL
Oracle 触发器trigger使用案例
2022/02/24 Oracle
关于ObjectUtils.isEmpty() 和 null 的区别
2022/02/28 Java/Android