I want to execute an Oracle PL/SQL statement via cx_oracle in Python. Code looks like this:
db = cx_Oracle.connect(user, pass, dsn_tns)
cursor = db.cursor()
You can bind input and output variables to the block like so.
import cx_Oracle
SQL_BLOCK = '''
DECLARE
v_first NUMBER;
v_second NUMBER;
v_result NUMBER;
BEGIN
v_first := :i_first; -- (1)
v_second := :i_second; -- (1)
v_result := (v_first + v_second) / 2;
:o_result := v_result; -- (1)
END;
'''
with cx_Oracle.connect('hr/hr@xe') as db:
cur = db.cursor()
o_result = cur.var(cx_Oracle.NUMBER) # (2)
cur.execute(SQL_BLOCK, i_first=23, i_second=55, o_result=o_result) # (3)
res = o_result.getvalue() # (4)
print('Average of 23 and 55 is: {}'.format(res))
The script should print
Average of 23 and 55 is: 39.0