我将此查询与Perl DBI一起使用:
SELECT c.change_id
, COLLECT(t.tag) AS the_tags
FROM changes c
LEFT JOIN tags t ON c.change_id = t.change_id
WHERE c.project = ?
GROUP BY c.change_id
DBI 使用 OCI 来准备这个语句,绑定我传递的值,并得到结果。但甲骨文出于某种原因不喜欢它。错误输出为:
ORA-00932: inconsistent datatypes: expected - got - (DBD ERROR: error possibly near <*> indicator at char 41 in '
SELECT c.change_id
, <*>COLLECT(t.tag) AS the_tags
FROM changes c
LEFT JOIN tags t ON c.change_id = t.change_id
WHERE c.project = :p1
GROUP BY c.change_id
'
信息量不是很大。但是,我不仅可以通过将调用更改为COLLECT()
也可以通过将占位符替换为实际值来消除此错误:
SELECT c.change_id
, COLLECT(t.tag) AS the_tags
FROM changes c
LEFT JOIN tags t ON c.change_id = t.change_id
WHERE c.project = 'tryoracle'
GROUP BY c.change_id
该版本完美运行。为什么 Oracle 不喜欢带有 的准备好的语句COLLECT()
?
如果有任何帮助,这里是通过(h/t @bohica)提取的与 OCI 相关的调用的跟踪。ora_verbose = 6