我正在尝试使用一个REF CURSOR
参数执行存储过程。
我的存储过程类似于:
PROCEDURE procName(p_in_str IN VARCHAR2, p_out_result IN OUT SYS_REFCURSOR) ...
我基于这些帖子尝试从R执行它:
在经历许多错误之后,我到达了无法前进的地步。这是我目前的方法
尝试1
# Not error but not return data
temp_output1 <- data.frame(p_in_str = "My string", stringsAsFactors = FALSE)
attr(temp_output1$p_in_str, "ora.parameter_name") <- "p_in_str";
attr(temp_output1$p_in_str, "ora.parameter_mode") <- "IN";
rs <- oracleProc(con, "DECLARE c SYS_REFCURSOR;
BEGIN
procname(:p_in_str, c);
END;", data = temp_output1)
尝试2
# Wrong number or types of arguments
temp_output2 <-data.frame(p_in_str = "My string",
p_out_ref = "p_out_ref",
stringsAsFactors = FALSE)
attr(temp_output2$p_in_str, "ora.parameter_name") <- "p_in_str";
attr(temp_output2$p_in_str, "ora.parameter_mode") <- "IN";
attr(temp_output2$p_out_ref, "ora.parameter_name") <- "p_out_ref";
attr(temp_output2$p_out_ref, "ora.parameter_mode") <- "IN OUT";
attr(temp_output2$p_out_ref, "ora.type") <- "SYS_REFCURSOR"
rs <- oracleProc(con, "BEGIN
procname(:p_in_str, :p_out_ref);
END;", data = temp_output2)
.oci.oracleProc中的错误(conn,语句,数据=数据,预取=预取,
: ORA-06550:第2行,第18列: PLS-00306:“ procname”调用中参数的数量或类型错误 ORA-06550:第2行,第18列: PL / SQL:语句被忽略
尝试3
# Bind data does not match bind specification
temp_output3 <-data.frame(p_in_str = "My string",
p_out_ref = as.character(NA),
stringsAsFactors = FALSE)
attr(temp_output3$p_in_str, "ora.parameter_name") <- "p_in_str";
attr(temp_output3$p_in_str, "ora.parameter_mode") <- "IN";
attr(temp_output3$p_out_ref, "ora.parameter_name") <- "p_out_ref";
attr(temp_output3$p_out_ref, "ora.parameter_mode") <- "IN OUT";
attr(temp_output3$p_out_ref, "ora.type") <- "m_ref_cursor"
rs <- oracleProc(con, "DECLARE c SYS_REFCURSOR;
BEGIN
procname(:p_in_str, c);
END;", data = temp_output3)
.oci.oracleProc中的错误(conn,语句,数据=数据,预取=预取,: 绑定数据与绑定规范不符