这是查询:
SELECT DISTINCT pprom.pk
FROM
(
SELECT
item_t0.SourcePK as pk
FROM
links item_t0
WHERE (? = item_t0.TargetPK AND item_t0.SourcePK in (?,?))
AND (item_t0.TypePkString=? )
UNION
SELECT
item_t1.TargetPK as pk
FROM
cat2prodrel item_t1
WHERE ( item_t1.SourcePK in (? ) AND item_t1.TargetPK in (?,?))
AND (item_t1.TypePkString=? )
) AS pprom
这是错误:
ORA-00933: SQL command not properly ended
有什么想法可能是错误的吗?
编辑:
问号被相应项目的 PK 取代:
values = [PropertyValue:8802745684882, PropertyValue:8796177006593, PropertyValue:8796201713665, 8796110520402, PropertyValue:8796125954190, PropertyValue:8796177006593, PropertyValue:8796201713665, 8796101705810]
编辑2:
该查询是在某些专有软件系统的深处执行的,因此我不知道运行它的确切代码。
编辑3:
我发现了另一个查询,虽然稍微短一些,但会产生相同的错误消息:
SELECT DISTINCT pprom.pk
FROM
(
SELECT
item_t0.SourcePK as pk
FROM
links item_t0
WHERE (? = item_t0.TargetPK AND item_t0.SourcePK in (?))
AND (item_t0.TypePkString=? )
) AS pprom
使用以下值:
values = [PropertyValue:8799960601490, PropertyValue:8796177006593, 8796110520402]
编辑4
我发现替换值后发送到数据库的 SQL 代码:
SELECT DISTINCT pprom.pk
FROM
(
SELECT
item_t0.SourcePK as pk
FROM
links item_t0
WHERE (8801631769490 = item_t0.TargetPK AND item_t0.SourcePK in (8796177006593))
AND (item_t0.TypePkString=8796110520402 )
) AS pprom
我还尝试执行内部 SELECT 语句,仅此语句就可以正常运行并返回单个 PK 作为结果。
最佳答案
我在您的查询中找不到任何明显的语法错误,因此我认为问题在于您用于将 ?
占位符转换为实际值的客户端库。您的问题编辑显示了一种转储,其中有 8 个整数,但只有 6 个 PropertyValue
项。确保这不是问题:IN (?, ?)
需要 2 个参数。
编辑
在为子查询分配别名时尝试删除 AS
关键字:
SELECT DISTINCT pprom.pk
FROM
(
SELECT
item_t0.SourcePK as pk
FROM
links item_t0
WHERE (8801631769490 = item_t0.TargetPK AND item_t0.SourcePK in (8796177006593))
AND (item_t0.TypePkString=8796110520402 )
) AS pprom
^^
关于sql - 需要有关 Oracle SQL 查询错误的帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6759269/