📜  介绍 LOB 定位器(1)

📅  最后修改于: 2023-12-03 15:06:29.844000             🧑  作者: Mango

LOB 定位器介绍

LOB(Large Object,大型对象)是数据库中存储大型数据的一种方式,如音频、视频、文档等。LOB 定位器是一种用于访问和管理这些大型对象的数据类型。

在 Oracle 和 PostgreSQL 中,LOB 定位器通常是一个单独的数据类型,可以直接存储在表中的一个字段中。而在 MySQL 中,LOB 定位器被存储在表的另一个地方,通过一个指向该位置的引用来访问。

LOB 定位器通常包括两个主要部分:指向大型对象的指针和一个描述该对象大小和存储位置的头信息。通过这些信息,应用程序可以有效地管理和访问大型对象。

Oracle 中的 LOB 定位器

在 Oracle 中,LOB 定位器是一个 BLOB/CLOB/BFILE 对象,其中 BLOB/CLOB 存储二进制/字符数据,BFILE 存储指向外部文件的指针。

LOB 定位器可以通过以下方式使用:

插入和更新 LOB 数据

通过 SQL INSERTUPDATE 语句,可以在表中插入或更新 LOB 数据。LOB 数据可以直接从文件或内存中读取,或从其他 LOB 列或表中复制。

INSERT INTO mytable (lob_col) VALUES (EMPTY_BLOB());

UPDATE mytable SET lob_col = EMPTY_BLOB() WHERE id = 1;
使用 DBMS_LOB 包管理 LOB

在 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 定位器

在 PostgreSQL 中,LOB 定位器是一个单独的数据类型,如 bytea/clo 和 oid。

LOB 定位器可以通过以下方式使用:

插入和更新 LOB 数据

通过 SQL INSERTUPDATE 语句,可以在表中插入或更新 LOB 数据。LOB 数据可以直接从文件或内存中读取,或从其他 LOB 列或表中复制。

INSERT INTO mytable (lob_col) VALUES ('\\xabcd');

UPDATE mytable SET lob_col = '\\xabcd' WHERE id = 1;
使用 LargeObject 类型管理 LOB

在 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 定位器

在 MySQL 中,LOB 定位器是一个指向实际数据的引用或指针,存储在表中的另一个地方。

LOB 定位器可以通过以下方式使用:

插入和更新 LOB 数据

通过 SQL INSERTUPDATE 语句,在表中插入或更新 LOB 数据,指定 LOB 定位器的引用或指针。

INSERT INTO mytable (lob_col) VALUES ('ref');

UPDATE mytable SET lob_col = 'ref' WHERE id = 1;
使用 LOAD_FILE() 函数和 SELECT INTO OUTFILE 语句访问 LOB

在 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 接口等方式,程序员可以有效地访问和管理大型对象。