Sql 如何在年度中显示特定数据

Sql 如何在年度中显示特定数据,sql,oracle,stored-procedures,plsql,oracle10g,Sql,Oracle,Stored Procedures,Plsql,Oracle10g,我必须返回一个程序,该程序将显示表中缺少的数据 CREATE OR REPLACE PROCEDURE GETEMPLOYEE_INFO ( P_CPNCOD in varchar2, P_PAYDAT in date, P_PAYTYP in varchar2, P_ERV out varchar2) is R_DI_FILLODINF NUMBER(20); BEGIN FOR i IN (SELECT * FROM DI_ELEMOD) LOOP SELECT COU

我必须返回一个程序,该程序将显示表中缺少的数据

CREATE OR REPLACE PROCEDURE GETEMPLOYEE_INFO
(
P_CPNCOD in varchar2,
P_PAYDAT in date,
P_PAYTYP in varchar2,
P_ERV out varchar2)
is
R_DI_FILLODINF NUMBER(20);
BEGIN
   FOR i IN (SELECT * FROM DI_ELEMOD)
   LOOP
     SELECT COUNT(*) INTO R_DI_FILLODINF
     FROM DI_FILLODINF
     WHERE P_CPNCOD=i.CPNCOD and
           P_PAYDAT=i.PAYDAT and
           P_PAYTYP=i.PAYTYP ;

    if nvl(R_DI_FILLODINF,0)<=0
     then   
    dbms_output.put_line ('missing data : ' ||     i.CPNCOD  ||     i.PAYDAT  ||     i.PAYTYP   );
    end if;
    end loop;
    EXCEPTION
       WHEN OTHERS THEN NULL;
 end;
/

如果我理解正确,那么您需要做的是在外部查询中仅选择正确年份的值:

SELECT * FROM DI_ELEMOD
WHERE PAYDAT >= trunc(P_PAYDAT, 'yyyy') 
AND PAYDAT <= trunc(add_months(P_PAYDAT,12),'yyyy')-1
从DI_ELEMOD中选择*
其中PAYDAT>=trunc(P_PAYDAT,'yyyy')

和PAYDAT如果只想发送特定日期的年份,可以使用子字符串或更多的字符串来使用作物数据。

您的逻辑有些奇怪-在内部查询的“where子句”中,您将函数参数与外部查询(光标)的值进行比较,而不是与
DI_FILLODINF
表的列进行比较,为什么?Hooijdonk我正在尝试将表DI_FILLODINF的数据与它所使用的表DI_ELEMOD进行匹配
SELECT * FROM DI_ELEMOD
WHERE PAYDAT >= trunc(P_PAYDAT, 'yyyy') 
AND PAYDAT <= trunc(add_months(P_PAYDAT,12),'yyyy')-1