Имя поля, как параметр процедуры

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Bocman
Сообщения: 15
Зарегистрирован: 17 авг 2006, 10:38

Имя поля, как параметр процедуры

Сообщение Bocman » 18 авг 2006, 14:11

Помогите! Можно ли передать имя поля, как параметр процедуры, или записать запрос в varchar и выполнить. Использую InterBase 7.0. Пробовал сделать следующем образом:
FIELD_NAME = 'M1';
for execute statement 'Select '||FIELD_NAME||' from number'
into :FIELD
do
Не понимает execute

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 18 авг 2006, 14:19

нельзя. в IB 7 вообще нет execute statement. И с чего вы решили, что он там есть.
Насчет самого вопроса - у вас проблемы в консерватории. ТАК пытаться делать не надо. Я бы вообще пользоваться execute statement разрешал только после сдачи теста на http://course.ibase.ru.
http://course.ibase.ru/course/category.php?id=2

Bocman
Сообщения: 15
Зарегистрирован: 17 авг 2006, 10:38

Сообщение Bocman » 18 авг 2006, 14:54

А как же выйти из ситуации, у меня 24 поля и в зависимости от условия процедура выборка должна выбирать данные по одному из полей, а затем каждую запись обрабатывать

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 18 авг 2006, 15:57

Выбирай все 24, а потом обрабатывай по условию. Что, лень набрать 24 IFa?

Bocman
Сообщения: 15
Зарегистрирован: 17 авг 2006, 10:38

Сообщение Bocman » 18 авг 2006, 16:10

Конечно можно, но запрос достаточно большой, где то на страницу каждый, значит будет на 24 страницы. Хотелось бы упростить

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 18 авг 2006, 17:34

Код: Выделить всё

Конечно можно, но запрос достаточно большой
уже подозрительно. 24 if-а и прочее навевают мысли о запросе, где месяц проверяется через if. только месяцев 12.
это еще один признак, что ты пишешь не то и не так.

Merlin
Динозавр IB/FB
Сообщения: 1502
Зарегистрирован: 27 окт 2004, 11:44

Сообщение Merlin » 18 авг 2006, 17:48

Зато в сутках 24 часа :-D

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 18 авг 2006, 17:57

24 основных аккордов - 12 нот и минор\мажор ;)
Септ- нон-аккорды и прочую хрень пока не рассматриваем ;)

Bocman
Сообщения: 15
Зарегистрирован: 17 авг 2006, 10:38

Сообщение Bocman » 18 авг 2006, 18:19

В данном случае хранится определенная буква на каждый месяц за 2 года, нужно выбрать извесную букву на текущий или иной месяц

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 18 авг 2006, 18:51

А я уж подумал, что речь идёт про бутылки в ящике пива... :roll:
Не важно, о чём идёт речь, но описываемая конструкция слишком сложна, а значит, скорее всего, не имеет права на существование. Чуть больше информации о сути вопроса - и возьмусь помочь.

Bocman
Сообщения: 15
Зарегистрирован: 17 авг 2006, 10:38

Сообщение Bocman » 18 авг 2006, 19:57

В 24(план работ на 2 года) поля по средствам триггеров устанавливается вид производимой работы для экземпляра. Необходимо сделать отчет в котором указываются для группы экземпляров какие работы выполнились, не выполнелись, в каком состоянии и т.д. Главным критерием отбора кроме всего прочего является наличие в плане определенного вида работ, например буквы 'К'

Bocman
Сообщения: 15
Зарегистрирован: 17 авг 2006, 10:38

Сообщение Bocman » 19 авг 2006, 11:54

Да и еще в другом случае есть 12 полей int, каждое означает месяц, нужна сумма значений прошедших месяцев от текущего, например А1+А2... Пока я собрал запрос в приложении, а хотелось все сделать в процедуре

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 19 авг 2006, 15:22

иди лучше читай книжки по проектированию БД.

Bocman
Сообщения: 15
Зарегистрирован: 17 авг 2006, 10:38

Сообщение Bocman » 21 авг 2006, 08:23

Я думаю БД у меня спроектированна правильно, и если бы я все знал, я бы делал и не у кого бы не спрашивал.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 21 авг 2006, 08:58

а я думаю, что спроектирована неправильно. хотя тоже всего не знаю. знать все невозможно...

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 21 авг 2006, 10:24

Bocman писал(а):В 24(план работ на 2 года) поля по средствам триггеров устанавливается вид производимой работы для экземпляра.
Судя по всему, запихал в одну таблицу данные, которые бы в двух таблицах хранить. Реляционной моделью тут не пахнет :(

Bocman
Сообщения: 15
Зарегистрирован: 17 авг 2006, 10:38

Сообщение Bocman » 21 авг 2006, 10:25

В таблице находятся все приборы, связана она с другими таблицами (наименование, местонахождение и тд) как многие к одному.
в этой таблице есть 24 поля, означающие план работ на 2 года, в них указывается какие работы и в каком мясяце проводились или будут проводится (К-калибровка, т-технический осмотр и тд) расположение букв зависит от месяца последней работы и интервала выполнения, а так же при каких либо переносах работ (все изменения плана производится в триггерах при помощи UDF). Все работает нормально, только не знаю как в процедуре выбрать все приборы, у которых запланированна или выполнена (буква после выполнения остается) на запрошенный месяц
Последний раз редактировалось Bocman 21 авг 2006, 10:30, всего редактировалось 1 раз.

Bocman
Сообщения: 15
Зарегистрирован: 17 авг 2006, 10:38

Сообщение Bocman » 21 авг 2006, 10:27

Если эту таблицу и разбивать, то только на один к одному, так как план для каждого прибора в отдельности

WildSery
Заслуженный разработчик
Сообщения: 1738
Зарегистрирован: 05 июн 2006, 16:19

Сообщение WildSery » 21 авг 2006, 10:34

Во блин. Тяжёлый случай. Читать проектирование БД, однозначно!
Я тут вижу три таблицы слитые в одну.
1. Перечень приборов
2. Перечень работ
3. План работ

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 21 авг 2006, 10:34

а почему эти 24 поля не развернуты в таблицу ?

Ответить