Exécution de la procédure stockée via java et sqlpls

Messages postés
1
Date d'inscription
mercredi 2 octobre 2019
Statut
Membre
Dernière intervention
2 octobre 2019
- - Dernière réponse : Reivax962
Messages postés
3485
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
14 octobre 2019
- 4 oct. 2019 à 11:41
Bonjour,

L’exécution de ma procédure via java met 2 secondes pour insérer environ 5000 lignes en base :
try
{
string procedure = "begin myprocedure (?,?,?); end ;";
conn = DBManager.getConnection();
statement =conn.prepareCall(procedure);

for (int i=0 , i< flowList.length; i++ {
statement.setString (1, SEID);
statement.setString (2, flowList[i]);
statement.setString (3, SIID);
…...
}
Par contre l’exécution via sql plus prend 10 minutes, est-ce qu’il y a moyen d’optimiser ma procédure via sql plus ?
#/bin/ksh

while read flowList; do

$ORACLE_HOME/bin/sqlplus -s $conexion<<FOF
set serveroutput on
whenever sqlerror exit.SQL.SQLCODE
exec myprocedure ($SEID,$flowList,$SIID);
FOF
done <"${fic}"
Merci pour votre aide.
Afficher la suite 

1 réponse

Messages postés
3485
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
14 octobre 2019
915
0
Merci
Bonjour,

Je ne connais pas trop les outils que tu utilises, mais, à première vue, il me semble que dans ton script sh, tu ré-établis la connexion à chaque itération de ta boucle.
Est-ce que tu ne peux pas placer le while...done juste autour du exec ?

Comme ça :
#/bin/ksh

$ORACLE_HOME/bin/sqlplus -s $conexion<<FOF
set serveroutput on
whenever sqlerror exit.SQL.SQLCODE

while read flowList; do
    exec myprocedure ($SEID,$flowList,$SIID);
done <"${fic}"

FOF


Xavier
Reivax962
Messages postés
3485
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
14 octobre 2019
915 -
Mmmh, en relisant, je vois que ça ne pourra pas aller parce qu'entre les balises FOF, j'imagine que tu n'attends que des instructions SQL, docn pas le WHILE.
Mais le problème est pourtant bien là, je pense : le fait de réétablir 5000 fois la connexion.
Il faudrait trouver une instruction Oracle pour parcourir les lignes d'un fichier, ça existe sûrement.
Reivax962
Messages postés
3485
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
14 octobre 2019
915 -
Commenter la réponse de Reivax962