Overblog Suivre ce blog
Administration Créer mon blog
3 mai 2012 4 03 /05 /mai /2012 21:21

 

Renommer le nom d'une Table Oracle.

Comment renommer une table dans Oracle.
Comment changer le nom de ma table dans Oracle.

Changer, renommer le nom de ma table dans Oracle.

Lorsque vous renommez une table Oracle, il faut faire attention et étudier les impacts d'un changement de nom de table car si cette table est référencée dans des procédures PL / SQL, Oracle invalidera celles-ci, l'objet ayant été renommé.
Il en va de même pour les synonymes existants de la table par exemple ainsi que les MATERIALIZED VIEW.
Par contre Oracle conserve et transfère automatiquement les contraintes d'intégrités, les index, et les GRANT de l'ancienne table vers la nouvelle table lors d'un changement de nom de table.

Les deux commandes SQL pour renommer une table.

 
 ALTER TABLE table_name RENAME TO new_table_name; RENAME table_name TO new_table_name ; 

 

Exemple des commandes ALTER TABLE RENAME TO et RENAME TO.

 
 SQL> ALTER TABLE emp RENAME TO emp_old; Table modifiée. SQL> 
 
 SQL> RENAME emp_old TO emp; Table renommée. SQL> 

 

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• Modifier un champ de table Oracle ALTER TABLE MODIFY
• Ajouter un champ de table Oracle ALTER TABLE ADD
• Créer une table Oracle avec CREATE TABLE
Repost 0
Published by Daniel Roesch - dans COMMANDES SQL DDL-LDD
commenter cet article
10 avril 2012 2 10 /04 /avril /2012 13:59

 

SQL - ALTER TABLE DROP COLUMN.

Comment supprimer une colonne ou un champ dans une table Oracle.
Comment faire un drop column dans une table Oracle.

SUPPRIMER UNE COLONNE AVEC ALTER TABLE DROP COLUMN.

La clause sql DROP COLUMN de l’instruction sql ALTER TABLE permet de supprimer une colonne existante dans une table Oracle.
Si on supprime une colonne d'une table les index définis sur la colonne sont également supprimés.
Si on supprime une colonne d'une table les contraintes faisant référence à la colonne sont supprimés.

Si la colonne à supprimer est une Primary Key avec des Foreign Key la référençant, Oracle retournera une erreur.
Il faut spécifier la clause CASCADE CONTRAINTES, dans ce cas Oracle supprime toutes les contraintes qui font référence à la colonne.
Oracle invalide automatiquement tous les objets dépendants de la colonne supprimée, tels que les vues, les déclencheurs,...

Vous ne pouvez pas supprimer une colonne :
- d'une table compressée ou une table partitionnée contenant une partition compressée.
- sur laquelle un DOMAIN INDEX a été construit.

SYNTAXE COMMANDE SQL ALTER TABLE DROP COLUMN.

 
 ALTER TABLE table_name DROP { COLUMN column | (column [, column ]...)} [ { CASCADE CONSTRAINTS | INVALIDATE } ]; 

 

ORA-12992: impossible de supprimer la colonne clé parent.

Ici nous essayons de supprimer une colonne PK (Primary Key) qui est référencé dans une FK (Foreign Key).
Cette erreur Oracle est du à la non utilisation de la clause CASCADE CONSTRAINTS.

 
 SQL> ALTER TABLE emp DROP COLUMN empno; ALTER TABLE emp DROP COLUMN empno * ERREUR à la ligne 1 : ORA-12992: impossible de supprimer la colonne clé parent SQL> 

 

SUPPRIMER UNE COLONNE AVEC LA CLAUSE CASCADE CONSTRAINTS.

Avec la clause CASCADE CONSTRAINTS la suppression de la colonne est une réussite.

 
 SQL> ALTER TABLE emp DROP COLUMN empno CASCADE CONSTRAINTS; Table modifiée. SQL> 

 

SUPPRIMER PLUSIEURS COLONNES AVEC ALTER TABLE DROP COLUMN

Pour supprimer plusieurs colonne d'une table dans Oracle, nous utilisons ALTER TABLE DROP sans le mot clé COLUMN.
Les colonnes à supprimer sont placées entre parenthèses juste après le mot clé DROP de la commande ALTER TABLE.

 
 SQL> ALTER TABLE emp DROP (ename,job); Table modifiée. SQL> 

 

Haut de Page www.dba-ora.fr

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• Modifier un champ de table Oracle ALTER TABLE MODIFY
• Ajouter un champ de table Oracle ALTER TABLE ADD
• Renommer Colonne avec ALTER TABLE RENAME COLUMN
• Créer une table Oracle avec CREATE TABLE
Repost 0
Published by Daniel Roesch - dans COMMANDES SQL DDL-LDD
commenter cet article
9 avril 2012 1 09 /04 /avril /2012 21:04

 

ALTER TABLE RENAME COLUMN.

Comment changer, renommer, modifier le nom d'un champs ou colonne d'une table dans Oracle.

RENOMMER COLONNE AVEC ALTER TABLE RENAME COLUMN.

La clause RENAME COLUMN de l’instruction sql ALTER TABLE permet de renommer une colonne existante d'une table Oracle.
Attention cependant le fait de renommer une colonne d'une table Oracle peut invalider les objets dépendants.
Les vues dépendantes, les triggers, les fonctions, les procédures sont invalidés, pensez à modifier ces objets avec le nouveau nom de colonne.

Nous allons voir ici comment renommer une colonne avec la clause RENAME COLUMN.

SYNTAXE COMMANDE SQL ALTER TABLE RENAME COLUMN.

 
 ALTER TABLE table_name RENAME COLUMN column_name TO new_column_name; 

 

DESCRIBE TABLE AVANT LE RENAME COLUMN.

 
 SQL> DESC emp; Nom NULL ? Type ----------------------------------------- -------- ------------- EMPNO NOT NULL NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(15) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2) 

 

RENOMMER LA COLONNE D'UNE TABLE ORACLE.

Ici changement de nom de la colonne EMPNO en NEW_EMPNO.

 
 SQL> ALTER TABLE emp RENAME COLUMN empno TO new_empno; Table modifiée. 

 

DESCRIBE TABLE APRES LE RENAME COLUMN.

 
 SQL> DESC emp; Nom NULL ? Type ----------------------------------------- -------- ------------- NEW_EMPNO NOT NULL NUMBER(4) ENAME VARCHAR2(10) JOB VARCHAR2(15) MGR NUMBER(4) HIREDATE DATE SAL NUMBER(7,2) COMM NUMBER(7,2) DEPTNO NUMBER(2) SQL> 

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• Modifier un champ de table Oracle ALTER TABLE MODIFY
• Ajouter un champ de table Oracle ALTER TABLE ADD
• Créer une table Oracle avec CREATE TABLE
Repost 0
Published by Daniel Roesch - dans COMMANDES SQL DDL-LDD
commenter cet article
17 mars 2012 6 17 /03 /mars /2012 13:21

 

SQL TRUNCATE TABLE ORACLE.

Comment supprimer et vider une table Oracle avec TRUNCATE TABLE. ?
Comment gérer l'erreur ORA-02266: les clés primaires/uniques de la table sont référencées par des clés étrangères. ?
Comment supprimer la clé primaire de la table parent. ?
Comment désactiver la clé étrangère de la table enfant. ?

TRUNCATE TABLE.

L'instruction DDL TRUNCATE TABLE supprime tous les enregistrements d’une table et peut libérer l’espace de stockage.
Le problème majeur survenant lors d'un Truncate table provient souvent de la contrainte référentielle.
Celle ci concerne toujours deux tables, une table parent et une table enfant possédant une colonne en commun. Pour la table parent, c'est une clé primaire et pour la table enfant, c'est une clé étrangère (FK).

Dans l'exemple ci-dessous nous allons essayer de tronquer une table parent (TABLE_A) qui a sa colonne COL_1 (PK) référencée par la colonne COL_2 (FK) dans une table enfant (TABLE_B).

Attention, pas de rollback posible avec la commande Oracle Truncate Table.

Syntaxe TRUNCATE TABLE.

 
 TRUNCATE { TABLE [ schema. ]table [ { PRESERVE | PURGE } MATERIALIZED VIEW LOG ] | CLUSTER [ schema. ]cluster } [ { DROP | REUSE } STORAGE ] ; 

sql-truncate-table

 

CREATION ENVIRONNEMENT TRUNCATE DE TEST (tables Oracle).

 
 C:\>SET ORACLE_SID=DBTEST C:\>SQLPLUS scott/tiger SQL*Plus: Release 10.2.0.1.0 - Production on Mer. Ao¹t 3 14:29:49 2011 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connecté à : Oracle Database 10g Release 10.2.0.1.0 - Production SQL> CREATE TABLE SCOTT.TABLE_A ( COL_1 VARCHAR2(30 BYTE) NULL, COL_2 INTEGER NOT NULL, COL_3 VARCHAR2(50 BYTE) NOT NULL, CONSTRAINT TABLE_A_PK PRIMARY KEY (COL_1) USING INDEX TABLESPACE USERS ) TABLESPACE USERS; Table créée. SQL> SQL> CREATE TABLE SCOTT.TABLE_B ( COL_1 VARCHAR2(10 BYTE) NOT NULL, COL_2 VARCHAR2(30 BYTE) NOT NULL, CONSTRAINT TABLE_B_R01 FOREIGN KEY (COL_2) REFERENCES SCOTT.TABLE_A (COL_1) ) TABLESPACE USERS; Table créée. SQL> Insert into SCOTT.TABLE_A Values('a', 1, 'aa'); Insert into SCOTT.TABLE_A Values('b', 1, 'bb'); Insert into SCOTT.TABLE_A Values('c', 1, 'cc'); Insert into SCOTT.TABLE_B Values('aaa', 'a'); Insert into SCOTT.TABLE_B Values('bbb', 'b'); Insert into SCOTT.TABLE_B Values('ccc', 'c'); Insert into SCOTT.TABLE_B Values('aab', 'a'); 7 ligne créées. SQL> COMMIT; Validation effectuée. 

 

Tentative de suppression direct avec TRUNCATE TABLE.

Ici, nous savons déjà que cela va se traduire par un échec avec un ORA-02266.

 
 SQL> TRUNCATE TABLE SCOTT.TABLE_A; TRUNCATE TABLE SCOTT.TABLE_A * ERREUR à la ligne 1 : ORA-02266: les clés primaires/uniques de la table sont référencées par des clés étrangères SQL> 

on ne peut pas supprimer un enregistrement de la table parent si un enregistrement enfant y est rattaché.

Deux méthodes pour éviter l'erreur ORA-02266 avec la commande TRUNCATE ci-dessous.

 

DROP PRIMARY KEY table A puis TRUNCATE TABLE.

 
 SQL> ALTER TABLE SCOTT.TABLE_A DROP PRIMARY KEY CASCADE; Table modifiée. SQL> SQL> TRUNCATE TABLE SCOTT.TABLE_A; Table tronquée. SQL> 

 

DISABLE CONSTRAINT table B puis TRUNCATE TABLE et enfin RE-ENABLE CONSTRAINT.

 
 SQL> ALTER TABLE SCOTT.TABLE_B DISABLE CONSTRAINT "TABLE_B_R01"; Table modifiée. SQL> SQL> TRUNCATE TABLE SCOTT.TABLE_A; Table tronquée. SQL> ALTER TABLE SCOTT.TABLE_B MODIFY CONSTRAINT TABLE_B_R01 ENABLE NOVALIDATE; Table modifiée. SQL> 

 

SUPPRESSION ENVIRONNEMENT DE TEST (tables Oracle).

 
 SQL> DROP TABLE SCOTT.TABLE_A CASCADE CONSTRAINTS PURGE; Table supprimée. SQL> DROP TABLE SCOTT.TABLE_B CASCADE CONSTRAINTS PURGE; Table supprimée. 

 

Haut de Page www.dba-ora.fr

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• SQL INSERT INTO TABLE ORACLE
• CREATE TABLE ORACLE
• Désactiver toutes les FOREIGN KEY FK référençant une table.
• Lister les CONTRAINTES d'une Table ou View.
• Lister et désactiver les CHECK CONSTRAINTS d'une Table.
Repost 0
Published by Daniel R. - dans COMMANDES SQL DDL-LDD
commenter cet article
21 janvier 2012 6 21 /01 /janvier /2012 11:24

 

CREATE SCHEMA ORACLE.

C'est quoi un SCHEMA Oracle. ?
Comment créér plusieurs Tables, Vues et Grant en une transaction sur un SCHEMA Oracle. ?

 

La base de données ORACLE comporte des schémas dans lesquels on retrouve des objets tel que Tables, Vues, Index, Procédures, ...
Un SCHEMA permet de segmenter la base, de mieux gérer les privilèges, le SCHEMA appartient toujours à l'utilisateur qui l'a créé.

La commande CREATE SCHEMA comporte des commandes CREATE TABLE, CREATE VIEW et GRANT et donc permet de créer des tables, des vues ainsi que des autorisations en une seule transaction. Si une commande est erronée alors la transaction est annulée.
Le nom du SCHEMA doit être celui d'un utilisateur Oracle existant.

Description de la commande CREATE SCHEMA.

 

Syntaxe CREATE SCHEMA.

 

 CREATE SCHEMA AUTHORIZATION schema { create_table_statement | create_view_statement | grant_statement } [ create_table_statement | create_view_statement | grant_statement ]... ; 

 

CREATE SCHEMA.

- Connexion au schema SYSADM existant.
- Création d'un User.
- Création Tables, Vues et Grant pour le user DBA_ORA dans le SCHEMA SYSADM.

  C:\>SET ORACLE_SID=DBTEST C:\>SQLPLUS /NOLOG SQL*Plus: Release 10.2.0.1.0 - Production on Sam. Janv. 21 18:21:47 2012 Copyright (c) 1982, 2005, Oracle. All rights reserved. SQL> CONNECT SYSADM/mdp Connecté. 
  SQL> CREATE USER DBA_ORA IDENTIFIED BY VALUES 'DBA_ORA' DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP PROFILE DEFAULT ACCOUNT UNLOCK; Utilisateur créé. SQL> CREATE SCHEMA AUTHORIZATION "SYSADM" CREATE TABLE ora (Champs1 VARCHAR2(10) PRIMARY KEY, Champs2 NUMBER) CREATE TABLE ora2 (Champs1 VARCHAR2(10) PRIMARY KEY, Champs2 NUMBER) CREATE VIEW ora_view AS SELECT Champs1, Champs2 FROM ora WHERE Champs1 = 'DBA' CREATE VIEW ora_view2 AS SELECT soc_code FROM societe WHERE soc_code = 10 GRANT select ON ora_view TO dba_ora GRANT select ON ora_view2 TO dba_ora; Schéma créé. SQL>  

Haut de Page www.dba-ora.fr


Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• Liste Privilèges Systèmes
• Liste Privilèges Objets
• GRANT SYSTEM PRIVILEGES
• CREATE TABLE ORACLE
• SQL CREATE VIEW
Repost 0
Published by Daniel R. - dans COMMANDES SQL DDL-LDD
commenter cet article
3 avril 2011 7 03 /04 /avril /2011 00:41

 

Ajouter un champ dans une table Oracle avec ALTER TABLE ADD.

Pour ajouter une colonne dans une table existante, on utilisera la syntaxe ALTER TABLE ADD.

 

Syntax ALTER TABLE ADD.

 
 ALTER TABLE [ schema. ]table ADD { ( column [ datatype ] ) } ; 

 

Exemple ALTER TABLE ADD.

 

 

 SQL> ALTER TABLE countries ADD (duty_pct NUMBER(2,2), visa_needed VARCHAR2(3));

 

 


Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• Modifier un champ de table Oracle ALTER TABLE MODIFY
Repost 0
Published by Daniel Roesch - dans COMMANDES SQL DDL-LDD
commenter cet article
2 avril 2011 6 02 /04 /avril /2011 19:34

 

Modifier un champ de table Oracle avec ALTER TABLE MODIFY.

Pour modifier une colonne dans une table existante, on utilisera la syntaxe ALTER TABLE MODIFY.

 

Syntax ALTER TABLE MODIFY.

 
 ALTER TABLE [ schema. ]table MODIFY { ( column [ datatype ] ) } ; 

 

Exemple ALTER TABLE MODIFY.

 

SQL> ALTER TABLE countries MODIFY (duty_pct NUMBER(3,2));   • Passage de NUMBER(2,2) à NUMBER(3,2)

SQL> ALTER TABLE supplier MODIFY supplier_name NOT NULL;   • Passage de NULL autorisé à NOT NULL

 


Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• Ajouter un champ de table Oracle ALTER TABLE ADD
Repost 0
Published by Daniel Roesch - dans COMMANDES SQL DDL-LDD
commenter cet article
16 août 2010 1 16 /08 /août /2010 23:35


Commande DDL-LDD DROP SEQUENCE Oracle

Permet de supprimer une sequence, notamment lorsque l'on désire changer la clause START WITH (clause non modifiable avec ALTER SEQUENCE).

Syntaxe de suppression d’une séquence.

DROP SEQUENCE [schéma.]nomSequence ;

 

DROP SEQUENCE VENTE.SEQ_CPT_CLIENT ;

Attention :
Privilège DROP ANY SEQUENCE pour supprimer une sequence.

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• SQL ALTER SEQUENCE ORACLE
• SQL CREATE SEQUENCE ORACLE
Repost 0
Published by Daniel Roesch - dans COMMANDES SQL DDL-LDD
commenter cet article
15 août 2010 7 15 /08 /août /2010 15:01


Commande DDL-LDD ALTER SEQUENCE Oracle

Permet de modifier, définir une suite de nombres entiers, de clés uniques, de compteurs pour des tables.

Syntaxe de modification d’une séquence.

ALTER SEQUENCE [schéma.]nomSéquence
[INCREMENT BY entier ]
[ { MAXVALUE entier | NOMAXVALUE } ]
[ { MINVALUE entier | NOMINVALUE } ]
[ { CYCLE | NOCYCLE } ]
[ { CACHE entier | NOCACHE } ]
[ { ORDER | NOORDER } ] ;

 

ALTER SEQUENCE SCHEMA.MA_SEQUENCE
INCREMENT BY 5
MAXVALUE 999999999999999999999999999 
CACHE 50
NOORDER;


Attention :
Privilège ALTER SEQUENCE pour modifier une séquence dans votre schéma.
Privilège ALTER ANY SEQUENCE pour les autres schéma.
La clause START WITH ne peut être modifiée.

 

SYNTAXE

DESCRIPTION

INCREMENT BY intervalle entre les deux valeurs de la séquence (par défaut 1).
MAXVALUE valeur maximale de la séquence.
MINVALUE valeur minimale de la séquence.
CYCLE la séquence continuera de générer des valeurs après avoir atteint sa limite.
NOCYCLE la séquence s'arretera de générer des valeurs après avoir atteint sa limite.
CACHE les valeurs de la séquence seront mises en cache.
NOCACHE les valeurs de la séquence ne seront pas dans le cache.
ORDER les séquences sont générées dans l’ordre des requêtes.



La fonction ma_sequence.NEXTVAL incrémentera la séquence et me retournera la nouvelle valeur.
SQL> SELECT ma_sequence.NEXTVAL "Valeur Incrementée" FROM dual;

 

La fonction ma_sequence.CURRVAL me retournera la valeur courante de la séquence.
SQL> SELECT ma_sequence.CURRVAL "Valeur Courante" FROM dual;

 

J'insere un enregistrement avec une nouvelle valeur incrémentée dans UTI_Id (clé Primaire).
SQL> INSERT INTO utilisateur (UTI_Id,Prenom,Nom) VALUES (ma_sequence.NEXTVAL,'Jean','MARTIN');

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• SQL DROP SEQUENCE ORACLE
• SQL CREATE SEQUENCE ORACLE
Repost 0
Published by Daniel Roesch - dans COMMANDES SQL DDL-LDD
commenter cet article
10 août 2010 2 10 /08 /août /2010 22:47


Commande DDL-LDD CREATE SEQUENCE Oracle

Permet de définir une suite de nombres entiers, de clés uniques, de compteurs pour des tables.

Pour la description des séquences voir les Vues DBA_SEQUENCES, ALL_SEQUENCES, USER_SEQUENCES

 

Syntaxe de création d’une séquence.

CREATE SEQUENCE [schéma.]nomSéquence
[INCREMENT BY entier ]
[START WITH entier ]
[ { MAXVALUE entier | NOMAXVALUE } ]
[ { MINVALUE entier | NOMINVALUE } ]
[ { CYCLE | NOCYCLE } ]
[ { CACHE entier | NOCACHE } ]
[ { ORDER | NOORDER } ] ;

 

CREATE SEQUENCE SCHEMA.MA_SEQUENCE
INCREMENT BY 1
START WITH 200
MAXVALUE 999999999999999999999999999 
MINVALUE 1
NOCYCLE
CACHE 30
ORDER;


Attention :
Privilège CREATE SEQUENCE pour créer une séquence dans votre schéma.
Privilège CREATE ANY SEQUENCE pour les autres schéma.

 

SYNTAXE

DESCRIPTION

INCREMENT BY intervalle entre les deux valeurs de la séquence (par défaut 1).
START WITH première valeur de la séquence à générer.
MAXVALUE valeur maximale de la séquence.
MINVALUE valeur minimale de la séquence.
CYCLE la séquence continuera de générer des valeurs après avoir atteint sa limite.
NOCYCLE la séquence s'arretera de générer des valeurs après avoir atteint sa limite.
CACHE les valeurs de la séquence seront mises en cache.
NOCACHE les valeurs de la séquence ne seront pas dans le cache.
ORDER les séquences sont générées dans l’ordre des requêtes.



La fonction ma_sequence.NEXTVAL incrémentera la séquence et me retournera la nouvelle valeur.
SQL> SELECT ma_sequence.NEXTVAL "Valeur Incrementée" FROM dual;

 

La fonction ma_sequence.CURRVAL me retournera la valeur courante de la séquence.
SQL> SELECT ma_sequence.CURRVAL "Valeur Courante" FROM dual;

 

J'insere un enregistrement avec une nouvelle valeur incrémentée dans UTI_Id (clé Primaire).
SQL> INSERT INTO utilisateur (UTI_Id,Prenom,Nom) VALUES (ma_sequence.NEXTVAL,'Jean','MARTIN');

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• SQL DROP SEQUENCE ORACLE
• SQL ALTER SEQUENCE ORACLE
Repost 0
Published by Daniel Roesch - dans COMMANDES SQL DDL-LDD
commenter cet article