IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

Procedure Curseur table en paramètre?


Sujet :

SQL Oracle

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Procedure Curseur table en paramètre?
    J'ai fait quelques recherches sur le forum (et ailleurs) mais je n'ai rien trouver qui me satisfasse...Donc je demande.

    J'ai un test suivit d'updates à effectuer sur plusieurs tables et j'aimerai l'encapsuler dans une procédure qui prendrait le nom de la table cible. histoire de ne pas me redéclarer un nouveau curseur avec sa boucle et tout le toutim à chaque nouvelle table qui a besoin du test

    La création d'un curseur explicite n'étant pas possible vu que le nom de la table ne peut être passé en paramètre, il reste la création de la requête "à la volée" dans ma procédure. ce que j'ai fait et qui fonctionne:

    PROCEDURE KDELCLOSEDTBSAMER(sTable string)
    IS
    sTbs varchar2(30);
    sRowid varchar2(30);
    vQuery varchar2(200);
    crs csGetResultSet;

    ----
    BEGIN
    vQuery := 'SELECT ROWID,TBSCOD FROM ' || sTable || ' WHERE ENRTRT=0 AND not exists (select 1 from TCO5GIA where TBS=TBSCOD and LOC=''USA'')';
    OPEN crs FOR vQuery;
    LOOP
    FETCH crs Into sRowid, sTbs;
    EXIT WHEN crs%NOTFOUND;
    --Loggue le code de la ligne en cours puis on efface
    KLOGGIA.INS_TLOGGIA('E00018','','TAC1GIA',sTbs,'2','');
    DELETE FROM TAC1GIA WHERE ROWID = sRowid;
    END LOOP;
    CLOSE crs;
    END;
    Mais j'ai quelques réticences à utiliser ce code que je trouve assez "inélégant"

    J'aimerai pouvoir créer un curseur implicitement avec la commande :
    FOR rec IN (SELECT ...) LOOP
    histoire de ne pas avoir à créer des variables (ou un recordset) pour récupérer les valeurs et de pouvoir utiliser "FOR UPDATE" et "CURRENT OF" pour éviter d'avoir à me coltiner le ROWID. Et enfin me passer du OPEN/FETCH/CLOSE

    Mais voilà quand j'essaye de placer ma vQuery entre les parenthèses j'ai droit à une erreur comme quoi ce n'est pas un curseur (sans blague ). et quand j'essaye de la mettre directement, entre les quotes et la variable, je ne sais pas comment m'y prendre.

    Quelqu'un aurait une solution?

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Version d'Oracle ?
    Faîtes une recherche sur ce forum avec les mots clés : REF CURSOR ou SYS_REFCURSOR.
    Modérateur des forums Oracle et Langage SQL
    Forum SQL : je n'interviens PAS plus de 4 fois dans une discussion car si c'est nécessaire cela prouve généralement que vous n'avez pas respecté : les règles du forum

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Juin 2007
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Version 10i

    Pas encore trouvé mon bonheur avec REF CURSOR et SYS_REFCURSOR je me repencherai plus sur la question aujourd'hui si j'arrive à trouver un peu de temps.

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/02/2009, 18h41
  2. Réponses: 4
    Dernier message: 28/04/2007, 23h42
  3. Passer une table en paramètre à l'aide d'un curseur
    Par lalyly dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 28/06/2006, 12h49
  4. Faire passer une table en paramètre pour une procedure
    Par samplaid dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 10/02/2006, 12h26
  5. Réponses: 2
    Dernier message: 15/09/2004, 19h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo