All these functions can easily be implemented by UDF, however in some situations you can't/don't want to use UDF. Among reasons to avoid UDFs are e.g.
- UDFs are not supported on NetWare
- UDFs are platform dependent
- missing UDF can prevent doing database restore
- UDF has no info about character set of its parameters
- UDFs can't return
<null>
- incorrectly written UDF can crash server
Helen Borrieさんに教えてもらいました。 まず、 ib_udf と fbudf では、パラメータの受け渡し方法が違います。 ib_udf はCデータタイプで、fbudf はparamdscとなっています。external function定義もそうですし、ソースコードでも確認しました。 その場合、paramdsc → Cデータタイプは OK ですが、Cデータタイプ → paramdsc はアウトです。 したがって、 ROUND(ABS(-1.4)) は NULL ですが ABS(ROUND(-1.4)) は 1 になります。 これは、引っかかりやすいことだそうなので、注意が必要だとのことです。ま た、一般に十分理解されているとはいえないとのことでした。 そして、ROUND()については、やはりCAST()を使って丸めたほうが無難だとい う意見でした。