Oracle的預儲程序參數與資料表名稱相同時的異常
最近踩了一個坑,主要是一個預儲程序利用給定的參數來做查詢,再將查詢到的資料寫入變數,原本都還很正常,但是突然失效,偏偏單獨的查詢都很正常,遍尋不著,後來同事協助之後終於脫坑。
create or replace procedure test_proc(p_a varchar2) is
begin
select column into v_column from table where column_a = p_a;
end
上面是一個示意的範例,test_proc
這個預儲程序在得到p_a
之後就會去資料表查詢,然後將資料寫入v_column
,但不知道什麼時候,資料表中被加入一個同名欄位,也就是p_a
,這導致了參數中的p_a
就失效了。
這可能就代表著在oracle的預儲程序中,整個上下文還是會以查詢資料表為主,查詢資料表沒有對應欄位名稱的時候才會以變數做為條件?
這很頭痛的是,這是無聲異常,而且還可能造成大量異常,不得不防,以後預儲函數的參數必需要設置的非常怪異,才不會有機會跟未來人命名欄位名稱相同。
沒有留言:
張貼留言