■SI ObjectBrowser掲示板

ユーザの皆様、開発者、サポート担当者の交流のための掲示板です!discussion
ユーザーのみなさま同士で教え合ったり、アドバイスしたりする暖かい交流の場にしたいと思っていますので、相互協力をよろしくお願いします。なお、過去に同じようなQ&Aがあるケースも多いので、投稿前にキーワード検索してみてください。

※◆のカラーは投稿の対象となる製品に対応しています。【…OB …OBER …全般 ◇…その他】
※ライセンスに関するお問合せにつきましては、お問い合わせページよりご連絡いただきますようお願いいたします。
※誹謗中傷や公序良俗に反する書き込みはご遠慮ください。運営側の判断によりメッセージを削除する場合があります。
※環境依存や技術的調査が必要な問題については掲示板上ではお答えしかねます。ご了承ください。




SQLウィンドウでselectした結果を更新すると無関係のレ 2020/03/25 11:00:20
HT
SQLウィンドウでselectした結果を更新すると無関係のレコードまで更新される。

利用製品:SI Object Browser for Oracle Version 14.0.0.0(x64)
接続先DB:oracle database 12c standard edition release 12.2.0.1.0


下記テーブルに対して、SQLウィンドウで「select VALUE from TEST.T_TEST where ID= '0000000001'」を実行して
その実行結果のVALUEを変更すると、元の値:9 →更新後:Xを行うと下記メッセージが表示されます。
[Updateコマンドがupdatedしたのは[116]レコードで[1]レコードではあり
ません。考え得る理由:更新テーブルに主キーまたは行識別子がありません。
レコードは別のユーザによって変更されました。]


テーブルの内容を確認するとID指定したレコード以外のVALUE=9のレコードについてもVALUE=Xへ書き換わってしまいます。
エラーが発生するのであれば、更新をしないに倒れればよいのですが。
エラーが発生したうえで、関係のないレコードまで書き換変わるようです。


現在弊社が利用している製品のバージョンが古いのかもしれません。

SI Object Browser for Oracle Version 14の最新バージョンでは改善されておりますでしょうか。
それとも仕様なのでしょうか、仕様であればエラーメッセージは表示されないのだと思っております。

本現象の把握および、製品の最新版での対応状況、仕様かどうかを回答いただけると助かります。


掲示板を確認すると、類似の現象で下記の投稿もあるようです。
https://www.sint.co.jp/siob_bbs/bbs_disp.asp?current_page=1&disp_mode=1&message_id=7039


----テスト検証テーブル
CREATE TABLE TEST.T_TEST
(
ID VARCHAR2(10) NOT NULL,--連番でテストデータ作成
VALUE VARCHAR2(1), --ランダムで数字1桁のテストデータ作成
CONSTRAINT C_TEST PRIMARY KEY (ID) USING INDEX
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE(INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS 2147483645 BUFFER_POOL DEFAULT)
LOGGING
ENABLE
)
PCTFREE 10
MAXTRANS 255
STORAGE(INITIAL 64K NEXT 1M MINEXTENTS 1 MAXEXTENTS 2147483645 BUFFER_POOL DEFAULT)
NOCACHE
LOGGING

元の文章を引用して返信

Re: SQLウィンドウでselectした結果を更新すると無関係のレ 2020/03/27 10:33:16
OBサポート           oob.support@sint.co.jp
こんにちは。
OBサポートです。

お問い合わせいただいた件につきましてですが、Ver.14以前のSI Object Browserにおける
データグリッドで値を編集する際の挙動は、グリッド上に表示された項目を条件として
UPDATE文を発行する仕組みとなっております。

例として、ご記載の
 select VALUE from TEST.T_TEST where ID= '0000000001'
を実行、結果を表示して値を編集した場合
 update TEST.T_TEST set VALUE = '編集後の値' where VALUE = '編集前の値'
が実行される形となり、変更前のVALUE値が複数レコードある場合は
ご記載の動作となります。

※事前のSELECT文でキー項目(ID)を含めて結果表示した場合はWHERE句にも
 キー項目が含まれるため、単一行の更新となります。

本件につきましては、後継バージョンであるSI Object Browser for Oracle 18より
UPDATE文発行の挙動を変更するオプションを追加しております。
(キー項目またはROWIDをUPDATE文の条件とする動作を既定とし、
Ver.14以前の挙動をオプションで選択可能としています)

恐れ入りますが、新しいバージョンをご検討いただくか、Ver.14でご利用いただく場合は
更新対象を一意に絞り込むよう、SELECT文でキー項目を含めていただけますでしょうか。

何卒、よろしくお願い申し上げます。
元の文章を引用して返信

Re: SQLウィンドウでselectした結果を更新すると無関係のレ 2020/03/27 11:46:28
HT
ご回答ありがとうございます。

仕様だとして正常にupdateできているのであれば、なぜupdate文が失敗したようなエラーメッセージが表示されるのでしょうか。

仕様で正常な処理であれば、通常の編集のようにエラーメッセージを表示しないのが正しいように思えます。

また、直感的にわからない、表示はフィルタリングされて1件しか表示されていて
画面に見えていないデータまで書き換える仕様であれば、
製品のヘルプに記載されていないのはなぜでしょうか。
(私の見忘れであれば失礼しました。)

仕様として片付けるのは簡単だとおもうのですが。
納得が行く説明をいただけますでしょうか。
元の文章を引用して返信

Re: SQLウィンドウでselectした結果を更新すると無関係のレ 2020/03/31 14:59:51
OBサポート
こんにちは。
OBサポートです。

本件につきまして、開発側に確認しましたところ
グリッド上での編集を行う操作において複数行更新が発生する
(=複数行更新が発生した旨のメッセージが表示される)
のは不適切であると認識いたしました。

またメッセージの表記内容、表示方法も不適切であったと
認識しましたため、UPDATE文の発行の仕組みから検討を行い
Ver.14の後継バージョンであるSI Object Browser for Oracle 18で
オプション追加による対応を実施いたしました。

ご不便をおかけし、誠に申し訳ございません。

ヘルプの記載内容に関しましても、ご指摘の通り
不足している点がございますので、今後の改善に
役立たせていただきます。

貴重なご意見、誠にありがとうございます。

何卒、よろしくお願い申し上げます。
元の文章を引用して返信