2013-04-04 46 views
2

假設我有兩張表,payments_received和payments_processed。我想在PL/SQL中聲明一個變量以將數據從一個表複製到另一個表中。兩個表都有一個保存相同值的字段,比如payor_name。我使用哪個表來定義%TYPE,「from」或「to」?Oracle%TYPE:當一個var,兩個表,如何定義?

PROCEDURE some_proc AS 

    -- value coming FROM payments_received 
    -- value going TO payments_processed 

    v_payor_name payments_received.payor_name%TYPE; 
    -- OR 
    v_payor_name payments_processed.payor_name%TYPE; 

BEGIN 

    SELECT payor_name INTO v_payor_name 
    FROM payments_received 
    WHERE payment_id = some_payment_id; 

    UPDATE payments_processed 
    SET payor_name = v_payor_name 
    WHERE processed_id = some_processed_id; 

END some_proc; 

我看了看周圍的一些最佳實踐指南,但沒有發現任何東西,似乎真的覆蓋%TYPE /%ROWTYPE本使用方式。

回答

3

它通常沒有關係。據推測,payor_name列在兩個表中被相同地聲明。

就個人而言,我可能會使用源表,因爲如果您現在或將來需要選擇多個列(或整行),那麼這將是一致的。但我不會反對,如果有人想使用目標表作爲錨點類型。

如果出於某種原因,如果在聲明中存在某些差異時,最好在SELECT聲明或UPDATE聲明處發生錯誤,這可能會導致您偏好於另一聲明。然而,這種情況很少見,所以這通常是一種偏好和一致性的問題。

1

如果有人想成爲真正嚴格了,就可以有兩種:

PROCEDURE some_proc AS 

    -- value coming FROM payments_received 
    -- value going TO payments_processed 

    v_payor_name_source payments_received.payor_name%TYPE; 
    v_payor_name_target payments_processed.payor_name%TYPE; 

BEGIN 

    SELECT payor_name INTO v_payor_name_source 
    FROM payments_received 
    WHERE payment_id = some_payment_id; 

    v_payor_name_target := v_payor_name_source; 

    UPDATE payments_processed 
    SET payor_name = v_payor_name_target 
    WHERE processed_id = some_processed_id; 

END some_proc; 

但是我認爲這是矯枉過正。

相關問題