我正在尝试执行一个返回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
答案 0 :(得分:2)
您的第二个订单:
按cd_motivo_rejeicao vl_value1;
订购
无效。 “cd_motivo_rejeicao”是否是您未选择的某个列?如果是,请在它和vl_value1之间加一个逗号。否则,摆脱它。我也不确定你为什么在WITH子句SELECT中得到第一个ORDER BY - 它没有用处,是吗?无论如何,我能够通过修复第二个订单来让你的程序运行。所以,是的,你可以在游标中使用WITH子句。