#DBMS_FS

DBMS_FS是YashanDB FS的高级包入口,为用户提供面向存储卷的统一文件操作接口。

Note:

DBMS_FS仅支持单机部署。

使用DBMS_FS高级包时,操作顺序如下:首先调用CREATE_VOLUME创建卷,接着调用SET_VOLUME设置当前卷,此后便可针对当前卷中的文件执行管理操作,例如创建、读写、删除等。

# 数据类型

# DIRENTRY

TYPE DIRENTRY IS RECORD (
    FILE_NAME VARCHAR(255),
    FILE_TYPE NUMBER);

DIRENTRY是目录条目的记录类型。

字段 类型 说明
FILE_NAME VARCHAR(255) 文件或目录名称。
FILE_TYPE NUMBER 条目类型。0表示文件,1表示目录。

# DIRENTRY_TABLE

TYPE DIRENTRY_TABLE IS TABLE OF DIRENTRY;

DIRENTRY_TABLE是LISTDIR接口的出参类型,用于返回目录下的文件或子目录列表。

# FILESTAT

TYPE FILESTAT IS RECORD (
    FILE_ID     NUMBER,
    FILE_SIZE   NUMBER,
    CREATE_TIME DATE,
    MODIFY_TIME DATE,
    FILE_TYPE   NUMBER);

FILESTAT是STAT接口的出参类型,用于返回文件的元数据信息。

字段 类型 说明
FILE_ID NUMBER 文件ID。
FILE_SIZE NUMBER 文件大小(单位:字节)。
CREATE_TIME DATE 创建时间。
MODIFY_TIME DATE 修改时间。
FILE_TYPE NUMBER 文件类型。0表示普通文件,1表示目录。

# CREATE_VOLUME

DBMS_FS.CREATE_VOLUME(
    VOLUME_NAME     IN VARCHAR2,
    TS_NAME         IN VARCHAR2,
    BUCKET_NAME     IN VARCHAR2,
    FILE_SIZE_LIMIT IN BIGINT);

CREATE_VOLUME过程用于创建一个新的存储卷。卷是文件系统的顶层组织单元,每个卷绑定到指定的表空间和存储桶。

参数 类型 说明
VOLUME_NAME VARCHAR2 卷名称。名称长度限制为64字节。
TS_NAME VARCHAR2 表空间名称。
BUCKET_NAME VARCHAR2 存储桶名称。
FILE_SIZE_LIMIT BIGINT 容量限制(单位:字节)。

示例(单机部署)

BEGIN
    DBMS_FS.CREATE_VOLUME('test_vol', 'main_tbs', 'main_bucket', 1073741824);
END;
/

# DROP_VOLUME

DBMS_FS.DROP_VOLUME(
    VOLUME_NAME IN VARCHAR2,
    CASCADE     IN BOOLEAN DEFAULT NULL);

DROP_VOLUME用于删除指定的存储卷。

参数 类型 说明
VOLUME_NAME VARCHAR2 待删除的卷名称。
CASCADE BOOLEAN 级联删除标志。TRUE表示级联删除卷内所有文件,FALSE或不指定表示仅删除空卷。

示例(单机部署)

BEGIN
    -- 删除空卷
    DBMS_FS.DROP_VOLUME('test_vol', FALSE);

    -- 级联删除卷及其所有文件
    DBMS_FS.DROP_VOLUME('test_vol', TRUE);
END;
/

# SET_VOLUME

DBMS_FS.SET_VOLUME(
    VOLUME_NAME IN VARCHAR2);

SET_VOLUME用于设置当前会话的默认卷。设置后,后续的文件操作自动使用该卷作为操作目标,无需重复指定。必须指定为已存在的卷。

参数 类型 说明
VOLUME_NAME VARCHAR2 待激活的卷名称(已存在的卷)。

示例(单机部署)

BEGIN
    DBMS_FS.SET_VOLUME('my_volume');
END;
/

# GET_VOLUME

DBMS_FS.GET_VOLUME(
    VOLUME_NAME OUT VARCHAR2);

GET_VOLUME用于返回当前会话激活的卷名称。

参数 类型 说明
VOLUME_NAME VARCHAR2 当前激活的卷名称(出参)。

示例(单机部署)

DECLARE
    vol_name VARCHAR2(256);
BEGIN
    DBMS_FS.SET_VOLUME('my_volume');
    DBMS_FS.GET_VOLUME(vol_name);
    DBMS_OUTPUT.PUT_LINE('Current volume: ' || vol_name);
END;
/

--result
Current volume: my_volume

# MKDIR

DBMS_FS.MKDIR(
    DIR IN VARCHAR2);

MKDIR用于在当前激活的卷中创建目录。目录名称在同一卷内必须唯一。

参数 类型 说明
DIR VARCHAR2 目录路径,支持多级路径。名称长度限制为256字节。

示例(单机部署)

BEGIN
    DBMS_FS.SET_VOLUME('my_volume');
    DBMS_FS.MKDIR('/mydir');
    DBMS_FS.MKDIR('/mydir/subdir');
END;
/

# RMDIR

DBMS_FS.RMDIR(
    DIR     IN VARCHAR2,
    CASCADE IN BOOLEAN DEFAULT NULL);

RMDIR用于删除指定的目录。目录名称必须在同一个卷内唯一。

参数 类型 说明
DIR VARCHAR2 目录路径。名称长度限制为256字节。
CASCADE BOOLEAN 级联删除标志。TRUE表示递归删除目录及其内容,FALSE或不指定表示仅删除空目录。
若目标目录下已有内容,指定为FALSE或不指定该参数将无法删除该目录。

示例(单机部署)

BEGIN
    DBMS_FS.SET_VOLUME('my_volume');

    -- 删除空目录
    DBMS_FS.RMDIR('/mydir');

    -- 级联删除目录及其所有文件
    DBMS_FS.RMDIR('/mydir', TRUE);
END;
/

# LISTDIR

DBMS_FS.LISTDIR(
    DIR         IN VARCHAR2,
    DIR_TABLE   OUT DIRENTRY_TABLE,
    DIR_COUNT   OUT INTEGER);

LISTDIR用于返回指定目录下的所有文件和子目录列表。目录名称必须在同一个卷内唯一。

参数 类型 说明
DIR VARCHAR2 目录路径。名称长度限制为256字节。
DIR_TABLE DIRENTRY_TABLE 文件目录表(出参)。
DIR_COUNT INTEGER 文件目录数量(出参)。

示例(单机部署)

SET serveroutput ON;

DECLARE
    dir_tab  DBMS_FS.DIRENTRY_TABLE;
    dir_cnt  INTEGER;
BEGIN
    DBMS_FS.SET_VOLUME('my_volume');
    DBMS_FS.MKDIR('/testdir');
    DBMS_FS.CREATE('/testdir/file1.txt');
    DBMS_FS.MKDIR('/testdir/subdir');

    DBMS_FS.LISTDIR('/testdir', dir_tab, dir_cnt);

    FOR i IN 1..dir_cnt LOOP
        DBMS_OUTPUT.PUT_LINE('file_name: ' || dir_tab(i).FILE_NAME ||
                             ', file_type: ' || dir_tab(i).FILE_TYPE);
    END LOOP;
END;
/

--result
file_name: file1.txt, file_type: 0
file_name: subdir, file_type: 1

# CREATE

DBMS_FS.CREATE(
    FILE_NAME IN VARCHAR2);

CREATE用于在当前激活的卷中创建空文件。

参数 类型 说明
FILE_NAME VARCHAR2 文件路径。名称长度限制为256字节。

示例(单机部署)

BEGIN
    DBMS_FS.SET_VOLUME('my_volume');
    DBMS_FS.CREATE('/mydir/myfile.txt');
END;
/

# REMOVE

DBMS_FS.REMOVE(
    FILE_NAME IN VARCHAR2);

REMOVE用于删除指定的文件。

参数 类型 说明
FILE_NAME VARCHAR2 文件路径。名称长度限制为256字节。

示例(单机部署)

BEGIN
    DBMS_FS.SET_VOLUME('my_volume');
    DBMS_FS.REMOVE('/mydir/myfile.txt');
END;
/

# WRITE

DBMS_FS.WRITE(
    FILE_NAME IN VARCHAR2,
    DATA      IN VARCHAR2);

WRITE用于将数据写入指定文件。

参数 类型 说明
FILE_NAME VARCHAR2 文件路径。名称长度限制为256字节。
DATA VARCHAR2 待写入的数据。

示例(单机部署)

BEGIN
    DBMS_FS.SET_VOLUME('my_volume');
    DBMS_FS.CREATE('/mydir/myfile.txt');
    DBMS_FS.WRITE('/mydir/myfile.txt', 'Hello, YashanDB!');
END;
/

# READ

DBMS_FS.READ(
    FILE_NAME    IN VARCHAR2,
    OFFSET       IN BIGINT,
    LENGTH       IN INTEGER,
    BUFFER       OUT VARCHAR2,
    BUFFER_SIZE  OUT INTEGER);

READ用于从指定文件读取数据。

参数 类型 说明
FILE_NAME VARCHAR2 文件路径。名称长度限制为256字节。
OFFSET BIGINT 读取起始位置(单位:字节)。
LENGTH INTEGER 读取的字节数。
BUFFER VARCHAR2 用于存储读取数据的缓冲区(出参)。
BUFFER_SIZE INTEGER 实际读取的字节数(出参)。

示例(单机部署)

DECLARE
    buffer      VARCHAR2(4000);
    buffer_size INTEGER;
BEGIN
    DBMS_FS.SET_VOLUME('my_volume');
    DBMS_FS.CREATE('/mydir/myfile.txt');
    DBMS_FS.WRITE('/mydir/myfile.txt', 'Hello, YashanDB!');

    DBMS_FS.READ('/mydir/myfile.txt', 0, 100, buffer, buffer_size);
    DBMS_OUTPUT.PUT_LINE('File content: ' || buffer);
    DBMS_OUTPUT.PUT_LINE('Bytes read: ' || buffer_size);
END;
/

--result
File content: Hello, YashanDB!
Bytes read: 16

# STAT

DBMS_FS.STAT(
    FILE_NAME  IN VARCHAR2,
    FILE_STAT  OUT FILESTAT);

STAT用于返回文件的元数据信息。

参数 类型 说明
FILE_NAME VARCHAR2 文件路径。名称长度限制为256字节。
FILE_STAT FILESTAT 文件属性结构(出参)。

示例(单机部署)

SET serveroutput ON;

DECLARE
    fstat DBMS_FS.FILESTAT;
BEGIN
    DBMS_FS.SET_VOLUME('my_volume');
    DBMS_FS.CREATE('/mydir/myfile.txt');
    DBMS_FS.WRITE('/mydir/myfile.txt', 'Test data');

    DBMS_FS.STAT('/mydir/myfile.txt', fstat);
    DBMS_OUTPUT.PUT_LINE('file_id: ' || fstat.FILE_ID);
    DBMS_OUTPUT.PUT_LINE('file_size: ' || fstat.FILE_SIZE);
    DBMS_OUTPUT.PUT_LINE('file_type: ' || fstat.FILE_TYPE);
END;
/

--result
file_id: 12345
file_size: 9
file_type: 0

# EXIST

DBMS_FS.EXIST(
    FILE_NAME IN VARCHAR2,
    IS_EXIST  OUT BOOLEAN);

EXIST用于检查指定文件是否存在于当前卷中。

参数 类型 说明
FILE_NAME VARCHAR2 文件路径。名称长度限制为256字节。
IS_EXIST BOOLEAN 文件是否存在(出参)。

示例(单机部署)

DECLARE
    is_exist BOOLEAN;
BEGIN
    DBMS_FS.SET_VOLUME('my_volume');
    DBMS_FS.CREATE('/mydir/myfile.txt');

    DBMS_FS.EXIST('/mydir/myfile.txt', is_exist);
    IF is_exist THEN
        DBMS_OUTPUT.PUT_LINE('File exists');
    ELSE
        DBMS_OUTPUT.PUT_LINE('File does not exist');
    END IF;
END;
/

--result
File exists
edit-icon
反馈
coperate-icon
coperate
合作
communication-icon
communicate
交流