• 締切済み

ループでCOMMITのUPDATE実行したい。

SQL初心者です。Oracle 10gで大量データをUPDATEする事になり、 初めてFETCHなどの存在を調査し、知りました。 http://www.shift-the-oracle.com/plsql/fetch-across-commit.html を参照し、『フェッチ・アクロス・コミット 使用例』を実行してみたのですが構文エラーになってしまいます。 テーブルなどは存在していることは確認できています。 そもそもこれは使用例の一部であり何か足りないのでしょうか? また、SQLを発行する際はObject Browserから発行してます。 教えてください。宜しく御願いします。

  • Oracle
  • 回答数4
  • ありがとう数7

みんなの回答

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.4

票の名前や、項目名はhogeとかhoge1に変えて,SQLやPL/SQの文を提示して下さい。 そうでないと、コメントのしようがありません。

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.3

>FOR vRec IN (SELECT * FROM dual) LOOP >--UPDATE テーブル名 SET name = vRec.selectしたカラム; >COMMIT ; >END LOOP; SELECT * FROM dual まさか本当にdualからのSelectじゃないよね。 このUPDATEだとFORの最終レコードの値で更新ですね。 途中のレコードなんか関係ないですが。 エラーも無いようだし。

zhudao
質問者

お礼

dualから実施ではありません。 細かいごみが入っていたようです。 すみませんでした。

zhudao
質問者

補足

回答ありがとう御座いました。 このセレクト文にWHERE条件を設定していたことがミスの発端となったのですが、今、そのWHERE文を追加してもループがそこを見ないで関係なくUPDATEしてしまうのですが何か分かりますでしょうか?

回答No.2

-------------------------------------------------------------------------------- declare begin FOR vRec IN (SELECT * FROM dual) LOOP --UPDATE テーブル名 SET name = vRec.selectしたカラム; COMMIT ; END LOOP; end; PL/SQLが実行されました(15 msec.) --------------------------------------------------------------------------------

zhudao
質問者

お礼

回答ありがとう御座いました。 このセレクト文にWHERE条件を設定していたことがミスの発端となったのですが、 今、そのWHERE文を追加してもループがそこを見ないで関係なくUPDATEしてしまうのですが何か分かりますでしょうか?

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

構文エラーなら構文を調べればいいんじゃない。 構文エラーの内容が不明なので答えようがないです。 Object Browserのサポートに相談するとか。

zhudao
質問者

お礼

回答ありがとう御座いました。 その通りです。すみません。構文エラーはなくなったのですが、 今度はSELECT文にWHERE条件を使用しているのに、関係なくLOOPしてしまうのですが何か分かりますでしょうか?構文エラーはなくなりました。

関連するQ&A

  • select実行時のロックとcommitについて

    お世話になっております。 WEB上で検索すると、select実行時にもロックを取得しcommitもしくはrollbackを実施していることがわかりました。 そのことについて数点疑問を持ち調査したのですが、わかりませんでした。 どなたかわかる方ご教示ください。 (1) select発行時にロックを取得しcommitもしくはrollbackするという認識は正しいでしょうか。 (2) 通常SQLに不備が無ければselectは正常に終了すると思いますが、 rollbackするのはどのような状況でしょうか。 selectのSQLに不備があった場合でしょうか。 (3) コンソールからselectを発行するとcommitせずとも結果が出力されます。 このcommitされるタイミングはいつになるのでしょうか。 (4) WITH URオプションを使用するとロックを取得しないと思いますが、 ロックを取得しないということはcommit/rollbackも実施されないという認識は正しいでしょうか。 (5) commitコマンドを発行するとアクティブログに追記されるという認識なのですが、 WITH URオプションなしでselect文を発行してもアクティブログに追記されるものでしょうか。 それともテーブルの更新など実施しないので、アクティブログは更新されないのでしょうか。 (6) WITH URオプションをつけてSELECTを実施した場合はアクティブログは更新されないでしょうか。 (7) EXPORTコマンドを実行した場合も(5)(6)と同様という認識で正しいでしょうか。 以上になります。 よろしくお願いいたします。

  • ORACLE PRO*CからPLSQL(パッケージ)を使用した場合のトランザクション処理について

    ORACLE PRO*CからPLSQL(パッケージ)を使用した場合のトランザクション処理について教えて下さい。 ORACLE PRO*CからPLSQL(パッケージ)を呼び出して います。PLSQLの中でコミット・ロールバックせずにPRO*C側で制御したいのですが。PLSQL(パッケージ) 内で別のPLSQLを呼出したり、BEGIN-ENDを多様すると PLSQL内で自動的にコミットが発生している様に思わ れます。何か方法はないものでしょうか。 御存知の方、御教示をお願いします。

  • DB2でSelectした時(rollback,commitの必要性)

    Oracleでの開発が長く、DB2は初めてなので戸惑ってます。 OracleでSelect文を発行する時はトランザクション処理が発生しているわけではないので、rollbackやcommitはしないのですが、DB2を使った今回のシステムではselectをした後でrollbackやcommitを使用するように設計書記述がされています。 必要ないような気がするのですが、DB2ではSelectでも必須なのでしょうか? ご回答よろしくお願いします。

  • OracleDBの環境がなくてもSQL実行結果を試す方法

    仕事で、Oracleのデータベースを使用してSI OBJECT BROWSERからSQLを書いて実行結果を試し、正しく動くようならプログラムの方に使っています。これは仕事の環境で、やりたい事というのは自宅でSQLの練習をする事なのですが、この環境は簡単に作れないので悩んでいます。データベースはエクセルに出力したものがあるのでそれを使用してOracleSQLの実行結果を試す方法はありませんか?ご存じの方教えて下さい。お願い致します。

  • SQL文で変数の使用

    VB6.0でオラクルDBにSQL文を発行したいのですが、 変数の値を使用して更新(update)や追加(insert) 処理を行うときの構文がわかりません。 どなたか教えてください。

  • カーソルエラー

    カーソルエラーについて質問です。 phpからpearを使ってoracleへ接続しています。 バッチ処理で大量にSQL文(SELECT,INSERT,UPDATE)を発行したいのですが、カーソルエラーになってしまいます。 途中の処理でエラーになった場合はロールバックしたい為最後までコミットできません。また、なるべく少ないSQL発行で済むようにプログラムを組み替え済みです。 で、少々手詰まりといった状況なのですが、コミットする以外でカーソルエラーを回避する方法はあるでしょうか? DB設計から見直さないとだめですかね…。

    • 締切済み
    • PHP
  • DBロックを待ち続ける方法

    ロックがかかったテーブルに対して、 SELECT文を発行する際、ロックが解除されるまで 待ち続けるヒント句のようなものは SQL SERVERに存在するのでしょうか? (Oracleの「SELECT~FOR UPDATE文」に相当するものは  存在しないのでしょうか?) 使用しているDBはSQL SERVER 2000 です。

  • プロシージャの全検索?

    Oracle9i(9.0.1.0.1) Windows2000でSI Object Browserを使用しています。 プロシージャの全検索をしたいのですが可能でしょうか? (プロシージャの中身が格納されているディクショナリって存在するのでしょうか) 今はオブジェクトブラウザからプロシージャをスクリプト出力して、他のエディタツールで全検索をかけています。 たとえば'aaa'というキーワードがどのプロシージャに含まれているか検索したいです。 いい方法がありましたら教えてください。 宜しくお願いします。

  • .get○○Info(); メソッド についての意味

    質問させていただきます。 Javaの構文なのか、OracleやSQLなどのデータベースの構文なのか 解らないのですが、MVCモデルで開発中にプログラム中に、 「.get○○Info();」といったものが出てきました。 この「.get○○Info();」は多分メソッドだと思うのですが、 どういった意味を持つものなのでしょうか? インターネットで検索しても、0に近いくらいまったく出てきません。 でも、プログラム中にあるからにはやはり 「.get○○Info();」は存在する構文だと思うので どなたか教えていただけませんか? 宜しくお願いします。

    • ベストアンサー
    • Java
  • WHILEで取り出しループ中にさらにSQL文を入れたいです。

    こんばんは。 いつもお世話になっております。 またはまってしまったみたいで、どうにもわからなく なってしまいました。 どうかご指導よろしくお願いいたします。 使用環境はPHP5+Apche+MySQL4.0です。 2つのテーブルから【一覧リスト】というページを作って mysq_fetch_array関数で、行をループで呼び出しました。 ここまでは出来たのですが、取り出したキー情報を もとに、別テーブルの情報(文字列)を取り出したい のです。 以下、試してみたコードです。 //SQL発行 $rs = mysql_query("select * from uriage", $conn); //1件ずつ取り出すループ while( $rec = mysql_fetch_array( $rs, MYSQL_ASSOC)){ echo "<tr>"; echo "<td>".$rec['oder_no']."</td>"; $sql = "(select*from syouhin where syouhin_id = '".$rec["syouhin_id"]."')"; $res = mysql_query($sql); $rows = mysql_fetch_array($res); echo $rows["syouhin_name"]; echo "<td>".$rec['siiresaki']."</td>"; echo "<td>".$rec['tanka']."</td>"; echo "</tr>"; } Parse error: syntax error, unexpected T_ECHO というエラーが返ってきています。 エラーの行数はecho $rows["syouhin_name"]; の部分です。 何が悪いのかすら判らなくて…。 どうか、ご指導よろしくお願いいたします。

    • ベストアンサー
    • PHP