Нужна помощь с ошибкой в ​​запросе Oracle SQL - PullRequest
2 голосов
/ 20 июля 2011

это запрос:

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

Есть идеи, что может быть не так?

Edit:

Знаки вопроса заменены на 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.

1 Ответ

3 голосов
/ 20 июля 2011

Я не смог найти никаких явных синтаксических ошибок в вашем запросе, поэтому я предполагаю, что проблема заключается в том, что клиентская библиотека используется для преобразования заполнителей ? в реальные значения.Редактирование вашего вопроса отображает вид дампа, в котором есть 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
  ^^
...