Pattern Matching in PL/SQL – LIKE and REGEXP Examples
Pattern Matching in PL/SQL is a technique used to search strings that follow specific patterns. It allows developers to retrieve data not by exact value but by how it matches a form—either partially, loosely, or precisely. Oracle supports two main methods for this:
LIKE operator – traditional, wildcard-based matching
REGEXP_LIKE – advanced matching using regular expressions
Introduction to Pattern Matching in PL/SQL
In PL/SQL, pattern matching refers to evaluating text columns using partial or flexible string criteria. This is useful in scenarios like:
Finding all names starting with “J”
Filtering data that contains specific characters
Matching specific structured values (e.g., IDs, codes, etc.)
Using the LIKE Operator for Pattern Matching in PL/SQL
The LIKE operator allows for pattern matching in the WHERE clause using two wildcards:
%: Matches any number of characters_: Matches a single character
SELECT column1
FROM table_name
WHERE column1 LIKE 'pattern';
Example: Pattern Matching with LIKE
CREATE OR REPLACE PROCEDURE author_sel (
i_last_name IN AUTHORS.LAST_NAME%TYPE,
cv_author OUT SYS_REFCURSOR
)
IS
v_last_name AUTHORS.LAST_NAME%TYPE;
BEGIN
v_last_name := '%' || UPPER(i_last_name) || '%';
OPEN cv_author FOR
SELECT id, first_name, last_name
FROM authors
WHERE UPPER(last_name) LIKE v_last_name;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
VARIABLE x REFCURSOR
EXEC author_sel('rin', :x)
PRINT x
28 Sumit Sarin
54 Cheryl Riniker
REGEXP_LIKE Function for Pattern Matching in PL/SQL
REGEXP_LIKE is a function introduced in Oracle 10g. It offers powerful pattern matching using regular expressions, which support complex criteria far beyond what LIKE allows.
REGEXP_LIKE(column, pattern [, match_parameter])
column: column to be searchedpattern: regular expression stringmatch_parameter: optional flags (ifor case-insensitive)
Common Regular Expression Metacharacters
| Character | Description |
|---|---|
* | Matches zero or more characters |
. | Matches any single character |
^ | Matches the start of a string |
$ | Matches the end of a string |
[] | Defines a set or range of characters |
| ` | ` |
() | Groups expressions |
\ | Escape character |
Example: REGEXP_LIKE in a PL/SQL Procedure
CREATE OR REPLACE PROCEDURE author_sel_regexp_like (
cv_author OUT SYS_REFCURSOR
)
IS
BEGIN
OPEN cv_author FOR
SELECT id, first_name, last_name
FROM authors
WHERE REGEXP_LIKE(last_name, '^har(d|t)man$', 'i');
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
This matches:
Hardman
Hartman
Ignores case
VARIABLE x REFCURSOR
EXEC author_sel_regexp_like(:x)
PRINT x
44 Ron Hardman
55 Robert Hartman
Best Practices
Use
LIKEfor simple pattern matching on short strings.Use
REGEXP_LIKEfor complex or structured pattern criteria.Always normalize data (e.g., use
UPPER()) for consistent matching.Escape special characters in user input for REGEXP security.
Use indexed columns carefully with pattern matching—performance may degrade.
AmantPoint Exclusive Learning Series
© 2025 AmantPoint. All rights reserved. Educational content for developers and learners.
