Oracle 光标/引导功能
但是,在PL/SQL块中使用lead分析函数,结果不会显示。请导游Oracle 光标/引导功能,oracle,plsql,Oracle,Plsql,但是,在PL/SQL块中使用lead分析函数,结果不会显示。请导游 SET SERVEROUTPUT ON DECLARE CURSOR C_11 IS SELECT * FROM EMP; TYPE DD IS TABLE OF EMP%ROWTYPE; CC DD; TYPE RR IS RECORD ( ID EMP.ID%TYPE, ENAME EMP.ENAME%type, JOB EMP.JOB%TYPE, HIREDATE EMP.HIREDATE%TYPE, HIREDATE
SET SERVEROUTPUT ON
DECLARE
CURSOR C_11 IS SELECT * FROM EMP;
TYPE DD IS TABLE OF EMP%ROWTYPE;
CC DD;
TYPE RR IS RECORD
(
ID EMP.ID%TYPE,
ENAME EMP.ENAME%type,
JOB EMP.JOB%TYPE,
HIREDATE EMP.HIREDATE%TYPE,
HIREDATE_LEAD EMP.HIREDATE%TYPE
);
HH RR;
BEGIN
OPEN C_11;
LOOP
FETCH C_11 BULK COLLECT INTO CC LIMIT 1000;
FOR I IN 1..cc.count
loop
SELECT ID,ENAME,JOB,HIREDATE, LEAD(HIREDATE) OVER(ORDER BY HIREDATE) into HH FROM EMP where id=cc(i).id;
DBMS_OUTPUT.PUT_LINE (HH.ID ||' '||HH.ENAME||' '||HH.JOB ||' '||HH.HIREDATE||' ' || HH.HIREDATE_LEAD);
end loop;
EXIT WHEN C_11%NOTFOUND;
END LOOP;
CLOSE C_11;
END;
处理记录和批量操作时,需要确保遵循正确的语法。请参阅下面的工作代码和内联注释:
DECLARE
CURSOR c_11 IS SELECT * FROM emp;
TYPE dd IS TABLE OF emp%rowtype;
cc dd;
TYPE rr IS RECORD (
id emp.empno%TYPE,
ename emp.ename%type,
job emp.job%TYPE,
hiredate emp.hiredate%TYPE,
hiredate_lead emp.hiredate%TYPE
);
-- This is needed to be created to hold records.
Type v_rr is table of rr index by pls_integer;
hh v_rr;
BEGIN
OPEN c_11;
LOOP
FETCH c_11 BULK COLLECT INTO cc LIMIT 1000;
FOR i IN 1..cc.count
loop
SELECT empno,
ename,
job,
hiredate,
nvl(LEAD(hiredate) OVER( ORDER BY hiredate) ,hiredate)
Bulk Collect into hh -- Since you are using collection,you need to use BULK collect
FROM emp;
--where empno = cc(i).empno; -- This looks redundant.
-- Iterate through the loop to print the result.
For j in 1.. hh.count
loop
dbms_output.put_line(hh(j).id || ' ' || hh(j).ename || ' ' || hh(j).job || ' ' || hh(j).hiredate || ' ' || hh(j).hiredate_lead);
end loop;
end loop;
EXIT WHEN c_11%notfound;
END LOOP;
CLOSE c_11;
END;
输出:
SQL> /
7369 SMITH CLERK 17-DEC-80 20-FEB-81
7499 ALLEN SALESMAN 20-FEB-81 22-FEB-81
7521 WARD SALESMAN 22-FEB-81 02-APR-81
7566 JONES MANAGER 02-APR-81 01-MAY-81
7698 BLAKE MANAGER 01-MAY-81 09-JUN-81
7782 CLARK MANAGER 09-JUN-81 08-SEP-81
7844 TURNER SALESMAN 08-SEP-81 28-SEP-81
7654 MARTIN SALESMAN 28-SEP-81 17-NOV-81
7839 KING PRESIDENT 17-NOV-81 03-DEC-81
7900 JAMES CLERK 03-DEC-81 03-DEC-81
7902 FORD ANALYST 03-DEC-81 23-JAN-82
hhj.hiredate_铅的结果仍然不是there@JaspreetSingh检查您的查询,当您循环并尝试放置where子句并尝试匹配empno时,将找不到匹配的记录。如果您在其中注释empno=cci.empno;您得到的结果是,选择ID、ename、job、hiredate、LEADhiredate,通过hiredate批量从emp收集到hh,其中ID=cci.ID;但lead函数的结果仍然不存在。@Jaspreitsgh运行更新的代码。看,同样的代码也适用于我。结果就是答案。