想知道如何更改以下SQL,以便插入仅发生在唯一的link_row实例中。因此,如果在seletc中拉回完全相同的值,我只想执行循环并首次插入。SQL - for循环重复问题
BEGIN
FOR LINK_ROW IN (SELECT LINKTEXT, LINKURL, CORPID FROM LINKS)
LOOP
//Do insert here
当我运行该脚本,我得到了主键冲突的错误作为同一项目被两次插入内循环。
在此先感谢
想知道如何更改以下SQL,以便插入仅发生在唯一的link_row实例中。因此,如果在seletc中拉回完全相同的值,我只想执行循环并首次插入。SQL - for循环重复问题
BEGIN
FOR LINK_ROW IN (SELECT LINKTEXT, LINKURL, CORPID FROM LINKS)
LOOP
//Do insert here
当我运行该脚本,我得到了主键冲突的错误作为同一项目被两次插入内循环。
在此先感谢
您将使用UNIQUE
或DISTINCT
关键字来限制您的选择结果。
但是,插入并选择一个语句会好得多。
INSERT INTO <table>
VALUES (linktext, linkurl, corpid)
SELECT UNIQUE linktext, linkurl, corpid
FROM links;
您可以使用DISTINCT
关键字,并从链接表中选择的唯一记录:
BEGIN
FOR LINK_ROW IN (SELECT DISTINCT LINKTEXT, LINKURL, CORPID FROM LINKS)
LOOP
不过,虽然我不知道您的查询的严重程度,有通常比在SQL中使用循环更好的完成任务的方式。 SQL是声明式的,并且设计为与集合一起工作,所以你想告诉数据库引擎你想做什么,不是如何来做它。
还有更多的插入,我没有显示,然后插入到不同的表中取决于在FOR返回的值。使用独特和独特的区别是什么 – Kaskade
它们是可以互换的,Oracle对待它们是一样的。 – Ollie