Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.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-for循环重复问题_Sql_Oracle_Plsql - Fatal编程技术网

SQL-for循环重复问题

SQL-for循环重复问题,sql,oracle,plsql,Sql,Oracle,Plsql,只是想知道我将如何更改以下SQL,以便插入只发生在唯一的链接行实例中。因此,如果在seletc中返回完全相同的值,我只想执行循环并第一次插入 BEGIN FOR LINK_ROW IN ( SELECT LINKTEXT, LINKURL, CORPID FROM LINKS ) LOOP //Do insert here 当我运行脚本时,由于同一项在循环中被插入了两次,因此在主键冲突上会出现错误 提前感谢您可以使用DISTINCT关键字从链接

只是想知道我将如何更改以下SQL,以便插入只发生在唯一的链接行实例中。因此,如果在seletc中返回完全相同的值,我只想执行循环并第一次插入

BEGIN   
      FOR LINK_ROW IN ( SELECT LINKTEXT, LINKURL, CORPID FROM LINKS )
      LOOP
          //Do insert here
当我运行脚本时,由于同一项在循环中被插入了两次,因此在主键冲突上会出现错误


提前感谢

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

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

然而,尽管我不知道查询的完整范围,但通常有比在SQL中使用循环更好的方法来完成任务。SQL是声明性的,设计用于处理集合,因此您希望告诉数据库引擎您想做什么,而不是如何做。

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

但最好在一条语句中执行insert和select

INSERT INTO <table>
 VALUES (linktext, linkurl, corpid)
 SELECT UNIQUE linktext, linkurl, corpid
   FROM links;
插入到
值(linktext、linkurl、corpid)
选择唯一链接文本、链接URL、corpid
从链接;

insert还有很多我没有展示的地方,它会根据FOR中返回的值插入到不同的表中。使用unique和distinct有什么区别?它们是可互换的,Oracle对它们一视同仁。