2012-02-29 2 views
0

'S'행을 업데이트하는 쿼리를 작성하려면 어떻게해야합니까? 현재 기본 키를 업데이트하여 숫자를 변경하고 싶습니다. 하위 쿼리가 필요한지 확실하지 않습니다. 점수를 업데이트 하시겠습니까? 같은 방법으로 "S"를 업데이트 하시겠습니까? "S"는 학생 번호를 나타내며 "C"는 코스 번호를 나타냅니다.트리거를 사용하여 Oracle에서 숫자 행의 데이터를 업데이트하는 방법

내 시도했지만 실패 쿼리는

update grades set s = 114 where s = 100; 

'설정의이'나는으로 업데이트 할 무엇이다 인의 어디에 '그 세트의'수의 행을 찾고있다. 권리?

여기 내 쿼리, 트리거 및 선택 *에서 성적이 있습니다.

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 
+0

쿼리에 "실패"한 내용은 무엇입니까? 문법적으로 유효하며 'SCORE'가 89이고 SCORE가 95 인 행을 업데이트합니다. 'S'가 104이고 C가'CST8255' 인 행을 갱신하고 변경합니다 'SCORE' ~ 95. –

+0

오, 혼란스러워 혼란 스러웠습니다. 와우. 이거 쉽지. – GivenPie

+0

기본 키 값을 변경하는 것이 구문 적으로 적합하지만 일반적으로 기본 키가 잘못 선택되었음을 나타냅니다. 변경할 기본 키 값을 참조하는 외래 키가있는 하위 테이블이있는 경우 상위 열을 변경하면 해당 제약 조건으로 인해 오류가 발생합니다. –

답변

0
update grades set s = 114 where s = 100; 

는 작동 올바른입니다.

관련 문제