Overblog Suivre ce blog
Administration Créer mon blog
10 juin 2012 7 10 /06 /juin /2012 18:24

 

Afficher les attributs d'une table Oracle.

Comment lister les colonnes et attributs d'une table.
Comment lister les champs d'une table oracle.
Comment connaître les attributs de colonnes d'une table.

Script affichage des attributs de table Oracle.

Pour connaitre les attributs de champ d'une table dans Oracle, on utilise la vue ALL_TAB_COLUMNS.
Ce script liste les champs ainsi que les attributs de la table.

 

 
  SQL> REPHEADER PAGE CENTER 'SCRIPT LISTE ATTRIBUTS TABLE ORACLE' SQL> SET LINESIZE 100 SQL> COL ID FORMAT 999 SQL> COL TYPE FORMAT A12 SQL> COL NAME FORMAT A12 SQL> COL comments FORMAT A12 SQL> SELECT cols.column_id AS ID, cols.column_name AS NAME, cols.nullable, cols.data_type AS TYPE, DECODE (data_type, 'NUMBER', data_precision + data_scale, data_length) LENGTH, cols.data_precision PRECISION, cols.data_scale SCALE, cols.data_length dlength, coms.comments FROM sys.all_col_comments coms, sys.all_tab_columns cols WHERE coms.table_name = cols.Table_Name AND coms.column_name = cols.column_Name AND coms.owner = cols.owner AND cols.table_name = 'EMP' AND cols.owner = 'SCOTT' ORDER BY column_id;  

 

Attributs , Champs de la table Oracle.

 
  SCRIPT LISTE ATTRIBUTS TABLE ORACLE ID NAME N TYPE LENGTH PRECISION SCALE DLENGTH COMMENTS ---- ------------ - ------------ ---------- ---------- ---------- ---------- -------- 1 EMPNO N NUMBER 4 4 0 22 2 ENAME Y VARCHAR2 10 10 3 JOB Y VARCHAR2 15 15 4 MGR Y NUMBER 4 4 0 22 5 HIREDATE Y DATE 7 7 6 SAL Y NUMBER 9 7 2 22 7 COMM Y NUMBER 9 7 2 22 8 DEPTNO Y NUMBER 2 2 0 22 8 ligne(s) sélectionnée(s). SQL>  

Haut de Page www.dba-ora.fr

 

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
 
Repost 0
Published by Oracle SQL - dans TABLES
commenter cet article
8 juin 2011 3 08 /06 /juin /2011 10:22

 

CREATE TABLE - Création table Oracle avec l'ordre SQL CREATE TABLE.

Comment créer une table dans ma base de données Oracle.

Rappel :

• Pour créer une table dans votre schéma, il vous faut le privilège CREATE TABLE ou le privilège CREATE ANY TABLE.
• On crée une table avec la commande SQL CREATE TABLE.
• On modifie la structure d'une table avec la commande SQL ALTER TABLE.
• On supprime une table avec la commande SQL DROP TABLE.
• On vide totalement une table avec la commande SQL TRUNCATE TABLE.

 

Privilèges CREATE TABLE ou CREATE ANY TABLE.

 
 SQL> GRANT CREATE TABLE TO SCOTT; Grant succeeded. SQL> GRANT CREATE ANY TABLE TO SCOTT; Grant succeeded. SQL> 

CREATE ANY TABLE autorise la création de tables dans tout schéma.
CREATE TABLE autorise la création de tables uniquement dans son schéma.

 

Syntax commande SQL CREATE TABLE.

 
 CREATE TABLE [ schema. ]table ( [ column datatype [DEFAULT expr] [NOT NULL][(inline_constraint | inline_ref_constraint )], column datatype... ], [table_constraint [,…]] [table_ref_constraint [,…]] ) [TABLESPACE nom_tablespace] [LOGGING | NOLOGGING] ... ; 

 

CREATE TABLE avec une PRIMARY KEY et CHECK.

 
 CREATE TABLE scott.vehicule ( vehicule_id NUMBER(6) , vehicule_marque VARCHAR2(30) CONSTRAINT ck_vehic_marq_nn NOT NULL , vehicule_modele VARCHAR2(30) CONSTRAINT ck_vehic_mod_nn NOT NULL , date_sortie DATE , vehicule_prix NUMBER(10,2) , CONSTRAINT pk_vehicule_id PRIMARY KEY (vehicule_id) ) TABLESPACE data; 
 
 SQL> COLUMN CONSTRAINT_NAME FORMAT A20 SQL> COLUMN INDEX_NAME FORMAT A20 SQL> COLUMN COLUMN_NAME FORMAT A15 SQL> SET LINESIZE 150 SQL> SELECT a.CONSTRAINT_NAME, 2 a.CONSTRAINT_TYPE, 3 a.INDEX_NAME, 4 b.COLUMN_NAME, 5 b.POSITION 6 FROM all_constraints a, all_cons_columns b 7 WHERE a.owner = 'SCOTT' 8 AND a.TABLE_NAME = 'VEHICULE' 9 AND a.CONSTRAINT_NAME = b.CONSTRAINT_NAME; CONSTRAINT_NAME C INDEX_NAME COLUMN_NAME POSITION -------------------- - -------------------- --------------- ---------- PK_VEHICULE_ID P PK_VEHICULE_ID VEHICULE_ID 1 CK_VEHIC_MOD_NN C VEHICULE_MODELE CK_VEHIC_MARQ_NN C VEHICULE_MARQUE SQL> 

 

 

CREATE TABLE avec une PRIMARY KEY (INDEX COMPOSITES sur 3 Colonnes).

 
 CREATE TABLE scott.vehicule ( vehicule_id NUMBER(6) , vehicule_marque VARCHAR2(30) DEFAULT 'RENAULT' , vehicule_modele VARCHAR2(30) , date_sortie DATE , vehicule_prix NUMBER(10,2) , CONSTRAINT pk_vehicule_id PRIMARY KEY (vehicule_id, vehicule_marque, vehicule_modele) ) TABLESPACE data; 
 
 SQL> COLUMN CONSTRAINT_NAME FORMAT A20 SQL> COLUMN INDEX_NAME FORMAT A20 SQL> COLUMN COLUMN_NAME FORMAT A15 SQL> SET LINESIZE 150 SQL> SELECT a.CONSTRAINT_NAME, 2 a.CONSTRAINT_TYPE, 3 a.INDEX_NAME, 4 b.COLUMN_NAME, 5 b.POSITION 6 FROM all_constraints a, all_cons_columns b 7 WHERE a.owner = 'SCOTT' 8 AND a.TABLE_NAME = 'VEHICULE' 9 AND a.CONSTRAINT_NAME = b.CONSTRAINT_NAME; CONSTRAINT_NAME C INDEX_NAME COLUMN_NAME POSITION -------------------- - -------------------- --------------- ---------- PK_VEHICULE_ID P PK_VEHICULE_ID VEHICULE_ID 1 PK_VEHICULE_ID P PK_VEHICULE_ID VEHICULE_MARQUE 2 PK_VEHICULE_ID P PK_VEHICULE_ID VEHICULE_MODELE 3 SQL> 

 

CREATE TABLE avec un Index UNIQUE (unicité) et 3 CHECK.

 
 CREATE TABLE scott.vehicule ( vehicule_id NUMBER(6) , vehicule_marque VARCHAR2(30) , vehicule_modele VARCHAR2(30) , date_sortie DATE CONSTRAINT ck_vehic_date_nn NOT NULL , vehicule_prix NUMBER(10,2) CONSTRAINT ck_vehic_prix_nn NOT NULL , CONSTRAINT ck_vehic_prix_min CHECK (vehicule_prix > 0) , CONSTRAINT un_vehicule_id UNIQUE (vehicule_id) ) TABLESPACE data; COMMENT ON COLUMN SCOTT.VEHICULE.VEHICULE_PRIX IS 'Prix neuf'; 
 
 SQL> COLUMN CONSTRAINT_NAME FORMAT A20 SQL> COLUMN INDEX_NAME FORMAT A20 SQL> COLUMN COLUMN_NAME FORMAT A15 SQL> SET LINESIZE 150 SQL> SELECT a.CONSTRAINT_NAME, 2 a.CONSTRAINT_TYPE, 3 a.INDEX_NAME, 4 b.COLUMN_NAME, 5 b.POSITION 6 FROM all_constraints a, all_cons_columns b 7 WHERE a.owner = 'SCOTT' 8 AND a.TABLE_NAME = 'VEHICULE' 9 AND a.CONSTRAINT_NAME = b.CONSTRAINT_NAME; CONSTRAINT_NAME C INDEX_NAME COLUMN_NAME POSITION -------------------- - -------------------- --------------- ---------- UN_VEHICULE_ID U UN_VEHICULE_ID VEHICULE_ID 1 CK_VEHIC_PRIX_MIN C VEHICULE_PRIX CK_VEHIC_PRIX_NN C VEHICULE_PRIX CK_VEHIC_DATE_NN C DATE_SORTIE SQL> 

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• Ajouter un champ de table Oracle ALTER TABLE ADD
• Modifier un champ de table Oracle ALTER TABLE MODIFY
Repost 0
Published by Oracle SQL - dans TABLES
commenter cet article
7 juin 2011 2 07 /06 /juin /2011 00:08

 

Script Lister les Constraints d'une Table.

Comment voir et lister les contraintes d'une Table ou View Oracle ?

Lister les Contraintes.

Les valeurs de CONSTRAINT_TYPE :

  • P (Primary key).
  • U (Unique key).
  • R (Referential integrity).
  • C (Check constraint).
  • V (with check option on a view).
  • O (with read only on a view).
 
  REPHEADER PAGE CENTER 'LISTE DES CONTRAINTES D''UNE TABLE OU VIEW' SET LINESIZE 100 SET PAGESIZE 900 COL CONSTRAINT_NAME FORMAT A20 COL INDEX_NAME FORMAT A20 COL COLUMN_NAME FORMAT A15 SELECT a.constraint_name, DECODE(a.constraint_type,'C', 'Check constraint', 'P', 'Primary Key', 'U', 'Unique Key', 'R', 'Referential Integrity', 'V', 'With Check Option on a View', 'O', 'With Read Only on a View', 'Autre à définir') CONSTRAINT_TYPE, a.index_name, b.column_name, b.position FROM all_constraints a INNER JOIN all_cons_columns b ON (a.constraint_name = b.constraint_name AND a.owner = b.owner) WHERE a.table_name = 'UTILISATEUR' AND a.owner = 'ORA' ORDER BY 3,2;  

 

Aperçu Script Lister Constraints.

 
  LISTE DES CONTRAINTES D'UNE TABLE OU VIEW CONSTRAINT_NAME CONSTRAINT_TYPE INDEX_NAME COLUMN_NAME POSITION -------------------- --------------------------- -------------------- --------------- ---------- PK_UTICODE Primary Key PK_UTICODE UTI_CODE 1 UNQ_UTI_U Unique Key UNQ_UTI_U UTI_USER 1 CHK_ADMIN Check constraint UTI_ADM SYS_C0015629 Check constraint UTI_NOM SYS_C0015630 Check constraint UTI_PRENOM SYS_C0015627 Check constraint UTI_USER SYS_C0015628 Check constraint UTI_PASSE FK_UTI_SITE Referential Integrity SITE_CODE 1 8 ligne(s) sélectionnée(s).  

Haut de Page www.dba-ora.fr

 

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
 
Repost 0
Published by Daniel Roesch - dans TABLES
commenter cet article
5 juin 2011 7 05 /06 /juin /2011 12:52

 

Voir, désactiver les Check Constraints d'une table.

Une Contrainte d'intégrité CHECK nécessite et impose une condition simple ou complexe pour chaque ligne de la table.

La condition d'une contrainte CHECK a les limitations suivantes:
• doit être une expression booléenne qui peut être évalué selon les valeurs de la ligne insérée ou mise à jour.
• ne peut pas contenir des sous-requêtes.
• ne peut pas inclure SYSDATE, UID, USER, ou USERENV.

Avec le résultat de cette requête, nous allons pouvoir désactiver toutes les une Contrainte d'intégrité CHECK d'une table.

Rappel : On désactive une contrainte avec un ALTER TABLE "table_name" DISABLE CONSTRAINT "constraint_name";

Script listant les Contraintes d'intégrités CHECK ici sur la table ANALYSE.

 
 SQL> SQL> SELECT TABLE_NAME, 2 CONSTRAINT_NAME, 3 STATUS, 4 CONSTRAINT_TYPE 5 FROM ALL_CONSTRAINTS 6 WHERE CONSTRAINT_TYPE = 'C' 7 AND OWNER = UPPER ('SCOTT') 8 AND TABLE_NAME = UPPER ('ANALYSE') 9 AND STATUS = 'ENABLED'; TABLE_NAME CONSTRAINT_NAME STATUS C ------------------------------ ------------------------------ -------- - ANALYSE SYS_C0013527 ENABLED C ANALYSE CHECK_A_PRE ENABLED C ANALYSE CHECK_VER_PRE ENABLED C ANALYSE CHECK_ANA_E_PR ENABLED C ANALYSE CHECK_ANA_VAL_REC ENABLED C 10 rows selected. SQL> 

 

Script permettant de désactiver  les Contraintes d'intégrités CHECK ici sur la table ANALYSE.

 
 SQL> SQL> SELECT 'ALTER TABLE "' 2 || table_name 3 || '" DISABLE CONSTRAINT "' 4 || constraint_name 5 || '";' "CHECK CONSTRAINTS A DESACTIVER" 6 FROM all_constraints a 7 WHERE constraint_type = 'C' 8 AND owner = UPPER ('SCOTT') 9 AND table_name = UPPER ('ANALYSE') 10 AND status = 'ENABLED'; CHECK CONSTRAINTS A DESACTIVER -------------------------------------------------------------------- ALTER TABLE "ANALYSE" DISABLE CONSTRAINT "SYS_C0013527"; ALTER TABLE "ANALYSE" DISABLE CONSTRAINT "CHECK_A_PRE"; ALTER TABLE "ANALYSE" DISABLE CONSTRAINT "CHECK_VER_PRE"; ALTER TABLE "ANALYSE" DISABLE CONSTRAINT "CHECK_ANA_E_PR"; ALTER TABLE "ANALYSE" DISABLE CONSTRAINT "CHECK_ANA_VAL_REC"; 10 rows selected. SQL> 

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• Script désactivation clés étrangères (FK) référençant une table
Repost 0
Published by Daniel Roesch - dans TABLES
commenter cet article
2 juin 2011 4 02 /06 /juin /2011 23:36

 

Désactiver les clés étrangères FK référençant une table.

Avec le résultat de cette requête, nous allons pouvoir désactiver toutes les FK référençant une table.

Rappel : On désactive une FK avec un ALTER TABLE "table_name" DISABLE CONSTRAINT "constraint_name";

Script désactivant les FK référençant ici la table ANALYSE.

 
 SQL> SQL> SELECT 'ALTER TABLE "' 2 || r.table_name 3 || '" DISABLE CONSTRAINT "' 4 || r.constraint_name 5 || '";' 6 "CONSTRAINTS A DESACTIVER" 7 FROM all_constraints r 8 WHERE r.owner = 'SCOTT' 9 AND r.constraint_type = 'R' 10 AND r.r_constraint_name IN 11 (SELECT r1.constraint_name 12 FROM all_constraints r1 13 WHERE r1.table_name = 'ANALYSE' AND r1.owner = 'SCOTT'); CONSTRAINTS A DESACTIVER -------------------------------------------------------------------------------------- ALTER TABLE "PHYSIO" DISABLE CONSTRAINT "FK_PHYSIO_ANALYSE"; ALTER TABLE "LOT_E" DISABLE CONSTRAINT "FK_LOT_E_ANALYSE"; ALTER TABLE "LOT_A" DISABLE CONSTRAINT "FK_LOT_A_ANA"; ALTER TABLE "LIG_PREF" DISABLE CONSTRAINT "FK_LIG_PREF_ANANUM"; ALTER TABLE "DECH" DISABLE CONSTRAINT "FK_DECH_ANALYSE"; ALTER TABLE "T_PROV_D" DISABLE CONSTRAINT "PRV_ANA_NUM"; ALTER TABLE "T_PREF_EN_A" DISABLE CONSTRAINT "FK_PAT_ANA_NUM"; 7 rows selected. SQL> 

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
Repost 0
Published by Daniel Roesch - dans TABLES
commenter cet article
18 septembre 2010 6 18 /09 /septembre /2010 22:47

 

Oracle FLASHBACK Table Restauration.

Comment restaurer, rétablir une table dans sa globalité ?.

Rappel FLASHBACK TABLE :

Flashback s'appuie sur les segments d'annulations. Avoir le privilège FLASHBACK ANY TABLE.

 

Une démonstration dans laquelle je vais supprimer toutes les lignes d'une table puis effectuer une récupération globale de la table.

On active l'option ROW MOVEMENT sur la table si inactive (option de Create Table).

 

SQL> ALTER TABLE societe ENABLE ROW MOVEMENT;

 

Valeurs initiales dans la table à 22H00.

 

SQL> SELECT count(*) FROM societe;

count(*)
5

 

Suppression des lignes à 22H10.

 

SQL> DELETE societe;
SQL> commit;

 

Valeurs initiales dans la table à 22H10.

 

SQL> SELECT count(*) FROM societe;

count(*)
0

 

Récupération avec FLASHBACK TABLE à 22h20.

 
 SQL> FLASHBACK TABLE societe TO TIMESTAMP TO_TIMESTAMP ('18/09/2010 22:05:00','DD/MM/YYYY HH24:MI:SS'); 

 

Vérification dans la table.

 

SQL> SELECT count(*) FROM societe;

count(*)
5

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• Oracle FLASHBACK QUERY TIMESTAMP
• Oracle FLASHBACK TRANSACTION QUERY
• Oracle FLASHBACK Restauration Table Niveau Ligne
• FLASHBACK et DROP TABLE avec RECYCLEBIN
Repost 0
Published by Daniel Roesch - dans TABLES
commenter cet article
18 septembre 2010 6 18 /09 /septembre /2010 15:40

 

Oracle FLASHBACK Restauration Niveau Ligne.

Comment restaurer, rétablir des lignes supprimées dans une table ?.

Rappel FLASHBACK NIVEAU LIGNE :

Flashback s'appuie sur les segments d'annulations et le paramètre UNDO_RETENTION.

 

Une démonstration dans laquelle je vais supprimer 2 lignes d'une table puis récuperation de celles ci.

Valeurs initiales dans la table à 15h27.

 

SQL> SELECT soc_code, soc_raison_soc FROM societe;

soc_code soc_raison_soc
1 Societe 1
2 Societe 2
3 Societe 3
4 Societe 4
5 Societe 5

 

Suppression des lignes à 15h28.

 

SQL> DELETE FROM societe where soc_code in(3,4);
SQL> commit; --15h28

 

Valeurs dans la table..

 

SQL> SELECT soc_code, soc_raison_soc FROM societe;

soc_code soc_raison_soc
1 Societe 1
2 Societe 2
5 Societe 5

 

Récupération des 2 lignes à 15h40.

 
 INSERT INTO societe (SELECT * FROM societe AS OF TIMESTAMP TO_TIMESTAMP ( '18/09/2010 15:27:00', 'DD/MM/YYYY HH24:MI:SS' ) WHERE soc_code IN (3, 4)); 

 

Vérification dans la table.

 

SQL> SELECT soc_code, soc_raison_soc FROM societe;

soc_code soc_raison_soc
1 Societe 1
2 Societe 2
3 Societe 3
4 Societe 4
5 Societe 5

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• Oracle FLASHBACK QUERY TIMESTAMP
• Oracle FLASHBACK TRANSACTION QUERY
• Oracle FLASHBACK Table Restauration Globale
• FLASHBACK et DROP TABLE avec RECYCLEBIN
Repost 0
Published by Daniel Roesch - dans TABLES
commenter cet article
14 septembre 2010 2 14 /09 /septembre /2010 01:15

 

Comment annuler une transaction avec FLASHBACK TRANSACTION QUERY.

Comment récupérer l'instruction UNDO SQL qui permettra d'annuler une transaction ?.
Avec Logminer ( dbms_logmnr ) ? Non.

Pour voir les modifications réalisées par une transaction sur un intervalle Temps, nous pouvons interroger la vue FLASHBACK_TRANSACTION_QUERY.

Une demonstration dans laquelle je vais effectuer 1 mise à jour sur un champ de table et ensuite avec FLASHBACK VERSIONS et FLASHBACK TRANSACTION je vais récupérer l'UNDO SQL  à partir de la colonne VERSIONS_XID (Identifiant de la transaction).

Attention, vous devez avoir le privilège SELECT ANY TRANSACTION

Valeur initiale du champ.

 

SQL> SELECT soc_code, soc_raison_soc FROM societe WHERE soc_code=49;

soc_code soc_raison_soc
49 DBACENTER

 

Update de la ligne.

 

SQL> UPDATE societe SET soc_raison_soc='Update 1' WHERE soc_code=49;
SQL> commit;

 

Interrogation avec FLASHBACK VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE.

 
 SELECT soc_code, soc_raison_soc, VERSIONS_STARTTIME, VERSIONS_ENDTIME, VERSIONS_OPERATION DML, VERSIONS_XID FROM societe VERSIONS BETWEEN TIMESTAMP systimestamp - INTERVAL '11' MINUTE AND systimestamp - INTERVAL '1' MINUTE WHERE soc_code = 49; 
soc_code soc_raison_soc VERSIONS_STARTTIME VERSIONS_ENDTIME DML VERSIONS_XID
49 Update 1 14/09/2010 01:37:53.   U 0A000D00C7060000
49 DBACENTER   14/09/2010 01:37:53.    

Pour une interrogation par SCN utilisez : VERSIONS BETWEEN SCN xxxxx AND xxxx

Description des pseudos colonnes.

VERSIONS_STARTTIME = Premier timestamp de la version
VERSIONS_STARTSCN = Premier SCN de la version
VERSIONS_ENDTIME = Fin timestamp de la version
VERSIONS_OPERATION = Type d'opération DML de la version
VERSIONS_XID = Identifiant transaction

 

FLASHBACK TRANSACTION QUERY.

On récupère l'identifiant de la transaction ( VERSIONS_XID ) et on interroge la vue FLASHBACK_TRANSACTION_QUERY.

 
 SELECT operation, undo_sql, table_name FROM FLASHBACK_TRANSACTION_QUERY WHERE XID = HEXTORAW ('0A000D00C7060000'); 
OPERATION UNDO_SQL TABLE_NAME
UPDATE update "DBA"."SOCIETE" set "SOC_RAISON_SOC" = 'DBACENTER' where ROWID = 'AAANB6AAFAADmRsAAA'; SOCIETE
BEGIN    

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• Oracle FLASHBACK VERSIONS QUERY
• Lire les REDO LOG Oracle avec LOGMINER (dbms_logmnr)
• SCN System Change Number Oracle
• FLASHBACK et DROP TABLE avec RECYCLEBIN
Repost 0
Published by Daniel Roesch - dans TABLES
commenter cet article
12 septembre 2010 7 12 /09 /septembre /2010 02:12

 

Oracle FLASHBACK VERSIONS QUERY.

Comment connaitre la valeur d'un champs de table il y a de cela 10 minutes ?.
Comment connaitre l'historique des versions de lignes modifiées ?.

FLASHBACK QUERY et FLASHBACK VERSIONS QUERY permettent d'interroger les différentes versions d'une ligne dans une table dans un intervalle de temps.

FLASHBACK VERSIONS QUERY :

• est un mécanisme d'interrogation uniquement.
• n'indique pas ce qui a changé.
• ne fonctionne pas si des opérations DDL ont eu lieu dans la table.
• ne peut pas interroger au delà de la valeur de UNDO_RETENTION.

Une demonstration dans laquelle je vais effectuer 5 mises à jour sur un champ d'une table et ensuite afficher les versions par temps et SCN.

Valeur initiale du champ.

 

SQL> SELECT soc_code, soc_raison_soc FROM societe WHERE soc_code=49;

soc_code soc_raison_soc
49 DBACENTER

 

Update de la ligne.

 

SQL> UPDATE societe SET soc_raison_soc='Update 1' WHERE soc_code=49;
SQL> commit;
SQL> UPDATE societe SET soc_raison_soc='Update 2' WHERE soc_code=49;
SQL> commit;
SQL> UPDATE societe SET soc_raison_soc='Update 3' WHERE soc_code=49;
SQL> commit;
SQL> UPDATE societe SET soc_raison_soc='Update 4' WHERE soc_code=49;
SQL> commit;
SQL> UPDATE societe SET soc_raison_soc='Update 5' WHERE soc_code=49;
SQL> commit;

 

Interrogation avec VERSIONS BETWEEN TIMESTAMP MINVALUE AND MAXVALUE.

 
 SELECT soc_code, soc_raison_soc, VERSIONS_STARTTIME, VERSIONS_ENDTIME, VERSIONS_OPERATION DML, VERSIONS_STARTSCN FROM societe VERSIONS BETWEEN TIMESTAMP systimestamp - INTERVAL '11' MINUTE AND systimestamp - INTERVAL '1' MINUTE WHERE soc_code = 49; 
soc_code soc_raison_soc VERSIONS_STARTTIME VERSIONS_ENDTIME DML VERSIONS_STARTSCN
49 Update 5 12/09/2010 02:56:33.   U 3957445
49 Update 4 12/09/2010 02:56:21. 12/09/2010 02:56:33. U 3957434
49 Update 3 12/09/2010 02:56:12. 12/09/2010 02:56:21. U 3957430
49 Update 2 12/09/2010 02:56:03. 12/09/2010 02:56:12. U 3957426
49 Update 1 12/09/2010 02:55:33. 12/09/2010 02:56:03. U 3957415
49 DBACENTER 12/09/2010 02:54:56. 12/09/2010 02:55:33. U 3957397

Pour une interrogation par SCN utilisez : VERSIONS BETWEEN SCN 3957397 AND 3957445

Description des pseudos colonnes.

VERSIONS_STARTTIME = Premier timestamp de la version
VERSIONS_STARTSCN = Premier SCN de la version
VERSIONS_ENDTIME = Fin timestamp de la version
VERSIONS_ENDSCN = Dernier SCN de la version
VERSIONS_OPERATION = Type d'opération DML de la version

 

FLASHBACK QUERY.

Autre variante d'interrogation unique, qu'elle était la version en cours il y 5 minutes avec AS OF TIMESTAMP.

 
 SELECT * FROM societe AS OF TIMESTAMP systimestamp - INTERVAL '5' MINUTE WHERE soc_code=49; 

ou

 
 SELECT * FROM societe AS OF SCN 3957426 WHERE soc_code=49; 

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• Oracle FLASHBACK TRANSACTION QUERY
• SCN System Change Number Oracle
• FLASHBACK et DROP TABLE avec RECYCLEBIN
Repost 0
Published by Daniel Roesch - dans TABLES
commenter cet article
2 septembre 2010 4 02 /09 /septembre /2010 00:13


Create table external.

Comment accéder en lecture seule aux données dans une table externe ? Oracle nous permet de disposer de ces données comme s'il s'agissait de données résidant dans une table de la base de données. Les données externes peuvent être ensuite interrogés directement via SQL.
Aucune opération DML (UPDATE, INSERT ou DELETE) sont possibles sur des tables external.

Nous allons mapper un fichier dans C:\DIRECTORY_ORA\Fichier_TAB.txt en tant que table externe.

- séparateur = TAB définie par fields terminated by 0X'09'
- Champs texte avec ponctuation sont entre des " afin de ne pas confondre les points virgules, virgules comme d'éventuels séparateurs définie par OPTIONALLY ENCLOSED BY '"'

 
 Aperçu du fichier Fichier_TAB.txt ID NOM PRENOM VILLE TEL COM 1 Durand Jean Paris 0165656565 "Commentaire, ; avec ponctuation " 2 Dupond Pierre Versailles 0165656566 "Commentaire, avec; ponctuation ;" 3 Morin Jean-Pierre Paris 0165656567 "Commentaire, avec ponctuation ;" 

Nous allons créer simplement un DIRECTORY Oracle (indispensable).

Création du DIRECTORY + GRANT en SYSDBA.

 

SQL> CONNECT / AS SYSDBA;
SQL> CREATE OR REPLACE DIRECTORY mydirectory as 'C:\directory_ora';
SQL> GRANT READ, WRITE ON DIRECTORY mydirectory TO myuser;

 

Création de la table externe avec CREATE TABLE.

 
 SQL> CONNECT myuser/****; SQL> CREATE TABLE Ma_Table (ID NUMBER(7), Nom VARCHAR2(30), Prenom VARCHAR2(30), Ville VARCHAR2(30), Tel VARCHAR2(15), Com VARCHAR2(50)) ORGANIZATION EXTERNAL ( TYPE ORACLE_LOADER DEFAULT DIRECTORY mydirectory ACCESS PARAMETERS ( records delimited by newline skip 1 badfile MYDIRECTORY:'Ma_Table.bad' logfile MYDIRECTORY:'Ma_Table.log' fields terminated by 0X'09' OPTIONALLY ENCLOSED BY '"' missing field values are null) LOCATION ('Fichier_TAB.txt')) PARALLEL REJECT LIMIT UNLIMITED; 

 

Interrogation de la table via SQL

 

SQL> SELECT * FROM Ma_Table;

ID Nom Prenom Ville Tel Com
1 Durand Jean Paris 0165656565 Commentaire, ; avec ponctuation
2 Dupond Pierre Versailles 0165656566 Commentaire, avec; ponctuation ;
3 Morin Jean-Pierre Paris 0165656567 Commentaire, avec ponctuation ;

Maintenant à partir de cette table externe vous pouvez insérer les lignes dans une table Oracle avec l'instruction INSERT INTO table(champs1, champs2,....) SELECT * FROM Ma_Table;

 

Liens en rapport avec l'article et qui sont susceptibles de vous intéresser
• Lire les alertes/erreurs ORA via TABLES EXTERNES
Repost 0
Published by Daniel Roesch - dans TABLES
commenter cet article