sql >> Databasteknik >  >> RDS >> Oracle

Hur ringer man upp Oracle Stored Procedure i Python?

I det här blogginlägget ger jag ett exempel på hur man kallar Oracle lagrad procedur i Python. Exempel inkluderar anrop av en lagrad procedur med IN-OUT-parametrar. Jag använder cx_Oracle library callproc funktion för att anropa Oracle-proceduren. För att du ska kunna testa detta exempel i ditt system tillhandahåller jag även källkoden för Oracle-databastabellen och den lagrade proceduren.

Ladda ned Oracle-källtabeller används i detta exempel från följande länk Ladda ner Scott Schema script.

Oracle Stored Procedure Exempel med IN-OUT-parametrar

Följande Oracle-procedur tar de två parametrarna, (1) i_empno som IN-parameter anställdsnummer och (2) o_total_salary som OUT-parameter för att returnera den anställdes totala lön.

CREATE OR REPLACE PROCEDURE get_total_sal (i_empno IN emp.empno%TYPE,
o_total_salary OUT NUMBER)
IS
CURSOR c_emp (p_empno emp.empno%TYPE)
IS
SELECT sal, comm
FROM emp
WHERE empno = p_empno;

v_sal NUMBER;
v_comm NUMBER;
BEGIN
OPEN c_emp (i_empno);

FETCH c_emp
INTO v_sal, v_comm;

CLOSE c_emp;

o_total_salary := (v_sal + NVL (v_comm, 0));
END get_total_sal;

Nu ska vi anropa denna procedur i Python med hjälp av cx_Oracle callproc funktion.

CX_Oracle callproc-syntax

cursor.callproc('procedure_name', [argument_1, argument_2, ...])

Call Oracle Stored Procedure i Python med IN-OUT-parametrar Exempel

Följande Python-program kommer att anropa compute_sal-proceduren och kommer att skriva ut den returnerade totala lönen på skärmen.

import cx_Oracle

con = cx_Oracle.connect('scott/tiger@localhost/orcl')

cur = con.cursor()
n_empno = 7788
n_total_salary = cur.var(cx_Oracle.NUMBER)
cur.callproc('compute_sal', [n_empno, n_total_salary])

print ("Total salary for the employee: ", n_empno, "is: ", n_total_salary.getvalue())
cur.close()
con.close()

Utdata

Total salary for the employee:  7788 is:  3080.0

Se även:

  • Installera cx_Oracle för Python på Windows
  1. SQLalchemy begår inte ändringar vid inställning av roll

  2. Skillnad mellan språk sql och språk plpgsql i PostgreSQL-funktioner

  3. MYSQL OR vs IN prestanda

  4. PostgreSQL rad till kolumner