IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Une procédure qui passe mais sans rien faire


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 167
    Par défaut Une procédure qui passe mais sans rien faire
    Bonjour,
    j'ai un problème avec une procédure qui s'exécute sans retour d'erreurs mais qui en fait ne fait rien ...

    Il s'agit de cette procédure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    CREATE OR REPLACE PROCEDURE Script_chargement_ODS_1Bis IS
     
    CURSOR c_table IS
    SELECT vsource.view_name, tcible.table_name
    FROM SYS.ALL_TABLES tcible,  SYS.ALL_VIEWS vsource
    WHERE tcible.OWNER = 'IHR'  and vsource.OWNER = 'IHR'
    and tcible.table_name like 'HRA_%' and tcible.table_name not like 'HRA_ZX%'
    and tcible.table_name not like 'HRA_ZY%' and vsource.view_name like 'ODS_%'
    and vsource.view_name not like 'ODS_ZX%' and vsource.view_name not like 'ODS_ZY%'
    and rtrim(substr(tcible.table_name,4,25)) = rtrim(substr(vsource.view_name,4,25))
    and tcible.table_name  not in (SELECT substr ( tcible.table_name , 1 , INSTR(tcible.table_name,'TMP',1) - 2 )
    					   	   	   FROM SYS.ALL_TABLES tcible
    							   WHERE tcible.table_name like 'HRA_%'
    							   AND tcible.table_name  like '%TMP') ;
    i c_table%ROWTYPE;
     
    BEGIN
     
    FOR i IN c_table LOOP
    	EXECUTE IMMEDIATE 'truncate table IHR.' || i.table_name ;
    	EXECUTE IMMEDIATE 'Insert into IHR.' || i.table_name || ' select * from IHR.' || i.view_name ;
    	commit;
    END LOOP;
     
    END;
    Son but est tout simple, copier les données des vues dans des tables correspondantes ! La procédure est sur un schéma (SUNOPSIS) et les données cible/source sont sur un autre schéma (IHR).

    Lorsque je l'exécute cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    begin
    SUNOPSIS.Script_chargement_ODS_1Bis() ;
    end ;
    J'ai ce retour : PL/SQL procedure successfully completed

    Or mes tables cibles restent vides ! (alors qu'il y a bien des données dans les vues sources)

    Comme autre test, j'ai exécuter la requête de mon curseur pour voir si le problème ne venait pas de là mais il me retourne bien les noms des tables et vues ... Je décide alors de copie la première occurrence de cette liste :
    View name : ODS_FNB00_ALL
    Table name : HRA_FNB00_ALL
    Et je remplace dans les EXECUTE IMMEDIATE pour ensuite essayer cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    BEGIN
     
    EXECUTE IMMEDIATE 'truncate table IHR.HRA_FNB00_ALL' ;
    EXECUTE IMMEDIATE 'Insert into IHR.HRA_FNB00_ALL select * from IHR.ODS_FNB00_ALL' ;
    commit;
     
    END;
    Et lorsque je fais cela, même code de retour, cette fois-ci avec la table cible qui est correctement remplie !!!

    Je ne m'explique vraiment pas le problème que j'ai avec la procédure qui n'exécute rien ....

    HELP ME PLEASE !!!!!

  2. #2
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Exécutes la requête de ton curseur sous SQL*Plus, elle ne ramène peut-être rien.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 167
    Par défaut
    Je te remercie de ton intervention mais dans mon premier message j'ai bien spécifié que j'avais essayé d'exécuter la requête de mon curseur et qu'elle me retourne bien des résultats ! (93 pour être précis)

    Citation Envoyé par Bizoo Voir le message
    Comme autre test, j'ai exécuter la requête de mon curseur pour voir si le problème ne venait pas de là mais il me retourne bien les noms des tables et vues ...

  4. #4
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Pas les yeux en face des trous ce matin moi

    As-tu essayé de mettre des dbms_output pour afficher les requêtes que tu exécutes ?

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 167
    Par défaut
    Je me trompe peut-être dans les syntaxes mais j'ai essayer ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    CREATE OR REPLACE PROCEDURE Script_chargement_ODS_1Bis IS
     
    CURSOR c_table IS
    SELECT vsource.view_name, tcible.table_name
    FROM SYS.ALL_TABLES tcible,  SYS.ALL_VIEWS vsource
    WHERE tcible.OWNER = 'IHR'  and vsource.OWNER = 'IHR'
    and tcible.table_name like 'HRA_%' and tcible.table_name not like 'HRA_ZX%'
    and tcible.table_name not like 'HRA_ZY%' and vsource.view_name like 'ODS_%'
    and vsource.view_name not like 'ODS_ZX%' and vsource.view_name not like 'ODS_ZY%'
    and rtrim(substr(tcible.table_name,4,25)) = rtrim(substr(vsource.view_name,4,25))
    and tcible.table_name  not in (SELECT substr ( tcible.table_name , 1 , INSTR(tcible.table_name,'TMP',1) - 2 )
    					   	   	   FROM SYS.ALL_TABLES tcible
    							   WHERE tcible.table_name like 'HRA_%'
    							   AND tcible.table_name  like '%TMP') ;
    i c_table%ROWTYPE;
     
    BEGIN
     
    dbms_output.enable(9999999);
    dbms_output.put_line ('Test avec dbms_output');
     
    FOR i IN c_table LOOP
    	dbms_output.put_line (i.table_name);
    	dbms_output.put_line (i.view_name);
    	dbms_output.put_line ('truncate table IHR.' || i.table_name);
    	dbms_output.put_line ('Insert into IHR.' || i.table_name || ' select * from IHR.' || i.view_name);
    	EXECUTE IMMEDIATE 'truncate table IHR.' || i.table_name ;
    	EXECUTE IMMEDIATE 'Insert into IHR.' || i.table_name || ' select * from IHR.' || i.view_name ;
    	commit;
    END LOOP;
     
    END;
    Et lors de l'exécution sous TOAD :

    Dans l'onglet en bas Script Output :
    begin
    SUNOPSIS.Script_chargement_ODS_1Bis() ;
    end ;
    PL/SQL procedure successfully completed


    Et rien dans l'onglet DBMS Output...

  6. #6
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Sous toad il faut que tu actives le dbms_output (icone rouge dans l'onglet DBMS output)

  7. #7
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    167
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 167
    Par défaut
    Ok merci !
    Bien dans ce cas je n'ai la trace que de mon :
    dbms_output.put_line ('Test avec dbms_output');

    C'est comme si on ne passait pas dans la boucle, comme si elle était vide !

    Pourtant quand je sélectionne la requête du curseur et que je n'exécute que cette dernière j'ai bien en retour :

    93 rows selected

    C'est à rien n'y comprendre

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/04/2006, 14h32
  2. appel d'une procédure qui renvoie le résultat d'une requete
    Par audreyc dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 16/03/2006, 14h02
  3. Une DLL qui existe mais VB ne la trouve pas...
    Par Lawari dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 09/12/2005, 23h16
  4. Root qui ne peux plus rien faire :'(
    Par Smortex dans le forum Administration
    Réponses: 2
    Dernier message: 27/09/2004, 20h13
  5. Une table qui existe mais qui est inconnu! ?
    Par Nino dans le forum InterBase
    Réponses: 6
    Dernier message: 13/06/2003, 11h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo