返回首页

gbase数据、南大通用产品文档:GBase8s编译 ESQL/C 程序

更新日期:2024年09月11日

esql 将 GBase 8s ESQL/C 源文件传递给 GBase 8s ESQL/C 预处理器和 C 编译器。
它通过 GBase 8s ESQL/C 预处理器和 C 编译器特有的选项来预处理、编译和链接 GBase
8s ESQL/C 程序。
ESQL/C 预处理器
要处理、编译链接包含 GBase 8s ESQL/C 语句的程序,必需通过 GBase 8s ESQL/C
预处理器传递它。可以使用 esql 命令 GBase 8s ESQL/C 源文件上的预处理器并创建可执
行文件。esql 命令按照以下步骤执行转换:
在第一阶段,GBase 8s ESQL/C 预处理执行以下步骤:
当头文件处理所有 include 指令($include 和 EXEC SQL include 语句)时,将头文
件合并到源文件中
在处理所有 define
($define 和 EXEC SQL define|)
和 undef
($undef 和 EXEC SQL
undef)指令时创建或删除编译时定义

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 43 -

在第二阶段,
GBase 8s ESQL/C 预处理器处理任何条件编译指令
(ifdef 、
ifndef 、
else 、
elif 、
endif)
并将嵌入式 SQL 语句转换为 GBase 8s ESQL/C 函数调用和特殊的 0 数据类
型。
阶段 1 和阶段 2 反映了 C 编译器的预处理器和编译器阶段。成功完成预处理步骤
将产生一个 C 源文件(.c 扩展名)。

esql 命令预处理器作为 GBase 8s ESQL/C 产品的一部分安装。在使用 esql 之前,请
确保:
GBase 8s ESQL/C 源文件的文件名称具有 .ec 或 .ecp。
GBASEDBTDIR 和 PATH 环境变量已正确设置。

如果在命令窗口或 Windows™ 注册表中未设置 GBASEDBTDIR 环境变量,则将其
内部设置为 GBase 8s Client SDK 动态链接库的位置。

如果在 UNIX™ 中未设置 GBASEDBTDIR 环境,则当编译任何 GBase 8s Client
Software Development Kit (Client SDK) 应用程序时会发生错误。
重要:
始终将 esql 程序与程序链接。
使用的库列表可以在版本之间更改。
与 esql 链
接确保程序与库正确链接。
预处理器生成的 C 代码可能随着产品的版本而更改。因此,不要设置程序,这些程
序取决于 如何在 预处理器生成的 C 代码中实现产品的功能。
C 预处理器和编译器
esql 不会自动编译和链接 GBase 8s ESQL/C 程序。
esql 命令将 GBase 8s ESQL/C 代
码转换为 C 代码,然后调用 C 编译器编译并链接到 C 代码。C 预处理器预处理 C 语
言预处理指令。C 编译器执行此编译,然后它还调用链接到 C 对象文件的链接编辑器。
GBase 8s ESQL/C 源文件包含 C 预处理器的命令(组成 #directive 的指令)。当您
使用编译的缺省顺序时,这些 C 指令对 GBase 8s ESQL/C 语句没有影响,但是在 C 编
译器处理源文件时以常规方式生效。
如果在 GBase 8s ESQL/C 预处理之前选择在 GBase 8s ESQL/C 源文件上运行 C 预
处理器,可以使用 C 语言 #define 和 typedef 指令定义 GBase 8s ESQL/C 主变量。
C 编译器采取以下操作:
将 C 语言语句编译为对象代码
链接到 GBase 8s ESQL/C 库或您指定的库或其它文件
创建可执行文件
如果使用 C 编译器而不是通过将 GBASEDBTC 环境变量设置为非缺省值的本地 C

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 44 -

编译器,那么您可能需要覆盖此编译器的缺省选项。
缺省编译顺序
在您创建了 GBase 8s ESQL/C 程序文件之后,可以对此文件运行 esql 命令。缺省情
况下,GBase 8s ESQL/C 预处理器首先运行,并将程序中的嵌入式 SQL 语句转换为与数
据库服务器通信的 GBase 8s ESQL/C 函数调用。GBase 8s ESQL/C 预处理器生成一个 C
源文件并调用 C 编译器。然后 C 编译器预处理并编译您的源文件并链接到其它 C 源文
件、对象文件或与其它 C 程序相同的库文件。如果 esql 在这些步骤中没有遇到错误,那
么它会生成一个可执行文件。
可以像任何 C 程序一样运行编译的 GBase 8s ESQL/C 程序。
当程序运行时,它调用 GBase 8s ESQL/C 库程序;库程序域数据库服务器建立通信,以执
行 SQL 操作。
下图说明了 GBase 8s ESQL/C 程序成为可执行程序的过程。
图: GBase 8s ESQL/C 和 C 之间的关系


重要: 请记住,使用缺省的编译顺序,在调用 C 编译器之前,esql 处理 GBase 8s
ESQL/C 预处理器指令。
因此,
GBase 8s ESQL/C 指令在 C 编译器执行任何预处理之前生
效。不能在 C 预处理器指令中访问 GBase 8s ESQL/C 定义,也不能使用 C 预处理器执
行 GBase 8s ESQL/C 语句的条件编译。
先运行 C 预处理程序
使用 GBase 8s ESQL/C,您可以在编译 GBase 8s ESQL/C 程序时更改处理的缺省顺
序。GBase 8s ESQL/C 允许您首先在 GBase 8s ESQL/C 源文件上运行 C 预处理器,然后
将该文件传递到 GBase 8s ESQL/C 预处理器。此功能使您的 GBase 8s ESQL/C 程序访问
由 C 预处理程序指令提供的变量。

UDT field length was not set in UDTMetaData
应用程序通过调用 UDTMetaData.setFieldType() 指定了一个字符型、日期时间型或 interval
类型的字段,但是指定字段长度时失败。调用UDTMetaData.setFieldLength() 来设置字段长
度。

io_priority
参数说明:IO 利用率高达50%时,重消耗IO 作业进行IO 资源管控时关联的优先级等
级。
该参数属于USERSET 类型参数,请参考表GUC 参数设置方式中对应类型的设置的方
法进行设置。
取值范围:枚举型

None:表示不受控。

Low:表示限制iops 为该作业原始触发数值的10%。

Medium:表示限制iops 为该作业原始触发数值的20%。

High:表示限制iops 为该作业原始触发数值的50%。
默认值:None