SELECT、UPDATE 和 INSERT 语句不直接操纵智能大对象的值。相反,它们使用
句柄值(一类指针)来访问 BLOB 或 CLOB 值,如下:
- SELECT 语句返回指向 projection 列表指定的 BLOB 或 CLOB 值的句柄值。SELECT 不返回 projection 列表指定的 BLOB
或 CLOB
列的实际值。相反,它返回指向该列数据的句柄值。
- INSERT 和 UPDATE 语句不将 BLOB 或 CLOB 列的实际数据发送到数据库服务器。相反,它们接受指向此数据的句柄值作为要插入或更新的值。
要访问智能大对象列的数据,您必须使用下列应用编程接口(API)之一:
- 从一 GBase 8s ESQL/C 程序内,使用访问智能大对象的 GBase 8s ESQL/C 库函数。要获取更多信息,请参阅 GBase 8s ESQL/C 程序员手册。
- 从诸如
DataBlade
模块这样的 C 程序内,使用客户端和服务器 API。
您不可在涉及算术运算符的表达式中使用智能大对象列的名称。例如,对智能大对象句柄值的诸如加法或减法这样的运算没有意义。
当您选择智能大对象列时,您可将句柄值赋予任何数目的列:带有相同句柄值的所有列共享该 CLOB 或 BLOB 值。这种存储管理降低 CLOB 或 BLOB 值的磁盘空间量,但当几个列分享同一智能大对象值时,导致下列情况:
- 提高在 CLOB 或 BLOB 列上锁争夺的机会。如果两列共享同一智能大对象值,则该数据库可能被需要访问它的一列锁定。
- 可从多个点更新 CLOB 或 BLOB 值。
要移除这些限制,您可为需要访问它的每一列都创建单独的 BLOB 或 CLOB 数据的副本。您可使用 LOCOPY 函数来创建现有智能大对象的副本。
您还可使用内建的函数 LOTOFILE、FILETOCLOB 和 FILETOBLOB 来访问智能大对象值,如 智能大对象函数 中描述的那样。要获取更多关于 BLOB 和 CLOB 数据类型的信息,请参阅 GBase 8s SQL 参考指南。