Oracle PL/SQL将游标提取到游标中
我有一个包,我在其中声明了游标。我想把游标作为过程外变量返回。 我不能仅仅从那个游标中获取数据,因为数据需要先由load_data proc加载。 我不想使用MMM_光标,因为还有额外的功能,它使用相同的选择-在DB级别写入文件Oracle PL/SQL将游标提取到游标中,oracle,plsql,cursor,Oracle,Plsql,Cursor,我有一个包,我在其中声明了游标。我想把游标作为过程外变量返回。 我不能仅仅从那个游标中获取数据,因为数据需要先由load_data proc加载。 我不想使用MMM_光标,因为还有额外的功能,它使用相同的选择-在DB级别写入文件 create or replace PACKAGE BODY PCG_MMM AS CURSOR MMM_CURSOR(OFFSET NUMBER) IS SELECT TYPE, VALUE FROM MMM_TEMP_LOGS WHERE VALUE = OFF
create or replace PACKAGE BODY PCG_MMM AS
CURSOR MMM_CURSOR(OFFSET NUMBER) IS
SELECT TYPE, VALUE FROM MMM_TEMP_LOGS WHERE VALUE = OFFSET;
TYPE RET_TYPE IS REF CURSOR;
PROCEDURE LOAD_DATA AS
-- loading data into MMM_TEMP_LOGS--
END LOAD_DATA;
PROCDURE WRITE_TO_FILE AS
BEGIN
-- writing to file here --
END WRITE_TO_FILE;
PROCEDURE GET_DATA(DATA RET_TYPE, OFFSET NUMBER:=0) AS
BEGIN
LOAD_DATA;
DATA := MMM_CURSOR(OFFSET) ; <--- ??
END GET_DATA;
END PCG_MMM;
不能将游标传递出过程,但可以传递ref游标。您也不能仅将光标转换为ref光标 所以,如果你想在一些地方使用光标,并且有能力将其传递出去,那么我建议你将其更改为视图,并使用它代替光标 乙二醇 如果要在其中传递变量,并且需要保持这种方式以提高性能,请查找参数化视图
create or replace PACKAGE BODY PCG_MMM AS
TYPE RET_TYPE IS REF CURSOR;
PROCEDURE LOAD_DATA AS
-- loading data into MMM_TEMP_LOGS--
for r_cur in (select * from mmm_view) loop...or whatever (replace the cursor with the view)
END LOAD_DATA;
PROCDURE WRITE_TO_FILE AS
BEGIN
-- writing to file here --
END WRITE_TO_FILE;
PROCEDURE GET_DATA(DATA out RET_TYPE, OFFSET NUMBER:=0) AS
BEGIN
LOAD_DATA;
open DATA for select * From mmm_view where value = OFFSET;
END GET_DATA;
END PCG_MMM;
create or replace PACKAGE BODY PCG_MMM AS
TYPE RET_TYPE IS REF CURSOR;
PROCEDURE LOAD_DATA AS
-- loading data into MMM_TEMP_LOGS--
for r_cur in (select * from mmm_view) loop...or whatever (replace the cursor with the view)
END LOAD_DATA;
PROCDURE WRITE_TO_FILE AS
BEGIN
-- writing to file here --
END WRITE_TO_FILE;
PROCEDURE GET_DATA(DATA out RET_TYPE, OFFSET NUMBER:=0) AS
BEGIN
LOAD_DATA;
open DATA for select * From mmm_view where value = OFFSET;
END GET_DATA;
END PCG_MMM;