在DB2 SQL中声明变量

34

有人知道如何在DB2中运行以下SQL Server代码吗?

我正在转换SQL Server脚本,以便它们可以在DB2系统上运行,并且在使用变量方面遇到了一些问题。

T-SQL 代码

这显然不是真实的代码,但作为示例效果很好。

DECLARE @INPUT_VALUE INT
SET INPUT_VALUE = 4756

SELECT *
FROM TABLE1
WHERE TABLE1.COLUMN1 = @INPUT_VALUE
2个回答

32
我假设这个论坛帖子,我在下面完整引用了,应该能回答这个问题。
在过程、函数或触发器定义中,或者在动态SQL语句(嵌入在主机程序中)中:
BEGIN ATOMIC
 DECLARE example VARCHAR(15) ;
 SET example = 'welcome' ;
 SELECT *
 FROM   tablename
 WHERE  column1 = example ;
END

或者(在任何环境中):
WITH t(example) AS (VALUES('welcome'))
SELECT *
FROM   tablename, t
WHERE  column1 = example

或者(尽管这可能不是你想要的,因为变量只需要创建一次,但之后每个人都可以使用它,尽管其内容将以每个用户为基础保密)。
CREATE VARIABLE example VARCHAR(15) ;
SET example = 'welcome' ;
SELECT *
FROM   tablename
WHERE  column1 = example ;


迈克尔,你觉得在第一个示例代码的部分被省略了吗?看起来你正在设置一个未声明或创建的变量?我使用有效的表和列名称运行了此代码,并得到了错误返回。 - I_AM_JARROD
我认为你是正确的...我也无法使它工作,所以我编辑了问题以将其删除。 - Michael Sharek
如果我需要运行一个带有一些输入变量的通用脚本,我喜欢最后一个。我说变量存在于事务的生命周期内,这样说是正确的吗? - ESP
Michael,你的前两个例子都很好用,但我需要的是第三个版本,可惜它并没有起作用。在第一行(CREATE VARIABLE)我遇到了以下错误:在QSYS中找不到类型为*Collection的WSAD。SQLCODE=-204,SQLSTATE=42704。我需要其他什么吗?谢谢。 - Luis Gouveia
“CREATE VARIABLE” 是 DB2 版本 11 中的新功能;您可能还没有使用过它。它具有全局范围,因此您需要提前创建所有变量,并在程序中使用它们。更多信息请参见:https://www.ibm.com/support/knowledgecenter/zh/SSEPEK_11.0.0/sqlref/src/tpc/db2z_sql_createvariable.html - Abacus
对于那些没有使用CREATE VARIABLE所需权限的人来说,Michael的WITH(CTE)示例非常好用! - pstraton

15

我也是来自 SQL Server 背景的,并花了过去两周时间弄清楚如何在 IBM Data Studio 中运行像这样的脚本。希望能有所帮助。

CREATE VARIABLE v_lookupid INTEGER DEFAULT (4815162342); --where 4815162342 is your variable data 
  SELECT * FROM DB1.PERSON WHERE PERSON_ID = v_lookupid;
  SELECT * FROM DB1.PERSON_DATA WHERE PERSON_ID = v_lookupid;
  SELECT * FROM DB1.PERSON_HIST WHERE PERSON_ID = v_lookupid;
DROP VARIABLE v_lookupid; 

3
请注意,变量v_lookupid最终会成为全局变量! - Matt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接