RT.
请教大家一下,如何才能在insert语句前加if语句(判断当前数据库有无这条数据)
我现在的语句是这样的
IF (NOT EXISTS(SELECT * FROM TEST_TABLE WHERE TEST_ID = 'XXX') INSERT INTO TEST_TABLE (TEST_ID) VALUES('XXX')我执行的时候会报错,Unknown Command麻烦哪位朋友帮帮忙,谢谢。

解决方案 »

  1.   

    ORACLE里不能这样写,必须先SELECT COUNT(*)进行判断
      

  2.   


    谢谢
    那请问怎样写呢? 单独定义一个变量来存储COUNT,再用IF语句判断吗?
      

  3.   


    谢谢,有没有一个稍微简单的例子呢?
    因为每条INSERT 都有这样的一个判断,如果每次去查询然后再判断会非常复杂,当然,如果实在不行,也只有那样。之前用MS SQL数据库,只需要用IF NOT EXISTS就可以了。
      

  4.   

    1,可直接insert ,然后定义个异常来接收。
    begin
      insert ....;
    exception 
       when insert_exc then 
           ....
    end;
    2,如果这些插入业务有同性的话,可以写个过程或者函数把检查的功能单独封装一下。
      

  5.   

    DECLARE
      /*定义变量*/
    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')
      

  6.   

    oh  楼上问的是insert
    只需要将上面写的例子里面的delete from 修改为insert into 就ok了
      

  7.   

    INSERT INTO TEST_TABLE
      (TEST_ID)
      SELECT 'xxx'
        FROM DUAL
       WHERE NOT EXISTS (SELECT 1 FROM TEST_TABLE WHERE TEST_ID = 'xxx');但是不推荐这样,建议还是写个存储过程来判断吧。
      

  8.   


    if ...  then
      ...;
    end if ;

      

  9.   

    有两种方法:
    用sql:case...when...
    用pl/sql:写个insert触发器就ok了哈。