SQL - for循环重复问题

时间:2011-12-02 15:41:01

标签: sql oracle plsql

只是想知道如何更改以下SQL,以便只对唯一的link_row实例进行插入。因此,如果在seletc中拉回完全相同的值,我只想进行循环并第一次插入。

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

当我运行脚本时,我在主键违规时会出现错误,因为同一项目在循环内被插入两次。

提前致谢

2 个答案:

答案 0 :(得分:5)

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

但是在一个语句中进行插入和选择会好得多。

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

答案 1 :(得分:4)

您可以使用DISTINCT关键字从LINKS表中仅选择唯一记录:

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

但是,虽然我不知道查询的完整程度,但通常比在SQL中使用循环更好地完成任务。 SQL是声明性的,设计用于集合,因此您希望告诉数据库引擎您想要做什么而不是这样做。