VBA和Oracle SQL:ORA-00907:缺少右括号

时间:2015-02-24 09:56:08

标签: sql oracle vba excel-vba excel

我在Oracle中编写了一些基本的SQL,它按预期运行。它选择客户,他们的ID以及他们可以提供的“服务”。

但是,当我添加从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()语句,它显示了我希望看到的所有值。


更新

将名称cmbSelectServiceType2更改为cmbServiceTypeTwo似乎已解决了问题,但截至目前为止,我无法弄清楚原因。任何答案仍然赞赏!我能看到的唯一因素是第一个是21个字符,第二个是< 20个字符。列数据类型是表中的VARCHAR2。

Tangent:OR语句现在返回Service1或Service1和Service2或Service2,即完全OR语句。上面的HAVING子句试图强制只允许BOTH。


更新2

将cmbSelectServiceType2中的“2”更改为字母“2”不起作用。似乎20个字符是一些任意限制。

1 个答案:

答案 0 :(得分:0)

根据:

Getting around the Max String size in a vba function?

vba函数无法处理超过255个字符的字符串,这可能会导致问题,特别是当你剪切它的字符串长度时。