AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Update/insert CLOB Feld in Oracle (TLobLocator)

Update/insert CLOB Feld in Oracle (TLobLocator)

Ein Thema von kohennigs · begonnen am 2. Jun 2005 · letzter Beitrag vom 3. Jun 2005
Antwort Antwort
kohennigs
(Gast)

n/a Beiträge
 
#1

Update/insert CLOB Feld in Oracle (TLobLocator)

  Alt 2. Jun 2005, 11:09
Datenbank: Oralce • Zugriff über: DOA
Moin moin allerseits !

Mein Problem ist das einfügen bzw Updaten eines CLOB Feldes in
einer Orcale DB und so langsam treibt es mich in den Wahnsinn... auch wenn
da wohl eh schon nicht viel fehlt...


Das Ganze soll ja mit eine Loblocator funktionieren, aber
troz Doku und Google wälzen werde ich daraus nicht schlau.

Hier ist meine letzter Versuch:
Delphi-Quellcode:
...
          qry:=TOracleQuery.Create(..);
          LOB := TLOBLocator.Create(ORA_Session,otCLOB);
         
          qry.Session:=ORA_Session;
          qry.SQL.Text:='Update Tabelle_1 SET Daten= :DATA where id = 1';
                 
          qry.DeclareVariable(':DATA',otCLOB);
          qry.SetComplexVariable(':DATA',LOB);
          LOB.LoadFromFile('C:\RTMGen_TMP.rtm');
          qry.Execute;
...
Hierbei bekomme ich einen "invalid handle" beim LoadFromFile ...


Etwas genauer:
Das Programm ist ein Administartionstool für einen Report Generator.

Mit diesem werden SQL, Anmeldung usw angelegt, und ausgeführt. Mit dem Report Designer der zum ReportBuilder gehört
kann dann der Admin schön den Report gestalten, und anschliessend soll alles in
die Steuertabellen für das Anwenderprogrammes geschrieben werden.

Bin für jede Hilfe und noch so kleine Anergung dankbar.

MfG
Kai Hennigs
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.337 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Update/insert CLOB Feld in Oracle (TLobLocator)

  Alt 2. Jun 2005, 11:24
Du solltest auf jeden Fall die Zeilen 9 und 10 vertauschen, da du erst die Daten Laden musst, bevor du diese dem Parameter zuweist.
Da ich selbst mit dem TLobLocator noch nicht gearbeitet habe, kann ich dir im Moment nicht mehr dazu sagen.

Habe nochmal in der Hilfe nachgesehen. Wenn du einen neuen Datensatz hast, kannst du eventuelle Probleme bekommen. Hier ein Auszug aus der Hilfe zum TLOBLocator:
Zitat:
When a LOB column contains a null value, the record does not contain a LOB Locator. Therefore, when selecting a null LOB, you cannot access the LOB data. When updating a null LOB, you first need to update the column to contain an empty LOB (which is something completely different than a null LOB) and use this newly created LOB Locator to write the actual data. When inserting a new record with LOB columns, the same mechanism applies. Temporary LOB's, created through the CreateTemporary constructor, do not have this limitation. You can create the LOB, write data to it, and subsequently use it for Inserts, Updates and PL/SQL calls.
Du hättest also Probleme bei Null-Werten in deiner Tabelle.
Peter
  Mit Zitat antworten Zitat
kohennigs
(Gast)

n/a Beiträge
 
#3

Re: Update/insert CLOB Feld in Oracle (TLobLocator)

  Alt 2. Jun 2005, 13:16
Mh, also auf jeden Fall schon mal danke für die Tipps @Jasocul !

Bringt mich leider nicht weiter...

Bei mir treten beide Fälle auf. Ich möchte sowohl
vorhandene Datensätze ändern als auch wenn nötig vorhandene
updaten.

Ich probiers weitere, aber leider lauf ich gerade gegen eine Wand->

(Auch der Versuch das CLOB als String zu interprtieren schlug fehlt,
weil alles über ca 4000 Zeichen hinten abgeschnitte wird..schade eigentlich!)


MfG

Kai Hennigs


NACHTRAG:::: _> YEAHI !
Nach 6 h hab ich das Problem lösen können.
Werde meine Code vervollständigen, und dann hier posten,
falls jemand mal ein ähnliches Problem hat.
...so kann ich der DP mal was zu zahlen
  Mit Zitat antworten Zitat
kohennigs
(Gast)

n/a Beiträge
 
#4

Re: Update/insert CLOB Feld in Oracle (TLobLocator)

  Alt 3. Jun 2005, 08:14
OK , also hier mal meine Lösung:

Delphi-Quellcode:
procedure[i] XYZ[/i]([i]PQR[/i]);
var
  LOB: TLOBLocator;
  qry: TOracleQuery;
begin
try
  qry := TOracleQuery.Create(..);
  LOB := TLOBLocator.Create([i]SESSION[/i], otCLOB);
  try
    with qry do
    begin
      Session := [i]SESSION[/i];
     // [i]SPALTE[/i] ist das (C)LOB Feld
     // Füllen des Feldes mit einen leeren clob
      SQL.Text := 'UPDATE [i]TABELLE[/i] SET [i]SPALTE[/i]= empty_clob() WHERE id =' [i]ID[/i] +
                    ' returning [i]SPALTE[/i] into :[i]SPALTE[/i]';
      // Variable deklarieren
      DeclareVariable('[i]SPALTE[/i]', otClob);

      // Variable als Lobverweis setzen
      SetComplexVariable('[i]SPALTE[/i]', LOB);
    end;
  // Statemant ausführen
  qry.Execute;

  // Verweis aus Lobinhalt übergeben und aus Datei laden
  LOB.AsString := sRtm; // Alternativ: LOB.LoadfromFile(String);
 
 // Committen :-)
  DBAnmeldung.DB.Commit;

  finally
  qry.free
  LOB.free
except
  // Sprich zu mir!
  on E: Exception do
  begin
    raise Exception.create(self.ClassName + 'DB-Eintraungg schlug fehl! ' + ' ' + E.Message);
    // Im Fehlerfalls -> Rückwärtsrolle
    DBAnmeldung.DB.Rollback;
  end;
end;



MfG

Kai Hennigs
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 00:30 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz