我试图让下面的SQL查询工作,但我得到一个错误,我的问题是:SQL - 插入到表,如果在另一个表存在价值
我需要通过设置一个结果循环从选择语句(这部分是好的)。在每一行的循环内,我需要检查URL是否存在于tableA中。如果确实如此,则将映射插入到tableB中,否则将新行插入到tableC中。
这就是我所拥有的,但是当我尝试执行时,我得到一条与IF中的错误说ORA-06550:第8行,第15列:PLS-00103:遇到符号“SELECT”下面:( - +案例国防部新的无.....
DECLARE
STANDARD_LINK_ID TABLEB.LINK_ID%type;
BEGIN
FOR LINK_ROW IN (SELECT LINKTEXT, LINKURL, CORPID FROM OLD_DATA)
LOOP
IF (SELECT COUNT(URL) FROM TABLEA WHERE URL = LINK_ROW.LINKURL) = 1
THEN
SELECT LINKID INTO STANDARD_LINK_ID FROM TABLEA WHERE URL = LINK_ROW.URL;
INSERT INTO TABLEB(LINK_ID, CORP_ID)
VALUES (STANDARD_LINK_ID, LINK_ROW.CORPID);
ELSE
INSERT INTO TABLEB(LINK_ID, LINK_NAME, URL, CORP_ID)
VALUES (SEQ_LINK.NEXTVAL, LINK_ROW.LINKTEXT, LINK_ROW.LINKURL,
LINK_ROW.CORP_ID);
END IF;
END LOOP;
COMMIT;
END;
现在我来自不同的世界,但是如果它像我的世界一样,集合操作比循环要快得多。不知道这对于oracle是否也是如此,所以请随时给我启发 – Asken
我认为SQL世界中的'loop'是某种邪恶的东西,特别是当有一种方法可以使用一个hit中有很多记录的结果集(如在这种情况下)。 –
+1我同意性能和避免循环通常是一件好事。 – xQbert