Oracle Open Cursor 执行时间
Oracle Open Cursor Execution time
我想知道这个游标需要多长时间才能执行。但是,我得到了相同的开始和结束时间。
请注意,我没有包含实际的 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;
Ref Cursor 是指向存储查询的内存块的指针。打开一个只是一个赋值操作,它不执行查询。这就是为什么它看起来根本不需要时间。
如果您想查看 运行 实际查询需要多长时间,您需要将记录提取到某个记录变量中。
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
这可能很困难。
我想知道这个游标需要多长时间才能执行。但是,我得到了相同的开始和结束时间。
请注意,我没有包含实际的 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;
Ref Cursor 是指向存储查询的内存块的指针。打开一个只是一个赋值操作,它不执行查询。这就是为什么它看起来根本不需要时间。
如果您想查看 运行 实际查询需要多长时间,您需要将记录提取到某个记录变量中。
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
这可能很困难。