RT.
请教大家一下,如何才能在insert语句前加if语句(判断当前数据库有无这条数据)
我现在的语句是这样的
IF (NOT EXISTS(SELECT * FROM TEST_TABLE WHERE TEST_ID = 'XXX') INSERT INTO TEST_TABLE (TEST_ID) VALUES('XXX')我执行的时候会报错,Unknown Command麻烦哪位朋友帮帮忙,谢谢。
请教大家一下,如何才能在insert语句前加if语句(判断当前数据库有无这条数据)
我现在的语句是这样的
IF (NOT EXISTS(SELECT * FROM TEST_TABLE WHERE TEST_ID = 'XXX') INSERT INTO TEST_TABLE (TEST_ID) VALUES('XXX')我执行的时候会报错,Unknown Command麻烦哪位朋友帮帮忙,谢谢。
谢谢
那请问怎样写呢? 单独定义一个变量来存储COUNT,再用IF语句判断吗?
谢谢,有没有一个稍微简单的例子呢?
因为每条INSERT 都有这样的一个判断,如果每次去查询然后再判断会非常复杂,当然,如果实在不行,也只有那样。之前用MS SQL数据库,只需要用IF NOT EXISTS就可以了。
begin
insert ....;
exception
when insert_exc then
....
end;
2,如果这些插入业务有同性的话,可以写个过程或者函数把检查的功能单独封装一下。
/*定义变量*/
BEGIN
/* SQL 编写 */
EXCEPTION WHEN OTHERS THEN
/* 处理异常 */
END;例如:下面是一个小例子....
/* drop table foo;
truncate table foo;
*/
/**创建一张用于测试的表**/
CREATE TABLE foo(
username VARCHAR2(100), --保存用户名字
userpwd VARCHAR2(100) --保存用户密码
);
INSERT INTO foo VALUES ('chenzw','chenzw');
INSERT INTO foo VALUES ('chenzz','chenzz');
/**
使用过程删除
目标:如果foo表中存在usernane为chenzw,则删除chenzz的用户
**/
DECLARE
n_flag NUMBER(2); --定义一个变量,用于判断符合条件的条数
BEGIN
/*得到username为chenzw的条数 */
SELECT COUNT(1)
INTO N_FLAG
FROM FOO
WHERE FOO.USERNAME = 'chenzw';
/* 如果条数多余1的时候,删除chenzz那一条*/
IF n_flag>0 THEN
DELETE FROM foo
WHERE foo.username ='chenzz';
END IF;
EXCEPTION WHEN OTHERS THEN
/**异常处理**/
NULL;
END;
SELECT * FROM foo;/**
使用一条语句删除
目标:如果foo表中存在usernane为chenzw,则删除chenzz的用户
**/
DELETE FROM FOO T
WHERE T.USERNAME = 'chenzz'
AND EXISTS (SELECT 1 FROM FOO A WHERE A.USERNAME = 'chenzw')
只需要将上面写的例子里面的delete from 修改为insert into 就ok了
(TEST_ID)
SELECT 'xxx'
FROM DUAL
WHERE NOT EXISTS (SELECT 1 FROM TEST_TABLE WHERE TEST_ID = 'xxx');但是不推荐这样,建议还是写个存储过程来判断吧。
if ... then
...;
end if ;
用sql:case...when...
用pl/sql:写个insert触发器就ok了哈。