outputRow()

processRow() メソッドに対する各呼び出しの後、outputRow() メソッドが定義されている場合は、それが NULL を返すまで呼び出されます。これにより、UDTF は何行でも効率的に出力できます。

outputRow() メソッドを呼び出す際に指定するパラメーターは常に 1 つで、それは processRow() メソッドの呼び出し以降に outputRow() が呼び出された回数です。

outputRow() を processRow() と組み合わせて使用した例を以下に示します。processRow() メソッドが最初に呼び出され、x の値を rows_to_output 変数に格納します。その後、データベースは、outputRow() メソッドを、それが NULL を返すまで呼び出します。最初の呼び出しで rownum 引数は値 1 を持ち、2 番目の呼び出しで値 2 を持つというようになります。

function processRow(x)
    rows_to_output = x
    return null
end

function outputRow(rownum)
    if rownum > rows_to_output then 
        return null 
    end
    return { rownum }
end

outputRow() メソッドが NULL を返すと、データベースは処理対象である次のデータ行を指定して再度 processRow() メソッドを呼び出します。outputRow() メソッドは、processRow() メソッドで許可されているのとまったく同じフォーマットでデータを返す必要があります。

たとえ processRow() メソッドが結果を返したとしても、outputRow() メソッドは、processRow() メソッドへの各呼び出しの後にまだ呼び出されます。例:

function processRow(x)
    rows_to_output = x
    return { 0 }
end

function outputRow(rownum)
    if rownum > rows_to_output then
        return null
    end
    return { rownum }
end