Форум: "Базы";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
ВнизПерекроить данные в запросе из записей в домены Найти похожие ветки
← →
PEAKTOP © (2004-12-12 00:02) [0]Уважаемые мастера !
Не сталкивался ли кто в проблемой перекройки данных из записей в домены в хранимых процедурах.
Например:
Путь имеются таблицы
Справоник "Работники" WORKERS
WORKER_ID INTEGER PRIMARY KEY
WORKER_SURNAME VARCHAR(255)
Справоник "Удержания" PAYMENTS
PAYMENT_ID INTEGER PRIMARY KEY
PAYMENT_NAME VARCHAR(255)
Регистр "Удержания с работников" (WORKER_PAYMENTS)
PAYMENT_MONTH SMALLINT Код месяца 1..12
WORKER_ID INTEGER FOREIGN KEY (WORKERS)
PAYMENT_ID INTEGER FOREIGN KEY (PAYMENTS)
PAYMENT_VALUE DECIMAL(15,3)
Требуется : Построить таблицу "Удержания с работников в 1 месяце" , в котрой строками в первом домене будут работники со справочника "работники", а остальными доменами строки со справочника "Удержания".
Когда клиенту сдавал прогу, создал ХП, в которую преобразования доменов в столбцы "зашил" статично. То есть, если добавиться новый элемент в справочник "Удержания", то процедуру придется ALTER.
А вот хотелось бы, чтобы выборка строилась динамично.
Никто не подскажет приемов выборок таких вот извратов ?
← →
Zacho © (2004-12-12 00:23) [1]Вообще-то домен в РСУБД это "тип" поля, т.ч. прекроить что-либо "из записей в домены", мягко говоря проблематично. Если уж не пользуешься общепринятой терминологией, то объясни, что такое у тебя "домен".
Подозреваю, что ты имел в виду построение кросс-запроса. Никаких встроенных средств для кросс-запросов в IB нет. Обычно или "разворачивают" результаты запроса на клиенте, или динамически формируют запрос. В FB 1.5 это вполне можно сделать и в ХП: сформировать текст запроса и выполнить его с помощью FOR EXECUTE STATEMENT .. INTO ..
← →
Zacho © (2004-12-12 00:40) [2]Да, я немного соврамши: не получится в ХП, т.к. количество полей в резалтсете может быть произвольным. Так что только на клиенте.
И всё-таки ещё раз объясни задачу более подробно, не используя термина "домен", или объясни его значение как ты понимаешь.
← →
PEAKTOP © (2004-12-12 17:21) [3]под "домен" я имел в виду DOMAIN.
В задаче требуется выбрать из регистра значения по одному из измерений (например, по дате: то есть значения в каком-либо месяце).
При этом требуется получить "сетку":
первый столбец строки в нем - элементы справочника "Работники".
остальные стобцы - заголовок - элементы справочника "Удержания"
на пересечении строк первого столбца и остальных столбцов - значения "VALUE" регистра "Удержания с работников".
------------------------
>> Zacho.
Как на клиенте сделать - вопрос не стоит. Хотелось бы при помощи ХП или запроса.
В Python-интерфейсе доступа к InterBase вообще есть куча стандартных библиотек, в которых не такие извраты крояться. НО - на клиенте (то есть, ресурсы WEB-сервака при этом тратяться).
← →
Zacho © (2004-12-12 17:53) [4]PEAKTOP © (12.12.04 17:21) [3]
под "домен" я имел в виду DOMAIN.
Я тоже :) А теперь попробуй объяснить, что такое "Перекроить данные в запросе из записей в домены" :) Как ты себе представляешь из данных сделать домен ? :)
> Хотелось бы при помощи ХП или запроса.
1 При помощи ХП - никак, ибо в ХП кол-во выходных параметров фиксированное.
2 Можно динамически формировать запрос на клиенте. Если хочешь, могу дать небольшой пример.
← →
Sergey_Masloff (2004-12-12 19:31) [5]Zacho © (12.12.04 17:53) [4]
>1 При помощи ХП - никак, ибо в ХП кол-во выходных параметров >фиксированное.
Возвращать всегда 1 параметр VARCHAR(XXX) в котором XML
<rows>
<row><fld1value></fld1value><fld1value></fld1value></row>
</rows>
xml разбирать на клиенте
← →
Zacho © (2004-12-12 20:19) [6]Sergey_Masloff (12.12.04 19:31) [5]
Да, тоже вариант.
← →
Sergey_Masloff (2004-12-12 20:40) [7]Zacho © (12.12.04 20:19) [6]
>Да, тоже вариант.
Хотя от оформления всего на клиенте отличается мало ;-)
← →
Zacho © (2004-12-12 21:01) [8]Zacho © (12.12.04 20:19) [6]
В смысле, хотел сказать: очень неплохой вариант. Были у меня подобные идеи, но до xml не додумался.
Sergey_Masloff (12.12.04 20:40) [7]
Хотя от оформления всего на клиенте отличается мало ;-)
Ну, иногда удобнее (в случае чего править только ХП, без перекомпиляции приложения) , а может, и шустрее :)
← →
Sergey_Masloff (2004-12-12 21:20) [9]Zacho © (12.12.04 21:01) [8]
Вариант с XML кстати я давно эксплуатирую, сначала это была только выгрузка данных для репликации с центральным сервером, потом печать (на клиента передается XML который клиентская самописная библиотека умеет понять и распечатать в Word и Excel. Естественно весь внешний вид документа задается черех XML атрибуты так что на клиенте нет никаких перекомпиляций) ну а потом и все отчеты перевел на ту же технологию.
Работает нормально с файлами и по несколько мег, да и десятков мег без проблем. Уже много лет так что вроде вообще никаких граблей.
← →
Johnen (2004-12-13 02:53) [10]Идея хранить содержимое документа как хмл имеет большое будущее...:)
← →
PEAKTOP © (2004-12-14 00:03) [11]>>Sergey_Masloff
Большое спасибо за мысль! Можете долго надо мной смеяться, но для меня это действительно прорыв.
Представить данные регистров в виде одного домена, но со списком всех значений, это дейсвительно в голову не приходило.
-------------------------------------
>> Zacho.
Я всего-лишь попытался обяснить задачу как можно проще. Азы (и не только азы) работы с ИнтерБазой и ЖарПтицей я знаю, и объяснять мне их не надо.
------------------------------------
Задача, по сути своей, тривиальная для тех людей, которые занимались приведением баз хотя бы ко второй нормальной форме (не говоря о третьей), и каждый из них хотя бы раз с ней сталкивался. Вполне понятно, что "в лоб" ее не решишь, и когда я задавал этот вопрос в форуме, меня интересовал какой-либо прием, при помощи которого эту задачу можно хотя бы упростить.
Своей цели я достиг, за что большое спасибо Sergey_Masloff. Вопрос считаю закрытым.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.038 c