我有4个列的Oracle表(名称,电话,电子邮件,计数)
如果用户正在更新'Name'列的值,那么我需要将Count列值增加1。
如果用户正在更新列以外的值,那么我不需要将Count列值增加1。
最初,当插入记录时,count应该为0.每次更新“Name”列时,Count应该增加1(如1,2,3 ......)
我们如何实现这一目标,我是数据库的新手
非常感谢你的帮助。
答案 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