Ich habe einige Bilder in einer Informix-Datenbank, wie ein binäres Blob-Feld (jpg), wie kann ich die Bilder mit SQL auf die Festplatte schreiben?Wie schreibe ich ein binäres Blob auf Diskette auf Informix
Antwort
Sind die Daten in einem BYTE- oder einem BLOB-Feld gespeichert?
Wenn die Daten in einer BLOB-Spalte gespeichert ist, dann können Sie verwenden:
SELECT LOTOFILE(blob_column, '/path/to/file/on/client', 'client')
FROM TheTable
WHERE PK_Column = 23411 -- PK value
Wenn die Daten in einem Byte-Spalte gespeichert wird, dann haben Sie etwas härter zu arbeiten. Wenn Sie ESQL/C (ClientSDK) und einen C-Compiler auf Ihrem Computer haben, empfehle ich, SQLCMD von IIUG Software Archive zu erhalten und die Software zu extrahieren. Sie benötigen Ihre Informix-Umgebung, und Sie müssen in der Lage sein, C-Programme zu kompilieren. Führen Sie dann:
./configure --prefix=$HOME/bin
Es ist nicht viel was Sie als Präfix angeben - Sie müssen nur das Configure-Skript ausführen.
Sie können dann entweder alles kompilieren (make
), oder Sie kompilieren einfach das Programm selblob
(make selblob
). Dieses Programm nenne ich eine "Vignette"; ein mikroskopisches Programm, das zeigt, wie man einen BYTE-Blob auf Festplatte auswählt. Es ist jedoch auch voll funktionsfähig; Es funktioniert mit fast allem, was Sie darauf werfen oder einen Fehler diagnostizieren.
Wenn Ihre Datenbank precious
genannt wird, ist die Byte-Daten in einer Tabelle byte_table
, die Spalte die Daten hält, ist byte_column
und die Primärschlüsselspalten sind col1
(und der Wert, der erforderlich ist 23
) und col2
(und der Wert erforderlich "Habeas Corpus"
) ist, dann können Sie laufen:
selblob -d precious -t byte_table -k col1=23 -k col2="Habeas Corpus" \
-c byte_column -f output_file
Dadurch wird der Byte-Wert in der benannten Datei entladen.
Wenn Sie ESQL/C oder einen C-Compiler oder die Erlaubnis, sie zu verwenden, nicht haben, dann ist das Leben schwieriger. Der nächste Ansatz ist die UNLOAD-Anweisung in DB-Zugang zu nutzen:
dbaccess precious - <<!
unload to "output_file"
select byte_column from byte_table where col1 = 23 and col2 = 'Habeas Corpus';
!
Diese eine Datei erstellen, wird eine Hex-Dump des Byte-Wert (2 Byte pro Zeichen) enthält. Sie müssen dann die Datei nachbearbeiten, um das Hex in reguläre Daten zu konvertieren. Beachten Sie, dass keine Konvertierung erforderlich wäre, wenn es sich bei der Spalte um eine TEXT-Spalte anstelle einer BYTE-Spalte handelt. Sie können einen ziemlich einfachen Perl-Skript verwenden, um die Konvertierung zu tun (sofern die Datei klein genug ist, schlürfte in dem Speicher - Sie müssen härter arbeiten, wenn sie nicht klein genug sind):
perl -w -e '
$/ = "";
my $data = <>;
while (length($data) > 1)
{
my $hex = substr($data, 0, 2);
printf "%c", hex($hex);
$data = substr($data, 2);
}' <output_file
Die Länge Bedingung gibt ' > 1
', um mit dem Zeilenumbruch am Ende der entladenen Daten umzugehen.
(Für 'hysterische Rosinen', auch 'historische Gründe' genannt, rufe ich immer noch 'Blob-Typen' von BYTE und TEXT an, obwohl IDS 9.00 die expliziten Namen BLOB und CLOB für 'Smart Blobs' eingeführt hat, ein etwas anderes Paar von Datentypen mit ungefähr entsprechender Funktionalität - in meinem Buch sind sie alle Blob (Kleinbuchstaben) Typen.Das ist das Problem mit alten Kerlen, die 1990 über BYTE und TEXT Blobs gelernt haben, sechs oder mehr Jahre bevor BLOB und CLOB Blobs waren hinzugefügt. In jedem Fall gibt es keine gute alternative offizielle Terminologie für die älteren Stil Blobs; "Dumm Blobs" ist nicht politisch korrekt!)
Sie müssen ein kleines Programm schreiben, das die Datenbank abfragt und die Blobs auf Festplatte speichert. Die meisten Datenbanken haben keine Ahnung von "Datei auf Festplatte öffnen".
Ich glaube, ich bin zu MySQL – levhita
- 1. Wie konvertiert man ein Bildobjekt in ein binäres Blob?
- 2. Inhalt von NSCache auf Diskette speichern
- 3. Name/Benutzer sperrt auf Informix
- 4. Wie schreibe ich ein Lucene.Net RAMDirectory zurück auf die Festplatte?
- 5. Wie schreibe ich auf Kanal 3?
- 6. Was ist ein binäres Nullzeichen?
- 7. Wie speichere ich ein binäres Objekt mit Knoten in redis?
- 8. Wie schreibe ich ein Tag?
- 9. Suchen Sie lange laufende Abfrage auf Informix?
- 10. Wie lade ich einen Ordner auf Blob Storage hoch?
- 11. Wie kann ich ein Blob-Objekt console.log()?
- 12. Wie schreibe ich ein hochgestelltes zu Texten auf einer Handlung auf R?
- 13. vorbei Blob-Parameter auf django
- 14. Wie schreibe ich in F # ein?
- 15. Technisches Whitepaper: Wie schreibe ich ein
- 16. Wie schreibe ich ein ViewPage als IList
- 17. Wie schreibe ich ein plattformübergreifendes Programm?
- 18. Wie lese/schreibe ich ein Blockgerät?
- 19. Wie schreibe ich in ein erzeugtes Terminal?
- 20. Wie schreibe ich ein Filterprogramm in C?
- 21. Wie binäres Histogramm in Python?
- 22. Wie schreibe/schreibe ich ein komplexes Objekt mit XmlWriter/XmlReader
- 23. Informix Abfrage langsam
- 24. Wie schreibe ich einen PHP-Code auf einfachen mathematischen Ausdruck?
- 25. Wie schreibt man ein binäres Literal in Ruby?
- 26. Berg ein Blob Storage als Laufwerk auf VM
- 27. Wie man den Bayes'schen Durchschnittsalgorithmus für ein binäres Bewertungssystem implementiert
- 28. VB.NET: Wie schreibe ich auf einen PlaceHolder in MVC
- 29. Wie schreibe ich "auf Formular senden abgeschlossen" mit Javascript?
- 30. Wie man wirklich ein binäres in MacOs Streifen
Sie sind verrückt Jon ... Ich brauchte diese Antwort auch und natürlich wird es Ihre Antwort sein, wenn es etwas hat mit informix arbeiten – CheeseConQueso
Anscheinend arbeitet LOTOFILE auch an BYTE-Spalten, zumindest in Informix 12.10. Danke für all die nützlichen Informix-Posts, jedes Mal, wenn ich etwas über Informix suche, erscheint Ihr Name :) – Otherside