Après windows pour les nuls, voici PB pour les bons (ou presque).

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 28-01-2010 09:32:21

Kyoshiro  
Membre Geek
Lieu: Montpellier
Date d'inscription: 24-11-2008
Messages: 59
Pépites: 52
Banque: 0

[RESOLU] Probleme séquence/SQL dynamique

Bonjour à tous,

Je suis en train d'écrire un traitement qui lit un fichier et injecte les lignes dans une table de travail. Je voudrais que chaque ligne de la table soit identifiée de façon unique, j'ai donc décidé de créer une séquence.

Dans mon traitement, j'ai le code suivant :

Code:

SELECT SEQ_TEMP_IMPORT_DEVIS.NEXTVAL 
INTO :li_t_id_devis 
FROM DUAL;

Pourtant quand je boucle, la valeur de mon champ li_t_id_devis est toujours à 0 alors que quand je regarde en base, la propriété "Last value" de ma séquence s'est bien incrémentée.

Est ce que quelqu'un peut aiguiller un novice en la matière comme moi?

Merci à tous pour votre aide.

Environnement :
PB 10.5
Oracle 10g
Windows XP

Dernière modification par Kyoshiro (28-01-2010 15:16:10)


Saying Java is good because it works on all operating systems is like saying anal sex is good because it works on all genders.

Hors ligne

 

#2 28-01-2010 09:55:03

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

Re: [RESOLU] Probleme séquence/SQL dynamique

Bonjour, plutot que de faire ça dans PB, pourquoi ne pas utiliser un trigger directement dans Oracle, du genre :

Code: mssql

CREATE OR REPLACE TRIGGER NOM_TABLE_BI BEFORE INSERT ON NOM_TABLE FOR EACH ROW
BEGIN
   SELECT SEQ_TEMP_IMPORT_DEVIS.NEXTVAL INTO :NEW.ID_DEVIS FROM DUAL ;
END;



NB :


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

Hors ligne

 

#3 28-01-2010 10:01:21

Kyoshiro  
Membre Geek
Lieu: Montpellier
Date d'inscription: 24-11-2008
Messages: 59
Pépites: 52
Banque: 0

Re: [RESOLU] Probleme séquence/SQL dynamique

Bonjour et merci pour ta réponse rapide!

J'ai pensé à faire de cette façon, le probleme, c'est que j'ai besoin de récupérer la valeur à insérer à la volée pour pouvoir l'injecter en parallèle dans d'autres tables... Or en passant par le trigger, la valeur ne sera pas insérée dans la table tant que je n'ai pas fait d'update()

Ce n'est peut être effectivement pas ce qu'il y a de plus "joli", mais pourquoi ca ne marche pas via le SQL dynamique?


Saying Java is good because it works on all operating systems is like saying anal sex is good because it works on all genders.

Hors ligne

 

#4 28-01-2010 10:04:17

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

Re: [RESOLU] Probleme séquence/SQL dynamique

Kyoshiro a écrit:

j'ai besoin de récupérer la valeur à insérer à la volée pour pouvoir l'injecter en parallèle dans d'autres tables... Or en passant par le trigger, la valeur ne sera pas insérée dans la table tant que je n'ai pas fait d'update()

qu'à cela ne tienne, utilise un trigger "After insert" pour les traitement en aval, ton Id sera alors dispo


Kyoshiro a écrit:

mais pourquoi ca ne marche pas via le SQL dynamique?

aucune idée, tu as regardé le code retour de SQLCA ? (d'ailleurs ce n'est pas du SQL dynamique mais du SQL embarqué "classique"... )


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

Hors ligne

 

#5 28-01-2010 10:22:34

buck  
Modérateur
Lieu: Dijon
Date d'inscription: 31-07-2008
Messages: 747
Pépites: 1,028,843
Banque: 171,170,849,654

Re: [RESOLU] Probleme séquence/SQL dynamique

Bonjour,

Juste une observation, tu oublies peut être de préciser (forcer) l'objet transaction pour ta requête :

Code: sql

SELECT colonne1 INTO :li_x FROM table1 WHERE XXX USING itr_trans;


Si tu ne le précises pas PB utilise par défaut l'objet transaction SQLCA et ce n'est pas forcément celui que tu utilises pour te connecter à la base d'où ton zéro en réponse.

Hors ligne

 

#6 28-01-2010 13:49:50

Kyoshiro  
Membre Geek
Lieu: Montpellier
Date d'inscription: 24-11-2008
Messages: 59
Pépites: 52
Banque: 0

Re: [RESOLU] Probleme séquence/SQL dynamique

Oui, désolé pour l'abus de langage

Je n'ai pas regardé le code retour de l'objet SQLCA, c'est ce que je vais faire tout de suite.

Merci pour ta réponse, buck! J'ai déjà essayé de préciser l'objet transaction mais ca ne marche pas plus...

En ce qui concerne le trigger AFTER INSERT en fait, ça me pose également un probleme. Je m'explique.

Je veux importer un fichier qui contient le détail sur des devis à créer et les lignes de devis à rattacher aux devis. Je lis les lignes une par une et j'insère donc une ligne dans ma table temporaire des devis, c'est la que je veux récupérer la valeur de la séquence. Car à partir de la, je veux également insérer dans une autre table temporaire le détail des lignes de devis, avec la valeur de la séquence en "clé étrangère".
C'est pourquoi le trigger AFTER INSERT ne m'arrange pas plus qu'un trigger normal.

A moins que tu parles d'un autre usage du trigger que je n'ai pas compris...?


Saying Java is good because it works on all operating systems is like saying anal sex is good because it works on all genders.

Hors ligne

 

#7 28-01-2010 13:52:32

Kyoshiro  
Membre Geek
Lieu: Montpellier
Date d'inscription: 24-11-2008
Messages: 59
Pépites: 52
Banque: 0

Re: [RESOLU] Probleme séquence/SQL dynamique

Mais par rapport à l'objet connexion c'est ca qui m'étonne le plus : c'est que quand je suis en mode debug j'ai la valeur 0 dans la variable ou je voudrais récupérer ma séquence, mais quand je regarde en base le compteur s'est bien incrémenté... alors que dans le code il me renvoie toujours 0


Saying Java is good because it works on all operating systems is like saying anal sex is good because it works on all genders.

Hors ligne

 

#8 28-01-2010 14:18:32

foon  
N2iGeek + MangasGeek = foon
Award: bf
Lieu: Bonchamp-Lès-Laval
Date d'inscription: 28-02-2007
Messages: 2486
Pépites: 85
Banque: 9,223,372,036,854,776,000

Re: [RESOLU] Probleme séquence/SQL dynamique

Si tu passes ta variable locale de "Integer" à "Long",
ça ne règle pas le problème?


Seuls ceux qui ne font rien ne font jamais d'erreurs
http://www.nerdtests.com/images/badge/163124fb7fb459a3.gif

Hors ligne

 

#9 28-01-2010 14:53:59

Kyoshiro  
Membre Geek
Lieu: Montpellier
Date d'inscription: 24-11-2008
Messages: 59
Pépites: 52
Banque: 0

Re: [RESOLU] Probleme séquence/SQL dynamique

Non, ca ne change rien... Merci quand même pour la suggestion qui m'aura valu une petite frayeur


Saying Java is good because it works on all operating systems is like saying anal sex is good because it works on all genders.

Hors ligne

 

#10 28-01-2010 15:06:36

philip  
Membre
Lieu: Bruxelles
Date d'inscription: 12-01-2007
Messages: 16
Pépites: 32
Banque: 0

Re: [RESOLU] Probleme séquence/SQL dynamique

Au niveau de ta connexion à la DB, active la trace ( TRS O10)
Dans le fichier trace, tu verras ce qui se passe.
Si ce n'est pas assez complet, essaie la trace étendue ( TRACE o10)

Hors ligne

 

#11 28-01-2010 15:14:44

Kyoshiro  
Membre Geek
Lieu: Montpellier
Date d'inscription: 24-11-2008
Messages: 59
Pépites: 52
Banque: 0

Re: [RESOLU] Probleme séquence/SQL dynamique

J'ai trouvé :

En regardant la propriété SQLCA.SQLErrText aprés le SELECT sur la séquence, j'avais l'erreur "Table or view doesn't exist". J'ai donc enlevé le nom du schéma que j'avais ajouté dans le SELECT, le SQLErrText est devenu "Sequence doesn't exist".

En fait c'était un probleme de schéma tout bête, car il y a le schéma ou je crée mes tables, et celui ou l'application se connecte, j'avais oublié cette subtilité : un CREATE SYNONYM, un GRANT, et le tour est joué !

Quoiqu'il en soit, merci à tous de m'avoir aiguillé car je ne pense pas que j'aurais trouvé aussi rapidement sans votre aide!

Dernière modification par Kyoshiro (28-01-2010 15:17:41)


Saying Java is good because it works on all operating systems is like saying anal sex is good because it works on all genders.

Hors ligne

 

Pied de page des forums

Propulsé par FluxBB 1.2.22