返回首页

gbase数据、南大通用产品文档:GBase8sifx_lo_spec_free() 函数

更新日期:2024年09月11日

ifx_lo_spec_free() 函数释放 LO-specification 结构的资源。

语法
mint ifx_lo_spec_free(LO_spec)
ifx_lo_create_spec_t *LO_spec;
LO_spec

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 788 -
指向要释放的 LO-specification 结构的指针。

用法
ifx_lo_spec_free() 函数通过调用 ifx_lo_spec_free() 来释放分配了的 LO-specification
结构。LO_spec 指针指向要被释放的 ifx_lo_create_spec_t 结构。

GBase 8s ESQL/C 不执行 LO-specification 结构的内存管理。你必须为每一您以
ifx_lo_def_create_spec() 函数的调用来分配的 LO-specification 结构调用 ifx_lo_spec_free()。


重要: 请不要使用 ifx_lo_spec_free() 来释放您通过调用 ifx_lo_stat_cspec() 来访问
的 ifx_lo_create_spec_t 结构。当您调用 ifx_lo_stat_free() 来释放 ifx_lo_stat_t 结构时,
它还自动地释放 ifx_lo_create_spec_t 结构。请仅使用 ifx_lo_spec_free() 来释放您通过调
用 ifx_lo_def_create_spec() 创建了的 ifx_lo_create_spec_t 结构。

返回代码
0
函数成功。
<0
函数不成功,且返回值指示失败的原因。

在触发事件之前或之后发生的触发操作仅执行一次。BEFORE 触发操作在触发语句之前执
行,即在触发器事件发生之前执行,AFTER 触发操作在触发语句操作完成之后执行。即使
触发语句不处理任何行,BEFORE 和 AFTER 触发操作也会执行。
除其它用法外,
还可以使用 BEFORE 和 AFTER 触发操作来确定触发语句的效果。
例如,
在更新 items 表的 quantity 列之前,可以调用 SPL 例程upd_items_p1 来计算表中所有项的
订购总数,如下例所示,该过程将总数存储在名为 old_qty 的全局变量中。
CREATE PROCEDURE upd_items_p1()
DEFINE GLOBAL old_qty INT DEFAULT 0;
LET old_qty = (SELECT SUM(quantity) FROM items);
END PROCEDURE;
在完成触发更新之后,可以再次计算总数来看看更改了多少。下面的 SPL 例
程 upd_items_p2 再次计算了 quantity 的总数并将结果存储在局部变量 new_qty 中。然后,
它将 new_qty 与全局变量 old_qty 相比较,以查看所有订单的总量的增长是否超过 50%。
若是,该过程将使用 RAISE EXCEPTION 语句来模拟 SQL 错误。
CREATE PROCEDURE upd_items_p2()
DEFINE GLOBAL old_qty INT DEFAULT 0;
DEFINE new_qty INT;
LET new_qty = (SELECT SUM(quantity) FROM items);
IF new_qty > old_qty * 1.50 THEN
RAISE EXCEPTION -746, 0, 'Not allowed - rule violation';
END IF
END PROCEDURE;
下列触发器调用 upd_items_p1 和 upd_items_p2 以防止对 items 表的 quantity 列点进行异常
更新:
CREATE TRIGGER up_items
UPDATE OF quantity ON items

GBase 8s SQL 指南:教程
南大通用数据技术股份有限公司
- 341 -
BEFORE(EXECUTE PROCEDURE upd_items_p1())
AFTER(EXECUTE PROCEDURE upd_items_p2());
如果更新使得对所有项的订购总量增长超过 50%,那么 upd_items_p2 中的 RAISE
EXCEPTION 语句终止该触发器,并显示错误。当进行事务记录的数据库服务器中的触发
器发生故障时,数据库服务器会回滚超过语句和触发操作进行的更改。有关触发器发生故
障时所发生的情况的更多信息,请参阅《GBase 8s SQL 指南:语法》中的 CREATE
TRIGGER 语句。

可以使用 onparams 命令或 ON-Monitor 来删除逻辑日志文件。
要删除逻辑日志文件并增加数据库空间中可用的磁盘空间量,可以使用 onparams。数据库
服务器始终需要最少三个逻辑日志文件。如果逻辑日志仅由三个日志文件组成,就无法删
除该日志。
删除日志文件的规则已更改:

如果您删除从未被写入的日志文件(状态 A),数据库服务器将立即删除它并释放
空间。

GBase 8s 管理员指南
南大通用数据技术股份有限公司
- 308 -

如果您删除已使用的日志文件
(状态 U-B)

数据库服务器将其标记为已删除 (D)。

在您对包含日志文件的数据库空间和根数据库空间进行了 0 级备份之后,数据库
服务器删除日志文件并释放空间。

您无法删除当前正在使用或包含上一个检查点记录(状态 C 或 L)的日志文件。
要使用 onparams 删除逻辑日志文件,请执行以下操作:
1.
请确保数据库服务器处于联机、管理或静默方式中。
2.
运行以下命令来删除日志文件号为 21 的逻辑日志文件:onparams -d -l 21
一次删除一个日志文件。您必须知道要删除的每个逻辑日志的日志文件号。
3.
如果日志文件具有新添加 (A) 的状态,那么将其立即删除。
如果日志文件具有已使用 (U) 的状态,那么将其标记为删除 (D)。
4.
要删除已使用的日志文件,请对所有数据库空间进行 0 级备份。
该备份防止数据库服务器在复原期间使用已删除的日志文件,并确保保留页包含有关
当前日志文件数量的信息。
有关使用 onparams 删除逻辑日志文件的信息,请参阅《 GBase 8s 管理员参考》。
有关使用 onlog 显示逻辑日志文件和唯一标识号的信息,请参阅显示逻辑日志记录。
要使用 ON-Monitor 删除逻辑日志文件 (UNIX™),请执行以下操作:
1.
请确保数据库服务器处于联机、管理或静默方式中。
2.
要删除逻辑日志文件,请选择参数 > 删除日志。
3.
如果日志文件的状态为“新添加”(A),会立即删除该文件。
如果日志文件具有已使用 (U) 的状态,那么将其标记为删除 (D)。
4.
要删除已使用的日志文件,请对所有数据库空间进行 0 级备份。
提示: 如果从未备份根数据库空间,您可以立即删除已使用的日志文件。