ORA-00905: отсутствует ошибка ключевого слова в запросе, который отлично работает в SQL Developer - PullRequest
0 голосов
/ 20 ноября 2018

Я пытаюсь получить доступ к информации из нескольких разных таблиц в схеме, используя функцию JOIN.Код работал нормально, пока я не добавил FULL OUTER JOIN на TABLE3.Я довольно новичок в оракуле, поэтому, хотя я читал об этом, я пока не смог точно определить свою ошибку.

Интересно отметить, что этот же запрос отлично работает в Oracle SQL Developer, но выдает ошибку отсутствующего ключевого слова, когда я запускаю его вместе с остальным кодом в Java (Netbeans IDE).Есть ли вероятность того, что существуют разные синтаксические требования для этих двух?

Вот мой код:

SELECT 
t2.A1 as temp1, 
t2.A2 as temp2, 
t2.A3 as temp3, 
t2.A4 as temp4, 
t2.A5 as temp5, 
t2.A6 as temp6, 
t2.A7 as temp7, 
t2.A8 as temp8, 
t3.A9 as temp9,  
t2.A10 as temp10, 
t2.A11 as temp11, 
t2.A12 as temp12, 
t2.A13 as temp13, 
t2.A14 as temp14, 
t2.A15 as temp15,
t2.A16 as temp16, 
t2.A17 as temp17, 
t2.A18 as temp18, 
t2.A19 as temp19, 
t2.A20 as temp20, 
t2.A9 as temp21, 
t2.A21 as temp22, 
t2.A22 as temp23,
t1.deets as deets 
FROM SCHEMA1.TABLE2 t2 
FULL OUTER JOIN 
    SCHEMA1.TABLE3 t3
    ON t2.A1 = t3.A23
LEFT OUTER JOIN 
    (select A24, LISTAGG(A25, ',') WITHIN GROUP (ORDER BY A26) as deets 
        FROM SCHEMA1.NA av 
        WHERE (A26 = 'TYPE1' OR A26 = 'TYPE2') 
        Group by A24) t1 
    ON t1.A24 =  t2.A1 
WHERE 
    (t2.A2 between (TO_CHAR (SYSDATE, 'YYYYMMDD') || '000000') 
        AND (TO_CHAR (SYSDATE+15, 'YYYYMMDD') || '000000') 
    OR t2.A11 between (TO_CHAR (SYSDATE, 'YYYYMMDD') || '000000') 
        AND (TO_CHAR (SYSDATE+15, 'YYYYMMDD') || '000000')) 
    AND TRIM(t2.A27) IS NOT NULL 
    AND t2.A28 = 'SOMESPEC' 
    AND t2.A3 = 'SOMEOTHERSPEC'
order by temp2 desc;

И вот ошибка, которую я получаю:

[DEBUG: 2018-11-20 08:58:24.426] [query]
java.sql.SQLException: ORA-00905: missing keyword

Любой совет будет оценен

РЕДАКТИРОВАТЬ: Вот запрос в Java, а также:

String query = "SELECT "
+ "t2.A1 as temp1, "
+ "t2.A2 as temp2, "
+ "t2.A3 as temp3, "
+ "t2.A4 as temp4, "
+ "t2.A5 as temp5, "
+ "t2.A6 as temp6, "
+ "t2.A7 as temp7, "
+ "t2.A8 as temp8, "
+ "t3.A9 as temp9, " 
+ "t2.A10 as temp10, "
+ "t2.A11 as temp11, "
+ "t2.A12 as temp12, "
+ "t2.A13 as temp13, "
+ "t2.A14 as temp14, "
+ "t2.A15 as temp15, "
+ "t2.A16 as temp16, "
+ "t2.A17 as temp17, "
+ "t2.A18 as temp18, "
+ "t2.A19 as temp19, "
+ "t2.A20 as temp20, "
+ "t2.A9 as temp21, "
+ "t2.A21 as temp22, "
+ "t2.A22 as temp23, "                                                
+ "t1.deets as deets  "
+ "FROM SCHEMA1.TABLE2 t2 "
+ "FULL OUTER JOIN "
    + "SCHEMA1.TABLE3 t3"
    + "ON t2.A1 = t3.A23"
+ "LEFT OUTER JOIN "
        + "(select A24, LISTAGG(A25, ',') WITHIN GROUP (ORDER BY A26) as deets  "
            + "FROM SCHEMA1.NA av  "
            + "WHERE (A26 = 'TYPE1' OR A26 = 'TYPE2')  "
            + "Group by A24) t1  "
        +"ON t1.A24 =  t2.A1 "
+ "WHERE "
+ "(t2.A2 between (TO_CHAR (SYSDATE, 'YYYYMMDD') || '000000')  "
        + "AND (TO_CHAR (SYSDATE+15, 'YYYYMMDD') || '000000') "
    + "OR t2.A11 between (TO_CHAR (SYSDATE, 'YYYYMMDD') || '000000') "
        + "AND (TO_CHAR (SYSDATE+15, 'YYYYMMDD') || '000000')) "
     +"AND "
        + "TRIM(t2.A27) IS NOT NULL  "
     + "AND t2.A28 = 'SOMESPEC' "
     + "AND t2.A3 = 'SOMEOTHERSPEC'"
+ "order by temp2 desc";

1 Ответ

0 голосов
/ 20 ноября 2018

Добавить конечный пробел в строки

+ "SCHEMA1.TABLE3 t3"
+ "ON t2.A1 = t3.A23"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...