IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement SQL Server Discussion :

fonctionnalité "Returning Into"


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 44
    Par défaut fonctionnalité "Returning Into"
    bonjour les amis,

    je suis entrain de developper une application web en utilisant oracle jdev sur une base de données SQL Server 2005, j'ai une interface qui me permet d'introduire des données dans une table avec un champ "auto increment", le souci c'est que je n'arrive pas à récuperer la valeur de l'identificateur dans mon formulaire juste aprés l'insertion, sachant que j'arrive à le faire avec oracle et mysql...

    quand j'ai posté ce problème sur le forum de jdev, on m'a expliqué que c'est du au fait que sql server ne supporte pas le "Returning Into", maintenant j'aimerai d'abord savoir qu'est ce que cela signifie, et si vraiment Sql Server ne le supporte pas ??

    Merci d'avance.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 22 010
    Billets dans le blog
    6
    Par défaut
    Returning into n'existe pas en SQL...
    Chaque SGBDR à son mode de récupération du dernier auto incrément car la norme n'a pas clairement statué là dessus.

    Lisez l'article que j'ai écrit à ce sujet : http://blog.developpez.com/sqlpro/p6...ec-sql-server/

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 44
    Par défaut
    Bonjour SQLpro,

    en jdev il y'a une méthode qui nous permet de déterminer le traitement à faire pour recuperer la valeur d'un champ particulier, voici le code de cette méthode en java, elle marche très bien sur MySQL et pas sur SQL Server :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    protected void doDML(int operation, TransactionEvent e) {
            super.doDML(operation, e);
          String currentViewName = getEntityDef().getName();
     
          if ( operation == DML_INSERT) {
     
          PreparedStatement stmt = this.getDBTransaction().createPreparedStatement("SELECT last_insert_id()",1);
          try {
          stmt.execute();
          ResultSet rs = stmt.getResultSet();
          if ( rs != null ){
          rs.first();
          System.out.println(rs.first());
          setAttribute("id",new oracle.jbo.domain.DBSequence(rs.getBigDecimal(1)));
          }
          } catch (SQLException ex) {
          ex.printStackTrace();
          }
          }
        }
    }

    bien sur j'ai remplacé la fonction "last_insert_id()" de mysql par la fonction "SCOPE_IDENTITY()", en execution j'ai le message d'erreur suivant :
    com.microsoft.sqlserver.jdbc.SQLServerException: L'opération demandée n'est pas prise en charge pour les jeux de résultats avant uniquement

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 056
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 056
    Par défaut
    l'erreur en français n'est pas très claire. Il s'agit de "The requested operation is not supported on forward only result ". Il te faut donc changer le type de ResultSet dans ta création du prepared statement, du style :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PreparedStatement stmt = this.getDBTransaction().createPreparedStatement("SELECT last_insert_id()",ResultSet.TYPE_SCROLL_INSENSITIVE)
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PreparedStatement stmt = this.getDBTransaction().createPreparedStatement("SELECT last_insert_id()",2)

  5. #5
    Membre averti
    Inscrit en
    Décembre 2009
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 44
    Par défaut
    bonjour emmanuel,

    je viens de tester ce que vous m'avez donner, mais j'ai toujours le meme message d'erreur....

    j'ai meme testé avec scope_identity() et ident_current('table') mais toujours le meme problème.

    Merci pour ton aide.

  6. #6
    Membre éprouvé

    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 448
    Par défaut
    SCOPE_IDENTITY() ne te sera utile que tu si fait tes insertions une à une.
    Sinon il va te falloir lorgner du côté des clauses OUTPUT des DML.

Discussions similaires

  1. Quote et double quote
    Par aktos dans le forum Langage
    Réponses: 8
    Dernier message: 05/01/2007, 19h55
  2. Equivalents de EXECUTE IMMEDIATE ... RETURNING INTO ... ?
    Par swirtel dans le forum Langage SQL
    Réponses: 4
    Dernier message: 31/05/2005, 10h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo