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实现二分法算法实例
Feb 02 Python
Python爬取国外天气预报网站的方法
Jul 10 Python
python实现折半查找和归并排序算法
Apr 14 Python
python中defaultdict的用法详解
Jun 07 Python
python 对dataframe下面的值进行大规模赋值方法
Jun 09 Python
Python中分支语句与循环语句实例详解
Sep 13 Python
python 运用Django 开发后台接口的实例
Dec 11 Python
flask框架配置mysql数据库操作详解
Nov 29 Python
如何基于Python实现电子邮件的发送
Dec 16 Python
Python编程快速上手——Excel表格创建乘法表案例分析
Feb 28 Python
基于PyTorch中view的用法说明
Mar 03 Python
总结Python连接CS2000的详细步骤
Jun 23 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
解决163/sohu/sina不能够收到PHP MAIL函数发出邮件的问题
2009/03/13 PHP
php生成xml时添加CDATA标签的方法
2014/10/17 PHP
PHP实现适用于文件内容操作的分页类
2016/06/15 PHP
PHP判断用户是否已经登录(跳转到不同页面或者执行不同动作)
2016/09/22 PHP
PHP实现小偷程序实例
2016/10/31 PHP
php创建图像具体步骤
2017/03/13 PHP
php文件操作之文件写入字符串、数组的方法分析
2019/04/15 PHP
JavaScript入门教程(6) Window窗口对象
2009/01/31 Javascript
jQuery学习笔记 更改jQuery对象
2012/09/19 Javascript
document.addEventListener使用介绍
2014/03/07 Javascript
基于jquery实现动态竖向柱状条特效
2016/02/12 Javascript
XMLHttpRequest Level 2 使用指南
2016/08/26 Javascript
详解Node使用Puppeteer完成一次复杂的爬虫
2018/04/18 Javascript
mpvue将vue项目转换为小程序
2018/09/30 Javascript
Vue.js 时间转换代码及时间戳转时间字符串
2018/10/16 Javascript
记一次vue去除#问题处理经过小结
2019/01/24 Javascript
Vue动态组件与异步组件实例详解
2019/02/23 Javascript
详解Vue 单文件组件的三种写法
2020/02/19 Javascript
基于pandas将类别属性转化为数值属性的方法
2018/07/25 Python
django 自定义过滤器的实现
2019/02/26 Python
解决Mac下使用python的坑
2019/08/13 Python
python实现用户名密码校验
2020/03/18 Python
Python实现自动整理文件的脚本
2020/12/17 Python
大学生毕业自我评价范文分享
2013/11/11 职场文书
小学开学典礼主持词
2014/03/19 职场文书
环保标语大全
2014/06/12 职场文书
党性心得体会
2014/09/03 职场文书
公司员工离职证明书
2014/10/04 职场文书
工厂清洁工岗位职责
2015/02/14 职场文书
会议通知
2015/04/15 职场文书
python基础学习之生成器与文件系统知识总结
2021/05/25 Python
Python 实现定积分与二重定积分的操作
2021/05/26 Python
MySQL 使用索引扫描进行排序
2021/06/20 MySQL
你真的了解redis为什么要提供pipeline功能
2021/06/22 Redis
Python可视化动图组件ipyvizzu绘制惊艳的可视化动图
2022/04/21 Python
错误码NET::ERR_CERT_DATE_INVALID证书已过期解决方法?
2022/07/07 数码科技