Vous trouverez ci-dessous la table dans laquelle ID column is Primary Key
. Et les deux autres colonnes sont des chaînes. J'utilise une nouvelle base de données nommée XpressMP
.Procédure stockée pour la fonctionnalité UPSERT
Column Name
-------
ID PrimaryKey
SEARCHES String
ACCOUNT String
Je suis en train de réaliser la fonctionnalité de UPSERT
ici-
If ID doesn't exists here then insert a new record.
And ID exists then update the record.
Je sais que si je travaille avec Oracle, je peux alors utiliser MERGE
commande SQL mais MERGE
est pas pris en charge dans cette base de données et il est pas d'autre commande pour ça dès maintenant. Mais je crois que je peux faire la même chose avec Stored Procedure
.
Quelqu'un peut-il fournir des suggestions comment puis-je faire la même chose avec la procédure stockée? Comme procédure stockée travaillera là.
Mis à jour: -
public final static String INSERT = "BEGIN"
+" INSERT INTO TABLE (ID, SEARCHES, ACCOUNT) VALUES (?, ?, ?)"
+" EXCEPTION"
+" WHEN DUP_VAL_ON_INDEX THEN"
+" UPDATE TABLE"
+" SET SEARCHES = ?, ACCOUNT = ?"
+" WHERE ID = ?"
+" END";
Chaque fois que je tente d'exécuter la procédure stockée ci-dessus comme celui-ci
preparedStatement = dbConnection.prepareStatement(INSERT);
preparedStatement.setString(1, String.valueOf(userId));
preparedStatement.setString(2, Constants.getaAccount(userId));
preparedStatement.setString(3, Constants.getaAdvertising(userId));
preparedStatement.executeUpdate();
Je me exception? Est-ce la bonne façon de l'exécuter?
Merci Orangecrush pour l'aide. Jetez un oeil dans 'DUP_VAL_ON_INDEX'. Comme je vais utiliser Java pour appeler cette procédure stockée.J'ai donc modifié votre SP pour que ça fonctionne. 'BEGIN INSERT DANS TABLE (ID, RECHERCHES, COMPTE) VALEURS (?,?,?); EXCEPTION QUAND DUP_VAL_ON_INDEX PUIS MISE À JOUR TABLEAU SET SEARCHES =?, ACCOUNT =? O WH ID =?; FIN; '. Cela devrait fonctionner correctement? Comme je remplis ... avec? marque. –
@FarhanJamal Oui, devrait fonctionner si vous manipulez la variable correctement dans Java en appelant cette procédure. Essaie. Ont également donné édité et provied un code plus simple à comprendre, si vous voulez essayer celui-là. Mais je suggère d'utiliser 'DUP_VAL_ON_INDEX'. – Orangecrush
@FarhanJamal Je suppose que vous appellerez ce SP de java en utilisant 'SP (?,?,?)'. Vous ne pouvez pas utiliser '?' Pour une valeur de variable dans une procédure PL/SQL. – Orangecrush