2016-10-28 24 views
0

定義済みの変数に従ってwhere句で選択を実行する必要があるクエリを作成しようとしています。where句がある場合のケース

私のスクリプトは次のようになります。私はまさにやりたい何

def schd_yn ='Y'; 
def clin_schd = '1,2'; 

CREATE TABLE TEMP_SUBOPT AS 
    SELECT * 
    FROM P112921.SCHEDULE_DATA  
    WHERE clin_sch IN (CASE WHEN '&schd_yn.' = 'Y' 
          THEN &clin_schd. 
          ELSE clin_sch 
         END) 
; 

がschd_ynがNに設定された場合には、私のソースからすべてのデータを取る、とにclin_schdで定義された値のみを取ることですcase schd_ynがYに設定されます。

このソリューションは、clin_schedに1つの値しか持たない場合にうまく機能します。

これらの組み合わせはうまく機能:

def schd_yn='Y'; //takes only clin_sch=1 
def clin_schd='1'; 

def schd_yn='N'; //takes everything as expected 
def clin_schd='1'; 

これらの組み合わせが正常に動作し、エラーが発生しません:

def schd_yn='Y'; 
def clin_schd='1,2'; 

def schd_yn='N'; 
def clin_schd='1,2'; 

は、誰かがこの作業を行う方法を知っていますか?

はありがとう

+3

それは 'WHERE'句で代わりに' case'式の 'AND' /' OR'を使用することが一般的に良いでしょう。 – jarlh

+1

SQLでカンマ区切りの値を使用しないでください。それはあなたに多くのトラブルを引き起こすだけです。 – jarlh

+0

@a_horse_with_no_name:sqldeveloperタグには削除してはいけません。このスクリプトはSQL Developer固有のものだからです。もう一度タグを追加しました。 –

答えて

0
あなたはこのように使用することができ

WHERE (&schd_yn = 'N' OR clin_sch = &clin_schd) 

あなたが求めている:私はあなたがこのロジックたいと思います

select ... 
from 
your_table 
where 
def schd_yn='Y' and def clin_schd='1' 
union all 
select ... 
from 
your_table 
where 
def schd_yn='N' and def clin_schd='1'; 
0

を何I私のソースからすべてのデータを 場合schd_ynがNに設定され、且つケースschd_ynに clin_schdで定義された値のみを取るためには、schd_ynのみ'N'または'Y'(妥当な仮定できる場合に、

上記作品をYに設定されています私の意見)。より正式に、あなたがしたいように見える:

WHERE (&schd_yn = 'N' OR (&schd_yn = 'Y' AND clin_sch = &clin_schd)) 
+0

私はそれが私のschd_yn = 'N'なら、それは私が欲しいと思う論理だと思うが、それを残すのが理にかなっているだろう._scchd = '' これは、しかし、 – martinlegrand

関連する問題