Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Оператор CASE в теле процедуры
|
|||
|---|---|---|---|
|
#18+
При использовании оператора CASE в теле процедуры возникает ошибка - делаю так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Ошибка SQL7032 (работаю с версией DB2 UDB for iSeries (AS/400) V5R3) Объясните, пожалуйста, почему это происходит? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2006, 10:27 |
|
||
|
Оператор CASE в теле процедуры
|
|||
|---|---|---|---|
|
#18+
сделала так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. помогло... но правильно ли так делать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2006, 11:36 |
|
||
|
Оператор CASE в теле процедуры
|
|||
|---|---|---|---|
|
#18+
Не получилось потому что: 1. Надо объявить SESSION.TEMP1 до создания процедуры. 2. Вы не можете написать просто SELECT * FROM SESSION.TEMP1 эта операция бессмысленна, т.к. не понятно, что вы хотите ей достичь. Если надо получить значение SESSION.TEMP1.I, то можно сделать что-то типа: --- P1: BEGIN DECLARE LI INT ; ... CASE ROUND(RAND()*6,0)+1 WHEN 1 THEN INSERT INTO SESSION.TEMP1 (I) VALUES (44); WHEN 2 THEN UPDATE SESSION.TEMP1 SET I=44+2; WHEN 3 THEN SELECT I INTO LI FROM SESSION.TEMP1 ; WHEN 4 THEN INSERT INTO SESSION.TEMP1 (I) VALUES (44+7); WHEN 5 THEN INSERT INTO SESSION.TEMP1 (I) VALUES (44-7); WHEN 6 THEN INSERT INTO SESSION.TEMP1 (I) VALUES ( 4 ); WHEN 7 THEN UPDATE SESSION.TEMP1 SET I=0; END CASE; ... END P1 --- ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2006, 15:39 |
|
||
|
Оператор CASE в теле процедуры
|
|||
|---|---|---|---|
|
#18+
временная таблица у меня создается до данного оператора CASE да я в курсе, что операция SELECT у меня бесмысленна... просто я пытаюсь реализовать в теле процедуры следующее: 1. процедура должна работать, ну скажем, 2 минуты за временем работы процедуры я слежу, считывая каждый раз после выполнения какой-либо операции SELECT, UPDATE, INSERT текущее время 2. каждая операция, которая выполняется за указаное время я записываю в специальную таблицу (во сколько был выполнен такой-то DML-опертор) 3. пытаюсь как бы специально выполнить оператор, в данном случае SELECT * FROM SESSION.TEMP1, который изначально ошибочный и поймать данную ошибку - в таблицу записать сообщение о том, что была такая-то ошибка и прерываю процедуру, не смотря на то, что ещё 2 минуты не прошло... вот собственно зачем мне и был нужен такой CASE... ошибку ловлю, используя CONTINUE HANDLER: Код: plaintext 1. 2. 3. 4. 5. но при использовании данной конструкции Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Mark, вот так смутно я попыталась Вам объяснить зачем так делала... вполне возможно, что нужно было делать все как-то по-другому... но пока пришло в голову только это... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2006, 16:39 |
|
||
|
Оператор CASE в теле процедуры
|
|||
|---|---|---|---|
|
#18+
SunnyVaвременная таблица у меня создается до данного оператора CASEЕще раз. 1. Т.к. вы используете статический SQL, то: чтобы процедура скомпилировалась, вам надо, чтоб эта временная таблица существовала до момента компиляции . И не важно, что в теле процедуры есть ее определение. 2. Именно потому, что вы используете статический sql, процедура с ошибочной командой у вас просто не скомпилируется. Если у вас задача - чтоб iSeries "убивал" долгоиграющие запросы, то я уже давал вам ссылку в соседнем топике. Наверное, вы не поняли, как это использовать? SunnyVaнапример, не удается с помощью команды GET DIAGNOSTICS CR = ROW_COUNT; узнать сколько было обновлено записей, если в переменной QSTR был запрос на обновление...Вот вам пример: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Что возвратит у вас, скажем Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.11.2006, 17:47 |
|
||
|
|

start [/forum/topic.php?fid=43&tid=1604979]: |
0ms |
get settings: |
10ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
81ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
| others: | 263ms |
| total: | 447ms |

| 0 / 0 |
