BFILE
BFILE gehört zu den large object-Datentypen bei Oracle und dem SQL-Standard und enthält einen Zeiger (Locator) auf eine large binary-Datei, die außerhalb des DBS im Dateisystem des Betriebssystems des Datenbankservers gespeichert ist. Es ist ein byte stream-Ein-/Ausgabe-Zugriff auf die externe LOB-Datei möglich, deren maximale Größe 4 Gigabyte ist.
Sie unterliegen nicht dem Transaktionskonzept des DBS, so dass Änderungen der Daten nicht mit den üblichen Mechanismen COMMIT und ROLLBACK bearbeitet werden können. Sie unterliegen auch nicht den DBS-spezifischen Sicherungs- und Wiederherstellungsvorkehrungen (Backup und Recovery) und so muss auf Betriebssystemebene für ihre Sicherheit gesorgt werden. Sie werden immer in Tabellenspalten referenziert über einen sogenannten Locator.
Für die Speicherung von BFILE-Daten wie auch für deren Zugriff reichen die Konzepte von SQL nicht aus, es muss mit dem PL/SQL-PACKAGE DBMS_LOB gearbeitet werden.
Beispiele:
CREATE PROCEDURE SetBewerbung (InputName IN VARCHAR2) IS Textdaten CLOB; Datei BFILE; BEGIN SELECT Bewerbung, BewerbungDatei INTO textdaten, datei FROM Personen WHERE Name = InputName for update; DBMS_LOB.FILEOPEN (datei, DBMS_LOB.FILE_READONLY) ; DBMS_LOB.LOADFROMFILE (textdaten, datei, DBMS_LOB.GETLENGTH(datei)); DBMS_LOB.FILECLOSE(datei); UPDATE Personen SET Bewerbung = textdaten WHERE Name = InputName; END; DECLARE v_bfile_datei BFILE; v_position INTEGER; v_laenge BINARY_INTEGER :=80; v_buffer RAW(80); BEGIN SELECT prototyp_bild INTO v_bfile_datei FROM produkte WHERE produkt_id = 4711; DBMS_LOB.OPEN(v_bfile_datei, DBMS_LOB.LOB_READONLY); v_position := 1 + DBMS_LOB.GETLENTH(v_bfile_datei); v_buffer := ''; DBMS_LOB.READ(v_bfile_datei, v_laenge, v_position, v_buffer); DBMS_OUTPUT.PUT_LINE('Read F1 past EOF: '|| UTL_RAW.CAST_TO_VARCHAR2(v_buffer)); DBMS_LOB.CLOSE(v_bfile_datei); EXCEPTION WHEN NO_DATA_FOUND THEN BEGIN DBMS_OUTPUT.PUT_LINE('End of File reached. Closing file'); DBMS_LOB.FILECLOSE(v_bfile_datei); -- oder DBMS_LOB.FILECLOSE falls es passt END; END;
siehe auch: Multi-Media-Datentyp, BFILENAME, LOB
Quellen:
- INCITS/ISO/IEC 9075-1-2008. Part 1 "SQL/Framework", ISO International Organization for Standardization / INCITS InterNational Committee for Information Technology Standards, 2008
- INCITS/ISO/IEC 9075-1-2008. Part 2 "SQL/Foundation", ISO International Organization for Standardization / INCITS InterNational Committee for Information Technology Standards, 2008
- Elmasri, Ramez/Navathe, Shamkant B.: "Grundlagen von Datenbanksystemen" , Pearson Studium, München, 2002, ISBN 3-8273-7021-3
- Melton, Jim/Simon, Alan R.: "SQL: 1999 - Understanding Relational Language Components", Morgan Kaufmann, San Francisco, 2001, ISBN 1558604561
- Oracle® Database SQL Language Reference 11g Release 2 (11.2), E17118-03, August 2010, http://download.oracle.com/docs/cd/E11882_01/server.112/e17118.pdf
- Saake, Gunter/Sattler, Kai-Uwe/Heuer, Andreas: "Datenbanken - Konzepte und Sprachen", mitp-Verlag, Redline GmbH, Heidelberg, 2007, ISBN 3-8266-1664-2
Kategorie: Oracle-PL-SQL, SQL, Objektrelationales SQL, B