求一个ORACLE存储过程

萤火架构 2007-12-13 01:08:12
需求:
表中包含字段a1
更新表中的一条记录,如果要更新的a1已经存在表中,则将a1+1,然后再更新
...全文
235 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ready_go1 2007-12-21
  • 打赏
  • 举报
回复
create or replace procedure pro_t1
IS
cursor cur_t1 IS
select * from t1 where col2='aa';
begin
for get_cur_t1 in cur_t1 loop
if get_cur_t1=='aa' then
update t1 set col1:='xx';
elsif
update t1 set aa:=aa||1;
end if;
end loop;
end;
/

这是我做的一个不成熟的程序 大家看看 给修改一下吧
霖湘凝 2007-12-21
  • 打赏
  • 举报
回复
粗写了一个,没有试,楼主可以自己试试

CREATE OR REPLACE PROCEDURE P_CHANGE
IS
V_SQL VARCHAR2(600);
BEGIN
V_SQL:='alter table1 add(flag VARCHAR2(1))';
EXECUTE IMMEDIATE V_SQL;

V_SQL:='update table1 set col1=a1+1,flag=''1'' where col2=''xx'' and col1=a1';
EXECUTE IMMEDIATE V_SQL;
COMMIT;

V_SQL:='update table1 set col1=a1 where col2=''xx'' and col1<>a1' and flag=''1'';
EXECUTE IMMEDIATE V_SQL;
COMMIT;

V_SQL:='alter table1 drop column flag';
EXECUTE IMMEDIATE V_SQL;
END;
/

CALL P_CHANGE();
/

drop procedure P_CHANGE
/
萤火架构 2007-12-21
  • 打赏
  • 举报
回复
最基本的语句:
update table1 set col1=(a1或者a1+1) where col2='xx'
leech125 2007-12-21
  • 打赏
  • 举报
回复
a1是 col1的值,还是col2 的值?
萤火架构 2007-12-21
  • 打赏
  • 举报
回复
是我没说明白
一张表:table1,其中有两个字段:col1,col2
有一个值a1

根据条件col2='xx'查询出来一条记录

在table1中
如果col1中不存在a1这个值,直接更新这条记录
如果col1中已经存在a1这个值,则将a1+1,然后更新这条记录

不知道各位明白了吗?
sTigerwsk 2007-12-20
  • 打赏
  • 举报
回复
啊?真写成死循环了?

不是在没有找到时会退出函数吗?

难道异常捕获写错了?
wy2000490 2007-12-14
  • 打赏
  • 举报
回复
做结果变更还是还存储过程里面写吧
没有人再函数里面写!
hongqi162 2007-12-14
  • 打赏
  • 举报
回复
什么叫死循环?看来你是好久没写了!
sTigerwsk 2007-12-14
  • 打赏
  • 举报
回复
连个退出条件都不给,不是让人写死循环嘛。

其实没太明白楼主的意思,记录存在时更新不?

要是记录存在不更新,那不就是插入新记录了?

不管了,做了一个函数,不断去更新,除非记录没查到。

create function test(
al in varchar2)
return number
as
v_temp varchar2(100)
begin
while 1<>2
loop
begin
select column into v_temp from table where column = al;
exception
when NO_DATA_FOUND
then
return 1;
end;
update table set column = XX;
al := al + 1;
end;

大概就这样吧。 好久没写了。
hongqi162 2007-12-13
  • 打赏
  • 举报
回复
如果a1为null时更新a1字段为v,如果不为空值更新为a1+1
create or replace procedure sp_test(v int) is
begin
update ttt set a1=decode(a1,null,v,a1+1);
end sp_test;
yuxingye 2007-12-13
  • 打赏
  • 举报
回复
你的需求太不明确了,说的详细一点

17,134

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧