有一个表,假设是这样的
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;
总觉得应该有更方便的办法,请指点一下:)
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;
总觉得应该有更方便的办法,请指点一下:)
也可以select count(*) into vcount from Test where WHERE field1 = v_field1;
然后判断vcount是不是0。
那么如果不存在的话就会异常啊?虽然还是可以goto回来,但是用异常作为逻辑的一部分不太好吧
但是如果没有主键约束呢?如果要保证表内不存在重复数据,为什么不加约束条件呢?
------