2012-04-23 37 views
0

我是oracle新手,所以不確定如何在oracle中編寫存儲過程。目前,我正在使用Google在網上搜索一些關於SP的文章/博客。我開始想知道這件事。即使那樣我也有以下幾個疑問。如何在oracle中編寫存儲過程?

我所試圖做的是,

我有EMP_ID,地區,部門,產品,名稱等

我也有EMP_ID emp_update表,列一個Employee表(什麼改變),old_value,new_value和日期。

例如emp_update表的emp_id = 10將有一行,表示該地區在4月30日從亞洲轉爲英國。

同一個emp的另一行表示產品在4月30日從A更改爲B.

因此,同一員工和同一日期的多個條目。

現在在那個特定的日期,我正在運行一個cron作業,它將運行此sp以將僱員表更新爲這些更新。

例如在4月30日,更新僱員設置區域=英國,產品= 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; 

目前這是我迄今

+0

任何方向? – ashishjmeshram 2012-04-23 13:42:32

+0

您是否希望*單個更新語句或您需要*單個更新語句? – 2012-04-23 13:52:47

+0

請參閱Oracle文檔:http://docs.oracle。com/cd/E11882_01/appdev.112/e25519/toc.htm您可以在那裏閱讀,然後查看他們的示例列表。 – tbone 2012-04-23 14:24:32

回答

0

這個問題做似乎不那麼有關存儲過程和更多的創建動態查詢。基本上,你想要這個:

  1. cron作業,調用存儲過程
  2. PROC將在emp_update遍歷記錄今天的日期,由employee_id
  3. 你將開始建立一個動態SQL的組表達排序更新語句的基於查詢中的值。簡稱爲「COLUMN_NAME = NEW_VALUE,」級聯遍地用於該EMPLOYEE_ID /日期組合的每一列。
  4. 建立你的SQL與模板UPDATE EMP SET <previous string here> WHERE EMPLOYEE_ID = <emp_id>
  5. 執行動態更新sql
+0

這正是我正在尋找的。但不知道如何在存儲過程中實現這一點。我有一個按計劃運行並調用此sp的cron作業。現在我只需要sp裏面的東西。 – ashishjmeshram 2012-04-24 12:23:58

+0

以下是Oracle關於在PL/SQL中創建動態SQL的一些文檔:http://docs.oracle.com/cd/B10501_01/appdev.920/a96590/adg09dyn.htm – 2012-04-24 21:05:46