我正在嘗試爲網站開發PUT方法。我正在使用以下代碼來確保用戶輸入的信息與更改數據庫之前已有的信息不同(也防止在用戶提交次數過多時會出現大量日誌文件):WHERE子句中的IF語句與Oracle SQL計數
SELECT COUNT(*) AS count
FROM iam.credential
WHERE iam.credential.CREDENTIAL_TYPE = :1
AND iam.credential.CREDENTIAL_NAME = :2
AND iam.credential.LOST_OR_STOLEN = :3
AND iam.credential.STATUS = :4
AND iam.credential.EXPIRATION_DATE = :5
AND iam.credential.ISSUING_LOCATION = :6
AND iam.credential.PHYSICAL_FORM = :7
AND iam.credential.ASSOCIATED_DEVICE = :8
AND iam.credential.DISPLAY_NAME = :9;
我抓住從我的網頁的值,但我遇到問題時,值爲NULL。我希望能夠做到像下面這樣:
SELECT COUNT(*) AS count
FROM iam.credential
WHERE
IF iam.credential.CREDENTIAL_TYPE is not null THEN
iam.credential.CREDENTIAL_TYPE = :1
ELSE
iam.credential.CREDENTIAL_TYPE is null
END IF
AND
IF iam.credential.CREDENTIAL_NAME is not null THEN
iam.credential.CREDENTIAL_NAME = :2
ELSE
iam.credential.CREDENTIAL_NAME is null
END IF
//and so on
我不能使用
SELECT COUNT(*) AS count
FROM iam.credential
WHERE (iam.credential.CREDENTIAL_TYPE = :1
OR iam.credential.CREDENTIAL_TYPE is null)
,因爲這將返回計數2時,我只希望用戶有什麼相匹配的輸入。
基本上我想計數要麼返回1或0,如果記錄存在或如果它不。
我想根據用戶提供的內容動態更改WHERE子句。
如果用戶沒有提供值,因爲它不是必需的,它將爲空。我需要查詢更改爲
credential_name is null
因爲
credential_name = null
在Oracle不起作用。
,如果它不爲空,然後我需要它是
credential_name = :1
而且將充滿用戶提供的值。
credential_name is :1
在oracle中也不起作用。
如果我有兩個相同類型的憑證,但一個記錄的CREDENTIAL_NAME值爲(空),另一個記錄爲'DaisyDuck',我將返回兩條記錄。
如果表值爲空並且用戶提供的值不爲null會發生什麼,反之亦然?如果這些被計數或沒有?以及/爲什麼你的第二個查詢得到了兩個數 - 你確定它是兩次計算同一行,而不是在兩個相似的行上得到部分匹配嗎? –