我有2個表具有相同的列名稱(52 +庫侖)。我需要編寫一個Oracle函數來比較這些列之間是否有任何記錄發生了變化。 EMP_ID
是主鍵Oracle函數硬編碼列名稱作爲參數
我嘗試使用下面的功能,但它給我的不正確的結果, 我打電話這樣的funcaiton:
get_data_change (emp_id, 'DEPT_NAME');
get_data_change (emp_id, 'PHONE_NUMBER');
功能我已經創建了:
CREATE OR REPLACE function get_data_change (
in_emp_id varchar2, in_Column_Name varchar2)
return char is
v_data_changed char;
begin
select eid, in_Column_Name
into v_table1_eid, v_table1_Column_Value
from table 1
where eid=in_emp_id;
Select eid, in_Column_Name
into v_table2_eid, v_table2_Column_Value
from table 2
where eid = in_emp_id;
if (v_table2_Column_Value != v_table1_Column_Value)
then
v_data_changed := 'Y'
else
v_data_changed :='N'
endif
return v_data_changed
end
end get_data_change;
正如@JeffreyKemp已經指出的那樣,您需要動態SQL來實現這一點。此外,如果其中一個值爲NULL,則檢查兩個值是否不同(v_table2_column_value!= v_table1_column_value)將無法按預期工作 - 您需要對NULL值進行特殊處理。 –