SQL - 如果值存在于另一个表中,则插入到表中

标签 sql oracle toad

我试图让下面的 sql 查询工作,但出现错误,我的问题如下:

我需要遍历来自 select 语句的结果集(这部分很好)。在每一行的循环内,我需要检查表A中是否存在URL。如果是,则将映射插入 tableB,否则将新行插入 tableC。

这就是我所拥有的,但是当我尝试执行时,我收到一条错误消息,其中 IF 说 ORA-06550:第 8 行,第 15 列:PLS-00103:在预期以下情况之一时遇到符号“SELECT”:( - + case mod 新没有.....

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;

最佳答案

我怀疑你的 if 语句是罪魁祸首,因为你想要实现的目标绝对是可能的。你能不能试试下面的方法:

DECLARE 
STANDARD_LINK_ID TABLEB.LINK_ID%type;
URL_COUNT NUMBER(10);

BEGIN   
      FOR LINK_ROW IN ( SELECT LINKTEXT, LINKURL, CORPID FROM OLD_DATA)
      LOOP
          SELECT COUNT(URL) INTO URL_COUNT FROM TABLEA WHERE URL = LINK_ROW.LINKURL;
          IF URL_COUNT = 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;

希望它可以帮助您找出问题所在。

关于SQL - 如果值存在于另一个表中,则插入到表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8356159/

相关文章:

oracle - 为 Oracle 存储过程依赖关系图生成 DDL

MySql 查询按时间分组

c# - 为什么这个带有参数化 sql 的 C# 数据库应用程序不能工作?

sql - 将 UTF-8 字符串经典 ASP 转换为 SQL 数据库

oracle - SQLplus解码执行脚本

mysql - 使用 Toad 时出现无效脚本错误

用于从日期中提取年份的 SQL 查询

c# - 使用 C# 的输出参数运行存储的 SQL 过程

java - 超出最大游标数 SQLException-- 配置问题或游标泄漏?

sql - 新的oracle用户无法访问表