ユーザーの略歴
404 経歴が見つかりません
2015年12月8日からのメンバー
投稿:
返信:
Ohataさん、こんにちは。
SQLでデータが一致するかどうかの判定は照合(collation)によります。
IRISやCacheのデフォルトの照合は%SQLUPPERとなっています。
これは大文字小文字を区別せず、かつ後続の空白は無視されます。
そのため、'bbb△'と'bbb'は同じ文字列と識別され、ヒットします。
照合についてはマニュアルの以下のURLを参照いただければと思います。
https://docs.intersystems.com/iris20221/csp/docbookj/DocBook.UI.Page.cls?KEY=GSQL_COLLATION
よろしくお願いします。
Ohataさん、おはようございます。
ちなみに、私はモジュール単位で独立して起動時や終了時の処理を実行できるようにしたかったので、%ZSTARTや%ZSTOPルーチンは管理クラスから生成するようにしています。
プログラムはこんな感じです。
/// ZSTARTルーチンの生成
/// 起動時やログイン時、プロセス起動時に実行するプログラムを登録し、
/// %ZSTARTルーチンを生成させる
/// systemcode ... システム起動時に実行するコード
/// logincode ... ログイン時に実行するコード
/// jobcode ... プロセス起動時に実行するコード
///
/// ※複数行にわたるときはCRLFを挿入する
/// モジュール名は%ZLOADERでファイル名から生成されたモジュール名%moduleの値を使用する
ClassMethod GenerateZSTART(systemcode As %String = "", logincode As %String = "", jobcode As %String = "") As %Status
{
if $get(%module)="" {
quit $$$ERROR(5001,"モジュール名%moduleが定義されていません")
}
kill ^%ZModule.Code("ZSTART","SYSTEM",%module)
kill ^%ZModule.Code("ZSTART","LOGIN",%module)
kill ^%ZModule.Code("ZSTART","JOB",%module)
set:systemcode'="" ^%ZModule.Code("ZSTART","SYSTEM",%module)=systemcode
set:logincode'="" ^%ZModule.Code("ZSTART","LOGIN",%module)=logincode
set:jobcode'="" ^%ZModule.Code("ZSTART","JOB",%module)=jobcode
set rtn=##class(%Routine).%New()
set rtn.RoutineName="%ZSTART.MAC"
set sec="" for {
set sec=$order(^%ZModule.Code("ZSTART",sec))
quit:sec=""
do rtn.WriteLine(sec_"() public {")
set mod="" for {
set mod=$order(^%ZModule.Code("ZSTART",sec,mod),1,code)
quit:mod=""
do:code'="" rtn.WriteLine(code)
}
do rtn.WriteLine("}")
}
quit rtn.Compile()
}
便宜上、モジュール名は%付き変数で渡していたり、グローバルを使っていたりしますが、
モジュール名と起動、停止コマンドを入れるテーブルを作成し、トリガーで項目が更新される度にルーチンを生成するメソッドを実行しても良いかと思います。
ご参考まで。
フォロワー:
フォロー中:
Toshihikoさんはまだ誰もフォローしていません。
Global Mastersバッジ:







Ohataさん
こんにちは。
デフォルト値を変えるよりも、EXACTの照合が必要なプロパティが限定的なのであれば、
Propertyのデータ型にCOLLATIONパラメータを設定し、それらのプロパティだけ変更
された方が良いかと思います。
よろしくお願いします。