2011-07-06 4 views
1

J'essaie d'exécuter une procédure qui renvoie un sys_refcursor, et je veux utiliser une commande avec pour obtenir le curseur, mais j'obtiens une erreur lorsque j'exécute le proc. C'est possible? Ci-dessous le proc:Utilisation d'Oracle avec procédure interne avec 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; 
/

Il compile sans journaux, mais quand je l'exécute, je reçois:

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

Quelle version de DB utilisez-vous? –

+1

Pourquoi vous n'utilisez pas: =? –

+0

C'est 10R2 ... désolé – Pascal

Répondre

2

Votre second ordre par:

commande par cd_motivo_rejeicao vl_value1;

n'est pas valide. Est-ce que "cd_motivo_rejeicao" est une colonne que vous n'avez pas sélectionnée? Si c'est le cas, mettez une virgule entre elle et vl_value1. Sinon, débarrassez-vous. Je ne sais pas non plus pourquoi vous avez le premier ORDER BY dans la clause WITH SELECT - cela ne sert à rien, n'est-ce pas? En tout cas, j'ai réussi à faire fonctionner votre procédure en fixant la seconde commande par. Donc oui, vous pouvez utiliser la clause WITH dans un curseur.

+0

Ouais ... Je suis tellement désolé ... L'ordre par moi posté était en effet faux, par ce qu'il était corriger dans mon code. Le problème était que j'avais le nom de la procédure faux! Au lieu d'exécuter sp_proc, j'avais comme nom de procédure. Après 14 heures de codage, toutes les lignes ont tendance à se brouiller. Tks tellement! – Pascal

Questions connexes