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 相关文章推荐
使用Mixin设计模式进行Python编程的方法讲解
Jun 21 Python
解决python 自动安装缺少模块的问题
Oct 22 Python
python学习之hook钩子的原理和使用
Oct 25 Python
对Python协程之异步同步的区别详解
Feb 19 Python
python3.6实现学生信息管理系统
Feb 21 Python
python openvc 裁剪、剪切图片 提取图片的行和列
Sep 19 Python
python 利用turtle库绘制笑脸和哭脸的例子
Nov 23 Python
python单例设计模式实现解析
Jan 07 Python
python手写均值滤波
Feb 19 Python
python实现跨excel sheet复制代码实例
Mar 03 Python
Django 如何使用日期时间选择器规范用户的时间输入示例代码详解
May 22 Python
解决python3.x安装numpy成功但import出错的问题
Nov 17 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
关于手调机和数调机的选择
2021/03/02 无线电
echo, print, printf 和 sprintf 区别
2006/12/06 PHP
php 什么是PEAR?
2009/03/19 PHP
PHP 防恶意刷新实现代码
2010/05/16 PHP
浅析php中抽象类和接口的概念以及区别
2013/06/27 PHP
PHP连接SQLServer2005的方法
2015/01/27 PHP
nginx下安装php7+php5
2016/07/31 PHP
php简单随机字符串生成方法示例
2017/04/19 PHP
javascript编程起步(第二课)
2007/02/27 Javascript
ExtJS 2.0实用简明教程 之获得ExtJS
2009/04/29 Javascript
基于jquery的仿百度搜索框效果代码
2011/04/11 Javascript
转换字符串为json对象的方法详解
2013/11/29 Javascript
jquery easyui 结合jsp简单展现table数据示例
2014/04/18 Javascript
利用React-router+Webpack快速构建react程序
2016/10/27 Javascript
JS基于for语句编写的九九乘法表示例
2018/01/04 Javascript
Electron + vue 打包桌面操作流程详解
2019/06/24 Javascript
使用react context 实现vue插槽slot功能
2019/07/18 Javascript
JavaScript异步操作的几种常见处理方法实例总结
2020/05/11 Javascript
JS获取当前时间戳方法解析
2020/08/29 Javascript
django配置连接数据库及原生sql语句的使用方法
2019/03/03 Python
Python openpyxl 插入折线图实例
2020/04/17 Python
pyMySQL SQL语句传参问题,单个参数或多个参数说明
2020/06/06 Python
python中pathlib模块的基本用法与总结
2020/08/17 Python
美国著名首饰网站:BaubleBar
2016/08/29 全球购物
施华洛世奇日本官网:SWAROVSKI日本
2018/05/04 全球购物
美国最大的存储市场:SpareFoot
2018/07/23 全球购物
阿迪达斯香港官网:adidas香港
2019/11/09 全球购物
澳大利亚手袋、珠宝和在线时尚精品店:The Way
2019/12/21 全球购物
英国在线滑雪板和冲浪商店:The Board Basement
2020/01/11 全球购物
物理教育专业毕业生推荐信
2013/11/03 职场文书
秘书岗位职责
2013/11/18 职场文书
幼儿园秋游感想
2014/03/12 职场文书
《将心比心》教学反思
2014/04/08 职场文书
离婚协议书范本样本
2014/08/19 职场文书
清洁工工作总结
2015/08/11 职场文书
《植物妈妈有办法》教学反思
2016/02/23 职场文书