投稿者

Developer at Paltac Corporation
質問 Yuji Ohata · 3月 24, 2023

グローバルをODBCツールで参照したい。

こんにちは、皆さま。
業務でIRISを用いて開発を行っている者です。

私たちのシステムでは一部グローバルを利用しているものがあるのですが、
それをテーブル定義したものと同様にDbeaver等で参照できるようにしたいと考えております。

もともと定義していたグローバル(キーを二つ持つもの)に対して、対応するPersistentのクラスを作成し、
DataLocationをそのグローバルにすることで、Dbeaverからそのクラスの存在は見えるようになったのですが、
valueの値を参照することできず、困っています。
どなたか情報をお持ちでしたらご教示いただけないでしょうか…。

■グローバル
>zw ^Test
^Test(1,2)="A"
^Test(1,3)="B"
^Test(2,1)="C"
^Test(2,2)="D"
■永続クラス

Class Gbl.Test Extends %Persistent [ SqlRowIdPrivate ]
{
Index RowIdBase On (key1, key2) [ IdKey, Unique ];
Property key1 As %Integer [ Required, SqlColumnNumber = 2 ];
Property key2 As %String [ Required, SqlColumnNumber = 3 ];

Storage Default
{
<Data name="TestDefaultData">
<Value name="1">
<Value>%%CLASSNAME</Value>
</Value>
</Data>
<DataLocation>^Test</DataLocation>
<DefaultData>TestDefaultData</DefaultData>
<IdLocation>^Test</IdLocation>
<IndexLocation>^Gbl.TestI</IndexLocation>
<StreamLocation>^Test</StreamLocation>
<Type>%Storage.Persistent</Type>
}
}

■Dbeaver

Product version: IRIS 2022.2

Comments

Mihoko Iijima · 3月 24, 2023

@Ohata.Yujiさん、こんにちは

単独で作成されているグローバル変数に対してSQLを発行するためには、クラス定義のストレージの定義を「デフォルトストレージ」から「SQLストレージ」に変更する必要があります。

丁度、似たグローバル構造に対してSQLストレージを作成する例がFAQトピックにありました。

既存のグローバルデータをオブジェクトやSQLインタフェースから利用する方法はありますか?

(添付の参考資料にあるPDFのP2~9までの ^KIONデータに対する定義が対象です。SQLストレージを作成する場合、スタジオのインスペクタを使っていただくと作りやすいかと思います。)

こんな感じで試してみました。

(^Testの右辺のデータを Data1プロパティで操作できるように定義してみました)

Class Gbl.Test Extends%Persistent [ StorageStrategy = MyGlobalStorage ]
{

Property Key1 As%Integer [ Required, SqlColumnNumber = 2 ];Property Key2 As%String [ Required, SqlColumnNumber = 3 ];Property Data1 As%String;

Index KeyIndex On (Key1, Key2) [ IdKey, Unique ];ClassMethod createdata()
{
	set^Test(1,2)="A"set^Test(1,3)="B"set^Test(2,1)="C"set^Test(2,2)="D"
}

Storage MyGlobalStorage
{
<SQLMap name="GblMap">
<Data name="Data1">
<Delimiter>"^"</Delimiter>
<Piece>1</Piece>
</Data>
<Global>^Test</Global>
<RowIdSpec name="1">
<Expression>{L1}</Expression>
<Field>Key1</Field>
</RowIdSpec>
<RowIdSpec name="2">
<Expression>{L2}</Expression>
<Field>Key2</Field>
</RowIdSpec>
<Subscript name="1">
<Expression>{Key1}</Expression>
</Subscript>
<Subscript name="2">
<Expression>{Key2}</Expression>
</Subscript>
<Type>data</Type>
</SQLMap>
<StreamLocation>^Gbl.TestS</StreamLocation>
<Type>%Storage.SQL</Type>
}

}

DBeaverからの参照はこんな感じです。

このようなイメージであっていますでしょうか。

0
Yuji Ohata  3月 26, 2023 to Mihoko Iijima

Mihoko Iijima さん

ありがとうございます!
まさにこれです!助かりました。

0