Exécution de la procédure stockée via java et sqlpls
David__3403
Messages postés
1
Statut
Membre
-
Reivax962 Messages postés 3742 Statut Membre -
Reivax962 Messages postés 3742 Statut Membre -
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.
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.
1 réponse
-
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-
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. -
Tu peux t'inspirer de ça, sans doute :
https://stackoverflow.com/questions/14823382/read-text-file-to-insert-data-into-oracle-sql-table
-