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 :

[PL/SQL Developer] Job exécutant Package


Sujet :

PL/SQL Oracle

  1. #1
    Membre averti
    Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 37
    Par défaut [PL/SQL Developer] Job exécutant Package
    Bonjour à tous,

    J'ai deux questions, la première :
    J'ai créé une procedure effectuant différentes requêtes, et insérant les résultats dans une table.
    Je souhaiterai automatiser l'exécution de cette procedure (incluse dans un package), pour qu'elle s'exécute tous les jours à 3h du matin par exemple.
    J'utilise PL/SQL Developer, et je suis novice.

    Deuxième question :
    J'ai une seconde procedure, cette dernière doit importer des données depuis un csv pour les insérer dans une table ayant exactement le même schéma que le csv. Comment faire ?
    J'ai déjà utiliser l'importateur de texte, mais pas depuis une procedure.

    D'avance merci,

    HakunA

  2. #2
    Membre expérimenté Avatar de dariyoosh
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 236
    Par défaut
    Bonjour,



    Citation Envoyé par HakunA59 Voir le message
    J'ai deux questions, la première :
    J'ai créé une procedure effectuant différentes requêtes, et insérant les résultats dans une table.
    Je souhaiterai automatiser l'exécution de cette procedure (incluse dans un package), pour qu'elle s'exécute tous les jours à 3h du matin par exemple.
    J'utilise PL/SQL Developer, et je suis novice.
    Pour moi, il s'agit d'une création de batch au niveau du système d'exploitation. Par exemple créer un script Kornshell (c'est juste un exemple sous Linux/unix) qui lance SQL*Plus en se basant sur le nom d'utilisateur, son mot de passe et bien sûr la chaîne de connexion. Votre administrateur système peut donc créer un batch programmé tous les jours à 3 heures du matin qui lance ce script.


    Citation Envoyé par HakunA59 Voir le message
    Deuxième question :
    J'ai une seconde procedure, cette dernière doit importer des données depuis un csv pour les insérer dans une table ayant exactement le même schéma que le csv. Comment faire ?
    J'ai déjà utiliser l'importateur de texte, mais pas depuis une procedure.
    Pour la lecture d'un fichier dans une procédure vous pouvez utiliser le package UTL_FILE. Mais pourquoi ne pas faire plus simple, insérer les données directement dans la table en utilisant SQL*Loader et ensuite appeler le script SQL avec la procédure en question? ça va beaucoup plus vite.


    Cordialement,
    Dariyoosh

  3. #3
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 952
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 952
    Par défaut
    Citation Envoyé par HakunA59 Voir le message
    J'ai deux questions, la première :
    J'ai créé une procedure effectuant différentes requêtes, et insérant les résultats dans une table.
    Je souhaiterai automatiser l'exécution de cette procedure (incluse dans un package), pour qu'elle s'exécute tous les jours à 3h du matin par exemple.
    J'utilise PL/SQL Developer, et je suis novice.
    DBMS_JOB
    Citation Envoyé par HakunA59 Voir le message
    Deuxième question :
    J'ai une seconde procedure, cette dernière doit importer des données depuis un csv pour les insérer dans une table ayant exactement le même schéma que le csv. Comment faire ?
    J'ai déjà utiliser l'importateur de texte, mais pas depuis une procedure
    Utilise une table externe pour lire le fichier (ou alors sqlloader moins flexible)

  4. #4
    Membre averti
    Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 37
    Par défaut
    Citation Envoyé par dariyoosh Voir le message
    Pour moi, il s'agit d'une création de batch au niveau du système d'exploitation. Par exemple créer un script Kornshell (c'est juste un exemple sous Linux/unix) qui lance SQL*Plus en se basant sur le nom d'utilisateur, son mot de passe et bien sûr la chaîne de connexion. Votre administrateur système peut donc créer un batch programmé tous les jours à 3 heures du matin qui lance ce script.
    Malheureusement je n'ai pas accès au serveur de la BDD, et par souci de contrainte de temps et également de buget, je dois me débrouiller seul.

    Citation Envoyé par dariyoosh Voir le message
    Pour la lecture d'un fichier dans une procédure vous pouvez utiliser le package UTL_FILE. Mais pourquoi ne pas faire plus simple, insérer les données directement dans la table en utilisant SQL*Loader et ensuite appeler le script SQL avec la procédure en question? ça va beaucoup plus vite.
    Si je comprends bien, tu crées un script appelant SQLLoader, et tu appelles ce script depuis la procedure, c'est bien cela ?


    Citation Envoyé par skuatamad Voir le message
    C'est ce que je pensais, mais je n'ai pas été exact dans mon message d'origine, ma procedure est dans un package (seule chose que j'ai le droit de créer avec mes droits sur la base...) Est-ce donc possible d'exécuter une procédure d'un package avec DBMS_JOB ?

    Citation Envoyé par skuatamad Voir le message
    Utilise une table externe pour lire le fichier (ou alors sqlloader moins flexible)
    C'est également ce que m'a conseillé un collègue, mais même problématique que précédemment, mon fichier est rafraichi une fois par semaine, puis-je créer un job qui exécute la procédure de mon package, dans laquelle j'utilise une table externe pour y stocker mes données ?

  5. #5
    Membre expérimenté Avatar de dariyoosh
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 236
    Par défaut
    Citation Envoyé par HakunA59 Voir le message
    Si je comprends bien, tu crées un script appelant SQLLoader, et tu appelles ce script depuis la procedure, c'est bien cela ?
    Non, je parlais encore d'une action OS, un script (par exemple Kornshell) qui lance SQL*Loader et à la ligne suivante il appelle le script SQL qui correspond à l'appel de la procédure.

    Citation Envoyé par HakunA59 Voir le message
    Et par souci de contrainte de temps et également de buget, je dois me débrouiller seul.
    C'est à dire pour une connexion FTP afin de mettre un script OS sur le serveur et créer un batch il faut payer davantage à l'administrateur système?? normalement ça fait partie de ces tâches quotidiennes !

    C'est ce que je pensais, mais je n'ai pas été exact dans mon message d'origine, ma procedure est dans un package (seule chose que j'ai le droit de créer avec mes droits sur la base...) Est-ce donc possible d'exécuter une procédure d'un package avec DBMS_JOB ?
    Voici ce qu'on peut lire dans la documentation en ligne à propos des procédures.
    http://docs.oracle.com/cd/B19306_01/...4258/d_job.htm
    Security Model

    No specific system privileges are required to use DBMS_JOB. No system privileges are available to manage DBMS_JOB. Jobs cannot be altered or deleted other than jobs owned by the user. This is true for all users including those users granted DBA privileges.

    You can execute procedures that are owned by the user or for which the user is explicitly granted EXECUTE. However, procedures for which the user is granted the execute privilege through roles cannot be executed.

    Note that, once a job is started and running, there is no easy way to stop the job.

    Cordialement,
    Dariyoosh

  6. #6
    Membre averti
    Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 37
    Par défaut
    Citation Envoyé par dariyoosh Voir le message
    C'est à dire pour une connexion FTP afin de mettre un script OS sur le serveur et créer un batch il faut payer davantage à l'administrateur système?? normalement ça fait partie de ces tâches quotidiennes !
    Les procédures pour faire appel aux DBA sont très couteuse chez mon client.
    Il faut faire une demande le jeudi (uniquement), elle est ensuite analysée, puis soit validée soit refusée et chiffrée pour le mardi suivant, soit 4 jours de perdus... De plus, un jour DBA me coutera plus cher que 2 jours de dév...
    En résumé, ma seule alternative est de me passer du DBA.

    Citation Envoyé par dariyoosh Voir le message
    Voici ce qu'on peut lire dans la documentation en ligne à propos des procédures.
    http://docs.oracle.com/cd/B19306_01/...4258/d_job.htm
    J'avais déjà lu les docs oracle avant de poser ma question ici.
    Ma procedure est incluse dans un package (ex: PACK_PDTSEC.GETPDTBYSEC, qui par exemple va me faire un select de produits par secteur et insérer les résultats dans une table), cela change-t-il quelque chose pour DBMS_JOB ?

    Merci.

  7. #7
    Membre expérimenté Avatar de dariyoosh
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 236
    Par défaut
    Citation Envoyé par HakunA59 Voir le message
    Ma procedure est incluse dans un package (ex: PACK_PDTSEC.GETPDTBYSEC, qui par exemple va me faire un select de produits par secteur et insérer les résultats dans une table), cela change-t-il quelque chose pour DBMS_JOB ?
    A ma connaissance (à vérifier) on ne peut pas faire un GRANT EXECUTE seulement sur une procédure parmi d'atures définies dans un package. Mais pourquoi ne pas créer directement au niveau du schéma cette procédure?

    Citation Envoyé par HakunA59 Voir le message
    En résumé, ma seule alternative est de me passer du DBA.
    Quant à la lecture du fichier, de toute façon c'est sûr qu'il faut passer au moins une fois par le DBA, pour créer le DIRECTORY au niveau oracle où le script va chercher le fichier soit par la méthode external table soit en utilisant le package UTL_FILE.

    Citation Envoyé par HakunA59 Voir le message
    Les procédures pour faire appel aux DBA sont très couteuse chez mon client. Il faut faire une demande le jeudi (uniquement), elle est ensuite analysée, puis soit validée soit refusée et chiffrée pour le mardi suivant, soit 4 jours de perdus... De plus, un jour DBA me coutera plus cher que 2 jours de dév...
    Juste à titre indicatif, il faudrait peut-être revoir les termes du contrat avec ce prestataire


    Cordialement,
    Dariyoosh

Discussions similaires

  1. [2012] Exécution package SSIS via l' Agent SQL Server
    Par B.Simo dans le forum SSIS
    Réponses: 7
    Dernier message: 21/06/2013, 16h11
  2. [Oracle SQL Developer] Découvrez le nouvel outil d'Oracle
    Par Jaouad dans le forum Sql Developer
    Réponses: 94
    Dernier message: 30/03/2011, 13h09
  3. Problème d'exécution de sql developer
    Par agossa dans le forum Sql Developer
    Réponses: 0
    Dernier message: 03/02/2010, 14h52
  4. Doc PL/SQL Developer
    Par popysan dans le forum PL/SQL
    Réponses: 2
    Dernier message: 11/03/2006, 17h45
  5. Utilisation de pl/sql developer
    Par dakj dans le forum PL/SQL
    Réponses: 2
    Dernier message: 27/10/2005, 22h31

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