web-dev-qa-db-fra.com

Créer une copie d'une table dans la même base de données DB2

Existe-t-il un moyen simple de copier une table dans la même base de données avec un nom différent? J'ai essayé certains de ces énumérés ci-dessous,

db2 "CREATE TABLE SCHEMA.NEW_TB COPY AS SELECT * FROM SCHEMA.OLD_TB WHERE 1 = 2"

db2 "SELECT INTO SCHEMA.NEW_TB FROM SCHEMA.OLD_TB"

db2 "SELECT * FROM SCHEMA.OLD_TB INSERT INTO SCHEMA.NEW_TB"

Aucun de ceux-ci n'a fonctionné, j'utilise db2 v9.5

31
Govind Kailas

Vous devez entourer la partie sélectionnée de parenthèses.

CREATE TABLE SCHEMA.NEW_TB AS (
    SELECT *
    FROM SCHEMA.OLD_TB
) WITH NO DATA

Devrait marcher. Faites attention à tout ce que @ Gilbert a dit ne serait pas copié.

Je suppose que DB2 sous Linux/Unix/Windows ici, puisque vous dites DB2 v9.5.

34
bhamby

Essaye ça:

CREATE TABLE SCHEMA.NEW_TB LIKE SCHEMA.OLD_TB;
INSERT INTO SCHEMA.NEW_TB (SELECT * FROM SCHEMA.OLD_TB);

Les options non copiées incluent:

  • Vérifier les contraintes
  • Valeurs par défaut de la colonne
  • Commentaires de colonne
  • Clés étrangères
  • Option enregistrée et compacte sur les colonnes BLOB
  • Types distincts
35
Gilbert Le Blanc

Deux étapes fonctionnent bien:

crée la table bu_x as (sélectionnez a, b, c, d parmi x) WITH no data;

insérer dans bu_x (a, b, c, d) sélectionner sélectionner a, b, c, d parmi x;

3
Maarten

Nous pouvons copier toutes les colonnes d'une table à une autre, une table existante:

INSERT INTO table2 SELECT * FROM table1;

Ou nous pouvons copier uniquement les colonnes que nous voulons dans une autre table existante:

INSERT INTO table2 (nom_colonne (s)) SELECT nom_colonne (s) FROM table1;

ou SELECT * INTO BACKUP_TABLE1 FROM TABLE1

0
Sandeep.Mangalam