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的預儲程序中,整個上下文還是會以查詢資料表為主,查詢資料表沒有對應欄位名稱的時候才會以變數做為條件?
這很頭痛的是,這是無聲異常,而且還可能造成大量異常,不得不防,以後預儲函數的參數必需要設置的非常怪異,才不會有機會跟未來人命名欄位名稱相同。
Python + SAPGUI Script = 自動化重覆性事務性作業
reference
今天因為其他部門的資訊作業上的問題導致我這邊必需協助刪除庫存批屬性,雖然才八十幾筆,但也是讓我感到憤怒,憤怒可以提升技術力,所以我決定找方法自動化處理。
兩年前的今天,k-weiming寫下這個,真的是緣份,我的環境是python 3.11,需要的工具就是pywin32:
sap的設置也要確認,不過這取決於公司的管理策略,如果剛好沒被管控的話那就可以使用:
準備工作完成,再來就是要先取得執行的GUI的session:
接下來的動作我們可以先利用錄製的方式來取得腳本,畢竟欄位框那麼多,即使看著官方的文件也很難一個一個找出來,最好的方法就是讓系統幫我們找出來。
開啟錄製程式:
錄製程式開啟之後如下:
中間那個圓點就是腳本錄製,腳本的保存地方則是根據你的『Save To』而定。
錄製完成之後在指定資料夾就會有
vbs
與txt
檔,打開txt
檔,裡面會有你的腳本資訊:紅框處的部份就是操作過程的相關物件的定位資訊以及操作的動作,像是按下去或是選擇某個分頁之類的。
以我自己的作業目標為例,我是想要自動化刪除很多庫存批屬性資料,所以就可以這麼做:
我的範例中少了按下保存的動作,因為只是測試,所以就沒有錄保存的動作。
這接口很方便,因為我不需要去寫abap來做錄製,不過這種作法應該是比較適用於重覆性的事務性作業,又或者剛好沒有BAPI、RFC可以使用,那就可以用這種方式來搜集資料。