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

Développement SQL Server Discussion :

Appel d'un programme java par SQL Server [2014]


Sujet :

Développement SQL Server

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 7
    Points : 4
    Points
    4
    Par défaut Appel d'un programme java par SQL Server
    Bonjour,

    Je suis nouveau sur sql server, et je me posais une question :

    Est-il possible de lancer un programme java à chaque fois qu'un insert soit fait dans une table ( en envoyant au passage à ce programme la valeur des champs insérés )
    J'ai pensé forcément à un trigger, mais ensuite comment lancer le programme java ?

    Merci d'avance pour toute piste !

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 571
    Points
    52 571
    Billets dans le blog
    5
    Par défaut
    Vous pouvez passer par la procédure stockée xp_cmdshell qui permet de lancer une commande système, par exemple un exécutable.
    ATTENTION : pour utiliser la procédure xp_cmdshell, il vous faut que cela soit permis au niveau de l'instance. Vérifiez à l'aide de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM sys.configurations WHERE name = 'xp_cmdshell'
    SI la "value" est 1 vous pouvez, sinon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    EXEC sp_configure 'xp_cmdshell', 1;
    GO
    RECONFIGURE;
    Effectivement cela peut être fait dans un déclencheur, mais il faut impérativement que le temps de traitement de ce programme soit minimal, car le temps d'exécuter le trigger, les verrous exclusif sont maintenus sur les objets en cours de mise à jour... Si tel n'est pas le cas, ré étudiez la chose sous l'angle asynchrone (tâche planifiée de l'Agent SQL après ajout d'une information dans une table, scrutant les données de ladite table).

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Merci de votre réponse.

    Cependant, le temps de traitement de mon programme devrait être relativement long. Lorsque vous dites que les verrous exclusifs sont maintenus, cela signifie qu'aucun ajout n'est possible sur la table tant que le programme n'est pas terminé pour l'insert précédent ?

    Je n'ai jamais utilisé l'agent SQL. Est-il possible, en gros, de faire en sorte qu'un insert reste possible durant le temps de traitement, mais que le traitement par mon programme pour ce nouvel insert attende la fin du précédent ? Je ne sais pas si je suis très clair...

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 768
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 768
    Points : 52 571
    Points
    52 571
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par wilcul Voir le message
    Merci de votre réponse.

    Cependant, le temps de traitement de mon programme devrait être relativement long. Lorsque vous dites que les verrous exclusifs sont maintenus, cela signifie qu'aucun ajout n'est possible sur la table tant que le programme n'est pas terminé pour l'insert précédent ?
    Pas tout à fait.... SQL Server ne bloque que les ressources minimales, autrement dit la ligne en cours de mise à jour (cas de l'update) ou la nouvelle ligne (cas de l'inesrt). Ceci peut quand même empêcher des reuquêtes plus globales comme un SELECT COUNT(*) FROM MaTable.

    Je n'ai jamais utilisé l'agent SQL. Est-il possible, en gros, de faire en sorte qu'un insert reste possible durant le temps de traitement, mais que le traitement par mon programme pour ce nouvel insert attende la fin du précédent ? Je ne sais pas si je suis très clair...
    Il vaudrait mieux prévoir une méthode par verrouillage pessimiste. Par exemple une colonne supplémentaire dans la table qui indique si la ligne est en cours de traitement. Imaginons une colonne de nom LOCK_FOR_BATCH prenant les valeurs 0 et 1.
    Lors de l'insertion d'une nouvelle version cette colonne vaut NULL. Toutes les minutes une tâche de l'Agent SQL capture les lignes avec LOCK_FOR_BATCH IS NULL et lance le traitement en mettant la valeur 1 à LOCK_FOR_BATCH. Une fois le traitement achevé (retour d'exécutable nécessaire) la valeur est passée à 0 pour LOCK_FOR_BATCH

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Novembre 2014
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Merci beaucoup !

    Je n'ai jamais fait ça mais au moins j'ai compris le principe, ça devrait le faire Je mets la discussion en résolue

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Appel d'un programme JAVA depuis une procedure PL/SQL
    Par farenheiit dans le forum PL/SQL
    Réponses: 8
    Dernier message: 04/03/2008, 11h03
  2. java et sql server
    Par vijeo dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 28/10/2005, 09h57
  3. Démarrage d'une macro par SQL Server
    Par PiercingDegree dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 28/09/2005, 09h13
  4. fonction utilisateur non reconue par sql server 2000
    Par ouedmouss dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 05/09/2005, 07h46
  5. Table ASCII utilisée par SQL Server
    Par Oluha dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 29/06/2005, 14h31

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