返回首页

gbase数据、南大通用产品文档:GBase8sGBASEDBTSERVER 环境变量

更新日期:2024年09月11日

GBASEDBTSERVER 环境变量指定 SQL API 客户机、DB-Access 实用程序或其他 GBase
8s 产品与之建立显式或隐式连接的缺省数据库服务器。
必须先设置此环境变量,才能使用 GBase 8s 客户机产品。它具有以下语法。

dbservername 是缺省数据库服务器的名称。
GBASEDBTSERVER 的值可以是本地或远程服务器,但必须对应于运行该应用程序
的计算机上的 $GBASEDBTDIR/etc/sqlhosts 文件中的有效 dbservername 条目。
dbservername 必须以小写字母开头,且不能超过 128 字节。它可以包括任何可打印字
符,但大写字符、字段定界符(空格或制表符)、换行字符和连字符(或减号)除外。
例如:以下命令指定 coral 数据库服务器作为缺省值:
setenv GBASEDBTSERVER coral
GBASEDBTSERVER 指定执行 CONNECT DEFAULT 时应用程序连接的数据库服务器。它还
定义在应用程序中的第一条语句不是 CONNECT 语句的情况下,应用程序与之建立初始隐
式连接的数据库服务器。

GBase 8s SQL 指南:参考
南大通用数据技术股份有限公司 - 184 -
要点: 必须设置 GBASEDBTSERVER,即使该应用程序或 DB-Access 不使用隐式或显
式缺省连接。


format_type(type_oid, typemod)
描述:获取数据类型的SQL 名称。
返回类型:text
备注:format_type 通过某个数据类型的类型OID 以及可能的类型修饰词,返回其SQL
名称。如果不知道具体的修饰词,则在类型修饰词的位置传入NULL。类型修饰词一般只对
有长度限制的数据类型有意义。format_type 所返回的SQL 名称中包含数据类型的长度值,
其大小是:实际存储长度len - sizeof(int32),单位字节。原因是数据存储时需要32 位的空间
来存储用户对数据类型的自定义长度信息,即实际存储长度要比用户定义长度多4 个字节。
在下例中,format_type 返回的SQL 名称为“character varying(6)”,6 表示varchar 类型的长度
值是6 字节,因此该类型的实际存储长度为10 字节。
gbase=# SELECT format_type((SELECT oid FROM pg_type WHERE typname='varchar'),
10);
format_type
----------------------
character varying(6)
(1 row)

getdistributekey(table_name)
描述:获取一个hash 表的分布列。单机环境下不支持分布,该函数返回为空。

pg_check_authid(role_oid)

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
415
描述:检查是否存在给定oid 的角色名。
返回类型:bool
示例:
gbase=# select pg_check_authid(1);
pg_check_authid
-----------------
f
(1 row)

pg_describe_object(catalog_id, object_id, object_sub_id)
描述:获取数据库对象的描述。
返回类型:text
备注:pg_describe_object 返回由目录OID,对象OID 和一个(或许0 个)子对象ID 指
定的数据库对象的描述。这有助于确认存储在pg_depend 系统表中对象的身份。

pg_get_constraintdef(constraint_oid)
描述:获取约束的定义。
返回类型:text

pg_get_constraintdef(constraint_oid, pretty_bool)
描述:获取约束的定义。
返回类型:text
备注:
pg_get_constraintdef 和pg_get_indexdef 分别从约束或索引上使用创建命令进行重
构。

pg_get_expr(pg_node_tree, relation_oid)
描述:反编译表达式的内部形式,假设其中的任何Vars 都引用第二个参数指定的关系。
返回类型:text

pg_get_expr(pg_node_tree, relation_oid, pretty_bool)

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
416
描述:反编译表达式的内部形式,假设其中的任何Vars 都引用第二个参数指定的关系。
返回类型:text
备注:pg_get_expr 反编译一个独立表达式的内部形式,比如一个字段的缺省值。在检
查系统表的内容的时候很有用。如果表达式可能包含关键字,则指定他们引用相关的OID
作为第二个参数;如果没有关键字,零就足够了。

pg_get_functiondef(func_oid)
描述:获取函数的定义。
返回类型:text
示例:
gbase=# select * from pg_get_functiondef(598);
headerlines |
definition
-------------+----------------------------------------------------
4 | CREATE OR REPLACE FUNCTION pg_catalog.abbrev(inet)+
|
RETURNS text
+
|
LANGUAGE internal
+
|
IMMUTABLE STRICT NOT FENCED NOT SHIPPABLE
+
| AS $function$inet_abbrev$function$;
+
|
(1 row)

pg_get_function_arguments(func_oid)
描述:获取函数定义的参数列表(带默认值)

返回类型:text
备注:
pg_get_function_arguments返回一个函数的参数列表,
需要在CREATE FUNCTION
中使用这种格式。

pg_get_function_identity_arguments(func_oid)
描述:获取参数列表来确定一个函数(不带默认值)

返回类型:text

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
417
备注:
pg_get_function_identity_arguments 返回需要的参数列表用来标识函数,
这种形式
需要在ALTER FUNCTION 中使用,并且这种形式省略了默认值。

pg_get_function_result(func_oid)
描述:获取函数的RETURNS 子句。
返回类型:text
备注:pg_get_function_result 为函数返回适当的RETURNS 子句。

pg_get_indexdef(index_oid)
描述:获取索引的CREATE INDEX 命令。
返回类型:text
示例:
gbase=# select * from pg_get_indexdef(16416);
pg_get_indexdef
-------------------------------------------------------------------------
CREATE INDEX test3_b_idx ON test3 USING btree (b) TABLESPACE pg_default
(1 row)

pg_get_indexdef(index_oid, dump_schema_only)
描述:获取索引的CREATE INDEX 命令,仅用于dump 场景。对于包含local 索引的间
隔分区表,当dump_schema_only 为true 时,返回的创建索引语句中不包含自动创建的分区
的local 索引信息;当dump_schema_only 为false 时,返回的创建索引语句中包含自动创建
的分区的local 索引信息。对于非间隔分区表或者不包含local 索引的间隔分区分区表,
dump_schema_only 参数取值不影响函数返回结果。
返回类型:text
示例:
gbase=# CREATE TABLE sales
gbase-# (prod_id NUMBER(6),
gbase(#
cust_id NUMBER,
gbase(#
time_id DATE,

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
418
gbase (#
channel_id CHAR(1),
gbase (#
promo_id NUMBER(6),
gbase (#
quantity_sold NUMBER(3),
gbase (#
amount_sold NUMBER(10,2)
gbase (# )
gbase-# PARTITION BY RANGE( time_id) INTERVAL('1 day')
gbase -# (
gbase (# partition p1 VALUES LESS THAN ('2019-02-01 00:00:00'),
gbase (# partition p2 VALUES LESS THAN ('2019-02-02 00:00:00')
gbase (# );
CREATE TABLE
gbase=# create index index_sales on sales(prod_id) local (PARTITION
idx_p1 ,PARTITION idx_p2);
CREATE INDEX
-- 插入数据没有匹配的分区,新创建一个分区,并将数据插入该分区
gbase=# INSERT INTO sales VALUES(1, 12, '2019-02-05 00:00:00', 'a', 1, 1, 1);
INSERT 0 1
gbase=# select oid from pg_class where relname = 'index_sales';
oid
-------
16636
(1 row)
gbase=# select * from pg_get_indexdef(16636, true);
pg_get_indexdef
-----------------------------------------------------------------------------
-------------------------------------------------------------------------
CREATE INDEX index_sales ON sales USING ubtree (prod_id) LOCAL(PARTITION idx_p1,
PARTITION idx_p2)
WITH (storage_type=USTORE) TABLESPACE pg_default
(1 row)
gbase=# select * from pg_get_indexdef(16636, false);
pg_get_indexdef
------------------------------------------------------------------
------------------------------------------------------------------
------------------------------------------------
CREATE INDEX index_sales ON sales USING ubtree (prod_id) LOCAL(PA
RTITION idx_p1, PARTITION idx_p2, PARTITION sys_p1_prod_id_idx)
W
ITH (storage_type=USTORE) TABLESPACE pg_default
(1 row)

pg_get_indexdef(index_oid, column_no, pretty_bool)

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
419
描述:获取索引的CREATE INDEX 命令,或者如果column_no 不为零,则只获取一个
索引字段的定义。
示例:
gbase=# select * from pg_get_indexdef(16416, 0, false);
pg_get_indexdef
-------------------------------------------------------------------------
CREATE INDEX test3_b_idx ON test3 USING btree (b) TABLESPACE pg_default
(1 row)
gbase=# select * from pg_get_indexdef(16416, 1, false);
pg_get_indexdef
-----------------
b
(1 row)
返回类型:text
备注:
pg_get_functiondef 为函数返回一个完整的CREATE OR REPLACE FUNCTION 语
句。

pg_get_keywords()
描述:获取SQL 关键字和类别列表。
返回类型:setof record
备注:
pg_get_keywords 返回一组关于描述服务器识别SQL 关键字的记录。
word 列包含
关键字。catcode 列包含一个分类代码:U 表示通用的,C 表示列名,T 表示类型或函数名,
或R 表示保留。catdesc 列包含了一个可能本地化描述分类的字符串。

pg_get_userbyid(role_oid)
描述:获取给定OID 的角色名。
返回类型:name
备注:pg_get_userbyid 通过角色的OID 抽取对应的用户名。

pg_check_authid(role_id)

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
420
描述:通过role_id 检查用户是否存在。
返回类型:text
示例:
gbase=# select pg_check_authid(20);
pg_check_authid
-----------------
f
(1 row)

pg_get_viewdef(view_name)
描述:为视图获取底层的SELECT 命令。
返回类型:text

pg_get_viewdef(view_name, pretty_bool)
描述:为视图获取底层的SELECT 命令,如果pretty_bool 为true,行字段可以包含80
列。
返回类型:text
备注:
pg_get_viewdef 重构出定义视图的SELECT 查询。
这些函数大多数都有两种形式,
其中带有pretty_bool 参数,且参数为true 时,是”适合打印”的结果,这种格式更容易读。另
一种是缺省的格式,更有可能被将来的不同版本用同样的方法解释。
如果是用于转储,
那么
尽可能避免使用适合打印的格式。给pretty-print 参数传递false 生成的结果和没有这个参数
的变种生成的结果是完全一样。

pg_get_viewdef(view_oid)
描述:为视图获取底层的SELECT 命令。
返回类型:text

pg_get_viewdef(view_oid, pretty_bool)
描述:为视图获取底层的SELECT 命令,如果pretty_bool 为true,行字段可以包含80
列。

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
421
返回类型:text

pg_get_viewdef(view_oid, wrap_column_int)
描述:为视图获取底层的SELECT 命令;行字段被换到指定的列数,打印是隐含的。
返回类型:text

pg_get_tabledef(table_oid)
描述:根据table_oid 获取表定义
示例:
gbase=# select * from pg_get_tabledef(16384);
pg_get_tabledef
-------------------------------------------------------
SET search_path = public;
+
CREATE
TABLE t1 (
+
c1 bigint DEFAULT nextval('serial'::regclass)+
)
+
WITH (orientation=row, compression=no)
+
TO GROUP group1;
(1 row)
返回类型:text

pg_get_tabledef(table_name)
描述:根据table_name 获取表定义。
示例:
gbase=# select * from pg_get_tabledef('classes');
pg_get_tabledef
--------------------------------------------------------------
SET search_path = public;
+
CREATE TABLE classes (
+
name character varying,
+
score bigint
+
)
+
WITH (orientation=row, compression=no, storage_type=USTORE);
(1 row)

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
422
返回类型:text
备注:pg_get_tabledef 重构出表定义的CREATE 语句,包含了表定义本身、索引信息、
comments 信息。对于表对象依赖的group、schema、tablespace、server 等信息,需要用户自
己去创建,表定义里不会有这些对象的创建语句。

pg_options_to_table(reloptions)
描述:获取存储选项名称/值对的集合。
返回类型:setof record
备注:pg_options_to_table 当通过pg_class.reloptions 或pg_attribute.attoptions 时返回存
储选项名称/值对(option_name/option_value)的集合。

pg_tablespace_databases(tablespace_oid)
描述:获取在指定的表空间中有对象的数据库OID 集合。
返回类型:setof oid
备注:pg_tablespace_databases 允许检查表空间的状况,返回在该表空间中保存了对象
的数据库OID 集合。如果这个函数返回数据行,则该表空间就是非空的,因此不能删除。
要显示该表空间中的特定对象,用户需要连接pg_tablespace_databases 标识的数据库与查询
pg_class 系统表。

pg_tablespace_location(tablespace_oid)
描述:获取表空间所在的文件系统的路径。
返回类型:text

pg_typeof(any)
描述:获取任何值的数据类型。
返回类型:regtype
备注:pg_typeof 返回传递给他的值的数据类型OID。这可能有助于故障排除或动态构
造SQL 查询。声明此函数返回regtype,这是一个OID 别名类型(请参考对象标识符类型)


GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
423
这意味着它是一个为了比较而显示类型名称的OID。
示例:
gbase=# SELECT pg_typeof(33);
pg_typeof
-----------
integer
(1 row)
gbase=# SELECT typlen FROM pg_type WHERE oid = pg_typeof(33);
typlen
--------
4
(1 row)

collation for (any)
描述:获取参数的排序。
返回类型:text
备注:表达式collation for 返回传递给他的值的排序。
示例:
gbase=# SELECT collation for (description) FROM pg_description LIMIT 1;
pg_collation_for
------------------
"default"
(1 row)
值可能是引号括起来的并且模式限制的。如果没有为参数表达式排序,则返回一个null
值。如果参数不是排序的类型,则抛出一个错误。

pg_extension_update_paths(name)
描述:返回指定扩展的版本更新路径。
返回类型:text(source text), text(path text), text(target text)

pg_get_serial_sequence(tablename, colname)

GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
424
描述:获取对应表名和列名上的序列。
返回类型:text
示例:
gbase=# select * from pg_get_serial_sequence('t1', 'c1');
pg_get_serial_sequence
------------------------
public.serial
(1 row)

pg_sequence_parameters(sequence_oid)
描述:获取指定sequence 的参数,包含起始值,最小值和最大值,递增值等。
返回类型:int16, int16,int16, bigint, Boolean
示例:
gbase=# select * from pg_sequence_parameters(16420);
start_value | minimum_value |
maximum_value
| increment | cycle_option
-------------+---------------+---------------------+-----------+-------------
101 |
1 | 9223372036854775807 |
1 | f
(1 row)

命名可执行文件
可以使用 -o 选项显式指定可执行文件的名称。
例如, 下面的 esql 命令生成名为 inpt 的可执行文件:

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 64 -
esql -o inpt custinpt.ec ordinpt.ec
如果 esql 在 Windows™ 操作系统上运行,目标文件的名称缺省为 esql 命令行上第
一个 GBase 8s ESQL/C 源文件的名称。
该扩展名根据生成的目标类型更改为 .exe 或 .dll。

如果 esql 在 UNIX™ 操作系统上运行,目标文件的名称缺省为您的编译器缺省的文
件,通常为 a.out。
设置已创建的可执行文件的类型(Windows(TM))
esql 命令可用于编译常规可执行文件和动态链接库(DLL)。使用 -target: 选项告
诉 esql 想要输出的类型。-target: 选项仅告诉 esql 如何编译您的应用程序。如果编译为
DLL,那么源代码必须以 DLL 编写,否则编译失败。
将选项传递给 C 编译器
esql 命令处理器将任何命令行中未识别的参数传递给 C 编译器。
例如,因为 esql 不将 /Zi 视为选项,下面的 esql 命令将 /Zi 选项传递给 C 编译
器:
esql /Zi demo1.ec
如果您想要给 C 编译器传递与 GBase 8s ESQL/C 处理器选项相同的选项,
在它们前
面放置 -cc 选项。esql 命令忽略 -cc 和下一次出现以下参数之间的选项:
-l (仅限于 Windows™ )
-r (仅限于 Windows )
-f(仅限于 Windows )
GBase 8s ESQL/C 源文件。
指定特定的 C 编译器(Windows(TM))
Windows™ 环境中的 ESQL/C 支持以下 C 编译器:
Microsoft™ Visual C++,Version 2.x 或之后的版本
Borland C++,Version 5
Microsoft C 编译器或 Borland C 编译器必须在您可以编译 GBase 8s ESQL/C 程序
时已在计算机上安装。缺省的为 C 编译器选项 -mc,它启动 Microsoft 编译器。要选择
Borland 编译器,使用 -bc 。
编译而无需链接
缺省情况下,
GBase 8s ESQL/C 命令处理器预处理、
编译和链接 GBase 8s ESQL/C 程
序并创建可执行文件或 DLL 。要抑制 GBase 8s ESQL/C 程序链接,指定 -c 选项。使用
此选项,
esql 仅预处理和编译代码。
该命令的输出是 C 对象文件
(.obj 扩展名)
对于C 源
文件(.c)或 GBase 8s ESQL/C 源文件(.ec)。
例如:要预处理和编译 GBase 8s ESQL/C 源文件 demo1.ec,使用下面的命令:
esql -c demo1.ec

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 65 -
上面的命令生成名为 demo1.obj 的 C 对象文件。
下面的 esql 命令预处理 demo1.ec,
检查 X/Open 标准语法的 GBase 8s 扩展,并抑制警告消息:
esql -c -xopen -nowarn demo1.ec
重要: 如果指定冲突的选项 -c 和 -o,预处理器忽略 -o 选项处理 -c 选项。预处
理器在错误消息中报告此冲突。
特定于Windows(TM) 环境的编译选项
如果在 Windows™ 环境中运行 GBase 8s ESQL/C,则可以指定下列附加选项。
指定项目文件的名称
-f 选项使您在 esql 命令行中指定项目文件的名称。
-f 后面的 filename 是包含要编译的 GBase 8s ESQL/C 源文件(.ec)的名称。
例如,假设项目文件 project.txt 包含下列行:
first.ec
second.ec
third.ec
在此示例中 first.ec 、
second.ec 和 third.ec 表示您要编译的GBase 8s ESQL/C 源文件
的名称。
下面的 esql 命令使用 project.txt 项目文件指定要编译和链接的三个源文件:
esql -f project.txt
前面的 esql 命令等价于下面的 esql 命令:
esql first.ec second.ec third.ec
可以使用响应文件完成相同的任务。
创建响应文件
可以在响应文件中为 GBase 8s ESQL/C 命令处理器指定命令行参数,
并指定 GBase
8s ESQL/C 处理器的文件名。
GBase 8s ESQL/C 响应文件是具有 GBase 8s ESQL/C 命令行选项好文件名的文本文
件,以空格分隔、新行、回车符、换行符或这些字符组成。
下面的示例显示了指定名为 resp.esq 的响应文件的语法:
esql @resp.esq
响应文件 resp.esq 可能包含以下行:
-we
first.ec
second.ec
third.ec
-r foo.rc
该响应文件的用途等价于下面的 esql 命令:
esql -we -f project.txt -r foo.rc

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 66 -
在此示例中 project.txt 是一个项目文件,
它包含文件名 first.ec 、
second.ec 和 third.ec。

您可能出于以下原因使用响应文件:
命令行限制为 1,024 个字符。如果 esql 选项超出此长度,则必须使用响应文件。
如果经常使用一组或多组 esql 选项,那么可以通过将每个集合放在不同的响应文件
中来避免大量打字。您可以 esql 命令中列出相应的响应文件,而不是键入选项。
在 Windows(TM) 环境中 esql 预处理器调用的隐式选项
GBase 8s ESQL/C 命令处理器将编译器和链接器标志隐含地传递给支持的 C 编译器。
下表列出了使用指定的 esql 选项时,
esql 选项传递的隐式选项。
如果您选择创建自己的构
建文件,请根据应用程序使用指示的标志。
重要: esql 命令不会将任何选项隐式传递给资源编译器。
表 1. 隐式传递编译器选项
第一列显示了应用于右边列的编译器。编译器为版本 2.x 及之后版本的 Microsoft™
Visual C++ 或 Borland C++, Version 5。接下来的两列显示了模块类型和 esql 选项。第四
列和第五列显示了隐式选项:编译器和链接器。

译器

块类

esql
选项
隐式选项
编译器
链接器
Mic
rosoft
Visual
C++,
Version
2.x or
later

执行
文件
-targ
et:exe
-we
-c
-I%GBASEDBTDIR%\incl\esql/D_systype
/D_proctype/threadtype/DWIN32
-DEF:deffile
-OUT:target -MAP

-SUBSYSTEM:systy
pe

%GBASEDBT
DIR%\lib\isqlt09a.lib

%GBASEDBT
DIR%\lib\igl4g303.lib

%GBASEDBT
DIR%\lib\iglxg303.lib

%GBASEDBT
DIR%\lib\igo4g303.li
b

libset
d
ll
-targ
et:dll
-c
-I%GBASEDBTDIR%\incl\esql/D_systype
-DLL
-DEF:deffile

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 67 -
-wd
/D_proctype/threadtype/DWIN32
-OUT:target -MAP

-SUBSYSTEM:syst
ype

%GBASEDB
TDIR%\lib\isqlt09a.li
b

%GBASEDB
TDIR%\lib\igl4g303.l
ib

%GBASEDB
TDIR%\lib\iglxg303.li
b

%GBASEDB
TDIR%\lib\igo4g303.
lib

libset
Bor
land
C++,
Version 5

执行
文件
-targ
et:exe
-we
-c -I%GBASEDBTDIR%\
incl\esql-etarget-subtype-libtlog-libtlg
-c -Tpe -M

-DEF:deffile-subsy
stem

%GBASE
DBTDIR%\lib\igl4b3
03.lib

%GBASE
DBTDIR%\lib\iglxb3
03.lib

%GBASE
DBTDIR%\lib\igo4b3
03.lib

c0t32.obj

libset
d
ll
-targ
et:dll
-wd
-c
-I%GBASEDBTDIR%\incl\esql-etarget-s
ubtype-libtlog-libtlg
-c -Tpd -M

-DEF:deffile-subsy
stem


GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 68 -
%GBAS
EDBTDIR%\lib\igl4b
303.lib

%GBAS
EDBTDIR%\lib\iglxb
303.lib

%GBAS
EDBTDIR%\lib\igo4
b303.lib

c0d32.obj

libset
编译器和链接器中斜体字表示以下定义。
deffile
.def 文件的名称(只要您在命令行指定 .def 选项就执行 -DEF 选项)
libset
库设置(取决于应用程序是 WINDOWS 或 CONSOLE)
libtlg
-D_RTLDLL 表示动态链接库或者 " " 表示共享库
libtlog
-WM 表示多线程库或 " " 表示单线程库
proctype
处理器(X86)的类型
subsystem
ap 表示控制台子系统或 aa 表示 Windows™ 子系统
subtype
可执行控制台的 WC 、Windows 可执行文件的 W、控制台 DLL 的 WCD 、或
Windows DLL 的 WD
systype
子系统的类型(WINDOWS 或 CONSOLE)
t
X 为控制台子系统或 W 为 Windows 子系统
target

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 69 -
可执行文件的名称(第一个 .ec 文件的名称或由 -o 命令行选项指定的名称)
threadtype
线程选项的类型(ML 、MT 、MD 取决于 -runtime 命令行选项的值)
链接器使用的库设置取决于是创建 Windows 还是控制台应用程序。下表列出了 esql
选项使用的库集。
表 2. 链接器使用的库集
第一列显示应用于右边列的编译器。编译器是版本为 2 或更高版本的 Microsoft
Visual C++ 、或版本 5 的 Borland C++。接下来的两列显示了 esql 的信息和链接器使用
的库集。
编译器
esql 的选项
链接器使用的库集
Microsoft Visual
C++, Version 2.x or later
-subsystem:windows
-Sw
-ss:w
advapi32.lib
wsock32.lib
user32.lib
winmm.lib
gdi32.lib
comdlg32.lib
winspool.lib
-subsystem:console
-Sc
-ss:c
netapi32.lib
wsock32.lib
user32.lib
winmm.lib
Borland C++,
Version 5
-subsystem:windows
-Sw
-ss:w
cw32mti.lib
import32.lib
-subsystem:console
-Sc
-ss:c
cw32mti.lib
import32.lib

链接选项
C 编译器链接执行 编译的链接阶段。
一般链接选项

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 70 -
下列链接选项对 UNIX™ 和 Windows™ 环境都有影响:
链接其它 C 源和对象文件
指定 GBase 8s 通用库的版本
链接其它 C 源和对象文件
可以在 esql 命令行上列出以下类型的文件,以指示您希望链接编辑器链接到生成的
对象文件:
C 源文件的格式为 otherCsrc.c
如果列出具有 .c 扩展名的文件,则 esql 通过 C 编译器传递它们,该编译器将它们
编译到对象文件(.o 扩展)并链接这些对象文件。
C 对象文件的格式是 otherCobj.o ( UNIX™ 操作系统上)或 otherCobj.obj
( Windows™ 环境中)
如果列出具有 .o 或 .obj 扩展名的文件,则 esql 通过 C 编译器传递它们,该编译
器链接这些文件。该链接编辑器将 C 对象文件与适当的 GBase 8s ESQL/C 库函数链接。
库文件,您自己的库文件或与链接器兼容的系统库
模块定义(.def)
资源文件,已编译(.res)或未编译(.rc)
提示: 如果指定未编译的资源文件,则 esql 将它们传递给资源编译器并将生成
的 .res 文件链接到 GBase 8s ESQL/C 应用程序。
GBase 8s ESQL/C 命令预处理器直接将这些文件传递给链接器。它还链接需要的库支
持 GBase 8s ESQL/C 函数库。可以使用 -libs 选项确定 esql 自动链接的库,如下所示:
esql -libs
指定 ESQL/C 通用库的版本
缺省情况下,
esql 命令链接 GBase 8s 通用库的共享库:
libgen 、
libos 、
libgls 、
libafs
和 libsql。要使用共享库,您的计算机必须支持共享内存。
可以使用以下命令行选项更改预处理器链接到您的程序的 GBase 8s 通用库的版本:
-thread 选项告诉预处理器链接 GBase 8s 共享库的线程安全版本。
-static 选项告诉预处理器在 UNIX™ 环境中链接 GBase 8s 通用库的静态库。
如果使
用 -static 选项,则不能设置 IFX_LONGID 环境变量。您必须使用 libos.a 重新编译、
可以组合这些选项来告诉预处理器在 GBase 8s 静态库的线程安全版本中进行链接。
特定于 Windows(TM) 的链接选项
下节介绍了只能在 Windows™ 环境中使用的链接选项。
传递参数给链接器

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 71 -
在 esql 命令行中,可以通过使用 -l 处理选项先列出链接器参数。

esql 命令处理器将 -l 选项之后的所有参数传递给链接器,最多可以先到达以下任一
项:
-r 选项指定资源编译器选项
命令行的结尾
向资源编译器传递参数
在 esql 命令行中,可以通过使用 -r 处理选项先列出资源编译器参数。
GBase 8s ESQL/C 命令处理器将 -r 选项之后的所有参数直到命令行的结尾传递给链
接器。
然后处理器运行资源编译器创建 .res 文件,
然后将它传递给链接器。
如果指定 -r 选
项但是不指定其关联 resfile.rc,则 esql 使用目标名称并附加 .rc 扩展名。
ESQL/C 动态链接库
对于 Windows™ 环境,GBase 8s ESQL/C 产品包括以下动态链接库(DLL):
ESQL 客户端接口 DLL(isqlt09a.dll)包含 GBase 8s ESQL/C 库函数,GBase 8s
ESQL/C 预处理器需要在运行时转换嵌入式 SQL 语句和其它内部函数。
esqlauth.dll DLL 通过客户端应用程序发送到数据库服务器的连接信息的运行时验证。
当您的应用程序请求连接是,
GBase 8s ESQL/C 调用 sqlauth() 函数
(由 esqlauth.dll 定义)


注册表 DLL iregt07b.dll 由 Setnet32 实用程序和 GBase 8s Connect 库用于设置和访
问注册表中的配置信息。
igl4b304.dll 、igo4g303.dll 和 iglxg303.dll DLL 是全球语言支持(GLS)所必需的。
GBase 8s DLL 位于 %GBASEDBTDIR%\bin 目录中。%GBASEDBTDIR% 是环境变
量 GBASEDBTDIR 的值。
相同运行例程的版本独立性
如果您的应用程序是使用早于 4.x 的 Microsoft™ Visual C++ 版本编译的,则必须将
C Runtime 库导出到 ESQL 客户端接口 DLL(isqlt09a.dll)。ESQL 客户端接口 DLL 使
用您运行例程确保您的应用程序的所有部分都使用相同的运行版本进行编译。链接到您应
用程序并调用 GBase 8s ESQL/C 库例程或 SQL 语句的任何应用程序也必须使用 C
Runtime 库。
要导出 C Runtime 库,请在首次调用 GBase 8s ESQL/C 库例程或 SQL 语句前,在
代码中包含以下语句:
#include "infxcexp.c";
infxcexp.c 文件包含用于导出 ESQL 客户端接口 DLL 使用的所有 C Runtime 例程
代码的地址的 C 代码。该文件在 %GBASEDBTDIR%\incl\esql 目录下,esql 命令处理器
在编译时自动搜索。如果您不使用 esql 命令,请在编译之前

GBase 8s ESQL/C 编程指南
南大通用数据技术股份有限公司
- 72 -
将 %GBASEDBTDIR%\incl\esql 目录添加到编译器搜索路径。
在程序中的第一个 GBase 8s ESQL/C 库调用或 SQL 语句之前,必须在 main() 例程
(每个进程一次)中包含一次 infxcexp.c 文件。此文件中的代码将您的 runtime 库导出到
ESQL runtime DLL(isqlt09a.dll),以便它们使用相同的 C runtime 代码。导出 runtime 例
程使 ESQL runtime 例程分配内存(malloc()),将指针返回给 C 程序,并让程序是否内

(free())

它还使 C 程序能够打开文件并将句柄
(或文件指针)
传递到 ESQL runtime 例
程以进行读/写访问。