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

Requêtes PostgreSQL Discussion :

Récupérer le nombre de lignes supprimées d'un DELETE


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre du Club
    Récupérer le nombre de lignes supprimées d'un DELETE
    Bonjour à tous

    Je suis actuellement avec une fonction POSTGRESQL faisant des DELETE en cascade et j'aimerai récupérer pour chaque DELETE le nombre de lignes supprimées dans une variable sans devoir faire un SELECT COUNT avant chaque DELETE.

    J'ai tenté le INTO seul sans succès.

    J'ai aussi tenté le RETURNING * INTO variable, mais j'ai l'erreur :
    "ERROR: query returned more than one row"
    Je présume donc qu'il ne retourne pas le nombre de lignes, mais les lignes elles-mêmes.

    Il faudrait quelque chose du genre RETURNING count(*) INTO variable, mais ce serait trop simple si ça fonctionnait ^^.

    Quelqu'un peut m'aider ?

    Merci

  2. #2
    Rédacteur/Modérateur

    Bonjour,

    En encapsulant votre DELETE dans une CTE (= requête WITH), et en utilisant la clause RETURNING, puis en faisant un COUNT, ça doit fonctionner...
    La syntaxe ressemble à quelque chose comme ceci :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    WITH dels AS (
        DELETE FROM ma_table
        WHERE condition
        RETURNING *
    )
    SELECT COUNT(*)
    FROM dels;
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre du Club
    Merci ced !

    Ça fonctionne de cette manière :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    WITH delAudit AS (
    	delete from table where condition
    	RETURNING *
    )
    SELECT COUNT(*) into nbAudit
    FROM delAudit;


    Et dans nbAudit je récupère le nombre d'enregistrement supprimés.

    Voilà !