ORACLE le paramètre CURRENT_SCHEMA

Un paramètre utile pour changer le schéma courant dans oracle est d'utiliser la commande suivante :
-->
alter session set current_schema=nom_schema

Cela permet de "switcher" d'un schema à un autre;l'exemple suivant montre comment :

C'est la même chose qui se passe quand vous ajoutez la clause fromuser touser lors d'un import, l'ajout du paramètre SHOW=Y permet de le vérifier :

l'utilisation de cette commande a quelques restrictions d'usage par exemple; dans l'instruction rename qui ne supporte pas le nom de schéma dans sa syntaxe vous ne pouvez pas contourner cette limitation en utilisant le paramètre CURRENT_SCHEMA un exemple :

oracle@ESS3:~> sqlplus "/as sysdba"
SQL*Plus: Release 11.1.0.6.0 - Production on Mon Dec 14 09:47:27 2009
Copyright (c) 1982, 2007, Oracle. All rights reserved.

Connecte a :
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> show user
USER est "SYS"
SQL> select table_name from dba_tables where owner='TEST';

TABLE_NAME
------------------------------
TEST_TABLE

SQL> alter session set current_schema=test;

Session modifiee.

SQL> rename TEST_TABLE to matable;
rename TEST_TABLE to matable
*
ERREUR a la ligne 1 :
ORA-03001: cette option n'est pas prise en charge

-->

--> -->

ORACLE SQL*Loader chargement de donneés partie 2

-->

le fichier de control pour SQL*loader est le suivant :
LOAD | CONTINUE_LOAD [DATA]
[CHARACTERSET charset] [specification d'ordre]
[INFILE clause [INFILE clause...]]
[MAXRECORDSIZE octets
[READBUFFERS entier]
[INSERT | APPEND | REPLACE | TRUNCATE]
Règles de concatenation ]]
INTO TABLE clause [INTO TABLE clause...]

LOAD : est la principale clause dans un fichier de contrôle ; elle définit la façon dont sql*loader interprète les données ou les trouver ou les insérer, une autre sœur moins connue de LOAD est CONTINUE_LOAD utilisée pour reprendre un chargement interrompu.

CHARACTERSET utilisé pour spécifier le charset utilisé dans le fichier de données.

INFILE spécifie le chemin ou se trouve le fichier données, le format détaillé est le suivant :
{INFILE {filename|*} [os_specific_options]
[ BADFILE badfile_name]
[DISCARDFILE discardfile_name]
[{DISCARDS | DISCARDMAX} discardmax]

  1. Filename est le nom complet du fichier de données, si on utilise * alors les données sont inclus dans le fichier de control
  2. Badfile facultatif le fichier ou seront rejeter les enregistrements si il y a erreur; on peut aussi utiliser le paramètre BAD avec la commande sqlldr….bad=erreur.bad…
  3. Discardfile facultatif aussi, on peut utiliser son équivalent le paramètre DISCARD dans la ligne de commande, il spécifie le fichier ou seront rejetés les enregistrements qui ne satisfont pas une condition WHEN dans un chargement conditionnel.
  4. Discards ou Discardmax est le nombre maximum d’enregistrements rejetés par la clause WHEN avant d’interrompre le chargement par défaut pas de limite.
Pour moi le plus important c’est le OS_SPECIFIC_OPTIONS qui informe sql*loader comment interpréter le type de lignes, sql*loader supporte trois format de lignes :

"" Pour les lignes en format Stream; la ligne est terminer par un retour à la ligne, noter qu’on peut spécifier un autre terminateur des lignes en utilisant "STR ‘|’ " ou | est le caractère de fin de ligne.


-->
Exemple :
Jean,malibou,21
Said,asso,30
Jack,shepard,22


"FIX longueur" pour les lignes en longueur fixe par exemple "Fix 15" pour une ligne de longueur 15.
Exemple de données :
La nouvelle,1234
L’ancienne,1456

"VAR longueur_champ " pour les lignes en format variables et pour les quels le terminateur de ligne change vous devez spécifier un champ de longueur au début de chaque ligne
Exemple de données :
011hello,james
009jean,good
013Blabla,blalba

Connaitre le format de ligne approprié est primordial pour faire un chargement réussi, imaginer un fichier de 3Go avec des longueurs de lignes variables et des retours à la ligne dans les champs et des séparateurs de champs différents , et que vous ne pourrez pas régénérer le fichier avec un format approprié !!
On continuera avec les autres clauses dans les prochaines posts.

ORACLE SQL*Loader chargement de donneés partie 1

-->
SQL*loader est un utilitaire ORACLE qui permet de charger des données a partir des fichiers plats vers des tables dans une base de données, la syntaxe minimale est la suivante :
sqlldr utilisateur/mot_de_passe@nom_service control=fichier_control

Pour la liste complète des paramètres taper juste sqlldr dans un invite de commande, vous pouvez utiliser le paramètre PARFILE dans lequel vous spécifier tous les paramètres; d'autres paramètres peuvent être inclus dans le fichier de control directement.
le plus important des paramètres est le fichier de control, c'est le fichier qui définit le format des données dans le fichier à charger (description des enregistrements, taille des champs, les tables dans lesquelles on insère...).
un petit exemple, pour charger les lignes suivantes contenues dans le fichier example.dat dans la table example (constituer de 4 colonnes toutes en varchar2) :
hello,wod,55,1
hello,wod,12 ,2
james,bond,12,3

On va utiliser le fichier de control suivant :
load data
infile 'c:\test\example.dat
into table example
fields terminated by ',' optionally enclosed by '"'
col1,col2,col3,col4))

On lance sql*loader avec les paramètres suivants :
sqlldr system/system control=c:\test\control.ctl

Consulter la table example vous trouverez les trois lignes, le nombre des clauses qu'on peut trouver dans fichier de control est intimidant pour la première fois, mais on peut généraliser le format comme suit :
LOAD | CONTINUE_LOAD [DATA]
[CHARACTERSET charset] [specification d'ordre]
[INFILE clause [INFILE clause...]]
[MAXRECORDSIZE octets
[READBUFFERS entier]
[INSERT | APPEND | REPLACE | TRUNCATE]
Règles de concatenation ]]
INTO TABLE clause [INTO TABLE clause...]
[BEGINDATA]

Les clauses les plus utilisées dans un fichier de control sont celles mises en gras je vais les détaillées une par une dans les prochains posts.