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 05 Python
Python实现将json文件中向量写入Excel的方法
Mar 26 Python
Python中循环引用(import)失败的解决方法
Apr 22 Python
python 处理string到hex脚本的方法
Oct 26 Python
Python类和对象的定义与实际应用案例分析
Dec 27 Python
解决Pytorch 加载训练好的模型 遇到的error问题
Jan 10 Python
Python基于requests库爬取网站信息
Mar 02 Python
python matplotlib:plt.scatter() 大小和颜色参数详解
Apr 14 Python
基于Python实现视频的人脸融合功能
Jun 12 Python
Python+Selenium随机生成手机验证码并检查页面上是否弹出重复手机号码提示框
Sep 21 Python
Python3+RIDE+RobotFramework自动化测试框架搭建过程详解
Sep 23 Python
jupyter 添加不同内核的操作
Feb 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数字转汉字代码(算法)
2011/10/08 PHP
Thinkphp通过一个入口文件如何区分移动端和PC端
2017/04/18 PHP
Ctrl+Enter提交内容信息
2006/06/26 Javascript
基于JQuery的Pager分页器实现代码
2010/07/17 Javascript
70+漂亮且极具亲和力的导航菜单设计国外网站推荐
2011/09/20 Javascript
JavaScript实现的字符串replaceAll函数代码分享
2015/04/02 Javascript
jQuery插件HighCharts实现气泡图效果示例【附demo源码】
2017/03/13 Javascript
通过js修改input、select默认字体颜色
2017/04/19 Javascript
详解Angular2 之 结构型指令
2017/06/21 Javascript
Koa 使用小技巧(小结)
2018/10/22 Javascript
解决layui使用layui-icon出现默认图标的问题
2019/09/11 Javascript
Vue解析带html标签的字符串为dom的实例
2019/11/13 Javascript
JS实现简单省市二级联动
2019/11/27 Javascript
Vue axios 跨域请求无法带上cookie的解决
2020/09/08 Javascript
[48:21]Mski vs VGJ.S Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
python实现连接mongodb的方法
2015/05/08 Python
python3实现暴力穷举博客园密码
2016/06/19 Python
python 简单搭建阻塞式单进程,多进程,多线程服务的实例
2017/11/01 Python
python 巧用正则寻找字符串中的特定字符的位置方法
2018/05/02 Python
python调用百度语音识别api
2018/08/30 Python
python将txt文件读入为np.array的方法
2018/10/30 Python
django rest framework 实现用户登录认证详解
2019/07/29 Python
Python类继承和多态原理解析
2020/02/05 Python
Python faker生成器生成虚拟数据代码实例
2020/07/20 Python
Python list和str互转的实现示例
2020/11/16 Python
Python lxml库的简单介绍及基本使用讲解
2020/12/22 Python
CSS3中线性颜色渐变的一些实现方法
2015/07/14 HTML / CSS
如何现实servlet的单线程模式
2014/08/05 面试题
幼儿园教师辞职信
2014/01/18 职场文书
12月小学生校园广播稿
2014/02/04 职场文书
2014年化妆品销售工作总结
2014/12/01 职场文书
2015年小学生新年寄语
2014/12/08 职场文书
维稳承诺书
2015/01/20 职场文书
简单的辞职信模板
2015/05/12 职场文书
车位出租协议书范本
2016/03/19 职场文书
索尼ICF-5900W收音机测评
2022/04/24 无线电