LOCOPY 函数

LOCOPY 函数创建智能大对象的一个副本。

第一个参数指定要复制的 BLOB 或 CLOB 列。table column 参数是可选的。
  • 如果您省略 table column 参数,则 LOCOPY 函数以系统指定的存储缺省值创建智能大对象,并将 BLOB 或 CLOB 列中的数据复制到它之内。

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

  • 当您指定 table column 时,LOCOPY 函数为它创建的 BLOB 或 CLOB 值从指定的 column 使用存储特征。

LOCOPY 函数返回指向新的 BLOB 或 CLOB 值的句柄值(一个指针)。此函数不是 实际地将新的智能大对象值存储到数据库中的列内。您必须将该 BLOB 或 CLOB 值指定到适当的列。

下列 GBase 8s ESQL/C 代码片段将 candidate 表的 resume 列中的 CLOB 值复制到 interview 表的 resume 列:
/* Insert a new row in the在 interviews 表中插入新行并
          * (从 sqlca.sqlerrd[1])获得结果 SERIAL 值
          */
          EXEC SQL insert into interviews (intrv_num, intrv_time)
          values (0, '09:30');
          intrv_num = sqlca.sqlerrd[1];
          
          /* 以 candidate 编号更新此 interviews 行
          * 并从 candidate 表恢复。使用 LOCOPY 来
          * 在 candidate 表的 resume 列中
          * 创建 CLOB 值的副本。
          */
          EXEC SQL update interviews 
          SET (cand_num, resume) = 
          (SELECT cand_num, 
          LOCOPY(resume, 'candidate', 'resume')
          FROM candidate
          WHERE cand_lname = 'Haven')
          WHERE intrv_num = :intrv_num;

在前面的示例中,LOCOPY 函数为 candidate 表中的 CLOB resume 列的副本返回句柄值。由于 LOCOPY 函数指定表和列名称,因此这个新的 CLOB 值有此 resume 列的存储特征。如果您省略表(candidate)和列(resume)名称,则 LOCOPY 函数为新的 CLOB 值使用系统定义的存储缺省值。然后,UPDATE 语句将这个新的 CLOB 值指定到 interviews 表中的 resume 列。

在下列示例中,在本地数据库上执行 LOCOPY 函数并在本地服务器上为 rdb 中的 election2008 表中的 BLOB cand_pic 列的副本返回句柄值,rdb 是本地数据库服务器的另一数据库。然后,INSERT 语句将这个新的 BLOB 值指定到本地的 candidate 表中的 cand_photo 列。
INSERT INTO candidate (cand_photo)
          SELECT LOCOPY(cand_pic) FROM rdb:election2008;

当在与分布式查询中原始的 BLOB 或 CLOB 列一样的数据库服务器上执行 LOCOPY 函数时,函数产生 BLOB 或 CLOB 值的两个副本,一个在远程数据库中,另一个在本地数据库中,如下列两个示例所示。

在第一个示例中,在远程 rdb 数据库上执行 LOCOPY 函数,并为远程 election2008 表中的 BLOB cand_pic 列的副本在远程服务器中返回句柄值。然后,INSERT 语句将这个新的 BLOB 值指定到本地 candidate 表中的 cand_photo 列:
INSERT INTO candidate (cand_photo)
          SELECT rdb:LOCOPY(cand_pic) 
          FROM rdb:election2008;
在第二个示例中,在本地数据库上执行 LOCOPY 函数,并为本地 candidate 表中的 BLOB cand_photo 列的副本在本地数据库上返回句柄值。然后,该 INSERT 语句将这个新的 BLOB 值指定到远程 rdb 数据库中 election2008 表中的 cand_pic 列:
INSERT INTO rdb:election2008 (cand_pic)
          SELECT LOCOPY(cand_photo) FROM candidate;

内建的 LOCOPY 函数的 BLOB 和 CLOB 参数是内建的 opaque 数据类型。这些可为由跨数据库 DML 操作返回的值,或为跨数据库函数调用返回的值,但内建的 opaque 类型不支持跨数据库服务器实例的分布式操作。如果本地数据库与 rdb 数据库是不同的 GBase 8s 实例的数据库,则在前面的两个示例中的 INSERT 语句失败并报错 -999。