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
/

 

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