• 締切済み

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

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

みんなの回答

  • dda167
  • ベストアンサー率76% (55/72)
回答No.2

シンプルかどうかはともかく、10g以降ならMerge文が使えます(9iではDeleteできない)。

すると、全ての回答が全文表示されます。
回答No.1

以下のURLでリストをたどってください。それで分からないのなら、あなたには無理です。 http://search.yahoo.co.jp/search?b=1&n=10&ei=UTF-8&fr=ie8sc&p=%22Oracle%22+%22SQL%22+%2B+%22%E6%BC%94%E7%AE%97%E5%AD%90%22 http://otndnld.oracle.co.jp/document/products/lite10g/10.2.0/html/B19286-02/sqopr.htm など、また、 http://search.yahoo.co.jp/search?b=1&n=10&ei=UTF-8&fr=ie8sc&p=%22Oracle%22+%22SQL%22+%2B+%22%E6%A7%8B%E6%96%87%22 http://otn.oracle.co.jp/document/sqlconst/ など、 http://search.yahoo.co.jp/search?b=1&n=10&ei=UTF-8&fr=ie8sc&p=%22Oracle%22+%22SQL%22+%2B+%22%E3%82%B9%E3%83%86%E3%83%BC%E3%83%88%E3%83%A1%E3%83%B3%E3%83%88%22 http://blog.livedoor.jp/akf0/archives/51327468.html なんて、失敗だんなどのテクニック情報もみつかる。ん、こんなのも見つかった。 http://www.oracle.co.jp/forum/thread.jspa?threadID=35001694 http://otn.oracle.co.jp/forum/message.jspa?messageID=35013648#35013648 内容を見ると、このOkWaveにも同じ質問があった。同一人物でしょう。聞きまわるのがいいが、回等している人間も、似た場所を見ている事が多い。

すると、全ての回答が全文表示されます。

関連するQ&A

  • 【sqlite3】deleteしても.dbファイルのサイズは減らない?

    DB及びSQLに詳しい方、教えてください。 sqliete3を使ってます。 insertしたレコードをdeleteしても.dbファイルのサイズは小さくならない 様なので、テーブルのカラムに削除フラグを設けて、削除はdeleteコマン ドでレコードを削除する代わりに、フラグのupdateとし、 レコード挿入の場合は、フラグが立ってるレコードを見つけて、そのコー ドを更新(フラグが立ってるレコードが無い場合はinsert)とする仕様に してみようかと考えてます。 もちろんselect時は、フラグの立ってるレコードをwhere句で除外するつも りです。 そこで、質問なのですが、フラグの立ってるレコードを一つselectして該 当レコードをupdateするには、どのようなSQLになるでしょうか? フラグが立つレコードは複数もしくは無い事が考えられるので、例えば、 update table01 set col = 'hogehoge' where flag = 1; では上手く機能しないと考えます。 複数レコードが選択された場合は、任意のレコードを選んで更新、また、 レコードが一つも選択されなかった場合の条件判定(後のinnsert)は、 どのように記述したらよいのでしょうか? ※そもそも、そんな事しなくても他にもっと良い方法があるよ。  といった場合は、その方法を伝授してください。 それでは、ご指導のほど、宜しくお願いいたします。

  • OracleとSQL ServerのSQL文上での差異について

    お世話になっております。 もしOracleやSQL Serverに関してご存知の方が いらっしゃいましたらご教授ください。 今、業務で 「Oracleに載せるシステムをSQL Serverで載せられないか?」 という話が出ており私が調査を行う事になりました。 しかし私のSQL Server経験が浅い為困っている点があります。 (以下の質問は当然ですがシステムで動く・動かない の話はヌキにしてのSQLレベルでの話です) ・Oracle特有のSQL構文をSQL Serverに見合った構文に 直すことによって(DATE→datetime/NUMBER→int等)一般的な SELECT文、INSERT、UPDATE、DELETE文はそのまま使う事が可能か? ・上の件に関する経験をお持ちの方・知識のある方にお聞きしますが 何かこの件に関する注意点などありますでしょうか? の2点になります。 どうかご存知の方がいらっしゃいましたらお願い致します。

  • oracleのSQLパフォーマンスについて

    oracleのSQLパフォーマンスについて質問です。 当方、SQLは初めてで、ずぶの素人ですが、SQLパフォーマンスを改善することになりました。 質問の仕方も悪いとは思いますが、お力添えをいただきたいと思います。 【質問1】 DBのレコード件数は、SQLパフォーマンスにどう影響するでしょうか?以下例のようなことが知りたいです。 例1 INDEXのないテーブルに対しSQLを発行する場合、レコード件数の多いDBとレコード件数の少ないDBでは、レコード件数が少ない方が、パフォーマンスが良い? (前提として、検索対象DBは、レコード件数以外に差がないとする) 例2 WHERE句にINDEX項目を使用した場合、DBのレコード件数はパフォーマンスに影響しない (前提として、アクセスパスは適切で、検索対象をうまく絞り込むことができる) 例3 WHERE句にINDEX項目を使用したSQLをレコード件数の多いDBに発行する場合と、WHERE句にINDEX項目がないSQLをレコード件数の少ないDBに発行する場合では、どちらがパフォーマンスがよいのか (前提として検索対象DBは、レコード件数以外に差がないとする) 【質問2】 INDEXをDBに追加すると、INSERT、UPDATE、DELETEの際に、どのくらい影響するのでしょうか? 対象のDBは、5項目あり、400万件くらいのレコードがあります。また、複合項目(2項目)のプライマリキーと、単一INDEXがついており、新たに3項目の複合INDEXを追加しようとしています。 以上、よろしくお願いいたします。

  • VBでSQL

    SQLでテーブル1に該当レコードがなければインサート あればアップデートをする処理をしたいのです IF ??? THEN UPDATE テーブル1 SET SELECT * FROM テーブル2 WHERE 条件 ELSE INSERT INTO テーブル1(SELECT * FROM テーブル2) END IF ???はプライマリキーで判定をしようと考えています こんな感じでやろうとしたところ うまくいきませんでした VB上で実行しよううとしているからなのでしょうか? ADOでSQLサーバに接続しています 条件分岐もどういう条件(VBでの書き方)がわからないです。 よろしくお願いします。

  • ORACLEのトリガーについて勉強しているのですが現在詰っています。

    ORACLEのトリガーについて勉強しているのですが現在詰っています。 トリガーの内容ですが、table1のレコードがUPDATEかINSERTかDELETEが 実行された時にtable2にそのレコードすべてをINSERTしたいのですが CREATE OR REPLACE TRIGGER test_trg After INSERT or UPDATE or DELETE on table1 for each row  BEGIN   if inserting then    insert into (?);   elsif updating then    insert into (?);   else    insert into (?);   end if;  END; tableを使ってログを残せるようにするためこのトリガーを作ろうとしています。 この様な感じになると思っているのですが、(?)の部分をどう書けばいいのか がよくわかりません。どうしても解らないので教えていただければ幸いです。 何卒よろしくお願いします。

  • SQL文です。フラグがオンの率を出したい。

    あるテーブルに、0か1かが入るフラグとして用いる項目があるとします。 そのテーブル全体のレコード数の内、フラグがオン(=1)のレコードは何%かを出すなら、どのようなSQL文になるでしょうか? SQL Server(2012あたり)です。 よろしくお願いします。

  • 大量レコードをTRUNCATEせずにすばやく削除する方法

    大量レコードをTRUNCATEせずにすばやく削除する方法 100万レコードあるテーブルのうち1万レコードを残して削除したい。TRUNCATEではWHERE句が指定できないので不可。DELETEでは遅すぎる。何かいい方法はないでしょうか? 1万レコードを一時テーブルに退避してTRUNCATE後に1万レコードをINSERTというのは無しです。1万レコードが1秒でもテーブル上から消えてはいけません。 Oracle10g

  • Oracle 10g 複数のDELETE UPDATE INSERT文

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

  • オラクル10で特定のレコードの複写を行うSQLはあるのでしょうか?

    オラクル10で特定のレコードの複写を行うSQLはあるのでしょうか? レコードにはユニークキーがあるので、そのまま複写はできないと思いますが、 この場合は他の言語で素直にそのレコードを変数に読み込んで、ユニークキーをセット後、 INSERTで発行する手段しかないのでしょうか?

  • T-SQLで

    SQL Server2005でストアドプロシージャを作ろうと思うのですが、カーソルにパラメータを実装できないそうで困っています。 やりたいことは、 「ワークテーブルからSELECTして、別のテーブルにINSERT or UPDATEする」 です。 ワークテーブルからSELECTするところをカーソルにするのですが、SELECT条件は可変なので、その部分をパラメータでカーソルに渡したいのです。 Oracleならできたんですが・・・。 どうすれば実現できますか?

このQ&Aのポイント
  • お使いのkx-pd215-wでコピーができない問題について解決方法をご紹介します。設定やボタン操作に問題がある場合、印刷されない紙が出てくる原因や対処法などについて説明します。
  • お困りの時に、kx-pd215-wのコピーで印刷されない問題が発生する原因とその対処方法をお伝えします。Windowsでの接続方法や無線LANの設定、関連ソフトや電話回線の種類についても詳しく説明します。
  • kx-pd215-wを使用している際にコピーができないトラブルについて解決策をご紹介します。Windowsでの設定や接続方法、紙が出てこない原因や印刷のエラーについても説明します。また、お困りの状況に応じてアナログ回線や光回線などの電話回線の種類についても触れています。
回答を見る

専門家に質問してみよう