サンプルコードで使用するパッケージのソースhttp://ruby-oci8.rubyforge.org/ja/api_OCI8.htmlCREATE OR REPLACE PACKAGE MIS_TEST01 IS PROCEDURE my_proc(a1 IN number, a2 IN varchar2, b1 OUT number, b2 OUT varchar2 ); END; / CREATE OR REPLACE PACKAGE BODY MIS_TEST01 IS PROCEDURE my_proc(a1 IN number, a2 IN varchar2, b1 OUT number, b2 OUT varchar2 ) IS BEGIN b1 := a1 * 2; b2 := UPPER(a2); END; END; /明示的に名前でもってパラメータをバインドする。# use OCI8::Cursor#bind_param and OCI8::Cursor#exec sql = 'begin MIS_TEST01.my_proc(:a1, :a2, :b1, :b2); end;' cursor = conn.parse(sql) cursor.bind_param(':a1', 123) cursor.bind_param(':a2', 'abc') # Fixnum としてバインド。値は NULL cursor.bind_param(':b1', nil, Fixnum) # String としてバインド。文字列の最大長は 20 で、値は NULL。 cursor.bind_param(':b2', nil, String, 20) cursor.exec() # パラメータを名前でバインドしたときは名前を使用。 p cursor[':b1'] # => 246 p cursor[':b2'] # => ABC明示的に位置でもってパラメータをバインドする。# use OCI8::Cursor#bind_param and OCI8::Cursor#exec sql = 'begin MIS_TEST01.my_proc(:a1, :a2, :b1, :b2); end;' cursor = conn.parse(sql) cursor.bind_param(1, 123) cursor.bind_param(2, 'abc') cursor.bind_param(3, nil, Fixnum) cursor.bind_param(4, nil, String, 20) cursor.exec() # パラメータを位置でバインドしたときは位置を使用。 p cursor[3] # => 246 p cursor[4] # => "ABC"暗黙的にパラメータをバインドする。# use OCI8::Cursor#exec with bind parameters. sql = 'begin MIS_TEST01.my_proc(:a1, :a2, :b1, :b2); end;' cursor = conn.parse(sql) cursor.exec(123, 'abc', [nil, Fixnum], [nil, String, 20]) # 1番目の引数は1番目の位置のバインド値となる。 # 2番目は2番目のバインド位置....。 # 値が配列のときは、配列の最初の要素がバインドする値で、 # 2番目の要素が型、3番目の要素は最大長となる。 # パラメータは位置でもってバインドされる。 p cursor[3] # => 246 p cursor[4] # => "ABC"実行してバインドパラメータの値を一回で取得する。# OCI8#exec with bind parameters # 実行する SQL が PL/SQL ブロックの場合は、パラメータすべての値を配列で戻す。 sql = 'begin MIS_TEST01.my_proc(:a1, :a2, :b1, :b2); end;' params = conn.exec( sql, 123, 'abc', [nil, Fixnum], [nil, String, 20] ) p params[0] # => 123 p params[1] # => "abc" p params[2] # => 246 p params[3] # => "ABC"
2007/07/05
Ruby with OCI8
訂閱:
張貼留言 (Atom)
沒有留言:
張貼留言