Python and Oracle
Simple IN Parameterim
export cx_Oraclev_conn = cx_Oracle.connect("scott/tiger@oracledb")
v_cur = v_conn.cursor()
arg_1 = v_cur.var(cx_Oracle.NUMBER)
arg_2 = v_cur.var(cx_Oracle.NUMBER)
result = v_cur.execute("""BEGIN:
p_Value := 20;
f_test(:p_Value,:p_value_o);
END;""",p_Value = arg_1, p_Value_o = arg_2)
print "Hasil IN :", arg_1.getvalue()
print "Hasil OUT :", arg_2.getvalue()
Simple IN / OUT Parameter
import cx_Oracle
v_conn = cx_Oracle.connect("scott/tiger@oracledb")
v_cur = v_conn.cursor()
# make variable input
v_cur.setinputsizes(arg_in = cx_Oracle.NUMBER)
v_input = raw_input("Masukan Bilangan ? ")
# make variable out
arg_out = v_cur.var(cx_Oracle.NUMBER)
result = v_cur.execute("""BEGIN
f_test(:arg_in, :p_value_o);
END;""",
arg_in = v_input, #place variable here(text/inputan)
p_Value_o = arg_out)
print "Hasil Input : ", v_input
print "Hasil Out : ", arg_out.getvalue()
Simple Calling Function
import cx_Oracle
v_conn = cx_Oracle.connect("scott/tiger@oracledb")
v_cur = v_conn.cursor()
# make variable input
v_cur.setinputsizes(arg_in = cx_Oracle.NUMBER)
v_input = raw_input("Masukan Bilangan ? ")
# make variable out
arg_out = v_cur.var(cx_Oracle.NUMBER)
result = v_cur.execute("""BEGIN
:p_value_o := f_test1(:arg_in);
END;""",
arg_in = v_input, #place variable here(text/inputan)
p_Value_o = arg_out)
print "Hasil Input : ", v_input
print "Hasil Out : ", arg_out.getvalue()
Simple Bind Cursor
import cx_Oracle
v_conn = cx_Oracle.connect("scott/tiger@oracledb")
v_cur = v_conn.cursor()
v_cur.arraysize = 50
# make variable input
v_cur.setinputsizes(arg_in_1 = cx_Oracle.NUMBER)
v_cur.setinputsizes(arg_in_2 = cx_Oracle.NUMBER)
v_input_1 = raw_input("From Empno ? ")
v_input_2 = raw_input("To Empno ? ")
v_cur.execute("""
begin
open :p_Cursor for select empno, ename from emp
where empno between :arg_in_1 and :arg_in_2;
end;""",
arg_in_1 = v_input_1,
arg_in_2 = v_input_2,
p_Cursor = v_cur)
v_row = v_cur.fetchone()
while v_row != None:
print str(v_row[0]) + " : " +str(v_row[1])
v_row = v_cur.fetchone()
Simple Refcursor
CREATE OR REPLACE package pkg_TestOutCursors as
type udt_RefCursor is ref cursor;
procedure TestOutCursor (
a_MaxIntValue number,
a_Cursor out udt_RefCursor
);
end;
/
CREATE OR REPLACE package body pkg_TestOutCursors as
procedure TestOutCursor (
a_MaxIntValue number,
a_Cursor out udt_RefCursor
) is
begin
open a_Cursor for
select
IntCol,
StringCol
from TestStrings
where IntCol <= a_MaxIntValue
order by IntCol;
end;
end;
/
import cx_Oracle
v_conn = cx_Oracle.connect("cx_oracle/dev@oracledb")
v_cur = v_conn.cursor()
v_cur.arraysize = 50
# make variable input
v_input_1 = raw_input("From Empno ? ")
v_cur.callproc("pkg_TestOutCursors.TestOutCursor", (v_input_1, v_cur))
v_row = v_cur.fetchone()
while v_row != None:
print str(v_row[0]) + " : " +str(v_row[1])
v_row = v_cur.fetchone()






