簡易版(ASCII 碼範圍)
CREATE OR REPLACE FUNCTION is_char(p_ch VARCHAR2) RETURN VARCHAR2 IS
v_ascii NUMBER;
BEGIN
IF p_ch IS NULL OR LENGTH(p_ch) != 1 THEN
RETURN 'false';
END IF;
v_ascii := ASCII(p_ch);
-- A-Z: 65-90, a-z: 97-122
IF v_ascii BETWEEN 65 AND 90 OR v_ascii BETWEEN 97 AND 122 THEN
RETURN 'true';
ELSE
RETURN 'false';
END IF;
END;
/
正則版(10g+,支持多字節字符集)
CREATE OR REPLACE FUNCTION is_char_regex(p_ch VARCHAR2) RETURN VARCHAR2 IS
BEGIN
RETURN CASE WHEN REGEXP_LIKE(p_ch, '^[A-Za-z]$') THEN 'true' ELSE 'false' END;
END;
/
測試
SELECT is_char('A'), is_char('z'), is_char('1'), is_char('@'), is_char('中') FROM dual;
-- true, true, false, false, false
擴展:檢查字符串是否純字母
CREATE OR REPLACE FUNCTION is_alpha_str(p_str VARCHAR2) RETURN VARCHAR2 IS
BEGIN
RETURN CASE WHEN REGEXP_LIKE(p_str, '^[A-Za-z]+$') THEN 'true' ELSE 'false' END;
END;
/