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函数中的函数(闭包)用法实例
Mar 15 Python
python实现数据预处理之填充缺失值的示例
Dec 22 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
Jul 07 Python
如何利用Python分析出微信朋友男女统计图
Jan 25 Python
python集合是否可变总结
Jun 20 Python
Python程序暂停的正常处理方法
Nov 07 Python
Python实现word2Vec model过程解析
Dec 16 Python
用python解压分析jar包实例
Jan 16 Python
通过python 执行 nohup 不生效的解决
Apr 16 Python
django ObjectDoesNotExist 和 DoesNotExist的用法
Jul 09 Python
tensorflow基于CNN实战mnist手写识别(小白必看)
Jul 20 Python
python绘制云雨图raincloud plot
Aug 05 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 socket客户端及服务器端应用实例
2014/07/04 PHP
php生成百度sitemap站点地图类函数实例
2014/10/17 PHP
PHP实现自动识别原编码并对字符串进行编码转换的方法
2016/07/13 PHP
php求今天、昨天、明天时间戳的简单实现方法
2016/07/28 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
JavaScript+CSS控制打印格式示例介绍
2014/01/07 Javascript
jquery.ajax的url中传递中文乱码问题的解决方法
2014/02/07 Javascript
jQuery对象的selector属性用法实例
2014/12/27 Javascript
jquery实现图片随机排列的方法
2015/05/04 Javascript
JS时间特效最常用的三款
2015/08/19 Javascript
基于zepto的移动端轻量级日期插件--date_picker
2016/03/04 Javascript
AngularJS控制器继承自另一控制器
2016/05/09 Javascript
微信小程序使用video组件播放视频功能示例【附源码下载】
2017/12/08 Javascript
JS实现图片转换成base64的各种应用场景实例分析
2018/06/22 Javascript
clipboard在vue中的使用的方法示例
2018/10/19 Javascript
JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例
2019/02/21 Javascript
Node.js Event Loop各阶段讲解
2019/03/08 Javascript
python实现马耳可夫链算法实例分析
2015/05/20 Python
python实现数组插入新元素的方法
2015/05/22 Python
Scrapy-redis爬虫分布式爬取的分析和实现
2017/02/07 Python
解决PySide+Python子线程更新UI线程的问题
2019/01/11 Python
Python3.5实现的三级菜单功能示例
2019/03/25 Python
python按键按住不放持续响应的实例代码
2019/07/17 Python
jupyter lab的目录调整及设置默认浏览器为chrome的方法
2020/04/10 Python
html5 video标签屏蔽右键视频另存为的js代码
2013/11/12 HTML / CSS
LEGO玩具英国官方商店:LEGO Shop GB
2018/03/27 全球购物
函授本科毕业生自我鉴定
2013/10/16 职场文书
课程改革实施方案
2014/03/16 职场文书
民生工程实施方案
2014/03/22 职场文书
幼儿园运动会口号
2014/06/07 职场文书
关于晚自习早退的检讨书
2014/09/13 职场文书
2015年库房工作总结
2015/04/30 职场文书
MySQL连接查询你真的学会了吗?
2021/06/02 MySQL
python脚本框架webpy模板赋值实现
2021/11/20 Python
python区块链持久化和命令行接口实现简版
2022/05/25 Python
mysql sock 文件解析及作用讲解
2022/07/15 MySQL