概要
%OBJECT を使用してストリーム・オブジェクトが開かれ、ストリーム・フィールドの oref (オブジェクト参照) が返されます。
ストリーム・フィールドでの SELECT は、ストリーム・フィールドの整形式 OID (オブジェクト ID) 値を返します。ストリーム・フィールドでの SELECT %OBJECT は、ストリーム・フィールドの oref (オブジェクト参照) を返します。以下の例に示すとおり、Notes および Picture はいずれもストリーム・フィールドです。
set myquery = "SELECT TOP 3 Title,Notes,%OBJECT(Picture) AS Photo FROM Sample.Employee"
set tStatement = ##class(%SQL.Statement).%New()
set qStatus = tStatement.%Prepare(myquery)
if $$$ISERR(qStatus) {write "%Prepare failed:" do $SYSTEM.Status.DisplayError(qStatus) quit}
set rset = tStatement.%Execute()
if (rset.%SQLCODE '= 0) {write "%Execute failed:", !, "SQLCODE ", rset.%SQLCODE, ": ", rset.%Message quit}
while rset.%Next()
{
write "String field: ",rset.Title,!
write "Stream field oid: ",rset.Notes,!
write "Stream field oref: ",rset.Photo,!!
}
if (rset.%SQLCODE < 0) {write "%Next failed:", !, "SQLCODE ", rset.%SQLCODE, ": ", rset.%Message quit}
write !,"End of data"
stream がストリーム・フィールドでない場合、%OBJECT は SQLCODE -128 エラーを発行します。
%OBJECT は、以下の関数に対する引数として使用できます。
-
CHARACTER_LENGTH(%OBJECT(streamfield))、CHAR_LENGTH(%OBJECT(streamfield))、または DATALENGTH(%OBJECT(streamfield))
-
SUBSTRING(%OBJECT(streamfield),start,length)
ストリーム・フィールドで SELECT を発行し、oid から oref を生成する $Stream.Object.%Open()Opens in a new tab クラス・メソッドを呼び出してこのストリーム oid を開くことでも、同じ操作を実行することができます。
SET oref = ##class(%Stream.Object).%Open(oid)
oref の詳細は、"クラスの定義と使用" の “OREF の基本” を参照してください。oid の詳細は、上記と同じドキュメントの “保存したオブジェクトの識別子 : ID および OID” を参照してください。