使用上の注意 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL外部ルーチン プログラミング

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Published
2021年7月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/rin1593638965306.ditamap
dita:ditavalPath
ja-JP/wrg1590696035526.ditaval
dita:id
B035-1147
Product Category
Software
Teradata Vantage

FNC_freeは、UDF、UDM、テーブル演算子、コントラクト関数、および外部ストアド プロシージャで使用する、freeに相当するものです。

sqltypes_td.hヘッダー ファイルの中でfreeは、FNC_freeを呼び出すように再定義されています。

ユーザー 結果
スタンドアロンのUDF、UDM、または外部ストアド プロシージャを開発、テスト、およびデバッグする場合 malloc.hヘッダー ファイルをインクルードして、C標準ライブラリ関数のmallocおよびfreeを使用します。
サーバーにUDF、UDM、または外部ストアド プロシージャをインストールする場合 malloc.hヘッダー ファイルはインクルードしないようにし、sqltypes_td.h headerファイルのmallocおよびfreeの定義を使用します。

それらの定義は、サーバーにソース コードを発行する際には使用され、オブジェクトの発行時には使用されません。

FNC_freeは、UDF、UDM、または外部ストアド プロシージャの終了前にすべてのメモリを解放するための検査を実施し、UDF、UDM、または外部ストアド プロシージャが割り振った一時メモリのすべてを解放しなかった場合にはトランザクションに対して例外を発行します。これは、データベースでメモリ リークが発生しないようにするためです。

mallocfreeを直接呼び出すようなロジックにすると、UDF、UDM、または外部ストアド プロシージャで正しくメモリを解放してもメモリ リークが発生する可能性があります。それは、ユーザーがトランザクションをアボートしたり、実行中のUDF、UDM、または外部ストアド プロシージャには認識されていない別のノードで何らかの制約違反が発生したためにトランザクションがアボートしたりすると、実行中でもUDF、UDM、または外部ストアド プロシージャがアボートする可能性があるためです。