sql - 需要有关 Oracle SQL 查询错误的帮助

标签 sql oracle ora-00933

这是查询:

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/

相关文章:

sql - 如何为 postgres 编写 DELETE CASCADE?

java - Oracle db 是否能够比较不同时区的时间戳?

sql - 为什么oracle不忽略直接路径插入的引用完整性约束

c# - 如何使 Dapper 动态不区分大小写?

sql - 甲骨文 ORA-00933 : SQL command not properly ended?

c# - ORA-00933: SQL 命令未正确结束

Oracle:Order by Union 返回 ORA-00933:SQL 命令未正确结束

mysql - 在两个不同的组中使用 ORDER BY 的 SQL 查询

mysql - 如何截断一些表?

sql - 与 SQL 中的 Datediff 作斗争