0

我是 oracle 新手,所以不确定如何在 oracle 中编写存储过程。目前我正在谷歌上搜索并阅读一些关于 Oracle SP 的网上文章/博客。我开始对此有了一些想法。即使这样,我也有以下几个问题。

我想做的是,

我有一个 Employee 表,其中包含 emp_id、Region、Division、Product、Title 等。

我还有 emp_update 表,其中包含 emp_id、列(更改的内容)、old_value、new_value 和日期。

例如,emp_update 表将有一行 for emp_id = 10,表示区域在 4 月 30 日从亚洲更改为英国。

同一 emp 的另一行表示产品在 4 月 30 日从 A 更改为 B。

因此,同一员工和同一日期的多个条目。

现在在那个特定的日期,我正在运行一个 cron 作业,它将运行这个 Sp 以将员工表更新为这些更新。

例如,在 4 月 30 日,更新员工集 region = UK,Product = B,其中 emp_id = 10。

我想为员工运行一条更新语句,其中包含该日期来自 emp_update 表的所有更新。

所以基本上,

从 emp_update 获取所有员工,并在今天更新。遍历员工更新,将它们组装在单个更新语句中,然后执行该更新查询。对每个员工重复。

请帮忙

编辑1:-

    CREATE OR REPLACE
PROCEDURE SP_RUN_EMPLOYEE_UPDATES 
IS


 CURSOR 
    c_emp 
 IS
    SELECT DISTINCT(employee_id) as employee_id FROM BI_EMPLOYEE_UPDATE WHERE EFFECTIVE_DATE = to_date('30-Apr-2012','dd-mm-yy');

BEGIN

FOR employee in c_emp

  LOOP

    CURSOR 
        c_emp_update 
    IS
      SELECT * FROM BI_EMPLOYEE_UPDATE WHERE employee_id = :employee.employee_id AND EFFECTIVE_DATE = to_date('30-Apr-2012','dd-mm-yy');

    FOR emp_update in c_emp_update
    LOOP



  --      dbms_output.put_line(emp_update.column_name);
    END LOOP;

  END LOOP;

END;

目前这是我到目前为止所做的

4

1 回答 1

0

这个问题似乎不是关于存储过程,而是更多关于创建动态查询。基本上,你想要这个:

  1. Cron 作业调用存储过程
  2. Proc 将遍历emp_update具有今天日期的记录,按以下方式排序employee_id
  3. 您将根据查询中的值开始为更新语句的集合表达式构建动态 SQL 。只需将“COLUMN_NAME = NEW_VALUE”一遍又一遍地连接到该employee_id/date 组合的每一列。
  4. 使用模板构建您的 SQL UPDATE EMP SET <previous string here> WHERE EMPLOYEE_ID = <emp_id>
  5. 执行动态更新sql
于 2012-04-23T13:55:34.937 回答