• 締切済み

オラクルのレコードカウントの制御

プログラム初心者です。 オラクル(11g)で、10個のPCで10人が、あるテーブルのデータを更新していく、システムを作成(VB2005)しています。 例として下記のようなデータがあります。 テーブルC 日付順 番号はユニーク 日付_番号_レコードカウント(Rc) 1/3____1_____0 1/5____2_____1 1/6____5_____2 (Rc2) 1/7____7_____3 (Rc3) 1/20__ 9_____4 2/1___10_____5 この全データをSQLで、【【毎回】】読込みます。 A氏が例えば1/6のデータを編集したとします。レコードカウント2(以降Rc2) 【編集したデータは、同テーブルが更新される場合と、他のテーブルに移動するケースがあります。 更新された場合でも、他のテーブルに移動する場合でも、A氏は次に1/7(Rc3)のデータを編集させたいです。】 この場合、更新されたら、レコードカウントを次に移行すればいいのですが(Rc2+1で Rc3)、 1/6のデータを編集後、他のテーブルに移動された場合、Rc3を見ても(SQL再読込後)、1/20のデータが抽出されて しまいます。 なので、このケースは、テーブルが移動された場合、レコードカウントは据え置きで、Rc2をみるという プログラムを作らなくてはいけません・・・・・。 これも問題ですが、さらに大きな問題は、 1/6のデータを編集後、そのデータが移動されたときに、その間にB氏とC氏により、1/3,1/5のデータ更新後移動 されたケースがさらに悩んでいます。 Rc2で据え置きで 1/7のデータを読みに行こうとしたら、1/3,1/5のデータが既になくなっているので、 Rc2をみると、2/1のデータを見ることになってしまいます。 こうした多くの人がデータを編集、移動する場合のテーブルを、日付順に作業させていく場合は、どのような制御 (またはオラクルの機能)をすれば、可能なのかご指導頂ければ助かります。

  • Oracle
  • 回答数1
  • ありがとう数5

みんなの回答

回答No.1

こんにちは 質問文を拝見しましたが、私の理解力不足で、よくわかりませんでした・・・。 このレコードカウントは、編集されたらインクリメントされるんですか? ほかのテーブルに移動されたレコードは編集対象外となるんですか? 何をどのようにしたいのかと、それぞれのデータが持つ意味を教えて頂けますか?

関連するQ&A

  • オラクルのレコードカウントの制御(改訂版)

    プログラム初心者です。 オラクル(11g)で、10個のPCで10人が、あるテーブルのデータを更新していく、システムを作成(VB2005)しています。 画面は2パターンです。 ・データ一覧表示画面 ・上記からデータを選択し、編集する用の画面 例として下記のようなデータがあります。 テーブルC 日付順 番号はユニーク 日付_番号_ステータス__レコードカウント(Rc) 1/3____1_____Q________0 1/5____2_____R________1 1/6____5_____G________2 (Rc=2) 1/7____7_____P________3 (Rc=3) 1/20__ 9_____R________4 2/1___10_____U________5 動作の流れ 1.まず、この全データをSQLで読込みます。 SELECT * FROM テーブルC ORDER BY 日付 ASC これが一覧表示画面(VB2005のグリッドビュー等)に表示されます。 2.A氏が例えば1/6のレコードを編集したいとします。 そこで、1/6(日付)の列をマウスで選択。このとき列番号(レコードカウント)は2になります。 編集画面フォームに、同じSQL(SELECT * FROM テーブルC ORDER BY 日付 ASC) と、列番号(レコードカウント)2を、引渡しします。 3.編集画面で、引き渡されたSQLを実行し、そのデータを全てDatatblに格納します。 そのデータの3つめ(レコードカウント2)を参照します。 datatabl.Rows(2).Item("ステータス") データは参照後、ある条件によりステータスが変わります。 ステータスが、"Z"になった場合、そのレコードは、テーブルAに移動されます。 4.編集後は、他のテーブルに移動する場合でも、テーブルCがそのまま更新される場合でも、 自動的に次の列のレコードに移行し編集を行う。 今回は例として、1/6のレコードのステータスが"Z"になって A氏は次に1/7(Rc3)のデータを編集作業に入ります。 5. 4.を実行するため、また同じSQLを実行。 SQL実行後、レコードカウントを次に移行すればいいのですが(Rc=2に1を加え、Rc=3とする)、 Rc=3を見ても、1/20のデータが抽出されて しまいます。 (1/6のレコードが移動してなくなってしまった場合) また、他の例として、上記と同様に、A氏が1/6のデータを編集中に、他の人が1/3,1/5のデータを編集移動 してしまった場合、レコードカウントがぐちゃぐちゃになってしまいます。 こうした多くの人がデータを編集、更新・移動する場合のテーブルを、日付順に作業させていく場合は、どのような制御 (またはオラクルの機能)をすれば、可能なのかご指導頂ければ助かります。

  • オラクルからレコードを取得

    VBをoo4oでオラクルの接続していますが、オラクルのテーブルをレコードごとにEXCELのシートに出力したいです。 たとえばテーブルのレコード数が5の場合EXCELのsheet1からsheet5に分け出力したいです。 教えて下さい。

  • 複数のテーブルのレコードをカウントする方法

    2つのテーブルのレコード数をカウントする方法を教えてください。 $sql = "SELECT * FROM テーブル1 and テーブル2"; $res = mysql_query($sql,$myLink); $num_k = mysql_num_rows($res); こんな感じでカウントできるかと思ったのですが出来ませんでした。 宜しくお願い致します。

    • ベストアンサー
    • MySQL
  • オラクルからAccessにデータ追加

    オラクルから、必要なデータを抜出し加工の為のDBをAccessで作成していますが、オラクルから抜き出したデータ(レコードセット)を、どうやってAccessのテーブルに書き込めばよいかがわかりません。 ◎環境 Oracle:10g Access:2010 ◎現在の状況 Dim CON As New ADODB.Connection Dim RS As ADODB.Recordset Dim SQL As String Dim i As Integer 'DB接続定義 CON.Open "DSN=DNS名;UID=ユーザー名;PWD=パスワード;" 'SQL文 SQL = "SELECT " SQL = SQL & "カラム1," SQL = SQL & "カラム2," SQL = SQL & "カラム3" SQL = SQL & "FROM オラクルテーブル名 " SQL = SQL & "WHERE 抽出条件 " SQL = SQL & "AND 抽出条件" SQL = SQL & "GROUP BY カラム" SET RS = CON.EXCUTE(SQL) For i = 1 To 10 Debug.Print rs(カラム1) & rs(カラム2) next i ここまでは、オラクルのテーブルから、レコードセットにデータが取り込まれてます。 rs.close: SET RS = Nothing con.close:SET CON=Nothing end sub 案1 レコードセットのデータを、Access側のテーブルにループで回して、1行ずつデータ追加 案2 INTO句で直接、テーブル作成 調べていて、2通りのやり方があると思うのですが、どちらにしても、テーブルへの書き込み方がわかりません。 案1の場合、Access側のテーブルを開いてデータ追加する方法 ※同時に2つのテーブルを開くことになるのでは? 案2の場合、SQL文はオラクルで処理する為の物なので、AccessテーブルのINTO句が使えるのか? オラクルのテーブルをリンクする事も考えたのですが、実際動かすPCにはAccessRuntimeしかインストールしてませんので、オラクルのテーブルをリンクしてくれませんでした。 よい方法があれば、アドバイスを頂けたら幸いです。

  • 複数レコードのテーブルであるレコードだけ増やしたい

    お世話になります。 複数レコードがあるテーブルにて、あるレコードだけカウントアップする為のSQL文はどのように記述すれば良いでしょうか? 要件: テーブル名'名簿'の No, 名前, 更新者, 備考に 01, 芥川龍之介, ほげ太, NULLを入力し 備考は書き込みさせるためとりあえずNULLを代入しておき 名前と更新者は同じで、Noの部分だけを01~10までカウントアップさせたい 何卒、ご教授のほど、宜しくお願いします。

  • レコード内容からテーブル特定

    Oracleのデータ更新について質問させてください。 SQL文で、ある文字列を含むレコードデータを持つ、テーブルおよびレコード名を知る方法はありますでしょうか? 具体的には、DBに登録されている"google.co.jp"という文字列を"yahoo.co.jp"という文字列に全てupdateしたいのですが、 "google.co.jp"という文字列は複数のテーブルの不特定のレコードに格納されています。 全てのテーブルを1つ1つselectで見ていくしか方法は無いのでしょうか?

  • ORACLEでのSQL、シンプルな方法は?

    ORACLEでのSQL文について質問です。 SQLで条件に合うレコードがあるかどうかはどう判別するのでしょうか? 画面で2つの条件を選んで テーブル ・ステータス ・フラグ 条件に合うレコードがなければINSERT 条件に合うレコードがあればUPDATE レコードが元々あるが、画面で指定された条件から外れる場合はDELETE としたいのですが、うまくSQLが書けません。 レコードがあればupdate、なければinsertするというのは多いのですが。 何かシンプルな方法はないでしょうか。

  • ORACLEでの件数カウント方法

    素人なので教えてください。sqlplusでレコード件数をカウントしたいのですが、チョット特殊なカウント方法なのです。やりたいことは、一回のSQL文で複数カラムのレコード件数をカウントしたいのですが可能でしょうか? 例) a_cdの件数カウントの場合は、 select a_cd,count(*) from abc group by a_cd; で b_cdの件数カウントの場合は、 select b_cd,count(*) from abc group by b_cd; これを一回のSQLで、 a_cdとb_cdの件数をカウント出来ますか?

  • オラクルSQLについて

    初心者です。困っています。 テーブルC 日付_番号_ステータス 1/3____1_____Q 1/5____2_____R 1/6____5_____G 1/7____7_____P 1/20__ 9_____R 2/1___10_____R このようなテーブルを、1.日付順、2.番号順の優先順位で、選択していく為、下記のようなSQLを作成しました。 SELECT 番号 FROM テーブルC WHERE (TO_CHAR([日付],'yyyyMMdd') || [番号]) IN (select MIN((TO_CHAR([日付],'yyyyMMdd') || [番号])) FROM テーブルC WHERE (TO_CHAR([日付],'yyyyMMdd') || [番号]) > (SELECT (TO_CHAR([日付],'yyyyMMdd') || [番号]) FROM テーブルC WHERE [番号]=前回編集した番号)) ユニークなのは番号だけです。 これに、ステータス が RかPの場合 を加えたいだけなのですが、SQLが多くなりすぎて、困難になってしまいました・・・。 どなたかご教授頂ければ幸いです。

  • SQL UPDATE 文 GroupByの値を更新したい

    SQLの UPDATE文について質問させていただきます。 テーブル内のデータを日付と時間で GroupBy して カウント求めています。 求めた値(カウント)を、日付をキーにして同じテーブル内のフィールドに更新するSQLを作成したいと考えています。 GroupByして、カウントを求めることはできるのですが、 どうしても、UPDATE文を実行させることができません。 この処理は、SQLで行うことはできるのでしょうか? 下記に、UPDATE前と後のテーブルデータを記載しています。 日付   時刻 20090101 0:00  20090101 0:00 20090102 0:00 20090102 0:00 20090102 1:00 20090103 2:00 ↓ 日付   時刻 カウント 20090101 0:00 2 20090101 0:00 2 20090102 0:00 2 20090102 0:00 2 20090102 1:00 1 20090103 2:00 1 よろしくお願いいたします。