2009-09-30 7 views
0

Je n'obtiens pas correctement la commande SQL lorsque vous cliquez sur cette ligne ci-dessous. Je veux insérer dans le tableau A avec les données de la table B. Les deux ont les mêmes colonnes mais la séquence peut être différente. TIA!La commande SQL n'est pas terminée correctement

Insert into a (select column_name from user_tab_columns where table_name = 'B') 
select * from b 

J'utilise un développeur pl/sql.

Répondre

0

Cela peut faire ce que vous voulez.

INSERT INTO a (col1, col2) 
SELECT col1, col2 
FROM b 
+0

Merci pour le commentaire. Mais j'ai besoin de cela pour travailler sur 2 tables. Je ne peux pas coder en dur le nom de la colonne. Ça va être à la volée. TIA! –

1

Dans une situation similaire, j'ai créé une vue sur la table de destination dont les colonnes étaient dans l'ordre approprié.

Par exemple

Table A has columns (A, B, C) 
Table B has columns (B, C, A) 

Vous créez une vue comme

CREATE VIEW A_V AS SELECT B,C,A FROM A; 

Ensuite, vous pouvez faire une insert into a_v select * from b;

L'avantage est que, même si les colonnes sont ajoutées à la table un mais pas à la table b alors, tant qu'ils sont nullables ou ont une valeur par défaut, l'insertion via la vue fonctionne toujours.

J'ai créé l'écriture de scripts VIEW automatiquement, à la recherche contre USER_TAB_COLUMNS pour la table B.

3

Utiliser SQL dynamique dans une procédure PLSQL. Boucle à travers les noms de colonnes dans un curseur pour la boucle et les ajouter à une chaîne. Ensuite, exécutez la requête. Voir le code ci-dessous (non testé)

declare 
    l_query varchar2(32767); 
    l_columns varchar2(32767); 

    cursor c is select column_name 
    from user_tab_columns 
    where table_name=&table_name; 

begin 
    for r in c loop 
    l_columns := l_columns ||','||r.columns_name; 
    end loop; 
    -- remove first ',' 
    l_columns := substr(l_columns,2); 

    l_query := 'insert into a ('||l_columns||') select '||l_columns||' from &table_name; 

    execute immediate l_query; 
end; 
Questions connexes