解决方案 »

  1.   

    用merge into 实现更快,就不需要写游标了
      

  2.   

    如果不是主键发生变化,merge into 的写法
    MERGE INTO ODS
    USING STG
    ON ( ods.header_id = STG.header_id)
    WHEN MATCHED THEN
      UPDATE SET ODS.a=STG.a,ODS.b = STG.b
    WHEN NOT MATCHED THEN 
      INSERT (header_id,a,b) VALUES(STG.header_id,STG.a,STG.b);如果真的是主键变化的话可以考虑这样做
    DELETE FROM ODS
    WHERE NOT EXISTS (SELECT 1 FROM STG WHERE ods.header_id = STG.header_id);INSERT INTO ODS
    SELECT * FROM STG
    WHERE NOT EXISTS (SELECT 1 FROM ODS WHERE ods.header_id = STG.header_id);
      

  3.   

    可以利用sql语句生成代码的,如下面语句就可以一次性将某个表的字段全部提取出来的
    select to_char(wmsys.wm_concat(column_name)) from user_tab_columns where table_name='你的表名'
      

  4.   

    好多重复性的操作都可以用sql语句生成的
      

  5.   

    感谢大神指点,问题解决了。但我有个问题,如果字段有100多个,没可能全部写出来的,有什么办法优化吗?一点建议,楼主可以了解一下Informatica PowerCenter之类的ETL工具
      

  6.   

    符合条件就更新不符合就插入的情况可以用merge into语句,另外如果你是用pl/sql工具的话可以把表拖到sql窗口就可以出来你的一百多个字段了
      

  7.   

    同意楼主的解答,使用merge  into 通过主键连接两张表,游标不是很了解,merge into 会快点。