Как правильно вызвать хранимую процедуру SQL, используя библиотеку DBI R? - PullRequest
0 голосов
/ 22 мая 2018

Ниже у меня есть хранимая процедура, созданная в Oracle.Я вырезал большую часть среднего и просто сосредоточился на вводе и выводе:

CREATE OR replace PROCEDURE datatrans_n.dc_cpt_patient_new
           -- Declaring input and output.
           ( p_study_id               IN patient.study_id%TYPE,
             p_subject                IN patient.subject%TYPE,
             p_subject_dict           IN patient.subject_dict%TYPE,
             p_site                   IN patient.site%TYPE,
             p_cancer_type            IN patient.cancer_type%TYPE,
             p_comments               IN patient.comments%TYPE,
             ps_patient_status_name   IN patient_status.patient_status%TYPE,
             pml_link_date            IN NVARCHAR2,
             status                   OUT NUMBER ) ...
  -- Returning 1 if successful.
  status := SQL%rowcount;
  -- Committing.
  COMMIT;
ELSE
  -- Returning 0 if unsuccessful.
  status := 0;
END IF;
-- Raising exceptions.
EXCEPTION
WHEN no_data_found THEN
  NULL;
WHEN OTHERS THEN
  ROLLBACK;
  RAISE;
END dc_cpt_patient_new;
/ 

И я пытаюсь вызвать эту хранимую процедуру в R с использованием библиотеки DBI, например, так:

# Creating SQL.
query <- DBI::sqlInterpolate(
  conn = con,
  sql = "DECLARE STATUS NUMBER; 
         BEGIN 
               DATATRANS_N.DC_CPT_PATIENT_NEW(?study_id, ?subject, ?subject_dict, ?site, 
                                              ?cancer_type, ?comments, ?patient_status, 
                                              ?icf_date, STATUS); 
         END;",
  .dots = hold_patient[c("study_id", "subject", "subject_dict", "site", 
                         "cancer_type", "comments", "patient_status", "icf_date")]
)

# Executing SQL.
return <- DBI::dbExecute(con, query)

Проблема в том, что при выполнении моего SQL-запроса я неправильно фиксирую значение STATUS в моей хранимой процедуре в моей переменной R return.Я проверил это, отредактировав строку Status := SQL%ROWCOUNT; в Status := 3; --SQL%ROWCOUNT;, и оба раза return имеет значение 1.

Как я могу вызвать эту хранимую процедуру, чтобы я мог захватить значениеSTATUS в return?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...