先分析一下
根据提供的参数,进行对相应id的姓名性别进行更改,也就是说必须对下面的SQL语句进行拆分
update test set name='郭德纲' , sex='男' where id='1001'
拆分成
1.update test set name='
2.郭德纲 ——也就是传递过来的参数
3.' , sex='
4.男
5.' where id='
6.1001
7.'
上面的拆分只是一个思路,在实际编写的过程中可根据情况进行调整,由于涉及到多个字段的更新(即动态更新),必须要考虑的是","如何添加的问题,不理解没关系,看代码就懂了
CREATE OR REPLACE PROCEDURE updateinfo_id(
myid in varchar,
myname in varchar,
mysex in varchar)
AS
mypl varchar2(100);
myname2 varchar(20);
mysex2 varchar(20);
BEGIN
mypl:='update test set ';
if(myname is not null) then
mypl:=mypl || 'name=' ||''''|| myname ||''''||' ,';
end if;
if(mysex is not null) then
mypl:=mypl || 'sex=' ||''''|| mysex ||''''|| ' ,';
end if;
mypl:=substr(mypl,0,length(mypl)-1);
mypl:=mypl || 'where id=' ||''''|| myid ||'''';
dbms_output.put_line(mypl);
execute immediate mypl;
select name,sex into myname2,mysex2 from test where id=myid;
dbms_output.put_line('编号' || myid ||'姓名'|| myname2 || '性别' || mysex2);
END;
/
我的思路是:
判断相应字段的参数是否为空,若不为空则进行更新操作(即构造mypl)
那么里面的''''连续四个单引号是什么??是为了对update语句中的单引号进行转义,这部分在网上不难找到http://www.voidcn.com/article/p-kzxhbqih-be.html
每对mypl进行构造一次,则在后面加个",",然后再最后将最后面的逗号通过substr函数去掉
===================================
插入的操作也和这个类似