我試圖讓下面的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