python读取oracle函数返回值
作者:ryan1985 发布时间:2022-10-07 23:47:48
标签:oracle,python,函数返回值
在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提供了多个内置模块用于操作日期时间,像calendar,time,datetime。time模块我在之前的文章已经有所介绍,它提
- 前言本文主要给大家介绍了利用django-suit模板在管理后台添加自定义的菜单和自定义的页面、设置访问权限的相关内容,分享出来供大家参考学
- 听名字就知道这个函数是用来求tensor中某个dim的前k大或者前k小的值以及对应的index。用法torch.topk(input, k,
- 现在能用自动化实现的,尽量使用自动化程序去操作,代替人工去操作,更有效率。今天说下用python结合adb命令去实现安卓手机端的通话压力测试
- 用法熟悉 Golang 的朋友对于 json 和 struct 之间的转换一定不陌生,为了将代码中的结构体与 json 数据解耦,通常我们会
- 可视化大屏适配/自适应现状可视化大屏的适配是一个老生常谈的话题了,现在其实不乏一些大佬开源的自适应插件、工具但是我为什么还要重复造轮子呢?因
- 如何用ASP获知机器的网络配置?看看我们的例子:Option Explicit Dim WSHShell&nb
- 场景go 如果频繁地创建、销毁对象(比如 http 服务的 json 对象,日志内容等),会对 GC 造成压力。比如下面的 Log 函数,在
- 在windows+iis服务器上运行asp程序可能会出现数据库无法更新的情况,具体错误信息可能为: 1、Microsoft JET Data
- 概述从今天开始我们将开启一段自然语言处理 (NLP) 的旅程. 自然语言处理可以让来处理, 理解, 以及运用人类的语言, 实现机器语言和人类
- 1. 前言这里还是再总结一下流程控制,和其它语言相比做了一些优化,比如相比c增加了迭代器类型的for循环,switch针对c中容易出问题的地
- 最近心情非常差,而且还没有触底的样子,哎~~~总是会忍不住叹气~~~前些日子在Twitter上叨唠说“不在乎IE8什么时候推出,只在乎IE6
- 我们已经在Python运算中看到Python最基本的数学运算功能。此外,math包补充了更多的函数。当然,如果想要更加高级的数学功能,可以考
- 一、异常处理在程序开发中如果遇到一些 不可预知的错误 或 你懒得做一些判断 时,可以选择用异常处理来做。import requestswhi
- 在日常的工作中,保护数据免受未授权用户的侵犯是系统管理员特别关心的问题。如果你目前用的是MySQL,就可以使用一些方便的功能来保护系统,来大
- global.asa<SCRIPT LANGUAGE="VBScript" RUNAT=&qu
- Python 列表(list):1.序列介绍: 序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引
- 使用cv2对视频进行切割import cv2def clip_video(source_video, target_video, start
- 用户界面和用户体验(UI/UX)是任何产品成败的关键,尤其 Web,Web 是一种公开的,可以被任何人随时随地访问的特殊产品,用户的体验几乎
- 1、Python的数组可分为三种类型:(1) list 普通的链表,初始化后可以通过特定方法动态增加元素。定义方式:arr = [元素](2