假设我有一个带有以下签名的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
....
我很确定必须有更好的方法来做到这一点。有人能指出我吗?
非常感谢, 米甲
答案 0 :(得分:2)
cursor = conn.parse('BEGIN foo(:p_1, :p_2, p_opt_2 => :p_opt_2); END;')
cursor.bind_param(:p_1, 'some string', String)
cursor.bind_param(:p_2, 'some other string', String)
cursor.bind_param(:p_opt_2, 'some value', String)
cursor.exec
更简单:
conn.exec('BEGIN foo(:p_1, :p_2, p_opt_2 => :p_opt_2); END;',
'some string', 'some other string', 'some value')