2015-04-29 3 views
2

У меня есть Oracle таблицу с 4-мя колонками (имя, телефон, электронная почта, COUNT)Обновление значения столбца на 1 в таблице Oracle условно

Если пользователь обновляет значение столбца «Name», то мне нужно, чтобы увеличить значение столбца Count на 1.

Если пользователь обновляет, кроме столбца значений, то я нет необходимости для увеличения значения столбца графа на 1.

Первоначально, когда запись вставляется, счетчик должен быть равен 0. И каждый раз, когда «Имени ', значение Count должно увеличиваться на 1 (например, 1, 2, 3 .....)

Как мы можем достичь этого, я очень новичок в базе данных

благодарит за вашу помощь.

ответ

3

Вы можете сделать это в триггер обновления и вставить триггер или в свою программу. Однако позднее требуется, чтобы все возможные программы сотрудничали. Первый (триггеры) - это черное искусство.

Программа может сделать это следующим образом:

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

Это будет обновить один или нет записи (например, если телефон был уже 123 не будет делать ничего).

BTW: нет прекрасного решения, чтобы вставить его, если он отсутствует.

Хм, вы изменили свой вопрос, обновление имени проблематично, если у вас нет другого первичного ключа, это действительно то, что вы хотите?

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  [email protected]   1 
xyz  3435  [email protected]   0 


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

PL/SQL procedure successfully completed. 


SQL> 
SQL> 
SQL> select * from testing123; 

NAME  PHONE  EMAIL   COUNT 
---------- ---------- ---------- ---------- 
newabc1 12345  [email protected]   2 
xyz  3435  [email protected]   0 
Смежные вопросы