在表中重复插入数据时作如下处理:若插入的数据已经存在则更新,否则插入,怎么写?

解决方案 »

  1.   


    Declare
    L_x Number;
    Begin
    --
      select count(1)
       Into L_x
       From t
         Where --判断重复的条件
      If l_x=0 Then
       Insert Into t --新增
      Else
       Update t
          Where --判断重复的条件
      End If;
    End;
      

  2.   

    这样写做简单SELECT * FROM TAB WHERE ID=?IF SQL%NOTFOUNT THEN
    INSERT INTO TAB
    END IF
    用隐藏式游标
      

  3.   

    有一个语句可以实现这样的功能的,语法如下MERGE <hint> INTO <table_name>
    USING <table_view_or_query>
    ON (<condition>)
    WHEN MATCHED THEN <update_clause>
    WHEN NOT MATCHED THEN <insert_clause>;
      

  4.   

    例如:
    CREATE TABLE employee (
    employee_id NUMBER(5),
    first_name  VARCHAR2(20),
    last_name   VARCHAR2(20),
    dept_no     NUMBER(2),
    salary      NUMBER(10))
    TABLESPACE data_sml;INSERT INTO employee VALUES (1, 'Dan', 'Morgan', 10, 100000);
    INSERT INTO employee VALUES (2, 'Jack', 'Cline', 20, 100000);
    INSERT INTO employee VALUES (3, 'Elizabeth', 'Scott', 20, 50000);
    INSERT INTO employee VALUES (4, 'Jackie', 'Stough', 20, 40000);
    INSERT INTO employee VALUES (5, 'Richard', 'Foote', 20, 30000);
    INSERT INTO employee VALUES (6, 'Joe', 'Johnson', 20, 70000);
    INSERT INTO employee VALUES (7, 'Clark', 'Urling', 20, 90000);
    COMMIT;CREATE TABLE bonuses (
    employee_id NUMBER, bonus NUMBER DEFAULT 100)
    TABLESPACE data_sml;INSERT INTO bonuses (employee_id) VALUES (1);
    INSERT INTO bonuses (employee_id) VALUES (2);
    INSERT INTO bonuses (employee_id) VALUES (4);
    INSERT INTO bonuses (employee_id) VALUES (6);
    INSERT INTO bonuses (employee_id) VALUES (7);
    COMMIT;MERGE INTO bonuses B
    USING (
      SELECT employee_id, salary
      FROM employee
      WHERE dept_no =20) E
    ON (B.employee_id = E.employee_id)
    WHEN MATCHED THEN
      UPDATE SET B.bonus = E.salary * 0.1
    WHEN NOT MATCHED THEN
      INSERT (B.employee_id, B.bonus)
      VALUES (E.employee_id, E.salary * 0.05);
      

  5.   

    这个好像不能用trigger做吧,这个应该在insert 之前判断