【发布时间】:2014-06-27 15:58:59
【问题描述】:
我创建了一个包含两个输入的包,如下所示,但是我无法测试该包以查看它是否有效。我想调用该过程并测试它在输入 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;
【问题讨论】:
-
一个包没有输入。您似乎已经创建了一个包含两个公共函数和一个公共过程的包。该过程有两个输入参数和 5 个输出参数。您是在问如何从 SQL*Plus 命令行调用该过程?
-
是的,我想从 Oracle Apex SQL 命令中调用该过程,但不是从 SQL*Plus 中调用。
-
“Oracle Apex SQL 命令”是什么意思?您是在谈论 APEX 构建器环境中的交互式 SQL 命令窗口吗?或者您是否尝试在实际 APEX 应用程序的上下文中做某事?
-
在交互式 SQL 命令窗口中。我基本上想提供两个输入值以获得正确的输出,我尝试了一些查询,但它们似乎都不起作用。我不确定我是否在程序中正确设置了输出。
标签: oracle plsql package oracle-apex procedure