如果记录不存在,则在SQL中插入记录
我希望在SQL中插入记录,这样如果条目的组合存在,那么脚本就不应该继续执行insert语句。以下是我到目前为止的情况:如果记录不存在,则在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
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提到了对合并的不了解。