Использование Oracle с внутренней процедурой с sys_refcursor - PullRequest
1 голос
/ 07 июля 2011

Я пытаюсь выполнить процедуру, которая возвращает sys_refcursor, и я хочу использовать команду с, чтобы получить курсор, но я получаю ошибку, когда я выполняю процедуру.Является ли это возможным?Ниже описан процесс:

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 Ответ

2 голосов
/ 07 июля 2011

Ваш второй заказ по:

заказ по cd_motivo_rejeicao vl_value1;

недействителен.Является ли "cd_motivo_rejeicao" столбцом, который вы не выбрали?Если это так, поместите запятую между ним и vl_value1.Иначе избавься от этого.Я также не уверен, почему у вас есть первый ORDER BY в предложении WITH SELECT - это не имеет смысла, не так ли?В любом случае, я смог запустить вашу процедуру, исправив второй порядок.Итак, да, вы можете использовать предложение WITH внутри курсора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...