begin process at 2008 08 22 00:57:05
1 229 731 membres
3 nouveaux aujourd'hui
14 267 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Pb déclaration dans curseurs imbriqués [ Archives / Problème avec une procédure stockée ] (falcon16)

Pb déclaration dans curseurs imbriqués le 26/05/2005 10:31:56

falcon16
Bonjour à tous, je suis en train d'écrire une procédure PL/SQL pour lister tous les enregistrements présents dans toutes les tables de ma base et ainsi générer les requêtes INSERT appropriées pour repeupler ma base ( je travaille avec SQL Server 2000 et je n'ai trouvé cette fonctionnalité en natif nul part )

Voici ma procédure :
-- déclaration des variables
DECLARE @table sysname
DECLARE @champ sysname
DECLARE @champs varchar(8000)
DECLARE @values varchar(8000)
DECLARE @nb_champs int


-- déclaration du curseur qui va lister toutes les tables de la base
DECLARE TABLECURSOR CURSOR
FOR     SELECT sysobjects.name As nom
    FROM sysobjects
    WHERE (sysobjects.xtype = 'U') AND (sysobjects.name != 'dtproperties')

-- ouverture du curseur et parcourt
OPEN TABLECURSOR
FETCH NEXT FROM TABLECURSOR
INTO @table

-- on parcourt tous les enregistrements
WHILE @@FETCH_STATUS = 0
BEGIN
    SET @champs = ''
    SET @nb_champs = 0

    -- déclaration du curseur de parcourt des champs
    DECLARE FIELDCURSOR CURSOR
    FOR    SELECT syscolumns.name AS colonne
        FROM sysobjects,syscolumns
        WHERE ( sysobjects.id = syscolumns.id) And (sysobjects.name = @table)

    -- on récupère alors tous les champs de la table
    OPEN FIELDCURSOR
    FETCH NEXT FROM FIELDCURSOR
    INTO @champ

    -- on zappe le 1er champ qui est la clé primaire
    FETCH NEXT FROM FIELDCURSOR
    INTO @champ

    WHILE @@FETCH_STATUS = 0
    BEGIN
        IF @champs != ''
        BEGIN
            SET @champs = @champs + ', '
        END

        SET @champs = @champs + @champ
        SET @nb_champs = @nb_champs + 1

    FETCH NEXT FROM FIELDCURSOR
    INTO @champ
    END

    CLOSE FIELDCURSOR
    DEALLOCATE FIELDCURSOR

    --PRINT @table + ' ( ' + CAST(@nb_champs AS VARCHAR) + ' ) - ' + @champs
    DECLARE VALUESCURSOR CURSOR
    FOR SELECT @champs FROM @table

    OPEN VALUESCURSOR   <---
    FETCH NEXT FROM valuescursor
    INTO @values

    WHILE @@FETCH_STATUS = 0
    BEGIN
        PRINT @values

    FETCH NEXT FROM valuescursor
    INTO @values
    END

    CLOSE valuescursor
    DEALLOCATE valuescursor

    -- on avance à la prochaine table
    FETCH NEXT FROM TABLECURSOR
    INTO @table
END

-- fermeture et destruction
CLOSE TABLECURSOR
DEALLOCATE TABLECURSOR

j'ai un chti problème, ligne 62 ( voir le <--- ) il me dit qu'il faut que je déclare la variable @table
Quelqu'un peut - t -il m'aider svp merci



Classé sous : table, champs, from, declare, fetch

Participer à cet échange

Pub



Appels d'offres

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

Boutique

Boutique de goodies CodeS-SourceS