Я получаю вложенное исключение java.sql.SQLSyntaxErrorException: ORA-00909: недопустимое количество аргументов

#sql #oracle

Вопрос:

это мой вопрос,

 SELECT
     MAX(CASE WHEN rownumber='1' THEN DISPOSITON END) AS Dispostion
    ,MAX(CASE WHEN rownumber='1' THEN SUB_DISPOSITION END) AS SUB_DISPOSITION
    ,CUST_NAME
    ,MOBILE_NO
    ,EMAIL_ID
    ,LINE_OF_BUSINESS
    ,PRODUCT_CODE
    ,REGISTRATION_NUMBER 
FROM
(
    SELECT
         ROW_NUMBER() OVER (PARTITION BY task_id ORDER BY CREATED_DATE ASC) AS rownumber
        ,a.DISPOSITON
        ,a.SUB_DISPOSITION
        ,b.CUST_NAME
        ,b.MOBILE_NO
        ,b.EMAIL_ID
        ,b.LINE_OF_BUSINESS
        ,b.PRODUCT_CODE
        ,b.REGISTRATION_NUMBER
    FROM CLICK_TO_CALL_AUDIT_LOG a 
    INNER JOIN IM_DATA b
        ON a.task_id=b.task_code
            AND UPPER(a.DISPOSITON) = UPPER(:Dis) 
            AND UPPER(a.SUB_DISPOSITION) in (UPPER(:subDis))
            AND a.CREATED_DATE BETWEEN to_timestamp(:before , 'dd-mm-yy hh24:mi:ss') 
            AND to_timestamp(:current, 'dd-mm-yy hh24:mi:ss') 
    WHERE b.ALLOCATED_USER IN (:userNameList)
    AND b.IS_LATEST = 'Y'
    AND b.TASK_STATUS <> 'JUNK LEAD'
    AND b.LINE_OF_BUSINESS = :LOB
) R
GROUP BY
     CUST_NAME
    ,MOBILE_NO
    ,EMAIL_ID
    ,LINE_OF_BUSINESS
    ,PRODUCT_CODE
    ,REGISTRATION_NUMBER;
 

Комментарии:

1. where b.ALLOCATED_USER in (:userNameList) таким образом, вы не сможете пройти фильтр по списку. Что такое тип и содержание :userNameList ?

2. Список имен пользователей-это список строкового типа. и я получаю ошибку, в то время как я преобразую все данные в верхний регистр. здесь ВВЕРХУ(a.СУБДИСПОЗИЦИЯ) в (ВВЕРХУ(:субдиспозиции))

Ответ №1:

Этот:

 AND UPPER(a.SUB_DISPOSITION) in (UPPER(:subDis))
 

скорее всего, его следует переписать так, чтобы он представлял строки (вместо, предположительно, списка значений, разделенных запятыми). Что-то вроде этого:

 and upper(a.sub_disposition) in (select trim(regexp_substr(upper(:subDis), '[^,] ', 1, level))
                                 from dual
                                 connect by level <= regexp_count(:subDis, ',')   1
                                )
 

То же самое относится и к

 WHERE b.ALLOCATED_USER IN (:userNameList)
 

Я предположил, что переменные (такие как userNameList ) выглядят, например 'Scott,Tiger,Wood,King' . Если это выглядит по-другому, код также должен быть скорректирован.