sql >> Base de Datos >  >> RDS >> Oracle

¿Cómo llamar al procedimiento almacenado de Oracle en Python?

En esta publicación de blog, doy un ejemplo para llamar al procedimiento almacenado de Oracle en Python. El ejemplo incluye llamar a un procedimiento almacenado con parámetros IN-OUT. Estoy usando cx_Oracle library callproc función para llamar al procedimiento de Oracle. Para permitirle probar este ejemplo en su sistema, también proporciono el código fuente de la tabla de la base de datos de Oracle y el procedimiento almacenado.

Descargar tablas de origen de Oracle utilizado en este ejemplo desde el siguiente enlace Descargar secuencia de comandos Scott Schema.

Ejemplo de procedimiento almacenado de Oracle con parámetros IN-OUT

El siguiente procedimiento de Oracle tomará los dos parámetros, (1) i_empno como parámetro IN número de empleado y (2) o_total_salary como parámetro OUT para devolver el salario total del empleado.

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;

Ahora llamaremos a este procedimiento en Python usando cx_Oracle callproc función.

CX_Oracle callproc Sintaxis

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

Llamar al procedimiento almacenado de Oracle en Python con el ejemplo de parámetros IN-OUT

El siguiente programa de Python llamará al procedimiento compute_sal e imprimirá el salario total devuelto en la pantalla.

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()

Salida

Total salary for the employee:  7788 is:  3080.0

Ver también:

  • Instalar cx_Oracle para Python en Windows