如果条件不存在,我会做什么和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;
提前致谢
答案 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 ...