数据导入问题 |
尚未結案
|
zzmbeyond01
中階會員 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
各位先进:
Oracle8.16
将一个用户单位表(LR_DWGK)中的数据导入到另一个用户单位表(DWGK)中。
思路如下:
/*
lr_dwgk中的各个记录是否在dwgk中,如果在则更新,否则插入新记录
判断dwgk是否每个记录在lr_dwgk中,不存在则删除
*/
v_user VARCHAR2(10); v_cnt number:=0; --判断用户是否存在 v_sql VARCHAR2 (4000); TYPE c_dwgk IS REF CURSOR ; C_dw c_dwgk; Qry_str VARCHAR2(1000); cnt Number:=0; CURSOR C_DMGK IS SELECT t.dm FROM STUDY.DWGK t; DW STUDY.Dwgk%ROWTYPE; begin v_user:='DW'||p_year; --判断该用户是否存在,否则触发用户不存在异常 SELECT COUNT(*) INTO v_cnt FROM all_users t WHERE t.USERNAME =UPPER(v_user); IF v_cnt<>1 THEN --触发异常 RAISE E_NO_USER; ELSE Qry_str :='SELECT * FROM '||v_user||'.Lr_DWGK'; OPEN C_dw FOR Qry_str; LOOP /*设置退出条件*/ FETCH C_dw INTO DW; EXIT WHEN SQL%NOTFOUND; /*更新单位记录*/为什么到这里会死循环,不能调试了呢?? UPDATE DWGK SET DM=dw.dm, DW=dw.dw, ZDB1=dw.zdb1 WHERE dm=dw.dm; /*不存在则插入新记录*/ IF SQL%NOTFOUND THEN INSERT INTO DWGK(DM, DW, ZDB1) VALUES(dw.dm,dw.dw,dw.zdb1); END IF; END LOOP; CLOSE C_dw; /*删除不存在的单位记录*/ FOR V_dm IN C_DMGK LOOP Qry_str:='SELECT COUNT(*) FROM ' ||v_user||'.LR_DWGK' ||' WHERE DM= :dm'; EXECUTE IMMEDIATE Qry_str INTO cnt USING V_dm.dm; IF cnt=0 THEN DELETE FROM DWGK t WHERE t.dm=V_dm.dm; END IF; END LOOP; end if;發表人 - zzmbeyond01 於 2004/12/25 21:26:12 發表人 - zzmbeyond01 於 2004/12/25 21:29:36 |
zzmbeyond01
中階會員 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
|
zzmbeyond01
中階會員 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
|
pgdennis
資深會員 發表:41 回覆:526 積分:443 註冊:2002-05-23 發送簡訊給我 |
|
zzmbeyond01
中階會員 發表:98 回覆:167 積分:53 註冊:2003-09-07 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |