我在Oracle中編寫了一些基本的SQL,它按預期運行。它選擇一個客戶,他們的ID和他們可以提供的服務。VBA和Oracle SQL:ORA-00907:缺少右括號
但是,當我添加從VBA代碼傳遞的變量時會出現錯誤消息ORA-00907: Missing Right Parenthesis
。這是由於代碼中的OR
。
AND C.CURRENCY LIKE :cmbSelectAccountCcy
AND (S.SERVICEID LIKE :cmbSelectServiceType OR S.SERVICEID LIKE :cmbSelectServiceType2)
AND .... etc
如果我刪除或按預期運行。的OR是檢查,其包括(在端部)的一部分
HAVING COUNT(S.SERVICEID) > 2
允許2個值進行檢查,並且只有當2(或更多)是本顯示客戶端。
Excel中的組合框將服務ID作爲下拉框中的設置值或%
字符傳遞。在某些情況下,我認爲沒有達到正確的括號。
我可以使用硬編碼值運行SQL查詢,但不通過VBA傳遞相同變量的原因是什麼?我在VBA中有一個Debug.Print()
聲明,它顯示了我期望看到的所有值。
UPDATE:
更改cmbSelectServiceType2
到cmbServiceTypeTwo
似乎已經解決了這一問題,但是,由於還沒有名字,我想不通爲什麼。任何答案仍然讚賞!我能看到的唯一因素是第一個是21個字符,第二個是20個字符。表中的列數據類型是VARCHAR2。
切線:OR語句現在返回Service1或Service1和Service2或Service2,即完全OR語句。上面的HAVING條款試圖強加只允許BOTH。
更新2
在cmbSelectServiceType2更改 '2' 到字母 '兩化' 不起作用。好像20個字符是一些任意的限制。根據
聽起來像駕駛員問題;也許它對綁定變量數據類型感到困惑? – 2015-02-24 11:00:14
感謝@alexpoole所以這意味着我需要(如果可能)將變量轉換爲正確的類型,例如:'CAST(:Variable As Number)'還是這樣?它們都是'VARCHAR2'類型,我不是貿易開發者,我試圖在新工作中獲得自動化的東西,所以這是我非常盲目的。 – RossC 2015-02-24 11:05:46
您不能將'%'強制轉換爲數字。如果司機破壞了它,那麼很難猜測如何解決它。檢查/更新/更換驅動程序可能是可取的,但可能不適合你?我可以想到一種可能的方法,但是在不知道潛在問題的情況下它有點難以置信; '(S.SERVICEID =:cmbSelectServiceType OR S.SERVICEID =:cmbSelectServiceType2 OR:cmbSelectServiceType ='%'OR:cmbSelectServiceType2 ='%')' – 2015-02-24 11:14:34