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实现网络测试的脚本分享
May 26 Python
Python解析并读取PDF文件内容的方法
May 08 Python
Python 读写文件的操作代码
Sep 20 Python
详解Python中的内建函数,可迭代对象,迭代器
Apr 29 Python
PyQt5 在label显示的图片中绘制矩形的方法
Jun 17 Python
python使用Qt界面以及逻辑实现方法
Jul 10 Python
Python判断字符串是否xx开始或结尾的示例
Aug 08 Python
python 调试冷知识(小结)
Nov 11 Python
Pytorch高阶OP操作where,gather原理
Apr 30 Python
怎么解决pycharm license Acti的方法
Oct 28 Python
Python爬虫爬取微博热搜保存为 Markdown 文件的源码
Feb 22 Python
Python实现信息轰炸工具(再也不怕说不过别人了)
Jun 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获取一年中每个星期的开始和结束日期的方法
2015/02/12 PHP
php简单获取文件扩展名的方法
2015/03/24 PHP
学习php设计模式 php实现合成模式(composite)
2015/12/08 PHP
In Javascript Class, how to call the prototype method.(three method)
2007/01/09 Javascript
checkbox 多选框 联动实现代码
2008/10/22 Javascript
JavaScript实现动态增加文件域表单
2009/02/12 Javascript
在图片上显示左右箭头类似翻页的代码
2013/03/04 Javascript
jQuery淡入淡出元素让其效果更为生动
2014/09/01 Javascript
javascript结合CSS实现苹果开关按钮特效
2015/04/07 Javascript
浅析Node.js 中 Stream API 的使用
2015/10/23 Javascript
NodeJS使用formidable实现文件上传
2016/10/27 NodeJs
JS实现类似百叶窗下拉菜单效果
2016/12/30 Javascript
基于vue+uniapp直播项目实现uni-app仿抖音/陌陌直播室功能
2019/11/12 Javascript
ant-design-vue 快速避坑指南(推荐)
2020/01/21 Javascript
js实现的订阅发布者模式简单示例
2020/03/14 Javascript
vue 获取url里参数的两种方法小结
2020/11/12 Javascript
[05:16]《大圣!大圣》——DOTA2新英雄齐天大圣配音李世宏老师专访
2016/12/13 DOTA
Python压缩和解压缩zip文件
2015/02/14 Python
python爬虫入门教程--正则表达式完全指南(五)
2017/05/25 Python
python学习开发mock接口
2019/04/28 Python
windows中安装Python3.8.0的实现方法
2019/11/19 Python
python3下pygame如何实现显示中文
2020/01/11 Python
Python动态导入模块和反射机制详解
2020/02/18 Python
深入剖析webstorage[html5的本地数据处理]
2016/07/11 HTML / CSS
新西兰Bookabach:查找全球度假屋
2020/12/03 全球购物
存储过程和函数的区别
2013/05/28 面试题
大学生志愿者活动总结
2014/06/27 职场文书
2014年后勤管理工作总结
2014/12/01 职场文书
五年级学生期末评语
2014/12/26 职场文书
我的生日感言
2015/08/03 职场文书
小学音乐课教学反思
2016/02/18 职场文书
2016年基层党组织创先争优承诺书
2016/03/25 职场文书
2016五四青年节活动总结范文
2016/04/06 职场文书
2019个人工作态度自我评价
2019/04/24 职场文书
职场:企业印章管理制度(模板)
2019/10/18 职场文书
奥特曼十大神器:奥特手镯在榜,第一是贝利亚的神器
2022/03/18 日漫