powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / простые вопросы
8 сообщений из 8, страница 1 из 1
простые вопросы
    #38514151
azzzzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДД,
помогите плиз разобраться,
почему так выполняется
Код: sql
1.
2.
3.
4.
5.
BEGIN ATOMIC
  DECLARE p_dt DATE;
  SET p_dt = '2013-12-25';
END
@


а так -нет
Код: sql
1.
2.
3.
4.
5.
BEGIN 
  DECLARE p_dt DATE;
  SET p_dt = '2013-12-25';
END
@


Код: plaintext
1.
2.
3.
Обнаружен неправильный элемент "END-OF-STATEMENT" после текста "IN DECLARE p_dt DATE".  Список правильных элементов: "<psm_semicolon>".  LINE NUMBER=1.  SQLSTATE=42601

Statement processed with ERROR.
versionnumber = 9070600
...
Рейтинг: 0 / 0
простые вопросы
    #38514188
CawaSPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
azzzzz,

Я же говорю, это исключительно вопрос клиентского ПО.
Тот же, QuestСentral "догадывается", что если встретили CREATE PROCEDURE, то дальше пойдёт тело со своими ';' внутри и надо отслеживать BEGIN ... END для корректного разделения на отдельные statement'ы. Тут, надо полагать, что-то подобное.
...
Рейтинг: 0 / 0
простые вопросы
    #38514224
azzzzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CawaSPb,
спасибо!
Так как заставить это работать?

И тогда мы сразу перейдем к следующему вопросу - как заставить работать это:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
BEGIN ATOMIC
	  	  DECLARE p_dt DATE;
	  SET p_dt = '2013-12-25';
  IF ( p_dt < current date ) THEN
  	   GOTO EXIT;
  	   select 'if' from sysibm.sysdummy1;
  END IF; 

  EXIT:
END
@



[IBM][CLI Driver][DB2/NT64] SQL0104N Обнаружен неправильный элемент ";" после текста "ate ) THEN GOTO EXIT". Список правильных элементов: "<join_type_without_spec> JOIN <join_operand>". LINE NUMBER=1. SQLSTATE=42601

Statement processed with ERROR.
...
Рейтинг: 0 / 0
простые вопросы
    #38514228
m&m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
m&m
Гость
azzzzz,

что это? если это inlined compound sql statement, то оно по определнию
Код: sql
1.
2.
3.
begin atomic
...
end
...
Рейтинг: 0 / 0
простые вопросы
    #38514282
CawaSPb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий,

Опять же, как говорил, после метки _обязательно_ должен идти какой-нибудь statement.
См. http://pic.dhe.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.sql.ref.doc/doc/r0004239.html

Там явно указано:
Код: plaintext
1.
2.
3.
4.
...
SQL-procedure-statement

|--+--------+--SQL-statement------------------------------------|
   '-label:-' 


И тут (в описаании Inlined Compound SQL) - http://pic.dhe.ibm.com/infocenter/db2luw/v9r7/topic/com.ibm.db2.luw.sql.ref.doc/doc/r0004240.html
Явно видим, что метку можно использовать только для обозначения всего блока (с последующим возможным "LEAVE метка ").

Следует также обратить внимание, что
а) Inlined Compound SQL _не бывает_ "не atomic".
б) "If the ATOMIC keyword is specified in a dynamically prepared compound statement or an SQL function that is not within a module, the compound statement is processed as a compound SQL (inlined) statement."

Т.е. за исключением модулей ATOMIC/NOT ATOMIC несёт дополнительную семантику - Inlined/Compiled.

Ещё раз, метки перед произвольным statement'ом можно использовать только внутри Compiled.

Итого:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
BEGIN
  DECLARE p_dt DATE;
  SET p_dt = '2013-12-25';
  IF ( p_dt < current date ) THEN
  	   GOTO EXIT;
  END IF; 

  EXIT: <some statement>
END



Можно
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
exec_block: BEGIN ATOMIC
  DECLARE p_dt DATE;
  SET p_dt = '2013-12-25';
  IF ( p_dt < current date ) THEN
  	   LEAVE exec_block;
  END IF; 

  ...
END

Вероятно при исполнении этого всего как отдельного statement'а придётся ещё раз обернуть это всё в дополнительный begin ... end.
...
Рейтинг: 0 / 0
простые вопросы
    #38520691
azzzzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CawaSPb,
Спасибо!

А как можно выводить результат select' ов, при выполнении compound SQL (inlined) statement ?
Вы вылоняю в quest central:
Код: plaintext
1.
2.
3.
4.
5.
BEGIN ATOMIC
  DECLARE PDATE DATE;
  SET PDATE = '2013-12-25';
  select 	PDATE from sysibm.sysdummy1;
END
@
...
Рейтинг: 0 / 0
простые вопросы
    #38521907
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
azzzzz,

Не уверен, что QC это может, то в интерпретатор db2 может так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SET SERVEROUTPUT ON
@

BEGIN ATOMIC
  DECLARE PDATE DATE;
  SET PDATE = '2013-12-25';
  FOR C AS 
    select PDATE from sysibm.sysdummy1
  DO
    CALL DBMS_OUTPUT.PUT_LINE(PDATE);
  END FOR;
END
@
...
Рейтинг: 0 / 0
простые вопросы
    #38521915
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mark Barinstein,

Так правильнее:
Код: plaintext
CALL DBMS_OUTPUT.PUT_LINE(C.PDATE)
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / простые вопросы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]