|
|
|
Команда exit в скриптах АСА 6
|
|||
|---|---|---|---|
|
#18+
Есть скрипт под АСА 6. В нем есть кусочек. До которого доходит выполнение, и на нем останавливается. Вот он: ... select nutype_id into an_unitTypeID from unittype where UCASE(vcode) = UCASE(av_unitType); if ifnull(an_unitTypeID, -1, an_unitTypeID) = -1 then message 'Invalid (unsupported) unit type ('+av_unitType+'). Exiting...'; exit; end if; ... Ошибка - Syntax error near if. Переменные объявлены выше так: ... CREATE VARIABLE "av_unitType" VCODE; CREATE VARIABLE "an_unitTypeID" NID; ... В чем проблема - никак понять не могу. ПС: Если вызвать просто: ... if ifnull(an_unitTypeID, -1, an_unitTypeID) = -1 then message 'Invalid (unsupported) unit type ('+av_unitType+'). Exiting...'; end if; ... то все работает (то есть без команды exit). Возможно ли такое, что команда exit может работать только в конце скрипта??? Бред конечно, но мало ли... Вобщем, какие будут идеи у мирового разума? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2004, 15:45 |
|
||
|
Команда exit в скриптах АСА 6
|
|||
|---|---|---|---|
|
#18+
Vadim RomanenkoВозможно ли такое, что команда exit может работать только в конце скрипта??? Бред конечно, но мало ли... Вобщем, какие будут идеи у мирового разума? Нет - не бред, а чистая правда :) Вы не забывайте, что оператор EXIT - это оператор самого ISQL (так же как например GO), а не WatcomSQL. Соотвествующе как работает ISQL - он ищет свою команду в скрипте и выполняет до нее весь код как батч-скрипт на WatcomSQL. Получается, что оператор EXIT внутри IF режет ее пополам и в скрипте, посылаемом ASA получается ошибка. Поэтому Вам лучше сделать вот так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2004, 16:01 |
|
||
|
Команда exit в скриптах АСА 6
|
|||
|---|---|---|---|
|
#18+
Буду пробовать, но слово Start для имени метки - явно не подходит ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2004, 16:06 |
|
||
|
Команда exit в скриптах АСА 6
|
|||
|---|---|---|---|
|
#18+
Vadim RomanenkoБуду пробовать, но слово Start для имени метки - явно не подходит ;) Угу, согласен, это я неподумавши написал что первое в голову пришло :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2004, 16:16 |
|
||
|
Команда exit в скриптах АСА 6
|
|||
|---|---|---|---|
|
#18+
В очередной раз ASCRUS выражается благодарность :) СПАСИБО за оперативный ответ. Который еще и помог! :) Все получилось, правда начались другие грабли... Почему-то из процедуры в скрипт не вернулись OUT-переменные... Но это, как говорится, уже совсем другой вопрос :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2004, 16:22 |
|
||
|
Команда exit в скриптах АСА 6
|
|||
|---|---|---|---|
|
#18+
Э-э-э... Не знаю, стоит ли выносить в отдельный вопрос... Но вот в связи с этим добавлением begin...end появились новые грабли... Почему-то при вызове процедур из блока begin...end не возвращаются OUT-переменные!!! Что за зверь такой?? Вот так произвожу вызов: ... // // Call the procedures //procedure z_p_PointIns(an_npcat, av_vcode, av_vname, av_dbegin, av_end, OUT an_ret, OUT av_ret); CALL "DBA"."z_p_PointIns"( null, av_pointCode, av_pointName, av_pointBegin, '31/12/2999', an_ret, av_ret); message 'z_p_PointIns executed. Result - ' + cast(an_ret as varchar(10)) + ', ' + ifnull(av_ret, ' --', av_ret); if an_ret < 0 then message 'Exiting...'; Leave Scp; end if; ... Так вот! В журнал выносятся те значения an_ret и av_ret, которыми я их проинициализировал!! Ну или не проинициализировал :) Причем, при выполнении без begin...end все выводится в лог нормально... Что эт за новость такая?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2004, 16:48 |
|
||
|
Команда exit в скриптах АСА 6
|
|||
|---|---|---|---|
|
#18+
Попробуйте вместо CREATE VARIABLE Ваших переменных, участвующих только в блоке BEGIN-END использовать локальные переменные, обьявляя их прямо в блоке: Код: plaintext 1. 2. 3. авторprocedure z_p_PointIns(an_npcat, av_vcode, av_vname, av_dbegin, av_end, OUT an_ret, OUT av_ret); В ASA если у параметра не указан его тип, то он определяется по умолчанию как INOUT. Рекомендую всегда ставить перед такими параметрами IN, иначе потом можно наступить на множество граблей :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2004, 16:59 |
|
||
|
Команда exit в скриптах АСА 6
|
|||
|---|---|---|---|
|
#18+
По поводу INOUT - я всегда указываю тип переменных. То просто комментарий, чтоб не забыть описание процедуры. Для себя. А поскольку я никогда не использую INOUT (не знаю почему :)), то для экономии места я повырезал типы и IN... Вот на самом деле описание ф-ции: procedure "dba".z_p_PointIns(IN an_npcat NID, IN av_vcode VCODE, IN av_vname VNAME, IN av_dbegin varchar(10), IN av_end varchar(10), OUT an_ret integer, OUT av_ret VNOTE) А по поводу CREATE VARIABLE и DECLARE... Это вообще мой первый скрипт, и я за основу взял пример, который генерит Sybase Central по команде Test at Interactive SQL на какой-нить ф-ции или процедуре :) И просто, если честно, не думал, что есть еще и куча всяких возможностей по объявлению переменных... Не дошли руки до почитать доку... Спасибо за совет - попробую сейчас перенести переменные в begin...end ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2004, 17:08 |
|
||
|
|

start [/forum/search_topic.php?author=Werter&author_mode=last_posts&do_search=1]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
150ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
2ms |
| others: | 698ms |
| total: | 978ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...