Published on InterSystems Developer Community (https://community.intersystems.com)

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

記事
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
---------------------------------------------
#ヒントとコツ #Caché #Ensemble #InterSystems IRIS #InterSystems IRIS for Health

ソースURL:https://jp.community.intersystems.com/post/%E3%83%AA%E3%82%B9%E3%83%88%E3%82%B3%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E5%AE%9A%E7%BE%A9%E3%81%97%E3%81%9F%E3%83%97%E3%83%AD%E3%83%91%E3%83%86%E3%82%A3%E3%81%AB%E5%AF%BE%E3%81%99%E3%82%8Bsql%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E6%96%B9%E6%B3%95