OceanBaseデータベースで現在サポートされているロングオブジェクトデータ型は、CLOBとBLOBです。
1つのLOBオブジェクトは、データとその位置情報を示すロケーター(Locator)で構成されています。この位置情報にはテーブルIDや行IDなどが含まれ、それによってそのオブジェクトがどのテーブルのどの行のデータに対応するかを特定できます。現在、ロングオブジェクトのストレージ方式はVARCHAR型と同様で、データ部分のみが保存されます。クエリ時には上位インターフェースがロケーター部分を生成します。
LOBオブジェクトは、任意の同種のオブジェクトに代入できます。通常、ユーザーはアプリケーション内でLOBオブジェクトを使用する際、ロケーターの意味合いを考慮する必要はありません。一部のシナリオではロケーターが必須ですが、他のシナリオでは冗長なロケーター情報を含むこともできます。
LOBオブジェクトの読み取りや変更時には、ロケーターを使用することも、使用しないことも可能です。
ロケーターを使用しない方法
多くの操作において、LOBオブジェクトはVARCHAR2型やRAW型に類似しており、これらの操作ではデータのみを使用し、ロケーター部分は無視されます。このような操作には以下が含まれます:
SQLおよびPLの組み込み関数
ユーザーが
LOB列からデータをクエリしたり、LOB列にデータを挿入したりできる以下のインターフェース:LOB列の変数をバインドして、CLOB列に文字データを挿入したり、BLOB列にRAWデータを挿入したりします。例えば、PLではVARCHAR2バッファをCLOB列に挿入できます。アプリケーションで、
CLOBからクエリした文字データやBLOBからクエリしたRAWデータを出力するよう定義します。例えば、PLではクエリ結果のCLOBをVARCHAR2バッファに格納できます。
ロケーターを使用する方法
OceanBaseデータベースが提供するLOB APIを使用し、LOBオブジェクトをパラメータとして渡します。これらのAPIはほとんどがDBMS_LOBパッケージに含まれており、DBMS_LOB.READ、DBMS_LOB.WRITE、DBMS_LOB.UPDATEなどが該当します。