sql >> データベース >  >> RDS >> Oracle

ネストされたケースを更新

    UPDATEの構文 ステートメント は:

    Update_set_clause ::=

    できないこと:

    UPDATE table_name
    CASE WHEN ... THEN SET ...
         WHEN ... THEN SET ...
    

    おそらく、複数のステートメントに分割する方が簡単です。

    UPDATE TEMP_PARSE_EXIST
    SET ADT_ACT = 'CASE 1',
        V_NUM   = REGEXP_SUBSTR(REGEXP_SUBSTR(ADRS, '^\w+(\s?-\s?)\w+'), '\d+$')
    WHERE ADT_ACT IS NULL
    AND   REGEXP_LIKE(REGEXP_SUBSTR(ADRS, '^\w+(\s?-\s?)\w+\s\w+', 'i'), '(ABBEY|ACRES|ALLÉE|ALLEY|AUT|AUTOROUTE|AV|AVE|AVENUE|BAY|BEACH|BEND|BLVD|BOUL|BOULEVARD|BYPASS|WYND)$', 'i')
    AND   REGEXP_LIKE(REGEXP_SUBSTR(ADRS, '^\w+(\s?-\s?)\w+'), '^\w+(\s?-\s?)\d+$');
    
    UPDATE TEMP_PARSE_EXIST
    SET ADT_ACT = 'CASE 2',
        V_STREET_NAME = REGEXP_SUBSTR(REGEXP_SUBSTR(ADRS, '^\w+(\s?-\s?)\w+'), '\d+(ST|ND|RD|TH)$')
    WHERE ADT_ACT IS NULL
    AND   REGEXP_LIKE(REGEXP_SUBSTR(ADRS, '^\w+(\s?-\s?)\w+\s\w+', 'i'), '(ABBEY|ACRES|ALLÉE|ALLEY|AUT|AUTOROUTE|AV|AVE|AVENUE|BAY|BEACH|BEND|BLVD|BOUL|BOULEVARD|BYPASS|WYND)$', 'i')
    AND   REGEXP_LIKE(REGEXP_SUBSTR(ADRS, '^\w+(\s?-\s?)\w+'), '^\w+(\s?-\s?)\d+(ST|ND|RD|TH)$');
    
    ...
    

    更新

    正規表現をより単純にすることができます(または少なくとも式の重複とネストを減らすことができます):

    UPDATE TEMP_PARSE_EXIST
    SET ADT_ACT = 'CASE 2',
        V_STREET_NAME = REGEXP_SUBSTR( ADRS, '^\w+(\s?-\s?)(\d+(ST|ND|RD|TH))', 1, 1, 'i', 2 )
    WHERE ADT_ACT IS NULL
    AND   REGEXP_LIKE( '^\w+(\s?-\s?)\d+(ST|ND|RD|TH)\s\w*(ABBEY|ACRES|ALLÉE|ALLEY|AUT|AUTOROUTE|AV|AVE|AVENUE|BAY|BEACH|BEND|BLVD|BOUL|BOULEVARD|BYPASS|WYND)', 'i' );
    


    1. PL / SQLカーソルの変数/リテラル​​置換?

    2. アプリのデータベースは常に必要ですか?

    3. Magentoでmysqlエスケープする方法は?

    4. mysqlテーブル行のPHPExcelRenderhtmlタグ