📅  最后修改于: 2023-12-03 15:06:29.844000             🧑  作者: Mango
LOB(Large Object,大型对象)是数据库中存储大型数据的一种方式,如音频、视频、文档等。LOB 定位器是一种用于访问和管理这些大型对象的数据类型。
在 Oracle 和 PostgreSQL 中,LOB 定位器通常是一个单独的数据类型,可以直接存储在表中的一个字段中。而在 MySQL 中,LOB 定位器被存储在表的另一个地方,通过一个指向该位置的引用来访问。
LOB 定位器通常包括两个主要部分:指向大型对象的指针和一个描述该对象大小和存储位置的头信息。通过这些信息,应用程序可以有效地管理和访问大型对象。
在 Oracle 中,LOB 定位器是一个 BLOB/CLOB/BFILE 对象,其中 BLOB/CLOB 存储二进制/字符数据,BFILE 存储指向外部文件的指针。
LOB 定位器可以通过以下方式使用:
通过 SQL INSERT
和 UPDATE
语句,可以在表中插入或更新 LOB 数据。LOB 数据可以直接从文件或内存中读取,或从其他 LOB 列或表中复制。
INSERT INTO mytable (lob_col) VALUES (EMPTY_BLOB());
UPDATE mytable SET lob_col = EMPTY_BLOB() WHERE id = 1;
在 Oracle 中,DBMS_LOB 包提供了许多有用的函数和过程,用于管理 LOB 数据,如读取、写入、截断、复制等。
DECLARE
my_lob BLOB;
BEGIN
DBMS_LOB.CREATETEMPORARY(my_lob, TRUE);
DBMS_LOB.WRITEAPPEND(my_lob, 100, '1234567890');
DBMS_OUTPUT.PUT_LINE(DBMS_LOB.GETLENGTH(my_lob));
DBMS_LOB.TRIM(my_lob, 4);
DBMS_OUTPUT.PUT_LINE(DBMS_LOB.GETLENGTH(my_lob));
DBMS_LOB.WRITE(my_lob, 4, 1, 'ab');
DBMS_OUTPUT.PUT_LINE(DBMS_LOB.GETLENGTH(my_lob));
DBMS_LOB.FREETEMPORARY(my_lob);
END;
/
在 PostgreSQL 中,LOB 定位器是一个单独的数据类型,如 bytea/clo 和 oid。
LOB 定位器可以通过以下方式使用:
通过 SQL INSERT
和 UPDATE
语句,可以在表中插入或更新 LOB 数据。LOB 数据可以直接从文件或内存中读取,或从其他 LOB 列或表中复制。
INSERT INTO mytable (lob_col) VALUES ('\\xabcd');
UPDATE mytable SET lob_col = '\\xabcd' WHERE id = 1;
在 PostgreSQL 中,LargeObject 类型提供了使用 LOB 定位器的更高级别的接口,可以使用多个函数来读取和写入 LOB 数据。
-- create lo
SELECT lo_create(0);
-- open lo
SELECT lo_open(77667, 131072);
-- write to lo
SELECT lo_write(77667, '\\xabcd');
-- read from lo
SELECT lo_read(77667, 1, 2);
-- close lo
SELECT lo_close(77667);
-- delete lo
SELECT lo_unlink(77667);
在 MySQL 中,LOB 定位器是一个指向实际数据的引用或指针,存储在表中的另一个地方。
LOB 定位器可以通过以下方式使用:
通过 SQL INSERT
和 UPDATE
语句,在表中插入或更新 LOB 数据,指定 LOB 定位器的引用或指针。
INSERT INTO mytable (lob_col) VALUES ('ref');
UPDATE mytable SET lob_col = 'ref' WHERE id = 1;
在 MySQL 中,使用 LOAD_FILE() 函数将 LOB 中的数据读入内存。使用 SELECT INTO OUTFILE
语句将数据从LOB写入文件中。
-- load data from file to lob
UPDATE mytable SET lob_col = LOAD_FILE('/path/to/file') WHERE id = 1;
-- load data from lob to file
SELECT lob_col INTO OUTFILE '/path/to/file' FROM mytable WHERE id = 1;
LOB 定位器是一种用于管理大型对象的数据类型,在 Oracle、PostgreSQL 和 MySQL 中都有相应的实现。通过插入和更新 LOB 数据、使用 LOB 管理函数和过程以及使用高级别的 LOB 接口等方式,程序员可以有效地访问和管理大型对象。