用python读取oracle函数返回值
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,在oracle中创建一个函数,本来是想返回一个index table的,没有成功。想到文本也可以传输信息,就突然来了灵感,把返回值设置文本格式。考虑到返回数据量可能会很大,varchar2类型长度吃紧
千家信息网最后更新 2025年11月07日用python读取oracle函数返回值
在oracle中创建一个函数,本来是想返回一个index table的,没有成功。想到文本也可以传输信息,就突然来了灵感,把返回值设置文本格式。
考虑到返回数据量可能会很大,varchar2类型长度吃紧,于是将返回值类型设置为clob。
我是用scott用户的测试表,这个是函数定义情况:
create or replace function test_query_func(dept varchar2)return clobis 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中的代码:
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对象了:
| empno | ename | job | sal | |
|---|---|---|---|---|
| 0 | 7499 | ALLEN | SALESMAN | 1600 |
| 1 | 7521 | WARD | SALESMAN | 1250 |
| 2 | 7654 | MARTIN | SALESMAN | 1250 |
| 3 | 7698 | BLAKE | MANAGER | 2850 |
| 4 | 7844 | TURNER | SALESMAN | 1500 |
| 5 | 7900 | JAMES | CLERK | 950 |
函数
文本
类型
测试
吃紧
很大
成功
代码
信息
元素
字符
字符串
对象
情况
数据
样式
格式
灵感
用户
结果
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
web服务器默认文档
加拿大药品数据库
支付宝 开源 数据库
淘宝网络安全程序员
财新数据库和万德数据库
社交软件分享功能数据库设计
主播粉丝软件开发公司
计算机网络技术专业领军人物
服务器 异步同步
网络安全讨论查找问题隐患
数据库设置变量的值
北京任务态势系统软件开发
ibm服务器有必要双通道吗
博山应用软件开发定制
广东新品服务器租用
连接宽带服务器显示无响应
宜良上门软件开发市场报价
衡阳游戏软件开发收费
网络安全物理传输
数据库 面试
黑暗之魂3服务器为什么登不上
软件开发中过度设计是什么
开展网络安全手抄报比赛
前端调取mysql数据库
网络安全保护是什么
游戏检测软件开发
人文地理工作数据库
服务器安全狗配置开放端口
对大数据时代软件开发
求生之路2最佳服务器掉线