如何从被调用的函数返回的sys_refcursor中获取列的值

时间:2015-08-18 05:24:37

标签: sql oracle plsql

我在匿名区块中调用了一个函数pck_my_packf_my_funcf_my_func返回sys_refcursor

我希望将来自req_column的{​​{1}}的值用作

sys_refcursor

IF req_column>0 THEN do this and that END IF; 返回的问题sys_refcursor未选择特定表中的值。它从多个表和少量本地变量中选择值,这些变量是在my_func中计算的。

请帮助我从my_func获取价值。 这是我正在尝试的:

sys_refcursor

2 个答案:

答案 0 :(得分:1)

declare 
  src_cur sys_refcursor;
  curid    NUMBER;
  v_jobtitle varchar2(35);
  v_min_salary number;
begin 
  open src_cur for 'select job_id,job_title,min_salary,max_salary from jobs';
  curid := DBMS_SQL.TO_CURSOR_NUMBER(src_cur);
  dbms_sql.define_column(curid,2,v_jobtitle,35);
  dbms_sql.define_column(curid,3,v_min_salary);
   WHILE DBMS_SQL.FETCH_ROWS(curid) > 0 LOOP
       DBMS_SQL.COLUMN_VALUE(curid, 2, v_jobtitle);
       DBMS_SQL.COLUMN_VALUE(curid, 3, v_min_salary);
       DBMS_OUTPUT.put_line('job_titile='||v_jobtitle||' ;min_salary='||v_min_salary);
  END LOOP;
  DBMS_SQL.CLOSE_CURSOR(curid);
end;

答案 1 :(得分:0)

您必须知道sys_refcursor中列的类型和名称。 并在其上执行获取操作。

DECLARE 
TYPE cu_income_detail is ref cursor;
income_det cu_income_detail;
BEGIN 
    income_det := pck_my_pack.f_my_func(2542586);
    loop
      fetch income_det into var_1, var_2 ... var_3;
       -- Logic here 
      exit when income_det%notfound;    
    end loop;
END;