2012-04-23 8 views
0

私はoracleを初めて使っているので、oracleにストアド・プロシージャを書く方法についてはわかりません。現在、私はグーグルでSP上のネット上のいくつかの記事/ブログをグーグルで読んで読んでいます。私はそれについていくつかの考えを得ることを始めている。それでも、私はいくつかの質問に従っています。私がやろうとしています何oracleにストアドプロシージャを書き込む方法は?

され、

私は地域、部門、プロダクト、タイトルなど、EMP_IDとEmployeeテーブルを持っている

私はまた、(変更されたものを、EMP_IDでカラムをemp_updateテーブルを持っています)、old_value、new_value、およびdate。

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

4月30日に製品がAからBに変更されたことを示す同じempの別の行。

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

私はこの特定の日付にこのSpを実行して、これらの更新プログラムに社員テーブルを更新するcronジョブを実行しています。

4月30日に、従業員セット領域=英国、製品= Bを更新します(emp_id = 10の場合)。

その日のemp_updateテーブルからのすべての更新を含む従業員に対して1つの更新文を実行します。

だから基本的には、

は今日のアップデートでemp_updateから全従業員を取得します。 従業員の更新を繰り返し、1つの更新ステートメントでそれらを組み立てて、その更新クエリを実行します。各従業員に対して を繰り返します。

助けてください

EDIT 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; 

現在、これは私がこれまで

+0

どのような指示がありますか? – ashishjmeshram

+0

1つの更新ステートメントが必要ですか?1つの更新ステートメントが必要ですか? –

+0

Oracle docs:http://docs.oracleを参照してください。com/cd/E11882_01/appdev.112/e25519/toc.htmあなたはそこでいくつかの読書をしてから、その例のリストを見ることができます。 – tbone

答えて

0

この質問に行わ動的な作成についてストアドプロシージャについてはあまり多くあるように思われているものですクエリ。基本的に、あなたはこれをしたい:保存

  1. cronジョブの呼び出しは、手続き
  2. procがemployee_id
  3. によって並べ替えられ、今日の日付とemp_updateのレコードを反復しますあなたはセット式のための動的SQLの構築を開始します照会からの値に基づいて更新ステートメントの。単純に「COLUMN_NAME = NEW_VALUE」は、そのemployee_id/dateの組み合わせごとに列ごとに繰り返し連結されています。
  4. テンプレートUPDATE EMP SET <previous string here> WHERE EMPLOYEE_ID = <emp_id>でSQLをビルドします。
  5. 動的更新を実行する
+0

これは私が探しているものです。しかし、ストアドプロシージャでこれをどのように実装するかはわかりません。私は日程に従って実行し、このspを呼び出すcronジョブを持っています。今私はspの中に入るものだけが必要です。 – ashishjmeshram

+0

PL/SQLで動的SQLを作成する方法については、Oracleの次のドキュメントを参照してください。http://docs.oracle.com/cd/B10501_01/appdev.920/a96590/adg09dyn.htm –

関連する問題