2017-02-02 9 views
0

次のクエリは、元のクエリのレコードが保存されていないため、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()に元のクエリーと同等または以下の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 

答えて

1
VIEWは、元のコードを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_ESCAPEのLIKE_ESCAPEへの変更のように)が大きい可能性があります。 – ScottMcG

関連する問題