我试图弄清楚这个游标执行的时间。但是,我得到了相同的开始和结束时间。
请注意我没有包含实际的sql语句。但我确定执行它需要很长时间。
PROCEDURE GetData (p1 IN VARCHAR2,myREFCURSOR OUT SYS_REFCURSOR)
IS
DynamicStatement CLOB;
BEGIN
INSERT INTO TimeTable VALUES ('StartTime',SYSDATE);
COMMIT;
OPEN myREFCURSOR FOR DynamicStatement;
INSERT INTO TimeTable VALUES ('EndTime',SYSDATE);
COMMIT;
END;
答案 0 :(得分:2)
Ref Cursor是一个指向存储查询的内存块的指针。打开一个只是一个赋值操作,它不执行查询。这就是为什么它似乎没有时间。
如果您想查看运行实际查询所需的时间,您需要将FETCH记录转换为某个记录变量。
PROCEDURE GetData (p1 IN VARCHAR2,myREFCURSOR OUT SYS_REFCURSOR)
IS
DynamicStatement CLOB;
type rec is record (id number, blah varchar2(128));
lrec rec;
BEGIN
INSERT INTO TimeTable VALUES ('StartTime',SYSDATE);
COMMIT;
OPEN myREFCURSOR FOR DynamicStatement;
loop
fetch myREFCURSOR into rec;
exit when myREFCURSOR%notfound;
end loop;
close myREFCURSOR;
INSERT INTO TimeTable VALUES ('EndTime',SYSDATE);
COMMIT;
END;
显然,记录变量必须与查询的投影相匹配。鉴于你正在执行可能很难的DynamicStatement
。