0
다음과 같은 텍스트가 있습니다.REGEXP_REPLACE query oracle
((tt.TRAN_TYPE IN
(SELECT RULE_VALUE FROM GP_RULE_VALUE WHERE RULE_ID=1332)
AND tt.CONTRACT IN
(SELECT RULE_VALUE FROM GP_RULE_VALUE WHERE RULE_ID=1333)
AND tt.CUSTOMER_STATE NOT IN
(SELECT RULE_VALUE FROM GP_RULE_VALUE WHERE RULE_ID=1334)
AND tt.COT_IND IN
(SELECT RULE_VALUE FROM GP_RULE_VALUE WHERE RULE_ID=1335))
OR (tt.TRAN_TYPE IN
(SELECT RULE_VALUE FROM GP_RULE_VALUE WHERE RULE_ID=1336)
AND tt.WHLSE_COT NOT IN
(SELECT RULE_VALUE FROM GP_RULE_VALUE WHERE RULE_ID=1337)
AND tt.COT_IND IN
(SELECT RULE_VALUE FROM GP_RULE_VALUE WHERE RULE_ID=1338)))
다음과 같이 tt. *를 condition tt. * IS NOT NULL 및 tt. * ...로 바꾸어야합니다.
(
((tt.TRAN_TYPE IS NOT NULL AND tt.TRAN_TYPE IN (SELECT RULE_VALUE FROM GP_RULE_VALUE WHERE RULE_ID=1332))
AND (tt.CONTRACT IS NOT NULL AND tt.CONTRACT IN (SELECT RULE_VALUE FROM GP_RULE_VALUE WHERE RULE_ID=1333))
AND (tt.CUSTOMER_STATE IS NOT NULL AND tt.CUSTOMER_STATE NOT IN (SELECT RULE_VALUE FROM GP_RULE_VALUE WHERE RULE_ID=1334))
AND (tt.COT_IND IS NOT NULL AND tt.COT_IND IN (SELECT RULE_VALUE FROM GP_RULE_VALUE WHERE RULE_ID=1335)))
OR ((tt.TRAN_TYPE IS NOT NULL AND tt.TRAN_TYPE IN (SELECT RULE_VALUE FROM GP_RULE_VALUE WHERE RULE_ID=1336))
AND (tt.WHLSE_COT IS NOT NULL AND tt.WHLSE_COT NOT IN (SELECT RULE_VALUE FROM GP_RULE_VALUE WHERE RULE_ID=1337))
AND (tt.COT_IND IS NOT NULL AND tt.COT_IND IN (SELECT RULE_VALUE FROM GP_RULE_VALUE WHERE RULE_ID=1338)))
)
ORACLE에서 사용 가능한 경우 REGEXP_REPLACE 또는 다른 트릭을 제공하십시오.
참고 : 나에게 주요 과제는 해당 쿼리 순서는 적절한 (제대로 배치 즉 개폐 브라켓)
이것은 null 조건 만 추가합니다. 그러나 여러 개의 AND/OR가 포함되어 있으므로 질의 순서가 영향을받지 않도록 대괄호를 추가해야합니다. –
지금까지 내가 한 것은 다음과 같습니다. IN REGEXP_REPLACE을 선택 ('(tt.TRAN_TYPE (GP_RULE_VALUE FROM RULE_VALUE을 선택 WHERE RULE_ID = 1332) IN 및 tt.CONTRACT (FROM RULE_VALUE을 선택 GP_RULE_VALUE WHERE RULE_ID = 1333) 및 tt.CUSTOMER_STATE이 (IN GP_RULE_VALUE로부터 RULE_VALUE을 선택하지 ([^] +) ([: alpha :] | [: 공백 : 1334) 및 (GP_RULE_VALUE에서 RULE_ID가 1335 인 RULE_VALUE를 선택하십시오.) ) 이중에서 ','(\ 1 \ 2 IS NOT NULL과 \ 1 \ 2 \ 3) '); 이제는 숫자 뒤에 닫는 괄호를 추가해야합니다. –
다음 쿼리는 작동합니다. ' (IN REGEXP_REPLACE을 선택 ('(tt.TRAN_TYPE는 GP_RULE_VALUE FROM RULE_VALUE을 선택 WHERE RULE_ID = 1332) 및 IN tt.CONTRACT (FROM RULE_VALUE을 선택 GP_RULE_VALUE WHERE RULE_ID = 1333) 및 tt.CUSTOMER_STATE이 이 (FROM RULE_VALUE을 선택하지 IN GP_RULE_VALUE WHERE RULE_ID = 1334) ) 또는 IN (tt.TRAN_TYPE (GP_RULE_VALUE FROM RULE_VALUE을 선택 WHERE RULE_ID = 1336) 및 tt.WHLSE_COT하지 (GP_RULE_VALUE WHERE RULE_ID = 1337) ) ','FROM RULE_VALUE을 선택 IN (([^] +) ([0 : 9] +) ',': 공백 : 1 \ 2는 NULL이 아니며 \ 1 \ 2 \ 3 \ 4) ')를 이중으로 사용합니다. ' –