記事
Hiroshi Sato · 2021年9月26日 3m read

リストコレクションを定義したプロパティに対するSQLアクセス方法

これは InterSystems FAQ サイトの記事です。

リストコレクション(Property XXX As list of %String;)で定義したプロパティは、SQL関数: $LISTBUILD() 、$LISTFROMSTRING() を使用して操作できます。


各SQL関数については、下記ドキュメントページをご参照ください。

InterSystems SQL リファレンス - $LISTBUILD() 【IRIS】
IRIS SQL リファレンス - $LISTFROMSTRING() 【IRIS】
Caché SQL リファレンス - $LISTBUILD()
Caché SQL リファレンス - $LISTFROMSTRING()
 

/// クラス定義例
Class ISJ.ListOfData Extends %Persistent
{
Property listdata As list Of %String;
}

 

SQL文実行例は以下の通りです。 
 


USER>do $system.SQL.Shell()
--- 表示省略 ---
USER>>insert into ISJ.ListOfData (listdata) values($LISTBUILD('あ','い','う'))
10.     insert into ISJ.ListOfData (listdata) values($LISTBUILD('あ','い','う'))
1 Row Affected
--- 表示省略 ---
↓次は $LISTFROMTOSTRING()を使用した例↓
USER>>insert into ISJ.ListOfData (listdata) values($LISTFROMSTRING('か,き,く'))
12.     insert into ISJ.ListOfData (listdata) values($LISTFROMSTRING('か,き,く')   )
1 Row Affected
statement prepare time: 0.0180s, elapsed execute time: 0.0001s.
---------------------------------------------------------------------------
USER>>quit
USER>set obj=##class(ISJ.ListOfData).%OpenId(1) // オブジェクトで確認
USER>write obj.listdata.Count()
3
USER>write obj.listdata.GetAt(1)

USER>write obj.listdata.GetAt(2)

USER>write obj.listdata.GetAt(3)

USER>set obj=##class(ISJ.ListOfData).%OpenId(2)
USER>for i=1:1:obj.listdata.Count() {write obj.listdata.GetAt(i),!}


 

ODBC形式でアクセスするとカンマ区切りデータとして取り扱えます。

※表示形式変更方法は、DATE型やTIME型カラムに対する方法と同じです。

詳細は関連トピックをご参照ください。 

USER>do $system.SQL.Shell()
-- 表示省略 --
USER>>set selectmode = odbc     // ←ODBCモードへの切り替え
selectmode = odbc
USER>>select * from ISJ.ListOfData
14.     select * from ISJ.ListOfData
ID      listdata
1       あ,い,う
2       か,き,く
2 Rows(s) Affected
statement prepare time: 0.0003s, elapsed execute time: 0.0006s.
---------------------------------------------------------------------------
USER>>update ISJ.ListOfData set listdata='さ,し,す' where ID=1
15.     update ISJ.ListOfData set listdata='さ,し,す' where ID=1
1 Row Affected
statement prepare time: 0.0007s, elapsed execute time: 0.0003s.
---------------------------------------------------------------------------
USER>>select * from ISJ.ListOfData
16.     select * from ISJ.ListOfData
ID      listdata
1       さ,し,す
2       か,き,く
2 Rows(s) Affected
statement prepare time: 0.0003s, elapsed execute time: 0.0005s.
USER>>quit
---------------------------------------------
00
1 0 0 11
Log in or sign up to continue