質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

Oracle Database 12c

Oracle Database 12cは、RDBMS製品です。世界初の商用RDBMSであるOracle Databaseのバージョンで、2013年にリリース。クラウド対応を考慮して設計されました。主な機能には、マルチテナント対応やインメモリデータベースの実装などがあります。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

3回答

1229閲覧

Oracle上のデータベースからデータを取得しようとすると。 SiObjectBrowserで実行したSelect命令とVB.NET2013上で実行したSelectの取得件数が異なる。

yenomoto

総合スコア14

Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

Oracle Database 12c

Oracle Database 12cは、RDBMS製品です。世界初の商用RDBMSであるOracle Databaseのバージョンで、2013年にリリース。クラウド対応を考慮して設計されました。主な機能には、マルチテナント対応やインメモリデータベースの実装などがあります。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2019/05/11 09:28

現在、Oracle12cとVB.net2013上で開発作業を行っておりますが、
同一のSelect命令を実行したにもかかわらず、
Si ObjectBrowser(Ver.13)とVB.net2013上で実行した結果の取得件数が
異なるという現象が発生しています。(VB.net2013側の件数が少ない。
仕様としてはSi ObjectBroserで抽出した結果が正しいです)

単体テスト中のプログラムなのですが、
以前は何事もなくSi ObjectBrowserとVB.net2013上の
実行結果は一致していたのですが、突然一致しなくなったという感じです。

プログラム的には、テーブル1からSelect命令で条件を指定して抽出したものを
テーブル2へInsertし、追加したというフラグをテーブル1に立てるという感じです。
テストのために、Insertした後は、UpdateでSelectの抽出条件にあうように
してテストをくり返しているという感じです。

ここから話は複雑になるのですが、
SelectのWhere文の中で、条件をConstとして定義している部分があり、
(Private Const A AS string = "01"の形で定義しています)
Where テーブル1.項目A = 'A.ToString'としたところ、
(プログラムの記述: "WHERE テーブル1.項目A = '" & A.ToString & "'")
いったんは解決したのですが、その後、また元に戻ってしまったという感じです。

データベースの接続情報などは、
以前と全く変わっておらず、接続は対象のデータベースに
接続できていることは確認できております。

なぜ、このような現象が発生するのかが
いったんは解決したのになぜ再発したのか不明確な状態になっています。
現在、突破口が見つからない状態です。
アドバイスいただければと思います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2019/05/11 09:36

生成されるSQLで確認して下さい。
YAmaGNZ

2019/05/11 09:51

実際に同一のSQLが実行されているのを確認したのですか?
yenomoto

2019/05/11 10:32

回答ありがとうございます。 Si ObjectBrowser上で実行したSQLについては、VB.netのデバックモードで 取りだしたSQLを実行しておりますので、 Si ObjectBrowserとVB.net上で同一のSQLが実行されていることを確認しております。
sazi

2019/05/11 10:38

SQLトレースログで確認して下さい。
yenomoto

2019/05/11 10:56

ありがとうございます。確認してみます。
guest

回答3

0

自己解決

本内容ですが、
解決いたしました。

原因は、SiObjectBrowser上でのCommit忘れでした。
単体テストでは、テストデータをUpdate文で対象となるように更新していたのですが、
この際にCommitボタンを押し忘れた結果、確定されない状態となり抽出結果が
おかしくなっていた模様です。

SiObjectBroserでは、UpdateやInsert文を実行すると、
「SQLが実行されました」と言うメッセージが表示され、このメッセージを持って
更新が実行されたものと思っていたのですが、
実際は更新が行われていませんでした。
(サポート掲示板にも制限事項として書かれていました)

A5M2などでは、Commitの操作をしなくても確定されるので、
上記のメッセージで更新されると思っていました。

気がついたきっかけは、皆様からアドバイスをいただいた後
テストを再開したのですが、いきなり処理が進まなくなりました。
(件数表示が止まったままとなった)
そこで、SiObjectBrowserを終了させたところ、
処理が進み、正常終了しました。
もしかしたら、Commitがらみではないか?と思い、
SiObjectBrowserのサポート掲示板を見に行ったところ、
制限事項として記載がありました。

いろいろとアドバイスいただきました皆様、
ありがとうございました。

投稿2019/05/14 12:09

yenomoto

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

SIObjectBrowserでのSelect実行結果が正しく、vb.net2013上で実行しているSelect結果が正しくない、との事ですので、可能性の話ですが、vb.net2013のSelect実行のトランザクション内でSelectよりも前でSelectの結果に影響するDMLが実行されていないでしょうか?

切り分けとしては、vb.net2013上で、該当のSelectだけ実行するとどうなるか確認すると良いと思います、

投稿2019/05/11 12:02

takyafumin

総合スコア2335

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yenomoto

2019/05/11 12:43

回答ありがとうございます。確認してみます。
yenomoto

2019/05/14 12:12

本件、自己解決いたしました。 ありがとうございました。
guest

0

const のバージョニング問題 ではないでしょうか?

投稿2019/05/11 09:36

hihijiji

総合スコア4150

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2019/05/11 09:41

privateだから関係ないのでは。
hihijiji

2019/05/11 09:47

全てPrivateにしているとは書いてないので^^;
yenomoto

2019/05/11 10:34

回答ありがとうございます。 Constについては、今回の対象AP上ではPublicのConstは存在せず、 全てPrivate Constになっております。
yenomoto

2019/05/14 12:12

本件、自己解決いたしました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問