A資料表為每個人電腦課的時數名細,(NO,NAME,H1,NAA)→自動編號,姓名,時數,課堂名稱
B資料表為每個人英文課的時數名細,(NO,NAME,H2,NBB)→自動編號,姓名,時數,課堂名稱
C資料表為每個人上課時數的總額,  (NAME,H1,H2,HR) →姓名,電腦課時數總額,英文課時數總額,電腦課加英文課總額因為在C資料表中,有些筆資料"電腦課加英文課總額"不等於"電腦課時數總額+英文課時數總額"←不知道為什麼就,目前還在查看中,但因資料要先改為正確的...我想要寫一個PROCEDURES(初學著想要用PROCEDURES來修改資料,請幫忙)
先去比對A資料表的某人所有時數加起來後要=C資料表的電腦課時數總額
        B資料表的某人所有時數加起來後要=C資料表的英文課時數總額如果符合,就去修改C資料表中的電腦課加英文課總額(也就是HR),將他改為正確的...總額請問我目前已經將那些錯誤的資料抓出來了,可要怎麼去判斷他加總的時數要一樣呢??
CURSOR app1 IS
         SELECT SUM(A.H1) E,P.name,P.H1
         FROM A,(SELECT * FROM C WHERE B.HR <> B.H1+B.H2 ) P
 WHERE A.NAME =P.NAME
         GROUP BY P.name,P.H1;CURSOR app2 IS
         SELECT SUM(B.H2) E,Q.name,Q.H2
         FROM B,(SELECT * FROM C WHERE B.HR <> B.H1+B.H2 ) Q
 WHERE B.NAME =Q.NAME
         GROUP BY Q.name,Q.H2;BEGIN
 IF (app1.E=app1.H1 AND APP2.E=APP2.H2) THEN --錯誤訊息的地方
    BEGIN
UPDATE C 
SET C.HR = C.H1+C.H2
WHERE C.NAME='ABC';--以某一筆為例,錯測試。
END;
 END IF;
END;
小妹不才,用最笨的方式,還出現錯誤..他出現"PLS-00225參數用超出範疇
請指教..

解决方案 »

  1.   


    app1和app2是两个游标~怎么能直接用呢?
      

  2.   


    begin
    for i in(select a.e1,a.h1,b.e2,b.h2 from (SELECT SUM(A.H1) E1,P.name,P.H1
      FROM A,(SELECT * FROM C WHERE B.HR <> B.H1+B.H2 ) P
    WHERE A.NAME =P.NAME
      GROUP BY P.name,P.H1) a,(SELECT SUM(B.H2) E2,Q.name,Q.H2
      FROM B,(SELECT * FROM C WHERE B.HR <> B.H1+B.H2 ) Q
    WHERE B.NAME =Q.NAME
      GROUP BY Q.name,Q.H2) b where a.name=b.name) loop
    if i.E1=i.H1 AND i.E2=i.H2 then 
    UPDATE C  
    SET C.HR = C.H1+C.H2
    WHERE C.NAME='ABC';
    end if;
    end loop;
    end;