여러 입력 사용 ( DataStage® )
스테이지에서 다중 입력을 처리하게 하려는 경우 몇 가지 특수 고려사항이 있습니다.
코드에서 다음을 확인해야 합니다.
- 스테이지는 사용 가능한 레코드가 있을 때에만 열에 액세스하려 시도합니다. 모든 레코드를 읽은 후에(inputDone() 매크로를 사용하여 확인) 열에 액세스하려 시도하면 안되며, 링크에서 자동 읽기가 사용되거나 명시 레코드 읽기가 수행된 경우가 아니면 열에 액세스하려 시도해선 안됩니다.
- 레코드 읽기는 필요한 모든 레코드를 읽은 후 즉시 종료됩니다. 자동 읽기를 사용하지 않는 포트의 경우 코드가 필요한 모든 레코드를 읽었는지 판별하고 endLoop() 매크로를 호출해야 합니다.
대부분의 경우 다중 입력을 사용할 때에는 자동 읽기를 사용 가능하게 유지할 수 있으며, 그러면 코드의 명시 제어 필요성이 최소화됩니다. 하지만 이 상황이 적합하지 않을 때가 있습니다. 다음 단락은 몇 가지 공통 시나리오를 설명합니다.
모든 입력에 자동 읽기 사용
모든 포트에 자동 읽기가 사용되어 모든 레코드 읽기가 자동으로 처리됩니다. Per-record 루프가 입력의 열에 액세스할 때마다 먼저 inputDone() 매크로를 사용하여 더 많은 레코드가 있는지 판별하도록 이 루프를 코딩해야 합니다.
이 방법은 루프를 순환할 때마다 스테이지가 모든 링크에서 레코드를 읽게 하려는 경우에 좋습니다.
자동 읽기를 일부는 사용하고 다른 일부는 사용하지 않는 입력 사용
하나의(또는 가능하면 더 많은) 입력을 자동 읽기로 정의하고 나머지는 자동 읽기를 사용 안함으로 정의합니다. 자동 읽기 입력에서 레코드를 처리하면 다른 입력의 처리가 구동되도록 스테이지를 코딩합니다. 루프를 순환할 때마다 코드는 자동 읽기 입력에서 inputDone()을 호출하고 exitLoop()를 호출하여 스테이지의 조치를 완료해야 합니다.
이 방법은 루프를 순환할 때마다 자동 읽기 입력에서 레코드를 처리한 후, 자동 읽기 레코드의 처리 결과에 따라 다른 하나 이상의 입력에서 레코드를 처리하는 경우에 좋습니다.
자동 읽기를 사용하지 않는 입력 사용
코드는 명시적으로 모든 레코드 읽기를 수행해야 합니다. 처리를 시작하기 위해 각 입력마다 readRecord()를 한 번씩 호출하는 Per-Loop 코드를 정의해야 합니다. Per-record 코드는 루프를 순환할 때마다 모든 입력에 대해 InputDone()을 호출하여 최신 readRecord()에서 레코드를 읽었는지 확인하고, 읽은 경우 해당 입력에 대해 readRecord()를 다시 호출해야 합니다. 모든 입력의 레코드가 소모되면 Per-Loop 코드가 종료해야 합니다.
이는 각 입력의 처리 방식을 명시적으로 제어하려는 경우를 위한 방법입니다.