我使用dbms_sql
绑定了一些问题。用户创建语句并赋予它可以起作用以及绑定及其值。这意味着我对这个陈述一无所知。输入可以是
select salary from employee where name like '%:name%'
这会引发ORA-01006
。 This post引出了我的原因:绑定在单引号内,因此它们被视为文字而非约束。
我写了一些代码来调整语句。但它仅适用于给定的示例('%<binding>%'
)。是否有任何方法(可能使用正则表达式)来解决引号内的所有绑定?
因此,如果输入类似于'<any pre content><binding><any post content>'
,则应将其修改为'<any precontent>''||<binding>||''<any post content>'
(希望能够清除我的意愿)。
我不擅长使用正则表达式,所以我的解决方案非常不灵活:
l_sql := replace(l_sql, '%:'||p_name||'%', '%''||:'||p_name||'||''%');
BTW:我使用的是Oracle 11g。