【发布时间】:2015-12-17 10:24:00
【问题描述】:
要求是将带有单引号的变量作为参数传递给立即执行。到目前为止,我已经尝试了下面的代码 sn-p..
如何让下面的代码工作??
declare
v_val varchar2(5);
v_match varchar2(5);
v_query VARCHAR2(500);
begin
v_val:='a''a';
dbms_output.put_line(v_val);
v_val:=replace(v_val,'''','''''');
dbms_output.put_line(v_val);
v_query:='select val from test where val='||''''||v_val||''''||' and 1=1';
execute immediate v_query into v_match;
if(v_match=v_val) then
dbms_output.put_line('match found');
else
dbms_output.put_line(' no match found');
end if;
end;
换句话说: 我想接受一个带撇号的输入到替换变量中,然后在 select 语句的 where 子句中使用该变量从表中提取数据。
i/p 值:a'a select * from table where keyval=&inputval;
【问题讨论】:
-
为什么不用绑定变量?
-
在
REPLACE调用v_val 之后应该有a''a,但是您的SELECT 语句正在寻找v_val 中不存在的前导和尾随撇号。也许这会给你一个想法。祝你好运。