存储过程

可以与 JDBC 数据提供程序配置使用的示例 SQL 和 DB2® 存储过程。

JDBC 数据提供程序可以处理存储过程返回的结果集。字符串或整数输入参数可以传递给存储过程。以下语法运行存储过程:
call[:index] procedureName [argument] ...
其中:
index
可选整数,指定数据提供程序将使用哪个结果集。当存储过程返回多个结果集而您只需要收集其中一个结果集中的值时,此参数很有用。如果不指定 index,将收集并返回每个结果集的数据。
procedureName
JDBC 数据提供程序将运行的存储过程的名称。
argument
存储过程的输入参数。必须使用空格分隔多个自变量。如果自变量包含空格字符,请使用双引号将整个自变量括起来。如果自变量可以解析为整数,那么它将作为整数自变量传递到存储过程。任何括在双引号内的自变量都将作为字符串自变量进行传递。

SQL Server 样本

call sp_helpdb

运行过程 call sp_helpdb,此过程不需要自变量。返回的所有结果集中的数据都将包括在数据提供程序所返回的数据中。

call:2 sp_helpdb master

使用 master 自变量运行过程 sp_helpdb。此自变量是一个字符串输入自变量。只有此存储过程所返回的第二个结果集中的数据,才会包括在数据提供程序所返回的数据中。

如果不指定索引,将收集返回的所有结果集中的数据。必须确保这些情况下返回的数据与您定义的属性兼容。Agent Builder 根据返回的第一个结果集创建属性,任何其他结果集都应该与第一个结果集兼容。

Db2 存储过程

以下是以 SQL 编写的样本 Db2 函数。此函数演示如何返回可以由 Agent Builder JDBC 数据提供程序处理的结果:
-- Run this script as follows:
-- db2 -td# -vf db2sample.sql

-- Procedure to demonstrate how to return a query from
-- a DB2 stored procedure, which can then be used by 
-- an Agent Builder JDBC provider. The stored procedure
-- returns the following columns:
-- Name               Description              Data Type
-- current_timestamp  The current system time  timestamp
-- lock_timeout       The lock timeout         numeric scale 0
-- user               The user for the session String 128 characters long
DROP procedure db2sample#

CREATE PROCEDURE db2sample()
  RESULT SETS 1
  LANGUAGE SQL
BEGIN ATOMIC
  
  -- Define the SQL for the query
  DECLARE c1 CURSOR WITH HOLD WITH RETURN FOR
  SELECT CURRENT TIMESTAMP as current_timestamp, 
CURRENT LOCK TIMEOUT as lock_timeout, CURRENT USER as user
  FROM sysibm.sysdummy1; 

  -- Issue the query and return the data
  OPEN c1;
END#

从 Agent Builder 中,可以使用与针对其他存储过程定义的相同语法来调用此函数。在这种情况下,请将 call db2sample 定义为 JDBC 语句以运行此存储过程。

Oracle 存储过程

Oracle 存储过程不返回结果集。您必须编写返回 Oracle 引用游标的函数。以下是以 PL/SQL 编写的样本 Oracle 函数,此函数演示如何返回可以由 Agent Builder JDBC 数据提供程序处理的结果:
CREATE OR REPLACE FUNCTION ITMTEST
RETURN SYS_REFCURSOR
IS
        v_rc SYS_REFCURSOR;
BEGIN
  OPEN v_rc FOR SELECT * FROM ALL_CLUSTERS;
  RETURN v_rc;
END;

从 Agent Builder 中,可以使用与针对其他存储过程定义的相同语法来调用此函数。在这种情况下,请将 call ITMTEST 定义为 JDBC 语句来运行此存储过程。由于该 Oracle 函数必须返回光标引用,所以 Oracle 函数只能处理一个结果集。这意味着 Oracle 不支持索引选项,因为无法返回多个结果集。