Question

J'ai une table qui a été créée comme ceci:

CREATE TABLE bin_test
(id INTEGER PRIMARY KEY, b BLOB)

En utilisant Python et cx_Oracle, si je le fais:

value = "\xff\x00\xff\x00" #The string represented in hex by ff00ff00
self.connection.execute("INSERT INTO bin_test (b) VALUES (rawtohex(?))",
                        (value,))
self.connection.execute("SELECT b FROM bin_test")

Je finis par obtenir une valeur hexadécimale de a000a000 , ce qui n'est pas correct! Cependant, si je fais ceci:

import binascii
value = "\xff\x00\xff\x00"
self.connection.execute("INSERT INTO bin_test (b) VALUES (?)",
                        (binascii.hexlify(value,)))
self.connection.execute("SELECT b FROM bin_test")

Je reçois le bon résultat. J'ai un système de conversion de type ici, mais c'est un peu difficile à décrire ici. Ainsi, quelqu'un peut-il m'indiquer dans le bon sens si je fais quelque chose de mal au niveau SQL ou si quelque chose de bizarre se produit avec mes conversions?

Était-ce utile?

La solution

rawtohex () sert à convertir les types de données Oracles RAW en chaînes hexadécimales. Il est possible que vous soyez dérouté en lui transmettant une chaîne, même si celle-ci contient des données binaires. Dans ce cas, Oracle attend une chaîne de caractères hexadécimaux, donnez-lui une chaîne de caractères hexadécimaux.

Autres conseils

RAWTOHEX dans Oracle ne respecte pas l'ordre des bits, alors que sur votre ordinateur, il est bien sûr sensible.

Notez également qu'un argument pour RAWTOHEX () peut être implicitement converti en VARCHAR2 par votre bibliothèque (c'est-à-dire transmis sous la forme SQLT_STR ), qui le rend également sensible au codage et au classement.

Je règle généralement le type approprié de liaisons de variable spécialement lorsque j'essaie de transmettre un type de données RAW Oracle à une requête.

par exemple quelque chose comme:

self.connection.setinputsizes(cx_Oracle.BINARY)
self.connection.execute(
    "INSERT INTO bin_test (b) VALUES (rawtohex(?))",
    (value,)
)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top