【发布时间】:2021-05-24 15:50:38
【问题描述】:
我遇到了这个嵌套游标的问题。我应该从两个游标内的时间戳中获取小时和分钟,然后将它们相加并将它们存储到一个变量中,以便我可以在相同的代码中使用它。我使用如下提取函数:
DECLARE
CURSOR cur1 IS
(SELECT *
FROM ((Patient P JOIN Presence Pr ON P.idP=Pr.id_PRP)
JOIN Loc L ON L.idL=Pr.id_PRL) LEFT JOIN Contact C ON
P.idP=C.id_PR1);
CURSOR cur2 IS
((SELECT *
FROM (((Patient P JOIN Visit V ON P.idP=V.id_PV)
JOIN Presence Pr ON P.idP=Pr.id_PRP))
WHERE :NEW.id_VSW = V.idV));
np cur2%ROWTYPE;
st_c1 number;
et_c1 number;
st_np number;
et_np number;
BEGIN
FOR curV IN cur1
LOOP
OPEN cur2;
FETCH cur2 INTO np;
SELECT (EXTRACT(HOUR FROM curV.time_Start)+EXTRACT(MINUTE FROM curV.time_Start)) INTO st_c1 FROM DUAL;
SELECT (EXTRACT(HOUR FROM curV.time_End)+EXTRACT(MINUTE FROM curV.time_End)) INTO et_c1 FROM DUAL;
SELECT (EXTRACT(HOUR FROM np.time_Start)+EXTRACT(MINUTE FROM np.time_Start)) INTO st_np FROM DUAL;
SELECT (EXTRACT(HOUR FROM np.time_End)+EXTRACT(MINUTE FROM np.time_End)) INTO et_np FROM DUAL;
IF (((st_cl <= et_np AND st_cl >= st_np) OR (st_np <= et_cl AND st_np >= st_c1))
...
END IF;
CLOSE cur2;
END LOOP;
END;
/
time_Start 和 time_End 属性是这样的:
INSERT INTO Table VALUES(TO_TIMESTAMP('2021-02-22 13:00','YYYY-MM-DD HH24:MI'));
它给了我这个错误:
36/3 PL/SQL: Statement ignored
36/40 PLS-00201: identifier 'ST_CL' must be declared
有什么问题?谢谢。
【问题讨论】:
-
你喜欢括号吗?你的大部分都可以跳过。您的逻辑将不起作用,最好使用
st_c1 := 60*EXTRACT(HOUR FROM curV.time_Start) + EXTRACT(MINUTE FROM curV.time_Start); -
请描述您尝试解决的问题,而不是您尝试使用的代码。你为什么要添加小时和小步舞曲,结果没有任何结果。毕竟 05:50 AM (55) 将大于 10:40 AM (50) 但小于 10:50 AM (60)。当开始到结束时间超过午夜时会发生什么,即从下午 23:00 开始,到第二天凌晨 01:00 结束。
标签: sql oracle plsql oracle11g cursor