2010-06-09 12 views
4

Est-ce que quelqu'un peut me donner la syntaxe pour tronquer une table dans IBM DB2.Requête SQL pour tronquer la table dans IBM DB2

I m exécutant la commande suivante: truncate table tableName immediate;

Le eror est DB2

SQLCODE = -104, SQLSTATE = 42601, SQLERRMC = table, tronquer; JOIN, DRIVER = 3.50.152 message : Une "table" de jeton inattendue a été trouvée après "truncate". jetons attendus peuvent inclure: "join" .. SQLCODE = -104, SQLSTATE = 42601, DRIVER = 3.50.152

La syntaxe correspond à celle spécifiée dans la documentation de référence d'IBM: http://publib.boulder.ibm.com/infocenter/dzichelp/v2r2/index.jsp?topic=/com.ibm.db29.doc.sqlref/db2z_sql_truncate.htm

+0

Quelle version de DB2 exécutez-vous? –

Répondre

9

Il y a un grand article sur truncating, voici l'essentiel des choses DB2

suit presque la norme. (Depuis la version 9.7) DB2 exige que le mot-clé IMMEDIATE ajouter la l'instruction TRUNCATE TABLE ordinaire, par exemple :

TRUNCATE TABLE someschema.sometable IMMEDIATE 

TRUNCATE TABLE doit être la première instruction d'une transaction. Une transaction commençant par TRUNCATE TABLE peut inclure d'autres instructions, mais si la transaction est annulée, l'opération TRUNCATE TABLE n'est pas annulée. DB2s L'opération TRUNCATE TABLE comporte un certain nombre d'arguments facultatifs. Pour plus d'informations, reportez-vous à la documentation. en particulier, l'argument REUSE STORAGE peut être important pour les tâches ad hoc DBA. Dans les versions DB2 < 9.7, vous pouvez utiliser abusivement l'instruction IMPORT. Malheureusement, vous devez savoir quel système d'exploitation de la commande est exécutée à partir pour que cela fonctionne:

Sur les systèmes unix-like: IMPORT/dev/null DE DEL REMPLACER EN tablename Sous Windows: IMPORTATION DE NUL DE DEL REPLACE INTO nom de table IMPORT ne peut pas être utilisé dans tous les contextes. Par exemple, lorsque vous travaillez avec SQL dynamique (de Java/.NET/PHP /...- ne pas utiliser le processeur de ligne de commande db2), vous devez envelopper la commande IMPORT dans un appel à ADMIN_CMD, par exemple:

CALL ADMIN_CMD('IMPORT FROM /dev/null OF DEL REPLACE INTO tablename') 

IMPORT semble être autorisé dans une transaction impliquant d'autres opérations, mais cela implique une opération COMMIT immédiate.

La commande ALTER TABLE peut également être abusé de vider rapidement une table, mais il faut plus de privilèges, et peut causer des problèmes avec la récupération aval.

Cela a été pris sur le site Web: http://troels.arvin.dk/db/rdbms/#bulk-truncate_table-db2

+0

Thx. IMPORT DE FROM/dev/null DE DEL REPLACE INTO nom_table a fait l'affaire – Cshah

1

Quelle version de DB2 utilisez-vous? La commande truncate table a été introduite dans DB2 v9 (au moins sur le mainframe, ce qui semble être ce que vous demandez à propos du lien).

Vous devrez peut-être recourir à l'option delete from, bien que this article propose une procédure stockée dans DB2 v8.

0

utilisation troncature 'nom_table' immédiat

2

Si vous utilisez DB2 pour AS400, IMMEDIATE TRUNCATE TABLE ne fonctionnera PAS. Le travail de équivallent est autour de soit:

  • SUPPRIMER DE [tableName]
  • alors si elle est un incrément automatique colonne equivalant, exécutez:
  • ALTER TABLE ALTER RESTART COLONNE AVEC 1
  • OU plus vite (plus manière efficace)

  • Passer une commande au système pour effacer le fichier physique
  • syntaxe Java:

    CommandCall command = new CommandCall(new AS400(AS400SystemName, AS400JavaUser, AS400JavaPwd)); 
    try { 
        command.run("CLRPFM FILE(as400SchemaName/" + tableName + ")"); 
    
    +0

    Comme il se trouve, il existe un moyen de réellement faire l'équivalent de TRUNCATE TABLE, pas simplement supprimer toutes les lignes. La syntaxe de la commande n'est pas du tout intuitive: http://stackoverflow.com/a/3616556/95852 –

    0

    DB2 on z/OS V10 Videz l'une de vos tables: table tronquée; suivi d'un travail de validation. Ex. tronquer la température; Une autre table: truncate owner.table Ex: truncate student.work; Je n'ai pas essayé ceci sur un DB2 lié. Je ne sais pas si tronquer node2.student.work; est bon.

    SQL pour créer automatiquement une liste de tables. Substring (substr) utilisée car la largeur de la colonne pour le nom de la table et le créateur est trop longue. Vos valeurs peuvent être différentes.

    select 'truncate table '||substr(creator,1,9)||'.'||substr(name,1,20) 
        from sysibm.systables 
         where creator = 'Student'; 
    
    Questions connexes