Deem |
Отправлено: 30.04.2004, 17:20 |
|
Мастер участка
Группа: Участник
Сообщений: 327
|
Программа — сохраненная процедура. Сервер FBird 1.5
Короче, обращаюсь (вернее — хочу обратиться) к таблице, переданной в параметре TABLENAME (varchar). Модифицировать запрос можно только так:
STRING = 'SELECT CLIENTID FROM ' || TABLENAME || ' WHERE ID = :RECID '||
'INTO :CLIENTID ';
EXECUTE STATEMENT STRING;
Однако, фишка с INTO тут не проходит (ругается). В книжке пример с update, поэтому им легче. А мне надо полученную строку засунуть в переменную. Пока выхода не нашел.
Или может поскажете запрос с одновременным чтением одной таблицы и изменением другой?
|
|
olegenty |
Отправлено: 03.05.2004, 07:00 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
задачка, однако...
в MS SQL всё бы работало, а вот в Firebird (хотя у меня Yaffil), я этого никогда не делал, хотя текущий проект сдаю именно на нём. поэкспериментирую — скажу чё-нибудь.
|
|
Deem |
Отправлено: 05.05.2004, 14:21 |
|
Мастер участка
Группа: Участник
Сообщений: 327
|
Доку производителя читайте, дети.
EXECUTE STATEMENT string INTO :var1, ., :varn;
INTO в String вставлять нельзя. Он выносится наружу.
Да, тут уж я развернусь.
Отредактировано Deem — 05/05/2004, 15:25
|
|
olegenty |
Отправлено: 05.05.2004, 15:52 |
|
Ветеран
Группа: Модератор
Сообщений: 2412
|
зато теперь я тоже это знаю, а знать больше — лучше, чем знать меньше.
если в результате statement получается более одной записи, что происходит?
|
|
Deem |
Отправлено: 12.05.2004, 16:42 |
|
Мастер участка
Группа: Участник
Сообщений: 327
|
To Olegenty
А что будет, если не FOR, а просто SELECT .... INTO :A — несколько записей вернет ? Я не пробовал. И похоже, эта фигня E S только для SQL-запросов. Присвоение не проходит.
Тут другая фигня, рано я обрадовался. Весь запрос можно собрать (изменять) кроме INTO, который из переменной выносится!
А мне теперь данные нужно отправлять в разные переменные. Обрабатываю месяцы 12 штук. В цикле. Обрадовался, забабахал таблицу на 12 строк. Потом дошло, что другая проца (многопользование, однако) затрет данные, или прочтет не то, что положила. А может хваленая многоверсионность хранения данных в IB дадут прочитать каждому свои данные из одной таблицы? Каждая проца идт же по своей транзакции?
Все равно это фигня. Если не получится использовать в процедуре массив, то придется хороший кусок кода 12 раз писать(множить) для того, чтоб изменить в конце INTO M1 на INTO M2 ..... INTO M12.
Как, блин, тут выкрутиться? КТО ЗНАЕТ, МОЖНО ЛИ В ХП СДЕЛАТЬ ПЕРЕМЕННУЮ ТИПА МАССИВ?
Отредактировано Deem — 12/05/2004, 18:36
|
|
|