Я столкнулся с проблемой, пытаясь понять DB2 sql (обратите внимание, я исхожу из MS SQL Server): P.
Вот сценарий: у меня есть 2 таблицы, в одной из которых есть идентификаторы и другие данные, во второй есть много другой информации, соответствующей каждому идентификатору.
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, который в дальнейшем можно использовать для получения всей информации об идентификаторе от 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
[EDIT: использование 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, Abhinav
Обновление от 13 мая 2016 г. (пятница, 13-е)
Создание хранимой процедуры - единственный способ исправить это :(
JOIN
не вариант? Взгляните на Справочник по DB2 — я думаю, чтоBEGIN ATOMIC
— это только часть определения триггера (это то, что вы пытаетесь сделать?). Если вы просто пытаетесь выполнить это в командной оболочке, она, вероятно, ожидаетDECLARE
next, хотя я не думаю, что на самом деле это тот путь, которым вы хотите идти. Каков ваш настоящий вопрос? - person Clockwork-Muse   schedule 20.10.2012