如何在oracle中编写存储过程?

时间:2012-04-23 13:20:33

标签: oracle stored-procedures cursor

我是oracle的新手,所以不确定如何在oracle中编写存储过程。目前我正在谷歌搜索和阅读在甲骨文SP上的一些文章/博客。我开始对它有所了解。即使这样,我也有几个问题。

我想做的是,

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

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

e.g。 emp_update表将有一行for emp_id = 10,表示该区域于4月30日从亚洲更改为英国。

同一个emp的另一行表示产品于4月30日从A变为B.

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

现在在那个特定的日期,我正在运行一个cron作业,它将运行此Sp来更新employee表到这些更新。

e.g。在4月30日,更新员工设置区域= UK,产品= 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;

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

1 个答案:

答案 0 :(得分:0)

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

  1. Cron作业调用存储过程
  2. Proc将使用今天的日期迭代emp_update中的记录,按employee_id
  3. 排序
  4. 您将根据查询中的值开始为update语句的 set expression 构建动态SQL。只需“COLUMN_NAME = NEW_VALUE”,就该employee_id / date组合的每一列重复连接。
  5. 使用模板UPDATE EMP SET <previous string here> WHERE EMPLOYEE_ID = <emp_id>构建SQL。
  6. 执行动态更新sql