2011-12-02 81 views
0

想知道如何更改以下SQL,以便插入仅发生在唯一的link_row实例中。因此,如果在seletc中拉回完全相同的值,我只想执行循环并首次插入。SQL - for循环重复问题

BEGIN 
     FOR LINK_ROW IN (SELECT LINKTEXT, LINKURL, CORPID FROM LINKS) 
     LOOP 
      //Do insert here 

当我运行该脚本,我得到了主键冲突的错误作为同一项目被两次插入内循环。

在此先感谢

回答

5

您将使用UNIQUEDISTINCT关键字来限制您的选择结果。

但是,插入并选择一个语句会好得多。

INSERT INTO <table> 
VALUES (linktext, linkurl, corpid) 
SELECT UNIQUE linktext, linkurl, corpid 
    FROM links; 
+0

还有更多的插入,我没有显示,然后插入到不同的表中取决于在FOR返回的值。使用独特和独特的区别是什么 – Kaskade

+0

它们是可以互换的,Oracle对待它们是一样的。 – Ollie

4

您可以使用DISTINCT关键字,并从链接表中选择的唯一记录:

BEGIN 
     FOR LINK_ROW IN (SELECT DISTINCT LINKTEXT, LINKURL, CORPID FROM LINKS) 
     LOOP 

不过,虽然我不知道您的查询的严重程度,有通常比在SQL中使用循环更好的完成任务的方式。 SQL是声明式的,并且设计为与集合一起工作,所以你想告诉数据库引擎你想做什么不是如何来做它。