6
votes

SQL Create Table Utilisez% Type de colonne

J'essaie de créer une toruissure de l'une de mes tables (dans une fonction), xxx

mais je rouge cela ne fonctionnera pas, Maintenant, ma question est de savoir comment pourrais-je y rendre cela aussi dynamique que possible pour que je n'ai pas à mettre à jour les types de données au script de sauvegarde à chaque fois que je modifie un fichier de données paragraphe. de:

varchar2 (24 caractères) à varchar2 (50 caractères)

(les colonnes de table sont fixes monnaie) Cela n'arrive pas souvent, mais nous devions le faire parfois parce que le champ n'était pas assez grand pour une valeur spécifique et que personne n'a mis à jour la table de sauvegarde et l'ID a donné des erreurs.

EDIT: i oublié quelque chose nécessaire:

  • Je dois ajouter 2 colonnes qui ne sont pas dans la table d'origine, mais doivent avoir le même type de données que l'une des tables déjà existantes. Puis-je utiliser SELECT SELECT AS, DETURE ALDY SOIT LE MÊME TYPE, MAIS UN AUTRE NOM? Si oui, comment puis-je faire ça?
  • et certains champs qui proviennent d'une table différente (je dois donc utiliser des jointures)

    somme:

    • multiples colonnes avec type de plusieurs tables
    • nouvelle colonne avec type fixe
    • nouvelle colonne avec type variable comme Colum XY de la table ABC

0 commentaires

5 Réponses :


4
votes

Vous pouvez créer la table avec: xxx

en fonction de votre édition: vous pouvez modifier l'instruction SELECT à tout ce que vous voulez. Rejoignez les deux tables et sélectionnez 3 colonnes d'une table et 2 de l'autre


0 commentaires

4
votes

Vous pouvez utiliser la déclaration pour créer la sauvegarde.

CREATE TABLE TBTestBackup AS SELECT * FROM ORIGINAL_TABLE_NAME WHERE 1=2;


0 commentaires

3
votes

La syntaxe est xxx

Je ne sais pas comment vous pouvez automatiser les modifications apportées aux fichiers de données, mais ce n'est pas quelque chose qui devrait changer souvent (si vous devez travailler sur cela). < / p>


0 commentaires

2
votes

sonne comme un Vue matérialisée fonctionnerait pour Ce que vous voulez.

exec dbms_mview.refresh('MY_BACKUP', 'C', atomic_refresh=>false);


1 commentaires

Une rafraîchissement de la vue matérialisée ne récupérera pas les modifications de type de données dans les colonnes sous-jacentes cependant, sera-t-elle? Vous obtiendrez toujours une erreur sur rafraîchir si les données étaient trop grandes. (Je viens d'essayer cela, créant ainsi une vue basée sur les tables de ma réponse, puis changer t1.col2 sur varchar2 (5) et insère une valeur de 5 caractères. Avant le Insérez la vue Reinshes OK mais affiche toujours comme Varchar2 (2) ; Une fois l'insertion rafraîchissante obtient ORA-12899). Toute la vue peut toujours être abandonnée et recréée bien sûr, donc dans la plupart des cas, il est encore meilleur que les CTA.



5
votes

Sur la base de vos exigences mises à jour, pour créer une table basée sur les types de ces deux tables:

desc tb

Name Null Type              
---- ---- ----------------- 
COL1      NUMBER            
COL2      VARCHAR2(2)       
COL3      DATE              
COL4      DATE               -- new column with same type as t1.col3
COL5      VARCHAR2(10 CHAR)  -- column from other table
COL6      VARCHAR2(12)       -- new column with fixed type


1 commentaires

parfait! C'est juste ce dont j'avais besoin! :RÉ