??????oracle?д?????????????????????????index table?????г??????????????????????????????У???????????????????
??????????????????????????varchar2?????????????????????????????clob??
??????????scott?????????emp???????????????????
1 create or replace function test_query_func(dept varchar2)
2 return clob
3 is
4        type test_record is record
5        (rec_empno       emp.empno%type??
6         rec_ename       emp.ename%type??
7         rec_job            emp.job%type??
8         rec_sal            emp.sal%type);
9        type test_query_arr is table of test_record index by binary_integer;
10        cursor cur is select empno?? ename?? job?? sal from emp where deptno = dept;
11        test_query test_query_arr;
12        i integer := 0;
13  ss  varchar2(200) := '';
14  res clob := '[';
15 begin
16        for c in cur loop
17            i := i + 1;
18            test_query(i) := c;
19        end loop;
20        for q in 1..test_query.count loop
21            ss := '(''' || test_query(q).rec_empno || '''?? ''' || test_query(q).rec_ename ||  '''?? ''' || test_query(q).rec_job || '''?? ''' ||  test_query(q).rec_sal || ''')';
22  if q < test_query.count then
23     ss := ss || '??';
24  end if;
25  res := res || ss;
26        end loop;
27  res := res || ']';
28  return res;
29 end;
??????????pl/sql developer???????????????????
????1 begin
????2    dbms_output.put_line(test_query_func('30'));
????3 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??
1 import cx_Oracle as ora;
2 con = ora.connect('scott/scott@oradb');
3 cur = con.cursor();
4 cur.execute('select test_query_func(30) from dual');
5 res = cur.fetchall()[0][0].read();
6 cur.close();
7 con.close();
8 data = eval(res);
9 import pandas as pd;
10 df = pd.DataFrame(data?? columns = ['empno'?? 'ename'?? 'job'?? 'sal']);
11 print(df)
????????oracle?к???????????????????DataFrame???????