2

CommandNameボタンのに基づくパラメータを使用するOracleクエリを作成しようとしています。

これが私の質問です

SELECT id 
FROM table 
WHERE dateTime IS (CASE WHEN :CommandName = 'FIRST' THEN NULL ELSE NOT NULL END)

だから私はパラメータを渡していますが、それは機能していません-私はただMissing NULL keywordエラーを受け取っています

基本的に、入力されたパラメーターに基づいて2つの別々のクエリを作成する必要はありません。

これが可能かどうか、またはこれが正しい方法であるかどうかさえわかりませんか?

何か案は?

4

3 に答える 3

4

CASEステートメントをもう少し読みたいと思うかもしれません。

次のコードが必要だと思います。

SELECT
    id 
FROM 
    table 
WHERE 
    (
        (dateTime IS NULL AND :CommandName = 'FIRST')
        OR
        (dateTime IS NOT NULL AND NVL(:CommandName, '') <> 'FIRST')
    )
于 2012-07-23T17:12:54.630 に答える
1

動的SQLを使用して文字列「NULL」または「NOTNULL」を返すことなく、次の2つのNVL()関数を使用できます。

select id
from table
where NVL(dateTime,'FIRST') = NVL(:param,dateTime);

ただし、dateTimeにインデックスが付けられている場合(およびOracleがNULLにインデックスを付けることができる場合)、NVL()関数はインデックスを無効にします。

于 2012-07-23T17:12:28.450 に答える
0

私はそれを思います

SELECT id 
FROM table 
WHERE (dateTime IS NULL AND :CommandName='FIRST') OR (dateTime IS NOT NULL AND :CommandName <> 'FIRST')

あなたが必要なことをする必要があります。

于 2012-07-23T17:11:42.257 に答える