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

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

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

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

Q&A

解決済

2回答

96723閲覧

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

ametyan

総合スコア43

Oracle

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

0グッド

0クリップ

投稿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')) としたいです。

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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

総合スコア16417

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ametyan

2018/07/10 14:04

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

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

総合スコア25300

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問