我有一个像这样的oracle函数:
CREATE OR REPLACE FUNCTION MY_FUNCTION (MY_ID IN VARCHAR2)
RETURN vendedor%rowtype AS
res vendedor%rowtype;
BEGIN
select * into res
from vendedor
where id = MY_ID;
return res;
END MY_FUNCTION;
我想使用oci8 gem
从我的ruby代码中调用此函数。这是我的红宝石代码:
connectString = ENV['DB_CONNECTION']
conn = OCI8.new(connectString)
cursor = conn.parse ('begin :ret := MY_FUNCTION(:MY_ID); end;')
cursor.bind_param(':MY_ID', '123', String)
cursor.bind_param(':ret', nil, OCI8::RAW) # This is the question
cursor.exec()
result = cursor[':ret']
cursor.close
conn.logoff
:ret
变量的参数绑定类型是什么?
要执行此代码,请抛出此错误:
ORA-06550: line 1, column 15: PLS-00382: expression is of wrong type ORA-06550: line 1,
column 7: PL/SQL: Statement ignored
答案 0 :(得分:1)
替换cursor.bind_param(':ret', nil, OCI8::RAW)
与
cursor.bind_param(':ret', OCI8::Cursor)
可以解决问题,
但是您需要将函数转换为
CREATE OR REPLACE FUNCTION MY_FUNCTION (MY_ID IN VARCHAR2) RETURN sys_refcursor AS
res sys_refcursor;
BEGIN
open res for
select *
from vendedor
where id = MY_ID;
return res;
END MY_FUNCTION;
准备返回sys_refcursor
类型
要获得红宝石代码中的结果:
result = cursor[':ret']
while r = result.fetch_hash
retFinal = r
end
retFinal变量具有光标的最后结果