【问题标题】:Need help with error in Oracle SQL query需要有关 Oracle SQL 查询中的错误的帮助
【发布时间】:2011-10-09 05:04:40
【问题描述】:

这是查询:

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 作为结果。

【问题讨论】:

  • 使您的查询可读将是朝着正确方向迈出的一步 =D
  • 那些问号是什么?尤其是这部分:(?,?)?
  • 这个命令是怎么执行的?
  • 如果您单独运行每个位?
  • 可能没有指定TypePkString 的值?您的值仅显示数字...

标签: sql oracle ora-00933


【解决方案1】:

我在您的查询中找不到任何明显的语法错误,因此我认为问题在于您用于将 ? 占位符转换为实际值的客户端库。您的问题编辑显示了一种转储,其中有 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
  ^^

【讨论】:

  • 如果缺少参数会导致 ORA-00933 错误吗?我认为这可能与查询的一般语法有关(但您可能已经猜到我不是 Oracle 专家)。
  • 当然,如果它不见了。您的应用程序可能会用虚假值填充它。 (我们对您的代码一无所知。)
  • Álvaro 是对的,) AS pprom 中的 AS 导致了问题。
  • 谢谢!你今天保存了我的项目!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-22
  • 2017-08-02
  • 1970-01-01
  • 2019-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多