AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

PL SQL: Zerlegen eines BLOBs

Ein Thema von sirius · begonnen am 25. Apr 2008 · letzter Beitrag vom 29. Apr 2008
 
Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#1

PL SQL: Zerlegen eines BLOBs

  Alt 25. Apr 2008, 16:43
Ich spiele derzeit etwas mit Stored Procedures in Oracle rum. Mein Ziel ist, dass ich eine Reihe von Zahlenwerten in einem BLOB (o.ä.) an die SP übergebe. Die SP holt mir dann die Werte aus dem BLOB wieder raus und schreibt sie einzeln in die Datenbank. Ich hoffe, dass dies schneller geht als 10000 Inserts abzusetzen. (Nebenbei wäre es als Schnittstelle in der Datenbank recht günstig.)

Während des Testens habe ich mal folgende SP:
SQL-Code:
CREATE OR REPLACE PROCEDURE "DB1"."TEST"  (Daten in BLOB, Amount
    in Integer, Res out Float, Tmp out varChar2)
is
lBuffer VarChar2(30);
lAmount Integer;
lPos Integer:=1;
begin
  lAmount:=Amount;
  dbms_lob.read(Daten,lAmount,lPos,lBuffer);
  tmp:=lBuffer;
  Res := to_number(lBuffer); --
end;
Ich greife über ADO (Oracle DB Provider) zu.
Delphi-Quellcode:
var mem:TStream;
    Tmp,Res,BlobParam:TParameter;
begin

  SP.Parameters.Clear;

  BlobParam:=SP.Parameters.CreateParameter('Blob', ftblob, pdinput, 0, null);
  SP.Parameters.CreateParameter('Amount', ftInteger, pdinput, 0, 5); //Länge einer Zahl im Blob
  Res:=SP.Parameters.CreateParameter('Res', ftFloat, pdOutput, 0, 0);
  Tmp:=SP.Parameters.CreateParameter('tmp', ftwidestring, pdOutput, 30, ''); //hier Rückgabe des Buffers
  
  mem:=TStringstream.Create('1.254'); // oder 1,254
  BlobParam.LoadFromStream(mem, ftblob);
  mem.free;
  
  SP.ExecProc;
  
  memo1.lines.Add(Res.Value); // --> 1E126
  memo1.lines.add(Tmp.Value); // --> 312E323534
end;
Nun erhoffe ich mir im Parameter Res die 1,254. Das kann allerdings nicht klappen, da nach dms_lob.read in lBuffer mein BLOB-Auschnitt hexadezimal landet, wie man an Tmp.Value erkennen kann.

Wie bekomme ich daraus eine Fließkommazahl? Oder anders: Kann ich den BLOB auch lesen? Irgendein sinnvoller Typecast würde mir auch reichen. Ich muss ja die Zahlen nicht im Klartext in den BLOB schreiben. Ich kann in dem Stream den Double-Wert auch direkt eintragen (nicht als String)
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:06 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