DB2的SQL脚本如何定义变量,并赋值使用?执行成功有重赏哦,谢谢

-------------------------------------------------------------------------------------------------------
connect to @DBNAME@;
set current schema = '@SCHEMANAME@';

--Create
UPDATE CORAUDIT as a
set a.CORAUDITTYPEKY=
(select b.CORAUDITTYPEKY FROM CORAUDITtype b
where b.APPCOMPONENTENUM = 'BNKCmpChkSrvs'
and b.AUDITFUNCTIONENUM='BNKAFnPSPReq'
and b.AUDITACTORTYPEENUM = 'CORAuAcTOBOUs'
and b.ARCCHANNELKY='9')
where a.CORAUDITTYPEKY=
(select c.CORAUDITTYPEKY FROM CORAUDITtype c
where c.APPCOMPONENTENUM = 'BNKCmpSlfSrvs'
and c.AUDITFUNCTIONENUM='BNKAFnPSPReq'
and c.AUDITACTORTYPEENUM = 'CORAuAcTOBOUs'
and c.ARCCHANNELKY='9');

COMMIT;
CONNECT RESET;
-------------------------------------------------------------------------------------------------------
上面这个脚本是用来更新DB2数据的,由于9这个值是硬编码,所以要求定义变量,然后赋值9,在SQL语句中使用变量执行,ORACLE我会,但是DB2没用过,求指点。
要求在脚本头定义一个变量,然后赋值9,然后SQL中使用,该如何写?

第1个回答  2011-08-18
用存储过程啊,给你个简单的例子
CREATE PROCEDURE SPCARDTRACE
(
IN I_CARDNO VARCHAR(10)
)

-- 存储过程功能 :
-- 创建人:
-- 创建日期:
-- 参数说明:
-- 01. : I_CARDNO 卡号
-- 02. :
-- 03. :

LANGUAGE SQL
SPECIFIC SPCARDTRACE
DYNAMIC RESULT SETS 1
MODIFIES SQL DATA

BEGIN
DECLARE V_CARDNO VARCHAR(10); --卡号
DECLARE V_EMPNAME VARCHAR(16); --持卡人
DECLARE V_CARDBALANCE DECIMAL(8,2); --卡余额
DECLARE V_HAPPENDATE INT;--统计时间
DECLARE V_MINTIME TIMESTAMP; --最小时间
DECLARE V_MAXTIME TIMESTAMP; --最大时间
DECLARE V_MINMONTH INT ;
DECLARE V_MAXMONTH INT ;
DECLARE V_ISSUECARDDATE TIMESTAMP; --发卡时间
DECLARE V_SUBSIDYMONEY DECIMAL(8,2);--补贴金额
DECLARE V_CONSUMEMONEY DECIMAL(8,2);--冲值金额
DECLARE V_PUTMONEY DECIMAL(8,2);--冲值金额
DECLARE V_OUTMONEY DECIMAL(8,2);--退款金额
DECLARE V_CHANGEMONEY DECIMAL(8,2);--改卡差额
DECLARE V_STRSQL VARCHAR(1000); --SQL
DECLARE CS CURSOR WITH RETURN TO CALLER FOR RETURNTABLE;

INSERT INTO TBCARDTRACE ( CARDNO,EMPNAME,CARDBALANCE,ISSUECARDDATE ,HAPPENDATE,
SUBSIDYMONEY,PUTMONEY,OUTMONEY ,CONSUMEMONEY,CHANGEMONEY )
VALUES (V_CARDNO,V_EMPNAME,V_CARDBALANCE,V_ISSUECARDDATE,V_HAPPENDATE,
V_SUBSIDYMONEY,V_PUTMONEY,V_OUTMONEY,V_CONSUMEMONEY,V_CHANGEMONEY);

END
第2个回答  2011-08-17
v_count int:=9追问

谢谢你得回复,能具体点吗,你这句的意思是变量的声明和赋值在DB2中是一起的吗?
那比如我声明个字符串的是不是这样“v_count varchar(20):=9 ”,然后底下调用是不是这样“select c.CORAUDITTYPEKY FROM CORAUDITtype c
where c.APPCOMPONENTENUM = 'BNKCmpSlfSrvs'
and c.AUDITFUNCTIONENUM='BNKAFnPSPReq'
and c.AUDITACTORTYPEENUM = 'CORAuAcTOBOUs'
and c.ARCCHANNELKY=v_count ”

追答

DECLARE V_COUNT VARCHAR(3000);--定义
SET V_COUNT='9'--赋值
select * from CORAUDITtype where ARCCHANNELKY=V_COUNT ;--使用

本回答被提问者采纳