用python读取oracle函数返回值

在oracle中创建一个函数,本来是想返回一个index table的,没有成功。想到文本也可以传输信息,就突然来了灵感,把返回值设置文本格式。

考虑到返回数据量可能会很大,varchar2类型长度吃紧,于是将返回值类型设置为clob。

我是用scott用户的测试表,这个是函数定义情况:

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中的代码:

import cx_Oracle as ora;
con = ora.connect(‘scott/[email protected]‘);
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
时间: 2025-01-15 19:27:54

用python读取oracle函数返回值的相关文章

python学习之函数返回值

python中函数返回值的方式有2种: 1.return语句 说明:return语句执行完后,函数后续的代码将不会被执行 2.yield语句 说明:yield语句返回的是一个迭代器对象,可以通过next(a)(a为函数的实例对象)来调用. yield后面的代码照样不会被执行. >>> def a(): ... for i in range(1,3): ... yield i ... print('over') ... >>> a() <generator obje

python之路——函数返回值return

return关键字 没有返回值 返回一个值 返回多个值 1.没有返回值 ----不写return的情况下,会默认返回一个None:下面的函数,就没有写return,这就是没有返回值的一种情况. #函数定义 def mylen(): """计算s1的长度""" s1 = "hello world" length = 0 for i in s1: length = length+1 print(length) #函数调用 str_

Python函数中的变量和函数返回值

1.函数的变量 局部变量和全局变量: Python中的任何变量都有特定的作用域 在函数中定义的变量一般只能在该函数内部使用,这些只能在程序的特定部分使用的变量我们称之为局部变量 在一个文件顶部定义的变量可以供文件中的任何函数调用,这些可以为整个程序所使用的变量称为全局变量. def fun(): x=100 print x fun() x = 100 def fun(): global x   //声明 x +=1 print x fun() print x 外部变量被改: x = 100 de

Python函数中的变量和函数返回值的使用实例

1.函数的变量 局部变量和全局变量: Python中的任何变量都有特定的作用域 在函数中定义的变量一般只能在该函数内部使用,这些只能在程序的特定部分使用的变量我们称之为局部变量 在一个文件顶部定义的变量可以供文件中的任何函数调用,这些可以为整个程序所使用的变量称为全局变量. def fun(): x=100 print x fun() x = 100 def fun(): global x //声明 x +=1 print x fun() print x 外部变量被改: x = 100 def

引用作为函数返回值的一点思考

本篇文章的关注点是引用作为函数返回值,网上类似很多,具体可参考引用作为函数返回值的优缺点.这里,我想写下自己的想法. 在C++中,引用变量必须要初始化,否则会有编译错误.这里指的初始化,一般变量赋值初始化.如果是通过函数返回值来初始化,那就要好好考虑下. 以获取字体信息场景为例子:在启动时,通过读取字体配置文件来获得字体信息,保存在m_vLogFont.外部通过GetFont接口函数来获得字体信息,每一个Id对于一种字体,接口函数大致实现如下: const LOGFONT& GetFont(in

chapter4.2、函数返回值

函数返回值,作用域 Python函数使用return语句返回"返回值" 函数一定有返回值.没有return 语句,隐式调用return None 一个函数可以存在多个return语句,但只执行一条,如果一条return都没有执行,就隐式调用return None 如果有必要,可以调用return None,可以简写为return return直接返回函数,return之后的语句不再执行其他语句不再执行 return 是函数结束标志,返回值只有一个,只返回一次, return的内容要包装

以函数返回值做参数时,函数调用的顺序

环境:vs2013 在下面的代码中 1 //类似于下面的代码 2 3 foo(char*,char*,char*); 4 5 char* str ="A#B#C"; 6 7 foo(strtok(str,"#"),strtok(NULL,"#"),strtok(NULL,"#")); 预计让函数foo得到("A","B","C")的参数,程序编译的时候没问题,但是运行

函数指针与指针函数返回值的区别

指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某一类型的指针定义: 类型标识符 *函数名(参数表)eg: int *f(x,y);函数指针是指向函数的指针变量,即本质是一个指针变量.int (*f) (int x); /* 声明一个函数指针 */ f=func; /* 将func函数的首地址赋给指针f */ 函数指针与指针函数返回值的区别,码迷,mamicode.com

对象做函数参数和函数返回值时,调用复制构造函数,构造函数,析构函数的情况

// 对象做函数参数和返回值.cpp : 定义控制台应用程序的入口点.//exit(0)表示正常退出程序,exit(0)表示异常退出 //在调用input时,编译器用对象A去创建了形参对象temp,调用了复制构造函数,对象A中的数据复制给了对象temp// 在input函数中,执行temp.set(s),为对象temp中数据成员str申请了动态储存空间,并设置了输入的字符串//并没有改变实参A中的数据成员str的储存空间,故在执行语句A.show()后输出的字符串并没有改变.在函数调用结束后 /