使用带有sys_refcursor的内部过程的Oracle

时间:2011-07-06 23:09:06

标签: oracle plsql

我正在尝试执行一个返回sys_refcursor的过程,我想使用with命令来获取光标,但是当我执行proc时出错。可能吗?以下是proc:

create or replace
procedure sp_proc(
  p_vl_skip in number,
  p_vl_take in number,
  tblresult out sys_refcursor)
as
  v_first_row number;
  v_last_row number;
begin
  select p_vl_skip into v_first_row from dual;
  select p_vl_skip + p_vl_take into v_last_row from dual;

  open tblresult for
  with tbl_relacao_rejeicoes as (
    select vl_value1, vl_value2, row_number() over (order by vl_value1 desc) vl_reg
    from tb_table
    order by vl_value1 desc)
  select *
  from tbl_relacao_rejeicoes
  where vl_reg between v_first_row and v_last_row
  order by cd_motivo_rejeicao vl_value1;
end;
/

它编译时没有任何日志,但是当我执行它时,我得到:

OracleException: ORA-06550: line 1, column 7:
PLS-00201: identifier 'TBL_RELACAO_REJEICOES' must be declared
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

1 个答案:

答案 0 :(得分:2)

您的第二个订单:

  

按cd_motivo_rejeicao vl_value1;

订购

无效。 “cd_motivo_rejeicao”是否是您未选择的某个列?如果是,请在它和vl_value1之间加一个逗号。否则,摆脱它。我也不确定你为什么在WITH子句SELECT中得到第一个ORDER BY - 它没有用处,是吗?无论如何,我能够通过修复第二个订单来让你的程序运行。所以,是的,你可以在游标中使用WITH子句。