線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:792
推到 Plurk!
推到 Facebook!

数据导入问题

尚未結案
zzmbeyond01
中階會員


發表:98
回覆:167
積分:53
註冊:2003-09-07

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-25 21:18:05 IP:222.183.xxx.xxx 未訂閱
各位先进: 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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-25 22:44:59 IP:222.183.xxx.xxx 未訂閱
声明中   TYPE c_dwgk IS REF CURSOR ;   C_dw c_dwgk; 用于获得lr_dwgk表中的记录集 Qry_str VARCHAR2(1000); cnt Number:=0; CURSOR C_DMGK IS SELECT t.dm FROM STUDY.DWGK t; DW STUDY.Dwgk%ROWTYPE; dwgk 与lr_dwgk两个表中的字段顺序不同,怎么解决???。。< >< >
zzmbeyond01
中階會員


發表:98
回覆:167
積分:53
註冊:2003-09-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-27 22:29:12 IP:222.183.xxx.xxx 未訂閱
各位大大:    DW DWGK%rowtype;    OPEN C_dw FOR 'SELECT * FROM '||v_user||'.Lr_DWGK'; 如果DWGK包含Lr_dwgk表中字段,并且两个表字段顺序不同,请问下句运行: FETCH C_dw INTO DW; 能实现把Lr_dwgk中的字段赋值给对应的DWGK对应的字段中去的效果呢?
pgdennis
資深會員


發表:41
回覆:526
積分:443
註冊:2002-05-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-28 14:31:16 IP:218.163.xxx.xxx 未訂閱
奇怪看你需求滿簡單的,你會不會寫的太複雜了
------
星期一,二...無窮迴圈@@
zzmbeyond01
中階會員


發表:98
回覆:167
積分:53
註冊:2003-09-07

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-28 16:41:51 IP:222.183.xxx.xxx 未訂閱
多谢,大大的方法真简洁
系統時間:2024-05-17 19:04:39
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!