Совет, инструменты для сопоставления скобок в запросах SQL - PullRequest
0 голосов
/ 01 ноября 2011

Может ли кто-нибудь подсказать мне хороший подход к проверке того, как и где скобки могут отсутствовать (или быть в избытке) в запросе, таком как следующий?

Например, этот запрос возвращает ошибку об отсутствии правой круглой скобки. Но где??? !

SELECT * FROM ( SELECT X.*, ROWNUM AS RN FROM (SELECT ORG_UNIT, QUEUE_NAME, CASE_STATUS, AGENT_ROLE, COUNT(*) AS CASE_COUNT 
   FROM 
   (    
     SELECT ORG_UNIT, QUEUE_NAME, CREATION_TIMESTAMP, CASE_STATUS, AGENT_ROLE
     FROM 
     (   SELECT OU.NAME AS ORG_UNIT,            D.NAME AS QUEUE_NAME, 
                WS.NAME AS CASE_STATUS,  C.ASSIGNED_TO AS AGENT_ID,  C.CREATION_TIMESTAMP AS CREATION_TIMESTAMP,
                CASE NVL(C.ASSIGNED_TO, -1) WHEN -1 THEN 'Unassigned' ELSE RU.ROLE_NAME END AS AGENT_ROLE 
           FROM CASES C 
           JOIN ORGANIZATION_UNITS OU ON OU.ID = C.ORGUNIT_ID       
           JOIN WORKFLOW_STATUSES WS ON WS.ID = C.STATUS_ID 
           JOIN DOMAINS D ON D.ID = C.DOMAIN_ID 
           JOIN DOMAINS DP ON DP.ID = D.PARENT_ID
LEFT OUTER JOIN (SELECT DISTINCT C.ASSIGNED_TO AS AGENT_ID, RL.NAME AS ROLE_NAME 
                                  FROM CASES C 
                                    JOIN DOMAINS D ON D.ID = C.DOMAIN_ID 
                                    JOIN DOMAINS DP ON DP.ID = D.PARENT_ID 
                                    JOIN USER_GROUP_RELATIONS UGR ON UGR.USER_ID = C.ASSIGNED_TO 
                                    JOIN GRP_ORG_DOM_ROLE_RELATIONS GODRR ON (GODRR.GROUP_ID = (SELECT MAX(UGR.GROUP_ID) 
                                                                                                                                                                   FROM USER_GROUP_RELATIONS UGR 
                                                                                                                                                                 WHERE   UGR.USER_ID = C.ASSIGNED_TO) 
                                                                                                                   AND GODRR.DOMAIN_ID =C.DOMAIN_ID
                                                                                                                   AND GODRR.ORGANIZATION_ID = C.ORGUNIT_ID) 
  JOIN ROLES RL ON RL.ID = (SELECT MAX(GODRR.ROLE_ID) 
                                                  FROM GRP_ORG_DOM_ROLE_RELATIONS GODRR 
                                                WHERE GODRR.GROUP_ID = UGR.GROUP_ID 
                                                     AND GODRR.ORGANIZATION_ID = C.ORGUNIT_ID AND GODRR.DOMAIN_ID = C.DOMAIN_ID)            
                                WHERE DP.NAME='DD') RU ON RU.AGENT_ID = C.ASSIGNED_TO 
       WHERE DP.NAME='DD' 
     )  WHERE 1=1
   ) 
   GROUP BY ORG_UNIT, QUEUE_NAME, CASE_STATUS, AGENT_ROLE  
   ORDER BY ORG_UNIT, QUEUE_NAME, CASE_STATUS, AGENT_ROLE order by ORG_UNIT asc ) X ) WHERE RN > 0 AND RN <= 10

1 Ответ

2 голосов
/ 01 ноября 2011

Crimson Edit и многие другие текстовые редакторы и IDE имеют сопоставление скобок.

http://en.wikipedia.org/wiki/Crimson_Editor

Если скобки совпадают, но вложены неправильно, возможно, вам придется изменить стратегию отступов.

Кроме того, инструменты форматирования кода иногда могут прояснить, где вы пропустили парен или неправильно вложили.

Вот одно онлайн-место, куда вы можете вставить свой код, чтобы увидеть его переформатированный.

http://www.dpriver.com/pp/sqlformat.htm

...