Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Je sollicite à nouveau votre aide,
Voilà, dans le temps (ha haaa), avec Sybase, la récupération de l'identity se faisait automatiquement après l'update de la DW si on avait coché l'option ad-hoc... Alors dis donc comment fait-on avec les misérables séquences Oracle ??
Merci d'avance !!
Hors ligne
Salut
Avec ASA (et SQL Server?), lors de l'update()
d'une DW dans la laquelle on a inséré un enregistrement, la colonne qui a été spécifée comme Identity Column
est renseignée automatiquement. Avec Oracle, je crois qu'il est nécessaire de gérer "à la main" les séquences.
valeur suivante (avant l'update) :
SELECT NOM_SEQUENCE.NEXTVAL INTO :ll_sequence_suivante FROM DUAL ;
valeur en cours (après l'update ) :
SELECT NOM_SEQUENCE.CURRVAL INTO :ll_sequence_courante FROM DUAL ;
Hors ligne
Merci pour cette réponse,
C'est en effet ce que j'ai pu trouver comme info...
Bref, ça marche quand on ne fait qu'une seule nouvelle row, mais qu'en est-il en cas de création de plusieurs ?
Vraiment je préfèrais le système Sybase !!
Hors ligne
Agimation a écrit:
Bref, ça marche quand on ne fait qu'une seule nouvelle row, mais qu'en est-il en cas de création de plusieurs ?
je vois deux solutions :
1) à chaque dw.insertrow
: générer une nouvelle séquence et l'entrer dans le champ PK de la DW pour la ligne insérée.
Avantage : tout est prêt pour l'update
.
Inconvénient : en cas d'annulation de saisie des indices seront bouffés.
2) à chaque dw.insertrow
: récupèrer le n° de la ligne insérée dans un tableau.
Avant l'update
: boucler sur les lignes insérées et générer une nouvelle séquence pour chacune.
Avantage : pas d'indice bouffé (hors erreur exécution SQL)
Inconvénient : attendre l'update
pour voir les valeurs dans la dw
à voir selon ton cas d'utilisation, si les users "voient" la PK ou non, si les les PK ont une valeur fonctionnelle ou uniquement DB pour les liens, etc.
Sinon pour info un petit script de la doc PB pour boucler sur toutes les lignes modifiées d'une dw :
Examples for GetNextModified method (DataWindows)
These statements count the number or rows that were modified in the primary buffer for dw_status and then display a message reporting the number modified:Code: pb
integer rc long NbrRows, ll_row = 0, count = 0 dw_status.AcceptText() NbrRows = dw_status.RowCount() DO WHILE ll_row <= NbrRows ll_row = dw_status.GetNextModified(ll_row, Primary!) IF ll_row > 0 THEN count = count + 1 ELSE ll_row = NbrRows + 1 END IF LOOP MessageBox("Modified Count", String(count) + " rows were modified.")
Hors ligne
--------------------------------------------------------------------
Bonjour, peut-on considérer que le problème est Résolu ?
--------------------------------------------------------------------
Hors ligne