2011-07-06 40 views
1

我試圖執行返回sys_refcursor一個過程,我想用一用命令來獲取光標,但我得到一個錯誤,當我執行proc中的過程。可能嗎?下面是PROC:使用Oracle的與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 
+0

哪個版本的數據庫使用? –

+1

爲什麼你不使用:=? –

+0

它10R2 ...對不起 – Pascal

回答

2

你的第二個整理:

爲了通過cd_motivo_rejeicao vl_value1;

無效。 「cd_motivo_rejeicao」是您沒有選擇的某個列嗎?如果是,請在它和vl_value1之間加一個逗號。否則,擺脫它。我也不能確定爲什麼你的WITH子句中拿到了第一個ORDER BY選擇 - 這也是沒有用處的,不是嗎?無論如何,我可以通過修復第二個命令來讓程序運行。所以,是的,你可以在遊標中使用WITH子句。

+0

啊...我很抱歉......由我爲了貼錯了事實上,它是在我的代碼中正確。問題是我的程序名稱錯誤!我沒有執行sp_proc,而是使用了過程名稱。編碼14小時後,所有線條都會變得模糊。太多了! – Pascal