我表中的数据大概如下:学号    姓名     分数
                      1234    张三     50,
                      5678    王五     70, 另外我要插入的数据有可能包括表中已经存在的,比如说要插入的数据有(1234,张三,50),(2356,李四,60),(5678,王五,70),(8787,赵七,60);怎么写一个sql语句,使在插入的时候碰到已经存在的就不插入,不存在的就插入?

解决方案 »

  1.   

    给表建立主键:create table test(id number primary key,name varchar2(8),sum number);
      

  2.   

    --学号为主键,这样写
    insert into tb1 select * from tb2 b where not exists(select * from tb1 where 学号=b.学号)
      

  3.   

    SQL> create or replace procedure p_insert(v_a  number , v_b varchar2, v_c number )
      2  is
      3  cu number;
      4  begin
      5  select count(1) into cu from test where a=v_a and b=v_b and c=v_c;
      6  if cu>0 then
      7  raise_application_error(-20003,'数据已存在');
      8  else insert into test values(v_a,v_b,v_c);
      9  end if;
     10  end;
     11  /Procedure createdSQL> select * from test;         A B                   C
    ---------- ---------- ----------
             1 as                 90
             2 afgs               58
             3 ggf                87
             4 adds              987
             1 fddfsg              4
         11.25                    456 rows selectedSQL> exec p_insert(1,'as',90);begin p_insert(1,'as',90); end;ORA-20003: 数据已存在
    ORA-06512: 在 "BWDASOC.P_INSERT", line 7
    ORA-06512: 在 line 1SQL> exec p_insert(1,'as',99);PL/SQL procedure successfully completed
      

  4.   

    也可以用merge into 实现也可以