第四章 使用 SQL 网关访问数据库 - 使用链接表时的限制

使用链接表时的限制

与往常一样,了解要连接的数据库的特定限制(语法或其他)和要求非常重要。以下是一些示例:

  • ODBC 不同,JDBC 连接不支持异构 INSERT...SELECT 语句(涉及本地表和链接表,或两个链接表)。
  • JDBC 不同,ODBC 连接不填充 %ROWID 属性。
  • Informix:无法在 SQL 内部创建基于链接的 Informix 表的视图,因为生成的 SQLInformix 中无效。
  • Sybase:作为查询处理的一部分SQL 可以将外连接的表达式转换为等效的规范化形式。可能需要 SQL92 标准 CROSS JOIN 语法将此形式重建为 SQL,以便访问链接表。由于 Sybase 不支持 SQL92 标准 CROSS JOIN,因此某些在链接的 Sybase 表上使用外连接的查询将无法执行。
  • Oracle:必须围绕 Oracle 来源表中使用的任何 COUNT 聚合执行 CAST
  • MySQL:使用 INOUTOUT 访问存储过程时,绑定参数未正确更新。相反,该值会在结果集中返回。

在尝试使用链接表之前,可能需要检查为其生成的缓存查询,以确保语法对于正在使用的数据库有效。要查看给定链接表的缓存查询:

  • 在管理门户中,转到“系统资源管理器”、“SQL”。
  • 单击感兴趣的命名空间。
  • 从下拉列表中选择架构。
  • 单击包含该表的包的缓存查询。系统显示该包的缓存查询表。查询列显示完整的查询。
  • (可选)单击查询链接以查看更多详细信息。

链接过程向导:链接到存储过程

管理门户提供了一个向导,可以使用该向导链接到在外部 ODBCJDBC 兼容数据库中定义的存储过程。当链接到该过程时,系统会生成一个方法和一个包含该方法的类。当链接到存储过程时,将创建一个类方法来执行与存储过程相同的操作。该方法用 SqlProc 关键字标记。类方法是在新类中生成的,可以指定类和包名称等信息。此方法不能接受可变数量的参数。允许使用默认参数,但存储过程的签名是固定的。

注意:关闭链接过程连接 根据设计,链接过程向导生成的代码不会关闭它打开的连接。这样可以避免共享同一连接的 SQL 语句之间发生冲突等问题。有关详细信息,请参阅“控制 SQL 网关连接”。

  • 如果尚未创建与外部数据库的连接,请在开始之前执行此操作(请参阅“为外部源创建 SQL 网关连接”)。
  • 从管理门户中选择“系统资源管理器”,然后选择“SQL”。使用页面顶部的 Switch 选项选择一个命名空间;这将显示可用命名空间的列表。
    在页面顶部,单击“向导”下拉列表,然后选择“链接过程”。
  • 在向导的第一页上,选择一个或多个过程,如下所示:
    • 选择目标命名空间 — 选择数据将复制到命名空间。
    • 模式过滤器 — 指定包含过程的模式(类包)名称。可以指定带有通配符的名称以返回多个架构,或指定 % 以返回所有架构。例如,C% 将返回命名空间中以字母 C 开头的所有模式。建议使用此过滤器,因为它将缩短可供选择的模式的返回列表,从而提高加载速度。
    • 过程过滤器 — 指定要链接到的过程。可以指定带有通配符的名称以返回多个过程,或指定 % 以返回所有过程。可以选择多个过程。在这种情况下,当单击“下一步”时,下一个屏幕会提示输入包名称。指定包含类的包的名称,然后单击“完成”。
    • 选择 SQL 网关连接 — 选择要使用的 SQL 网关连接。
  • 点击下一步。
    • 在第二页上,指定生成的类的详细信息:
    • 新包名称 - 指定包含一个或多个类的包的名称。
    • 新类名称 - 指定要生成的类的名称。
    • 新过程名称——指定过程的名称;具体来说,它控制方法的 SqlName 关键字。
    • 新方法名称 - 指定要生成的方法的名称。
    • 描述方法名称——可选地提供方法的描述;这用作类定义的注释,显示在类引用中。
    • 单击“完成”。该向导显示“后台作业”页面,其中包含指向后台任务页面的链接。
    • 单击“关闭”。或者单击给定的链接查看后台任务页面。无论哪种情况,向导都会启动后台任务来完成工作。
  • 该向导将新的类定义存储在数据库中并对其进行编译。

注意:此向导使用控制的类名和类成员名生成 ObjectScript 代码。使用此向导时,请务必遵循 ObjectScript 标识符的规则,包括长度限制(请参阅定义和使用类中的命名约定部分)。

控制 SQL 网关连接

在某些情况下,可能需要管理由链接外部表或存储过程的代码创建的连接(请参阅“链接表向导”和“链接过程向导”)。 SQL 网关连接可以类中的 %SYSTEM.SQLGateway 进行管理,该选项卡提供如下方法:

  • DropAll() — 删除所有打开的连接并卸载 SQL Gateway 库。
  • DropConnection() — 断开指定的 JDBCODBC 连接。
  • TestConnection() — 测试先前定义的 SQL 网关连接(请参阅“为外部源创建 SQL 网关连接”)并将诊断输出写入当前设备。
  • 打开连接和控制事务的各种方法。

可以使用特殊的 $SYSTEM 对象来调用这些方法。例如,以下命令将关闭先前定义的名为“MyConnectionName”的 SQL 网关连接:

   do $system.SQLGateway.DropConnection("MyConnectionName")

SQL 网关连接名称区分大小写。

02-02 11:52