用python读取oracle函数返回值
发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,在oracle中创建一个函数,本来是想返回一个index table的,没有成功。想到文本也可以传输信息,就突然来了灵感,把返回值设置文本格式。考虑到返回数据量可能会很大,varchar2类型长度吃紧
千家信息网最后更新 2024年11月23日用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安全错误
数据库的锁怎样保障安全
互联网行业高科技
海关冬奥会期间网络安全整治
数据库可以存链表吗
上海网络技术开发创新服务
雍唐软件开发有限公司
数据库中索引超过数组界限
数据库分为哪几种
数据库安全保护方案
手机软件开发框架
墨尔本大学校友数据库
软件开发程序员 五险双休
内江管理服务器
江苏推荐的软件开发创新服务
农业信息化技术数据库
不可用于数据库
网络技术服务价格是多少
宿迁工业网络技术供应商家
餐饮软件开发定制鞋
软件开发需要多少年学精通
通信网络安全架构
华夏银行软件开发岗位笔试题
计算机3级网络技术考试报名时间
sql数据库概论
软件开发编程教程
提升网络安全的认识及心得体会
江苏推荐的软件开发创新服务
领导到科技互联网部调研
2021山东省单招网络技术试题
考拉快收服务器故障
操作sql数据库实例