我正面臨着試圖理解DB2 sql(注意,我來自MS SQL Server)的挑戰:P。如何在DB2中執行復合sql
這是一個場景,我有兩個表,一個有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,可以進一步用於獲取ID的所有信息從T2開始。
可悲的是,在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 z/OS版V9.1 IBM Data Studio的V3.1.1.0
[編輯:使用declare] 另一件事我想,沒有了工作:
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日(黑色星期五)
創建一個存儲過程是解決這個的唯一途徑:(
你試圖做什麼'JOIN'不是一個選項?看一看[DB2 Reference](http://publib.boulder.ibm.com/epubs/pdf/dsnsqk1c.pdf) - 我認爲'BEGIN ATOMIC'只是觸發器定義的一部分(這就是你所說的'重新嘗試?)。如果你只是試圖在一個命令行程序中執行此操作,那麼它可能會期待'DECLARE'接下來,儘管我不認爲這實際上是你想要的方式。你真正的問題是什麼? –
@ Clockwork-Muse我只需要將ID存儲在表T1的一個變量中,然後在腳本的其餘部分使用該變量。後來該腳本將成爲一個存儲過程,但現在我剛剛開始,所以需要更多地瞭解變量聲明等。 – Abhinav
因此,經過與DBA的多次討論,我意識到在此版本中不可能DB2 for z/OS V9.1。他建議我應該將它包裝在存儲過程中,然後對其進行測試。如果更新生效,則更新。 – Abhinav