Ниже у меня есть хранимая процедура, созданная в 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
?