No dota found_procédure sql

Fermé
raminata Messages postés 7 Date d'inscription jeudi 8 décembre 2022 Statut Membre Dernière intervention 11 décembre 2022 - 11 déc. 2022 à 18:06
raminata Messages postés 7 Date d'inscription jeudi 8 décembre 2022 Statut Membre Dernière intervention 11 décembre 2022 - 11 déc. 2022 à 21:24

Bonjour,

J'essaye de faire cette procédure qui reçoit une date et le code d'utilisateur en paramètre . Si la date est  antérieure à la date de jour - 2 ans et si c"est le bon code utilisateur, la procédure doit archiver lles projets antérieure à la date  calculée

J'ai bien sûr les tables PROJET, MEMBRE, PROJET_ARCHIVE dans ma BDD.

La compilation se fait sans erreur, mais j'ai un data found à execution, alors que les données de execution existent dans les tables. Quelqu'un peut aider? Merc

--------------------------------------------------------------

create or replace procedure SP_ARCHIVE_PROJET(P_I_DATE in date, P_I_UTILISATEUR in Varchar2) is

V_DATE_ARC date;
V_EST_ADMINITRATEUR number;

begin
        
    select DATE_FIN_PRO into V_DATE_ARC
    from TP3_PROJET
        where DATE_FIN_PRO < P_I_DATE;  
            
    select EST_ADMINISTRATEUR_MEM into V_EST_ADMINITRATEUR
        from TP3_MEMBRE
        where UTILISATEUR_MEM = P_I_UTILISATEUR;
        if (to_date(P_I_DATE)-to_date(V_DATE_ARC)) > 730 and V_EST_ADMINITRATEUR = 1 then
            insert into TP3_PROJET_ARCHIVE 
            select*
            from TP3_PROJET
                where DATE_FIN_PRO < V_DATE_ARC;
                delete from TP3_PROJET
                where DATE_FIN_PRO < V_DATE_ARC;
        else 
        raise_application_error(-20061, 'L''archivage est annulé car la date > 2 ans ou l''utilisateur n''est pas un adm');
        end if;  
end;
/
           
execute SP_ARCHIVE_PROJET(to_date('2023-01-01','RRRR-MM-DD'),'ADMRoch.al45');

2 réponses

cengokill Messages postés 252 Date d'inscription dimanche 27 mai 2012 Statut Membre Dernière intervention 19 décembre 2022 18
11 déc. 2022 à 19:16

Tout d'abord, vous utilisez la mauvaise syntaxe pour comparer les dates. Vous devez utiliser la fonction YEARS_BETWEEN pour comparer les différences entre les dates en années. Deuxièmement, vous avez une erreur dans votre logique de comparaison : vous comparez le résultat de la soustraction de P_I_DATE de V_DATE_ARC à 730, alors que vous devriez comparer la différence en années entre ces deux dates à 2.


0
raminata Messages postés 7 Date d'inscription jeudi 8 décembre 2022 Statut Membre Dernière intervention 11 décembre 2022
11 déc. 2022 à 21:24

Bonjour,

Le problème est que je ne trouve pas sa syntaxe  ni sur google ni sur Oracle Cloud

https://docs.oracle.com/search/?word=years_between&pg=1&size=10&product=e57185-01&book=SQRLG&lang=en

j'ai essayé datediff, mais kil me l'a connait pas n'en plus 

V_DIF := DATEDIFF(P_I_DATE - V_DATE_ARC, 'year');

Merci pour votre aide.

0