有一个表,假设是这样的
CREATE TABLE Test (
       field1       number(7)  primary key,
       field2       varchar2(30)
       );
假设field1上有索引。
然后在PL/SQL程序中要对该表进行插入操作,在插入之前要判断一下是否重复,我前面用了个很笨的方法,总觉得不爽,发上来大家给点比较好的方法。
我是这样做的:
UPDATE Test
       SET field1 = v_field1
       WHERE field1 = v_field1;
       IF (SQL%NOTFOUND) THEN
                INSERT INTO Test VALUES(v_field1, v_field2);
       END IF;
当然还可以这样:
OPEN c_Record FOR SELECT field1 FROM Test WHERE field1 = v_field1;
FETCH c_Record INTO v_temp;
IF(c_Record%NOTFOUND) THEN
        INSERT INTO Test VALUES(v_field1, v_field2);
END IF;
总觉得应该有更方便的办法,请指点一下:)

解决方案 »

  1.   

    就着样直接insert啊,然后用异常处理来处理已经存在的异常就ok
      

  2.   

    这样做就可以啊,然后在else中抛出异常就行了。这样做有什么不好吗?
    也可以select count(*) into vcount from Test where WHERE field1 = v_field1;
    然后判断vcount是不是0。
      

  3.   

    如果用select count(*) into vcount from Test where WHERE field1 = v_field1;
    那么如果不存在的话就会异常啊?虽然还是可以goto回来,但是用异常作为逻辑的一部分不太好吧
      

  4.   

    delete from Test a where a.rowid!=(select max(rowid) from Test b where a.field1=b.field1);
      

  5.   

    acmly():我觉得你这如果出现重复插入的话,应该在前台给出相应提示,所以我说在这里判断后抛出一个异常信息给前台,前台捕捉后给出相应提示。----
    但是如果没有主键约束呢?如果要保证表内不存在重复数据,为什么不加约束条件呢?
    ------
      

  6.   

    要是删除表中重复数据的话,qfsb_p(我心飞翔)已经给出方法了
      

  7.   

    请问honghulong,那个merge into 好像是要从一个表中插入到另一个表吧,如果数据源是一个变量该怎么办呢?
      

  8.   

    哪位知道merge into 如果数据源是变量时候的用法?