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 sys.argv用法实例
May 28 Python
Win10下Python环境搭建与配置教程
Nov 18 Python
python计算两个地址之间的距离方法
Jun 09 Python
详解python pandas 分组统计的方法
Jul 30 Python
python判断链表是否有环的实例代码
Jan 31 Python
python将unicode和str互相转化的实现
May 11 Python
python json.dumps() json.dump()的区别详解
Jul 14 Python
Python变量及数据类型用法原理汇总
Aug 06 Python
Python发送邮件实现基础解析
Aug 14 Python
用sleep间隔进行python反爬虫的实例讲解
Nov 30 Python
Django 实现图片上传和下载功能
Dec 31 Python
python 视频下载神器(you-get)的具体使用
Jan 06 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 中的批处理的实现
2007/06/14 PHP
php设计模式 Prototype (原型模式)代码
2011/06/26 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
php 使用 __call实现重载功能示例
2019/11/18 PHP
javascript GUID生成器实现代码
2009/10/31 Javascript
为JavaScript添加重载函数的辅助方法
2010/07/04 Javascript
jQuery EasyUI API 中文文档 - DataGrid数据表格
2011/11/17 Javascript
jQuery输入城市查看地图使用介绍
2013/05/08 Javascript
JavaScript获取XML数据附示例截图
2014/03/05 Javascript
实例讲解JQuery中this和$(this)区别
2014/12/08 Javascript
javascript中的Base64、UTF8编码与解码详解
2015/03/18 Javascript
最简单的tab切换实例代码
2016/05/13 Javascript
AngularJS ng-app 指令实例详解
2016/07/30 Javascript
浅谈$_FILES数组为空的原因
2017/02/16 Javascript
jQuery实现文章图片弹出放大效果
2017/04/06 jQuery
解析NodeJS异步I/O的实现
2017/04/13 NodeJs
jquery实现提示语淡入效果
2017/05/05 jQuery
详解Node.js amqplib 连接 Rabbit MQ最佳实践
2019/01/24 Javascript
js实现滑动滑块验证登录
2020/07/24 Javascript
vue使用keep-alive实现组件切换时保存原组件数据方法
2020/10/30 Javascript
Python2.x中str与unicode相关问题的解决方法
2015/03/30 Python
python  logging日志打印过程解析
2019/10/22 Python
用Python开发app后端有优势吗
2020/06/29 Python
Python实现哲学家就餐问题实例代码
2020/11/09 Python
python openssl模块安装及用法
2020/12/06 Python
HTML5自定义元素播放焦点图动画的实现
2019/09/25 HTML / CSS
美国在线印刷公司:PsPrint
2017/10/12 全球购物
北美领先的智能产品购物网站:Wellbots
2018/06/11 全球购物
Trip.com澳大利亚:在线旅行社
2019/12/01 全球购物
英国时尚配饰、珠宝和服装网站:KJ Beckett
2020/01/23 全球购物
飞利浦美国官网:Philips美国
2020/02/28 全球购物
params有什么用
2016/03/01 面试题
Ajax请求总共有多少种Callback
2016/07/17 面试题
经济信息系毕业生自荐信范文
2014/03/15 职场文书
Python基于Opencv识别两张相似图片
2021/04/25 Python