2011-07-06 14 views
1

sys_refcursorを返すプロシージャを実行しようとしていますが、withコマンドを使用してカーソルを取得しますが、procを実行するとエラーが発生します。出来ますか?以下は、PROCです:sys_refcursorで内部プロシージャを使用するOracleを使用する

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を持っているのかわからないのです - それは目的を果たさないのですか?とにかく、私はあなたの手続きを2番目の注文を修正して実行することができました。ですから、カーソル内でWITH句を使用できます。

+0

ええ...すみません...私が投稿した注文は本当に間違っていました。私のコードで正しい。問題は、プロシージャ名が間違っていたことでした。 sp_procを実行する代わりに、私はプロシージャ名として持っていました。 14時間のコーディングの後、すべてのラインがぼやける傾向があります。 Tksそんなに! – Pascal

関連する問題