[ORACLE] 檢查字串中是否有中文字

[ORACLE] 檢查字串中是否有中文字

前言 : 

因為在某些特別的需求下,資料表欄位的長度可能只會開設到某個特定的數值

但在建立資料的時候可能是英文也有可能會是中文

但又會因為中文字而超出欄位限制,因此在這裡分享一個可以判斷是否有中文字的FUNCTION

原理是利用LENGTH及LENGTHB的特性,去判斷出自串長度是否相同

- LENGTH(string) 計算字符長度 : 返回字符串的長度,單位是字符

- LENGTHB(string) 計算字節長度 : 返回字符串的長度,單位是字節

FUNCTION isenglish (p_str IN VARCHAR2)
        RETURN BOOLEAN
    IS
        v_count    PLS_INTEGER;
        l_return   BOOLEAN;
    BEGIN
        SELECT COUNT (*)
          INTO v_count
          FROM (SELECT NVL (LENGTH (p_str), 0) AS len FROM DUAL) a,
               (SELECT NVL (LENGTHB (p_str), 0) AS len FROM DUAL) b
         WHERE a.len = b.len;

        IF v_count > 0
        THEN
            l_return := TRUE;
        ELSE
            l_return := FALSE;
        END IF;

        RETURN l_return;
    END isenglish;