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

Fermé
David__3403 Messages postés 1 Date d'inscription mercredi 2 octobre 2019 Statut Membre Dernière intervention 2 octobre 2019 - 2 oct. 2019 à 21:42
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 - 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.
A voir également:

1 réponse

Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
Modifié le 4 oct. 2019 à 11:35
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
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
4 oct. 2019 à 11:40
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.
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
4 oct. 2019 à 11:41
0