Oracle For循环更新表中的记录

时间:2018-05-18 15:24:57

标签: oracle plsql oracle-sqldeveloper

我有两个表,doc(在database1中)和docs(在database2中)。使用以下关键字段:

doc: KEY,OLD_KEY
docs: RKEY

现在doc.OLD_KEY = docs.RKEY。 我正在检查doc.OLD_KEY = docs.RKEY的位置并设置docs.RKEY = doc.KEY。

我已经编写了以下语法,但是我无法成功运行,因为我以前没有使用for循环。

DECLARE
  OLD_KEY_var  NUMBER(10);
  KEY_var  NUMBER(38);
BEGIN
FOR dc.KEY IN (
  SELECT dc.KEY,dc.OLD_KEY INTO KEY_var,OLD_KEY_var
  FROM user.database2 docs,database1 dc
  where docs.RKEY=dc.OLD_KEY
  ) LOOP
   UPDATE user.database2 docs SET docs.RKEY = KEY_var where docs.RKEY=OLD_KEY_var;
 END LOOP;
END;

我有一个联系并在表之间授予权限,我正在

2 个答案:

答案 0 :(得分:0)

此操作不需要变量,您可以按如下方式执行此操作:

BEGIN
  FOR dc IN (SELECT dc.KEY, dc.OLD_KEY
               FROM user.database2 docs, database1 dc
              where docs.RKEY = dc.OLD_KEY) LOOP
    UPDATE user.database2 docs
       SET docs.RKEY = dc.KEY
     where docs.RKEY = dc.OLD_KEY;
  END LOOP;
END;

但是xQbert提供的选项看起来好多了!

答案 1 :(得分:0)

不需要循环或PL / SQL块。像这样的单一更新就可以了。

 UPDATE user.database2  
                 docs SET 
                   docs.RKEY = ( select KEY FROM database1 dc 
                       where 
                             docs.RKEY=dc.OLD_KEY
                             );

这假设每个键只返回1行,否则您必须在内部选择中选择适合您数据的MIN(key)MAX(key)