2015-03-13 63 views
0

我有一個表用於導入一些數據。此表有場這樣的:導入完成PLSQL - 作爲參數解決方法的功能

  • field_1
  • field_2
  • field_3

後,我所說的後處理過程,我必須做一些邏輯在這個領域(並且邏輯可能會因此而各不相同)並存儲在在線表格中。

這是一個可能的僞代碼:

DECLARE 
    rOnlineTable online_table%ROWTYPE; 
FOR cur in (SELECT * 
       FROM import_table 
      WHERE state IS NULL) 
LOOP 

    rOnlineTable.online_field_1 := handleField(/* here i would like to call a function that have the logic to handle cur.field_1*/); 
    rOnlineTable.online_field_2 := handleField(/* here i would like to call a function that have the logic to handle cur.field_2*/); 
    rOnlineTable.online_field_3 := handleField(/* here i would like to call a function that have the logic to handle cur.field_3*/); 

    INSERT INTO online_table VALUES rOnlineTable; 

END LOOP; 

這樣(我認爲)我可以改變只的處理方法的實現,如果在將來發生的事情會發生變化。或者我可以將其中一些處理函數替換爲其他字段(例如:明天field_1需要與field_3相同的邏輯)。

有一些解決方法可以做到這一點,或者可能是另一種更好的解決方案?

+1

我不知道,我在這裏看到的問題。或者至少我不明白你問的問題。爲什麼不能創建一個採用'cur.field_1'類型參數的函數並返回一個類型爲'rOnlineTable.online_field_1'的值? – 2015-03-13 14:15:30

+0

這些處理函數是否會在其他地方使用,或者代碼涉及冗長而複雜?如果是這樣,那麼通過一切手段使用一個功能。如果不是,但是,你所做的只是降低清晰度並增加複雜性。 ??? – 2015-03-15 17:18:28

回答

1

簡單的插入語句怎麼樣?

insert into online_table select func1(field1), func2(field2), func3(field3) from import_table 

其中func1..3會是什麼樣子

create or replace function func1(a in import_table.field1%type) return online_table.field1%type as 
begin 
    null; //some logic 
end;