comment appeler la procédure stockée oracle avec le quotidien des tâches planifiées?
Je suis nouveau à l'oracle de l'emploi de scripts. J'ai écrit la procédure de purge pour nettoyer toutes les anciennes données et de conserver les 3 derniers mois de données... la procédure est exécutée avec succès. son travail quand im appelant manuellement aussi. la procédure est comme suit:
CREATE OR REPLACE PROCEDURE Archive
IS
v_query varchar2(2048);
v_tablename VARCHAR2(50);
v_condition varchar2(50);
TYPE cur_typ IS REF CURSOR;
c cur_typ;
BEGIN
OPEN c for 'select tablename,columnname from pseb.purge_tables';
FETCH c INTO v_tablename,v_condition;
LOOP
EXIT WHEN c%NOTFOUND;
if(v_tablename ='cfw.DCTBLPERFCUMULATIVEMASTER') then
v_query:='delete from cfw.DCTBLPERFDCUMULATIVEB3MAINREG where cumulativeid in (select cumulativeid FROM '|| v_tablename || ' WHERE ' || v_condition||' < sysdate-90';
execute immediate v_query;
v_query:='delete from cfw.DCTBLPERFDCUMULATIVEB4TODENERG where cumulativeid in (select cumulativeid FROM '|| v_tablename || ' WHERE ' || v_condition||' < sysdate-90';
execute immediate v_query;
v_query:='delete from cfw.DCTBLPERDFCUMULATIVEB5MAXDEMAN where cumulativeid in (select cumulativeid FROM '|| v_tablename || ' WHERE ' || v_condition||' < sysdate-90';
execute immediate v_query;
v_query:='delete from cfw.DCTBLPERFDCUMULATIVEB6TODREG where cumulativeid in (select cumulativeid FROM '|| v_tablename || ' WHERE ' || v_condition||' < sysdate-90';
execute immediate v_query;
v_query:='delete from cfw.DCTBLPERFDCUMULATIVEB7MAXDEMAN where cumulativeid in (select cumulativeid FROM '|| v_tablename || ' WHERE ' || v_condition||' < sysdate-90';
execute immediate v_query;
v_query:='delete from cfw.DCTBLPERFDCUMULATIVEB8MAXDEMAN where cumulativeid in (select cumulativeid FROM '|| v_tablename || ' WHERE ' || v_condition||' < sysdate-90';
execute immediate v_query;
v_query:='delete FROM '|| v_tablename || ' WHERE ' || v_condition||' < sysdate-90';
execute immediate v_query;
else
begin
v_query:='delete FROM '|| v_tablename || ' WHERE ' || v_condition||' < sysdate-90';
execute immediate v_query;
end;
end if;
FETCH c INTO v_tablename,v_condition;
end LOOP;
close c;
END; --Procedure
mon script de Travail est comme suit:
begin
DBMS_SCHEDULER.CREATE_JOB (
job_name => 'purgeproc_automation',
job_type => 'STORED_PROCEDURE',
job_action => 'call pseb.archive();',
repeat_interval => 'FREQ=DAILY;INTERVAL=2', /* every other day */
auto_drop => false,
enabled => true,
comments => 'My new job');
end;
/
Travail a été créé avec succès, mais le statut de la tâche est en échec, de ne pas réussir . Quelle est la raison derrière elle? elle retourne l'erreur suivante:
ORA-06550: line 1, column 728:
PLS-00103: Encountered the symbol "PSEB" when expecting one of the following:
:= . ( @ % ;
The symbol ":=" was substituted for "PSEB" to continue.
merci de me guider pour résoudre ce...
OriginalL'auteur Saranya Jothiprakasam | 2012-11-30
Vous devez vous connecter pour publier un commentaire.
Omg, votre code ressemble tellement compliqué. Considérer cette simplification première:
Alternative définition du travail par dbms_job.soumettre:
Un moyen de vérifier l'emploi:
Ajouté sélectionnez à ma réponse.
mmm j'ai créé ce travail, il renvoie le code pl/sql procédure exécutée avec succès. mais dans le user_jobs des informations de la table n'est pas là
1. avez-vous engager? 2. l'utilisateur qui ne vous lancez le pl/sql? 3. avez-vous accès à dba utilisateur? si oui essayez all_jobs vue.
oh, génial, mmm, thanq u tant pour ur des conseils.. je n'ai pas donner de commettre à l'époque, maintenant c'est fait correctement 🙂
OriginalL'auteur Gumowy Kaczak
Il semble que vous soyez le mélange de deux façons différentes d'utiliser la create_job à créer le programme. Veuillez modifier votre script à quelque chose comme ceci:
Ensuite, il semble que le planificateur ne peut pas accéder à votre colis.
Alors, comment puis-je terminer cette tâche?
Vous avez besoin de savoir avec qui l'utilisateur que le planificateur est en cours d'exécution de la tâche. En supposant que votre colis est dans un autre schéma que vous avez à faire assurez-vous que le planificateur de l'utilisateur peut accéder à ce schéma où le paquet est créé. Désolé, mais un peu dur pour être plus précis, quand je n'ai pas accès à votre environnement.
COMME d'ur conseils j'ai vérifié l'utilisateur que le planificateur est en cours d'exécution. dans Pseb schéma lui-même un exemple de job est en cours d'exécution. J'ai créé un marché de l'emploi dans ce même utilisateur pour en faire de même sa procédure en donnant la même erreur. 🙁
OriginalL'auteur DJPeter
Le moyen le plus facile pour exécuter une procédure stockée à partir du planificateur de tâche est de changer le
job_type
.De repos, vous pouvez utiliser vos propres valeurs. Essayez ceci et publier les résultats.
Exemple:
OriginalL'auteur Rakesh Nunna