2013-06-13 4 views
1

je le tableau suivant:Comment insérer des données hexadécimales dans la table Oracle?

create table o_newstdata1 (
field1 raw(8) 
); 

le fichier input.data suivant:

0x12345678 
0x1234 
0x12 

comment puis-je insérer une telle données dans ma table de o_newstdata1?

J'ai essayé de le charger comme données varchar:

load data 
INFILE '/export/home/mine/input.data' 
replace 
into table o_newstdata1 
trailing nullcols 
(
field1 varchar (8) 
) 

Et interrogé quelque chose comme ceci:

select field1 from o_newstdata1 where utl_raw.cast_to_raw(field1) like '0x1234'; 

mais il ne fonctionne pas, des suggestions?

+0

dont une partie ne fonctionne pas, quelles exceptions obtenez-vous? – WiiMaxx

+0

Aucune ligne sélectionnée – fen1ksss

+0

Qu'a dit le fichier journal SQL * Loader? –

Répondre

3

Il y a peut-être deux sources d'erreurs:

  1. Chargement des données brutes avec SQL * Loader
  2. Interrogation les données brutes

Pour vérifier si la partie interrogation fonctionne, utilisez quelque chose comme:

CREATE TABLE o_newstdata1 (field1 RAW(8)); 
INSERT INTO o_newstdata1(field1) VALUES ('12AB'); 
INSERT INTO o_newstdata1(field1) VALUES ('34EF'); 

Vous n'avez pas besoin de convertir en brut, vous pouvez utiliser le format hexadécimal d'Oracle tly. La version 1 utilise une conversion implicite de RAW TO VARCHAR2, la version 2 conversion explicite:

SELECT * FROM o_newstdata1 WHERE field1 = '12AB'; 
SELECT * FROM o_newstdata1 WHERE rawtohex(field1)='12AB'; 
+0

cela fonctionne très bien, merci – fen1ksss

1

Le type de données ne doit-il pas être spécifié comme RAW?

De l'docs:

Lorsque les données brutes, binaire est chargé « comme est » dans une colonne de base de données RAW, il n'est pas converti par la base de données Oracle. Si elle est chargée dans une colonne CHAR, la base de données Oracle la convertit en hexadécimal. Il ne peut pas être chargé dans une colonne DATE ou numéro.

La longueur de ce champ correspond au nombre d'octets spécifié dans le fichier de contrôle. Cette longueur est limitée uniquement par la longueur de la colonne cible dans la base de données et par les ressources mémoire. La longueur est toujours en octets, même si la sémantique des caractères est utilisée pour le fichier de données. Les champs de données RAW ne peuvent pas être délimités.

+0

comment puis-je interroger une donnée à partir de cette colonne char comme hex? – fen1ksss

1

Si vos données ne sont pas vraiment binaire/raw (comme indiqué par la taille de la colonne), mais juste un numéro, vous pouvez stocker un nombre. Hex est un moyen de représenter un nombre (une notation). Donc, je voudrais juste le stocker comme un numérique, et mettre un voir sur le dessus, de sorte que vous pouvez voir/interroger les valeurs hexadécimales directement. De cette façon, vous pouvez même ajouter ou comparer ces valeurs dans la base de données.

Questions connexes