Как обновить числовые строки данных в Oracle с использованием триггера - PullRequest
0 голосов
/ 01 марта 2012

Как мне написать запрос для обновления моих строк 'S'. Я хотел бы обновить текущий первичный ключ, чтобы изменить его номер. Я не уверен, что мне нужен подзапрос. Будет ли обновление счета, использовать тот же метод для обновления "S"? «S» обозначает номер студента, «C» обозначает номер курса.

Мой проверенный, но неуспешный запрос:

update grades set s = 114 where s = 100; 

'set s' - это то, что я хочу обновить, а 'где s' ищет строку с номером этого набора 's'. Правильно?

Вот мой запрос, триггер и выбор * из оценок выглядит следующим образом.

create table grades (
S varchar2(12),
C varchar2(10),
Score number(3,0),
Letter_Grade char(1),
Constraint pk_grades primary key (S),
Constraint CK_grades check (score between 0 and 100)
constraint lg_grades check (letter_grade  in ('A','B','C','D','F'))
);

SET SERVEROUTPUT ON
CREATE OR REPLACE TRIGGER MARK_BU
BEFORE UPDATE OF score ON grades
FOR EACH ROW
DECLARE
BEGIN
:NEW.letter_grade :=
 CASE 
    WHEN :NEW.score >= 80 THEN 'A'
    WHEN :NEW.score >= 70 THEN 'B'
    WHEN :NEW.score >= 60 THEN 'C'
    WHEN :NEW.score >= 50 THEN 'D'
   ELSE 'F'
END ;
DBMS_OUTPUT.PUT_LINE ('Numeric_grade was updated to:    ' || :NEW.score);
DBMS_OUTPUT.PUT_LINE ('Letter_grade was calculated to be:' || :NEW.letter_grade);
END;

S            C               SCORE L
------------ ---------- ---------- -
100          CST8255            49 F
101          CST8255            59 D
102          CST8255            69 C
103          CST8255            79 B
104          CST8255            89 A

1 Ответ

0 голосов
/ 01 марта 2012
update grades set s = 114 where s = 100; 

правильно это будет работать.

...