目录

Search

  1. 前言
  2. 使用转换
  3. 汇总器转换
  4. 自定义转换
  5. 自定义转换函数
  6. 数据屏蔽转换
  7. 数据屏蔽示例
  8. 表达式转换
  9. 外部过程转换
  10. 筛选器转换
  11. HTTP 转换
  12. Identity Resolution 转换
  13. Java 转换
  14. Java 转换 API 引用
  15. Java 表达式
  16. Java 转换示例
  17. 联接器转换
  18. 查找转换
  19. 查找缓存
  20. 动态查找缓存
  21. 规范器转换
  22. 等级转换
  23. 路由器转换
  24. 序列生成器转换
  25. 排序器转换
  26. 源限定符转换
  27. SQL 转换
  28. 在映射中使用 SQL 转换
  29. 存储过程转换
  30. 事务控制转换
  31. 联合转换
  32. 非结构化数据转换
  33. 更新策略转换
  34. XML 转换

转换指南

转换指南

从表达式调用存储过程

从表达式调用存储过程

在未连接映射中,存储过程转换不会连接到管道。
下图显示了一个表达式转换中引用存储过程转换的映射:
该映射包含源、源限定符、表达式转换、目标和未连接存储过程转换。
不过,同已连接映射一样,可以通过该映射将存储过程应用于数据流。实际上,您具有更大的灵活性,因为您使用表达式调用存储过程,这意味着您可以选择作为输入参数传递到存储过程的数据。
在表达式中使用未连接存储过程转换时,您需要一种将输出参数的值返回到端口的方法。请使用以下方法之一捕获输出值:
  • 将输出值分配到本地变量。
  • 将输出值分配到系统变量 PROC_RESULT。
通过使用 PROC_RESULT,将返回参数的值直接分配到输出端口,进而可直接应用于目标。也可以通过将一个输出参数分配为 PROC_RESULT,将另一个参数分配为变量,合并两个选项。
PROC_RESULT 仅在表达式内使用。如果不使用 PROC_RESULT 或变量,包含表达式的端口将捕获到空值。在已连接查找转换或存储过程转换的调用文本内不能使用 PROC_RESULT。
如果需要嵌套存储过程(一个存储过程的输出参数由此传递到另一个存储过程),请使用 PROC_RESULT 传递值。
集成服务将调用表达式转换中的未连接存储过程转换。请注意,存储过程转换有两个输入端口和一个输出端口。所有三个端口都是字符串数据类型。
要从表达式内调用存储过程,请执行以下操作:
  1. 在映射中创建存储过程转换。
  2. 在支持输出和变量端口的任何转换中,在调用该存储过程的转换中创建一个新的输出端口。对该输出端口命名。
    该调用存储过程的输出端口必须支持表达式。视乎表达式的配置方式,该输出端口包含输出参数的值或返回值。
  3. 针对该端口打开表达式编辑器。
    在表达式编辑器中,将该新端口的值设置为使用转换语言中的 .SP 关键字调用存储过程。设置此项最简便的方法是在表达式编辑器中选择存储过程节点,单击所列出的存储过程转换的名称。对于函数列表中显示的普通已连接存储过程,需要至少一个输入端口和一个输出端口。
    此时该存储过程将显示在表达式编辑器中,带有一对空括号。必要的输入和/或输出参数显示在表达式编辑器的左下角。
  4. 将该表达式配置为发送输入参数和捕获输出参数或返回值。
    您必须知道表达式编辑器中显示的参数是输入参数还是输出参数。按变量或端口在存储过程中显示的顺序在括号之间插入变量或端口名称。这些端口或变量的数据类型必须与传递到存储过程的参数的数据类型匹配。
    例如,单击该存储过程时,将显示类似于以下内容的信息:
    :SP.GET_NAME_FROM_ID()
    此特定存储过程需要整数值作为输入参数,并会返回字符串值作为输出参数。如何捕获输出参数或返回值因输出参数的数量和是否需要捕获返回值而异。
    如果该存储过程返回一个输出参数或返回值(但并非两者),应使用预留变量 PROC_RESULT 作为输出变量。在上个示例中,表达式显示如下:
    :SP.GET_NAME_FROM_ID(inID, PROC_RESULT)
    inID 可以是转换的输入端口或转换中的变量。将 PROC_RESULT 的值应用到表达式的输出端口。
    如果该存储过程返回多个输出参数,必须为每个输出参数创建变量。例如,如果为该存储过程表达式创建了一个名为 varOUTPUT2 的端口和一个名为 varOUTPUT1 的变量,则该表达式将显示如下:
    :SP.GET_NAME_FROM_ID(inID, varOUTPUT1, PROC_RESULT)
    将第二个输出端口的值应用到表达式的输出端口,并将第一个输出端口的值应用到 varOUTPUT1。输出参数将按在该存储过程中声明的顺序返回。
    对于所有这些表达式,端口和变量的数据类型必须与输入/输出变量和返回值的数据类型匹配。
  5. 单击“验证”验证该表达式,然后单击“确定”关闭表达式编辑器。
    验证表达式可确保存储过程中参数的数据类型与在表达式中输入的数据类型匹配。
  6. 单击“确定”。
    保存映射时,Designer 不会验证存储过程表达式。如果存储过程表达式的配置不正确,会话将失败。使用存储过程测试映射时,请将“替代跟踪”会话设置为详细模式,并配置“在存储过程中”会话选项以便在存储过程失败时停止运行。请在会话属性“配置对象”选项卡的“错误处理”设置中配置这些会话选项。
在表达式中为端口输入的存储过程不一定会影响通过该端口传递的所有值。例如,使用 IIF 语句仅可将特定值(例如以 5 开头的 ID 编号)传递到存储过程,并将跳过所有其他值。另外,也可以设置嵌套存储过程,由此一个存储过程的返回值将变成另一个存储过程的输入参数。