PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2025 → paramètres de connection accés natif Oracle.
paramètres de connection accés natif Oracle.
Débuté par frederic.braga, 23 déc. 2004 16:09 - 3 réponses
Posté le 23 décembre 2004 - 16:09
Bonjour,
J'aimerai savoir s'il est possible de paramétrer un session oracle pour gerer les COMMIT ou aussi les ROLLBACK SEGMENT.
Je pense que la solution est peut etre dans la commande HDECRITCONNEXION mais je n'ai pas trouvé la syntaxe appropriée.

Merci de votre aide
Posté le 27 décembre 2004 - 11:48
Le Commit et automatique.
Pour gérer Commit ou Rollback dans Oracle, il faut utiliser le script natif oracle tel que l'exemple ci_dessous :

MaRequete est chaine = "Declare "+...
"valtxt varchar2(5); "+...
"Begin "+...
"Update Monfichier "+...
"Set Monchamp1 = "+Quote(Champ1)+", "+...
" Monchamp2 = "+Quote(Champ2)+...
" Where Macle = "+Quote(ChampCle)+";"+...
" If sql%found then "+...
" Commit; "+...
" End if; "+...
" End;"
SI PAS SQLExec(MaRequete,"REQUPD") ALORS
SQLErreur("REQUPD",MaRequete)
FIN
SQLFerme("REQUPD")

On peut aussi utiliser :
SQLTransaction(SQLDébut)
SQLTransaction(sqlFin)
pour marquer le debut et la fin d'une transaction

et pour annuler une transaction par :
SQLTransaction(sqlAnnule)
Posté le 27 décembre 2004 - 20:52
Bonjour,

> Le Commit et automatique.

Non ! il faut le définir en tant que tel pour la session active. Imaginez un
peu les dégats avec de multiples updates et un arret en pleine session avec
un "autocommit on" bonjour les dégats !

Pour gérer Commit ou Rollback dans Oracle, il faut utiliser le script

natif oracle tel que l'exemple ci_dessous :

MaRequete est chaine = "Declare "+...
"valtxt varchar2(5); "+...
"Begin "+...
"Update Monfichier "+...
"Set Monchamp1 = "+Quote(Champ1)+", "+...
" Monchamp2 = "+Quote(Champ2)+...
" Where Macle = "+Quote(ChampCle)+";"+...
" If sql%found then "+...
" Commit; "+...
" End if; "+...
" End;"
SI PAS SQLExec(MaRequete,"REQUPD") ALORS
SQLErreur("REQUPD",MaRequete)
FIN
SQLFerme("REQUPD")


Pour moi si vous partez dans l'écriture de bloc pl/sql anonyme (votre
exemple), autant aller jq au bout ! utilisez des procédures stockées pour
tous vos ordres de communication avec la base. L'avantage non négligeable
c'est que tout est géré au niveau de la base. Code unique, encapsulation des
fonctions, les développeurs ne voientt plus que des procédures PL/SQL :
gestion de l'intégrité (au niveau sécurité) de la base élevée.

Pöur info, de tête le sql%found n'est valorisé que pour les ordres select je
crois, c'est le sql%rowcount qui est valorisée dans un update.

On peut aussi utiliser :
SQLTransaction(SQLDébut)
SQLTransaction(sqlFin)
pour marquer le debut et la fin d'une transaction

et pour annuler une transaction par :
SQLTransaction(sqlAnnule)


Pour revenir à la question initiale, Frédéric, peux-tu expliquer ton besoin
car la réponse de Paul Le concerne la gestion commit/rollback mais
l'utilisation d'un RBS spécialisé (utilisation spécifique d'un RBS au lieu
des 4 RBS standard) dans une session exige une réponse d'un autre ordre.

Bien Cordialement,

--
Emmanuel Lecoester
Posté le 28 décembre 2004 - 11:36
En reponse à Emmanuel Lecoester , merci de corriger des erreurs que j'ai commis.
J'utilise les 2, bloc anonyme et procedure stocke en fonction des besoins. En fait je n'utilise pas commit ou rollback etant donne que dans une session elle est automatiquement en commit. L'avantage du bloc anonyme est que je peux dans le cas d'un update de prendre les champs qui ont ete changes or dans une procedure stockee les champs sont figes, d'autre part je ne vois pas de difference entre une procedure stockee et un bloc anonyme car la base traite de la meme facon c'est à dire elle fait le meme controle avant de valider la session.

Je ne sais pas si ca existe sous oracle pour valider ou annuler un bloc entier comme dans sqlserver c'est à dire :
declarer une transaction, valider ou annuler cette transaction.

TRANSACTION nomtransaction
creation
mise a jour
etc...
suivant les resultats on peut valider par
COMMIT TRANSACTION nomtransaction
ou annuler par
ROLLBACK TRANSACTION nomtransaction

Est ce que sous oracle le commit ou rollback en fin de bloc valide ou annule le bloc entier, je n'ai pas encore fait l'essai.

Bien Cordialement.