Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2791 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Recherche Procedures Stockes desesperement

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Recherche Procedures Stockes desesperement

n°592321
PETOZAK
Posté le 17-12-2003 à 09:49:27  profilanswer
 

Voila mon probleme est simple j'aimerais savoir comment faire un  
multi INSERT avec une Store Proc:
Ma requete aurais cette forme
INSERT INTO MyTable (Champ Fixe,Variable) values of ('toto',x)
toto etant une valeur constante a inserer pour toutes les requetes (mais passer en parametre a ma store proc c'est un ID) et x etant un ensemble de valeur a associer a mon ID la table aurai cette gueule:
------------------------------------
ID             Avions
1                747
1                737
1                707
1                100  
2                AB6  
2                747
Donc pour resumer je veux envoyer a ma store Proc un ID et un ensemble d'avions (1;747,737,707,100) comment ecrire une telle strore proc?


Message édité par PETOZAK le 17-12-2003 à 09:51:34
mood
Publicité
Posté le 17-12-2003 à 09:49:27  profilanswer
 

n°592328
nerisson
Pic-pic
Posté le 17-12-2003 à 10:01:52  profilanswer
 

Fo passer par une table temporaire.
Tu la cree et tu la remplis avec tes avions, puis tu appelle ta proc stock, puis tu detruit la table.


---------------
Light is right
n°592339
PETOZAK
Posté le 17-12-2003 à 10:20:12  profilanswer
 

et ca donne quoi en language Store Proc?
Comment fais tu pour remplir ta table temp avec plusieurs avions?


Message édité par PETOZAK le 17-12-2003 à 10:21:11
n°592351
nerisson
Pic-pic
Posté le 17-12-2003 à 10:37:08  profilanswer
 

Alors pour ecrire ta proc stock, ca doit donner un truc comme ca:

Code :
  1. create table ##TMP_avion
  2. (avion integer not null)
  3. create proc nomDeMaProc
  4.   @id integer
  5. as begin
  6.   -- bla bla des verifications
  7.   insert MyTable
  8.          (ChampFixe,
  9.           Variable)
  10.   select @id,
  11.          avion
  12.   from   #TMP_avion
  13. end
  14. drop table ##TMP_avion


 
Ensuite pour l'appeler:

Code :
  1. create table ##TMP_avion
  2. (avion integer not null)
  3. insert ##TMP_avion (avion) values (747)
  4. insert ##TMP_avion (avion) values (737)
  5. insert ##TMP_avion (avion) values (707)
  6. exec nomDeMaProc 123
  7. drop table ##TMP_avion


 
Un truc dans le genre quoi...  :wahoo:


---------------
Light is right
n°592361
PETOZAK
Posté le 17-12-2003 à 11:02:42  profilanswer
 

Merci

n°592364
nraynaud
lol
Posté le 17-12-2003 à 11:14:28  profilanswer
 

la syntaxe des table temporaires ressemble plutôt à ça :

Code :
  1. CREATE GLOBAL TEMPORARY TABLE TEST(name varchar2(20)) on commit delete rows;


(à adapter à ton cas, tel que "delete table" ou table pas globale etc.)
D'autant plus que si la base est bien administrée, l'utilisateur ne pourra pas créer une table normale.


---------------
trainoo.com, c'est fini
n°592372
chaica
Posté le 17-12-2003 à 11:37:36  profilanswer
 

Quel sgbd?

n°592646
PETOZAK
Posté le 17-12-2003 à 17:54:27  profilanswer
 

SQL 2000

n°593202
PETOZAK
Posté le 18-12-2003 à 11:22:24  profilanswer
 

au fait je voulais plutot une Storeproc qui prennet un ensemble d'avion donc plutot que:
  insert ##TMP_avion (avion) values (747)
  insert ##TMP_avion (avion) values (737)
  insert ##TMP_avion (avion) values (707)
un truc pas mal serait de passer (747,737,707) en une fois  

n°593342
nerisson
Pic-pic
Posté le 18-12-2003 à 12:28:50  profilanswer
 

PETOZAK a écrit :

au fait je voulais plutot une Storeproc qui prennet un ensemble d'avion donc plutot que:
  insert ##TMP_avion (avion) values (747)
  insert ##TMP_avion (avion) values (737)
  insert ##TMP_avion (avion) values (707)
un truc pas mal serait de passer (747,737,707) en une fois  


C pas possible....


---------------
Light is right
mood
Publicité
Posté le 18-12-2003 à 12:28:50  profilanswer
 

n°593392
PETOZAK
Posté le 18-12-2003 à 12:59:44  profilanswer
 

tu es sur Nerisson on m'a dit que l'on pouvait passer un tableau a une Store Proc (en Java du moins),qu'en pense tu?


Message édité par PETOZAK le 18-12-2003 à 12:59:57
n°593460
nerisson
Pic-pic
Posté le 18-12-2003 à 14:13:12  profilanswer
 

Euh... non je ne crois pas que ca soit possible.
Par contre si tu fait un appel Java a cette procedure, je peut te donner un exemple de code Java pour appeler cet proc avec une table temporaire.


---------------
Light is right
n°593471
PETOZAK
Posté le 18-12-2003 à 14:28:26  profilanswer
 

ce serait sympas :) merci

n°593477
nerisson
Pic-pic
Posté le 18-12-2003 à 14:31:13  profilanswer
 

Exemple:

Code :
  1. public synchronized void ajouteListeUniversReference(final Integer[] idUnivers, final Integer[] idReference, final Integer user) throws SQLException {
  2.     /* Recupere une connexion */
  3.     final Connection connection = getConnection();
  4.     final String tmpTableName = "##TMP_BKT_ajouteListeUniversReference";
  5.     try {
  6.       /* Creation de la table temporaire */
  7.       final String tableCreation = "create table " + tmpTableName + " " +
  8.           "(IdReference integer not null," +
  9.           " IdUnivers   integer not null)";
  10.       final PreparedStatement preparedStatement = connection.prepareStatement(tableCreation);
  11.       try {
  12.         final int nb = preparedStatement.executeUpdate();
  13.       } finally {
  14.         preparedStatement.close();
  15.       }//end try
  16.       /* Remplissage de la table temporaire */
  17.       final Statement statement = connection.createStatement();
  18.       try {
  19.         statement.clearBatch();
  20.         for(int i=0;i<idReference.length;i++) {
  21.           final StringBuffer buffer = new StringBuffer(200);
  22.           buffer.append("insert ##TMP_BKT_ajouteListeUniversReference values(" );
  23.           buffer.append(idReference[i].intValue()).append("," );
  24.           buffer.append(idUnivers[i].intValue()).append(" )" );
  25.           statement.addBatch(buffer.toString());
  26.         }//end for
  27.         statement.executeBatch();
  28.       } finally {
  29.         statement.close();
  30.       }//end try
  31.       /* Prepare l'appel de la procedure */
  32.       final String query = "{?=call BKT_ajouteListeUniversReference;1 ?}";
  33.       final CallableStatement callableStatement = connection.prepareCall(query);
  34.       try {
  35.         /* Parametres de la procedure */
  36.         callableStatement.registerOutParameter(1, java.sql.Types.INTEGER);
  37.         register(callableStatement, user, 2);
  38.         /* Execute la procedure */
  39.         callableStatement.execute();
  40.         /* Recupere le code de retour */
  41.         final int returnValue = callableStatement.getInt(1);
  42.         switch(returnValue) {
  43.           case 0:  // OK
  44.             break;
  45.           case 1:  // Erreur interne
  46.             internalError(query, returnValue);
  47.           case 2:  // Utilisateur inconnu
  48.             unknowUser(query, returnValue, user);
  49.           default: // Code de retour inconnu
  50.             unknowCode(query, returnValue);
  51.         }//end switch
  52.       } finally {
  53.         callableStatement.close();
  54.       }//end try
  55.     } finally {
  56.       dropTable(connection, tmpTableName);
  57.       unlockConnection(connection);
  58.     }//end try
  59.   }//end ajouteListeUniversReference


Ca ne compilera pas car il manque des methodes, mais je pense que tu pourra sans probleme les remplacer  :)


---------------
Light is right
n°593503
PETOZAK
Posté le 18-12-2003 à 14:55:13  profilanswer
 

Je viens d'avoir une idee en lisant ton code:
je peux creer un batch qui ferait:
1)effacer la liste de Aircrafts associes a un ID passer en param du delete
2)executer les INSERTs
C'est possible?
un batch avec un sous batch delete et autant de sous batch INSERT qu'il y a de Aircrafts a ajouter?

n°593516
nerisson
Pic-pic
Posté le 18-12-2003 à 15:22:30  profilanswer
 

Tu parles de batch JDBC ?
Si oui, un batch JDBC est fait pour envoyer un grand nombre de requetes au SGBD donc tu peut tres bien encapsuler tout ca dans une methode Java.


---------------
Light is right
n°593518
PETOZAK
Posté le 18-12-2003 à 15:26:16  profilanswer
 

Mais c'est Zuper :) j'apprend un truc pas mal merci !

n°593519
PETOZAK
Posté le 18-12-2003 à 15:26:33  profilanswer
 

C'est en plus je pense plus adapte a ce que je fais non?


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Recherche Procedures Stockes desesperement

 

Sujets relatifs
Recherche mod_rewrite.so pour ApacheRecherche librairie pour traiter des fichiers PDF
recherche un petit script pour un forum compatible wap et ++[DB2] Réserver de la mémoire avec des procédures stockées DB2 Cobol
3 semaines de recherche --> tjs pas de solutions pour ce prob. de dllje recherche un article dans un magazine
recherche fichier excel 5[Java]Recherche un composant swing
Recherche labyrinthe....Recherche de doublon ORACLE?
Plus de sujets relatifs à : Recherche Procedures Stockes desesperement


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR