Oracle Insert Into If If Exist

时间:2017-09-12 10:04:08

标签: sql oracle plsql

如果条件不存在,我会做什么和Pl_SQL脚本进行一些插入

它不适合我:(

这是我的代码

在CURSOR中的参数

FOR ps IN paramS LOOP
    compteur := 5;

LOOP  
        IF NOT EXISTS
          (SELECT *
            FROM carp.Table1
            WHERE FK_tab1  =ps.id_tab1
            AND DIC_TYPE = compteur
          )
            BEGIN
          INSERT
              INTO carp.Table1
                (
                  id,
                  FK_tab1,
                  DIC_TYPE
                )
                VALUES
                (
                  id.nextval ,
                  ps.id_tab1 ,
                  compteur 
                )
             END

    compteur:=compteur-1;
    commit;
    EXIT WHEN compteur <0;
 END LOOP;
END LOOP;

提前致谢

3 个答案:

答案 0 :(得分:3)

通常我会使用这样的检查,If not exists无法在oracle上工作(据我所知)

DECLARE 
CNT NUMBER(4);
BEGIN
  SELECT COUNT(1) INTO CNT
            FROM carp.Table1
            WHERE FK_tab1  =ps.id_tab1
            AND DIC_TYPE = compteur

  IF CNT = 0 THEN
INSERT
              INTO carp.Table1
                (
                  id,
                  FK_tab1,
                  DIC_TYPE
                )
                VALUES
                (
                  id.nextval ,
                  ps.id_tab1 ,
                  compteur 
                )
 End IF;    
END;
/
commit
/

答案 1 :(得分:1)

您可以使用NO_DATA_FOUND例外

BEGIN
  SELECT * FROM carp.Table1
    WHERE FK_tab1 = ps.id_tab1
      AND DIC_TYPE = compteur
EXCEPTION
  WHEN NO_DATA_FOUND THEN
    INSERT INTO carp.Table1 (id, FK_tab1, DIC_TYPE)
      VALUES(id.nextval, ps.id_tab1, compteur);
    COMMIT;
END

答案 2 :(得分:0)

你可以使用:

来避免count()
DECLARE FG_EXISTS NUMBER(1);
BEGIN
      SELECT CASE  WHEN EXISTS(SELECT 1
                             FROM CARP.TABLE1
                             WHERE FK_TAB1  =PS.ID_TAB1
                             AND DIC_TYPE = COMPTEUR
                             ) THEN 1 ELSE 0 END INTO FG_EXISTS
       FROM DUAL;
       IF FG_EXISTS = 0 THEN INSERT ...