【问题标题】:I want to update table emp_appointment with data from other table data我想用其他表数据中的数据更新表 emp_appointment
【发布时间】:2021-06-26 18:44:24
【问题描述】:

我有两个名为 emp_appointmentemployees 的表。 Employees 有 2 列名为 EMPLOYEE_ID1SUBSID_ACCOUNT_IDX 和表 emp_appointment 也有 2 列名为 dep_idEMPLOYEE_ID1 我想用 employees 表的数据更新表 emp_appointmentdep_id来自SUBSID_ACCOUNT_IDX 列的两者都有相同的 id,所以我写了这段代码但没有工作

DECLARE  
   EMP_id EMPLOYEES.EMPLOYEE_ID1%TYPE;  
   SUBSID_ID EMPLOYEES.SUBSID_ACCOUNT_IDX%TYPE;
 
   CURSOR C_EMP is  
      SELECT EMPLOYEE_ID1, SUBSID_ACCOUNT_IDX FROM EMPLOYEES WHERE SUBSID_ACCOUNT_IDX =  EMPLOYEE_ID1 ;  
BEGIN  
   OPEN C_EMP;  
   LOOP  
      FETCH C_EMP into EMP_id,SUBSID_ID ;
      UPDATE EMP_APPOINTMENT
  SET DEP_ID = SUBSID_ID
WHERE EMPLOYEE_ID1= SUBSID_ID; 
      EXIT WHEN C_EMP%notfound;      
      
END LOOP;  
CLOSE C_EMP;  
END;

请大师帮忙

【问题讨论】:

  • 如果您有一些无法运行的代码,告诉我们是什么,特别是您所看到的非常有帮助。你有错误吗?如果是这样,什么错误?是编译错误还是运行时错误?什么行号?什么是错误堆栈?或者它没有做你期望的事情?如果是这样,请告诉我们什么不起作用。类似“表 A 中有一行数据看起来像这样,表 B 中有一行数据看起来像这样。我运行此代码,我希望 B 被更新为看起来像这样,但它实际上看起来像那样”用什么数据。
  • @JustinCave Respected 它没有给我任何错误,也没有给我任何东西,只是程序完成消息,所以我有什么细节我通过了,谢谢你的关注
  • 这是您应该包含的有用信息。这至少可以确认您的代码可以编译并运行。然后有人可以查看并注意到您的where 子句将employee_idsubsid_id 进行比较,而不是可能是emp_id

标签: oracle plsql oracle11g plsqldeveloper


【解决方案1】:

首先,您应该不要这样做,除非 dep_id id 必须作为外键的一部分。你所做的只是复制数据,这只是一个坏主意。它会使您面临数据不一致的情况,即当 dep_id 包含员工中不存在的值时会发生什么。相反,您应该只加入表格并从员工中选择 subsid_account_idx。但如果你坚持,那么只需使用一次更新。

update emp_appointment  ea 
    set dep_id = (select subsid_account_idx 
                    from employees e 
                   where e.employee_id1 = ea.employee_id1
                 );   

【讨论】:

  • 感谢您的解释和代码为我工作再次感谢
【解决方案2】:

你可以用这个:

MERGE INTO emp_appointment e
    USING employees. Employees h
    ON (h.EMPLOYEE_ID1= e.SUBSID_ID)
  WHEN MATCHED THEN
    UPDATE SET e.DEP_ID = h.SUBSID_ACCOUNT_IDX ;

这合并成语法:

MERGE INTO table1
  USING table_reference h
  ON (conditions)
  WHEN MATCHED THEN
    UPDATE SET table1.column1 = h.value1, table1.column2 = h.value2
    

【讨论】:

    猜你喜欢
    • 2011-06-29
    • 1970-01-01
    • 2019-01-16
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多