10
votes

Comment puis-je limiter le nombre de lignes dans une Supprimer avec DB2?

Je veux ajouter une sécurité sur une table sensible lorsque je supprime des lignes avec une demande SQL sur une table DB2.

Je veux imiter la façon dont MySQL vous permet de limiter le nombre de lignes supprimées dans une demande SQL.

essentiellement je veux le faire avec db2: xxx

est un moyen de le faire avec DB2?


0 commentaires

9 Réponses :


10
votes
delete from table where id in (select id from table where info = '1' order by id fetch first 1 rows only)

3 commentaires

Merci mais j'ai un schéma étrange dans lequel je n'ai pas d'identifiant unique pour une ligne. J'identifie des lignes avec une clé primaire composée de 2 colonnes.


Qu'en est-il d'utiliser Row_Number () à la place? c'est-à-dire où Row_Number () In (Select Row_Number (...


Konstantinos, il devrait être «chercher les 1 premières lignes seulement». Le mot utilisé devrait être des rangées et non la rangée même si vous recherchez une seule ligne :)



-3
votes
DELETE FROM table
WHERE info = '1'
FETCH FIRST 1 ROWS ONLY

0 commentaires

0
votes

Comment est cette requête?

delete from table D where exists 
 ( select * from ( select * from table M fetch first 10 rows only ) as M
   where M.object_id = D.object_id )


0 commentaires

1
votes

sur IBMI DB2:

DELETE FROM table WHERE RRN(table) in 
(SELECT RRN(table) FROM table WHERE col1 = '1' AND col2 = '2' FETCH FIRST 5 ROWS ONLY)


2 commentaires

Si vous êtes sur DB2 et sur un IBMI, vous ne pouvez pas utiliser DFU pour accéder à celui-ci?


C'est génial pour mon cas d'utilisation où j'ai un très grand nombre de lignes à supprimer et que je veux le faire par lots.



0
votes
MERGE INTO XYZ A<BR>
USING (<BR>
SELECT RID_BIT(B) CHAVE<BR>
FROM XYZ B<BR>
FETCH FIRST 100000 ROWS ONLY) B<BR>
ON RID_BIT(A) = B.CHAVE<BR>
WHEN MATCHED THEN DELETE;

0 commentaires

-1
votes

Il suffit de sélectionner une instruction et mettez la déclaration dans la requête Supprimer:

delete from (
select from table WHERE info = '1' order by id fetch first 25000 rows only
)


0 commentaires

1
votes

Si votre clé principale a plusieurs valeurs ou que vous avez juste besoin de plusieurs valeurs comme condition, il s'agit de la requête qui fonctionne:

DELETE FROM TABLE
WHERE (COLUMN1, COLUMN2) IN (
    SELECT COLUMN1, COLUMN2 FROM TABLE
    WHERE SOME_COLUMN='THIS'
    AND SOME_OTHER_COLUMN LIKE 'THAT%'
    FETCH FIRST 10 ROWS ONLY)


0 commentaires

-1
votes
DELETE                                      
FROM Bibl/File                             
WHERE RRN(File) =  (                        
                    SELECT min(RRN(File))   
                    FROM Bibl/File         
                    WHERE Fld1 = 'xx'     
                   )   
The RRN function is to AS400/iSeries/PowerSystem alone. In other environments there are other functions for the relative record number.This makes it possible to erase a record of several identical even without UNIQUE key. It can also be used to update with minor changes.works like the LIMIT but with DELETE and / or UPDATE.It only works on SQL DB2 in other settings should be changed by RRN function to return the column number

2 commentaires

Stackoverflow comprend uniquement l'anglais!


Élévoir: Anglais: J'ai mis bilingue pour atteindre le plus grand nombre de personnes. Je pense que ce qui est important n'est pas la langue ou la couleur de la peau, mais le message qui aide à résoudre des problèmes. Español: Lo He Paieto Bililingüe Para Que Llégue Al Mayor Numero de Personas. Creo Qu'e LO IMPORTE NO EL Idioma O el Color de Piel Sino El Mensaje que Ayuda Un résolveur Los Problèmes



6
votes

Cela dépend vraiment de votre plate-forme.

Si vous utilisez DB2 sur Linux / UNIX / Windows, vous pouvez simplement créer un SELECT qui obtient les lignes que vous souhaitez et mettez cela en tant que sous-requête pour votre Supprimer et DB2 pourra supprimer les résultats de votre sélectionner. Comme: xxx

Si vous êtes sur DB2 pour z / OS, cette syntaxe ne fonctionne malheureusement pas. Mais, vous pouvez utiliser vos clés principales pour faire fondamentalement la même chose (celle-ci fonctionne également sur LUW): xxx


Voici un exemple de script qui montre comment il est utilisé: xxx


1 commentaires

Pourquoi commander par votre_key_columns ne serait-il pas préférable de supprimer la commande et d'ajouter avec votre dB décider des lignes à supprimer en fonction de la commodité de la mise en page. OP dit que la limite est une vérification de saftey (pour l'arrêter de remplir le journal de restauration vraisemblablement)