- - PR -
スペースを条件にしたUpdate
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-12-23 22:12
現在、Oracle10GでPL/SQLの開発を行っています。
基本的な事かもしれませんが、質問させてください。 テーブルA.1に格納されている値にスペースが存在した場合、 テーブルA.1のスペースより以前の値をテーブルB.1へ更新 テーブルA.1のスペースより以後の値をテーブルB.2へ更新 EX) テーブルA.1の内容:012345 6789 テーブルB.1の内容:012345 テーブルB.2の内容: 6789 といったUpdateを行いたいのですが、実現できる方法はありますでしょうか。 よろしくお願いします。 |
|
投稿日時: 2006-12-24 12:39
文字列中にスペースが存在するか→INSTR
(もしくは WHERE 条件で LIKE を使う) 文字列を切り出す→SUBSTR といった関数を使うと実現できると思います。 テーブルB.1というのがテーブルを指しているのか(とすればカラム名が不明)カラムなのか、テーブルB.1とテーブルB.2は違うテーブルなのか同じテーブルの別カラムなのか、更新のキーカラムは何かなどがわかりませんが、上記太字の語とSQLを条件にしてネット上で検索してみるとよろしいかもしれません。 (ちなみに、太字の語自体も「SQL 文字列」で見つけられます。) |
|
投稿日時: 2006-12-26 20:19
Gioさん回答ありがとうございました。
無事、対応が完了できました。 今後とも宜しくお願いします。 |
|
投稿日時: 2006-12-27 10:51
詳しくは技術系メーリングリストで質問するときのパターン・ランゲージを参照していただきたいのですが、yurayura さんが投稿された問題に対してどのような解(きちんと動くコード)をまとめとして書いておくと、他の方が似た問題に出会った時の参考になります。
(自分一人の問題が解決したからよいという考えには決して陥らないでください。) ということで、どのようなクエリによって解決できたかを投稿していただけないでしょうか。 個人的に B.1 と B.2 が別テーブルなのか同一テーブルの別カラムなのか、特に前者である場合にトランザクション制御は大丈夫かなど、興味があります |
|
投稿日時: 2006-12-27 13:13
お世話になります。
これ以外にも方法は他にもいろいろあると思いますが、 簡潔に記載すると私の場合は、このようなコードで解決しました。 --テーブルA.1のスペースの取得 SELECT INSTR(テーブルA.1,' ') INTO SPACE FROM テーブルA ※条件略 --テーブルA.1の桁数取得 SELECT LENGTH(テールA.1) INTO LEN FROM テーブルA ※条件略 --スペースが存在したら IF SPACE <> 0 THEN --テーブルB1の更新(スペースより前) UPDATE テーブルB SET テーブルB.1 = SUBSTR(テーブルA.1,0,SPACE - 1) --テーブルB1の更新(スペースより後) UPDATE テーブルB SET テーブルB.2 = SUBSTR(テーブルA.1,SPACE + 1,LEN) --スペースが存在しなかったら ELSIF SPACE = 0 THEN UPDATE テーブルB SET テーブルB.1 = テーブルA.1 END IF; Gioさんの質問ですが、 >B.1 と B.2 が別テーブルなのか同一テーブルの別カラムなのか ⇒B.1 と B.2は同一テーブルの別カラムです。 |
|
投稿日時: 2006-12-27 14:33
解決策を回答していただき、ありがとうございます。
細かいことを上げると、
等々ありますが、他の方が似た問題に出会った時に参考になる情報としてまとまっていると感じました。 |
|
投稿日時: 2006-12-27 17:26
お世話になります。
IF分の条件やUPDATEの条件が、各UPDATE単位に異なっており省略してしまいました。。。 回答例文では確かにGioさんのおっしゃる通りです。 今後とも宜しくお願いします。 |
1