早上踩了一个坑,在写一个存储过程时,需要用到嵌套游标,在传参时犯了一个错! 参数变量名不能与已有的表字段名相同,否则会不断自循环。。。
有坑的代码如下:
cursor cur_get_ips is
select T.IP
FROM eamp_mobile_devices_info T
WHERE T.date_updated >= trunc(sysdate) - 1
AND T.date_updated < trunc(sysdate)
AND T.ip is not null
group by T.IP
having count(1) < p_count;
cursor cur_get_attendance(ip IN VARCHAR2) is
SELECT T.ID_ATTENDANCE
FROM eamp_mobile_devices_info T
WHERE T.IP = ip
AND T.date_updated >= trunc(sysdate) - 1
AND T.date_updated < trunc(sysdate);
begin
FOR CUR_IP IN cur_get_ips LOOP
V_IP := CUR_IP.IP;
open cur_get_attendance(V_IP);
loop
fetch cur_get_attendance
into V_ID;
exit when cur_get_attendance%notfound;
SELECT P.EMPNO
INTO V_EMPNO
FROM eamp_attendance_original_data P
WHERE P.ID_EAP_AT_ORIG_DATA = V_ID;
MERGE INTO EAMP_DOUBT_IP_INFO P
USING (select V_ID AS ID from dual) PP
ON (P.ID_EAP_AT_ORIG_DATA = PP.ID)
WHEN NOT MATCHED THEN
INSERT
(ID_EAMP_DOUBT_IP,
ID_EAP_AT_ORIG_DATA,
IP,
EMPNO,
SUSPECTED_FLAG,
CREATED_BY,
DATE_CREATED,
UPDATED_BY,
DATE_UPDATED)
VALUES
(sys_guid(),
V_ID,
V_IP,
V_EMPNO,
'Y',
USER,
SYSDATE,
USER,
SYSDATE);
end loop la;
close cur_get_attendance;
END LOOP;
标红处就是问题所在!