質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.02%
Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

Q&A

解決済

【Oracle】case文のthen句に複数条件は書けますか?

ametyan
ametyan

総合スコア43

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

2回答

0グッド

0クリップ

86679閲覧

投稿2018/07/10 13:17

編集2018/07/10 13:38

以下のテーブルでSQLを実行しましたが、エラーとなってしまいます。
when '2' then '2' OR '3'の箇所が原因のようです。
then句には条件を2つ以上書くことはできないのでしょうか?
また、条件を2つ以上書きたい場合は他にどのような方法がありますか?

テーブルデータ

ID NAME --------------- 1 name_1 1 name_2 1 name_3 1 name_4 1 name_5 1 name_6 1 name_7 1 name_8 1 name_9
declare tmp char(1); hoge char(1); begin tmp := '&1'; select id into hoge from hoge where id = case tmp when '1' then '1' when '2' then '2' OR '3' end and name = 'name_1'; dbms_output.put_line(hoge); end; /

■補足
tmpが1のときid = '1'
tmpが2のときid = '2' OR id = '3'(または id IN ('2', '3')) としたいです。

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

回答2

0

SQL

1 case 2 when tmp = '1' then '1' 3 when tmp in('2', '3') then '2' 4 end

でいかが?

投稿2018/07/10 13:37

Orlofsky

総合スコア16248

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

ametyan

2018/07/10 14:04

追記の部分を見ていただけると幸いです。

0

ベストアンサー

SQL

1case tmp 2 when '1' then '1' 3 when '2' then '2' OR '3' 4 end

素直に読むと「tmp=2の時、2または3」ですけどそんな不確定な命令はありえないというのは理解できますよね。
CASE式
公式はちょっと分かりにくいので、こちらも。
SQL の IF 「CASE 〜 WHEN 式」

複数の条件も記述できます。

SQL

1case when tmp='1' then '1' 2 when tmp='2' or tmp='3' then '2' 3end

追記

質問の追記に対する追記※修正

SQL

1select id into hoge 2from hoge 3where ( 4 (tmp='1' and ID='1') or (tmp='2' and ID in ('2','3')) 5 ) 6and name = 'name_1';

投稿2018/07/10 13:32

編集2018/07/10 14:25
sazi

総合スコア24573

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

回答へのコメント

ametyan

2018/07/10 13:50 編集

ご回答ありがとうございます。 追記のSQLを実行してみましたが、「キーワードがありません」とエラーメッセージが出てしまいます。 どこが間違っているのかが分からないのですが、教えていただけますか?
sazi

2018/07/10 14:06

メッセージコードも含めて具体的なエラーは何でしょう? 怪しいのはtmpのところですけど。 tmpを試しに'1'にしたら、selectの部分ではエラーにはならないはずです。
ametyan

2018/07/10 14:09 編集

下記のようなエラーメッセージが出力されます。 ``` エラー・レポート - ORA-06550: 行13、列28: PL/SQL: ORA-00905: キーワードがありません。 ORA-06550: 行8、列1: PL/SQL: SQL Statement ignored 06550. 00000 - "line %s, column %s:\n%s" *Cause: Usually a PL/SQL compilation error. *Action: ``` ``` declare tmp char(1); hoge char(1); begin tmp := '1'; select id into hoge from hoge where case tmp when '1' then id = '1' when '2' then id in ('2', '3') end and name = 'name_1'; dbms_output.put_line(hoge); end; / ```
sazi

2018/07/10 14:26

CASEで評価式(ID='1')を結果にはできないみたいですね。すみません。 回答をcaseではない条件で修正しました。
ametyan

2018/07/10 14:28

修正していただき、ありがとうございます。 無事に実行できました。 夜分遅くまで、ご丁寧に対応していただき、ありがとうございます。助かります。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.02%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。