第十三章 使用动态SQL(六)
用%ObjectSelectMode = 1 Swizzling字段名称属性
下面的示例使用%ObjectSelectMode = 1进行准备,当使用字段名称属性返回值时,其类型类别为可Swizzle类型的字段(持久性类,序列类或流类)将自动发生Swizzle。转换字段值的结果是相应的对象参考(oref)。使用%Get()或%GetData()方法访问字段时,InterSystems IRIS不会执行此筛选操作。在此示例中,处于Swizzle状态,而引用同一字段的处于not swizzled状态:
/// d ##class(PHA.TEST.SQL).PropSQL2()
ClassMethod PropSQL2()
{
SET myquery = "SELECT TOP 5 Name,Home FROM Sample.Person"
SET tStatement = ##class(%SQL.Statement).%New(0)
SET tStatement.%ObjectSelectMode=1
WRITE !,"set ObjectSelectMode=",tStatement.%ObjectSelectMode,!
SET qStatus = tStatement.%Prepare(myquery)
IF qStatus'=1 {
WRITE "%Prepare failed:" DO $System.Status.DisplayError(qStatus) QUIT
}
SET rset = tStatement.%Execute()
WHILE rset.%Next() {
WRITE "Row count ",rset.%ROWCOUNT,!
WRITE rset.Name
WRITE " ",rset.Home,!
WRITE rset.%GetData(1)
WRITE " ",$LISTTOSTRING(rset.%GetData(2)),!!
}
WRITE !,"End of data"
WRITE !,"Total row count=",rset.%ROWCOUNT
}




.png)

