PL/SQL 程序动态传递值
PL/SQL procedure to dynamically pass the value
WITH CTE AS
(SELECT
F.PARTITION_KEY,
(LAST_DAY(TO_DATE((PARTITION_KEY)||'01','YYYYMMDD'))) AS VALID_DATE,
F.EMP_NUM,
F.EMP_KEY,
D.EMP_ENTERED_DATE
FROM F_EMP_ERROR, D_EMP D
WHERE
F.EMP_NUM = D.EMP_NUM
AND F.PARTITION_KEY = 201603
and d.CONTRACT_PERIOD = 'Y')
SELECT COUNT(DISTINCT EMP_NUM) FROM CTE WHERE EMP_ENTERED_DATE > VALID_DATE;
如果我对特定的内容进行硬编码,我的查询工作正常 month.How 我是否将其转换为一个过程,以便在我输入年份时,它应该 return 所有月份的记录数年。
假设您的密钥以 YYYYMM
格式存储为 varchar2
,您可以使用:
CREATE FUNCTION fun(yearKey IN VARCHAR2)
RETURN NUMBER AS
retVal NUMBER;
BEGIN
WITH CTE AS
(SELECT F.PARTITION_KEY,
(LAST_DAY(TO_DATE((PARTITION_KEY) || '01', 'YYYYMMDD'))) AS VALID_DATE,
F.EMP_NUM,
F.EMP_KEY,
D.EMP_ENTERED_DATE
FROM F_EMP_ERROR, D_EMP D
WHERE F.EMP_NUM = D.EMP_NUM
AND F.PARTITION_KEY like yearKey || '%'
AND d.CONTRACT_PERIOD = 'Y')
SELECT COUNT(DISTINCT EMP_NUM)
INTO retVal
FROM CTE
WHERE EMP_ENTERED_DATE > VALID_DATE;
RETURN retVal;
END;
WITH CTE AS
(SELECT
F.PARTITION_KEY,
(LAST_DAY(TO_DATE((PARTITION_KEY)||'01','YYYYMMDD'))) AS VALID_DATE,
F.EMP_NUM,
F.EMP_KEY,
D.EMP_ENTERED_DATE
FROM F_EMP_ERROR, D_EMP D
WHERE
F.EMP_NUM = D.EMP_NUM
AND F.PARTITION_KEY = 201603
and d.CONTRACT_PERIOD = 'Y')
SELECT COUNT(DISTINCT EMP_NUM) FROM CTE WHERE EMP_ENTERED_DATE > VALID_DATE;
如果我对特定的内容进行硬编码,我的查询工作正常 month.How 我是否将其转换为一个过程,以便在我输入年份时,它应该 return 所有月份的记录数年。
假设您的密钥以 YYYYMM
格式存储为 varchar2
,您可以使用:
CREATE FUNCTION fun(yearKey IN VARCHAR2)
RETURN NUMBER AS
retVal NUMBER;
BEGIN
WITH CTE AS
(SELECT F.PARTITION_KEY,
(LAST_DAY(TO_DATE((PARTITION_KEY) || '01', 'YYYYMMDD'))) AS VALID_DATE,
F.EMP_NUM,
F.EMP_KEY,
D.EMP_ENTERED_DATE
FROM F_EMP_ERROR, D_EMP D
WHERE F.EMP_NUM = D.EMP_NUM
AND F.PARTITION_KEY like yearKey || '%'
AND d.CONTRACT_PERIOD = 'Y')
SELECT COUNT(DISTINCT EMP_NUM)
INTO retVal
FROM CTE
WHERE EMP_ENTERED_DATE > VALID_DATE;
RETURN retVal;
END;