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