В тази публикация в блога давам пример за извикване на съхранена процедура на Oracle в Python. Примерът включва извикване на съхранена процедура с параметри IN-OUT. Използвам cx_Oracle library callproc функция за извикване на процедурата на Oracle. За да ви позволя да тествате този пример във вашата система, предоставям също изходния код на таблицата на базата данни на Oracle и съхранената процедура.
Изтеглете изходните таблици на Oracle използван в този пример от следната връзка Изтеглете скрипт за схема на Scott.
Пример за съхранявана процедура на Oracle с параметри IN-OUT
Следващата процедура на Oracle ще приеме двата параметъра, (1) i_empno като IN параметър номер на служител и (2) o_total_salary като OUT параметър, за да върне общата заплата на служителя.
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;
Сега ще извикаме тази процедура в Python с помощта на cx_Oracle callproc функция.
Синтаксис на CX_Oracle callproc
cursor.callproc('procedure_name', [argument_1, argument_2, ...])
Извикване на Oracle Stored Procedure в Python с пример за IN-OUT параметри
Следната програма на Python ще извика процедурата compute_sal и ще отпечата на екрана върнатата обща заплата.
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()
Изход
Total salary for the employee: 7788 is: 3080.0
Вижте също:
- Инсталирайте cx_Oracle за Python на Windows
-
Най-добра практика за пагинация в Oracle?
-
ATAN() Функция в Oracle
-
Как мога да разположа .NET приложение, което използва ODAC, без да инсталирам целия компонент на потребителя?
-
Първичните ключове и индекси в езика на заявките Hive са възможни или не?
-
Обработване на едновременната заявка, докато продължавате в базата данни на Oracle?