华为云云数据库GaussDBDBE_FILE_云淘科技

注意事项

DBE_FILE要求以DBE_FILE.FOPEN打开的文件是以数据库字符集编码,如果打开的文件未按预期的字符集编码,在使用DBE_FILE.READ_LINE读取文件时,会发生编码校验错误;DBE_FILE要求以DBE_FILE.FOPEN_NCHAR打开的文件是以UTF-8字符集编码,如果打开的文件未按预期的字符集编码,在使用DBE_FILE.READ_LINE_NCHAR读取文件时,会发生编码校验错误。
当使用DBE_OUTPUT.PUT_LINE打印DBE_FILE.READ_LINE_NCHAR接口得到的结果时,需要确保UTF-8字符集编码能够转换成当前数据库字符集编码,满足上述条件后可以正常输出结果。DBE_OUTPUT.PRINT_LINE不支持该功能。
DBE_FILE要求客户端字符集编码与数据库字符集编码保持一致。
当数据库字符集编码为ASCII编码、客户端字符集编码为支持中文的编码,在客户端调用DBE_FILE.WRITE_NCHAR或DBE_FILE.WRITE_LINE_NCHAR写入中文相关内容时,无法保证写入的内容为UTF-8编码格式。可能会导致后续使用DBE_FILE.READ_LINE_NCHAR时报错。

数据类型介绍

DBE_FILE.FILE_TYPE

DBE_FILE.FILE_TYPE类型定义了DBE_FILE包中文件的表示方式,DBE_FILE.FILE_TYPE中的字段是DBE_FILE包的私有字段,请不要直接修改DBE_FILE.FILE_TYPE类型对象中字段的值。

1
2
3
4
5
CREATE TYPE DBE_FILE.FILE_TYPE AS(
    id INTEGER,
    datatype INTEGER,
    byte_mode BOOLEAN
);
表1 DBE_FILE.FILE_TYPE字段说明

参数

描述

id

文件句柄。

datatype

表明文件是CHAR文件还是NCHAR文件或者二进制文件,目前支持CHAR文件和NCHAR文件。CHAR文件返回1,NCHAR文件返回2。

byte_mode

表明文件是以二进制模式打开(TRUE)还是以文本模式打开(FALSE)。

接口介绍

高级功能包DBE_FILE支持的所有接口请参见表2。

表2 DBE_FILE

接口名称

描述

DBE_FILE.OPEN

根据指定的目录和文件名打开一个文件。

DBE_FILE.IS_CLOSE

检测一个文件句柄是否打开。

DBE_FILE.READ_LINE

根据指定的长度从一个打开的文件句柄中读取出一行数据。

DBE_FILE.WRITE

将BUFFER中指定的数据写入到文件中。

DBE_FILE.NEW_LINE

这个存储过程用于向一个打开的文件中写入一个或者多个行终结符。

DBE_FILE.WRITE_LINE

这个存储过程将BUFFER中的字符串写入到一个打开的文件中。

DBE_FILE.FORMAT_WRITE

这个存储过程是一个格式化的PUT存储过程,行为类似printf()。

DBE_FILE.GET_RAW

从一个打开的文件句柄中读取二进制数据。

DBE_FILE.PUT_RAW

向文件中写入传入的二进制数据。

DBE_FILE.FLUSH

将一个文件句柄中的数据写入到物理文件中。

DBE_FILE.CLOSE

关闭一个打开的文件句柄。

DBE_FILE.CLOSE_ALL

关闭一个会话中打开的所有的文件句柄。

DBE_FILE.REMOVE

这个存储过程删除一个磁盘文件,操作的时候需要有充分的权限。

DBE_FILE.RENAME

对于磁盘上的文件进行重命名,类似Unix的mv。

DBE_FILE.COPY

拷贝一个连续的区域内容到一个新创建的文件中,如果忽略了start_line和end_line会拷贝整个文件。

DBE_FILE.GET_ATTR

读取并返回磁盘文件的属性。

DBE_FILE.SEEK

根据用户指定的字节数向前或者向后调整文件指针的位置。

DBE_FILE.GET_POS

返回文件的偏移量,单位字节。

DBE_FILE.FOPEN_NCHAR

根据指定的目录和文件名打开一个文件。

DBE_FILE.WRITE_NCHAR

将数据写入到一个打开的文件。

DBE_FILE.WRITE_LINE_NCHAR

将数据写入到一个打开的文件,并自动追加一个行终结符。

DBE_FILE.FORMAT_WRITE_NCHAR

将格式化数据写入到一个打开的文件,允许格式化的DBE_FILE.WRITE_NCHAR接口。

DBE_FILE.READ_LINE_NCHAR

从一个打开的文件中读取一行指定长度的数据。

DBE_FILE.OPEN

该函数用来打开一个文件,可以指定最大行的大小,最多可以同时打开50个文件。并且该函数返回INTEGER类型的一个句柄。

DBE_FILE.OPEN函数原型为:

1
2
3
4
5
6
DBE_FILE.OPEN (
dir             IN    VARCHAR2,
file_name       IN   VARCHAR2,
open_mode       IN    VARCHAR2,
max_line_size   IN    INTEGER DEFAULT 1024)
RETURN INTEGER;
表3 DBE_FILE.OPEN接口参数说明

参数

描述

dir

文件的目录位置,这个字符串是一个目录对象名。

说明:

文件目录的位置,需要添加到系统表PG_DIRECTORY中,如果传入的路径和PG_DIRECTORY中的路径不匹配,会报路径不存在的错误。
在打开guc参数safe_data_path时,用户只能通过高级包读写safe_data_path指定文件路径下的文件。

file_name

文件名,包含扩展(文件类型),不包括路径名。如果文件名中包含路径,在OPEN中会被忽略,在Unix系统中,文件名不能以/.结尾。

open_mode

指定文件的打开模式,包含:

r:read text
w:write text
a:append text
rb:read byte
wb:write byte
ab:append byte

说明:

对于写操作,会检测写入文件类型,如果为elf类型文件,会报错退出。

max_line_size

每行最大字符数,包含换行符(最小值是1,最大值是32767)。如果没有指定,会指定一个默认值1024。

DBE_FILE.IS_CLOSE

该函数用于检测一个文件句柄来查看文件是否已经打开,返回一个布尔值,异常情况是INVALID_FILEHANDLE。

DBE_FILE.IS_CLOSE函数原型为:

1
2
3
DBE_FILE.IS_CLOSE (
file      IN     INTEGER)
RETURN BOOLEAN;
表4 DBE_FILE.IS_CLOSE接口参数说明

参数

描述

file IN INTEGER

传入一个要检测的文件句柄。

DBE_FILE.READ_LINE

该存储过程从一个打开的文件句柄中读取文本,并把读取的结果存放到BUFFER中。读取的时候会读取到行尾,不包含行终结符或者读取到文件末尾,或者达到了len参数指定的大小,读取的长度不能超过OPEN的时候指定的max_line_size。

DBE_FILE.READ_LINE函数原型为:

1
2
3
4
DBE_FILE.READ_LINE (
file      IN   INTEGER,
buffer    OUT  VARCHAR2,
len       IN   INTEGER DEFAULT NULL)
表5 DBE_FILE.READ_LINE接口参数说明

参数

描述

file

通过调用OPEN打开的文件句柄,文件必须以读的模式打开,否则会抛出INVALID_OPERATION的异常。

buffer

用于接收数据的BUFFER。

len

从文件中读取的字节数,默认是NULL。如果是默认NULL,会使用max_linesize来指定大小。

DBE_FILE.WRITE

该存储过程用于向文件中写入BUFFER中的数据,要写入的文件必须以写模式打开,这个操作不会写入行终结符。

DBE_FILE.WRITE函数原型为:

1
2
3
DBE_FILE.WRITE (
file     IN     INTEGER,
buffer   IN     TEXT);
表6 DBE_FILE.WRITE接口参数说明

参数

描述

file

该存储过程用于向文件中写入BUFFER中的数据,要写入的文件必须以写模式打开,这个操作不会写入行终结符。

buffer

要写入文件的文本数据,BUFFER的最大值是32767个字节。如果在open的时候没有指定值,默认是1024个字节,没有刷新到文件之前,一系列的WRITE操作的BUFFER总和不能超过32767个字节。

说明:

对于写操作,会检测写入文件类型,如果为elf类型文件,会报错退出。

DBE_FILE.NEW_LINE

该存储过程用于向一个打开的文件中写入一个或者多个行终结符。这个存储过程是从WRITE函数中拆分出来的,因为行终结符和平台相关。

DBE_FILE.NEW_LINE函数原型为:

1
2
3
DBE_FILE.NEW_LINE (
file         IN     INTEGER,
line_nums    IN     INTEGER := 1);
表7 DBE_FILE.NEW_LINE接口参数说明

参数

描述

file

一个打开的文件句柄。

line_nums

写入到文件中的终结符的数量。

DBE_FILE.WRITE_LINE

该存储过程将BUFFER中的字符串写入到一个打开的文件中,文件必须以写模式打开。

DBE_FILE.WRITE_LINE函数原型为:

1
2
3
4
DBE_FILE.WRITE_LINE(
file       IN     INTEGER,
buffer     IN     TEXT,
flush      IN     BOOLEAN DEFAULT FALSE);
表8 DBE_FILE.WRITE_LINE接口参数说明

参数

描述

file

一个打开的文件句柄。

buffer

要写入文件的文本数据,BUFFER的最大值是32767个字节。如果在open的时候没有指定值,默认是1024个字节,没有刷新到文件之前,一系列的PUT操作的BUFFER总和不能超过32767个字节。

说明:

对于写操作,会检测写入文件类型,如果为elf类型文件,会报错退出。

flush

在write后是否要刷到磁盘。

DBE_FILE.FORMAT_WRITE

该存储过程是一个格式化的PUT存储过程,行为类似printf()。

DBE_FILE.FORMAT_WRITE函数原型为:

1
2
3
4
5
6
DBE_FILE.FORMAT_WRITE (
file   IN INTEGER,
format IN VARCHAR2,
arg1  IN VARCHAR2 DEFAULT NULL,
. . .
arg6 IN VARCHAR2 DEFAULT NULL]);
表9 DBE_FILE.FORMAT_WRITE接口参数说明

参数

描述

file

一个打开的文件句柄。

format

一个要进行格式化的字符串包含,文本和格式符
和%s。

[arg1. . .arg6]

从1到6个可选的参数串,参数和格式化字符的位置是一一对应的,如果存在格式化字符而没有提供参数,会使用空串来替代%s。

DBE_FILE.GET_RAW

该函数用于从打开的文件描述符中读取二进制数据,从r中返回。

DBE_FILE.GET_RAW函数原型为:

1
2
3
4
DBE_FILE.GET_RAW (
file    IN   INTEGER,
r       OUT  RAW,
length  IN   INTEGER DEFAULT NULL);
表10 DBE_FILE.GET_RAW接口参数说明

参数

描述

file

一个打开的文件句柄。

r

输出的二进制数据

length

要读取文件的长度,默认值为NULL,读取文件中所有数据,最大长度为1G。

DBE_FILE.PUT_RAW

该函数用于向文件中写入二进制数据。

DBE_FILE.PUT_RAW函数原型为:

1
2
3
4
DBE_FILE.PUT_RAW (
file    IN  INTEGER,
r       IN  RAW,
flush   IN  BOOLEAN DEFAULT FALSE);
表11 DBE_FILE.PUT_RAW接口参数说明

参数

描述

file

一个打开的文件句柄。

r

输出的二进制数据

说明:

对于写操作,会检测写入文件类型,如果为elf类型文件,会报错退出。

flush

是否flush到文件中,默认为false。

DBE_FILE.FLUSH

一个文件句柄中的数据要写入到物理文件中,缓冲区中的数据必须要有一个行终结符。当文件必须在打开时读取,刷新非常有用。例如,调试信息可以刷新到文件中,以便立即读取。

DBE_FILE.FLUSH函数原型为:

1
2
DBE_FILE.FLUSH (
file     IN     INTEGER);
表12 DBE_FILE.FLUSH接口参数说明

参数

描述

file

一个打开的文件句柄。

DBE_FILE.CLOSE

该存储过程用于关闭一个打开的文件句柄,当调用这个存储过程的时候,如果还有等待写入的缓存的数据,可能会收到异常信息。

DBE_FILE.CLOSE函数原型为:

1
2
3
DBE_FILE.CLOSE (
file IN INTEGER
)RETURN INTEGER;
表13 DBE_FILE.CLOSE接口参数说明

参数

描述

file

一个打开的文件句柄。

DBE_FILE.CLOSE_ALL

该存储过程关闭一个会话中打开的所有的文件句柄,可用于紧急的清理操作。

DBE_FILE.CLOSE_ALL函数原型为:

1
DBE_FILE.CLOSE_ALL;
表14 DBE_FILE.CLOSE_ALL接口参数说明

参数

描述

DBE_FILE.REMOVE

该存储过程删除一个磁盘文件,操作的时候对目录和文件要有充分的权限。

DBE_FILE.REMOVE函数原型为:

1
2
3
DBE_FILE.REMOVE (
dir           IN     VARCHAR2,
file_name     IN     VARCHAR2);
表15 DBE_FILE.REMOVE接口参数说明

参数

描述

dir

文件所在的目录位置。

说明:

文件目录的位置,需要添加到系统表PG_DIRECTORY中,如果传入的路径和PG_DIRECTORY中的路径不匹配,会报路径不存在的错误。
在打开guc参数safe_data_path时,用户只能通过高级包操作safe_data_path指定文件路径下的文件。

file_name

要删除的文件。

DBE_FILE.RENAME

对磁盘上的文件进行重命名,类似Unix的mv。

DBE_FILE.RENAME函数原型为:

1
2
3
4
5
6
DBE_FILE.RENAME (
src_dir        IN   VARCHAR2,
src_file_name  IN   VARCHAR2,
dest_dir       IN   VARCHAR2,
dest_file_name IN   VARCHAR2,
overwrite      IN   BOOLEAN DEFAULT FALSE);
表16 DBE_FILE.RENAME接口参数说明

参数

描述

src_dir

原文件的目录位置(大小写敏感)。

说明:

文件目录的位置,需要添加到系统表PG_DIRECTORY中,如果传入的路径和PG_DIRECTORY中的路径不匹配,会报路径不存在的错误。
在打开guc参数safe_data_path时,用户只能通过高级包操作safe_data_path指定文件路径下的文件。

src_file_name

要进行命名的原文件。

dest_dir

目的目录(大小写敏感)。

说明:

文件目录的位置,需要添加到系统表PG_DIRECTORY中,如果传入的路径和PG_DIRECTORY中的路径不匹配,会报路径不存在的错误。
在打开guc参数safe_data_path时,用户只能通过高级包操作safe_data_path指定文件路径下的文件。

dest_file_name

新的文件名。

overwrite

默认是false,如果目的目录下存在一个同名的文件,不会进行重写。

DBE_FILE.COPY

该存储过程拷贝一个连续的区域内容到一个新创建的文件中,如果忽略了start_line和end_line会拷贝整个文件。

DBE_FILE.COPY函数原型为:

1
2
3
4
5
6
7
DBE_FILE.COPY (
src_dir           IN     VARCHAR2,
src_file_name     IN     VARCHAR2,
dest_dir          IN     VARCHAR2,
dest_file_name    IN     VARCHAR2,
start_line        IN     INTEGER DEFAULT 1,
end_line          IN     INTEGER DEFAULT NULL);
表17 DBE_FILE.COPY接口参数说明

参数

描述

src_dir

原文件所在的目录。

说明:

文件目录的位置,需要添加到系统表PG_DIRECTORY中,如果传入的路径和PG_DIRECTORY中的路径不匹配,会报路径不存在的错误。
在打开guc参数safe_data_path时,用户只能通过高级包操作safe_data_path指定文件路径下的文件。

src_file_name

要拷贝的原文件。

dest_dir

目的文件所在的目录。

说明:

文件目录的位置,需要添加到系统表PG_DIRECTORY中,如果传入的路径和PG_DIRECTORY中的路径不匹配,会报路径不存在的错误。
在打开guc参数safe_data_path时,用户只能通过高级包操作safe_data_path指定文件路径下的文件。

dest_file_name

要写入的目的文件。

说明:

对于写操作,会检测写入文件类型,如果为elf类型文件,会报错退出。

start_line

拷贝开始的行号,默认是1。

end_line

拷贝结束的行号,默认是NULL,指定到文件尾。

DBE_FILE.GET_ATTR

该存储过程用于读取并返回磁盘文件的属性。

DBE_FILE.GET_ATTR函数原型为:

1
2
3
4
5
6
DBE_FILE.GET_ATTR(
location IN text,
filename IN text,
OUT fexists boolean,
OUT file_length bigint,
OUT block_size integer);
表18 DBE_FILE.GET_ATTR接口参数说明

参数

描述

location

文件所在的目录。

说明:

文件目录的位置,需要添加到系统表PG_DIRECTORY中,如果传入的路径和PG_DIRECTORY中的路径不匹配,会报路径不存在的错误。
在打开guc参数safe_data_path时,用户只能通过高级包操作safe_data_path指定文件路径下的文件。

filename

要检测的文件名。

fexists

返回文件是否存在的值。

file_length

文件的字节长度,如果文件不存在返回NULL。

block_size

文件系统的块大小(单位字节),如果文件不存在返回NULL。

DBE_FILE.SEEK

该存储过程会根据用户指定的字节数向前或者向后调整文件指针的位置。

DBE_FILE.SEEK函数原型为:

1
2
3
4
DBE_FILE.SEEK (
file            IN INTEGER,
absolute_start  IN     BIGINT DEFAULT NULL,
relative_start  IN     BIGINT DEFAULT NULL);
表19 DBE_FILE.SEEK接口参数说明

参数

描述

file

一个打开的文件句柄。

absolute_start

文件偏移的绝对位置,这个默认值为NULL。

relative_start

文件偏移的相对位置。如果这个值是正数,向前偏移;如果是负数,向后偏移;默认值为NULL。如果和absolute_start参数同时指定,以absolute_start参数为准。

DBE_FILE.GET_POS

函数返回文件的偏移量,单位字节。

DBE_FILE.FGETPOS函数原型为:

1
2
3
DBE_FILE.GET_POS (
file    IN     INTEGER)
RETURN BIGINT;
表20 DBE_FILE.GET_POS接口参数说明

参数

描述

file

一个打开的文件句柄。

DBE_FILE.FOPEN_NCHAR

函数DBE_FILE.FOPEN_NCHAR用来打开一个文件,可以指定最大行的大小,一个会话内最多可以同时打开50个文件。该函数返回一个DBE_FILE.FILE_TYPE类型的文件句柄。该函数以国家字符集模式打开文件以进行输入或输出。

DBE_FILE.FOPEN_NCHAR函数原型为:

1
2
3
4
5
6
DBE_FILE.FOPEN_NCHAR(
    dir           IN TEXT,
    file_name     IN TEXT,
    open_mode     IN TEXT,
    max_line_size IN INTEGER DEFAULT 1024)
RETURN DBE_FILE.FILE_TYPE;
表21 DBE_FILE.FOPEN_NCHAR接口参数说明

参数

描述

dir

文件的目录位置,这个字符串是一个目录对象名。

说明:

文件目录的位置,需要添加到系统表PG_DIRECTORY中,如果传入的路径和PG_DIRECTORY中的路径不匹配,会报路径不存在的错误。
在打开guc参数safe_data_path时,用户只能通过高级包读写safe_data_path指定文件路径下的文件。

file_name

文件名,包含扩展(文件类型),不包括路径名。如果文件名中包含路径,在FOPEN_NCHAR中会被忽略,在Unix系统中,文件名不能以/.结尾。

open_mode

指定文件的打开模式,包含:

r:read text
w:write text
a:append text
rb:read byte
wb:write byte
ab:append byte

说明:

对于写操作,会检测写入文件类型,如果为elf类型文件,会报错退出。

max_line_size

每行最大字符数,包含换行符(最小值是1,最大值是32767)。如果没有指定,会指定一个默认值1024。

DBE_FILE.WRITE_NCHAR

函数DBE_FILE.WRITE_NCHAR用于向文件中写入buffer中的数据,文件必须以国家字符集模式和写模式打开,这个操作不会写入行终结符,返回值永远为TRUE。文本字符串将以UTF8字符集格式写入。

DBE_FILE.WRITE_NCHAR函数原型为:

1
2
3
4
DBE_FILE.WRITE_NCHAR(
    file   IN DBE_FILE.FILE_TYPE,
    buffer IN NVARCHAR2)
RETURN VOID;
表22 DBE_FILE.WRITE接口参数说明

参数

描述

file

通过FOPEN_NCHAR打开的DBE_FILE.FILE_TYPE类型的对象,要写入的文件必须以写模式打开,这个操作不会写入行终结符。

buffer

写入文件的文本数据。每行的累计写入长度不能大于或等于FOPEN_NCHAR时指定或默认的max_line_size,否则会在刷新到文件时报错。

说明:

对于写操作,会检测写入文件类型,如果为elf类型文件,会报错退出。

DBE_FILE.WRITE_LINE_NCHAR

函数DBE_FILE.WRITE_LINE_NCHAR用于向文件中写入buffer中的数据,文件必须以国家字符集模式和写模式打开,这个操作会自动追加行终结符,返回值永远为TRUE。文本字符串将以UTF8字符集格式写入。

DBE_FILE.WRITE_LINE_NCHAR函数原型为:

1
2
3
4
DBE_FILE.WRITE_LINE_NCHAR(
    file   IN DBE_FILE.FILE_TYPE,
    buffer IN NVARCHAR2)
RETURN VOID;
表23 DBE_FILE.WRITE_LINE接口参数说明

参数

描述

file

通过FOPEN_NCHAR打开的DBE_FILE.FILE_TYPE类型的对象。

buffer

要写入文件的文本数据,每行的长度(包含换行符)不能大于FOPEN_NCHAR时指定或默认的max_line_size,否则会在刷新到文件时报错。

说明:

对于写操作,会检测写入文件类型,如果为elf类型文件,会报错退出。

DBE_FILE.FORMAT_WRITE_NCHAR

函数DBE_FILE.FORMAT_WRITE_NCHAR将格式化数据写入到一个打开的文件,是允许格式化的DBE_FILE.WRITE_NCHAR接口,返回值永远为TRUE。

DBE_FILE.FORMAT_WRITE_NCHAR函数原型为:

1
2
3
4
5
6
7
DBE_FILE.FORMAT_WRITE_NCHAR(
    file   IN DBE_FILE.FILE_TYPE,
    format IN NVARCHAR2,
    arg1   IN NVARCHAR2 DEFAULT NULL,
    . . .
    arg5   IN NVARCHAR2 DEFAULT NULL)
RETURN VOID;
表24 DBE_FILE.FORMAT_WRITE_NCHAR接口参数说明

参数

描述

file

通过FOPEN_NCHAR打开的DBE_FILE.FILE_TYPE类型的对象。

format

格式化的字符串,包含文本和格式符
和%s。

[arg1. . .arg5]

从1到5个可选的参数串,参数和格式化字符的位置是一一对应的,如果存在格式化字符而没有提供参数,会使用空串来替代%s。

DBE_FILE.READ_LINE_NCHAR

存储过程DBE_FILE.READ_LINE_NCHAR从一个打开的文件读取数据,并把读取的结果存放到buffer中。读取的时候会读取到行尾,但不包含行终结符,或者读取到文件末尾,或者读取到len参数指定的大小。读取的长度不能超过FOPEN_NCHAR的时候指定的max_line_size。

DBE_FILE.READ_LINE_NCHAR存储过程原型为:

1
2
3
4
DBE_FILE.READ_LINE_NCHAR(
    file   IN  DBE_FILE.FILE_TYPE,
    buffer OUT NVARCHAR2,
    len    IN  INTEGER DEFAULT NULL);
表25 DBE_FILE.READ_LINE接口参数说明

参数

描述

file

通过FOPEN_NCHAR打开的DBE_FILE.FILE_TYPE类型的对象,文件必须以读模式打开,否则会抛出INVALID_OPERATION的异常。

buffer

接收数据的buffer。

len

从文件中读取的字节数,默认值为NULL。如果是NULL,会使用max_line_size来指定大小。

示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
--系统管理员向PG_DIRECTORY系统表中加入目录/temp/:
CREATE OR REPLACE DIRECTORY dir AS '/tmp/';
--打开一个文件并向文件中写入数据                                                                                                                   
DECLARE
  f integer;
  dir text := 'dir';
BEGIN
  f := dbe_file.open(dir, 'sample.txt', 'w');
  PERFORM dbe_file.write_line(f, 'ABC');
  PERFORM dbe_file.write_line(f, '123'::numeric);
  PERFORM dbe_file.write_line(f, '-----');
  PERFORM dbe_file.new_line(f);
  PERFORM dbe_file.write_line(f, '*******');
  PERFORM dbe_file.new_line(f, 0);
  PERFORM dbe_file.write_line(f, '++++++++');
  PERFORM dbe_file.new_line(f, 2);
  PERFORM dbe_file.write_line(f, '#######');
  PERFORM dbe_file.write(f, 'A');
  PERFORM dbe_file.write(f, 'B');
  PERFORM dbe_file.new_line(f);
  PERFORM dbe_file.format_write(f, '[1 -> %s, 2 -> %s, 3 -> %s, 4 -> %s, 5 -> %s]', 'gaussdb', 'dbe', 'file', 'get', 'line');
  PERFORM dbe_file.new_line(f);
  PERFORM dbe_file.write_line(f, '1234567890');
  f := dbe_file.close(f);
END;
/
--在上面写入的文件中读取数据。
DECLARE
  f integer;
  dir text := 'dir';
BEGIN
  f := dbe_file.open(dir, 'sample.txt', 'r');
  FOR i IN 1..11 LOOP
       RAISE INFO '[%] : %', i, dbe_file.read_line(f);
  END LOOP;
END;
/
-- 对文件句柄执行位置偏移,并获取文件的当前位置。                                                                                                 
DECLARE
      l_file   integer;
      l_buffer VARCHAR2(32767);
      dir text := 'dir';
      abs_offset number := 100;
      rel_offset number := NULL;
BEGIN
      l_file := dbe_file.open(dir  => dir,  file_name  => 'sample.txt',open_mode => 'R');
      dbe_output.print_line('before seek: current position is ' || dbe_file.get_pos(file => l_file)); -- before seek: current position is 0
      dbe_file.seek(file => l_file, absolute_start=>abs_offset, relative_start=>rel_offset);
      dbe_output.print_line('fseek: current position is ' || dbe_file.get_pos(file => l_file)); -- seek: current position is 100
      l_file := dbe_file.close(file => l_file);
END;
/

-- NCHAR读写相关接口用例
DECLARE
f DBE_FILE.FILE_TYPE;
buffer NVARCHAR2;
BEGIN
-- 写文件
f := DBE_FILE.FOPEN_NCHAR('dir', 'sample02.txt', 'w');
DBE_FILE.WRITE_NCHAR(f, 'A');
DBE_FILE.WRITE_NCHAR(f, 'B');
DBE_FILE.WRITE_NCHAR(f, 'C');
DBE_FILE.NEW_LINE(f);
DBE_FILE.WRITE_LINE_NCHAR(f, 'ABC');
DBE_FILE.FORMAT_WRITE_NCHAR(f, '[1 -> %s, 2 -> %s]
', 'GaussDB', 'DBE_FILE');
DBE_FILE.CLOSE(f);
-- 读文件
f := DBE_FILE.FOPEN_NCHAR('dir', 'sample02.txt', 'r');
DBE_FILE.READ_LINE_NCHAR(f, buffer); -- ABC
DBE_FILE.READ_LINE_NCHAR(f, buffer); -- ABC
DBE_FILE.READ_LINE_NCHAR(f, buffer); -- [1 -> GaussDB, 2 -> DBE_FILE]
DBE_OUTPUT.PRINT_LINE(buffer); 
DBE_FILE.CLOSE(f);
END;
/

父主题: 二次封装接口(推荐)

同意关联代理商云淘科技,购买华为云产品更优惠(QQ 78315851)

内容没看懂? 不太想学习?想快速解决? 有偿解决: 联系专家