循环使用表A并使用PL/SQL更新表B列C.

Lan*_*ane 2 sql oracle plsql

有一个叫做的表TableA和另一个叫做的表TableB

我需要复制的列值ValueC表中TableB的列ValueD在表中TableA.两个表共享一个公共列:Table_id

我试过用:

DECLARE 
   CURSOR c_App
   IS
     SELECT *
       from TableA
BEGIN 
   for i in c_App
   LOOP
     select ValueD from TableB where Table_id = c_App.Table_id;
   END LOOP;
   update TableA set ValueC = ValueD  where Table_id = c_App.Table_id
END;
Run Code Online (Sandbox Code Playgroud)

但是,我在SQL开发人员中遇到错误:

PLS-00103: Encountered the symbol "END" when expecting one of the following:

   begin function package pragma procedure subtype type use
   <an identifier> <a double-quoted delimited-identifier> form
   current cursor
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

有没有更简单的方法?我对PL/SQL比较陌生,虽然我觉得联接可能是一个更容易的选择.

Nic*_*nov 5

在您的情况下无需使用程序处理.您可以使用merge语句完成此操作:

merge 
 into tableA ta
using TableB tb
   on (ta.table_id = tb.table_id)
when matched
then update 
        set ta.valueD = tb.valueC
Run Code Online (Sandbox Code Playgroud)