Répétez apres moi :J'aime PBAdonf. J'aime PBAdonf. J'aime PBAdonf.

Le forum (ô combien francophone) des utilisateurs de Powerbuilder.

Recherche rapide

Annonce

Certaines rubriques, dont des cours, sont uniquement visibles par les membres du forum ^^.
Dans la rubrique Liens & Références, vous avez accès à un sommaire de téléchargement, profitez-en !
Il existe maintenant un nouveau TOPIC "Votre CV en Ligne" accessible uniquement par demande.

#1 27-02-2007 11:44:58

Agimation  
Membre Geek
Date d'inscription: 18-01-2007
Messages: 23
Pépites: 108
Banque: 0

Récupération d'un identity

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

 

#2 27-02-2007 12:54:03

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Récupération d'un identity

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) :

Code: pb

SELECT NOM_SEQUENCE.NEXTVAL 
INTO :ll_sequence_suivante
FROM DUAL ;

valeur en cours (après  l'update ) :

Code: pb

SELECT NOM_SEQUENCE.CURRVAL 
INTO :ll_sequence_courante
FROM DUAL ;

N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#3 27-02-2007 13:16:06

Agimation  
Membre Geek
Date d'inscription: 18-01-2007
Messages: 23
Pépites: 108
Banque: 0

Re: Récupération d'un identity

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

 

#4 27-02-2007 15:21:51

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Récupération d'un identity

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.")

N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

#5 09-03-2007 14:17:37

erasorz  
Admin
Lieu: Babylone
Date d'inscription: 23-11-2006
Messages: 5121
Pépites: 97,197
Banque: 2,147,483,647

Re: Récupération d'un identity

--------------------------------------------------------------------
Bonjour, peut-on considérer que le problème est Résolu ?
--------------------------------------------------------------------


N'envoyez jamais un humain faire le travail d'un programme.

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22