2010-11-24 5 views
0


J'ai utilisé une simple instruction SQL à des fins de test s'il est possible de créer une fonction de table via java.
Cependant, la création de la fonction prend beaucoup de temps à se terminer et les autres utilisateurs db expirent.
Des pensées?
J'utilise SQLServer 2008 expresscréer une table SQL Server fonction thru java

try { 
     Statement statement = conn.createStatement(); 
     CallableStatement cs ; 
     String retValue ; 
     cs = conn.prepareCall("{? = call dbo.isTableFunctionExists(?)}"); 
     cs.registerOutParameter(1, Types.INTEGER); 
     lcString = "PAY_UDTF_"+this.textField1.getValue().toString() ; 
     cs.setString(2, lcString); 
     cs.execute(); 
     retValue = cs.getString(1); 
     if (retValue.equals("1")) { 
      System.out.println("EXISTS"); 
      lcSql = " ALTER "; 
     }else{ 
      System.out.println("NOT FOUND"); 
      lcSql = " CREATE "; 
     } 
     lcSql = lcSql + " FUNCTION [dbo].[" ; 
     lcSql = lcSql + lcString +"] (@pDate date)"; 
     lcSql = lcSql + " RETURNS TABLE AS RETURN ("; 
     lcSql = lcSql + " SELECT * FROM dbo.HR_EMPLOYMENT hre "; 
     lcSql = lcSql + " Where @pDate between hre.effective_start_date and hre.effective_end_date) "; 
     //statement.execute(lcSql); 
     statement.executeUpdate(lcSql); 
     statement.close(); 
     System.out.println("COMPLETED"); 
    } catch (Exception e) { 
     System.out.println("EXCEPTION"+e); 
    } 

    return null; 

Toute aide est très appréciée.

Merci,

Elmer

+0

Quel pilote base de données utilisez-vous? Avez-vous essayé de le changer? Savez-vous où est le goulot d'étranglement? Est-ce dans SQL Server - essayez d'exécuter wireshark pour voir à coup sûr. – javamonkey79

+0

J'utilise Microsoft SQL Server JDBC Driver 2.0. J'ai essayé de créer la fonction dans sql server management studio et ça a bien fonctionné. Je ne suis pas familier avec wireshark cependant. – Elmer

Répondre

0

Il y a une ligne qui définit le conn.setAutoCommit (false);
A la fin de la création de la fonction, j'émets simplement conn.commit();

Un grand merci en tout cas ....

Elmer

Questions connexes