用python读取oracle函数返回值
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,在oracle中创建一个函数,本来是想返回一个index table的,没有成功。想到文本也可以传输信息,就突然来了灵感,把返回值设置文本格式。考虑到返回数据量可能会很大,varchar2类型长度吃紧
千家信息网最后更新 2026年11月01日用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安全错误
数据库的锁怎样保障安全
中智农互联网科技
互联网科技产业
关于新基建和互联网科技
喔噻互联网科技
远信互联网科技
广州善班互联网科技
玖二柒互联网科技公司待遇
济南华为互联网科技产业总部基地
北京华百购互联网科技有限公司
互联网公司科技股
知域互联网科技有限公司大骗子
江阴互联网智能科技产品进口
互联网科技商业
搜狐科技互联网
银川新华互联网科技学校联系电话
四川慕妮娅互联网科技有限公司
朱啸虎曾投资哪些互联网科技企业
互联网安防科技感
东营紫格互联网科技
如何强化互联网金融科技
互联网科技公司华为
中国互联网科技股
互联网科技有限公司图片
互联网最新的科技有限公司
互联网科技战争
互联网科技公司电话
互联网金融和金融科技
内蒙古九一互联网科技
佛山市拉法互联网科技有限公司
无锡工业互联网科技有限公司