Вызов процедуры в вершине оракула
Я создал пакет с двумя входами, как показано ниже, однако у меня возникли проблемы с тестированием пакета, чтобы увидеть, работает ли он. Я хочу вызвать процедуру и проверить, работает ли она со значениями 1 и 1000. Может ли кто-нибудь предложить способ тестирования в Oracle Apex, пожалуйста? Я не уверен, правильно ли я вывожу вывод внутри пакета, тестирую ли я код вне процедуры и упаковываю ли он нормально. Сейчас я просто хочу проверить это в SQL-команде.
пакет
CREATE OR REPLACE PACKAGE pl_work_allocation_pkg
IS
PROCEDURE pl_work_allocation_pp(lv_crime_id IN NUMBER,
lv_emp_no IN NUMBER,
lv_end_date OUT DATE,
lv_work_desc OUT VARCHAR,
lv_police_officer OUT NUMBER,
lv_work_days OUT NUMBER,
lv_status OUT VARCHAR);
FUNCTION GET_WORK_DAYS1(p_work_end_date IN DATE)
RETURN NUMBER;
FUNCTION OVERDUE_DAYS1(p_work_end_date IN DATE)
RETURN VARCHAR;
END;
Корпус
CREATE OR REPLACE PACKAGE BODY pl_work_allocation_pkg
IS
FUNCTION GET_WORK_DAYS1(p_work_end_date IN DATE) RETURN NUMBER
IS
lv_work_days NUMBER(5);
BEGIN
lv_work_days := ROUND(p_work_end_date - SYSDATE);
RETURN lv_work_days;
END get_work_days1;
FUNCTION OVERDUE_DAYS1(p_work_end_date IN DATE) RETURN VARCHAR
IS
lv_status VARCHAR(10);
lv_work_days NUMBER(5);
BEGIN
lv_work_days := ROUND(p_work_end_date - SYSDATE);
IF lv_work_days > 1
THEN lv_status := 'DUE';
ELSIF lv_work_days < 1
THEN lv_status := 'OVERDUE';
END IF;
RETURN lv_status;
END overdue_days1;
PROCEDURE pl_work_allocation_pp(lv_crime_id IN NUMBER,
lv_emp_no IN NUMBER,
lv_end_date OUT DATE,
lv_work_desc OUT VARCHAR,
lv_police_officer OUT NUMBER,
lv_work_days OUT NUMBER,
lv_status OUT VARCHAR)
IS
BEGIN
SELECT
work_desc,
lead_police_officer,
work_end_date
INTO lv_work_desc, lv_police_officer, lv_end_date
FROM pl_work_allocation
WHERE s_reported_crime_id = lv_crime_id
AND d_emp_id = lv_emp_no;
lv_work_days := GET_WORK_DAYS(lv_end_date);
lv_status := OVERDUE_DAYS(lv_end_date);
dbms_output.PUT_LINE(lv_emp_no || ' is ' || lv_status || ' on case no: ' ||
lv_crime_id || ' by ' || lv_work_days || '. Report to ' || lv_police_officer ||
' for ' || lv_work_desc || ' details');
END pl_work_allocation_pp;
END;
1 ответ
Решение
Звучит так, как ты хочешь
DECLARE
lv_end_date date;
-- Guessing at the length. You'll be better served using anchored
-- types everywhere
lv_work_desc varchar2(100);
lv_police_officer number;
lv_work_days number;
lv_staus varchar2(10);
BEGIN
PL_WORK_ALLOCATION_PKG.PL_WORK_ALLOCATION_PP(
<<first parameter>>,
<<second parameter>>,
LV_END_DATE,
LV_WORK_DESC,
LV_POLICE_OFFICER,
LV_WORK_DAYS,
LV_STATUS );
END;
Конечно, вы, вероятно, хотите что-то сделать со значениями, которые возвращаются из вашего вызова.