有条件地在Oracle表中将列值更新为1

时间:2015-04-29 01:46:06

标签: sql database oracle

我有4个列的Oracle表(名称,电话,电子邮件,计数)

如果用户正在更新'Name'列的值,那么我需要将Count列值增加1。

如果用户正在更新列以外的值,那么我不需要将Count列值增加1。

最初,当插入记录时,count应该为0.每次更新“Name”列时,Count应该增加1(如1,2,3 ......)

我们如何实现这一目标,我是数据库的新手

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:5)

您可以在更新中插入触发器或在程序中执行此操作。然而,后者需要所有可能的计划进行合作。前者(触发器)是黑人艺术。

程序可以这样做:

UPDATE Person SET Count=Count+1, Phone='123' WHERE name=`csr` and Phone <> '123'; 

这将更新一个或没有记录(即如果电话已经是123,它将什么也不做)。

BTW:如果缺少它,就没有好的解决方案。

嗯,你改变了你的问题,如果你没有其他主键,更新名称是有问题的,这真的是你想要的吗?

答案 1 :(得分:0)

如果您正在查看plsql程序,那么您可以使用此方法, 我使用3个输入变量,

1。)要编辑的列名

2。)旧值

3。)要更新的新值

SQL>   create or replace procedure updateval (colname varchar2,oldval varchar2,newval varchar2) is
  2    l_prop varchar2(10);
  3    l_newval varchar2(10);
  4    l_old_val varchar2(10);
  5       begin
  6      l_prop:=colname;
  7      l_newval:=newval;
  8      l_old_val:=oldval;
  9       IF (upper(l_prop)='NAME') THEN
 10       update TESTING123 set  name=l_newval,count=count+1 where name=l_old_val;
 11       elsif (upper(l_prop)='PHONE') THEN
 12       update TESTING123 set  PHONE=l_newval ,count=count+1where PHONE=l_old_val;
 13       elsif (upper(l_prop)='EMAIL') THEN
 14       update TESTING123 set  EMAIL=l_newval ,count=count+1 where EMAIL=l_old_val;
 15        END IF;
 16    end;
 17   /

Procedure created.


SQL>
SQL> select * from testing123;

NAME       PHONE      EMAIL           COUNT
---------- ---------- ---------- ----------
abc1       12345      ABC@a.COM           1
xyz        3435       xyz@a.COM           0


SQL> exec updateval ('NAME','abc1','newabc1');

PL/SQL procedure successfully completed.


SQL>
SQL>
SQL> select * from testing123;

NAME       PHONE      EMAIL           COUNT
---------- ---------- ---------- ----------
newabc1    12345      ABC@a.COM           2
xyz        3435       xyz@a.COM           0