【发布时间】:2015-09-29 17:13:18
【问题描述】:
我正在将当前设置为通过 JAVA 运行的 Oracle SQL 查询转换为存储过程。基本上,同一个表中有三个带有日期范围参数的选择语句。
CREATE OR REPLACE PROCEDURE get_users(startdate_in IN DATE,
enddate_in IN DATE)
IS
BEGIN
DELETE FROM temp_table;
INSERT INTO temp_table (id, role, date_used, count_s)
SELECT
EMPLOYEE.CUSTOMERID AS user_id,
'Customer' AS role_,
to_char(EMPLOYEE.STARTEDON, 'MM-YYYY') AS req_month,
count(EMPLOYEE.SUBJECT) AS subj_count
FROM RCUSER.EMPLOYEE EMPLOYEE
WHERE EMPLOYEE.STATEID NOT IN (4, 9, 16, 31, 36)
AND (EMPLOYEE.AGENTID = 0)
AND (EMPLOYEE.STARTEDON >= to_date(startdate_in, 'yyyy-mm-dd'))
AND (EMPLOYEE.STARTEDON < to_date(enddate_in, 'yyyy-mm-dd'))
GROUP BY CUSTOMERID, to_char(EMPLOYEE.STARTEDON, 'MM-YYYY')
UNION
SELECT
EMPLOYEE.PERFORMERID AS user_id,
'Performer' AS role_,
to_char(EMPLOYEE.STARTEDON, 'MM-YYYY') AS req_month,
count(EMPLOYEE.SUBJECT) AS subj_count
FROM RCUSER.EMPLOYEE EMPLOYEE
WHERE EMPLOYEE.PEID IN (1, 4, 6)
AND EMPLOYEE.STATEID NOT IN (4, 9, 16, 31, 36)
AND (EMPLOYEE.AGENTID = 0)
AND (EMPLOYEE.STARTEDON >= to_date(startdate_in, 'yyyy-mm-dd'))
AND (EMPLOYEE.STARTEDON < to_date(enddate_in, 'yyyy-mm-dd'))
GROUP BY PERFORMERID, to_char(EMPLOYEE.STARTEDON, 'MM-YYYY')
UNION
SELECT
employee.performerid AS user_id,
'Approver' AS role_,
to_char(EMPLOYEE.STARTEDON, 'MM-YYYY') AS req_month,
count(EMPLOYEE.SUBJECT) AS subj_count
FROM RCUSER.EMPLOYEE EMPLOYEE
WHERE EMPLOYEE.PEID IN (2, 3)
AND EMPLOYEE.STATEID NOT IN (4, 9, 16, 31, 36)
AND (EMPLOYEE.AGENTID = 0)
AND (EMPLOYEE.STARTEDON >= to_date(startdate_in, 'yyyy-mm-dd'))
AND (EMPLOYEE.STARTEDON < to_date(enddate_in, 'yyyy-mm-dd'))
GROUP BY PERFORMERID, to_char(EMPLOYEE.STARTEDON, 'MM-YYYY');
END;
运行时,不会将任何内容写入TEMP_TABLE。但是当我对日期范围进行硬编码时,我会得到一些数据。
【问题讨论】:
标签: sql oracle stored-procedures plsql union