Python liest den Rückgabewert der Oracle-Funktion

WBOY
Freigeben: 2016-08-04 08:55:41
Original
1553 Leute haben es durchsucht

Das Erstellen einer Funktion in Oracle wollte ursprünglich eine Indextabelle zurückgeben, scheiterte jedoch. Da ich dachte, dass auch Text Informationen übertragen kann, kam mir plötzlich die Inspiration, den Rückgabewert im Textformat festzulegen.
Da die Menge der zurückgegebenen Daten möglicherweise groß ist und die Länge des Typs varchar2 knapp ist, wird der Rückgabewerttyp auf clob festgelegt.
Ich verwende die Testtabelle emp von Scott User. Dies ist die Funktionsdefinition:

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;
Nach dem Login kopieren

Sie können den Rückgabewert dieser Funktion in pl/sql Developer testen:

 begin
 dbms_output.put_line(test_query_func('30'));
 end; 
Nach dem Login kopieren

Ausgabeergebnis:
[('7499', 'ALLEN', 'SALESMAN', '1600'),('7521', 'WARD', 'SALESMAN', '1250'),('7654', 'MARTIN', ' SALESMAN', '1250'),('7698', 'BLAKE', 'MANAGER', '2850'),('7844', 'TURNER', 'SALESMAN', '1500'),('7900', ' JAMES“, „CLERK“, „950“)]
wurde tatsächlich als ein Stil definiert, der Tupel-Unterelemente in einer Liste in Python enthält.
Das Folgende ist der Code in Python. Für die Verwendung von Python zum Herstellen einer Verbindung mit Oracle ist die cx_Oracle-Bibliothek erforderlich:

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)
Nach dem Login kopieren

Auf diese Weise wird der von der Funktion in Oracle zurückgegebene lange Zeichenfolgenwert in ein DataFrame-Objekt umgewandelt:

Das Obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass er für das Studium aller hilfreich sein wird. Ich hoffe auch, dass jeder Script House unterstützt.

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage