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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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中使用,该如何写?

参考技术A 用存储过程啊,给你个简单的例子
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
参考技术B 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 ;--使用

本回答被提问者采纳

shell脚本中sql语句得到一个值,赋值给变量出错

参考技术A 你没有理解输入重定向的概念。在你上面的代码中,mysql
-uddap
-p$2是包含在输入重定向范围内的,所以不会提示你输入密码的。
你的$1
和$2也没有定义,可以参考如下写法:
#!/bin/sh
read
-p
"please
input
root
password"
pwd
mysql
-uroot
-p$pwd
<<
eof
\.
/usr/src/ddap-1.createuser.sql
\.
/usr/src/ddap-2.createdatabase.sql
\.
/usr/src/ddap-3.createtable.sql
\.
/usr/src/ddap-4.createprocedureandfunction.sql
\.
/usr/src/ddap-5.createdata.sql
eof

以上是关于DB2的SQL脚本如何定义变量,并赋值使用?执行成功有重赏哦,谢谢的主要内容,如果未能解决你的问题,请参考以下文章

SQL存储过程定义的变量赋值问题

DB2 - C 嵌入式 SQL 不会插入一行

shell脚本中sql语句得到一个值,赋值给变量出错

LINUX下shell脚本如何执行 sql脚本 到DB2数据库?

在SQL存储过程中,如何声明变量,赋值变量。最好有具体语句配上实例。3Q啦。谢谢各位大侠的帮忙

如何在oracle中执行db脚本并输出日志文件