powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Кто еще использует SQLCODE и %ROWCOUNT ?
8 сообщений из 8, страница 1 из 1
Кто еще использует SQLCODE и %ROWCOUNT ?
    #36295813
Glebanski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Cache: Everyday you learn something new...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
Set TariefBeginDatum =  0 
Set TariefEindDatum =  99999 
Set Tarief =  0 
Set OverWrittenTarief =  0 
  &sql(select TariefBedrag,TariefBeginDatum,TariefEindDatum into :OverWrittenTarief,:TariefBeginDatum,:TariefEindDatum 
  from Wrk.OmzetTariefLookUp3
                     where SourceOCA = :SourceOCA and AbonId = :AbonId and ContractId= :ContractId
                           and (CatRangeNr = :CatRange OR :CatRange = "" ))

             WRITE !,"SQLCODE:", SQLCODE
             WRITE !,"ROwcount:", %ROWCOUNT
             WRITE !,"TariefBeginDatum:", TariefBeginDatum             
             WRITE !,"TariefEindDatum:", TariefEindDatum             
             WRITE !,"OverWrittenTarief:", OverWrittenTarief

Запускаем
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
REPLICATE>w ##class(ETL.OmzetContracten.control).TestBred()
 
SQLCODE: 100    <- No Rows!
ROwcount: 0   <- No Rows
TariefBeginDatum: 61362   <- откуда-то взялось значение в переменной, надо же...
TariefEindDatum: 61726     <- аналогично
OverWrittenTarief: 1654 . 891    <- аналогично

Итак:
SQLCODE: 100
ROwcount: 0

Теперь давайте удалим условие
and (CatRangeNr = :CatRange OR :CatRange = "" )
из запроса

Запускаем:
Код: plaintext
1.
2.
3.
4.
5.
SQLCODE:  0 
ROwcount: 1 
TariefBeginDatum: 61362 
TariefEindDatum: 61726 
OverWrittenTarief: 1654 . 891 

SQLCODE: 0
ROwcount: 1


Очередной объекто-ориентированный парадокс.
Документацию читать не буду.

Надо будет весь код прошерстить и избавиться от этих ROWCOUNT,
от SQLCODE, боюсь, никуда не деться
Напишите,плз, что у меня руки кривые, пока не все не переделал :)
...
Рейтинг: 0 / 0
Кто еще использует SQLCODE и %ROWCOUNT ?
    #36296237
Turk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Из документации Cache:
Output host variable values should only be used when SQLCODE=0.
...
Рейтинг: 0 / 0
Кто еще использует SQLCODE и %ROWCOUNT ?
    #36296604
Фотография u78
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Glebanski,

да, Intersystems позволяет себе класть мусор в результирующие переменные запроса, поэтому надо строго смотреть на SQLCODE, я обжигался на этом.
...
Рейтинг: 0 / 0
Кто еще использует SQLCODE и %ROWCOUNT ?
    #36297058
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Glebanski
Документацию читать не буду.

Надо будет весь код прошерстить и избавиться от этих ROWCOUNT,
от SQLCODE, боюсь, никуда не деться
Напишите,плз, что у меня руки кривые, пока не все не переделал :)

Так оно есть увы... Документацию нужно читать всегда.

Переменные могут заполняться по мере прохождения индексов в плане запроса.
Это часть оптимизации - если в итоге строка условия запроса не удовлетворяет - переменные не чистятся.

Значение переменных имеют смысл ТОЛЬКО если запрос сказал что данные есть и запрос выполнен успешно SQLCODE=0.

Если у вас в коде SQLCODE не анализируется - то таки да - идите и переделывайте
...
Рейтинг: 0 / 0
Кто еще использует SQLCODE и %ROWCOUNT ?
    #36298779
Glebanski
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Жесть...
То есть если я 10 переменных использую, то в случае "неисполнения" запроса я обязан их занулять.
...
Рейтинг: 0 / 0
Кто еще использует SQLCODE и %ROWCOUNT ?
    #36298859
Фотография DAiMor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
думаю будет лучше просто проверять SQLCODE
_________________________________
Cache for Windows NT (AMD64) 5.0.21 (Build 6408) Tue Jan 3 2006 13:37:41 EST
...
Рейтинг: 0 / 0
Кто еще использует SQLCODE и %ROWCOUNT ?
    #36298949
servit
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для Glebanski

Вы не указали Вашу версию Caché.

Вот цитата из документации для версии 2009.1:
In SELECT ... INTO and DECLARE ... SELECT ... INTO statements, the output host variables in the INTO clause are modified if SQLCODE equals 0 (when a valid row is returned), and may have been modified even when SQLCODE is not 0, that is, when no new row was returned.
Пример (тестировал на версии 2010.1):
Код: plaintext
1.
2.
3.
4.
5.
6.
  set res= 7 
  set id=- 1 
  &sql(select f into :res from test where id=:id)
  w "SQLCODE=",SQLCODE,! ;  100 
  w "%ROWCOUNT=",%ROWCOUNT,! ;  0 
  w "res=",res,! ;  7 
...
Рейтинг: 0 / 0
Кто еще использует SQLCODE и %ROWCOUNT ?
    #36303062
Ptn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GlebanskiЖесть...
То есть если я 10 переменных использую, то в случае "неисполнения" запроса я обязан их занулять.

Эм-м-м а вы их используете независимо от того успешно выполнился запрос или нет ?

Если у вас дальнейший код работает не на анализе SQLCODE, а на анализе переменных - то таки да придется занулять. Кто ж вам виноват.

А если вам вернулся ошибочный SQLCODE и используется транзакция - то дальнейшее выполнение вообще нужно прекращать - это по вашему тоже жесть ?
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Caché, Ensemble, DeepSee, MiniM, IRIS, GT.M [игнор отключен] [закрыт для гостей] / Кто еще использует SQLCODE и %ROWCOUNT ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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