FILETOBLOB 和 FILETOCLOB 函数

FILETOBLOB 函数为存储在指定的操作系统文件中的数据创建 BLOB 值。类似地,FILETOCLOB 函数为存储在操作系统文件中的数据值创建 CLOB 值。

这些函数从下列参数来确定要使用的操作系统文件:
  • pathname 参数标识源文件的目录路径和名称。
  • file destination 参数标识此文件所在的计算机,'client''server'
    • file destination 设置为 'client' 来标识客户端计算机作为源文件的位置。pathname 既可是完整路径也可是当前目录的相对路径。
    • file destination 设置为 'server' 来标识服务器计算机作为源文件的位置。pathname 必须为完整路径。
table column 参数是可选的:
  • 如果您省略 table column,则 FILETOBLOB 函数以系统指定的存储缺省值来创建 BLOB 值,且 FILETOCLOB 函数以系统指定的存储缺省值来创建 CLOB 值。

    这些函数从 ONCONFIG 文件或从 sbspace 获取系统特定的存储特征。要获取更多关于系统指定的存储缺省值的信息,请参阅 GBase 8s 管理员指南

  • 如果您指定 table column,则 FILETOBLOBFILETOCLOB 函数为它们创建的 BLOB 或 CLOB 值使用来自指定的列的存储特征。

FILETOBLOB 返回一个指向新的 BLOB 值的句柄值(指针)。类似地,FILETOCLOB 返回一个指向新的 CLOB 值的句柄值。两个参数都不实际地将智能大对象值复制到数据库列内。您必须将 BLOB 或 CLOB 值指定到适当的列。

FILETOCLOB 函数将文件从客户端或服务器计算机复制到数据库时,它执行任何可能需要的代码集转换。

下列 INSERT 语句使用 FILETOCLOB 函数来从 smith.rsm 文件中的值创建 CLOB:
INSERT INTO candidate (cand_num, cand_lname, resume) 
          VALUES (2, 'Smith', FILETOCLOB('smith.rsm', 'client'));

在前面的示例中,FILETOCLOB 函数读取客户端计算机上当前目录中的 smith.rsm 文件,并返回一指向包含此文件中的数据的 CLOB 值的句柄值。由于 FILETOCLOB 函数未指定表和列名称,此新的 CLOB 值有系统指定的存储特征。然后,该 INSERT 语句将此 CLOB 值指定给 candidate 表中的 resume 列。

下列 INSERT 语句使用 FILETOBLOB 函数从本地数据库服务器上的 photos.xxx 文件中的值创建 BLOB 值,并将那个值插入到 rdb 数据库的 election2008 表内,其为本地数据库服务器的另一数据库:
INSERT INTO rdb@:election2008 (cand_pic) 
          VALUES (FILETOBLOB('C:\tmp\photos.xxx', 'server', 
          'candidate', 'cand_photo'));

在前面的示例中,FILETOBLOB 函数读取本地数据库服务器上指定的目录中的 photos.xxx 文件,并返回指向此包含文件中的数据的 BLOB 值的句柄值。然后,该 INSERT 语句将此 BLOB 值指定到本地数据库服务器的 rdb 数据库中的 election2008 表中的 cand_pic 列。此新的 BLOB 值有本地数据库中的 candidate 表中的 cand_photo 列的存储特征。

在下列示例中,新的 BLOB 值有 rdb2 数据库中的 election96 表中的 cand_pix 列的存储特征,在此,rdb1rdb2 是本地 GBase 8s 实例的数据库:
INSERT INTO rdb1:election2008 (cand_pic) 
          VALUES (FILETOBLOB('C:\tmp\photos.xxx', 'server',
          'rdb2:election96', 'cand_pix'));

当您以远程数据库和远程数据库服务器的名称限定 FILETOBLOBFILETOCLOB 函数时,pathnamefile destination 成为对远程数据库服务器的相对值。

当您指定 server 作为文件目的地时,如下例所示,FILETOBLOB 函数在远程数据库服务器上查找源文件(在此情况下,为 photos.xxx):
INSERT INTO rdb@rserv:election (cand_pic) 
          VALUES (rdb@rserv:FILETOBLOB('C:\tmp\photos.xxx', 'server'));
然而,当您指定 client 为文件目的地时,如下例所示,FILETOBLOB 函数在本地客户端计算机上查找源文件(在此情况下,为 photos.xxx):
INSERT INTO rdb@rserv:election (cand_pic) 
          VALUES (rdb@rserv:FILETOBLOB('photos.xxx', 'client'));