declare
select_stat varchar2(100):='select * from emp where lower(ename)=lower(''&ename'')';
emp_record emp%ROWTYPE;
begin
execute immediate select_stat INTO emp_record;
dbms_output.put_line(emp_record.ename||' '||emp_record.empno);
end;
/
注意了,其中的lower函数中一共是4的单引号啊!!!!
为什么这麽写呢??我换了其它形式都不行!!!
因此前面都有一个转义字符:单引号
嗯,你的意思我明白,相当于C中的"\\",但我直接输入值,为什么也错误???declare
select_stat varchar2(100):='select * from emp where lower(ename)=lower('SMITH')';
emp_record emp%ROWTYPE;
begin
execute immediate select_stat INTO emp_record;
dbms_output.put_line(emp_record.ename||' '||emp_record.empno);
end;
/
2 3 4 5 6 7 8 select_stat varchar2(100):='select * from emp where lower(ename)=lower('SMITH')';
*
ERROR at line 2:
ORA-06550: line 2, column 73:
PLS-00103: Encountered the symbol "SMITH" when expecting one of the following:
* & = - + ; < / > at in is mod remainder not rem
<an exponent (**)> <> or != or ~= >= <= <> and or like LIKE2_
LIKE4_ LIKEC_ between || multiset member SUBMULTISET_
The symbol "* was inserted before "SMITH" to continue.而这样就对:declare
select_stat varchar2(100):='select * from emp where lower(ename)=lower(''SMITH'')';
emp_record emp%ROWTYPE;
begin
execute immediate select_stat INTO emp_record;
dbms_output.put_line(emp_record.ename||' '||emp_record.empno);
end;
/
2 3 4 5 6 7 8 SMITH 7369PL/SQL procedure successfully completed.
晕
SMITH用在这应该用单引号引起来,而这个值又是嵌套在字符串里面单引号应该转译,所以应该是两个单引号才能发挥单引号的作用
明白了,可以把这句分成3个字符串看,用java理解
String temp="";
temp="select * from emp where lower(ename)=lower("+"SMITH"+")"
谢谢各位了!!!!!!!!!!!