![]() |
Datenbank: Oracle • Version: 11g • Zugriff über: ADO
RAW Feld richtig auslesen
Hallo,
ich habe in einer Oracle-DB ein Feld vom Datentyp RAW. Wenn ich mir das mit Substr mal als Text ausgeben lasse, steht darin (Dummy-Besipiel): 003100320033 Ich weiß, dass das dem String 123 entsprechen soll. Versuche ich dies im SQL als String auszulesen mittels UTL_RAW.CAST_TO_Varchar2(Feld) kommt nichts anzeigbares raus. Wenn ich mal selber '123' mit UTL_RAW.CAST_TO_RAW('123') in das Feld schreibe steht darin: 313233 Es fehlen also immer die Nullen. Irgendwie schein mir das ein Charset/Multibyte/irgendwas-Problem zu sein und ich weiß nicht, wie ich jetzt (SQL) aus dem Raw-Feld mit 003100320033 den Inhalt 123 rauskriege. Was muss ich das wie konvertieren vorher? |
AW: RAW Feld richtig auslesen
Zitat:
Mit Raw-Feldern habe ich noch nicht gearbeitet und weiß daher nicht wie man die Auslesen kann. Ich hätte es mit FieldByName(...).AsWideString versucht, aber da Delphi 6 damals noch nicht unicodefähig war... Ansonsten, wenn du es im Speicher jetzt als AnsiString hast mit 0, 0, 3, 1 usw. jeweils als ein Zeichen, könntest du jeweils 4 Zeichen kopieren und mit
Delphi-Quellcode:
versuchen auszulesen.
Chr(StrToInt('$' + Copy(DeinString, 1, 4)))
Vermutlich gibt es aber auch noch bessere Lösungen. |
AW: RAW Feld richtig auslesen
Zur Klarstellung: Ich möchte das wenn möglich auf SQL-Ebene lösen, nicht in einer Delphianwendung. Hintergrund ist vereinfacht, dass 123 sowas wie ein Fremdschlüssel ist, der auf einen Datensatz in einer anderen Tabelle verweist (ohne das es jetzt tatsächlich ein Fremdschlüssel im Datenbank Sinne als Constraint ist). Die Fremd-Originalanwendung wird das vermutlich wie von jaenicke gedacht irgendwie in der Anwendung lösen, ich würde für eine externe Auswertung da gerne einen Join der zwei Tabellen hinbekommen.
|
AW: RAW Feld richtig auslesen
Hmm..
Schom mal mit 'Select cast(<RawdataField> AS NVARCHAR2) from TABLE' versucht? |
AW: RAW Feld richtig auslesen
Zitat:
|
AW: RAW Feld richtig auslesen
Vielleicht ist UTL_RAW ja das Problem. Vielleicht geht es mit UTL_I18N.RAW_TO_CHAR (DeinFeld, 'AL32UTF8')?
|
AW: RAW Feld richtig auslesen
UTL_I18N. kannte ich nicht und das hat mir zunächst Hoffnung gemacht. Half aber leider auch nicht.
Wenn ich nichts sinnvolles mehr finde werde ich es versuchen mit: Substr(Feld,4,1)||Substr(Feld,8,1)||Substr(Feld,12 ,1) Da es nur um einen Teil des Feldes geht der dem PK einer anderen Tabelle entspricht und dieser Teil nur numerisch ist kann ich so aus z.B. 0032->2 gewinnen usw. Wenn ich dann doch irgendwo bei Oracle noch eine andere Lösung finde, oder jemand von euch noch eine Idee hat, kann ich das ja anpassen. Danke für den Einsatz |
AW: RAW Feld richtig auslesen
Raw ist ziemlich alt, das UTL_RAW package sollte es schon in yestercentury Oracle versionen geben. (in denen habe ich es vor Ewigkeiten zuletzt benutzt, k.A. wie es mit 11g/12c aussieht)
Was du wohl suchst ist utl_raw.cast_to_varchar2 (bzw nvarchar2, je nach code page/encoding) cast_to_raw funzt in die andere Richtung. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:01 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz