Téléchargement des produits


Version anglaise


 


      

VADELIA

SADELIA

WADELIA

EADELIA


(I/B) (C/S)

(B) (S)

(I/B) (C/S)

(B) (C/S)


Paragraphe d'utilisation

DECLARATION


Syntaxe

CURSEUR NomCurseur SuiteEntités Distinct SelectionColonnes ConditionAdélia TriDeZones OptimisationLignes MaxLignes Bloc

CURSEUR NomCurseur NomEntité Distinct SelectionColonnes ConditionAdélia TriDeZones OptimisationLignes MaxLignes Maj

CURSEUR NomCurseur RequêteDyn OptimisationLignes MaxLignes


SuiteEntités

SuiteEntités, Entité | Entité

Entité

NomEntité NomCorrélation | NomEntité

Distinct

*DISTINCT | Rien

SelectionColonnes

*COL(SuiteZonesEntité) | Rien

Maj

*MAJ(SuiteZonesEntité) |*MAJ

SuiteZonesEntité

SuiteZonesEntité, IdVarEntité | IdVarEntité

OptimisationLignes

*OPT(n) | Rien

MaxLignes

*LIGNES(m) | Rien

Bloc

*BLOC(taille) | Rien

RequêteDyn

:VarRequête | :InstructionSQL



Description

Cet ordre définit un curseur NomCurseur sur la ou les entités SuiteEntités , en respectant la condition ConditionAdélia (facultative) et l'ordre sur certaines zones, déterminé par le paramètre *TRI et les zones concernées SuiteZonesTri et, pour chacune d'elles, le sens Sens du tri. Le sens peut être *ASC pour ascendant, *DESC pour descendant. Si Sens n'est pas indiqué, par défaut la valeur est *ASC.

Cliquez ici pour l'explication de l'élément TriDeZones.


Par défaut le curseur renvoie les valeurs de l'ensemble des colonnes des entités. Il est cependant possible de ne récupérer que les valeurs pour les colonnes indiquées dans SelectionColonnes.


Si *DISTINCT est précisé, le curseur ne renvoie que les lignes distinctes (par rapport à l'ensemble des colonnes ou pour les colonnes sélectionnées dans SelectionColonnes).


Il est possible de demander à l'optimiseur SQL d'optimiser l'exécution de la requête afin de récupérer plus rapidement les n premières lignes du curseur (paramètre *OPT).


En outre, il est possible d'indiquer à l'optimiseur de requête de récupérer uniquement les m premières lignes du curseur (paramètre *LIGNES).


Le paramètre *BLOC indique que les lectures se feront par bloc de taille d'enregistrements. Même avec ce paramètre, le LIRE_AV_SQL_C ne rend qu'un seul enregistrement à la fois (gestion automatique par l'ordre de la bufferisation d'une lecture multi-lignes).


Le paramètre *MAJ permet d'utiliser les ordres MAJ_SQL_C et SUPPRIMER_SQL_C sur ce curseur. Il ne peut être utilisé que si le curseur porte sur une seule entité. De plus, si vous utilisez un tri, assurez-vous que votre SGBD cible l'accepte car dans le cas des curseurs en mise à jour, certains SGBD n'acceptent pas de condition de tri ou imposent des conditions particulières.


Si le curseur est utilisé par l'ordre MAJ_SQL_C, il faut préciser les zones de l'entité SuiteZonesEntité qui seront mises à jour.

Si le paramètre *MAJ est employé seul, cela signifie que toutes les zones (à l'exception de l'éventuelle zone auto-incrément) seront mises à jour.


Le paramètre RequêteDyn est soit une variable alphanumérique contenant une requête SQL de sélection, soit une instruction SQL déclarée au préalable via l'ordre INSTRUCTION_SQL.


Notes importantes sur les curseurs en mise à jour (*MAJ)
  • Le comportement d'un curseur en mise à jour n'est pas défini si la transaction est validée (VALIDER_MAJ) ou si le programme travaille sans mode de validation. Selon les SGBD, le curseur peut être fermé ou avoir un comportement incohérent (verrous libérés par le COMMIT).
  • Certains gestionnaires de bases de données ne fournissent pas la fonctionnalité complète pour les mises à jour positionnées (MySQL, PostgreSQL, certains pilotes ODBC, bases Mobiles DB2 EveryPlace et SQL Server CE). Dans ce cas, les mises à jour positionnées sont effectuées en générant une clause de sélection à partir des données lues.
    Il est donc important que les colonnes sélectionnées contiennent une clé d'accès unique à la table, faute de quoi la mise à jour (MAJ_SQL_C ou SUPPRIMER_SQL_C) pourrait affecter plusieurs lignes.
  • Les versions antérieures à la V6R1 de l'OS/400 n'acceptent pas que les zones de tri soient également des zones à mettre à jour.

Supposons que le curseur C1 en mise à jour retourne les données suivantes :

COL1     COL2

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

10         Test


Si la fonctionnalité est pleinement supportée par le pilote ODBC, l'ordre MAJ_SQL_C génère la requête :

UPDATE ... WHERE CURRENT OF C1

Cette requête met à jour uniquement la ligne pointée par l'enregistrement courant du curseur.


Si la fonctionnalité n'est pas pleinement supportée par le pilote, la requête devient :

UPDATE ... WHERE COL1 = 10 AND COL2 = 'Test'

Cette requête peut affecter plusieurs lignes si COL1 et COL2 ne représentent pas une clé unique sur la table.


Par exemple

* Crée un curseur de lecture des clients et société, avec un tri sur nom du client

CURSEUR CurCliSo CLIENT, SOCIETE  *COND(CL_COD_SOC = SO_COD_SOC) *TRI(CL_NOM_CLI)


* Créer un curseur de lecture des commandes, avec un tri sur le montant

CURSEUR Curseur1 COMMANDE *COND(CMONTANT > 1000) *TRI(CMONTANT)


* Créer un curseur de lecture des commandes, avec une mise à jour possible sur

* CMONTANT

CURSEUR Curseur2 COMMANDE *COND(CMONTANT > 1000) *MAJ(CMONTANT)


* Créer un curseur en mise à jour sur les contrats

CURSEUR CURS_CONTRAT CONTRAT *COND(CCOD_SOC = :ZCODE_STE ET CCOD_PRO = :ZPCOD_PRO) *MAJ


* Ne récupérer que les colonnes B1 et B2 de l'entité SQL_BASE lors de la lecture du curseur. Indiquer à l'optimiseur SQL que les 10 premières lignes doivent être récupérées le plus rapidement possible.

CURSEUR C1 SQL_BASE *COL(B1, B2) *COND(B > 50)  *OPT(10)


** Curseur permettant de récupérer juste 2 zones du fichier et pour les 100

** premières lignes correspondant au critère de lecture.

CURSEUR Curs_Type_Vin Type_Vin *col(TY_COD_TYP_VIN, TY_LIB_TYP_VIN) -

*cond((TY_DEG_ALC_MAX - TY_DEG_ALC_MIN) > 3) *lignes(100)


Autre exemple d'utilisation


Dans le paragraphe de déclaration :


ALPHA(200) WREQUETE

NUM_P(3,0) WZONE1

CURSEUR C1 :WREQUETE


Dans le paragraphe d'exécution :


WREQUETE = 'SELECT ZONE1 FROM schema.matable WHERE ZONE1 > 10'

OUVRIR_SQL_C C1

LIRE_AV_SQL_C C1 :WZONE1

...

FERMER_SQL_C C1


↑ Haut de page

  • Aucune étiquette