Help Center/
Database and Application Migration UGO/
User Guide/
Syntax Conversion/
Risky Custom Functions/
Replacing Custom Oracle Functions with GaussDB Functions/
soundex
Updated on 2025-06-07 GMT+08:00
soundex
Database Type and Version
- Source database type and version: all Oracle versions
- Target database type and version: GaussDB of versions earlier than V2.0-2.7
Function replacement syntax:
CREATE OR REPLACE FUNCTION dsc_ora_ext.dsc_fn_soundex /* This function is used to replicate the behaviour of Oracle SOUNDEX */ ( i_str IN TEXT ) RETURN TEXT IMMUTABLE AS v_soundex TEXT; v_str_to_be_proc TEXT; v_symbol TEXT; v_last_symbol TEXT := ''; v_pos INTEGER := 1; BEGIN IF i_str IS NULL THEN RETURN NULL; END IF; /* The below statement works only if the "fuzzystrmatch" extension is created if not created, NULL is assigned into v_soundex in EXCEPTION */ BEGIN v_soundex := SOUNDEX(i_str); EXCEPTION WHEN OTHERS THEN v_soundex := NULL; END; IF v_soundex IS NOT NULL THEN RETURN v_soundex; END IF; WHILE v_soundex IS NULL OR LENGTH(v_soundex) < 4 LOOP v_str_to_be_proc := UPPER(SUBSTR(i_str, v_pos, 1)); v_pos := v_pos + 1; CASE WHEN v_str_to_be_proc IS NULL THEN -- End of i_str string IF v_soundex IS NULL THEN RETURN ''; ELSE RETURN RPAD(v_soundex, 4, '0'); END IF; WHEN v_str_to_be_proc IN ('B', 'F', 'P', 'V') THEN v_symbol := '1'; WHEN v_str_to_be_proc IN ('C', 'G', 'J', 'K', 'Q', 'S', 'X', 'Z') THEN v_symbol := '2'; WHEN v_str_to_be_proc IN ('D', 'T') THEN v_symbol := '3'; WHEN v_str_to_be_proc = 'L' THEN v_symbol := '4'; WHEN v_str_to_be_proc IN ('M', 'N') THEN v_symbol := '5'; WHEN v_str_to_be_proc = 'R' THEN v_symbol := '6'; ELSE -- Not a consonant; no output, but next similar consonant will be re-recorded v_symbol := NULL; END CASE; IF v_soundex IS NULL THEN -- First character; only accept strictly English ASCII characters IF v_str_to_be_proc ~>=~ 'A' AND v_str_to_be_proc ~<=~ 'Z' THEN v_soundex := v_str_to_be_proc; v_last_symbol := v_symbol; END IF; ELSIF (v_last_symbol IS NULL AND v_symbol IS NOT NULL) OR (v_last_symbol IS NOT NULL AND v_symbol IS NULL) OR (v_last_symbol != v_symbol) THEN v_soundex := v_soundex || v_symbol; v_last_symbol := v_symbol; END IF; END LOOP; RETURN v_soundex; END;
Parent topic: Replacing Custom Oracle Functions with GaussDB Functions
Feedback
Was this page helpful?
Provide feedbackThank you very much for your feedback. We will continue working to improve the documentation.See the reply and handling status in My Cloud VOC.
The system is busy. Please try again later.
For any further questions, feel free to contact us through the chatbot.
Chatbot