LOCOPY 函数创建智能大对象的一个副本。
LOCOPY 函数从 ONCONFIG 文件或 sbspace 获取系统特定的存储缺省值。要获取更多关于系统指定的存储缺省值的信息,请参阅 GBase 8s 管理员指南。
LOCOPY 函数返回指向新的 BLOB 或 CLOB 值的句柄值(一个指针)。此函数不是 实际地将新的智能大对象值存储到数据库中的列内。您必须将该 BLOB 或 CLOB 值指定到适当的列。
/* 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 列。
INSERT INTO candidate (cand_photo) SELECT LOCOPY(cand_pic) FROM rdb:election2008;
当在与分布式查询中原始的 BLOB 或 CLOB 列一样的数据库服务器上执行 LOCOPY 函数时,函数产生 BLOB 或 CLOB 值的两个副本,一个在远程数据库中,另一个在本地数据库中,如下列两个示例所示。
INSERT INTO candidate (cand_photo) SELECT rdb:LOCOPY(cand_pic) FROM rdb:election2008;
INSERT INTO rdb:election2008 (cand_pic) SELECT LOCOPY(cand_photo) FROM candidate;
内建的 LOCOPY 函数的 BLOB 和 CLOB 参数是内建的 opaque 数据类型。这些可为由跨数据库 DML 操作返回的值,或为跨数据库函数调用返回的值,但内建的 opaque 类型不支持跨数据库服务器实例的分布式操作。如果本地数据库与 rdb 数据库是不同的 GBase 8s 实例的数据库,则在前面的两个示例中的 INSERT 语句失败并报错 -999。