SQL-for循环重复问题
只是想知道我将如何更改以下SQL,以便插入只发生在唯一的链接行实例中。因此,如果在seletc中返回完全相同的值,我只想执行循环并第一次插入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关键字从链接
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对它们一视同仁。