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 13 Python
python sys模块sys.path使用方法示例
Dec 04 Python
Python Web编程之WSGI协议简介
Jul 18 Python
Django中的forms组件实例详解
Nov 08 Python
Python零基础入门学习之输入与输出
Apr 03 Python
Python实现连接MySql数据库及增删改查操作详解
Apr 16 Python
Python Collatz序列实现过程解析
Oct 12 Python
解决TensorFlow GPU版出现OOM错误的问题
Feb 03 Python
python opencv 检测移动物体并截图保存实例
Mar 10 Python
pandas处理csv文件的方法步骤
Oct 16 Python
PyQt 如何创建自定义QWidget
Mar 24 Python
python绘制简单直方图(质量分布图)的方法
Apr 21 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&amp;MYSQL分页原理及实现
2007/01/02 PHP
PHP获取当前相对于域名目录的方法
2015/06/26 PHP
php实现可运算的验证码
2015/11/10 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
jQuery的一些注意
2006/12/06 Javascript
js获取控件位置以及不同浏览器中的差别介绍
2013/08/08 Javascript
Jquery选中或取消radio示例
2013/09/29 Javascript
FireBug 调试JS入门教程 如何调试JS
2013/12/23 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
canvas红包照片实例分享
2017/02/28 Javascript
jQuery插件HighCharts实现的2D堆条状图效果示例【附demo源码下载】
2017/03/14 Javascript
angularjs实现table增加tr的方法
2018/02/27 Javascript
在angular 6中使用 less 的实例代码
2018/05/13 Javascript
Angular动态绑定样式及改变UI框架样式的方法小结
2018/09/03 Javascript
vue在自定义组件中使用v-model进行数据绑定的方法
2019/03/25 Javascript
Python与shell的3种交互方式介绍
2015/04/11 Python
Python 正则表达式实现计算器功能
2017/04/29 Python
Django 跨域请求处理的示例代码
2018/05/02 Python
python生成密码字典的方法
2018/07/06 Python
Python使用random模块生成随机数操作实例详解
2019/09/17 Python
Python 类的私有属性和私有方法实例分析
2019/09/29 Python
在Python中预先初始化列表内容和长度的实现
2019/11/28 Python
浅谈Python 钉钉报警必备知识系统讲解
2020/08/17 Python
Sublime Text3最新激活注册码分享适用2020最新版 亲测可用
2020/11/12 Python
NICKIS.com荷兰:设计师儿童时装
2020/01/08 全球购物
网络、C以及其他硬件方面的面试题
2016/08/23 面试题
实现向右循环移位
2014/07/31 面试题
会计学自荐信
2014/06/03 职场文书
慈善捐赠倡议书
2014/08/30 职场文书
北京离婚协议书范文2014
2014/09/29 职场文书
个人汇报材料范文
2014/12/30 职场文书
幼儿教师师德师风自我评价
2015/03/05 职场文书
党员转正党支部意见
2015/06/02 职场文书
风雨哈佛路观后感
2015/06/03 职场文书
导游词之烟台威海蓬莱
2019/11/14 职场文书
详解在SQLPlus中实现上下键翻查历史命令的功能
2022/03/18 SQL Server