使用多个输入( DataStage® )
若需使舞台处理多个输入,则需考虑一些特殊情况。
您的代码需要确保以下几点:
- 该阶段仅在存在可用记录时才尝试访问列。 在读取所有记录后不应尝试访问列(使用 inputDone( )宏进行检查),除非链接启用了自动读取功能或已执行显式读取记录操作,否则不应尝试访问列。
- 在从记录中读取所有所需记录后,立即终止读取操作。 对于禁用了自动读取功能的端口,代码必须确定何时已读取所有必需记录,并调用 endLoop( 宏。
在大多数情况下,当您使用多个输入时,可以保持自动读取功能启用,这将最大限度地减少代码中显式控制的需求。 但在某些情况下,这种做法并不合适。 以下段落描述了一些常见场景:
对所有输入使用自动读取
所有端口均启用了自动读取功能,因此所有记录读取操作均由系统自动处理。 您需要编写逐记录循环的代码,确保每次访问任何输入的列时,首先使用 inputDone( 宏来判断是否还有更多记录。
若您希望在每次循环时,让您的阶段从每个链接读取一条记录,此方法完全适用。
启用部分输入的自动读取功能,而对其他输入则禁用该功能
您将一个(或多个)输入定义为自动读取,其余输入则禁用自动读取功能。 你编写舞台程序时,需确保自动读取输入的记录处理流程能够驱动其他输入的处理流程。 每次循环时,您的代码应调用 inputDone( )处理自动读取输入,并调用 exitLoop( )来完成该阶段的操作。
当每次循环处理来自自动读取输入的记录时,这种方法是可行的。随后根据自动读取记录的处理结果,再处理来自一个或多个其他输入的记录。
禁用自动读取功能的输入
您的代码必须显式执行所有记录读取操作。 您应定义循环内代码,该代码在处理每个输入时调用 readRecord( 一次以启动处理。 您的每条记录代码应在每次循环中对每个输入调用 inputDone( ,以判断最近一次 readRecord( 是否读取了记录。若读取成功,则需再次调用 readRecord( 处理该输入。 当所有输入的记录耗尽时,应退出循环代码。
此方法适用于需要对每个输入的处理方式进行显式控制的情况。