Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.16;
Скачать: CL | DM;

Вниз

Перекроить данные в запросе из записей в домены   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.062 c
14-1103965671
Rouse_
2004-12-25 12:07
2005.01.16
C Днем Рождения 25 Декабря


6-1098955413
Sp0k3r
2004-10-28 13:23
2005.01.16
IdHTTP1


14-1103795622
ISP
2004-12-23 12:53
2005.01.16
Весело у вас там в России...


14-1104272342
dmk
2004-12-29 01:19
2005.01.16
Купил недавно notebook Toshiba


1-1104369733
MagaSoft(1)
2004-12-30 04:22
2005.01.16
Тулбар в IE.