0

私はOracleを初めて使用するため、Oracleでストアドプロシージャを作成する方法がわかりません。現在、私はオラクルのSPでネット上のいくつかの記事/ブログをグーグルで読んでいます。私はそれについていくつかのアイデアを得始めています。それでも、私はいくつかの質問をフォローしています。

私がやろうとしているのは、

emp_id、Region、Division、Product、TitleなどのEmployeeテーブルがあります。

また、emp_id、column(変更内容)、old_value、new_value、およびdateを含むemp_updateテーブルもあります。

たとえば、emp_updateテーブルにはemp_id = 10の行があり、4月30日に地域がアジアから英国に変更されたことを示します。

同じ従業員の別の行は、4月30日に製品がAからBに変更されたことを示しています。

したがって、同じ従業員と同じ日付の複数のエントリ。

その特定の日に、このSpを実行して従業員テーブルをこれらの更新に更新するcronジョブを実行しています。

たとえば、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;

現在、これは私がこれまでに行ったことです

4

1 に答える 1

0

この質問は、ストアドプロシージャに関するものではなく、動的クエリの作成に関するもののようです。基本的に、これが必要です。

  1. cronジョブはストアドプロシージャを呼び出します
  2. emp_updateProcは、今日の日付でレコードを繰り返し処理します。employee_id
  3. クエリの値に基づいて、updateステートメントのset式の動的SQLの構築を開始します。そのemployee_id/dateの組み合わせの各列に対して、単に「COLUMN_NAME=NEW_VALUE」を繰り返し連結します。
  4. テンプレートを使用してSQLを作成しUPDATE EMP SET <previous string here> WHERE EMPLOYEE_ID = <emp_id>ます。
  5. 動的更新sqlを実行します
于 2012-04-23T13:55:34.937 に答える