db2存儲過程 原

db2還是用dbvis 執行存儲過程比較適合

 

很早就想學存儲過程了,之前面試時都是問會不會存儲過程,然而我只能搖搖頭,看了大量博客,剛好這次可以用存儲過程 ,會更方便一些就來搞一搞,其實和其他變成語言差不多來的。

首先說一下業務,將臨時表的數據遷移到總表中,遷移過後清空臨時表,並且返回參數告知應用系統是否完成存儲過程。

這裏只涉及到一小部分的存儲過程知識:

  • 創建存儲過程,並設置參數(傳入值、返回值、傳入並返回的值)
create or replace producer 存儲過程名 (OUT 輸出參數 類型,IN 返回參數 類型,IN OUT 輸入參數又已輸出參數返回 類型)
  • 代碼塊
    --緊接着 編寫存儲過程 語句,要放到begin和end之間
    BEGIN
    巴拉巴拉
    END

     

  • 變量
--定義存儲過程時若已經在參數處定義了就不用再定義了
DECLARE 變量名 變量類型;
--給他賦值
SET 變量名 = '';
  • 動態sql字符串拼接並執行
    --先定義一個字符串
    DECLARE SQL VARCHAR(123);
    DECLARE TABLE VARCHAR(22);
    --用||來拼接字符串和變量
    SET SQL = "SELECT * FROM "||TABLE;
    --執行他
    prepare S from SQL;
    EXCUATE S;

     

  • 事務
    --在begin下還是哪裏插入atomic關鍵字
    atomic

     

  • if條件語句。
    if 條件語句
    巴拉巴拉;
    else if 條件語句
    巴拉巴拉;
    end if

     

  • 瞅一瞅還有什麼存儲過程
    --注意 存儲過程名的大小寫 
    select * from syscat.procedures where procname = '存儲過程名';
    --然後刪他一個
    drop procedure '存儲過程名';

    注意:若是在dbvis下,要將整個存儲過程用--/  巴拉巴拉 /  包圍

--/
CREATE OR REPLACE PROCEDURE "DB2ADMIN"."TEMP_TO_PERSISTENT" (OUT MAXID INTEGER,OUT MAXID1 INTEGER,OUT RES INTEGER)
 -- 開啓事務
 -- 定義最後一個標誌位
SPECIFIC SQL180521113213000
BEGIN
 ATOMIC
--設置sql
declare transferSql varchar(1024);
 declare transferSql1 varchar(1024);
declare delSql varchar(1024);
 declare delSql1 varchar(1024);
-- 獲取當時最新的id
SET MAXID = (SELECT
  max(id)
 FROM
  trade_finance_information_temp
 WHERE
  timestamp(LASTUPDATETIME) < current timestamp);
SET MAXID1 = (SELECT
  max(id)
 FROM
  trade_finance_record_temp
 WHERE
  timestamp(JL_TIME) < current timestamp);
  IF MAXID>0
  then
set transferSql = 'INSERT INTO TRADE_FINANCE_INFORMATION (
   id
) SELECT
   id
FROM 
 trade_finance_information_temp
WHERE
 id <='||MAXID;
 prepare s1 from transferSql;
execute  s1;
set delSql = 'delete from trade_finance_information_temp where id <= '||MAXID;
prepare s2 from delSql;
execute  s2;
ELSE 
set MAXID = 0;
end if;
if MAXID1>0
then
set transferSql1 = 'INSERT INTO TRADE_FINANCE_RECORD (
id
) SELECT
id
FROM
 trade_finance_record_temp
WHERE
 id <='||MAXID1;



prepare s3 from transferSql1;
execute  s3;
set delSql1 = 'delete from trade_finance_record_temp where id <= '||MAXID1;
prepare s4 from delSql1;
execute  s4;
ELSE 
set MAXID1 = 0;
end if;

--如果執行成功則會返回1
set res = 1;
--END後不能跟分號
END
/

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章