Précédent   Forum des professionnels en informatique > Bases de données > Sybase
Sybase Forum sur la base de données Sybase. Avant de poster -> F.A.Q Sybase, Tutoriels Sybase
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 07/09/2004, 10h31   #1
sl
Invité de passage
 
Inscription : septembre 2004
Messages : 2
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 2
Points : 0
Points : 0
Par défaut [Sybase]Problème avec le BCP sous Solaris

Bonjour,

Je souhaite charger les données d'un fichier dans une table. Mais il faut que j'intégre uniquement les données valides (les lignes valides du fichier) dans la table et mettre les données erronées dans un autre fichier.
J'utilise cette commande dans un batch :

bcp mutubatch..tmp_testbcp in fichier_tmp_testbcp.txt -U sa -P -c -t";" -e erreur.txt -m 2

Et le problème est que toutes les lignes sont intégrées dans la table même celles qui ne correspondent pas à la structure de la table, elles sont tronquées. Mon fichier de données à 5 lignes dont trois erronées donc normalement je devrais avoir 2 lignes intégrées et 3 redirigées dans le fichier erreur.txt. Or j'obtiens pas ça. Comment faire ?

Merci,
ls

Annexes

Script shell :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#!/bin/csh 
 
# Batch  : TestBcp.csh     
# Realise par : S.Lechable    
# But  :        
 
echo "Début du script - "$0 
date 
echo "Paramètre : "$1 
 
################################# 
# Paramètres  # 
################################# 
 
SET EXTENSION=`date +"%Y%m%d"` 
SET fic_trace=/home/sybase/admin/batch/test/trace/"TESTBCP.TRACE."$EXTENSION 
 
#################################################################### 
#                                 Sql                              # 
#################################################################### 
 
doit << EOFile 
 
SELECT '# Début trace Sql ' , getdate() 
go 
 
USE mutubatch 
go 
 
/**********************************************************************/ 
SELECT '# Si les tables temporaires existent, elles sont supprimées.' , getdate() 
go 
 
IF EXISTS (SELECT * FROM sysobjects WHERE name='tmp_testbcp') 
 DROP TABLE tmp_testbcp 
go 
 
/**********************************************************************/ 
SELECT '# Création des tables temporaires.' , getdate() 
go 
 
CREATE TABLE tmp_testbcp  
( 
chp1 char(2) NULL, 
chp2 char(2) NULL, 
chp3 char(2) NULL, 
chp4 char(2) NULL, 
chp5 char(2) NULL, 
chp6 char(2) NULL, 
chp7 char(2) NULL, 
chp8 char(2) NULL 
) 
go 
 
EOFile 
 
# BCP - Insertion des données dans les tables temporaires  
 
echo "Insertion des données des fichiers dans les tables temporaires" 
 
bcp mutubatch..tmp_testbcp IN fichier_tmp_testbcp.txt -U sa -P  -c -t";" -e erreur.txt -m 2 
 
echo "Fin du script - "$0 
date
Fichier fichier_tmp_testbcp.txt :
Code :
1
2
3
4
5
ll;lo;lp;re;kr;pe;bv;op 
ll;lo;lp;re;kr;pe;bv;op 
ll;lo;rlp;re;kr;pe;bv;op 
ll;lo;lp;re;krr;pe;bv;op 
4ll;lo;lp;re;kr;pe;bv;op
Résultat du script :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Début du script - TestBcp.csh 
Mon Sep  6 14:56:20 MEST 2004 
Paramètre :  
 
 ------------------ --------------------------  
 # Début trace Sql         Sep  6 2004  2:56PM  
 
(1 row affected) 
 
 ------------------------------------------------------------ --------------------------  
 # Si les tables temporaires existent, elles sont supprimées.        Sep  6 2004  2:56PM  
 
(1 row affected) 
 
 ---------------------------------- --------------------------  
 # Création des tables temporaires.        Sep  6 2004  2:56PM  
 
(1 row affected) 
Insertion des données des fichiers dans les TABLES temporaires 
 
Starting copy... 
CSLIB Message:  - L0/O0/S0/N36/1/0: 
cs_convert: cslib user api layer: common library error: The result IS truncated because the conversion/operation resulted IN overflow. 
CSLIB Message:  - L0/O0/S0/N36/1/0: 
cs_convert: cslib user api layer: common library error: The result IS truncated because the conversion/operation resulted IN overflow. 
CSLIB Message:  - L0/O0/S0/N36/1/0: 
cs_convert: cslib user api layer: common library error: The result IS truncated because the conversion/operation resulted IN overflow. 
 
5 rows copied. 
Clock Time (ms.): total = 1000  Avg = 200 (5.00 rows per sec.) 
Fin du script - TestBcp.csh 
Mon Sep  6 14:56:21 MEST 2004
sl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2004, 09h39   #2
Rédacteur/Modérateur
 
Avatar de fadace
 
Homme Fabien Celaia
Administrateur de base de données
Inscription : octobre 2002
Messages : 3 779
Détails du profil
Informations personnelles :
Nom : Homme Fabien Celaia
Âge : 41
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Service public

Informations forums :
Inscription : octobre 2002
Messages : 3 779
Points : 8 124
Points : 8 124
Envoyer un message via ICQ à fadace Envoyer un message via Skype™ à fadace
bcp tronque effectivement dans ce cas de figuer. Ce cas n'est pas considéré comme une erreur, mais comme un warning.

Ce qu'il vous faut faire, c'est un traitement en amont.

1) Créer une vue sur voter table répertoriant les bonnes lignes
2) Créer une 2e vue sur voter table répertoriant les mauvaises lignes
3) faire 2 bcp distincts de chacune de ces vues.
fadace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/09/2004, 14h52   #3
sl
Invité de passage
 
Inscription : septembre 2004
Messages : 2
Détails du profil
Informations forums :
Inscription : septembre 2004
Messages : 2
Points : 0
Points : 0
Citation:
Envoyé par fadace
bcp tronque effectivement dans ce cas de figuer. Ce cas n'est pas considéré comme une erreur, mais comme un warning.

Ce qu'il vous faut faire, c'est un traitement en amont.

1) Créer une vue sur voter table répertoriant les bonnes lignes
2) Créer une 2e vue sur voter table répertoriant les mauvaises lignes
3) faire 2 bcp distincts de chacune de ces vues.
Mais comment distinguer les bonnes lignes des mauvaises sachant que lorsqu'on fait un BCP il ne dit pas le numéro des lignes qui pose problème.
sl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2004, 07h56   #4
Rédacteur/Modérateur
 
Avatar de fadace
 
Homme Fabien Celaia
Administrateur de base de données
Inscription : octobre 2002
Messages : 3 779
Détails du profil
Informations personnelles :
Nom : Homme Fabien Celaia
Âge : 41
Localisation : Suisse

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Service public

Informations forums :
Inscription : octobre 2002
Messages : 3 779
Points : 8 124
Points : 8 124
Envoyer un message via ICQ à fadace Envoyer un message via Skype™ à fadace
Votr problème vient des lignes tronquées. Il suffit donc, avant bcp, de détecter les tuples qui seront plus grand dans la table cible que dans la table source
fadace est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h34.


 
 
 
 
Partenaires

Hébergement Web