2009-12-21 4 views
0

Voici le problème avec Postgresql que je suis face à des derniers jours:problème avec les dossiers de retour

aide sélectionnez usage_rep_sp.get_result (« 2009-01-01 », « 2009-12-01 ») full_name à partir du dual; Le paquet ci-dessous suppose de revenir un certain nombre d'enregistrements ((au moins 5 noms différents) Cependant, il retourne juste un

De iReports il me donne le message d'erreur:. Causée par: org.postgresql.util.PSQLException : eRREUR: curseur «() » n'existe pas;

Pourriez-vous me aider avec ces problèmes

CREATE OR REPLACE PACKAGE usage_rep_sp 
IS 

type usage_type is record (
full_name  varchar2(50)); 
-- 
type srr_rec is ref cursor return usage_type; 
type mycursor is ref cursor; 

function get_usage_rep(p_start_date timestamp without time zone, 
    p_end_date timestamp without time zone) 
    return srr_rec; 

function get_result(p_start_date timestamp without time zone, p_end_date timestamp without time zone) return mycursor; 

END usage_rep_sp; 

CREATE OR REPLACE PACKAGE BODY usage_rep_sp 
IS 
function get_usage_rep 
(p_start_date timestamp without time zone, p_end_date timestamp without time zone) 

    return  srr_rec 
    is 
    v_report   srr_rec; 
    v_temp    varchar2(50):=' '; 
    v_aff_level   varchar2(30); 
    commapos   number ;   
    outstring   varchar2(50) := upper(v_temp) ;  
    vquery    varchar2(3200); 
    whereclause   varchar2(3200); 

begin 
if v_temp =' ' or v_temp is null then 
whereclause := 'and u.affiliate_id in (select aff_id from ultra_affiliate)';  
else 
for index_var in 1..50   
loop    
commapos := instr(outstring,',',1,index_var) ;    
exit when commapos=0 ;   
outstring := substr(outstring,1,(commapos-1))||''','''|| substr(outstring,(commapos+1));   
end loop ;     
--outstring := '('''||outstring||''')' ; 
v_temp  := outstring ; 


if v_aff_level= 'COUNCIL' then   
whereclause  := 'and u.affiliate_id in (select aff_id from ultra_affiliate where council_id = '''|| v_temp ||''')'; 
elsif v_aff_level = 'DISTRICT' then 
whereclause  := 'and u.affiliate_id in (select aff_id from ultra_affiliate where district = '''|| v_temp ||''')'; 
elsif v_aff_level= 'LOCAL' then 
    whereclause  := 'and u.affiliate_id in (select aff_id from ultra_affiliate where aff_id = '''|| v_temp ||''')'; 
end if; 
end if; 


open v_report for 
    'select distinct initcap(u.first_name) || initcap(u.last_name)full_name ' 
    || chr (10) 
    ||' from ubcsecurity.user_session s,cod_security_vw u, ultra_affiliate ua ' 
    || chr (10) 
    ||' where s.user_name  = u.user_name ' 
    || chr (10)  
    ||' and ua.aff_id = u.affiliate_id ' 
    || chr (10)  
    ||' and s.login >= '''|| p_start_date|| ''' and s.login <= '''|| p_end_date|| ''' ' 
    || chr (10) 
    || whereclause 
    || chr (10) 
    || ' group by initcap(u.first_name) || initcap(u.last_name) ' 
    || chr(10) 
    ||' order by initcap(u.first_name) || initcap(u.last_name) '; 

    return v_report; 
end get_usage_rep; 

function get_result(p_start_date timestamp without time zone, p_end_date timestamp without time zone) return mycursor 
is 
     mycursor usage_rep_sp.srr_rec; 
     myrec usage_rep_sp.usage_type; 

     begin 

     select usage_rep_sp.get_usage_rep(p_start_date, p_end_date) 
     into mycursor from dual; 

     if mycursor%isopen then 
       loop 
       fetch mycursor into myrec; 
       exit when mycursor%notfound; 
       end loop; 
       close mycursor; 
     end if; 
return myrec; 
end get_result; 
END usage_rep_sp; 
+0

C'est tout à fait la décharge. Essayez de reformater; sélectionnez et utilisez Ctrl-K. – Tobu

Répondre

2

Je ne sais pas ce que vous utilisez, mais ce n'est pas PostgreSQL ne pas?. "dual" (c'est une chose Oracle), il n'y a pas de PACKAGES, il n'y a pas d'opérateur% isopen. il n'y a pratiquement aucune raison d'utiliser des curseurs dans PostgreSQL dans les fonctions. il n'y a pas de type de données varchar2 dans PostgreSQL.

+0

Désolé pour la confusion. C'est 8.3. Version compatible Oracle de Postgresql. – sfslku

+0

Je n'ai absolument aucune idée de ce que "Oracle Compatible version de PostgreSQL" est. Il y a une base de données basée sur Pg, avec des extensions intégrées pour imiter Oracle - je pense que c'est par EnterpriseDB - peut-être que vous devriez essayer de le soutenir? –

0

Il semble que vous essayez de combiner le déclarer et l'ouvrir sur le curseur. Je n'ai pas EnterpriseDB, mais je n'ai jamais vu ça sur Oracle ou PostgreSQL. Vous devrez peut-être déclarer le curseur, puis l'ouvrir.

+0

Malheureusement, même si je déclare dynamiquement le curseur pour mycursor dans select use_rep_sp.get_usage_rep (p_start_date, p_end_date) à partir du double cela n'aura aucune importance. Le résultat est le même. – sfslku

+0

Vous obtenez un curseur n'existe pas erreur. Quelle erreur obtenez-vous lorsque vous essayez de définir le curseur, puis essayez de l'ouvrir? Ces messages peuvent conduire à une révélation sur l'erreur qui arrête le premier format. –

Questions connexes