Ruby OCI8-将可选参数绑定到Oracle存储过程

Ruby OCI8-将可选参数绑定到Oracle存储过程,ruby,oracle,plsql,oci8,Ruby,Oracle,Plsql,Oci8,假设我有一个具有以下签名的Oracle存储过程: CREATE OR REPLACE PROCEDURE "FOO" (p_1 VARCHAR(100), p_2 VARCHAR(100), p_opt_1 VARCHAR(100) default null, p_opt_2 VARC

假设我有一个具有以下签名的Oracle存储过程:

CREATE OR REPLACE PROCEDURE "FOO" (p_1  VARCHAR(100),
                                   p_2  VARCHAR(100),
                                   p_opt_1 VARCHAR(100) default null,
                                   p_opt_2 VARCHAR(100) default null) IS
...
如何仅绑定Ruby脚本中的第二个可选参数? 使用PL/SQL,它类似于:

BEGIN
  FOO("p1 val", "p2 val", p_opt_2 => "p2 opt val");
END;
但是我还没有找到关于如何使用OCI8执行类似操作的信息,所以现在我正在将nil值绑定到
p_opt_1
,但它闻起来很难闻:

    begin
      cursor = conn.parse('BEGIN foo(:p_1, :p_2, :p_opt1, p_opt2); END;')
      cursor.bind_param(':p_1', 'some string', String)
      cursor.bind_param(':p_2', 'some other string', String)
      cursor.bind_param(':p_opt_1', nil, String)
      cursor.bind_param(':p_opt2_2', 'some value', String)
      cursor.exec
   rescue Exception => e
....
我敢肯定一定有更好的办法。有人能给我指一下吗

非常感谢, 米哈尔

更简单地说:

conn.exec('BEGIN foo(:p_1, :p_2, p_opt_2 => :p_opt_2); END;',
          'some string', 'some other string', 'some value')
conn.exec('BEGIN foo(:p_1, :p_2, p_opt_2 => :p_opt_2); END;',
          'some string', 'some other string', 'some value')