gpt4 book ai didi

sql - 如何在DB2中执行复合sql

转载 作者:行者123 更新时间:2023-12-05 01:18:38 32 4
gpt4 key购买 nike

我在尝试理解 DB2 sql 时遇到了挑战(注意,我来自 MS SQL Server):P。

这是一个场景,我有 2 个表,一个有 ID 和其他详细信息,第二个有很多与每个 ID 对应的其他信息。

  ID              Info for ID
_______ ____> _______
| | / | |
| T1 |<---------> | T2 |
|_____| \____> |_____|

来自 SQL Server,我习惯于运行如下脚本:
Declare @ID  int
Declare @ID1 int

select @ID=ID from T1 where col1 = @ID1

select * from T2 where ID = @ID

这一切在那里运行良好,并为我提供了一个与 ID1 对应的 ID,它可以进一步用于从 T2 获取有关 ID 的所有信息。

可悲的是,在 DB2 中,这在我面前爆炸了,我害怕如果我再执行一次这个查询,它将永远与我不相识:(。

我做了一些研究并写了这个(我什至卡在变量声明上)。
--#SET TERMINATOR @
BEGIN ATOMIC
DECLARE UID char(30);
END @

对于其他人,它工作得很好,但我收到以下错误:
BEGIN ATOMIC
DECLARE UID char(30);
END

ILLEGAL USE OF KEYWORD ATOMIC. TOKEN WAS EXPECTED. SQLCODE=-199, SQLSTATE=42601, DRIVER=3.63.108

其他信息:

IBM DB2 for z/OS V9.1
IBM Data Studio V3.1.1.0

[编辑:使用声明]
我尝试过的另一件事不起作用:
CREATE VARIABLE UID CHAR(30) DEFAULT 'USERID'; 
select * from testdb2.T1 A WHERE A.UID=v_UID;
--some other activity goes here
--and here
DROP VARIABLE UID;

TIA,
阿比纳夫

2016年5月13日(星期五)更新

创建存储过程是解决此问题的唯一方法:(

最佳答案

您的命令在 DB2 10 for LUW 中运行良好。数据工作室版本无关紧要,因为它与 CLP 的工作方式相同。
我在示例数据库中测试了这段代码:

BEGIN ATOMIC
DECLARE UID char(30);
SET UID = 200280;
SELECT FIRSTNME, LASTNAME FROM ANDRES.EMPLOYEE WHERE EMPNO = UID;
END @

可能您使用的 z/OS 版本不支持内联 SQL(Begin atomic)。我不是 zOS DBA,我知道 LUW、iSeries 和 zOS 之间存在许多 SQL 差异。

请检查跨平台兼容性。这是一个很好的理解问题的博客: https://www.ibm.com/developerworks/mydeveloperworks/blogs/SQLTips4DB2LUW/entry/crossplatformsqlrefv4?lang=en

关于sql - 如何在DB2中执行复合sql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12980639/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com