Précédent   Forum des professionnels en informatique > Bases de données > Oracle > Interfaces de programmation
Interfaces de programmation Forum d'entraide sur l'utilisation des API Oracle : Pré-compilateurs, OCI, OCCI, etc.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/04/2007, 12h02   #1
Rédacteur/Modérateur
 
Avatar de JauB
 
Homme Faisel
Ingénieur COBOL/AS400
Inscription : octobre 2005
Messages : 1 713
Détails du profil
Informations personnelles :
Nom : Homme Faisel
Âge : 31
Localisation : Maroc

Informations professionnelles :
Activité : Ingénieur COBOL/AS400
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 713
Points : 2 712
Points : 2 712
Envoyer un message via AIM à JauB Envoyer un message via MSN à JauB Envoyer un message via Yahoo à JauB
Par défaut [PRO*COBOL] Appel SQL dans un programme COBOL

Bonjour tout le monde,
j'ai une requête SQL qui me retourne plusieurs lignes et j'aimerai savoir comment faire pour exploiter cette requête pour insérer chaque ligne dans un fichier.
est ce que quelqu'un a un bout de code qui permet de faire ça, sachant que je suis débutant en COBOL
__________________
*** Ingénieur COBOL/AS400 ***

-------------------------------------------------------------------

Mes articles, Mon Blog

Rubrique Jasper/iReport :
------- Forum Jasper --------
----- FAQ Jasper/iReport -----

JauB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2007, 16h07   #2
Invité de passage
 
Inscription : septembre 2006
Messages : 6
Détails du profil
Informations forums :
Inscription : septembre 2006
Messages : 6
Points : 4
Points : 4
1. Déclare un curseur (DECLARE).
DECLARE nom_curseur CURSOR FOR
SELECT nom_champs
FROM nom-table
WHERE ...

2. Ouvre le curseur (OPEN nom_curseur).

3. Fais une lecture (FETCH) tant qu'il reste des enregistrements à lire.
FETCH nom_curseur
INTO ...

4. A chaque lecture, tu écris ton enreg sur le fichier.

5. Ferme le curseur (CLOSE nom_curseur)
pej80 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/04/2007, 17h03   #3
Rédacteur/Modérateur
 
Avatar de JauB
 
Homme Faisel
Ingénieur COBOL/AS400
Inscription : octobre 2005
Messages : 1 713
Détails du profil
Informations personnelles :
Nom : Homme Faisel
Âge : 31
Localisation : Maroc

Informations professionnelles :
Activité : Ingénieur COBOL/AS400
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 713
Points : 2 712
Points : 2 712
Envoyer un message via AIM à JauB Envoyer un message via MSN à JauB Envoyer un message via Yahoo à JauB
merci pour tes réponses,mais tu 'as pas par hasard un exemple complet ou cite moi juste d'où peux-je trouver des exemples de ce type. car là je débute et donc....
merci encore une fois
__________________
*** Ingénieur COBOL/AS400 ***

-------------------------------------------------------------------

Mes articles, Mon Blog

Rubrique Jasper/iReport :
------- Forum Jasper --------
----- FAQ Jasper/iReport -----

JauB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2007, 09h23   #4
Membre chevronné
 
Avatar de Peut-êtreUneRéponse
 
Homme Guillaume VENTRE
z/OS Technical Leader
Inscription : décembre 2006
Messages : 514
Détails du profil
Informations personnelles :
Nom : Homme Guillaume VENTRE
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : z/OS Technical Leader
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2006
Messages : 514
Points : 617
Points : 617
Pour COBOL / DB2 sous MVS:

En WORKING-STORAGE SECTION, ne pas oublier les INCLUDE:

Code cobol :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
EXEC SQL 
    INCLUDE SQLCA 
END-EXEC.
 
EXEC SQL 
    INCLUDE dclgen-table1 
END-EXEC. 
 
EXEC SQL 
    INCLUDE dclgen-table2 
END-EXEC. 
 
[...]

Toujour en WSS, déclaration du curseur:

Code cobol :
1
2
3
4
5
6
7
8
9
10
11
12
 
*---------------------------
* DECLARATION DE CURSEUR 
*---------------------------
EXEC SQL 
    DECLARE nom-curseur CURSOR FOR 
    SELECT champ1 
          ,champ2
          ,champ2
    FROM TABLE 
    WHERE condition
END-EXEC .

En PROCEDURE DIVISION, en début de traitement, ouverture du curseur:

Code cobol :
1
2
3
4
5
6
7
 
*---------------------------
* OUVERTURE DE CURSEUR 
*---------------------------
EXEC SQL 
    OPEN nom-curseur
END-EXEC .
Juste après ne pas oublier de traiter les SQLCODE différents de 0, et de faire le premier fetch:

Code cobol :
1
2
3
4
5
6
7
8
9
10
 
*--------
* FETCH 
*--------
EXEC SQL 
    FETCH nom-curseur 
    INTO :hôte-variable-champ1 
        ,:hôte-variable-champ2 
        ,:hôte-variable-champ2 
END-EXEC.

Ensuite tu fais les étapes suivantes:

- Traitement du SQLCODE,
- Traitement des données récupérées (calcul, filtre,...)
- Ecriture d'un enreg dans un fichier

Après l'écriture de ton enreg, tu récupères les données suivantes de la (les) tables(s) en refaisant un fetch (utilise un PERFORM vers le paragraphe décrit plus haut pour le 1er fetch)

A la fin du programme, juste avant de le quitter, n'oublies pas de fermer ton curseur:

Code cobol :
1
2
3
4
5
6
7
 
*---------------------------
* OUVERTURE DE CURSEUR 
*---------------------------
EXEC SQL 
    CLOSE nom-curseur
END-EXEC .

Bon dev

.
__________________
★★ Documentation Mainframe par Guillaume Ventre ★★
Peut-êtreUneRéponse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/04/2007, 10h52   #5
Rédacteur/Modérateur
 
Avatar de JauB
 
Homme Faisel
Ingénieur COBOL/AS400
Inscription : octobre 2005
Messages : 1 713
Détails du profil
Informations personnelles :
Nom : Homme Faisel
Âge : 31
Localisation : Maroc

Informations professionnelles :
Activité : Ingénieur COBOL/AS400
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 713
Points : 2 712
Points : 2 712
Envoyer un message via AIM à JauB Envoyer un message via MSN à JauB Envoyer un message via Yahoo à JauB
et ça marche sur COBOL sous AS400 ( I5) ?
__________________
*** Ingénieur COBOL/AS400 ***

-------------------------------------------------------------------

Mes articles, Mon Blog

Rubrique Jasper/iReport :
------- Forum Jasper --------
----- FAQ Jasper/iReport -----

JauB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2010, 11h37   #6
Invité de passage
 
Inscription : octobre 2007
Messages : 2
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 2
Points : 1
Points : 1
Par défaut fin du curseur

Bonjour,

puis-je savoir comment détecter et gérer la fin du curseur (plus aucun enregistrement dans la table).

merci d'avance
iCeCuBe est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/04/2010, 12h09   #7
Rédacteur/Modérateur
 
Avatar de Vincent Rogier
 
vincent rogier
Inscription : juillet 2007
Messages : 2 355
Détails du profil
Informations personnelles :
Nom : vincent rogier
Âge : 34

Informations forums :
Inscription : juillet 2007
Messages : 2 355
Points : 3 108
Points : 3 108
SQLCODE = 1403
__________________
Vincent Rogier.

Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

OCILIB (C Driver for Oracle)

Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle
Vincent Rogier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/05/2010, 21h28   #8
Membre chevronné
 
Avatar de Peut-êtreUneRéponse
 
Homme Guillaume VENTRE
z/OS Technical Leader
Inscription : décembre 2006
Messages : 514
Détails du profil
Informations personnelles :
Nom : Homme Guillaume VENTRE
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : z/OS Technical Leader
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : décembre 2006
Messages : 514
Points : 617
Points : 617
Citation:
Envoyé par Vincent Rogier Voir le message
SQLCODE = 1403
Pour DB2 : SQLCODE 100


EDIT: intervention sans aucun intérêt de ma part, je n'avais pas vu que le thread avait été déplacé dans le forum ORACLE.


.
__________________
★★ Documentation Mainframe par Guillaume Ventre ★★
Peut-êtreUneRéponse est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2010, 13h31   #9
Invité régulier
 
Inscription : juillet 2009
Messages : 41
Détails du profil
Informations forums :
Inscription : juillet 2009
Messages : 41
Points : 8
Points : 8
Citation:
Envoyé par Vincent Rogier Voir le message
SQLCODE = 1403
Le SQLCODE renvoyé dépend du mode de précompilation utilisé oracle | ansi

1403 en mode oracle, 100 en mode ansi

Fly.
cobfly est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2010, 13h33   #10
Rédacteur/Modérateur
 
Avatar de Vincent Rogier
 
vincent rogier
Inscription : juillet 2007
Messages : 2 355
Détails du profil
Informations personnelles :
Nom : vincent rogier
Âge : 34

Informations forums :
Inscription : juillet 2007
Messages : 2 355
Points : 3 108
Points : 3 108
Effectivement

Citation:
Envoyé par cobfly Voir le message
Le SQLCODE renvoyé dépend du mode de précompilation utilisé oracle | ansi

1403 en mode oracle, 100 en mode ansi

Fly.
__________________
Vincent Rogier.

Rubrique ORACLE : Accueil - Forum - Tutoriels - FAQ - Livres - Blog

Vous voulez contribuer à la rubrique Oracle ? Contactez la rubrique !

OCILIB (C Driver for Oracle)

Librairie C Open Source multi-plateformes pour accéder et manipuler des bases de données Oracle
Vincent Rogier est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h22.


 
 
 
 
Partenaires

Hébergement Web