Oracle PL/SQL将游标提取到游标中

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

我有一个包,我在其中声明了游标。我想把游标作为过程外变量返回。 我不能仅仅从那个游标中获取数据,因为数据需要先由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 = 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;