|
embeded SQL & MAC : underfined variables
|
|||
---|---|---|---|
#18+
Пробую сделать процедуру в *.MAC (классы не используются) версия Cache 5.0.21.6408.0 :uploadData()PUBLIC { &sql(DECLARE SrCur CURSOR FOR SELECT tab1.Code,tab2.Gruppe,tab1.Langname INTO :srID, :srGroup, :srName FROM SQLUser.tab1, SQLUser.tab2 WHERE tab1.Code =* tab2.Code) &sql(OPEN SrCur) for { &sql(FETCH SrCur) Quit:SQLCODE W srID_";"_srGroup_";"_srName_";",! } &sql(CLOSE SrCur) } Возвращает: Quit:SQLCODE ^ <UNDEFINED> если сделать s SQLCODE=0 возвращает: W srID_";"_srGroup_";"_srName_";",! ^ <UNDEFINED> Что не так делаю? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2014, 12:23 |
|
embeded SQL & MAC : underfined variables
|
|||
---|---|---|---|
#18+
drakutЧто не так делаю? Начнем с того, что просто так выходить при объявленом курсоре не стоит... Полный пример выглядит так Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Т.е. если есть объявление курсора - должно быть и закрытие... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2014, 12:43 |
|
embeded SQL & MAC : underfined variables
|
|||
---|---|---|---|
#18+
drakut , программка-то вообще компилится у тебя? Проверь сам запрос... Код: javascript 1. 2.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2014, 12:45 |
|
embeded SQL & MAC : underfined variables
|
|||
---|---|---|---|
#18+
krvsaНачнем с того, что просто так выходить при объявленом курсоре не стоит...Можно и так и эдак : стиль написания цикла каждый выбирает под свои нужды. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2014, 13:17 |
|
embeded SQL & MAC : underfined variables
|
|||
---|---|---|---|
#18+
drakut, Суть в том, что выполнение запроса - это другая программа,а скобки, обрамляющие процедуру означают, что область видимости переменных - только эта программа. Такой аналог процедуреблочности для МАС. Но в процедуреблочных классах компилятор встречая хост-переменные в запросах объявляет их публичными и делает для них операцию new. Вам придется это делать вручную. Вообще, я бы не советовал использовать {} для обрамления тела программы, проблем создает гораздо больше, чем решает. В общем, решений несколько: 1. Сделать переменные, использующиеся в запросах, публичными, а потом внутри программы сделать им new 2. Отказаться от изоляции переменных и делать new всем переменным, кроме параметров процедуры 3. Отказаться от EmbedSQL, попробовать сделать все на динамических запросах. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2014, 13:27 |
|
embeded SQL & MAC : underfined variables
|
|||
---|---|---|---|
#18+
У маков плюсов немного 1) проще компилить на работающей системе. 2) проще писать программы с переключением областей. А вот с видимостью переменных полный абзац. По этой причине, кстати, я категорически не рекомендую МАС для разработки чего-то более-менее многоразового. Только разовые программки для исправления данных и системные программы. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2014, 13:31 |
|
embeded SQL & MAC : underfined variables
|
|||
---|---|---|---|
#18+
servitМожно и так и эдак : стиль написания цикла каждый выбирает под свои нужды. Я не про "стиль написания цикла" а про выход без закрытия курсора... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2014, 13:35 |
|
embeded SQL & MAC : underfined variables
|
|||
---|---|---|---|
#18+
krvsaЯ не про "стиль написания цикла" а про выход без закрытия курсора...Посмотрите внимательнее код (предпоследняя строчка) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2014, 13:37 |
|
embeded SQL & MAC : underfined variables
|
|||
---|---|---|---|
#18+
servitПосмотрите внимательнее код (предпоследняя строчка) Если ты про код ТСа - так там выход есть ранее закрытия курсора... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2014, 13:55 |
|
embeded SQL & MAC : underfined variables
|
|||
---|---|---|---|
#18+
krvsa, Это выход не их процедуры, а из цикла for. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2014, 14:02 |
|
embeded SQL & MAC : underfined variables
|
|||
---|---|---|---|
#18+
krvsaЕсли ты про код ТСа - так там выход есть ранее закрытия курсора ...Выход из бесконечного цикла, но не из программы. Пример ТС один в один взят из документации. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2014, 14:03 |
|
embeded SQL & MAC : underfined variables
|
|||
---|---|---|---|
#18+
Значит глаза уже подводят... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2014, 14:17 |
|
embeded SQL & MAC : underfined variables
|
|||
---|---|---|---|
#18+
Блок А.Н., 1) как сделать переменные публичными? покажите пожалуйста пример кода 2) Отказаться от изоляции переменных и делать new всем переменным, кроме параметров процедуры 3) Отказаться от EmbedSQL, попробовать сделать все на динамических запросах. буду благодарен за пример кода И как будет выглядеть программа на INC ? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2014, 14:40 |
|
embeded SQL & MAC : underfined variables
|
|||
---|---|---|---|
#18+
отвечаю на свой первый вопрос: публичные переменные задаются в квадратных скобках: MyProc(privateVar1) [publicVar1] PUBLIC { ... } PUBLIC - это инструкция для процедуры, но не для переменных. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2014, 14:55 |
|
embeded SQL & MAC : underfined variables
|
|||
---|---|---|---|
#18+
drakut3) Отказаться от EmbedSQL, попробовать сделать все на динамических запросах. Использовать вот это ... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2014, 15:07 |
|
embeded SQL & MAC : underfined variables
|
|||
---|---|---|---|
#18+
drakutИ как будет выглядеть программа на INC ? Да так же, как и mac, только без препроцессорных команд... ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2014, 15:08 |
|
embeded SQL & MAC : underfined variables
|
|||
---|---|---|---|
#18+
drakutотвечаю на свой первый вопрос: публичные переменные задаются в квадратных скобках: Код: javascript 1. 2. 3. 4.
PUBLIC - это инструкция для процедуры, но не для переменных. Либо использовать "старый" синтаксис... Код: javascript 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2014, 15:10 |
|
embeded SQL & MAC : underfined variables
|
|||
---|---|---|---|
#18+
krvsa, спасибо, вы как всегда показатель оперативности и содержательности ответов ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2014, 15:18 |
|
embeded SQL & MAC : underfined variables
|
|||
---|---|---|---|
#18+
drakutИ как будет выглядеть программа на INC ? krvsaДа так же, как и mac, только без препроцессорных команд... Только, наверное, имелось в виду не INC, а INT :) ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2014, 16:36 |
|
embeded SQL & MAC : underfined variables
|
|||
---|---|---|---|
#18+
drakut , Host Variables and Procedure Blocks (в документации 5.0.21 поищите Caché SQL Reference -> Host variable) Соответственно пример кода test.mac для версии 5.0.21: new id,name,SQLCODE,%ROWCOUNT,%ROWID &sql(declare c1 cursor for select %ID, Name from Sample.Person where %ID in (1,2,3)) &sql(open c1) for { &sql(fetch c1 into :id,:name) quit:SQLCODE write id," ",name,! } &sql(close c1) test2() [id, name, SQLCODE] public { new id,name,SQLCODE,%ROWCOUNT,%ROWID &sql(declare c2 cursor for select %ID, Name from Sample.Person where %ID in (1,2,3)) &sql(open c2) for { &sql(fetch c2 into :id,:name) quit:SQLCODE write id," ",name,! } &sql(close c2) } test3() [SQLCODE,extinfo,sc] public { new SQLCODE,extinfo,sc,%ROWCOUNT,%ROWID set rs=##class(%ResultSet).%New("%DynamicQuery:SQL") do rs.Prepare("select %ID, Name from Sample.Person where %ID in (1,2,3)") do rs.Execute() while rs.Next() { write rs.Get("ID")," ",rs.Get("Name"),! } do rs.Close() }Все три варианта Код: plaintext 1. 2.
выдают одинаковый результат. После каждого вызова можно проверить все ли мы защищаем за собой переменные, вызвав write без аргументов: если что-то будет - повод задуматься. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.04.2014, 19:46 |
|
|
start [/forum/topic.php?fid=39&msg=38609972&tid=1556916]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
31ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
others: | 270ms |
total: | 403ms |
0 / 0 |