客戶在進行短信服務這個業務申請時,需要填寫一些基本信息,然後根據這些信息判斷這個用戶是否已經存在於業務系統中。因為網上服務和業務系統兩個項目物理隔離,而且網上數據庫保存的客戶信息不全,所以判斷需要把數據交換到業務系統,在業務系統中判斷。
解決方式是通過存儲過程,以前也了解過存儲過程,但沒使用到項目中。不過經過一番努力最後還是完成了,期間遇到了一些困難,特寫此文讓對DB2存儲過程還不熟悉的童鞋避免一些無謂的錯誤。
DROP PROCEDURE "PLName"@CREATE PROCEDURE "PLName"(--存儲過程名字IN IN_ID BIGINT , --以下全是輸入參數IN IN_ENTNAME VARCHAR(200) ,IN IN_REGNO VARCHAR(50),IN IN_PASSWORD VARCHAR(20),IN IN_LEREP VARCHAR(300),IN IN_CERTYPE CHARACTER(1),IN IN_CERNO VARCHAR(50),IN IN_LINKMAN VARCHAR(50),IN IN_SEX CHARACTER(1),IN IN_MOBTEL VARCHAR(30),IN IN_REQDATE TIMESTAMP,IN IN_REMITEM VARCHAR(300),IN IN_STATE CHARACTER(1),IN IN_TIMESTAMP TIMESTAMP)BEGIN declare V_RESULT BIGINT; --聲明變量 DELETE FROM TableNameA WHERE ID = IN_ID; SET V_RESULT = NULL; --為變量賦值 --檢查用戶輸入的信息是否合法 select b.id INTO V_RESULT from TableNameB b,TableNameC c where 正常的判斷條件 if(V_RESULT IS NOT NULL) then ---如果合法,執行下面的insert語句 INSERT INTO TableNameA(ID,ENTNAME,REGNO,PASSWORD,LEREP,CERTYPE,CERNO,LINKMAN,SEX,MOBTEL,REQDATE,REMITEM,STATE,TIMESTAMP) VALUES(IN_ID,IN_ENTNAME,IN_REGNO,IN_PASSWORD,IN_LEREP,IN_CERTYPE,IN_CERNO,IN_LINKMAN,IN_SEX,IN_MOBTEL,IN_REQDATE,IN_REMITEM,IN_STATE,IN_TIMESTAMP); end if; commit;END@功能說明:
調用存儲過程時會傳入一些值(IN輸入參數),然後根據傳入的值查詢數據庫(select語句),根據查詢結果執行操作(添加、刪除、更新)
有兩種方式執行寫好的存儲過程:
1.拷貝到DB2客戶端工具中直接執行
特別注意:執行時將
改成@,之前很多錯誤都和它有關,比如:“該命令被當作SQL
語句來處理,因為它不是有效的命令行處理器命令”正是這個問題花費了很長時間,嚴重影響心情
2.將上面的語句保存為test.db2文件放到任意目錄下(比如D盤根目錄),然後在cmd輸入db2cmd 然後輸入db2 -td@ -vf D:\test.db2即可
執行後就可以測試存儲過程寫的是否正確
直接寫sql:
call PLName(存儲過程名字) (IN_ID,IN_ENTNAME,IN_REGNO,IN_PASSWORD,IN_LEREP,IN_CERTYPE,IN_CERNO,IN_LINKMAN,IN_SEX,IN_MOBTEL,IN_REQDATE,IN_REMITEM,IN_STATE,IN_TIMESTAMP對應的值)以上就是我今天所用到的存儲過程,功能非常簡單,比較復雜的操作也在摸索階段,有什麼疑問大家可以隨時交流
摘自 己欲立而立人,己欲達而達人