Fortran simulierte Zeilenfunktion
In diesem Beispiel wird der folgende Dateiname verwendet: ' timeSplit.f
Code erstellen
program timeSplitProgram
call nzaeSetConnectionPointName('timeSplit')
call nzaeRun()
stop
end
subroutine nzaeHandleRequest(handle)
integer hasNext, isNull, result
character(10) timeString
hasNext = -1
isNull = 0
timeString = '00000000'
10 call nzaeGetNext(handle, hasNext)
if (hasNext .eq. 0) then
goto 20
endif
c GET OUR INPUT.
call nzaeGetInputString(handle, 0, timeString, isNull)
c SET OUR OUTPUT.
call nzaeSetOutputString(handle, 0, timeString(1:2))
call nzaeSetOutputString(handle, 1, timeString(4:5))
call nzaeSetOutputString(handle, 2, timeString(7:8))
c OUTPUT THE ROW.
call nzaeOutputResult(handle)
goto 10
20 return
end
Kompilierung
Bei der Fortran wird die ausführbare Datei standardmäßig mit dem Namen der gestrippten Fortran versehen: " timeSplit im Beispiel:
$NZ_EXPORT_DIR/ae/utilities/bin/compile_ae --language fortran --version 3 \
--template compile timeSplit.fRegistrierung
Da es in Netezza SQL kein eingebautes Konzept für eine Zeilenfunktion gibt, wird diese Funktion als Tabellenfunktion registriert, obwohl sie nur eine Zeile pro Eingabezeile ausgibt:
$NZ_EXPORT_DIR/ae/utilities/bin/register_ae --language fortran --version 3 \
--template udtf --exe timeSplit --sig "time_split(varchar(10))" \
--return "table(hour varchar(2), minute varchar(2), second varchar(2))"Aktiv
Führen Sie die Abfrage in nzsql aus:
SELECT * FROM TABLE WITH FINAL(time_split('13:22:47'));
HOUR | MINUTE | SECOND
------+--------+--------
13 | 22 | 47