sql - Oracle SQL 正则表达式 - 在正则表达式查询中传递变量名称
问题描述
我想在我的 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]*'
);