Oracle SQL Regex-在Regex查询中传递变量名



我想在我的Oracle SQL查询中使用一个变量,该查询使用正则表达式进行筛选。当我在SQL查询中硬编码所需的字符串("TKelly"(时,原始查询运行良好:

SELECT Custom_Unique_Name from USERS
WHERE REGEXP_LIKE (Custom_Unique_Name, '^TKelly[^A-Za-z][0-9]*') 

输出:

CUSTOM_UNIQUE_NAME
------------------
TKelly1
TKelly3
TKelly2

然而,当我试图在同一个查询中使用一个变量时,它的工作方式并不完全相同。

variable vname varchar2(20)
exec :vname := 'TKelly';
PL/SQL procedure successfully completed.
SELECT Custom_Unique_Name from USERS
WHERE REGEXP_LIKE (Custom_Unique_Name, '^'|| :vname || [^A-Za-z][0-9]'*');

输出:

ORA-00936: missing expression
00936. 00000 -  "missing expression"

正则表达式的其余部分缺少单引号:

WHERE REGEXP_LIKE(Custom_Unique_Name,
'^'|| :vname || '[^A-Za-z][0-9]*'
);

最新更新