Merge oracle

Le
tjfromparis
Bonjour

je ne sais pas si beaucoup d'entre vous travaille avec des bases
oracle
Je suis en train de me faire la main sur le merge oracle et ca
simplifie énormément le code.

PROCEDURE UPSERT_BUDGET(oBudget est un c_Budget)

_retFonction est un booléen

_sql est une chaîne
_sql += " merge into BUDGET using (select 1 from dual) ori on
(BUDGET.ID_BUDGET = '%1') "
_sql += " when matched then update set BUDGETLIBELLE = '%2' "
_sql += "when not matched then Insert (ID_BUDGET , BUDGETLIBELLE )
values ( '%1' , '%2' ) ; "

_sql = ChaîneConstruit(_sql,oBudget.ID_BUDGET,oBudget.BudgetLibelle)

_retFonction = otl4WD:mySQLExec(_sql, 1)

IF (_retFonction) THEN
otl4WD:mySQLFerme(1)
_retFonction = otl4WD:mySQLExec("COMMIT",1)
IF (_retFonction) THEN
// rien juste renvoyer code retour
SINON
msg est une chaîne = (otl4WD:mySQLGetErrorMessage())
LOG(msg )
END
ELSE
Erreur(otl4WD:mySQLGetErrorMessage())
END

otl4WD:mySQLFerme(1)

RENVOYER _retFonction


Entre le dataBinding de windev et le merge d'oracle le nombre de code
diminue dans des proportions assez impressionnante.

Quand j'aurais un peu de temps, je vais voir pour une construction
dynamique de la requete de MERGE en fonction de la description de la
table et de la classe.

Si ca peut faire gagner du temps à quelqu'un
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Firetox
Le #21384831
Bonjour,

juste pour info car je vois quelque chose qui ne va pas dans votre code sur
OTL4WD il faut fermer la requete quelque soit le resultat du exec (les 2 ne
sont pas liés)

_sql = ChaîneConstruit(_sql,oBudget.ID_BUDGET,oBudget.BudgetLibelle)
_retFonction = otl4WD:mySQLExec(_sql, 1)
otl4WD:mySQLFerme(1)

IF (_retFonction) THEN
_retFonction = otl4WD::mySQLTransaction((otl4WD::mySQLFin), 1)
IF pas (_retFonction) THEN
msg est une chaîne = (otl4WD:mySQLGetErrorMessage())
LOG(msg )
END
ELSE
Erreur(otl4WD:mySQLGetErrorMessage())
END

RENVOYER _retFonction

voila juste pour optimiser les lignes de code et le fonctionnement
pour eviter de se trouver avec une requete ouverte et faire des mySQLFerme
un peu partout

cordialement


news:
Bonjour

je ne sais pas si beaucoup d'entre vous travaille avec des bases
oracle...
Je suis en train de me faire la main sur le merge oracle et ca
simplifie énormément le code.

PROCEDURE UPSERT_BUDGET(oBudget est un c_Budget)

_retFonction est un booléen

_sql est une chaîne
_sql += " merge into BUDGET using (select 1 from dual) ori on
(BUDGET.ID_BUDGET = '%1') "
_sql += " when matched then update set BUDGETLIBELLE = '%2' "
_sql += "when not matched then Insert (ID_BUDGET , BUDGETLIBELLE )
values ( '%1' , '%2' ) ; "

_sql = ChaîneConstruit(_sql,oBudget.ID_BUDGET,oBudget.BudgetLibelle)

_retFonction = otl4WD:mySQLExec(_sql, 1)

IF (_retFonction) THEN
otl4WD:mySQLFerme(1)
_retFonction = otl4WD:mySQLExec("COMMIT",1)
IF (_retFonction) THEN
// rien juste renvoyer code retour
SINON
msg est une chaîne = (otl4WD:mySQLGetErrorMessage())
LOG(msg )
END
ELSE
Erreur(otl4WD:mySQLGetErrorMessage())
END

otl4WD:mySQLFerme(1)

RENVOYER _retFonction


Entre le dataBinding de windev et le merge d'oracle le nombre de code
diminue dans des proportions assez impressionnante.

Quand j'aurais un peu de temps, je vais voir pour une construction
dynamique de la requete de MERGE en fonction de la description de la
table et de la classe.

Si ca peut faire gagner du temps à quelqu'un...
tjfromparis
Le #21384901
c'est parce que je n'ai pas fais le copier/coller jusqu'au bout mais
je ferme bien mes requetes.

On 16 mar, 08:47, "Firetox"
Bonjour,

juste pour info car je vois quelque chose qui ne va pas dans votre code s ur
OTL4WD il faut fermer la requete quelque soit le resultat du exec (les 2 ne
sont pas liés)

_sql = ChaîneConstruit(_sql,oBudget.ID_BUDGET,oBudget.BudgetLibelle)
_retFonction = otl4WD:mySQLExec(_sql, 1)
otl4WD:mySQLFerme(1)

IF (_retFonction) THEN
      _retFonction = otl4WD::mySQLTransaction((otl4WD::mySQLFin), 1)
        IF pas (_retFonction) THEN
            msg est une chaîne = (otl4WD:mySQLGetErrorMes sage())
            LOG(msg )
        END
ELSE
        Erreur(otl4WD:mySQLGetErrorMessage())
END

RENVOYER _retFonction

voila juste pour optimiser les lignes de code et le fonctionnement
pour eviter de se trouver avec une requete ouverte et faire des mySQLFerm e
un peu partout

cordialement

Bonjour

je ne sais pas si beaucoup d'entre vous travaille avec des bases
oracle...
Je suis en train de me faire la main sur le merge oracle et ca
simplifie énormément le code.

PROCEDURE UPSERT_BUDGET(oBudget est un c_Budget)

_retFonction est un booléen

_sql est une chaîne
_sql += " merge into BUDGET   using (select 1 from dual) ori on
(BUDGET.ID_BUDGET = '%1') "
_sql += " when matched then update set BUDGETLIBELLE = '%2' "
_sql += "when not matched then Insert (ID_BUDGET , BUDGETLIBELLE )
values ( '%1' , '%2' ) ; "

_sql = ChaîneConstruit(_sql,oBudget.ID_BUDGET,oBudget.BudgetLibelle)

_retFonction = otl4WD:mySQLExec(_sql, 1)

IF (_retFonction) THEN
otl4WD:mySQLFerme(1)
_retFonction = otl4WD:mySQLExec("COMMIT",1)
IF (_retFonction) THEN
// rien juste renvoyer code retour
SINON
msg est une chaîne = (otl4WD:mySQLGetErrorMessage())
LOG(msg )
END
ELSE
Erreur(otl4WD:mySQLGetErrorMessage())
END

otl4WD:mySQLFerme(1)

RENVOYER _retFonction

Entre le dataBinding de windev et le merge d'oracle le nombre de code
diminue dans des proportions assez impressionnante.

Quand j'aurais un peu de temps, je vais voir pour une construction
dynamique de la requete de MERGE en fonction de la description de la
table et de la classe.

Si ca peut faire gagner du temps à quelqu'un...
Publicité
Poster une réponse
Anonyme