web-dev-qa-db-fra.com

Comment renseigner un champ d'horodatage avec l'horodatage actuel à l'aide d'Oracle Sql Loader

Je lis un fichier délimité par un tuyau avec SQL Loader et je souhaite renseigner un champ LAST_UPDATED dans la table que je remplis. Mon fichier de contrôle ressemble à ceci:

LOAD DATA
INFILE SampleFile.dat
REPLACE
INTO TABLE contact
FIELDS TERMINATED BY '|'
OPTIONALLY ENCLOSED BY '"'
(
ID, 
FIRST_NAME,
LAST_NAME,
EMAIL,
DEPARTMENT_ID,
LAST_UPDATED SYSTIMESTAMP
)

Pour le champ LAST_UPDATED, j'ai essayé SYSTIMESTAMP et CURRENT_TIMESTAMP et aucun des deux ne fonctionne. SYSDATE fonctionne bien mais ne me donne pas l'heure.

SQL Loader étant nouveau pour moi, je ne sais vraiment pas grand-chose de ce dont il est ou non capable. Merci.

14
Sen

Avez-vous essayé ce qui suit:

CURRENT_TIMESTAMP [(précision)]

 sélectionnez current_timestamp (3) parmi dual; 
 
 CURRENT_TIMESTAMP (3) 
 ------------------ ----------- 
 10-JUL-04 19.11.12.686 +01: 00 
 

Pour cela, vous devez utiliser EXPRESSION dans le fichier CTL afin que SQLLDR sache traiter l'appel comme une requête SQL. 

Remplacer:

 LAST_UPDATED SYSTIMESTAMP 

avec:

 LAST_UPDATED EXPRESSION "current_timestamp (3)" 
12
RC.

J'ai accepté la réponse de RC car il a finalement répondu à ce que je demandais, mais ma méconnaissance de certains outils d'Oracle m'a amenée à rendre cela plus difficile que nécessaire.

J'essayais d'obtenir que SQL * Loader enregistre un horodatage au lieu d'une date. Lorsque j'ai utilisé SYSDATE, puis une sélection sur la table, elle ne faisait que répertorier la date (05-AUG-09).

Ensuite, j'ai essayé la méthode de RC (dans les commentaires) et cela a fonctionné. Cependant, quand j’ai fait une sélection sur la table, j’ai eu le même format de date. Ensuite, je me suis dit que cela pourrait simplement tronquer le reste à des fins d'affichage. Alors j'ai fait un:

select TO_CHAR(LAST_UPDATED,'MMDDYYYY:HH24:MI:SS') from contact;

Et il a ensuite tout affiché. Ensuite, je suis retourné au fichier de contrôle et l'ai remplacé par SYSDATE et ai exécuté la même requête et bien sûr, le HH: MI: SS était là et précis.

Tout cela se fait dans SqlDeveloper. Je ne sais pas pourquoi il adopte ce comportement par défaut. De plus, les deux déclarations suivantes de sqldeveloper ont été rejetées.

SELECT CURRENT_TIMESTAMP FROM DUAL; //returns a full date and time 

SELECT SYSDATE FROM DUAL; // returns only a date
3
Sen

Dans SQL Developer, exécutez: ALTER SESSION SET NLS_DATE_FORMAT = 'AAAA-MM-JJ HH24: MI: SS'

puis vérifiez-le avec SELECT SYSDATE FROM DUAL

0
vas