2017-02-02 6 views
0

Netezza보기에서 다음 쿼리를 추출했습니다. 저장된 원래 쿼리의 레코드가 없으므로. 이 쿼리가 무엇을하는지 이해하는 방법?수정 된 쿼리 netezza를 이해하는 방법?

CASE WHEN (O.E_SRC ~~LIKE_ESCAPE('FIX.%.OrderNew'::"VARCHAR", '\'::"VARCHAR")) 
     THEN ADMIN."REPLACE"(ADMIN."REPLACE"(O.E_SRC, '.OrderNew'::"VARCHAR", ''::"VARCHAR"), 
     'FIX.'::"VARCHAR", ''::"VARCHAR") 
    ELSE O.E_SRC 
    END AS CONNECTION_ID 

내가 이해하는 것은 'FIX. %. OrderNew'에 패턴 일치가 있으며 대체 할 수 있습니까? 원본 쿼리는 어떻게 저장됩니까? NVL(RNO,0)처럼 그래서 nvl() 원래 쿼리 동등하거나 다음 네티의 다른 기능 수정 된 쿼리

CASE WHEN (O.E_SRC ~~LIKE_ESCAPE('FIX.%.OrderNew'::"VARCHAR", '\'::"VARCHAR")) 
     THEN ADMIN."REPLACE"(ADMIN."REPLACE"(O.E_SRC, '.OrderNew'::"VARCHAR", ''::"VARCHAR"), 
     'FIX.'::"VARCHAR", ''::"VARCHAR") 
    ELSE O.E_SRC 
    END AS CONNECTION_ID 

답변

1
보기가 원래의 코드를 obfucscating있다

은 무엇
CASE WHEN (RNO NOTNULL) THEN RNO WHEN (0 NOTNULL) THEN 0 ELSE NULL::INT4 END

로 저장하지만, 너무한다 심하게.

select * from so_table; 

COL1  E_SRC    
------- ------------------ 
1  FIX.SCOTT.OrderNew 
2  BREAK.BOB.OrderOld 

그리고이 같은 뷰 작성 :

create or replace view so_view as 
select 
case 
    when o.e_src like('FIX.%.OrderNew') 
    then replace(
     replace(o.e_src, '.OrderNew','') 
      ,'FIX.','') 
    ELSE o.e_src 
END as CONNECTION_ID 
from so_table o ; 
가 카탈로그에 저장된으로 우리는 다음 소스보기를 확인할 수 있습니다

:

을 우리는이 같은 테이블을 시작하는 경우

SELECT 
    CASE WHEN (O.E_SRC ~~ LIKE_ESCAPE('FIX.%.OrderNew'::"VARCHAR", '\':: 
     "VARCHAR")) THEN ADMIN."REPLACE"(ADMIN."REPLACE"(O.E_SRC, 
     '.OrderNew'::"VARCHAR", 
     ''::"VARCHAR"), 
     'FIX.'::"VARCHAR", 
     ''::"VARCHAR") ELSE O.E_SRC END AS CONNECTION_ID 
FROM 
    ADMIN.SO_TABLE O; 

여기에서 LIKE (암시 적 '\'이스케이프 문자 사용)가 다른 형태뿐만 아니라 각 표현에 대한 형변환을 고수합니다.

select * from so_view; 

CONNECTION_ID  
------------------ 
BREAK.BOB.OrderOld 
SCOTT 

이 경우 'FIX'로 시작하는 문자열에서 가운데 ​​부분 문자열을 가져옵니다. '.OrderNew'로 끝나고, 그렇지 않으면 그냥 원래 문자열을 반환합니다.

+0

당신은 천재적 인 남자입니다. 고맙습니다. !!! 그것은 경험에서 나온 것이거나 그것을 이해하는 특별한 방법이 있습니까? –

+0

대부분 그냥 경험. 명심해야 할 점은 뷰 정의에 저장된 것이 무엇이든 CREATE VIEW 문에서 사용 된 것과 동일하다고 가정한다는 것입니다. 대부분의 경우 이것은 외관 변화를 의미합니다 (예 : :: 표현의 캐스팅). 그러나 더 복잡 할 수 있습니다. (LIKE를 좀 더 복잡하지만 LIKE_ESCAPE로 변경하는 것과 같습니다. – ScottMcG