Я пытаюсь выполнить хранимую процедуру с параметром 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, оператор, данные = данные, предварительная выборка = предварительная выборка: данные привязки не соответствуют спецификации привязки