• ベストアンサー

oracle10g update件数の取得方法

oracle10g update件数の取得方法 pl sql(stored procedure)で複数のupdate文を適用します。update後にupdateしたレコード件数をログテーブルにinsertしたいのですが、updateしたレコード件数を取得する方法はありますか?

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

質問者が選んだベストアンサー

  • ベストアンサー
  • muyoshid
  • ベストアンサー率72% (230/318)
回答No.1

こんにちわ。 > updateしたレコード件数を取得する方法・・・ SQL%ROWCOUNTT で取得できます。 こんな感じです。 begin  update hogehoge set ・・・;  cnt := SQL%ROWCOUNT;  insert ・・・ (table_name, update_cnt) values ('hogehoge', cnt);  commit; end;

関連するQ&A

  • Oracle 10g 複数のDELETE UPDATE INSERT文

    Oracle 10g 複数のDELETE UPDATE INSERT文をプロシージャにまとめたところパフォーマンスが落ちてしまいました 1個ずつ適用するのは正直めんどくさいので プロシージャにまとめて実行しても パフォーマンスを落とさない方法はありますか? プロシージャ内ではSQL1つごとにComittしているのでTransactionが原因でパフォーマンスが落ちているということはありません

  • 一気に複数のレコードをinsertする方法について

    SQLのinsert文で一気に複数のレコードを挿入する方法ってありますか? SQL*LoaderとPL/SQL以外でお願いします。

  • 動的SQLの処理件数

    PL/SQL中でSQL文を文字列に入れて、動的SQLを実行するんですが、その後にSQL%ROWCOUNTで処理件数ってとることってできますか? 自分のソースが問題なのか、動的SQLに原因があるのか悩んでいます。環境はOracle8iです。

  • 膨大なデータの有効な移行方法は?(Oracle10g)

    現在1000万件近くデータがあるテーブルをパフォーマンス向上のため、パーティション化することを考えています。 環境は、Oracle10gです。 一旦、パーティション・テーブルを作成した後、データを移行する必要がありますが、 その方法に以下を考えました。  ・Accessのクエリを使って「追加」  ・ObjectBrowserでInsert文を出力し、それでInsert 膨大な件数ですので、どちらにしろ時間がかかります。 どちらかというと、後者のほうがいいのかなぁと思いましたが…。 もしこれ以外に有効な方法(10gに用意されているツール等)がありましたら、ご教授願えませんでしょうか?

  • Oracle10g、SQLコンパイルした日時一覧の出し方

    お世話になります。 Oracle10gにて、PL/SQLのプロシージャをコンパイルした日時を一覧にしてテキストファイルに出力するか、コピペでエクセルか何かに貼り付けて、正しくコンパイルされたプログラムが動いていることの確認に使いたいのですが、プロシージャ毎のコンパイル日時(更新日時?)を出すようなSQL文をご存知でしたら教えてください。 よろしくお願いします。

  • ブロンズからPL/SQL 開発者の資格取得を目指していいか

    ORACLE MASTER Bronze Oracle Database 11gは取得しました。 次はORACLE MASTER Silver Oracle PL/SQL Developerの資格を取得したいと思います。 ですが、先にORACLE MASTER Silver Oracle Database 11gを取得しておいた方が、PL/SQLの資格を取得するにあたって知識の習得が楽になるのでしょうか?

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

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

  • SQLの結果の取得方法について。

    件名の件でいくつか質問があります。 そもそも質問がおかしいということがあるかもしれませんので、もしそうだった場合はご指摘頂けると嬉しいです。 1.SQLの結果の取得方法はResultSetで複数行を取得する方法とカーソル(こっちもクラスはResultSet?)で1行ずつ取得する方法の2種類があるのでしょうか?  ※ PL/SQLなどではなくjavaでの実装になります。  またカーソルで取得する実装方法など参考になるサイトがありましたら教えて頂けると助かります。  PL/SQLのサイトばかりがヒットしてしまいまして・・・。 2.ResultSetで取得した場合、全部のレコードをメモリに展開するのでしょうか? それとも1行(もしくは複数行)毎にDBから実データを取得するのでしょうか。  自分で調べたところではResultSetの実装によるということですが、一度にメモリに展開するドライバもあれば、1行や複数行で展開するドライバもあるということでしょうか。  例えばOracleやDB2やPostgreSQLなどがどのような実装であるかはよく分かりませんでした。  それぞれがどのように実装されているか調べるにはどのようにすればよいでしょうか。 3.巨大なレコード数を結果として取得する際はResultSetで取得するとメモリを圧迫するから、1行ずつ取得した方がパフォーマンスがいいかもしれないとサイトで見たのですが、これはカーソルを使用するということでしょうか?  それともsetFetchSizeで1行指定をしてResultSetで取得するということでしょうか。 4.setFetchSizeは1文にしか反映されないと、どこかのサイトでみたのですが、1文というのはSQL1回ということでしょうか。  同じStatmentで違うSQLを発行する場合は発行毎にsetFetchSizeを呼び出すということでしょうか。  それとも例えば1SQLの結果が100レコードでsetFetchSizeを10にした場合、ループ内で10回setFetchSizeを設定しないといけないということでしょうか? 調べている動機はたくさんのレコードを取得するSQLがあるのですが、フェッチ?カーソル?で取得した方がパフォーマンスがいいのではという話を受けたのですが、その人もあまり詳しくなく、ネットで調べていたのですが、上記のような疑問が中々解消できず質問させて頂いた次第です。 よろしくお願い致します。

    • ベストアンサー
    • Java
  • 表名を動的SQLで

    表名にYYMMなどがついているケースで、 動的に表名を使用したいのですが、 INSERTやUPDATE文で動的に表名を 使用する方法をご教授願えませんか? 環境はOracle9iのpl/sqlです。 宜しく御願い致します。

  • SQL 件数取得を速くしたい

    SQLでテーブルなどからSELECTされた件数を得る際に、 select count(*) from ~ 等とするかと思いますが、この結果が返ってくるのが遅くて困っています。 少しでも速く件数を得たいのですがどのような方法がありますでしょうか? 教えてください。 私が使っている環境はOracle 8iで 特に今回はgroup byを含むビューからの検索を行おうとしています。