Oracle存储过程where语句使用变量

存储过程中,传入一个参数V_DQDM。要求V_DQDM长度是6位时,语句为updatetable1.....wheredqdm=V_DQDM。当V_DQDM长度小于6位时... 存储过程中,传入一个参数V_DQDM。要求V_DQDM长度是6位时,语句为update table1 ..... where dqdm=V_DQDM 。当V_DQDM长度小于6位时,语句为update table1 ..... where dqdm like V_DQDM||'%'。
因为语句较多,可不可以像java程序里一样,使用一个变量,用拼字符串的方式,实现一个where 语句。
如java 中,String wheSql=""; if(v_dqdm.length()>=6){wheSql=" where dqdm =' "+v_dqdm+" ' "}else{wheSql=" where dqdm like ' "+v_dqdm+ " %' "}
"update table ...... "+wheSql ;
求一个存储过程完整的写法。谢谢
展开
 我来答
badkano
推荐于2016-04-21 · 知道合伙人体育行家
badkano
知道合伙人体育行家
采纳数:144777 获赞数:885360
团长

向TA提问 私信TA
展开全部
create PROCEDURE p_update
(V_DQDM in varchar2(6))
as
begin
if length(V_DQDM)=6
then
update table1 ..... where dqdm=V_DQDM;
commit;
else
update table1 ..... where dqdm like V_DQDM||'%';
commit;
end if;
end p_update;

类似这么写

追问
不是这个意思。有很多很多的update语句。希望把where语句作为一个变量来用。
这样update语句只要写一个就行了。你这样要写两个。
就像上面写的java的例子一样。
追答
create PROCEDURE p_update
(V_DQDM in varchar2)
as
v_str varchar2(200);
begin
select case when length(V_DQDM<6) then 'dqdm like V_DQDM||'%'' else 'dqdm=V_DQDM' into v_str from dual;
execute immediate 'update table1 ..... where '||v_str|| '';
end p_update;

没试过这种写法,可能%号那还需要转义,有点麻烦,只能给你提供点思路了
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式