db2 java存储过程,db2存储过程 - 辜圆圆的个人空间 - OSCHINA - 中文开源技术交流社区...

db2还是用dbvis 执行存储过程比较适合

961e7b45c7d721c17244b3c81034ecec.png

很早就想学存储过程了,之前面试时都是问会不会存储过程,然而我只能摇摇头,看了大量博客,刚好这次可以用存储过程 ,会更方便一些就来搞一搞,其实和其他变成语言差不多来的。

首先说一下业务,将临时表的数据迁移到总表中,迁移过后清空临时表,并且返回参数告知应用系统是否完成存储过程。

这里只涉及到一小部分的存储过程知识:

创建存储过程,并设置参数(传入值、返回值、传入并返回的值)

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

/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值