Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果记录不存在,则在SQL中插入记录_Sql_Oracle_Insert_Duplicates - Fatal编程技术网

如果记录不存在,则在SQL中插入记录

如果记录不存在,则在SQL中插入记录,sql,oracle,insert,duplicates,Sql,Oracle,Insert,Duplicates,我希望在SQL中插入记录,这样如果条目的组合存在,那么脚本就不应该继续执行insert语句。以下是我到目前为止的情况: insert into TABLE_TESTING(R_COMPONENT_ID,OPRID) select 1942,'Test' from TABLE_TESTING where not exists (select * from TABLE_TESTING where R_COMPONENT_ID='1942' a

我希望在SQL中插入记录,这样如果条目的组合存在,那么脚本就不应该继续执行insert语句。以下是我到目前为止的情况:

insert into TABLE_TESTING(R_COMPONENT_ID,OPRID) 
select 1942,'Test' 
from  TABLE_TESTING 
where not exists 
    (select * 
     from TABLE_TESTING 
     where R_COMPONENT_ID='1942' 
       and oprid ='Test');
我有一个表名:table_TESTING 它有两列:R\u COMPONENT\u ID和OPRID

如果数据库中已存在记录“1942”和“Test”的组合,则我的脚本不应执行插入操作,如果它确实存在,则应将记录作为R_组件ID和OPRID的组合插入

请建议。 使用上面指定的查询,我在数据库中添加了多个insert。请提出一些解决方案。

试试这个

if not exists(Select * From TABLE_TESTING where R_COMPONENT_ID='1942' and OPRID='Test' )
begin
    insert into TABLE_TESTING(R_COMPONENT_ID,OPRID) values('1942','Test')
end
试试这个

if not exists(Select * From TABLE_TESTING where R_COMPONENT_ID='1942' and OPRID='Test' )
begin
    insert into TABLE_TESTING(R_COMPONENT_ID,OPRID) values('1942','Test')
end
你可以利用操作。

你可以利用操作

insert into TABLE_TESTING  
select 1942,'Test' where 0<(
select count(1) from TABLE_TESTING 
where not exists(select 1 from TABLE_TESTING  where R_COMPONENT_ID=1942 and oprid ='Test'))
试试上面的代码


试试上面的代码。

这里有一个使用合并的skelton。我运行了它,它运行得很好。您可以根据需要进一步调整它。希望这有帮助

DECLARE
BEGIN
   FOR CURTESTING IN (SELECT R_COMPONENT_ID, OPRID FROM TABLE_TESTING)
   LOOP
      MERGE INTO TABLE_TESTING
           USING DUAL
              ON (R_COMPONENT_ID = '1942' AND OPRID = 'Test')
      WHEN NOT MATCHED
      THEN
         INSERT     (PK, R_COMPONENT_ID, OPRID)
             VALUES (TEST_TABLE.NEXTVAL, '1942', 'Test');
   END LOOP;

   COMMIT;
END;

这里有一个使用合并的骨架。我运行了它,它运行得很好。您可以根据需要进一步调整它。希望这有帮助

DECLARE
BEGIN
   FOR CURTESTING IN (SELECT R_COMPONENT_ID, OPRID FROM TABLE_TESTING)
   LOOP
      MERGE INTO TABLE_TESTING
           USING DUAL
              ON (R_COMPONENT_ID = '1942' AND OPRID = 'Test')
      WHEN NOT MATCHED
      THEN
         INSERT     (PK, R_COMPONENT_ID, OPRID)
             VALUES (TEST_TABLE.NEXTVAL, '1942', 'Test');
   END LOOP;

   COMMIT;
END;

由于您不想更新现有行,因此您的方法基本上是正确的。您需要做的唯一更改是替换insert语句源中的from表_测试:

insert into TABLE_TESTING (R_COMPONENT_ID,OPRID) 
select 1942,'Test' 
from  dual -- <<< this is the change
where not exists 
    (select * 
     from TABLE_TESTING 
     where R_COMPONENT_ID = 1942
       and oprid = 'Test');

由于您不想更新现有行,因此您的方法基本上是正确的。您需要做的唯一更改是替换insert语句源中的from表_测试:

insert into TABLE_TESTING (R_COMPONENT_ID,OPRID) 
select 1942,'Test' 
from  dual -- <<< this is the change
where not exists 
    (select * 
     from TABLE_TESTING 
     where R_COMPONENT_ID = 1942
       and oprid = 'Test');


它说的是指挥错误。下面是我正在执行的查询:如果不存在,请从表_TESTING中选择*,其中R_COMPONENT_ID='1942'和opid='Test'开始插入到表_TESTINGR_COMPONENT_ID中,OPRID值'1942','Test'结束;我在我的Oracle SQL Developer中执行了此操作。我不知道Oracle SQL Developer。我的意思是仅限SQL SERVER。请建议。是的,我的ans在SQL SERVER中工作,dnt knw关于OSD。对于oracle sql developer ref,此[link]表示在命令中启动时出错。下面是我正在执行的查询:如果不存在,请从表_TESTING中选择*,其中R_COMPONENT_ID='1942'和opid='Test'开始插入到表_TESTINGR_COMPONENT_ID中,OPRID值'1942','Test'结束;我在我的Oracle SQL Developer中执行了此操作。我不知道Oracle SQL Developer。我的意思是仅限SQL SERVER。请建议。是的,我的ans在SQL SERVER中工作,dnt knw关于OSD。对于oracle sql开发人员,请参考此[链接],因为我是sql新手,因此没有太多的知识。最好获得一些知识,而不仅仅是复制粘贴。只是一个建议。酷。因为我是SQL新手,所以没有太多的知识。学习一些知识比复制粘贴要好。只是一个建议。酷。你用的是哪种数据库管理系统?博士后?甲骨文?@一匹没有名字的马我在用甲骨文。你在用哪种数据库管理系统?博士后?Oracle?@a_horse_,没有名称我正在使用Oracle。获取以下错误代码:SQL错误:ORA-00923:FROM关键字未在预期的00923位置找到。00000-在预期的位置未找到FROM关键字设置以下错误代码:SQL错误:ORA-00923:在预期的位置未找到FROM关键字00923。00000-找不到FROM关键字,在循环中进行合并不是一个好主意。这可以在不使用非常慢的光标的情况下完成,我同意。这个想法是给skelton一个合并的概念,正如@user3373799提到的不了解合并。在循环中进行合并不是一个好主意。这可以在不使用非常慢的光标的情况下完成,我同意。这样做的目的是让skelton了解合并,因为@user3373799提到了对合并的不了解。