第四章 使用 SQL 网关访问数据库 - 使用链接表时的限制
使用链接表时的限制
与往常一样,了解要连接的数据库的特定限制(语法或其他)和要求非常重要。以下是一些示例:
- 与
ODBC
不同,JDBC
连接不支持异构INSERT...SELECT
语句(涉及本地表和链接表,或两个链接表)。 - 与
JDBC
不同,ODBC
连接不填充%ROWID
属性。 Informix
:无法在SQL
内部创建基于链接的Informix
表的视图,因为生成的SQL
在Informix
中无效。Sybase
:作为查询处理的一部分SQL
可以将外连接的表达式转换为等效的规范化形式。可能需要SQL92
标准CROSS JOIN
语法将此形式重建为SQL
,以便访问链接表。由于Sybase
不支持SQL92
标准CROSS JOIN
,因此某些在链接的Sybase
表上使用外连接的查询将无法执行。Oracle
:必须围绕Oracle
来源表中使用的任何COUNT
聚合执行CAST
。MySQL
:使用INOUT
和OUT
访问存储过程时,绑定参数未正确更新。相反,该值会在结果集中返回。
在尝试使用链接表之前,可能需要检查为其生成的缓存查询,以确保语法对于正在使用的数据库有效。要查看给定链接表的缓存查询:
- 在管理门户中,转到“系统资源管理器”、“
SQL
”。 - 单击感兴趣的命名空间。
- 从下拉列表中选择架构。
- 单击包含该表的包的缓存查询。系统显示该包的缓存查询表。查询列显示完整的查询。
- (可选)单击查询链接以查看更多详细信息。
链接过程向导:链接到存储过程
管理门户提供了一个向导,可以使用该向导链接到在外部 ODBC
或 JDBC
兼容数据库中定义的存储过程。当链接到该过程时,系统会生成一个方法和一个包含该方法的类。当链接到存储过程时,将创建一个类方法来执行与存储过程相同的操作。该方法用 SqlProc
关键字标记。类方法是在新类中生成的,可以指定类和包名称等信息。此方法不能接受可变数量的参数。允许使用默认参数,但存储过程的签名是固定的。
注意:关闭链接过程连接 根据设计,链接过程向导生成的代码不会关闭它打开的连接。这样可以避免共享同一连接的 SQL 语句之间发生冲突等问题。有关详细信息,请参阅“控制 SQL 网关连接”。
- 如果尚未创建与外部数据库的连接,请在开始之前执行此操作(请参阅“为外部源创建
SQL
网关连接”)。 - 从管理门户中选择“系统资源管理器”,然后选择“
SQL
”。使用页面顶部的Switch
选项选择一个命名空间;这将显示可用命名空间的列表。
在页面顶部,单击“向导”下拉列表,然后选择“链接过程”。 - 在向导的第一页上,选择一个或多个过程,如下所示:
- 选择目标命名空间 — 选择数据将复制到命名空间。
- 模式过滤器 — 指定包含过程的模式(类包)名称。可以指定带有通配符的名称以返回多个架构,或指定
%
以返回所有架构。例如,C%
将返回命名空间中以字母C
开头的所有模式。建议使用此过滤器,因为它将缩短可供选择的模式的返回列表,从而提高加载速度。 - 过程过滤器 — 指定要链接到的过程。可以指定带有通配符的名称以返回多个过程,或指定
%
以返回所有过程。可以选择多个过程。在这种情况下,当单击“下一步”时,下一个屏幕会提示输入包名称。指定包含类的包的名称,然后单击“完成”。 - 选择
SQL
网关连接 — 选择要使用的 SQL 网关连接。
- 点击下一步。
- 在第二页上,指定生成的类的详细信息:
- 新包名称 - 指定包含一个或多个类的包的名称。
- 新类名称 - 指定要生成的类的名称。
- 新过程名称——指定过程的名称;具体来说,它控制方法的
SqlName
关键字。 - 新方法名称 - 指定要生成的方法的名称。
- 描述方法名称——可选地提供方法的描述;这用作类定义的注释,显示在类引用中。
- 单击“完成”。该向导显示“后台作业”页面,其中包含指向后台任务页面的链接。
- 单击“关闭”。或者单击给定的链接查看后台任务页面。无论哪种情况,向导都会启动后台任务来完成工作。
- 该向导将新的类定义存储在数据库中并对其进行编译。
注意:此向导使用控制的类名和类成员名生成 ObjectScript
代码。使用此向导时,请务必遵循 ObjectScript
标识符的规则,包括长度限制(请参阅定义和使用类中的命名约定部分)。
控制 SQL 网关连接
在某些情况下,可能需要管理由链接外部表或存储过程的代码创建的连接(请参阅“链接表向导”和“链接过程向导”)。 SQL
网关连接可以类中的 %SYSTEM.SQLGateway
进行管理,该选项卡提供如下方法:
DropAll()
— 删除所有打开的连接并卸载SQL Gateway
库。DropConnection()
— 断开指定的JDBC
或ODBC
连接。TestConnection()
— 测试先前定义的SQL
网关连接(请参阅“为外部源创建SQL
网关连接”)并将诊断输出写入当前设备。- 打开连接和控制事务的各种方法。
可以使用特殊的 $SYSTEM
对象来调用这些方法。例如,以下命令将关闭先前定义的名为“MyConnectionName
”的 SQL
网关连接:
do $system.SQLGateway.DropConnection("MyConnectionName")
SQL
网关连接名称区分大小写。