コンテンツにスキップ

TAGデータUPDATEのWHERE/SET制約

TAGデータのUPDATEでは、対象範囲を明確にする必要があります。 WHERE句にはタグ選択条件とBASETIME条件が両方必要で、SET句は実際のデータ列だけを対象にします。

Machbase 8.7.0からサポートする機能

SET句の制約

列の役割SET可否説明
データ列Ovalue、補助の数値・文字列列など
SUMMARIZEDデータ列O元のTAG行の値が変わる
BASETIME列X時間軸列は変更不可
PRIMARY KEY列(nameXタグ名は変更不可
メタデータ列XUPDATE ... METADATAで別途処理
隠し列・システム列X内部列はSET対象外

SET式には、定数、バインド変数、既存行の列を参照しない算術式・文字列式・CASE、許可された型変換関数、NULLを使用できます。 既存行の列を参照する式、サブクエリ、集計式はSET右辺に使用できません。

WHERE句の制約

UPDATE table_name
   SET col = expr
 WHERE name = 'tag-name'
   AND time >= TO_DATE('2026-07-01', 'YYYY-MM-DD');
WHERE条件対応
name = '...'O
name = ?, name = :tag_nameO
? = name, :tag_name = nameO
name IN ('...', '...')O
name LIKE '...'O
time = t1O
time = ?, time = :base_timeO
? = time, :base_time = timeO
time BETWEEN t1 AND t2O
time >= t1 AND time < t2O
time >= ? AND time < ?O
片側の時間条件O
データ列条件O
タグ選択のない条件X
時間条件のない条件X
OR条件X
IN (SELECT ...)X
タグ・軸列を関数・演算式で包んだ式X

バインドパラメーターは、条件の値の位置だけに使用します。 タグ名列とBASETIME列をマーカーに置き換えることはできず、バインドを使ってもタグ選択条件と時間条件は両方必要です。 同じプリペアドステートメントを再実行すると、新しくバインドした値で対象を選択し、一致行がなければ影響行数0で成功します。

NAMEとTIMEパラメーターの型情報とSDK別APIは、 TAGデータUPDATEのバインドパラメーターおよび Named Bind Parameterを参照してください。

メタデータのUPDATE

UPDATE table_name METADATA
   SET meta_col = value
 WHERE condition;

メタデータUPDATEは、タグ属性領域を変更します。 実際の時系列行のデータ列を変更するTAGデータUPDATEとは、構文と対象が異なります。

列の役割の確認

DESCコマンドで列属性を確認します。

DESC sensor_tag;

または、システムテーブルから列のFLAGを検索します。

SELECT NAME, TYPE, FLAG
  FROM M$SYS_COLUMNS
 WHERE TABLE_ID = (
     SELECT ID FROM M$SYS_TABLES WHERE NAME = 'SENSOR_TAG'
 );
FLAG値意味
134217728Tag Name
16777216Base Time / Base Distance
33554432Summarized
67108864Metadata

エラー例

-- エラー: BASETIME列をSET対象に指定
UPDATE sensor_tag
   SET time = TO_DATE('2026-07-01', 'YYYY-MM-DD')
 WHERE name = 'TEMP-01'
   AND time >= TO_DATE('2026-07-01', 'YYYY-MM-DD');

-- エラー: 時間条件がない
UPDATE sensor_tag
   SET value = 0.0
 WHERE name = 'TEMP-01';

-- エラー: OR条件の使用
UPDATE sensor_tag
   SET value = 0.0
 WHERE name = 'TEMP-01'
    OR name = 'TEMP-02';

関連文書

最終更新日