Выполнение хранимой процедуры с параметром m_ref_cursor в R - PullRequest
1 голос
/ 05 июня 2019

Я пытаюсь выполнить хранимую процедуру с параметром REF CURSOR.

Моя хранимая процедура выглядит примерно так:

PROCEDURE procName(p_in_str IN VARCHAR2, p_out_result IN OUT SYS_REFCURSOR) ...

И я опираюсь на этот пост, чтобы попытатьсявыполнить его из R:

После многих ошибок я достиг точки, когда я не могу двигаться вперед.Это мои текущие подходы

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

...