こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

オラクルデータベース抽出方法について

現在、Oracle11gを使用したデータベースより、データを抽出するSQL文を作成してるのですが、「障害管理情報.受付者」、及び「障害管理情報.二次対応依頼先」がブランクの場合、主キーの一貫番号と一致したデータを抽出する条件を回避するSQL文がうまく動かなくて困っています。

SQL文は、下記と成ります。

SELECT 障害管理情報.管理NO , 障害管理情報.情報区分 , TO_CHAR(障害発生日時, 'YYYY/MM/DD HH24:MI') , TO_CHAR(障害受付日時, 'YYYY/MM/DD HH24:MI') , 障害管理情報.部門 , T_サイト情報.顧客名 , T_サイト情報.サイト名 , 連絡先情報.姓 || ''' ' || 連絡先情報.名 , T_ユーザ情報.姓 || ''' ' || T_ユーザ情報.名 , 障害管理情報.状況 , 障害管理情報.現象 , 障害管理情報.原因 , 障害管理情報.対策 , 障害管理情報.備考 , 障害管理情報.対策完了日時 , T_サイト情報.部門サイトコード , 障害管理情報.受信区分
FROM 障害管理情報 , T_サイト情報 , 連絡先情報 , T_ユーザ情報
WHERE ( CASE WHEN 障害管理情報.受付者コード Is Not Null THEN 障害管理情報.受付者コード Else 連絡先情報.一貫番号 End =連絡先情報.一貫番号) AND (CASE WHEN 障害管理情報.二次対応依頼先コード Is Not Null THEN 障害管理情報.二次対応依頼先コード Else T_ユーザ情報.一貫番 End =T_ユーザ情報.一貫番)

このSQL文のCASE条件文で、「障害管理情報.受付者コード」、及び「障害管理情報.二次対応依頼先コード」 がブランク(Null)の場合、「連絡先情報.一貫番号=障害管理情報.受付者コード」、及び「T_ユーザ情報.一貫番号=障害管理情報.二次対応依頼先コード」の条件を回避するように、記述しているのですが、エラーが発生します。「’’T_ユーザ情報"."一貫番号":無効な識別子です。」とのメッセージがでます。何か、記述が間違っているのでしょうか。このCASE条件文でエラーが出ているのは確かです。又、他に良い方法があればご教示願います。

ちなみに、CASE条件文を下記の条件文にすると、うまくいくのですが、「障害管理情報.受付者コード」、及び「障害管理情報.二次対応依頼先コード」がブランク の場合、ブランクが主キー「連絡先情報、及びT_ユーザ情報」の一貫番号にないため、該当するデータが抽出できません。
下記条件文:
( 連絡先情報.一貫番号=障害管理情報.受付者コード ) AND ( T_ユーザ情報.一貫番号=障害管理情報.二次対応依頼先コード )

投稿日時 - 2018-04-03 02:20:42

QNo.9484518

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

コードが長いですね。

・CASE式の使用方法が間違っているのでエラーが出ています。
CASE aaa
WHEN 111=222 THEN bbb
ELSE 333=444 THEN ccc
END;
です。

・NULL判定ならNVLを使用した方が可読性が上がります。

・「ブランク」が何を表しているのか不明ですが、本当にブランク=NULLなんでしょうか。

投稿日時 - 2018-04-04 10:38:12

お礼

ご教示有難う御座います。

下記、条件文を実行したら、「キーワードがありません。」とのメッセージが表示されます。

WHERE (CASE WHEN 障害管理情報.受付者コード Is Not Null THEN 連絡先情報.一貫番号=障害管理情報.受付者コード ELSE 障害管理情報.受付者コード Is Null THEN 連絡先情報.一貫番号=連絡先情報.一貫番号 END)
AND (CASE WHEN 障害管理情報.二次対応依頼先コード Is Not Null THEN T_ユーザ情報.一貫番号=障害管理情報.二次対応依頼先コード Else 障害管理情報.二次対応依頼先コード Is Null THEN T_ユーザ情報.一貫番号=T_ユーザ情報.一貫番 END)

コードが長くてすみません。

初歩的なことが分かっていないのかもしれませんが、CASE aaa のaaa 何を意味しているのでしょうか。具体的に、記述したSQL分のテーブル.列を示してご教示を、お願いします。
宜しくお願い致します。

投稿日時 - 2018-04-04 23:53:06

あなたにオススメの質問