Oracle 下面的过程(当我取消注释注释注释部分时)显示';未找到数据';。。?

Oracle 下面的过程(当我取消注释注释注释部分时)显示';未找到数据';。。?,oracle,plsql,oracle11g,Oracle,Plsql,Oracle11g,嗨,我正在尝试下面的代码逻辑..我需要帮助。。 当我运行以下过程时,我会得到特定月份的所有SID以及相应的pid。但是,当我取消注释我在这里评论的部分时,我会显示月份和年份,然后会显示一条消息说“找不到数据”。我哪里做错了 create or replace PROCEDURE mas(V_MONTH NUMBER DEFAULT NULL,V_YEAR NUMBER DEFAULT NULL,V_AID VARCHAR2) AS V_MID VARCHAR2(50); V_SID VARC

嗨,我正在尝试下面的代码逻辑..我需要帮助。。 当我运行以下过程时,我会得到特定月份的所有SID以及相应的pid。但是,当我取消注释我在这里评论的部分时,我会显示月份和年份,然后会显示一条消息说“找不到数据”。我哪里做错了

 create or replace PROCEDURE mas(V_MONTH NUMBER DEFAULT NULL,V_YEAR NUMBER DEFAULT NULL,V_AID VARCHAR2) AS

V_MID VARCHAR2(50);
V_SID VARCHAR2(50);
v_v_month number := nvl(V_MONTH,to_number(to_char(sysdate,'mm')));
v_v_year number := nvl(V_YEAR,to_number(to_char(sysdate,'yyyy')));
v_is_sub PM.IS_SUB%TYPE;
V_DIST_s NUMBER;
V_DIST_t NUMBER;


 cursor c1 
  is
    select distinct a.mid,
                      b.sid
    from     pmt a
             inner join smt b  
             on (a.mid = b.mid)
    where    a.AID = V_AID      
    AND A.AID = B.AID 
    AND EXTRACT(MONTH FROM A.RDATE)= v_v_month AND 
    EXTRACT(YEAR FROM A.RDATE)= v_v_year
    order by mid;

BEGIN


dbms_output.put_line('month : ' || v_v_month);
dbms_output.put_line('year : ' || v_v_year);

/*
select IS_SUB into v_is_sub from program_master where pid = 'V_AID';

IF v_is_sub = 1 then

  select count(*) into V_DIST_S from (select distinct sid from smt where aid = 'v_aid');

  select count(*) into V_DIST_T from (select distinct sid from tm where aid = 'v_aid');

   if(V_DIST_S = V_DIST_T) then

*/
    for rec1 in c1

    loop

      dbms_output.put_line('MID : ' || rec1.MID);
      dbms_output.put_line('SID : ' || rec1.SID);

    end loop;

--  else

  --  dbms_output.put_line('count of sids do not match');

--end if;

--else

--dbms_output.put_line('No sids available for the mentioned pid.');


--end if;

END MAS;
V_-AID
是一个变量,但是,您将它括在单引号内,这使它成为一个字符串。因此,您实际上是在查找值
“V_AID”
,而不是变量的值

将其修改为:

select IS_SUB into v_is_sub from program_master where pid = V_AID;

无论在何处使用单引号括起变量,都要执行相同的操作。

btw,通常PL/SQL开发人员使用
p_
作为参数,使用
v_
l_
作为局部变量。在您的示例中,这样也可以避免使用
v_v_month
这样的名称。
select IS_SUB into v_is_sub from program_master where pid = V_AID;