9
votes

Oracle Déplacer la colonne à la première position

Y a-t-il un moyen de déplacer une colonne dans une table Oracle du dernier à la première position? Quelqu'un a laissé tomber la colonne ID et le recréa. Donc, maintenant c'est à la fin, ce qui est un problème car certains de nos scripts PHP utilisent la première colonne comme identifiant (un modèle abstrait avec plus de 100 autres modèles à l'aide de cet objet de base ...)

Voir aussi:


6 commentaires

Dupliquer: Stackoverflow.com/Questtions/578957/...


Vous pouvez sélectionner les colonnes dont vous avez besoin au lieu de *.


@NITROX: Il a expliqué le besoin de cette solution de contournement ...


@nickf: Ouais changer les modèles serait beaucoup de travail. Mais pour pouvoir enlever et recréer la table. Ensuite, si quelqu'un pouvait déposer la colonne ID, la base de données ne s'appuie probablement pas sur les relations clés étrangères.


Cela met simplement en évidence une raison (de plusieurs) pourquoi vous n'utilisez jamais Select * dans le code de production. Les scripts PHP doivent spécifier quelles colonnes sont intéressées.


En 12C, il y a une astuce qui peut permettre de changer l'ordre des colonnes: tkyte.blogspot.com.au/2013/07/...


8 Réponses :


1
votes

Recréer la table (via Rename / Table temporaire pour ne pas perdre vos données) est la seule façon dont je connais.

Je ne crois pas qu'il soit possible de simplement changer l'ordre de colonne.


0 commentaires

19
votes

the oracle FAQ dit:

Oracle n'autorise que des colonnes à être ajoutées à la fin d'une table existante. P> blockQuote>

Vous devrez recréer votre table. P>

RENAME tab1 TO tab1_old;

CREATE TABLE tab1 AS SELECT id, <the rest of your columns> FROM tab1_old;


1 commentaires

Mais il faut mettre à jour des contraintes, des index et ainsi de suite ... J'ai essayé cela à Oracle 11G et ça marche bien. Dans les versions plus anciennes, j'ai eu un problème que la table créée avait des colonnes avec la longueur des valeurs sélectionnées - par exemple lorsqu'il y avait du champ avec type varchar2 (20) et une longueur maximale dans la colonne était de 5, la nouvelle colonne de table avait varchar2 (5) .



8
votes

Le moyen le plus simple de modifier l'ordre logique des colonnes d'une table est de renommer votre table et de créer une vue avec les positions de colonne "Droite":

ALTER TABLE your_table RENAME TO your_table_t;

CREATE VIEW your_table AS SELECT <columns in the right order> FROM your_table_t;

-- grants on the view (the same as the table)
GRANT ** TO ** ON your_table;


0 commentaires

0
votes

Vous voudrez peut-être accéder à votre table via une vue, vous pouvez donc réorganiser sans douleur l'ordre logique s'il est important pour la technologie des applications.


0 commentaires

-2
votes

J'utilise tout le temps:

ALTER TABLE MOVE COLUMN column_name TO ordinal_position;


1 commentaires

-1: Ce n'est pas une syntaxe d'oracle valide aussi loin que possible, je m'attendrais au moins quelque chose comme alter Table_Name Modifier la colonne Colonne de la colonne à l'ordinal_position; . J'utilise Oracle Base de données 11G Enterprise Edition version 11.2.0.2.0 - 64 bits Production



1
votes

S'il n'y a pas de tonne de données / colonnes, vous pouvez simplement renommer les colonnes dans l'ordre souhaité. Ensuite, supprimez simplement «votre nom de table ici». C'était une bonne solution pour moi depuis que je n'avais pas encore inséré de nombreux disques.


0 commentaires

0
votes

impossible de déplacer la colonne dans Oracle. Il sera créé dans la dernière position. Si quelqu'un le souhaite de sorte que l'une ou l'autre point de vue soit créé ou une nouvelle table doit être créée


1 commentaires

Cela n'ajoute pas beaucoup à la poste ... Cela devrait être un commentaire. Une fois que vous Gagnez une réputation suffisante Vous pourrez Commentaire sur n'importe quel message .



4
votes

dans Oracle 12C Il est maintenant plus facile de réorganiser les colonnes logiquement. Il peut être vrai en faisant une colonne invisible / visible.Si vous modifiez une colonne invisible à visible, la colonne apparaît durer dans l'odeur d'odeur.

Utilisation de colonnes invisibles

Créer une table WXYZ:

Créer une table t ( w int,
y varchar2, z varchar2, x varchar2

);

Réorganisez la colonne X au milieu:

alter table wxyz modifier (y invisible, z invisible); Alter table wxyz modifier (y visible, z visible);

Décrivez WXYZ;

Nom

w

x

y

z


0 commentaires